@ohif/app 3.7.0-beta.25 → 3.7.0-beta.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/{270.bundle.19d379cc8b4776795c32.js → 270.bundle.a4ff08f18e3da39a030b.js} +14 -12
  2. package/dist/{331.bundle.7b724ef5f8a1b27d21fe.js → 331.bundle.0293a1135afc1a55d93c.js} +15 -12
  3. package/dist/{707.bundle.47de8980d30f4ee41c73.js → 707.bundle.ba3655251a4442bbcb18.js} +8 -14
  4. package/dist/{728.bundle.d13856835357400fef82.js → 728.bundle.75a919489af5ae4c237b.js} +2 -2
  5. package/dist/{82.bundle.12d25002fc323ed81314.js → 82.bundle.e48f22ba7f900e56383e.js} +2 -2
  6. package/dist/945.min.worker.js +1 -1
  7. package/dist/945.min.worker.js.map +1 -1
  8. package/dist/{app.bundle.6b99a46b70ec2b4a64c2.js → app.bundle.203dda69dddc56147baa.js} +4 -4
  9. package/dist/index.html +1 -1
  10. package/dist/sw.js +1 -1
  11. package/package.json +19 -19
  12. /package/dist/{192.bundle.dc6361af1983494c3d2d.js → 192.bundle.fb6e661de45037a636f5.js} +0 -0
  13. /package/dist/{199.bundle.1ec5510652519c0a93cb.js → 199.bundle.63de704cc561276bc0d5.js} +0 -0
  14. /package/dist/{208.bundle.4f98494e58cd0365c555.js → 208.bundle.3dd4609fd121a290a1f1.js} +0 -0
  15. /package/dist/{283.bundle.3e80c738ad4cd5f2ac4a.js → 283.bundle.4a24091c970ca817de01.js} +0 -0
  16. /package/dist/{404.bundle.c468246e842e3896aa28.js → 404.bundle.c4eab28f1007761faae9.js} +0 -0
  17. /package/dist/{50.bundle.a478eb6bc9a3760281b8.js → 50.bundle.04a9a1daef450364e824.js} +0 -0
  18. /package/dist/{616.bundle.4e5b67c90122c435faf2.js → 616.bundle.f1fc426048589e996e12.js} +0 -0
  19. /package/dist/{642.bundle.cee7372301854c7a0f87.js → 642.bundle.2631d6acc2cc19cf42f3.js} +0 -0
  20. /package/dist/{744.bundle.1242e152235472ba192b.js → 744.bundle.695d15f8266ca0673e75.js} +0 -0
  21. /package/dist/{790.bundle.fd6ef5854052475d6385.js → 790.bundle.d5af0c90d41395b9f99b.js} +0 -0
  22. /package/dist/{917.bundle.f229011a00038f099af7.js → 917.bundle.1f9af4234548428fb4c4.js} +0 -0
  23. /package/dist/{973.bundle.a241decc685496a22fa9.js → 973.bundle.22e7389b995114e48090.js} +0 -0
  24. /package/dist/{976.bundle.b9303cf50bf024e1354f.js → 976.bundle.aed5c3f3ecd8fa24f18f.js} +0 -0
  25. /package/dist/{984.bundle.e1679929a754f0000bb6.js → 984.bundle.cd77ebcc1a20916ca778.js} +0 -0
@@ -5561,7 +5561,7 @@ class AnnotationTool extends base_AnnotationDisplayTool {
5561
5561
  if (viewport instanceof esm.BaseVolumeViewport) {
5562
5562
  const volumeId = targetId.split('volumeId:')[1];
5563
5563
  const volume = esm.cache.getVolume(volumeId);
5564
- return volume.scaling?.PET !== undefined;
5564
+ return volume.scaling?.PT !== undefined;
5565
5565
  }
5566
5566
  else if (viewport instanceof esm.StackViewport) {
5567
5567
  const scalingModule = imageId && esm.metaData.get('scalingModule', imageId);
@@ -11985,10 +11985,10 @@ class ProbeTool extends base_AnnotationTool {
11985
11985
  const values = {};
11986
11986
  values['value'] = value;
11987
11987
  if (modality === 'PT' &&
11988
- imageVolume.scaling?.PET &&
11989
- (imageVolume.scaling.PET.suvbwToSuvbsa ||
11990
- imageVolume.scaling.PET.suvbwToSuvlbm)) {
11991
- const { suvbwToSuvlbm, suvbwToSuvbsa } = imageVolume.scaling.PET;
11988
+ imageVolume.scaling?.PT &&
11989
+ (imageVolume.scaling.PT.suvbwToSuvbsa ||
11990
+ imageVolume.scaling.PT.suvbwToSuvlbm)) {
11991
+ const { suvbwToSuvlbm, suvbwToSuvbsa } = imageVolume.scaling.PT;
11992
11992
  values['SUVBw'] = value;
11993
11993
  if (suvbwToSuvlbm) {
11994
11994
  const SUVLbm = value * suvbwToSuvlbm;
@@ -22863,21 +22863,23 @@ function createCameraPositionSynchronizer(synchronizerName) {
22863
22863
 
22864
22864
  function voiSyncCallback(synchronizerInstance, sourceViewport, targetViewport, voiModifiedEvent) {
22865
22865
  const eventDetail = voiModifiedEvent.detail;
22866
- const { volumeId, range } = eventDetail;
22866
+ const { volumeId, range, invertStateChanged, invert } = eventDetail;
22867
22867
  const renderingEngine = (0,esm.getRenderingEngine)(targetViewport.renderingEngineId);
22868
22868
  if (!renderingEngine) {
22869
22869
  throw new Error(`Rendering Engine does not exist: ${targetViewport.renderingEngineId}`);
22870
22870
  }
22871
22871
  const tViewport = renderingEngine.getViewport(targetViewport.viewportId);
22872
+ const tProperties = {
22873
+ voiRange: range,
22874
+ };
22875
+ if (invertStateChanged) {
22876
+ tProperties.invert = invert;
22877
+ }
22872
22878
  if (tViewport instanceof esm.VolumeViewport) {
22873
- tViewport.setProperties({
22874
- voiRange: range,
22875
- }, volumeId);
22879
+ tViewport.setProperties(tProperties, volumeId);
22876
22880
  }
22877
22881
  else if (tViewport instanceof esm.StackViewport) {
22878
- tViewport.setProperties({
22879
- voiRange: range,
22880
- });
22882
+ tViewport.setProperties(tProperties);
22881
22883
  }
22882
22884
  else {
22883
22885
  throw new Error('Viewport type not supported.');
@@ -2592,7 +2592,8 @@ let useSharedArrayBuffer = true;
2592
2592
  let sharedArrayBufferMode = enums_SharedArrayBufferModes.TRUE;
2593
2593
 
2594
2594
  const defaultConfig = {
2595
- detectGPU: {},
2595
+ gpuTier: undefined,
2596
+ detectGPUConfig: {},
2596
2597
  rendering: {
2597
2598
  useCPURendering: false,
2598
2599
  preferSizeOverAccuracy: false,
@@ -2601,7 +2602,8 @@ const defaultConfig = {
2601
2602
  },
2602
2603
  };
2603
2604
  let config = {
2604
- detectGPU: {},
2605
+ gpuTier: undefined,
2606
+ detectGPUConfig: {},
2605
2607
  rendering: {
2606
2608
  useCPURendering: false,
2607
2609
  preferSizeOverAccuracy: false,
@@ -2644,10 +2646,10 @@ async function init(configuration = {}) {
2644
2646
  config.rendering.useCPURendering = true;
2645
2647
  }
2646
2648
  else {
2647
- const gpuTier = await f();
2648
- config.detectGPU = gpuTier;
2649
- console.log('CornerstoneRender: Using detect-gpu to get the GPU benchmark:', gpuTier);
2650
- if (gpuTier.tier < 1) {
2649
+ config.gpuTier =
2650
+ config.gpuTier || (await f(config.detectGPUConfig));
2651
+ console.log('CornerstoneRender: Using detect-gpu to get the GPU benchmark:', config.gpuTier);
2652
+ if (config.gpuTier.tier < 1) {
2651
2653
  console.log('CornerstoneRender: GPU is not powerful enough, using CPU rendering');
2652
2654
  config.rendering.useCPURendering = true;
2653
2655
  }
@@ -26967,7 +26969,7 @@ class ImageVolume {
26967
26969
  constructor(props) {
26968
26970
  this._imageIdsIndexMap = new Map();
26969
26971
  this._imageURIsIndexMap = new Map();
26970
- this.isPrescaled = false;
26972
+ this.isPreScaled = false;
26971
26973
  this.volumeId = props.volumeId;
26972
26974
  this.metadata = props.metadata;
26973
26975
  this.dimensions = props.dimensions;
@@ -46553,6 +46555,7 @@ class BaseVolumeViewport extends RenderingEngine_Viewport {
46553
46555
  volumeId: volumeIdToUse,
46554
46556
  VOILUTFunction: this.VOILUTFunction,
46555
46557
  invert: this.inverted,
46558
+ invertStateChanged: true,
46556
46559
  };
46557
46560
  triggerEvent(this.element, enums_Events.VOI_MODIFIED, eventDetail);
46558
46561
  }
@@ -49035,18 +49038,18 @@ class StackViewport extends RenderingEngine_Viewport {
49035
49038
  triggerEvent(this.element, enums_Events.VOI_MODIFIED, eventDetail);
49036
49039
  }
49037
49040
  _addScalingToViewport(imageIdScalingFactor) {
49038
- if (this.scaling.PET) {
49041
+ if (this.scaling.PT) {
49039
49042
  return;
49040
49043
  }
49041
49044
  const { suvbw, suvlbm, suvbsa } = imageIdScalingFactor;
49042
- const petScaling = {};
49045
+ const ptScaling = {};
49043
49046
  if (suvlbm) {
49044
- petScaling.suvbwToSuvlbm = suvlbm / suvbw;
49047
+ ptScaling.suvbwToSuvlbm = suvlbm / suvbw;
49045
49048
  }
49046
49049
  if (suvbsa) {
49047
- petScaling.suvbwToSuvbsa = suvbsa / suvbw;
49050
+ ptScaling.suvbwToSuvbsa = suvbsa / suvbw;
49048
49051
  }
49049
- this.scaling.PET = petScaling;
49052
+ this.scaling.PT = ptScaling;
49050
49053
  }
49051
49054
  _getNumCompsFromPhotometricInterpretation(photometricInterpretation) {
49052
49055
  let numberOfComponents = 1;
@@ -3149,7 +3149,6 @@ function initDoubleClick(_ref) {
3149
3149
 
3150
3150
 
3151
3151
 
3152
-
3153
3152
  // TODO: Cypress tests are currently grabbing this from the window?
3154
3153
  window.cornerstone = esm;
3155
3154
  window.cornerstoneTools = dist_esm;
@@ -3184,10 +3183,7 @@ async function init(_ref) {
3184
3183
  esm.Settings.getRuntimeSettings().set('useCursors', Boolean(appConfig.useCursors));
3185
3184
  const {
3186
3185
  userAuthenticationService,
3187
- measurementService,
3188
3186
  customizationService,
3189
- displaySetService,
3190
- uiDialogService,
3191
3187
  uiModalService,
3192
3188
  uiNotificationService,
3193
3189
  cineService,
@@ -4876,15 +4872,13 @@ function commandsModule(_ref) {
4876
4872
  const {
4877
4873
  viewport
4878
4874
  } = enabledElement;
4879
- if (viewport instanceof esm.StackViewport) {
4880
- const {
4881
- invert
4882
- } = viewport.getProperties();
4883
- viewport.setProperties({
4884
- invert: !invert
4885
- });
4886
- viewport.render();
4887
- }
4875
+ const {
4876
+ invert
4877
+ } = viewport.getProperties();
4878
+ viewport.setProperties({
4879
+ invert: !invert
4880
+ });
4881
+ viewport.render();
4888
4882
  },
4889
4883
  resetViewport: () => {
4890
4884
  const enabledElement = _getActiveViewportEnabledElement();
@@ -5783,7 +5777,7 @@ class SyncGroupService {
5783
5777
  * @param type is the type of the synchronizer to create
5784
5778
  * @param creator
5785
5779
  */
5786
- setSynchronizer(type, creator) {
5780
+ addSynchronizerType(type, creator) {
5787
5781
  this.synchronizerCreators[type.toLowerCase()] = creator;
5788
5782
  }
5789
5783
  _getOrCreateSynchronizer(type, id, options) {
@@ -580,7 +580,7 @@ class BaseStreamingImageVolume_BaseStreamingImageVolume extends esm.ImageVolume
580
580
  }
581
581
  const isSlopeAndInterceptNumbers = typeof scalingParameters.rescaleSlope === 'number' &&
582
582
  typeof scalingParameters.rescaleIntercept === 'number';
583
- this.isPrescaled = isSlopeAndInterceptNumbers;
583
+ this.isPreScaled = isSlopeAndInterceptNumbers;
584
584
  const options = {
585
585
  targetBuffer: {
586
586
  arrayBuffer: arrayBuffer instanceof ArrayBuffer ? undefined : arrayBuffer,
@@ -763,7 +763,7 @@ class BaseStreamingImageVolume_BaseStreamingImageVolume extends esm.ImageVolume
763
763
  if (suvbw) {
764
764
  petScaling.suvbw = suvbw;
765
765
  }
766
- this.scaling = { PET: petScaling };
766
+ this.scaling = { PT: petScaling };
767
767
  }
768
768
  _removeFromCache() {
769
769
  esm.cache.removeVolumeLoadObject(this.volumeId);
@@ -2149,8 +2149,8 @@ function ViewerLayout(_ref) {
2149
2149
  hotkeyDefinitions,
2150
2150
  hotkeyDefaults
2151
2151
  } = hotkeysManager;
2152
- const versionNumber = "3.7.0-beta.25";
2153
- const commitHash = "c3c132d268d108f62e9c881e7c01e8e8e0db49fd";
2152
+ const versionNumber = "3.7.0-beta.27";
2153
+ const commitHash = "060085805510a046da3f5a5bb7dd2952e40d9b91";
2154
2154
  const menuOptions = [{
2155
2155
  title: t('Header:About'),
2156
2156
  icon: 'info',
@@ -1,2 +1,2 @@
1
- (self.webpackChunk=self.webpackChunk||[]).push([[945],{945:function(e,r){var n={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},o=function(){"use strict";var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),r=4017,o=799,a=3406,t=2276,s=1567,i=3784,c=5793,l=2896;function f(e,r){for(var n,o,a=0,t=[],s=16;s>0&&!e[s-1];)s--;t.push({children:[],index:0});var i,c=t[0];for(n=0;n<s;n++){for(o=0;o<e[n];o++){for((c=t.pop()).children[c.index]=r[a];c.index>0;)c=t.pop();for(c.index++,t.push(c);t.length<=n;)t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i;a++}n+1<s&&(t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i)}return t[0].children}function u(e,r,n){return 64*((e.blocksPerLine+1)*r+n)}function h(r,n,o,a,t,s,i,c,l){o.precision,o.samplesPerLine,o.scanLines;var f=o.mcusPerLine,h=o.progressive,b=(o.maxH,o.maxV,n),v=0,m=0;function p(){if(m>0)return m--,v>>m&1;if(255==(v=r[n++])){var e=r[n++];if(e)throw"unexpected marker: "+(v<<8|e).toString(16)}return m=7,v>>>7}function d(e){for(var r,n=e;null!==(r=p());){if("number"==typeof(n=n[r]))return n;if("object"!=typeof n)throw"invalid huffman sequence"}return null}function k(e){for(var r=0;e>0;){var n=p();if(null===n)return;r=r<<1|n,e--}return r}function w(e){var r=k(e);return r>=1<<e-1?r:r+(-1<<e)+1}var C=0;var P,g=0;function y(e,r,n,o,a){var t=n%f;r(e,u(e,(n/f|0)*e.v+o,t*e.h+a))}function D(e,r,n){r(e,u(e,n/e.blocksPerLine|0,n%e.blocksPerLine))}var L,x,T,A,U,I,q=a.length;I=h?0===s?0===c?function(e,r){var n=d(e.huffmanTableDC),o=0===n?0:w(n)<<l;e.blockData[r]=e.pred+=o}:function(e,r){e.blockData[r]|=p()<<l}:0===c?function(r,n){if(C>0)C--;else for(var o=s,a=i;o<=a;){var t=d(r.huffmanTableAC),c=15&t,f=t>>4;if(0!==c){var u=e[o+=f];r.blockData[n+u]=w(c)*(1<<l),o++}else{if(f<15){C=k(f)+(1<<f)-1;break}o+=16}}}:function(r,n){for(var o=s,a=i,t=0;o<=a;){var c=e[o];switch(g){case 0:var f=d(r.huffmanTableAC),u=15&f;if(t=f>>4,0===u)t<15?(C=k(t)+(1<<t),g=4):(t=16,g=1);else{if(1!==u)throw"invalid ACn encoding";P=w(u),g=t?2:3}continue;case 1:case 2:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:0==--t&&(g=2==g?3:0);break;case 3:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:(r.blockData[n+c]=P<<l,g=0);break;case 4:r.blockData[n+c]&&(r.blockData[n+c]+=p()<<l)}o++}4===g&&0==--C&&(g=0)}:function(r,n){var o=d(r.huffmanTableDC),a=0===o?0:w(o);r.blockData[n]=r.pred+=a;for(var t=1;t<64;){var s=d(r.huffmanTableAC),i=15&s,c=s>>4;if(0!==i){var l=e[t+=c];r.blockData[n+l]=w(i),t++}else{if(c<15)break;t+=16}}};var G,M,z,H,R=0;for(M=1==q?a[0].blocksPerLine*a[0].blocksPerColumn:f*o.mcusPerColumn,t||(t=M);R<M;){for(x=0;x<q;x++)a[x].pred=0;if(C=0,1==q)for(L=a[0],U=0;U<t;U++)D(L,I,R),R++;else for(U=0;U<t;U++){for(x=0;x<q;x++)for(z=(L=a[x]).h,H=L.v,T=0;T<H;T++)for(A=0;A<z;A++)y(L,I,R,T,A);R++}if(m=0,(G=r[n]<<8|r[n+1])<=65280)throw"marker was not found";if(!(G>=65488&&G<=65495))break;n+=2}return n-b}function b(e,n,f){var u,h,b,v,m,p,d,k,w,C,P=e.quantizationTable;for(C=0;C<64;C++)f[C]=e.blockData[n+C]*P[C];for(C=0;C<8;++C){var g=8*C;0!==f[1+g]||0!==f[2+g]||0!==f[3+g]||0!==f[4+g]||0!==f[5+g]||0!==f[6+g]||0!==f[7+g]?(u=c*f[0+g]+128>>8,h=c*f[4+g]+128>>8,b=f[2+g],v=f[6+g],m=l*(f[1+g]-f[7+g])+128>>8,k=l*(f[1+g]+f[7+g])+128>>8,p=f[3+g]<<4,d=f[5+g]<<4,w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+128>>8,b=b*s-v*i+128>>8,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+g]=u+k,f[7+g]=u-k,f[1+g]=h+d,f[6+g]=h-d,f[2+g]=b+p,f[5+g]=b-p,f[3+g]=v+m,f[4+g]=v-m):(w=c*f[0+g]+512>>10,f[0+g]=w,f[1+g]=w,f[2+g]=w,f[3+g]=w,f[4+g]=w,f[5+g]=w,f[6+g]=w,f[7+g]=w)}for(C=0;C<8;++C){var y=C;0!==f[8+y]||0!==f[16+y]||0!==f[24+y]||0!==f[32+y]||0!==f[40+y]||0!==f[48+y]||0!==f[56+y]?(u=c*f[0+y]+2048>>12,h=c*f[32+y]+2048>>12,b=f[16+y],v=f[48+y],m=l*(f[8+y]-f[56+y])+2048>>12,k=l*(f[8+y]+f[56+y])+2048>>12,p=f[24+y],d=f[40+y],w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+2048>>12,b=b*s-v*i+2048>>12,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+y]=u+k,f[56+y]=u-k,f[8+y]=h+d,f[48+y]=h-d,f[16+y]=b+p,f[40+y]=b-p,f[24+y]=v+m,f[32+y]=v-m):(w=c*f[C+0]+8192>>14,f[0+y]=w,f[8+y]=w,f[16+y]=w,f[24+y]=w,f[32+y]=w,f[40+y]=w,f[48+y]=w,f[56+y]=w)}for(C=0;C<64;++C){var D=n+C,L=f[C];L=L<=-2056/e.bitConversion?0:L>=2024/e.bitConversion?255/e.bitConversion:L+2056/e.bitConversion>>4,e.blockData[D]=L}}function v(e,r){for(var n=r.blocksPerLine,o=r.blocksPerColumn,a=new Int32Array(64),t=0;t<o;t++)for(var s=0;s<n;s++){b(r,u(r,t,s),a)}return r.blockData}function m(e){return e<=0?0:e>=255?255:0|e}return constructor.prototype={load:function(e){var r=function(e){this.parse(e),this.onload&&this.onload()}.bind(this);if(e.indexOf("data:")>-1){for(var n=e.indexOf("base64,")+7,o=atob(e.substring(n)),a=new Uint8Array(o.length),t=o.length-1;t>=0;t--)a[t]=o.charCodeAt(t);r(o)}else{var s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="arraybuffer",s.onload=function(){var e=new Uint8Array(s.response);r(e)}.bind(this),s.send(null)}},parse:function(r){function o(){var e=r[c]<<8|r[c+1];return c+=2,e}function a(){var e=o(),n=r.subarray(c,c+e-2);return c+=n.length,n}function t(e){for(var r=Math.ceil(e.samplesPerLine/8/e.maxH),n=Math.ceil(e.scanLines/8/e.maxV),o=0;o<e.components.length;o++){S=e.components[o];var a=Math.ceil(Math.ceil(e.samplesPerLine/8)*S.h/e.maxH),t=Math.ceil(Math.ceil(e.scanLines/8)*S.v/e.maxV),s=r*S.h,i=64*(n*S.v)*(s+1);S.blockData=new Int16Array(i),S.blocksPerLine=a,S.blocksPerColumn=t}e.mcusPerLine=r,e.mcusPerColumn=n}var s,i,c=0,l=(r.length,null),u=null,b=[],m=[],p=[],d=o();if(65496!=d)throw"SOI not found";for(d=o();65497!=d;){var k,w;switch(d){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var C=a();65504===d&&74===C[0]&&70===C[1]&&73===C[2]&&70===C[3]&&0===C[4]&&(l={version:{major:C[5],minor:C[6]},densityUnits:C[7],xDensity:C[8]<<8|C[9],yDensity:C[10]<<8|C[11],thumbWidth:C[12],thumbHeight:C[13],thumbData:C.subarray(14,14+3*C[12]*C[13])}),65518===d&&65===C[0]&&100===C[1]&&111===C[2]&&98===C[3]&&101===C[4]&&0===C[5]&&(u={version:C[6],flags0:C[7]<<8|C[8],flags1:C[9]<<8|C[10],transformCode:C[11]});break;case 65499:for(var P=o()+c-2;c<P;){var g=r[c++],y=new Int32Array(64);if(g>>4==0)for(k=0;k<64;k++){y[e[k]]=r[c++]}else{if(g>>4!=1)throw"DQT: invalid table spec";for(k=0;k<64;k++){y[e[k]]=o()}}b[15&g]=y}break;case 65472:case 65473:case 65474:if(s)throw"Only single frame JPEGs supported";o(),(s={}).extended=65473===d,s.progressive=65474===d,s.precision=r[c++],s.scanLines=o(),s.samplesPerLine=o(),s.components=[],s.componentIds={};var D,L=r[c++],x=0,T=0;for(J=0;J<L;J++){D=r[c];var A=r[c+1]>>4,U=15&r[c+1];x<A&&(x=A),T<U&&(T=U);var I=r[c+2];w=s.components.push({h:A,v:U,quantizationTable:b[I],quantizationTableId:I,bitConversion:255/((1<<s.precision)-1)}),s.componentIds[D]=w-1,c+=3}s.maxH=x,s.maxV=T,t(s);break;case 65476:var q=o();for(J=2;J<q;){var G=r[c++],M=new Uint8Array(16),z=0;for(k=0;k<16;k++,c++)z+=M[k]=r[c];var H=new Uint8Array(z);for(k=0;k<z;k++,c++)H[k]=r[c];J+=17+z,(G>>4==0?p:m)[15&G]=f(M,H)}break;case 65501:o(),i=o();break;case 65498:o();var R=r[c++],V=[];for(J=0;J<R;J++){var Y=s.componentIds[r[c++]];S=s.components[Y];var B=r[c++];S.huffmanTableDC=p[B>>4],S.huffmanTableAC=m[15&B],V.push(S)}var O=r[c++],X=r[c++],j=r[c++],E=h(r,c,s,V,i,O,X,j>>4,15&j);c+=E;break;case 65535:255!==r[c]&&c--;break;default:if(255==r[c-3]&&r[c-2]>=192&&r[c-2]<=254){c-=3;break}throw"unknown JPEG marker "+d.toString(16)}d=o()}switch(this.width=s.samplesPerLine,this.height=s.scanLines,this.jfif=l,this.adobe=u,this.components=[],s.components.length){case 1:this.colorspace=n.Grayscale;break;case 3:this.adobe?this.colorspace=n.AdobeRGB:this.colorspace=n.RGB;break;case 4:this.colorspace=n.CYMK;break;default:this.colorspace=n.Unknown}for(var J=0;J<s.components.length;J++){var S;(S=s.components[J]).quantizationTable||null===S.quantizationTableId||(S.quantizationTable=b[S.quantizationTableId]),this.components.push({output:v(0,S),scaleX:S.h/s.maxH,scaleY:S.v/s.maxV,blocksPerLine:S.blocksPerLine,blocksPerColumn:S.blocksPerColumn,bitConversion:S.bitConversion})}},getData16:function(e,r){if(1!==this.components.length)throw"Unsupported color mode";var n,o,a,t,s,i,c=this.width/e,l=this.height/r,f=0,h=this.components.length,b=new Uint16Array(e*r*h),v=new Uint16Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<h;i++){for(var m,p,d,k=(n=this.components[i]).blocksPerLine,w=n.blocksPerColumn,C=k<<3,P=0,g=0;g<w;g++)for(var y=g<<3,D=0;D<k;D++){var L=u(n,g,D),x=(f=0,D<<3);for(m=0;m<8;m++){P=(y+m)*C;for(p=0;p<8;p++)v[P+x+p]=n.output[L+f++]}}for(o=n.scaleX*c,a=n.scaleY*l,f=i,s=0;s<r;s++)for(t=0;t<e;t++)d=(0|s*a)*C+(0|t*o),b[f]=v[d],f+=h}return b},getData:function(e,r){var n,o,a,t,s,i,c,l,f,h,b,v,p,d,k,w=this.width/e,C=this.height/r,P=0,g=this.components.length,y=e*r*g,D=new Uint8Array(y),L=new Uint8Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<g;i++){for(var x,T,A,U=(n=this.components[i]).blocksPerLine,I=n.blocksPerColumn,q=U<<3,G=0,M=0;M<I;M++)for(var z=M<<3,H=0;H<U;H++){var R=u(n,M,H),V=(P=0,H<<3);for(x=0;x<8;x++){G=(z+x)*q;for(T=0;T<8;T++)L[G+V+T]=n.output[R+P++]*n.bitConversion}}for(o=n.scaleX*w,a=n.scaleY*C,P=i,s=0;s<r;s++)for(t=0;t<e;t++)A=(0|s*a)*q+(0|t*o),D[P]=L[A],P+=g}switch(g){case 1:case 2:break;case 3:if(k=!0,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],v=m(c-179.456+1.402*(f=D[i+2])),p=m(c+135.459-.344*l-.714*f),d=m(c-226.816+1.772*l),D[i]=v,D[i+1]=p,D[i+2]=d;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";if(k=!1,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],h=m(434.456-c-1.402*(f=D[i+2])),b=m(119.541-c+.344*l+.714*f),c=m(481.816-c-1.772*l),D[i]=h,D[i+1]=b,D[i+2]=c;break;default:throw"Unsupported color mode"}return D}},constructor}();e.exports={JpegImage:o}}}]);
1
+ (self.webpackChunk=self.webpackChunk||[]).push([[945],{945:function(e,r){var n={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},o=function(){"use strict";var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),r=4017,o=799,a=3406,t=2276,s=1567,i=3784,c=5793,l=2896;function f(e,r){for(var n,o,a=0,t=[],s=16;s>0&&!e[s-1];)s--;t.push({children:[],index:0});var i,c=t[0];for(n=0;n<s;n++){for(o=0;o<e[n];o++){for((c=t.pop()).children[c.index]=r[a];c.index>0;)c=t.pop();for(c.index++,t.push(c);t.length<=n;)t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i;a++}n+1<s&&(t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i)}return t[0].children}function u(e,r,n){return 64*((e.blocksPerLine+1)*r+n)}function h(r,n,o,a,t,s,i,c,l){o.precision,o.samplesPerLine,o.scanLines;var f=o.mcusPerLine,h=o.progressive,b=(o.maxH,o.maxV,n),v=0,m=0;function p(){if(m>0)return m--,v>>m&1;if(255==(v=r[n++])){var e=r[n++];if(e)throw"unexpected marker: "+(v<<8|e).toString(16)}return m=7,v>>>7}function d(e){for(var r,n=e;null!==(r=p());){if("number"==typeof(n=n[r]))return n;if("object"!=typeof n)throw"invalid huffman sequence"}return null}function k(e){for(var r=0;e>0;){var n=p();if(null===n)return;r=r<<1|n,e--}return r}function w(e){var r=k(e);return r>=1<<e-1?r:r+(-1<<e)+1}var C=0;var P,g=0;function y(e,r,n,o,a){var t=n%f;r(e,u(e,(n/f|0)*e.v+o,t*e.h+a))}function D(e,r,n){r(e,u(e,n/e.blocksPerLine|0,n%e.blocksPerLine))}var L,x,T,A,U,I,q=a.length;I=h?0===s?0===c?function(e,r){var n=d(e.huffmanTableDC),o=0===n?0:w(n)<<l;e.blockData[r]=e.pred+=o}:function(e,r){e.blockData[r]|=p()<<l}:0===c?function(r,n){if(C>0)C--;else for(var o=s,a=i;o<=a;){var t=d(r.huffmanTableAC),c=15&t,f=t>>4;if(0!==c){var u=e[o+=f];r.blockData[n+u]=w(c)*(1<<l),o++}else{if(f<15){C=k(f)+(1<<f)-1;break}o+=16}}}:function(r,n){for(var o=s,a=i,t=0;o<=a;){var c=e[o];switch(g){case 0:var f=d(r.huffmanTableAC),u=15&f;if(t=f>>4,0===u)t<15?(C=k(t)+(1<<t),g=4):(t=16,g=1);else{if(1!==u)throw"invalid ACn encoding";P=w(u),g=t?2:3}continue;case 1:case 2:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:0==--t&&(g=2==g?3:0);break;case 3:r.blockData[n+c]?r.blockData[n+c]+=p()<<l:(r.blockData[n+c]=P<<l,g=0);break;case 4:r.blockData[n+c]&&(r.blockData[n+c]+=p()<<l)}o++}4===g&&0==--C&&(g=0)}:function(r,n){var o=d(r.huffmanTableDC),a=0===o?0:w(o);r.blockData[n]=r.pred+=a;for(var t=1;t<64;){var s=d(r.huffmanTableAC),i=15&s,c=s>>4;if(0!==i){var l=e[t+=c];r.blockData[n+l]=w(i),t++}else{if(c<15)break;t+=16}}};var G,M,z,H,O=0;for(M=1==q?a[0].blocksPerLine*a[0].blocksPerColumn:f*o.mcusPerColumn,t||(t=M);O<M;){for(x=0;x<q;x++)a[x].pred=0;if(C=0,1==q)for(L=a[0],U=0;U<t;U++)D(L,I,O),O++;else for(U=0;U<t;U++){for(x=0;x<q;x++)for(z=(L=a[x]).h,H=L.v,T=0;T<H;T++)for(A=0;A<z;A++)y(L,I,O,T,A);O++}if(m=0,(G=r[n]<<8|r[n+1])<=65280)throw"marker was not found";if(!(G>=65488&&G<=65495))break;n+=2}return n-b}function b(e,n,f){var u,h,b,v,m,p,d,k,w,C,P=e.quantizationTable;for(C=0;C<64;C++)f[C]=e.blockData[n+C]*P[C];for(C=0;C<8;++C){var g=8*C;0!==f[1+g]||0!==f[2+g]||0!==f[3+g]||0!==f[4+g]||0!==f[5+g]||0!==f[6+g]||0!==f[7+g]?(u=c*f[0+g]+128>>8,h=c*f[4+g]+128>>8,b=f[2+g],v=f[6+g],m=l*(f[1+g]-f[7+g])+128>>8,k=l*(f[1+g]+f[7+g])+128>>8,p=f[3+g]<<4,d=f[5+g]<<4,w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+128>>8,b=b*s-v*i+128>>8,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+g]=u+k,f[7+g]=u-k,f[1+g]=h+d,f[6+g]=h-d,f[2+g]=b+p,f[5+g]=b-p,f[3+g]=v+m,f[4+g]=v-m):(w=c*f[0+g]+512>>10,f[0+g]=w,f[1+g]=w,f[2+g]=w,f[3+g]=w,f[4+g]=w,f[5+g]=w,f[6+g]=w,f[7+g]=w)}for(C=0;C<8;++C){var y=C;0!==f[8+y]||0!==f[16+y]||0!==f[24+y]||0!==f[32+y]||0!==f[40+y]||0!==f[48+y]||0!==f[56+y]?(u=c*f[0+y]+2048>>12,h=c*f[32+y]+2048>>12,b=f[16+y],v=f[48+y],m=l*(f[8+y]-f[56+y])+2048>>12,k=l*(f[8+y]+f[56+y])+2048>>12,p=f[24+y],d=f[40+y],w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+2048>>12,b=b*s-v*i+2048>>12,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*r+2048>>12,p=p*r-d*o+2048>>12,d=w,f[0+y]=u+k,f[56+y]=u-k,f[8+y]=h+d,f[48+y]=h-d,f[16+y]=b+p,f[40+y]=b-p,f[24+y]=v+m,f[32+y]=v-m):(w=c*f[C+0]+8192>>14,f[0+y]=w,f[8+y]=w,f[16+y]=w,f[24+y]=w,f[32+y]=w,f[40+y]=w,f[48+y]=w,f[56+y]=w)}for(C=0;C<64;++C){var D=n+C,L=f[C];L=L<=-2056/e.bitConversion?0:L>=2024/e.bitConversion?255/e.bitConversion:L+2056/e.bitConversion>>4,e.blockData[D]=L}}function v(e,r){for(var n=r.blocksPerLine,o=r.blocksPerColumn,a=new Int32Array(64),t=0;t<o;t++)for(var s=0;s<n;s++){b(r,u(r,t,s),a)}return r.blockData}function m(e){return e<=0?0:e>=255?255:0|e}class p{}return Object.setPrototypeOf(p.prototype,{load:function(e){var r=function(e){this.parse(e),this.onload&&this.onload()}.bind(this);if(e.indexOf("data:")>-1){for(var n=e.indexOf("base64,")+7,o=atob(e.substring(n)),a=new Uint8Array(o.length),t=o.length-1;t>=0;t--)a[t]=o.charCodeAt(t);r(o)}else{var s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="arraybuffer",s.onload=function(){var e=new Uint8Array(s.response);r(e)}.bind(this),s.send(null)}},parse:function(r){function o(){var e=r[c]<<8|r[c+1];return c+=2,e}function a(){var e=o(),n=r.subarray(c,c+e-2);return c+=n.length,n}function t(e){for(var r=Math.ceil(e.samplesPerLine/8/e.maxH),n=Math.ceil(e.scanLines/8/e.maxV),o=0;o<e.components.length;o++){S=e.components[o];var a=Math.ceil(Math.ceil(e.samplesPerLine/8)*S.h/e.maxH),t=Math.ceil(Math.ceil(e.scanLines/8)*S.v/e.maxV),s=r*S.h,i=64*(n*S.v)*(s+1);S.blockData=new Int16Array(i),S.blocksPerLine=a,S.blocksPerColumn=t}e.mcusPerLine=r,e.mcusPerColumn=n}var s,i,c=0,l=(r.length,null),u=null,b=[],m=[],p=[],d=o();if(65496!=d)throw"SOI not found";for(d=o();65497!=d;){var k,w;switch(d){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var C=a();65504===d&&74===C[0]&&70===C[1]&&73===C[2]&&70===C[3]&&0===C[4]&&(l={version:{major:C[5],minor:C[6]},densityUnits:C[7],xDensity:C[8]<<8|C[9],yDensity:C[10]<<8|C[11],thumbWidth:C[12],thumbHeight:C[13],thumbData:C.subarray(14,14+3*C[12]*C[13])}),65518===d&&65===C[0]&&100===C[1]&&111===C[2]&&98===C[3]&&101===C[4]&&0===C[5]&&(u={version:C[6],flags0:C[7]<<8|C[8],flags1:C[9]<<8|C[10],transformCode:C[11]});break;case 65499:for(var P=o()+c-2;c<P;){var g=r[c++],y=new Int32Array(64);if(g>>4==0)for(k=0;k<64;k++){y[e[k]]=r[c++]}else{if(g>>4!=1)throw"DQT: invalid table spec";for(k=0;k<64;k++){y[e[k]]=o()}}b[15&g]=y}break;case 65472:case 65473:case 65474:if(s)throw"Only single frame JPEGs supported";o(),(s={}).extended=65473===d,s.progressive=65474===d,s.precision=r[c++],s.scanLines=o(),s.samplesPerLine=o(),s.components=[],s.componentIds={};var D,L=r[c++],x=0,T=0;for(J=0;J<L;J++){D=r[c];var A=r[c+1]>>4,U=15&r[c+1];x<A&&(x=A),T<U&&(T=U);var I=r[c+2];w=s.components.push({h:A,v:U,quantizationTable:b[I],quantizationTableId:I,bitConversion:255/((1<<s.precision)-1)}),s.componentIds[D]=w-1,c+=3}s.maxH=x,s.maxV=T,t(s);break;case 65476:var q=o();for(J=2;J<q;){var G=r[c++],M=new Uint8Array(16),z=0;for(k=0;k<16;k++,c++)z+=M[k]=r[c];var H=new Uint8Array(z);for(k=0;k<z;k++,c++)H[k]=r[c];J+=17+z,(G>>4==0?p:m)[15&G]=f(M,H)}break;case 65501:o(),i=o();break;case 65498:o();var O=r[c++],R=[];for(J=0;J<O;J++){var V=s.componentIds[r[c++]];S=s.components[V];var Y=r[c++];S.huffmanTableDC=p[Y>>4],S.huffmanTableAC=m[15&Y],R.push(S)}var j=r[c++],B=r[c++],X=r[c++],E=h(r,c,s,R,i,j,B,X>>4,15&X);c+=E;break;case 65535:255!==r[c]&&c--;break;default:if(255==r[c-3]&&r[c-2]>=192&&r[c-2]<=254){c-=3;break}throw"unknown JPEG marker "+d.toString(16)}d=o()}switch(this.width=s.samplesPerLine,this.height=s.scanLines,this.jfif=l,this.adobe=u,this.components=[],s.components.length){case 1:this.colorspace=n.Grayscale;break;case 3:this.adobe?this.colorspace=n.AdobeRGB:this.colorspace=n.RGB;break;case 4:this.colorspace=n.CYMK;break;default:this.colorspace=n.Unknown}for(var J=0;J<s.components.length;J++){var S;(S=s.components[J]).quantizationTable||null===S.quantizationTableId||(S.quantizationTable=b[S.quantizationTableId]),this.components.push({output:v(0,S),scaleX:S.h/s.maxH,scaleY:S.v/s.maxV,blocksPerLine:S.blocksPerLine,blocksPerColumn:S.blocksPerColumn,bitConversion:S.bitConversion})}},getData16:function(e,r){if(1!==this.components.length)throw"Unsupported color mode";var n,o,a,t,s,i,c=this.width/e,l=this.height/r,f=0,h=this.components.length,b=new Uint16Array(e*r*h),v=new Uint16Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<h;i++){for(var m,p,d,k=(n=this.components[i]).blocksPerLine,w=n.blocksPerColumn,C=k<<3,P=0,g=0;g<w;g++)for(var y=g<<3,D=0;D<k;D++){var L=u(n,g,D),x=(f=0,D<<3);for(m=0;m<8;m++){P=(y+m)*C;for(p=0;p<8;p++)v[P+x+p]=n.output[L+f++]}}for(o=n.scaleX*c,a=n.scaleY*l,f=i,s=0;s<r;s++)for(t=0;t<e;t++)d=(0|s*a)*C+(0|t*o),b[f]=v[d],f+=h}return b},getData:function(e,r){var n,o,a,t,s,i,c,l,f,h,b,v,p,d,k,w=this.width/e,C=this.height/r,P=0,g=this.components.length,y=e*r*g,D=new Uint8Array(y),L=new Uint8Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<g;i++){for(var x,T,A,U=(n=this.components[i]).blocksPerLine,I=n.blocksPerColumn,q=U<<3,G=0,M=0;M<I;M++)for(var z=M<<3,H=0;H<U;H++){var O=u(n,M,H),R=(P=0,H<<3);for(x=0;x<8;x++){G=(z+x)*q;for(T=0;T<8;T++)L[G+R+T]=n.output[O+P++]*n.bitConversion}}for(o=n.scaleX*w,a=n.scaleY*C,P=i,s=0;s<r;s++)for(t=0;t<e;t++)A=(0|s*a)*q+(0|t*o),D[P]=L[A],P+=g}switch(g){case 1:case 2:break;case 3:if(k=!0,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],v=m(c-179.456+1.402*(f=D[i+2])),p=m(c+135.459-.344*l-.714*f),d=m(c-226.816+1.772*l),D[i]=v,D[i+1]=p,D[i+2]=d;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";if(k=!1,this.adobe&&this.adobe.transformCode?k=!0:void 0!==this.colorTransform&&(k=!!this.colorTransform),k)for(i=0;i<y;i+=g)c=D[i],l=D[i+1],h=m(434.456-c-1.402*(f=D[i+2])),b=m(119.541-c+.344*l+.714*f),c=m(481.816-c-1.772*l),D[i]=h,D[i+1]=b,D[i+2]=c;break;default:throw"Unsupported color mode"}return D}}),p}();e.exports={JpegImage:o}}}]);
2
2
  //# sourceMappingURL=945.min.worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"945.min.worker.js","mappings":"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","sources":["webpack:///../codecs/jpeg.js"],"sourcesContent":["// jshint ignore: start\n/* eslint-disable */\n\n/*\n Copyright 2011 notmasteryet\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\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n// (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n// (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n// in PostScript Level 2, Technical Note #5116\n// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar ColorSpace = { Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4 };\nvar JpegImage = (function jpegImage() {\n 'use strict';\n var dctZigZag = new Int32Array([\n 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40,\n 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36,\n 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61,\n 54, 47, 55, 62, 63,\n ]);\n\n var dctCos1 = 4017; // cos(pi/16)\n var dctSin1 = 799; // sin(pi/16)\n var dctCos3 = 3406; // cos(3*pi/16)\n var dctSin3 = 2276; // sin(3*pi/16)\n var dctCos6 = 1567; // cos(6*pi/16)\n var dctSin6 = 3784; // sin(6*pi/16)\n var dctSqrt2 = 5793; // sqrt(2)\n var dctSqrt1d2 = 2896; // sqrt(2) / 2\n\n function buildHuffmanTable(codeLengths, values) {\n var k = 0,\n code = [],\n i,\n j,\n length = 16;\n while (length > 0 && !codeLengths[length - 1]) length--;\n code.push({ children: [], index: 0 });\n var p = code[0],\n q;\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n while (p.index > 0) {\n p = code.pop();\n }\n p.index++;\n code.push(p);\n while (code.length <= i) {\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n k++;\n }\n if (i + 1 < length) {\n // p here points to last code\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n }\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successivePrev,\n successive\n ) {\n var precision = frame.precision;\n var samplesPerLine = frame.samplesPerLine;\n var scanLines = frame.scanLines;\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n var maxH = frame.maxH,\n maxV = frame.maxV;\n\n var startOffset = offset,\n bitsData = 0,\n bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return (bitsData >> bitsCount) & 1;\n }\n bitsData = data[offset++];\n if (bitsData == 0xff) {\n var nextByte = data[offset++];\n if (nextByte) {\n throw (\n 'unexpected marker: ' + ((bitsData << 8) | nextByte).toString(16)\n );\n }\n // unstuff 0\n }\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n var bit;\n while ((bit = readBit()) !== null) {\n node = node[bit];\n if (typeof node === 'number') return node;\n if (typeof node !== 'object') throw 'invalid huffman sequence';\n }\n return null;\n }\n\n function receive(length) {\n var n = 0;\n while (length > 0) {\n var bit = readBit();\n if (bit === null) return;\n n = (n << 1) | bit;\n length--;\n }\n return n;\n }\n\n function receiveAndExtend(length) {\n var n = receive(length);\n if (n >= 1 << (length - 1)) return n;\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[offset] = component.pred += diff;\n var k = 1;\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) break;\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n component.blockData[offset] = component.pred += diff;\n }\n\n function decodeDCSuccessive(component, offset) {\n component.blockData[offset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n function decodeACFirst(component, offset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n var k = spectralStart,\n e = spectralEnd;\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] =\n receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0,\n successiveACNextValue;\n function decodeACSuccessive(component, offset) {\n var k = spectralStart,\n e = spectralEnd,\n r = 0;\n while (k <= e) {\n var z = dctZigZag[k];\n switch (successiveACState) {\n case 0: // initial state\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15;\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1) throw 'invalid ACn encoding';\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n continue;\n case 1: // skipping r zero items\n case 2:\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n r--;\n if (r === 0) successiveACState = successiveACState == 2 ? 3 : 0;\n }\n break;\n case 3: // set value for a zero item\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n component.blockData[offset + z] =\n successiveACNextValue << successive;\n successiveACState = 0;\n }\n break;\n case 4: // eob\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n }\n break;\n }\n k++;\n }\n if (successiveACState === 4) {\n eobrun--;\n if (eobrun === 0) successiveACState = 0;\n }\n }\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = (mcu / mcusPerLine) | 0;\n var mcuCol = mcu % mcusPerLine;\n var blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n function decodeBlock(component, decode, mcu) {\n var blockRow = (mcu / component.blocksPerLine) | 0;\n var blockCol = mcu % component.blocksPerLine;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n if (progressive) {\n if (spectralStart === 0)\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n else decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0,\n marker;\n var mcuExpected;\n if (componentsLength == 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n if (!resetInterval) {\n resetInterval = mcuExpected;\n }\n\n var h, v;\n while (mcu < mcuExpected) {\n // reset interval stuff\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n eobrun = 0;\n\n if (componentsLength == 1) {\n component = components[0];\n for (n = 0; n < resetInterval; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < resetInterval; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n mcu++;\n }\n }\n\n // find marker\n bitsCount = 0;\n marker = (data[offset] << 8) | data[offset + 1];\n if (marker <= 0xff00) {\n throw 'marker was not found';\n }\n\n if (marker >= 0xffd0 && marker <= 0xffd7) {\n // RSTx\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n // A port of poppler's IDCT method which in turn is taken from:\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n // 988-991.\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable;\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\n var i;\n\n // dequant\n for (i = 0; i < 64; i++) {\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\n }\n\n // inverse DCT on rows\n for (i = 0; i < 8; ++i) {\n var row = 8 * i;\n\n // check for all-zero AC coefficients\n if (\n p[1 + row] === 0 &&\n p[2 + row] === 0 &&\n p[3 + row] === 0 &&\n p[4 + row] === 0 &&\n p[5 + row] === 0 &&\n p[6 + row] === 0 &&\n p[7 + row] === 0\n ) {\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n p[0 + row] = t;\n p[1 + row] = t;\n p[2 + row] = t;\n p[3 + row] = t;\n p[4 + row] = t;\n p[5 + row] = t;\n p[6 + row] = t;\n p[7 + row] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n v2 = p[2 + row];\n v3 = p[6 + row];\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n v5 = p[3 + row] << 4;\n v6 = p[5 + row] << 4;\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 + row] = v0 + v7;\n p[7 + row] = v0 - v7;\n p[1 + row] = v1 + v6;\n p[6 + row] = v1 - v6;\n p[2 + row] = v2 + v5;\n p[5 + row] = v2 - v5;\n p[3 + row] = v3 + v4;\n p[4 + row] = v3 - v4;\n }\n\n // inverse DCT on columns\n for (i = 0; i < 8; ++i) {\n var col = i;\n\n // check for all-zero AC coefficients\n if (\n p[1 * 8 + col] === 0 &&\n p[2 * 8 + col] === 0 &&\n p[3 * 8 + col] === 0 &&\n p[4 * 8 + col] === 0 &&\n p[5 * 8 + col] === 0 &&\n p[6 * 8 + col] === 0 &&\n p[7 * 8 + col] === 0\n ) {\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\n p[0 * 8 + col] = t;\n p[1 * 8 + col] = t;\n p[2 * 8 + col] = t;\n p[3 * 8 + col] = t;\n p[4 * 8 + col] = t;\n p[5 * 8 + col] = t;\n p[6 * 8 + col] = t;\n p[7 * 8 + col] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\n v2 = p[2 * 8 + col];\n v3 = p[6 * 8 + col];\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\n v5 = p[3 * 8 + col];\n v6 = p[5 * 8 + col];\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 * 8 + col] = v0 + v7;\n p[7 * 8 + col] = v0 - v7;\n p[1 * 8 + col] = v1 + v6;\n p[6 * 8 + col] = v1 - v6;\n p[2 * 8 + col] = v2 + v5;\n p[5 * 8 + col] = v2 - v5;\n p[3 * 8 + col] = v3 + v4;\n p[4 * 8 + col] = v3 - v4;\n }\n\n // convert to 8-bit integers\n for (i = 0; i < 64; ++i) {\n var index = blockBufferOffset + i;\n var q = p[i];\n q =\n q <= -2056 / component.bitConversion\n ? 0\n : q >= 2024 / component.bitConversion\n ? 255 / component.bitConversion\n : (q + 2056 / component.bitConversion) >> 4;\n component.blockData[index] = q;\n }\n }\n\n function buildComponentData(frame, component) {\n var lines = [];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n var computationBuffer = new Int32Array(64);\n\n var i,\n j,\n ll = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n return component.blockData;\n }\n\n function clampToUint8(a) {\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\n }\n\n constructor.prototype = {\n load: function load(path) {\n var handleData = function (data) {\n this.parse(data);\n if (this.onload) this.onload();\n }.bind(this);\n\n if (path.indexOf('data:') > -1) {\n var offset = path.indexOf('base64,') + 7;\n var data = atob(path.substring(offset));\n var arr = new Uint8Array(data.length);\n for (var i = data.length - 1; i >= 0; i--) {\n arr[i] = data.charCodeAt(i);\n }\n handleData(data);\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = function () {\n // TODO catch parse error\n var data = new Uint8Array(xhr.response);\n handleData(data);\n }.bind(this);\n xhr.send(null);\n }\n },\n parse: function parse(data) {\n function readUint16() {\n var value = (data[offset] << 8) | data[offset + 1];\n offset += 2;\n return value;\n }\n\n function readDataBlock() {\n var length = readUint16();\n var array = data.subarray(offset, offset + length - 2);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(\n (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH\n );\n var blocksPerColumn = Math.ceil(\n (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV\n );\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n var blocksBufferSize =\n 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0,\n length = data.length;\n var jfif = null;\n var adobe = null;\n var pixels = null;\n var frame, resetInterval;\n var quantizationTables = [];\n var huffmanTablesAC = [],\n huffmanTablesDC = [];\n var fileMarker = readUint16();\n if (fileMarker != 0xffd8) {\n // SOI (Start of Image)\n throw 'SOI not found';\n }\n\n fileMarker = readUint16();\n while (fileMarker != 0xffd9) {\n // EOI (End of image)\n var i, j, l;\n switch (fileMarker) {\n case 0xffe0: // APP0 (Application Specific)\n case 0xffe1: // APP1\n case 0xffe2: // APP2\n case 0xffe3: // APP3\n case 0xffe4: // APP4\n case 0xffe5: // APP5\n case 0xffe6: // APP6\n case 0xffe7: // APP7\n case 0xffe8: // APP8\n case 0xffe9: // APP9\n case 0xffea: // APP10\n case 0xffeb: // APP11\n case 0xffec: // APP12\n case 0xffed: // APP13\n case 0xffee: // APP14\n case 0xffef: // APP15\n case 0xfffe: // COM (Comment)\n var appData = readDataBlock();\n\n if (fileMarker === 0xffe0) {\n if (\n appData[0] === 0x4a &&\n appData[1] === 0x46 &&\n appData[2] === 0x49 &&\n appData[3] === 0x46 &&\n appData[4] === 0\n ) {\n // 'JFIF\\x00'\n jfif = {\n version: { major: appData[5], minor: appData[6] },\n densityUnits: appData[7],\n xDensity: (appData[8] << 8) | appData[9],\n yDensity: (appData[10] << 8) | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(\n 14,\n 14 + 3 * appData[12] * appData[13]\n ),\n };\n }\n }\n // TODO APP1 - Exif\n if (fileMarker === 0xffee) {\n if (\n appData[0] === 0x41 &&\n appData[1] === 0x64 &&\n appData[2] === 0x6f &&\n appData[3] === 0x62 &&\n appData[4] === 0x65 &&\n appData[5] === 0\n ) {\n // 'Adobe\\x00'\n adobe = {\n version: appData[6],\n flags0: (appData[7] << 8) | appData[8],\n flags1: (appData[9] << 8) | appData[10],\n transformCode: appData[11],\n };\n }\n }\n break;\n\n case 0xffdb: // DQT (Define Quantization Tables)\n var quantizationTablesLength = readUint16();\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Int32Array(64);\n if (quantizationTableSpec >> 4 === 0) {\n // 8 bit values\n for (j = 0; j < 64; j++) {\n var z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if (quantizationTableSpec >> 4 === 1) {\n //16 bit\n for (j = 0; j < 64; j++) {\n var zz = dctZigZag[j];\n tableData[zz] = readUint16();\n }\n } else throw 'DQT: invalid table spec';\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n break;\n\n case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n if (frame) {\n throw 'Only single frame JPEGs supported';\n }\n readUint16(); // skip data length\n frame = {};\n frame.extended = fileMarker === 0xffc1;\n frame.progressive = fileMarker === 0xffc2;\n frame.precision = data[offset++];\n frame.scanLines = readUint16();\n frame.samplesPerLine = readUint16();\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++],\n componentId;\n var maxH = 0,\n maxV = 0;\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n if (maxH < h) maxH = h;\n if (maxV < v) maxV = v;\n var qId = data[offset + 2];\n l = frame.components.push({\n h: h,\n v: v,\n quantizationTable: quantizationTables[qId],\n quantizationTableId: qId,\n bitConversion: 255 / ((1 << frame.precision) - 1),\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xffc4: // DHT (Define Huffman Tables)\n var huffmanLength = readUint16();\n for (i = 2; i < huffmanLength; ) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n for (j = 0; j < 16; j++, offset++)\n codeLengthSum += codeLengths[j] = data[offset];\n var huffmanValues = new Uint8Array(codeLengthSum);\n for (j = 0; j < codeLengthSum; j++, offset++)\n huffmanValues[j] = data[offset];\n i += 17 + codeLengthSum;\n\n (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[\n huffmanTableSpec & 15\n ] = buildHuffmanTable(codeLengths, huffmanValues);\n }\n break;\n\n case 0xffdd: // DRI (Define Restart Interval)\n readUint16(); // skip data length\n resetInterval = readUint16();\n break;\n\n case 0xffda: // SOS (Start of Scan)\n var scanLength = readUint16();\n var selectorsCount = data[offset++];\n var components = [],\n component;\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n var processed = decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successiveApproximation >> 4,\n successiveApproximation & 15\n );\n offset += processed;\n break;\n case 0xffff: // Fill bytes\n if (data[offset] !== 0xff) {\n // Avoid skipping a valid marker.\n offset--;\n }\n break;\n default:\n if (\n data[offset - 3] == 0xff &&\n data[offset - 2] >= 0xc0 &&\n data[offset - 2] <= 0xfe\n ) {\n // could be incorrect encoding -- last 0xFF byte of the previous\n // block was eaten by the encoder\n offset -= 3;\n break;\n }\n throw 'unknown JPEG marker ' + fileMarker.toString(16);\n }\n fileMarker = readUint16();\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n switch (frame.components.length) {\n case 1:\n this.colorspace = ColorSpace.Grayscale;\n break;\n case 3:\n if (this.adobe) this.colorspace = ColorSpace.AdobeRGB;\n else this.colorspace = ColorSpace.RGB;\n break;\n case 4:\n this.colorspace = ColorSpace.CYMK;\n break;\n default:\n this.colorspace = ColorSpace.Unknown;\n }\n for (var i = 0; i < frame.components.length; i++) {\n var component = frame.components[i];\n if (\n !component.quantizationTable &&\n component.quantizationTableId !== null\n )\n component.quantizationTable =\n quantizationTables[component.quantizationTableId];\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn,\n bitConversion: component.bitConversion,\n });\n }\n },\n getData16: function getData16(width, height) {\n if (this.components.length !== 1) throw 'Unsupported color mode';\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint16Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint16Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++];\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n return data;\n },\n getData: function getData(width, height) {\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n var colorTransform;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint8Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++] *\n component.bitConversion;\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n\n // ... then transform colors, if necessary\n switch (numComponents) {\n case 1:\n case 2:\n break;\n // no color conversion for one or two compoenents\n\n case 3:\n // The default transform for three components is true\n colorTransform = true;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\n\n data[i] = R;\n data[i + 1] = G;\n data[i + 2] = B;\n }\n }\n break;\n case 4:\n if (!this.adobe) throw 'Unsupported color mode (4 components)';\n // The default transform for four components is false\n colorTransform = false;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\n\n data[i] = C;\n data[i + 1] = M;\n data[i + 2] = Y;\n // K is unchanged\n }\n }\n break;\n default:\n throw 'Unsupported color mode';\n }\n return data;\n },\n };\n\n return constructor;\n})();\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = {\n JpegImage\n};\n"],"names":["ColorSpace","Unkown","Grayscale","AdobeRGB","RGB","CYMK","JpegImage","dctZigZag","Int32Array","dctCos1","dctSin1","dctCos3","dctSin3","dctCos6","dctSin6","dctSqrt2","dctSqrt1d2","buildHuffmanTable","codeLengths","values","i","j","k","code","length","push","children","index","q","p","pop","getBlockBufferOffset","component","row","col","blocksPerLine","decodeScan","data","offset","frame","components","resetInterval","spectralStart","spectralEnd","successivePrev","successive","precision","samplesPerLine","scanLines","mcusPerLine","progressive","startOffset","maxH","maxV","bitsData","bitsCount","readBit","nextByte","toString","decodeHuffman","tree","bit","node","receive","n","receiveAndExtend","eobrun","successiveACNextValue","successiveACState","decodeMcu","decode","mcu","mcuCol","v","h","decodeBlock","decodeFn","componentsLength","t","huffmanTableDC","diff","blockData","pred","e","rs","huffmanTableAC","s","r","z","marker","mcuExpected","blocksPerColumn","mcusPerColumn","quantizeAndInverse","blockBufferOffset","v0","v1","v2","v3","v4","v5","v6","v7","qt","quantizationTable","bitConversion","buildComponentData","computationBuffer","blockRow","blockCol","clampToUint8","a","constructor","prototype","load","path","handleData","this","parse","onload","bind","indexOf","atob","substring","arr","Uint8Array","charCodeAt","xhr","XMLHttpRequest","open","responseType","response","send","readUint16","value","readDataBlock","array","subarray","prepareComponents","Math","ceil","blocksPerLineForMcu","blocksBufferSize","Int16Array","jfif","adobe","quantizationTables","huffmanTablesAC","huffmanTablesDC","fileMarker","l","appData","version","major","minor","densityUnits","xDensity","yDensity","thumbWidth","thumbHeight","thumbData","flags0","flags1","transformCode","quantizationTablesEnd","quantizationTableSpec","tableData","extended","componentIds","componentId","componentsCount","qId","quantizationTableId","huffmanLength","huffmanTableSpec","codeLengthSum","huffmanValues","selectorsCount","componentIndex","tableSpec","successiveApproximation","processed","width","height","colorspace","Unknown","output","scaleX","scaleY","getData16","componentScaleX","componentScaleY","x","y","numComponents","Uint16Array","lineData","lineOffset","scanLine","bufferOffset","sample","getData","Y","Cb","Cr","C","M","R","G","B","colorTransform","dataLength","module","exports"],"sourceRoot":""}
1
+ {"version":3,"file":"945.min.worker.js","mappings":"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","sources":["webpack:///../codecs/jpeg.js"],"sourcesContent":["// jshint ignore: start\n/* eslint-disable */\n\n/*\n Copyright 2011 notmasteryet\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\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n// (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n// (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n// in PostScript Level 2, Technical Note #5116\n// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar ColorSpace = { Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4 };\nvar JpegImage = (function jpegImage() {\n 'use strict';\n var dctZigZag = new Int32Array([\n 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40,\n 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36,\n 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61,\n 54, 47, 55, 62, 63,\n ]);\n\n var dctCos1 = 4017; // cos(pi/16)\n var dctSin1 = 799; // sin(pi/16)\n var dctCos3 = 3406; // cos(3*pi/16)\n var dctSin3 = 2276; // sin(3*pi/16)\n var dctCos6 = 1567; // cos(6*pi/16)\n var dctSin6 = 3784; // sin(6*pi/16)\n var dctSqrt2 = 5793; // sqrt(2)\n var dctSqrt1d2 = 2896; // sqrt(2) / 2\n\n function buildHuffmanTable(codeLengths, values) {\n var k = 0,\n code = [],\n i,\n j,\n length = 16;\n while (length > 0 && !codeLengths[length - 1]) length--;\n code.push({ children: [], index: 0 });\n var p = code[0],\n q;\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n while (p.index > 0) {\n p = code.pop();\n }\n p.index++;\n code.push(p);\n while (code.length <= i) {\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n k++;\n }\n if (i + 1 < length) {\n // p here points to last code\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n }\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successivePrev,\n successive\n ) {\n var precision = frame.precision;\n var samplesPerLine = frame.samplesPerLine;\n var scanLines = frame.scanLines;\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n var maxH = frame.maxH,\n maxV = frame.maxV;\n\n var startOffset = offset,\n bitsData = 0,\n bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return (bitsData >> bitsCount) & 1;\n }\n bitsData = data[offset++];\n if (bitsData == 0xff) {\n var nextByte = data[offset++];\n if (nextByte) {\n throw (\n 'unexpected marker: ' + ((bitsData << 8) | nextByte).toString(16)\n );\n }\n // unstuff 0\n }\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n var bit;\n while ((bit = readBit()) !== null) {\n node = node[bit];\n if (typeof node === 'number') return node;\n if (typeof node !== 'object') throw 'invalid huffman sequence';\n }\n return null;\n }\n\n function receive(length) {\n var n = 0;\n while (length > 0) {\n var bit = readBit();\n if (bit === null) return;\n n = (n << 1) | bit;\n length--;\n }\n return n;\n }\n\n function receiveAndExtend(length) {\n var n = receive(length);\n if (n >= 1 << (length - 1)) return n;\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[offset] = component.pred += diff;\n var k = 1;\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) break;\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n component.blockData[offset] = component.pred += diff;\n }\n\n function decodeDCSuccessive(component, offset) {\n component.blockData[offset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n function decodeACFirst(component, offset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n var k = spectralStart,\n e = spectralEnd;\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] =\n receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0,\n successiveACNextValue;\n function decodeACSuccessive(component, offset) {\n var k = spectralStart,\n e = spectralEnd,\n r = 0;\n while (k <= e) {\n var z = dctZigZag[k];\n switch (successiveACState) {\n case 0: // initial state\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15;\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1) throw 'invalid ACn encoding';\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n continue;\n case 1: // skipping r zero items\n case 2:\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n r--;\n if (r === 0) successiveACState = successiveACState == 2 ? 3 : 0;\n }\n break;\n case 3: // set value for a zero item\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n component.blockData[offset + z] =\n successiveACNextValue << successive;\n successiveACState = 0;\n }\n break;\n case 4: // eob\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n }\n break;\n }\n k++;\n }\n if (successiveACState === 4) {\n eobrun--;\n if (eobrun === 0) successiveACState = 0;\n }\n }\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = (mcu / mcusPerLine) | 0;\n var mcuCol = mcu % mcusPerLine;\n var blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n function decodeBlock(component, decode, mcu) {\n var blockRow = (mcu / component.blocksPerLine) | 0;\n var blockCol = mcu % component.blocksPerLine;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n if (progressive) {\n if (spectralStart === 0)\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n else decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0,\n marker;\n var mcuExpected;\n if (componentsLength == 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n if (!resetInterval) {\n resetInterval = mcuExpected;\n }\n\n var h, v;\n while (mcu < mcuExpected) {\n // reset interval stuff\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n eobrun = 0;\n\n if (componentsLength == 1) {\n component = components[0];\n for (n = 0; n < resetInterval; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < resetInterval; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n mcu++;\n }\n }\n\n // find marker\n bitsCount = 0;\n marker = (data[offset] << 8) | data[offset + 1];\n if (marker <= 0xff00) {\n throw 'marker was not found';\n }\n\n if (marker >= 0xffd0 && marker <= 0xffd7) {\n // RSTx\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n // A port of poppler's IDCT method which in turn is taken from:\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n // 988-991.\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable;\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\n var i;\n\n // dequant\n for (i = 0; i < 64; i++) {\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\n }\n\n // inverse DCT on rows\n for (i = 0; i < 8; ++i) {\n var row = 8 * i;\n\n // check for all-zero AC coefficients\n if (\n p[1 + row] === 0 &&\n p[2 + row] === 0 &&\n p[3 + row] === 0 &&\n p[4 + row] === 0 &&\n p[5 + row] === 0 &&\n p[6 + row] === 0 &&\n p[7 + row] === 0\n ) {\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n p[0 + row] = t;\n p[1 + row] = t;\n p[2 + row] = t;\n p[3 + row] = t;\n p[4 + row] = t;\n p[5 + row] = t;\n p[6 + row] = t;\n p[7 + row] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n v2 = p[2 + row];\n v3 = p[6 + row];\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n v5 = p[3 + row] << 4;\n v6 = p[5 + row] << 4;\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 + row] = v0 + v7;\n p[7 + row] = v0 - v7;\n p[1 + row] = v1 + v6;\n p[6 + row] = v1 - v6;\n p[2 + row] = v2 + v5;\n p[5 + row] = v2 - v5;\n p[3 + row] = v3 + v4;\n p[4 + row] = v3 - v4;\n }\n\n // inverse DCT on columns\n for (i = 0; i < 8; ++i) {\n var col = i;\n\n // check for all-zero AC coefficients\n if (\n p[1 * 8 + col] === 0 &&\n p[2 * 8 + col] === 0 &&\n p[3 * 8 + col] === 0 &&\n p[4 * 8 + col] === 0 &&\n p[5 * 8 + col] === 0 &&\n p[6 * 8 + col] === 0 &&\n p[7 * 8 + col] === 0\n ) {\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\n p[0 * 8 + col] = t;\n p[1 * 8 + col] = t;\n p[2 * 8 + col] = t;\n p[3 * 8 + col] = t;\n p[4 * 8 + col] = t;\n p[5 * 8 + col] = t;\n p[6 * 8 + col] = t;\n p[7 * 8 + col] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\n v2 = p[2 * 8 + col];\n v3 = p[6 * 8 + col];\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\n v5 = p[3 * 8 + col];\n v6 = p[5 * 8 + col];\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 * 8 + col] = v0 + v7;\n p[7 * 8 + col] = v0 - v7;\n p[1 * 8 + col] = v1 + v6;\n p[6 * 8 + col] = v1 - v6;\n p[2 * 8 + col] = v2 + v5;\n p[5 * 8 + col] = v2 - v5;\n p[3 * 8 + col] = v3 + v4;\n p[4 * 8 + col] = v3 - v4;\n }\n\n // convert to 8-bit integers\n for (i = 0; i < 64; ++i) {\n var index = blockBufferOffset + i;\n var q = p[i];\n q =\n q <= -2056 / component.bitConversion\n ? 0\n : q >= 2024 / component.bitConversion\n ? 255 / component.bitConversion\n : (q + 2056 / component.bitConversion) >> 4;\n component.blockData[index] = q;\n }\n }\n\n function buildComponentData(frame, component) {\n var lines = [];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n var computationBuffer = new Int32Array(64);\n\n var i,\n j,\n ll = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n return component.blockData;\n }\n\n function clampToUint8(a) {\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\n }\n\n // create a JPEG Image class\n class JpegImage {}\n\n // setting up all the prototype functions\n // javascript new version of setting up prototype functions\n Object.setPrototypeOf(JpegImage.prototype, {\n load: function load(path) {\n var handleData = function (data) {\n this.parse(data);\n if (this.onload) this.onload();\n }.bind(this);\n\n if (path.indexOf('data:') > -1) {\n var offset = path.indexOf('base64,') + 7;\n var data = atob(path.substring(offset));\n var arr = new Uint8Array(data.length);\n for (var i = data.length - 1; i >= 0; i--) {\n arr[i] = data.charCodeAt(i);\n }\n handleData(data);\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = function () {\n // TODO catch parse error\n var data = new Uint8Array(xhr.response);\n handleData(data);\n }.bind(this);\n xhr.send(null);\n }\n },\n parse: function parse(data) {\n function readUint16() {\n var value = (data[offset] << 8) | data[offset + 1];\n offset += 2;\n return value;\n }\n\n function readDataBlock() {\n var length = readUint16();\n var array = data.subarray(offset, offset + length - 2);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(\n (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH\n );\n var blocksPerColumn = Math.ceil(\n (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV\n );\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n var blocksBufferSize =\n 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0,\n length = data.length;\n var jfif = null;\n var adobe = null;\n var pixels = null;\n var frame, resetInterval;\n var quantizationTables = [];\n var huffmanTablesAC = [],\n huffmanTablesDC = [];\n var fileMarker = readUint16();\n if (fileMarker != 0xffd8) {\n // SOI (Start of Image)\n throw 'SOI not found';\n }\n\n fileMarker = readUint16();\n while (fileMarker != 0xffd9) {\n // EOI (End of image)\n var i, j, l;\n switch (fileMarker) {\n case 0xffe0: // APP0 (Application Specific)\n case 0xffe1: // APP1\n case 0xffe2: // APP2\n case 0xffe3: // APP3\n case 0xffe4: // APP4\n case 0xffe5: // APP5\n case 0xffe6: // APP6\n case 0xffe7: // APP7\n case 0xffe8: // APP8\n case 0xffe9: // APP9\n case 0xffea: // APP10\n case 0xffeb: // APP11\n case 0xffec: // APP12\n case 0xffed: // APP13\n case 0xffee: // APP14\n case 0xffef: // APP15\n case 0xfffe: // COM (Comment)\n var appData = readDataBlock();\n\n if (fileMarker === 0xffe0) {\n if (\n appData[0] === 0x4a &&\n appData[1] === 0x46 &&\n appData[2] === 0x49 &&\n appData[3] === 0x46 &&\n appData[4] === 0\n ) {\n // 'JFIF\\x00'\n jfif = {\n version: { major: appData[5], minor: appData[6] },\n densityUnits: appData[7],\n xDensity: (appData[8] << 8) | appData[9],\n yDensity: (appData[10] << 8) | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(\n 14,\n 14 + 3 * appData[12] * appData[13]\n ),\n };\n }\n }\n // TODO APP1 - Exif\n if (fileMarker === 0xffee) {\n if (\n appData[0] === 0x41 &&\n appData[1] === 0x64 &&\n appData[2] === 0x6f &&\n appData[3] === 0x62 &&\n appData[4] === 0x65 &&\n appData[5] === 0\n ) {\n // 'Adobe\\x00'\n adobe = {\n version: appData[6],\n flags0: (appData[7] << 8) | appData[8],\n flags1: (appData[9] << 8) | appData[10],\n transformCode: appData[11],\n };\n }\n }\n break;\n\n case 0xffdb: // DQT (Define Quantization Tables)\n var quantizationTablesLength = readUint16();\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Int32Array(64);\n if (quantizationTableSpec >> 4 === 0) {\n // 8 bit values\n for (j = 0; j < 64; j++) {\n var z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if (quantizationTableSpec >> 4 === 1) {\n //16 bit\n for (j = 0; j < 64; j++) {\n var zz = dctZigZag[j];\n tableData[zz] = readUint16();\n }\n } else throw 'DQT: invalid table spec';\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n break;\n\n case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n if (frame) {\n throw 'Only single frame JPEGs supported';\n }\n readUint16(); // skip data length\n frame = {};\n frame.extended = fileMarker === 0xffc1;\n frame.progressive = fileMarker === 0xffc2;\n frame.precision = data[offset++];\n frame.scanLines = readUint16();\n frame.samplesPerLine = readUint16();\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++],\n componentId;\n var maxH = 0,\n maxV = 0;\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n if (maxH < h) maxH = h;\n if (maxV < v) maxV = v;\n var qId = data[offset + 2];\n l = frame.components.push({\n h: h,\n v: v,\n quantizationTable: quantizationTables[qId],\n quantizationTableId: qId,\n bitConversion: 255 / ((1 << frame.precision) - 1),\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xffc4: // DHT (Define Huffman Tables)\n var huffmanLength = readUint16();\n for (i = 2; i < huffmanLength; ) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n for (j = 0; j < 16; j++, offset++)\n codeLengthSum += codeLengths[j] = data[offset];\n var huffmanValues = new Uint8Array(codeLengthSum);\n for (j = 0; j < codeLengthSum; j++, offset++)\n huffmanValues[j] = data[offset];\n i += 17 + codeLengthSum;\n\n (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[\n huffmanTableSpec & 15\n ] = buildHuffmanTable(codeLengths, huffmanValues);\n }\n break;\n\n case 0xffdd: // DRI (Define Restart Interval)\n readUint16(); // skip data length\n resetInterval = readUint16();\n break;\n\n case 0xffda: // SOS (Start of Scan)\n var scanLength = readUint16();\n var selectorsCount = data[offset++];\n var components = [],\n component;\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n var processed = decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successiveApproximation >> 4,\n successiveApproximation & 15\n );\n offset += processed;\n break;\n case 0xffff: // Fill bytes\n if (data[offset] !== 0xff) {\n // Avoid skipping a valid marker.\n offset--;\n }\n break;\n default:\n if (\n data[offset - 3] == 0xff &&\n data[offset - 2] >= 0xc0 &&\n data[offset - 2] <= 0xfe\n ) {\n // could be incorrect encoding -- last 0xFF byte of the previous\n // block was eaten by the encoder\n offset -= 3;\n break;\n }\n throw 'unknown JPEG marker ' + fileMarker.toString(16);\n }\n fileMarker = readUint16();\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n switch (frame.components.length) {\n case 1:\n this.colorspace = ColorSpace.Grayscale;\n break;\n case 3:\n if (this.adobe) this.colorspace = ColorSpace.AdobeRGB;\n else this.colorspace = ColorSpace.RGB;\n break;\n case 4:\n this.colorspace = ColorSpace.CYMK;\n break;\n default:\n this.colorspace = ColorSpace.Unknown;\n }\n for (var i = 0; i < frame.components.length; i++) {\n var component = frame.components[i];\n if (\n !component.quantizationTable &&\n component.quantizationTableId !== null\n )\n component.quantizationTable =\n quantizationTables[component.quantizationTableId];\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn,\n bitConversion: component.bitConversion,\n });\n }\n },\n getData16: function getData16(width, height) {\n if (this.components.length !== 1) throw 'Unsupported color mode';\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint16Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint16Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++];\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n return data;\n },\n getData: function getData(width, height) {\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n var colorTransform;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint8Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++] *\n component.bitConversion;\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n\n // ... then transform colors, if necessary\n switch (numComponents) {\n case 1:\n case 2:\n break;\n // no color conversion for one or two compoenents\n\n case 3:\n // The default transform for three components is true\n colorTransform = true;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\n\n data[i] = R;\n data[i + 1] = G;\n data[i + 2] = B;\n }\n }\n break;\n case 4:\n if (!this.adobe) throw 'Unsupported color mode (4 components)';\n // The default transform for four components is false\n colorTransform = false;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\n\n data[i] = C;\n data[i + 1] = M;\n data[i + 2] = Y;\n // K is unchanged\n }\n }\n break;\n default:\n throw 'Unsupported color mode';\n }\n return data;\n },\n });\n\n return JpegImage\n})();\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = {\n JpegImage\n};\n"],"names":["ColorSpace","Unkown","Grayscale","AdobeRGB","RGB","CYMK","JpegImage","dctZigZag","Int32Array","dctCos1","dctSin1","dctCos3","dctSin3","dctCos6","dctSin6","dctSqrt2","dctSqrt1d2","buildHuffmanTable","codeLengths","values","i","j","k","code","length","push","children","index","q","p","pop","getBlockBufferOffset","component","row","col","blocksPerLine","decodeScan","data","offset","frame","components","resetInterval","spectralStart","spectralEnd","successivePrev","successive","precision","samplesPerLine","scanLines","mcusPerLine","progressive","startOffset","maxH","maxV","bitsData","bitsCount","readBit","nextByte","toString","decodeHuffman","tree","bit","node","receive","n","receiveAndExtend","eobrun","successiveACNextValue","successiveACState","decodeMcu","decode","mcu","mcuCol","v","h","decodeBlock","decodeFn","componentsLength","t","huffmanTableDC","diff","blockData","pred","e","rs","huffmanTableAC","s","r","z","marker","mcuExpected","blocksPerColumn","mcusPerColumn","quantizeAndInverse","blockBufferOffset","v0","v1","v2","v3","v4","v5","v6","v7","qt","quantizationTable","bitConversion","buildComponentData","computationBuffer","blockRow","blockCol","clampToUint8","a","Object","setPrototypeOf","prototype","load","path","handleData","this","parse","onload","bind","indexOf","atob","substring","arr","Uint8Array","charCodeAt","xhr","XMLHttpRequest","open","responseType","response","send","readUint16","value","readDataBlock","array","subarray","prepareComponents","Math","ceil","blocksPerLineForMcu","blocksBufferSize","Int16Array","jfif","adobe","quantizationTables","huffmanTablesAC","huffmanTablesDC","fileMarker","l","appData","version","major","minor","densityUnits","xDensity","yDensity","thumbWidth","thumbHeight","thumbData","flags0","flags1","transformCode","quantizationTablesEnd","quantizationTableSpec","tableData","extended","componentIds","componentId","componentsCount","qId","quantizationTableId","huffmanLength","huffmanTableSpec","codeLengthSum","huffmanValues","selectorsCount","componentIndex","tableSpec","successiveApproximation","processed","width","height","colorspace","Unknown","output","scaleX","scaleY","getData16","componentScaleX","componentScaleY","x","y","numComponents","Uint16Array","lineData","lineOffset","scanLine","bufferOffset","sample","getData","Y","Cb","Cr","C","M","R","G","B","colorTransform","dataLength","module","exports"],"sourceRoot":""}
@@ -5111,8 +5111,8 @@ function WorkList(_ref) {
5111
5111
  };
5112
5112
  });
5113
5113
  const hasStudies = numOfStudies > 0;
5114
- const versionNumber = "3.7.0-beta.25";
5115
- const commitHash = "c3c132d268d108f62e9c881e7c01e8e8e0db49fd";
5114
+ const versionNumber = "3.7.0-beta.27";
5115
+ const commitHash = "060085805510a046da3f5a5bb7dd2952e40d9b91";
5116
5116
  const menuOptions = [{
5117
5117
  title: t('Header:About'),
5118
5118
  icon: 'info',
@@ -20360,7 +20360,7 @@ const detectionOptions = {
20360
20360
  }
20361
20361
  });
20362
20362
  ;// CONCATENATED MODULE: ../../i18n/package.json
20363
- const package_namespaceObject = JSON.parse('{"i8":"3.7.0-beta.24"}');
20363
+ const package_namespaceObject = JSON.parse('{"i8":"3.7.0-beta.26"}');
20364
20364
  ;// CONCATENATED MODULE: ../../i18n/src/utils.js
20365
20365
  const languagesMap = {
20366
20366
  ar: 'Arabic',
@@ -154419,7 +154419,7 @@ var selectOrdinal = function selectOrdinal() {
154419
154419
  /******/ // This function allow to reference async chunks
154420
154420
  /******/ __webpack_require__.u = (chunkId) => {
154421
154421
  /******/ // return url for filenames based on template
154422
- /******/ return "" + (chunkId === 18 ? "dicom-microscopy-viewer" : chunkId) + ".bundle." + {"18":"aa60bdf008c32c39cfd7","50":"a478eb6bc9a3760281b8","55":"e9bf24eb17d84049c640","82":"12d25002fc323ed81314","151":"31ea35044218837bf73f","192":"dc6361af1983494c3d2d","199":"1ec5510652519c0a93cb","205":"b5a473c200dcf2bbcdb4","208":"4f98494e58cd0365c555","270":"19d379cc8b4776795c32","283":"3e80c738ad4cd5f2ac4a","295":"957b1159fec14b9199a1","331":"7b724ef5f8a1b27d21fe","351":"655d4067c14c1d9df7a5","381":"0905e683605fcbc0895f","404":"c468246e842e3896aa28","531":"2a82fb1d69e5b57cc72b","569":"f71780087b8c9a75d44e","581":"0b1b8273eb694c11366d","606":"5d876f5f3dd8287f0a28","616":"4e5b67c90122c435faf2","642":"cee7372301854c7a0f87","664":"09abae984223969d1bde","707":"47de8980d30f4ee41c73","728":"d13856835357400fef82","744":"1242e152235472ba192b","780":"fd0f13dc92e9caa0581e","790":"fd6ef5854052475d6385","799":"6fbb7a97bccfb55dc79f","806":"2e7934d0833c4315c292","917":"f229011a00038f099af7","926":"dbc9d0e591cb9217fda2","935":"deeffff0e4f7b528e3c3","953":"e6f4e03320ec46efff85","973":"a241decc685496a22fa9","976":"b9303cf50bf024e1354f","984":"e1679929a754f0000bb6"}[chunkId] + ".js";
154422
+ /******/ return "" + (chunkId === 18 ? "dicom-microscopy-viewer" : chunkId) + ".bundle." + {"18":"aa60bdf008c32c39cfd7","50":"04a9a1daef450364e824","55":"e9bf24eb17d84049c640","82":"e48f22ba7f900e56383e","151":"31ea35044218837bf73f","192":"fb6e661de45037a636f5","199":"63de704cc561276bc0d5","205":"b5a473c200dcf2bbcdb4","208":"3dd4609fd121a290a1f1","270":"a4ff08f18e3da39a030b","283":"4a24091c970ca817de01","295":"957b1159fec14b9199a1","331":"0293a1135afc1a55d93c","351":"655d4067c14c1d9df7a5","381":"0905e683605fcbc0895f","404":"c4eab28f1007761faae9","531":"2a82fb1d69e5b57cc72b","569":"f71780087b8c9a75d44e","581":"0b1b8273eb694c11366d","606":"5d876f5f3dd8287f0a28","616":"f1fc426048589e996e12","642":"2631d6acc2cc19cf42f3","664":"09abae984223969d1bde","707":"ba3655251a4442bbcb18","728":"75a919489af5ae4c237b","744":"695d15f8266ca0673e75","780":"fd0f13dc92e9caa0581e","790":"d5af0c90d41395b9f99b","799":"6fbb7a97bccfb55dc79f","806":"2e7934d0833c4315c292","917":"1f9af4234548428fb4c4","926":"dbc9d0e591cb9217fda2","935":"deeffff0e4f7b528e3c3","953":"e6f4e03320ec46efff85","973":"22e7389b995114e48090","976":"aed5c3f3ecd8fa24f18f","984":"cd77ebcc1a20916ca778"}[chunkId] + ".js";
154423
154423
  /******/ };
154424
154424
  /******/ })();
154425
154425
  /******/
package/dist/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><meta name="mobile-web-app-capable" content="yes"/><meta name="application-name" content="OHIF Viewer"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta name="apple-mobile-web-app-title" content="@ohif/app"/><meta name="msapplication-TileColor" content="#fff"/><meta name="msapplication-TileImage" content="/assets/mstile-144x144.png"/><meta name="msapplication-config" content="/assets/browserconfig.xml"/><link rel="manifest" href="/manifest.json"/><link rel="shortcut icon" href="/assets/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"/><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"/><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"/><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"/><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"/><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-320x460.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x920.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x1096.png"/><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-750x1294.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1182x2208.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1242x2148.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-748x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-768x1004.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1496x2048.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1536x2008.png"/><link rel="icon" type="image/png" sizes="228x228" href="/assets/coast-228x228.png"/><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"/><script>window.PUBLIC_URL = '/';</script><script rel="preload" as="script" src="/app-config.js"></script><script rel="preload" as="script" type="module" src="/init-service-worker.js"></script><title>OHIF Viewer</title><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/><link href="https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap" rel="stylesheet" rel="preload" as="style"/><script defer="defer" src="/app.bundle.6b99a46b70ec2b4a64c2.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><meta name="mobile-web-app-capable" content="yes"/><meta name="application-name" content="OHIF Viewer"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta name="apple-mobile-web-app-title" content="@ohif/app"/><meta name="msapplication-TileColor" content="#fff"/><meta name="msapplication-TileImage" content="/assets/mstile-144x144.png"/><meta name="msapplication-config" content="/assets/browserconfig.xml"/><link rel="manifest" href="/manifest.json"/><link rel="shortcut icon" href="/assets/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"/><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"/><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"/><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"/><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"/><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-320x460.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x920.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x1096.png"/><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-750x1294.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1182x2208.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1242x2148.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-748x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-768x1004.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1496x2048.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1536x2008.png"/><link rel="icon" type="image/png" sizes="228x228" href="/assets/coast-228x228.png"/><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"/><script>window.PUBLIC_URL = '/';</script><script rel="preload" as="script" src="/app-config.js"></script><script rel="preload" as="script" type="module" src="/init-service-worker.js"></script><title>OHIF Viewer</title><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/><link href="https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap" rel="stylesheet" rel="preload" as="style"/><script defer="defer" src="/app.bundle.203dda69dddc56147baa.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
package/dist/sw.js CHANGED
@@ -51,7 +51,7 @@ self.addEventListener('message', event => {
51
51
  }
52
52
  }
53
53
  });
54
- workbox.precaching.precacheAndRoute([{'revision':null,'url':'/151.bundle.31ea35044218837bf73f.js'},{'revision':null,'url':'/192.bundle.dc6361af1983494c3d2d.js'},{'revision':null,'url':'/199.bundle.1ec5510652519c0a93cb.js'},{'revision':null,'url':'/205.bundle.b5a473c200dcf2bbcdb4.js'},{'revision':null,'url':'/208.bundle.4f98494e58cd0365c555.js'},{'revision':null,'url':'/270.bundle.19d379cc8b4776795c32.js'},{'revision':null,'url':'/283.bundle.3e80c738ad4cd5f2ac4a.js'},{'revision':null,'url':'/295.bundle.957b1159fec14b9199a1.js'},{'revision':null,'url':'/331.bundle.7b724ef5f8a1b27d21fe.js'},{'revision':null,'url':'/351.bundle.655d4067c14c1d9df7a5.js'},{'revision':'a04a2f233dc569826f5f6e21b65bc87b','url':'/351.css'},{'revision':'c4ea120c6da08aa75348edfa3e57ece9','url':'/36785fbd89b0e17f6099.wasm'},{'revision':null,'url':'/381.bundle.0905e683605fcbc0895f.js'},{'revision':null,'url':'/404.bundle.c468246e842e3896aa28.js'},{'revision':null,'url':'/50.bundle.a478eb6bc9a3760281b8.js'},{'revision':'c377e1f5fe4a207d270c3f7a8dd3e3ca','url':'/5004fdc02f329ce53b69.wasm'},{'revision':null,'url':'/531.bundle.2a82fb1d69e5b57cc72b.js'},{'revision':null,'url':'/55.bundle.e9bf24eb17d84049c640.js'},{'revision':'0afb25509c7f072fbd7eda42c6895dbf','url':'/55.css'},{'revision':null,'url':'/569.bundle.f71780087b8c9a75d44e.js'},{'revision':null,'url':'/581.bundle.0b1b8273eb694c11366d.js'},{'revision':null,'url':'/606.bundle.5d876f5f3dd8287f0a28.js'},{'revision':'62b4ae8445d191d5aab5503ce475724d','url':'/610.min.worker.js'},{'revision':'3c2206525c18cd87dd28082949a4e43e','url':'/610.min.worker.js.map'},{'revision':null,'url':'/616.bundle.4e5b67c90122c435faf2.js'},{'revision':'5800265b6831396572fb5d32c6bd8eef','url':'/62ab5d58a2bea7b5a1dc.wasm'},{'revision':null,'url':'/642.bundle.cee7372301854c7a0f87.js'},{'revision':'ce10eced3ce34e663d86569b27f5bffb','url':'/65916ef3def695744bda.wasm'},{'revision':null,'url':'/664.bundle.09abae984223969d1bde.js'},{'revision':null,'url':'/707.bundle.47de8980d30f4ee41c73.js'},{'revision':'185e5e0a10fa6ab2fc7b3c38e63d550b','url':'/707.css'},{'revision':null,'url':'/728.bundle.d13856835357400fef82.js'},{'revision':null,'url':'/744.bundle.1242e152235472ba192b.js'},{'revision':'cf3e4d4fa8884275461c195421812256','url':'/75788f12450d4c5ed494.wasm'},{'revision':'cc4a3a4da4ac1b863a714f93c66c6ef2','url':'/75a0c2dfe07b824c7d21.wasm'},{'revision':null,'url':'/780.bundle.fd0f13dc92e9caa0581e.js'},{'revision':null,'url':'/790.bundle.fd6ef5854052475d6385.js'},{'revision':null,'url':'/799.bundle.6fbb7a97bccfb55dc79f.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/806.css'},{'revision':null,'url':'/82.bundle.12d25002fc323ed81314.js'},{'revision':null,'url':'/917.bundle.f229011a00038f099af7.js'},{'revision':null,'url':'/926.bundle.dbc9d0e591cb9217fda2.js'},{'revision':null,'url':'/935.bundle.deeffff0e4f7b528e3c3.js'},{'revision':'b12abc3008862bb7daf6a91d2a13cf6a','url':'/945.min.worker.js'},{'revision':'3aba0a4898e93871a7cd61b4d0216a18','url':'/945.min.worker.js.map'},{'revision':null,'url':'/953.bundle.e6f4e03320ec46efff85.js'},{'revision':null,'url':'/973.bundle.a241decc685496a22fa9.js'},{'revision':null,'url':'/976.bundle.b9303cf50bf024e1354f.js'},{'revision':null,'url':'/984.bundle.e1679929a754f0000bb6.js'},{'revision':'d1895aa7a4595dc279c382e5a31ef9f4','url':'/_headers'},{'revision':'6839a719b6810111d8097998b11293a1','url':'/_redirects'},{'revision':'52e767cf35feb8ca59c009582b8b0575','url':'/app-config.js'},{'revision':'0871da67d87443bacdeeb07df0a5c282','url':'/app.bundle.css'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/android-chrome-144x144.png'},{'revision':'5cde390de8a619ebe55a669d2ac3effd','url':'/assets/android-chrome-192x192.png'},{'revision':'e7466a67e90471de05401e53b8fe20be','url':'/assets/android-chrome-256x256.png'},{'revision':'9bbe9b80156e930d19a4e1725aa9ddae','url':'/assets/android-chrome-36x36.png'},{'revision':'5698b2ac0c82fe06d84521fc5482df04','url':'/assets/android-chrome-384x384.png'},{'revision':'56bef3fceec344d9747f8abe9c0bba27','url':'/assets/android-chrome-48x48.png'},{'revision':'3e8b8a01290992e82c242557417b0596','url':'/assets/android-chrome-512x512.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/android-chrome-72x72.png'},{'revision':'4c3289bc690f8519012686888e08da71','url':'/assets/android-chrome-96x96.png'},{'revision':'cf464289183184df09292f581df0fb4f','url':'/assets/apple-touch-icon-1024x1024.png'},{'revision':'0857c5282c594e4900e8b31e3bade912','url':'/assets/apple-touch-icon-114x114.png'},{'revision':'4208f41a28130a67e9392a9dfcee6011','url':'/assets/apple-touch-icon-120x120.png'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/apple-touch-icon-144x144.png'},{'revision':'977d293982af7e9064ba20806b45cf35','url':'/assets/apple-touch-icon-152x152.png'},{'revision':'6de91b4d2a30600b410758405cb567b4','url':'/assets/apple-touch-icon-167x167.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-180x180.png'},{'revision':'647386c34e75f1213830ea9a38913525','url':'/assets/apple-touch-icon-57x57.png'},{'revision':'0c200fe83953738b330ea431083e7a86','url':'/assets/apple-touch-icon-60x60.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/apple-touch-icon-72x72.png'},{'revision':'c9989a807bb18633f6dcf254b5b56124','url':'/assets/apple-touch-icon-76x76.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-precomposed.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon.png'},{'revision':'05fa74ea9c1c0c3931ba96467999081d','url':'/assets/apple-touch-startup-image-1182x2208.png'},{'revision':'9e2cd03e1e6fd0520eea6846f4278018','url':'/assets/apple-touch-startup-image-1242x2148.png'},{'revision':'5591e3a1822cbc8439b99c1a40d53425','url':'/assets/apple-touch-startup-image-1496x2048.png'},{'revision':'337de578c5ca04bd7d2be19d24d83821','url':'/assets/apple-touch-startup-image-1536x2008.png'},{'revision':'cafb4ab4eafe6ef946bd229a1d88e7de','url':'/assets/apple-touch-startup-image-320x460.png'},{'revision':'d9bb9e558d729eeac5efb8be8d6111cc','url':'/assets/apple-touch-startup-image-640x1096.png'},{'revision':'038b5b02bac8b82444bf9a87602ac216','url':'/assets/apple-touch-startup-image-640x920.png'},{'revision':'2177076eb07b1d64d663d7c03268be00','url':'/assets/apple-touch-startup-image-748x1024.png'},{'revision':'4fc097443815fe92503584c4bd73c630','url':'/assets/apple-touch-startup-image-750x1294.png'},{'revision':'2e29914062dce5c5141ab47eea2fc5d9','url':'/assets/apple-touch-startup-image-768x1004.png'},{'revision':'f692ec286b3a332c17985f4ed38b1076','url':'/assets/browserconfig.xml'},{'revision':'f3d9a3b647853c45b0e132e4acd0cc4a','url':'/assets/coast-228x228.png'},{'revision':'ad6e1def5c66193d649a31474bbfe45d','url':'/assets/favicon-16x16.png'},{'revision':'84d1dcdb6cdfa55e2f46be0c80fa5698','url':'/assets/favicon-32x32.png'},{'revision':'95fb44c4998a46109e49d724c060db24','url':'/assets/favicon.ico'},{'revision':'5df2a5b0cee399ac0bc40af74ba3c2cb','url':'/assets/firefox_app_128x128.png'},{'revision':'11fd9098c4b07c8a07e1d2a1e309e046','url':'/assets/firefox_app_512x512.png'},{'revision':'27cddfc922dca3bfa27b4a00fc2f5e36','url':'/assets/firefox_app_60x60.png'},{'revision':'2017d95fae79dcf34b5a5b52586d4763','url':'/assets/manifest.webapp'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/mstile-144x144.png'},{'revision':'334895225e16a7777e45d81964725a97','url':'/assets/mstile-150x150.png'},{'revision':'e295cca4af6ed0365cf7b014d91b0e9d','url':'/assets/mstile-310x150.png'},{'revision':'cbefa8c42250e5f2443819fe2c69d91e','url':'/assets/mstile-310x310.png'},{'revision':'aa411a69df2b33a1362fa38d1257fa9d','url':'/assets/mstile-70x70.png'},{'revision':'5609af4f69e40e33471aee770ea1d802','url':'/assets/yandex-browser-50x50.png'},{'revision':'cfea70d7ddc8f06f276ea0c85c4b2adf','url':'/assets/yandex-browser-manifest.json'},{'revision':'52b9a07fe0541fe8c313d9788550bf51','url':'/b6b803111e2d06a825bd.wasm'},{'revision':'7edb59d2be7c993050cb31ded36afa31','url':'/c22b37c3488e1d6c3aa4.wasm'},{'revision':'3c03abb7976d9dd2f0958e1c56654102','url':'/cornerstoneDICOMImageLoader.min.js'},{'revision':'f85de7fd8a9a8d95833085a001a19345','url':'/cornerstoneDICOMImageLoader.min.js.map'},{'revision':null,'url':'/dicom-microscopy-viewer.bundle.aa60bdf008c32c39cfd7.js'},{'revision':'9d8c85b42d04bb117a3b583d654fbb08','url':'/dicomMicroscopyViewer.min.js'},{'revision':'450494c199cf8dd8e8c34d5e98bf5334','url':'/dicomMicroscopyViewer.min.js.LICENSE.txt'},{'revision':'0ca44a1b8719e835645ffa804a9d1395','url':'/es6-shim.min.js'},{'revision':'9de58b497a43167958927602cb68cd30','url':'/google.js'},{'revision':'58fdb211b44c13ff9b871fe145763a46','url':'/index.html'},{'revision':'0d0886e5f1fdb4a209a9065dfb542c22','url':'/index.worker.1c69152d710fa7b84bce.worker.js'},{'revision':'066fd130de42b02857b634de1dc49a73','url':'/index.worker.1c69152d710fa7b84bce.worker.js.map'},{'revision':'71cec55513e051f0778ad89be760c11a','url':'/index.worker.min.worker.js'},{'revision':'fd1116add443fee52a935df926396e0f','url':'/index.worker.min.worker.js.map'},{'revision':'c4c4be134438c4cc55613210f3913526','url':'/init-service-worker.js'},{'revision':'74fc9658b62903be2048c1f82a22b4d4','url':'/manifest.json'},{'revision':'3fa71aa0af3e34b4ebd9a71eee0f4bdd','url':'/ohif-logo-light.svg'},{'revision':'7e81da785c63e75650101db6c5d7560e','url':'/ohif-logo.svg'},{'revision':'754d698a7b334af57c00f29723fd9751','url':'/oidc-client.min.js'},{'revision':'d05a380d50b74e629738ae6f62fb7e78','url':'/polyfill.min.js'},{'revision':'f528b6861c82ee4415fce0821fd695c1','url':'/silent-refresh.html'}]);
54
+ workbox.precaching.precacheAndRoute([{'revision':null,'url':'/151.bundle.31ea35044218837bf73f.js'},{'revision':null,'url':'/192.bundle.fb6e661de45037a636f5.js'},{'revision':null,'url':'/199.bundle.63de704cc561276bc0d5.js'},{'revision':null,'url':'/205.bundle.b5a473c200dcf2bbcdb4.js'},{'revision':null,'url':'/208.bundle.3dd4609fd121a290a1f1.js'},{'revision':null,'url':'/270.bundle.a4ff08f18e3da39a030b.js'},{'revision':null,'url':'/283.bundle.4a24091c970ca817de01.js'},{'revision':null,'url':'/295.bundle.957b1159fec14b9199a1.js'},{'revision':null,'url':'/331.bundle.0293a1135afc1a55d93c.js'},{'revision':null,'url':'/351.bundle.655d4067c14c1d9df7a5.js'},{'revision':'a04a2f233dc569826f5f6e21b65bc87b','url':'/351.css'},{'revision':'c4ea120c6da08aa75348edfa3e57ece9','url':'/36785fbd89b0e17f6099.wasm'},{'revision':null,'url':'/381.bundle.0905e683605fcbc0895f.js'},{'revision':null,'url':'/404.bundle.c4eab28f1007761faae9.js'},{'revision':null,'url':'/50.bundle.04a9a1daef450364e824.js'},{'revision':'c377e1f5fe4a207d270c3f7a8dd3e3ca','url':'/5004fdc02f329ce53b69.wasm'},{'revision':null,'url':'/531.bundle.2a82fb1d69e5b57cc72b.js'},{'revision':null,'url':'/55.bundle.e9bf24eb17d84049c640.js'},{'revision':'0afb25509c7f072fbd7eda42c6895dbf','url':'/55.css'},{'revision':null,'url':'/569.bundle.f71780087b8c9a75d44e.js'},{'revision':null,'url':'/581.bundle.0b1b8273eb694c11366d.js'},{'revision':null,'url':'/606.bundle.5d876f5f3dd8287f0a28.js'},{'revision':'62b4ae8445d191d5aab5503ce475724d','url':'/610.min.worker.js'},{'revision':'3c2206525c18cd87dd28082949a4e43e','url':'/610.min.worker.js.map'},{'revision':null,'url':'/616.bundle.f1fc426048589e996e12.js'},{'revision':'5800265b6831396572fb5d32c6bd8eef','url':'/62ab5d58a2bea7b5a1dc.wasm'},{'revision':null,'url':'/642.bundle.2631d6acc2cc19cf42f3.js'},{'revision':'ce10eced3ce34e663d86569b27f5bffb','url':'/65916ef3def695744bda.wasm'},{'revision':null,'url':'/664.bundle.09abae984223969d1bde.js'},{'revision':null,'url':'/707.bundle.ba3655251a4442bbcb18.js'},{'revision':'185e5e0a10fa6ab2fc7b3c38e63d550b','url':'/707.css'},{'revision':null,'url':'/728.bundle.75a919489af5ae4c237b.js'},{'revision':null,'url':'/744.bundle.695d15f8266ca0673e75.js'},{'revision':'cf3e4d4fa8884275461c195421812256','url':'/75788f12450d4c5ed494.wasm'},{'revision':'cc4a3a4da4ac1b863a714f93c66c6ef2','url':'/75a0c2dfe07b824c7d21.wasm'},{'revision':null,'url':'/780.bundle.fd0f13dc92e9caa0581e.js'},{'revision':null,'url':'/790.bundle.d5af0c90d41395b9f99b.js'},{'revision':null,'url':'/799.bundle.6fbb7a97bccfb55dc79f.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/806.css'},{'revision':null,'url':'/82.bundle.e48f22ba7f900e56383e.js'},{'revision':null,'url':'/917.bundle.1f9af4234548428fb4c4.js'},{'revision':null,'url':'/926.bundle.dbc9d0e591cb9217fda2.js'},{'revision':null,'url':'/935.bundle.deeffff0e4f7b528e3c3.js'},{'revision':'74c9647440e51f149ad12923d6ead952','url':'/945.min.worker.js'},{'revision':'cdf6f0457d4af2cef04fc41816241bc1','url':'/945.min.worker.js.map'},{'revision':null,'url':'/953.bundle.e6f4e03320ec46efff85.js'},{'revision':null,'url':'/973.bundle.22e7389b995114e48090.js'},{'revision':null,'url':'/976.bundle.aed5c3f3ecd8fa24f18f.js'},{'revision':null,'url':'/984.bundle.cd77ebcc1a20916ca778.js'},{'revision':'d1895aa7a4595dc279c382e5a31ef9f4','url':'/_headers'},{'revision':'6839a719b6810111d8097998b11293a1','url':'/_redirects'},{'revision':'52e767cf35feb8ca59c009582b8b0575','url':'/app-config.js'},{'revision':'0871da67d87443bacdeeb07df0a5c282','url':'/app.bundle.css'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/android-chrome-144x144.png'},{'revision':'5cde390de8a619ebe55a669d2ac3effd','url':'/assets/android-chrome-192x192.png'},{'revision':'e7466a67e90471de05401e53b8fe20be','url':'/assets/android-chrome-256x256.png'},{'revision':'9bbe9b80156e930d19a4e1725aa9ddae','url':'/assets/android-chrome-36x36.png'},{'revision':'5698b2ac0c82fe06d84521fc5482df04','url':'/assets/android-chrome-384x384.png'},{'revision':'56bef3fceec344d9747f8abe9c0bba27','url':'/assets/android-chrome-48x48.png'},{'revision':'3e8b8a01290992e82c242557417b0596','url':'/assets/android-chrome-512x512.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/android-chrome-72x72.png'},{'revision':'4c3289bc690f8519012686888e08da71','url':'/assets/android-chrome-96x96.png'},{'revision':'cf464289183184df09292f581df0fb4f','url':'/assets/apple-touch-icon-1024x1024.png'},{'revision':'0857c5282c594e4900e8b31e3bade912','url':'/assets/apple-touch-icon-114x114.png'},{'revision':'4208f41a28130a67e9392a9dfcee6011','url':'/assets/apple-touch-icon-120x120.png'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/apple-touch-icon-144x144.png'},{'revision':'977d293982af7e9064ba20806b45cf35','url':'/assets/apple-touch-icon-152x152.png'},{'revision':'6de91b4d2a30600b410758405cb567b4','url':'/assets/apple-touch-icon-167x167.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-180x180.png'},{'revision':'647386c34e75f1213830ea9a38913525','url':'/assets/apple-touch-icon-57x57.png'},{'revision':'0c200fe83953738b330ea431083e7a86','url':'/assets/apple-touch-icon-60x60.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/apple-touch-icon-72x72.png'},{'revision':'c9989a807bb18633f6dcf254b5b56124','url':'/assets/apple-touch-icon-76x76.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-precomposed.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon.png'},{'revision':'05fa74ea9c1c0c3931ba96467999081d','url':'/assets/apple-touch-startup-image-1182x2208.png'},{'revision':'9e2cd03e1e6fd0520eea6846f4278018','url':'/assets/apple-touch-startup-image-1242x2148.png'},{'revision':'5591e3a1822cbc8439b99c1a40d53425','url':'/assets/apple-touch-startup-image-1496x2048.png'},{'revision':'337de578c5ca04bd7d2be19d24d83821','url':'/assets/apple-touch-startup-image-1536x2008.png'},{'revision':'cafb4ab4eafe6ef946bd229a1d88e7de','url':'/assets/apple-touch-startup-image-320x460.png'},{'revision':'d9bb9e558d729eeac5efb8be8d6111cc','url':'/assets/apple-touch-startup-image-640x1096.png'},{'revision':'038b5b02bac8b82444bf9a87602ac216','url':'/assets/apple-touch-startup-image-640x920.png'},{'revision':'2177076eb07b1d64d663d7c03268be00','url':'/assets/apple-touch-startup-image-748x1024.png'},{'revision':'4fc097443815fe92503584c4bd73c630','url':'/assets/apple-touch-startup-image-750x1294.png'},{'revision':'2e29914062dce5c5141ab47eea2fc5d9','url':'/assets/apple-touch-startup-image-768x1004.png'},{'revision':'f692ec286b3a332c17985f4ed38b1076','url':'/assets/browserconfig.xml'},{'revision':'f3d9a3b647853c45b0e132e4acd0cc4a','url':'/assets/coast-228x228.png'},{'revision':'ad6e1def5c66193d649a31474bbfe45d','url':'/assets/favicon-16x16.png'},{'revision':'84d1dcdb6cdfa55e2f46be0c80fa5698','url':'/assets/favicon-32x32.png'},{'revision':'95fb44c4998a46109e49d724c060db24','url':'/assets/favicon.ico'},{'revision':'5df2a5b0cee399ac0bc40af74ba3c2cb','url':'/assets/firefox_app_128x128.png'},{'revision':'11fd9098c4b07c8a07e1d2a1e309e046','url':'/assets/firefox_app_512x512.png'},{'revision':'27cddfc922dca3bfa27b4a00fc2f5e36','url':'/assets/firefox_app_60x60.png'},{'revision':'2017d95fae79dcf34b5a5b52586d4763','url':'/assets/manifest.webapp'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/mstile-144x144.png'},{'revision':'334895225e16a7777e45d81964725a97','url':'/assets/mstile-150x150.png'},{'revision':'e295cca4af6ed0365cf7b014d91b0e9d','url':'/assets/mstile-310x150.png'},{'revision':'cbefa8c42250e5f2443819fe2c69d91e','url':'/assets/mstile-310x310.png'},{'revision':'aa411a69df2b33a1362fa38d1257fa9d','url':'/assets/mstile-70x70.png'},{'revision':'5609af4f69e40e33471aee770ea1d802','url':'/assets/yandex-browser-50x50.png'},{'revision':'cfea70d7ddc8f06f276ea0c85c4b2adf','url':'/assets/yandex-browser-manifest.json'},{'revision':'52b9a07fe0541fe8c313d9788550bf51','url':'/b6b803111e2d06a825bd.wasm'},{'revision':'7edb59d2be7c993050cb31ded36afa31','url':'/c22b37c3488e1d6c3aa4.wasm'},{'revision':'3c03abb7976d9dd2f0958e1c56654102','url':'/cornerstoneDICOMImageLoader.min.js'},{'revision':'f85de7fd8a9a8d95833085a001a19345','url':'/cornerstoneDICOMImageLoader.min.js.map'},{'revision':null,'url':'/dicom-microscopy-viewer.bundle.aa60bdf008c32c39cfd7.js'},{'revision':'9d8c85b42d04bb117a3b583d654fbb08','url':'/dicomMicroscopyViewer.min.js'},{'revision':'450494c199cf8dd8e8c34d5e98bf5334','url':'/dicomMicroscopyViewer.min.js.LICENSE.txt'},{'revision':'0ca44a1b8719e835645ffa804a9d1395','url':'/es6-shim.min.js'},{'revision':'9de58b497a43167958927602cb68cd30','url':'/google.js'},{'revision':'da6bc139af7c8fd4d7e3a7356d57ebca','url':'/index.html'},{'revision':'0d0886e5f1fdb4a209a9065dfb542c22','url':'/index.worker.1c69152d710fa7b84bce.worker.js'},{'revision':'066fd130de42b02857b634de1dc49a73','url':'/index.worker.1c69152d710fa7b84bce.worker.js.map'},{'revision':'71cec55513e051f0778ad89be760c11a','url':'/index.worker.min.worker.js'},{'revision':'fd1116add443fee52a935df926396e0f','url':'/index.worker.min.worker.js.map'},{'revision':'c4c4be134438c4cc55613210f3913526','url':'/init-service-worker.js'},{'revision':'74fc9658b62903be2048c1f82a22b4d4','url':'/manifest.json'},{'revision':'3fa71aa0af3e34b4ebd9a71eee0f4bdd','url':'/ohif-logo-light.svg'},{'revision':'7e81da785c63e75650101db6c5d7560e','url':'/ohif-logo.svg'},{'revision':'754d698a7b334af57c00f29723fd9751','url':'/oidc-client.min.js'},{'revision':'d05a380d50b74e629738ae6f62fb7e78','url':'/polyfill.min.js'},{'revision':'f528b6861c82ee4415fce0821fd695c1','url':'/silent-refresh.html'}]);
55
55
 
56
56
  // TODO: Cache API
57
57
  // https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/cache-api
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohif/app",
3
- "version": "3.7.0-beta.25",
3
+ "version": "3.7.0-beta.27",
4
4
  "productVersion": "3.4.0",
5
5
  "description": "OHIF Viewer",
6
6
  "author": "OHIF Contributors",
@@ -51,23 +51,23 @@
51
51
  "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
52
52
  "@cornerstonejs/codec-openjpeg": "^1.2.2",
53
53
  "@cornerstonejs/codec-openjph": "^2.4.2",
54
- "@cornerstonejs/dicom-image-loader": "^1.2.8",
55
- "@ohif/core": "3.7.0-beta.25",
56
- "@ohif/extension-cornerstone": "3.7.0-beta.25",
57
- "@ohif/extension-cornerstone-dicom-rt": "3.7.0-beta.25",
58
- "@ohif/extension-cornerstone-dicom-seg": "3.7.0-beta.25",
59
- "@ohif/extension-cornerstone-dicom-sr": "3.7.0-beta.25",
60
- "@ohif/extension-default": "3.7.0-beta.25",
61
- "@ohif/extension-dicom-microscopy": "3.7.0-beta.25",
62
- "@ohif/extension-dicom-pdf": "3.7.0-beta.25",
63
- "@ohif/extension-dicom-video": "3.7.0-beta.25",
64
- "@ohif/extension-test": "3.7.0-beta.25",
65
- "@ohif/i18n": "3.7.0-beta.25",
66
- "@ohif/mode-basic-dev-mode": "3.7.0-beta.25",
67
- "@ohif/mode-longitudinal": "3.7.0-beta.25",
68
- "@ohif/mode-microscopy": "3.7.0-beta.25",
69
- "@ohif/mode-test": "3.7.0-beta.25",
70
- "@ohif/ui": "3.7.0-beta.25",
54
+ "@cornerstonejs/dicom-image-loader": "^1.4.1",
55
+ "@ohif/core": "3.7.0-beta.27",
56
+ "@ohif/extension-cornerstone": "3.7.0-beta.27",
57
+ "@ohif/extension-cornerstone-dicom-rt": "3.7.0-beta.27",
58
+ "@ohif/extension-cornerstone-dicom-seg": "3.7.0-beta.27",
59
+ "@ohif/extension-cornerstone-dicom-sr": "3.7.0-beta.27",
60
+ "@ohif/extension-default": "3.7.0-beta.27",
61
+ "@ohif/extension-dicom-microscopy": "3.7.0-beta.27",
62
+ "@ohif/extension-dicom-pdf": "3.7.0-beta.27",
63
+ "@ohif/extension-dicom-video": "3.7.0-beta.27",
64
+ "@ohif/extension-test": "3.7.0-beta.27",
65
+ "@ohif/i18n": "3.7.0-beta.27",
66
+ "@ohif/mode-basic-dev-mode": "3.7.0-beta.27",
67
+ "@ohif/mode-longitudinal": "3.7.0-beta.27",
68
+ "@ohif/mode-microscopy": "3.7.0-beta.27",
69
+ "@ohif/mode-test": "3.7.0-beta.27",
70
+ "@ohif/ui": "3.7.0-beta.27",
71
71
  "@types/react": "^17.0.38",
72
72
  "classnames": "^2.3.2",
73
73
  "core-js": "^3.16.1",
@@ -107,5 +107,5 @@
107
107
  "webpack-cli": "^4.7.2",
108
108
  "webpack-merge": "^5.7.3"
109
109
  },
110
- "gitHead": "ffd53eff85845083ea5be344b72fd4231bc7ee12"
110
+ "gitHead": "92273b25b302d3a6cee0a16fd4e07ee54d6280cf"
111
111
  }