UNPKG

image-info-extractor

Version:

A lib to read image info and to extract/parse image metadata

1 lines 70 kB
const e=new TextEncoder("utf-8"),t=new TextDecoder("utf-8"),n=new TextDecoder("iso-8859-1"),r=new TextDecoder("utf-16be");function i(e,t,n=0){let r=n+t.length;if(r>e.length)return!1;for(let i=n,a=0;i<r;i++,a++)if(e[i]!==t[a])return!1;return!0}function a(e,t){let n={};for(let r,i=0;i<e.length;i++)r=e[i],n[r[t]]=r;return n}function o(e){let t="";for(let n=0;n<e.length;n++){let r=e[n].toString(16);1===r.length&&(t+="0"),t+=r}return t}function l(e){let t=e.lastIndexOf(".");return t<=0?"":e.slice(t)}async function s(e,t){let n=new c;return await new ReadableStream(new g(e)).pipeThrough(new DecompressionStream(t)).pipeTo(new WritableStream(n)),n.chunks}function u(e){let t=0;for(let n of e){if(!(n instanceof Uint8Array))throw new Error("Unexpected source type: "+Object.prototype.toString.call(n).slice(8,-1));t+=n.length}let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}class g{constructor(e){if(!Array.isArray(e))throw new Error("parameter chunks should be an Array");this.iterator=e[Symbol.iterator]()}pull(e){let{done:t,value:n}=this.iterator.next();t?e.close():e.enqueue(n)}}class c{chunks;byteWritten;constructor(){this.chunks=[],this.byteWritten=0}write(e){this.chunks.push(e),this.byteWritten+=e.length}}var m=Object.freeze({__proto__:null,basename:function(e,t){let n=e.lastIndexOf("/"),r=n<0?e:e.slice(n+1);return"string"==typeof t&&t.length>0&&r.endsWith(t)?r.slice(0,-t.length):r},binaryDecoder:n,compress:async function(e,t){let n=new c;return await new ReadableStream(new g(e)).pipeThrough(new CompressionStream(t)).pipeTo(new WritableStream(n)),n.chunks},concatArrays:u,decompress:s,extname:l,fromHexString:function(e){let t=e.length/2,n=new Uint8Array(t);for(let r=0,i=0;r<t;r++,i+=2)n[r]=parseInt(e.slice(i,i+2),16);return n},indexBy:a,indexOfArray:function(e,t,n=0){if(n<0)throw new Error("Parameter start cannot be negative");let r=n+t.length;if(r>e.length)return-1;if(0===t.length)return n;let i=t[0];e:for(let a=n;a<r;a++)if(e[a]===i){for(let n=a+1,r=1;r<t.length;n++,r++)if(e[n]!==t[r])continue e;return a}return-1},startsWithArray:i,toHexString:o,utf16beDecoder:r,utf8Decoder:t,utf8Encoder:e});const f=65536,p=e.encode("JFIF\0"),d=e.encode("JFXX\0"),h=e.encode("Exif\0\0"),y=e.encode("http://ns.adobe.com/xap/1.0/\0"),x=e.encode("http://ns.adobe.com/xmp/extension/\0"),b=e.encode("ICC_PROFILE\0"),S=e.encode("Photoshop 3.0\0"),P=e.encode("mjpg"),D=[65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65527],C=[65474,65477,65482,65486],w=[65475,65479,65483,65487];async function U(e){let t={},n={alpha:!1,lossless:!1,progressive:!1,animation:!1},r=0,a={[Symbol.asyncIterator]:()=>async function*(e){let t=f,n=e.size,r=await e.slice(0,Math.min(t,n)).arrayBuffer(),i=r.byteLength;if(r.byteLength<4)return null;let a=new Uint8Array(r),o=new DataView(r),l=M(o,0);if(65496!==l.marker)throw new Error("Unexpected start of file");let s=2,g=async l=>{if(a.length<=l){if(i>=n)return!1;let l=await e.slice(i,Math.min(i+t,n)).arrayBuffer();t=t<2097152?2*t:t,i+=l.byteLength;let s=u([a,new Uint8Array(l)]);r=s.buffer,a=s,o=new DataView(r)}return!0};for(;;){if(!await g(s+4))break;l=M(o,s);let{marker:e,length:t}=l;if(!(e>=65472&&e<=65519))break;{let n,r=s+4,i=t-2;if(e>=65488&&e<=65498)n=new Uint8Array(0);else{if(a.length<=r+t){if(!await g(r+t))break}n=a.subarray(r,r+i)}yield{marker:e,data:n,start:r,end:r+t}}s+=2+t}return null}(e)},o=[],l=[];for await(let e of a){let{marker:a,data:s}=e;if(65504===a)i(s,p)?(t.JFIF={content:s.slice(p.length).buffer},r|=16):i(s,d)&&(t.JFXX={content:s.slice(d.length).buffer},r|=8);else if(65505===a)i(s,h)?(t.EXIF={content:s.slice(h.length).buffer},r|=4):i(s,y)?(t.XMP={content:s.slice(y.length).buffer},r|=2):i(s,x)?o.push(I(s,x.length)):i(s,P)&&(n.animation=!0);else if(65506===a)i(s,b)&&l.push(T(s,b.length));else if(65517===a){if(i(s,S)){let e={[Symbol.iterator]:()=>B(s,S.length)},n=null;e:for(let t of e)if(1028===t.resId){n=t;break e}n&&(t.IPTC={content:n.data.slice(0).buffer})}}else if(D.includes(a)){let e=new DataView(s.buffer,s.byteOffset,s.byteLength);n.bitDepth=e.getUint8(0),n.width=e.getUint16(3);let r=e.getUint16(1);0===r||(n.height=r),C.includes(a)&&(n.progressive=!0),w.includes(a)&&(n.lossless=!0),t.INFO={parsed:n}}else{if(65498===a)break;if(65497===a)break}}if(o.length>0){let e=function(e){let t=e[0].fullLength;e.sort(((e,t)=>Math.sign(e.offset-t.offset)));let n=new Uint8Array(t),r=0;for(let t=0;t<e.length;t++){let{content:i,offset:a}=e[t];if(a!==r)return console.warn("ExtendedXMP chunk offset mismatch"),null;n.set(i,r),r+=i.length}if(r!==t)return console.warn("ExtendedXMP full length mismatch"),null;return n}(o);e&&(t.ExtendedXMP={content:e.buffer})}if(l.length>0){let e=function(e){let t=e[0].total,n=e.length;if(n!==t)return console.warn("ICC chunk count mismatch"),null;e.sort(((e,t)=>Math.sign(e.number-t.number)));let r=0;for(let t of e)r+=t.content.length;let i=new Uint8Array(r);for(let n=0,r=0;n<t;n++){let t=e[n].content;i.set(t,r),r+=t.length}for(let t of e)r+=t.content.byteLength;return i}(l);e&&(t.ICC={content:e.buffer},r|=1)}return n.flags=r,t}function I(e,t){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=n.decode(e.subarray(t,t+32)),a=r.getUint32(t+32),o=r.getUint32(t+36);return{content:e.subarray(t+40),guid:i,fullLength:a,offset:o}}function T(e,t){return{number:e[12],total:e[13],content:e.subarray(t+2)}}let M=(e,t)=>{let n=e.getUint16(t);if(255!==n>>8)throw new Error("Unexpected segment marker: 0x"+n.toString(16).toUpperCase().padStart(4,"0"));let r,i=255&n;return r=i>=208&&i<=217?0:221===i?4:e.getUint16(t+2),{marker:n,length:r}};function*B(e,t){const r="8BIM";let i=new DataView(e.buffer,e.byteOffset,e.byteLength),a=t;for(;a<i.byteLength;){let t=n.decode(new Uint8Array(i.buffer,i.byteOffset+a,4));if(t!==r)throw new Error(`Expected IPTC signature "${r}" but got "${t}"`);let o=i.getUint16(a+4);a+=6;let l=i.getUint8(a),s=n.decode(e.subarray(a+1,a+1+l)),u=1+s.length;u%2==1&&(u+=1),a+=u;let g=i.getUint32(a);a+=4;let c=new Uint8Array(i.buffer,i.byteOffset+a,g);a+=g%2==1?g+1:g,yield{resId:o,name:s,data:c}}}const F=[137,80,78,71,13,10,26,10];async function A(e){let t=await e.arrayBuffer(),r=new Uint8Array(t);if(!i(r,F))throw new Error("Not a PNG file");let a={},o={},l={},g=0,c={[Symbol.iterator]:()=>function*(e,t){let n=new N(e),r=t;for(;r<e.byteLength;){let e=n.getChunk(r);if(yield e,r=e.end,"IDAT"===e.type||"IEND"===e.type)break}}(t,F.length)};e:for(let e of c)switch(e.type){case"IHDR":{let t=e.data,n=new DataView(t.buffer,t.byteOffset,t.byteLngeht);o.width=n.getUint32(0),o.height=n.getUint32(4),o.bitDepth=n.getUint8(8),o.alpha=(4&n.getUint8(9))>0,o.progressive=1===n.getUint8(12),o.lossless=!0,o.animation=!1,a.INFO={parsed:o};break}case"eXIf":a.EXIF={content:e.data.slice().buffer},g|=4;break;case"iTXt":{let{data:t}=e,{keyword:r,compressionFlag:i,compressionMethod:l,text:c}=R(t);if("XML:com.adobe.xmp"===r){if(0===i)c=c.slice();else{if(0!==l)break;c=u((await s([c],"deflate")).chunks)}a.XMP={content:c.buffer},g|=2}else"Creation Time"===r&&(o.creationTime=new Date(n.decode(c)).getTime());break}case"iCCP":case"iCCN":{let t=k(r,e.start+8),{done:n,value:i}=t.next();if(n)break;let{bytesRead:o,data:l}=i,c=o,{data:m}=e;if(0===m[c]){let e=await s([m.subarray(c+1)],"deflate");a.ICC={content:u(e).buffer},g|=1}break}case"sRGB":o.colorSpace="srgb",o.renderingIntent=e.data[0];break;case"cICP":{let t=E(e.data);l.colorPrimaries=t.getUint8(0),l.transferFunction=t.getUint8(1),l.matrixCoefficients=t.getUint8(2),l.videoFullRangeFlag=t.getUint8(3);break}case"cHRM":{let t=E(e.data);l.whitePointX=t.getUint32(0)/1e5,l.whitePointY=t.getUint32(4)/1e5,l.redPrimaryX=t.getUint32(8)/1e5,l.redPrimaryY=t.getUint32(12)/1e5,l.greenPrimaryX=t.getUint32(16)/1e5,l.greenPrimaryY=t.getUint32(20)/1e5,l.bluePrimaryX=t.getUint32(24)/1e5,l.bluePrimaryY=t.getUint32(28)/1e5;break}case"gAMA":{let t=E(e.data);l.gamma=1e5/t.getUint32(0);break}case"mDCv":{let t=E(e.data);l.redPrimaryX=t.getUint16(0)/5e4,l.redPrimaryY=t.getUint16(2)/5e4,l.greenPrimaryX=t.getUint16(4)/5e4,l.greenPrimaryY=t.getUint16(6)/5e4,l.bluePrimaryX=t.getUint16(8)/5e4,l.bluePrimaryY=t.getUint16(10)/5e4,l.whitePointX=t.getUint16(12)/5e4,l.whitePointY=t.getUint16(14)/5e4,l.maximumLuminance=t.getUint32(16)/1e4,l.minimumLuminance=t.getUint32(20)/1e4;break}case"cLLi":{let t=E(e.data);l.maxContentLightLevel=t.getUint32(0)/1e4,l.maxFrameAverageLightLevel=t.getUint32(4)/1e4;break}case"tIME":{let t=E(e.data),n=new Date(0);n.setFullYear(t.getUint16(0)),n.setMonth(t.getUint8(2)-1),n.setDate(t.getUint8(3)),n.setHours(t.getUint8(4)),n.setMinutes(t.getUint8(5)),n.setSeconds(t.getUint8(6)),o.modificationTime=n.getTime();break}case"acTL":o.animation=!0;break e;case"IDAT":case"IEND":break e}return o.flags=g,a}function E(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}async function R(e){let t=e.indexOf(0),r=n.decode(e.subarray(0,t)),i=t+1,a=e[i],o=e[i+1];i+=2,t=e.indexOf(0,i);let l=n.decode(e.subarray(i,t));i=t+1,t=e.indexOf(0,i);let s=n.decode(e.subarray(i,t));return i=t+1,{keyword:r,compressonFlag:a,compressonMethod:o,languageTag:l,translatedKeyword:s,text:e.subarray(i)}}function*k(e,t=0){let r=new Uint8Array(e.buffer,e.byteOffset+t),i=0;for(let e=0;e<r.length;e++)0===r[e]&&(yield{bytesRead:e+1,data:n.decode(r.subarray(i,e))},i=e+1)}class N extends DataView{getBinaryString(e,t,r=!1){let i=new Uint8Array(super.buffer,super.byteOffset+e,t);if(r){let e=i.length-1;for(;e>-1&&0===i[e];)e--;return n.decode(i.subarray(0,e+1))}return n.decode(i)}getChunk(e){let t=e,n=super.getUint32(t);t+=4;let r=this.getBinaryString(t,4);t+=4;let i=new Uint8Array(super.buffer,t,n);t+=n;let a=super.getUint32(t);return t+=4,{type:r,data:i,crc:a,start:e,end:t}}}async function v(e){let t=e.size,n=await e.arrayBuffer(),r=n.byteLength,i=new O(n);if(r<12)throw new Error("Not a WebP file");let a=i.getChunk(0);if("RIFF"!==a.type||"WEBP"!==i.getBinaryString(a.start+8,4))throw new Error("Not a WebP file");if(8+a.size!==t)throw new Error(`Expected file length to be ${8+a.size} but got ${t}`);let o={},l={},s=0,u=0;e:for(let e=12;e<t;e=a.end){switch(a=i.getChunk(e),a.type){case"VP8X":{let t=e+8,n=i.getUint8(t);l.width=1+(16383&i.getUint16(t+4,!0)),l.height=1+(16383&i.getUint16(t+7,!0)),l.alpha=(16&n)>0,l.animation=(2&n)>0,l.bitDepth=8,o.INFO={parsed:l},u=44&n;break}case"VP8 ":case"VP8L":if(l.lossless="VP8L"===a.type,0===u)break e;break;case"EXIF":{let t=e+8,r=new Uint8Array(n).slice(t,t+a.size).buffer;o.EXIF={content:r},s|=4;break}case"ICCP":{let t=e+8,r=new Uint8Array(n).slice(t,t+a.size).buffer;o.ICC={content:r},s|=2;break}case"XMP ":{let t=e+8,r=new Uint8Array(n).slice(t,t+a.size).buffer;o.XMP={content:r},s|=1;break}default:continue}if(7===s)break}return l.flags=s,0===s?void 0:o}class O extends DataView{getBinaryString(e,t,r=!1){let i=new Uint8Array(super.buffer,super.byteOffset+e,t);if(r){let e=i.length-1;for(;e>-1&&0===i[e];)e--;return n.decode(i.subarray(0,e+1))}return n.decode(i)}getChunk(e){let t=super.getUint32(e+4,!0),n=e+8+t;return t%2==1&&n++,{type:this.getBinaryString(e,4),size:t,start:e,end:n}}}const L=["avif","avis"],_=["mif1","msf1"],G=["heic","heix","hevc","hevx"];async function V(e){let t=e.size,n=await e.arrayBuffer(),r=new H(n);if(t<12)throw new Error("Not a ISO BMFF file");let i=r.getFileTypeBox(0),o=i.major_brand;if(!(L.includes(o)||_.includes(o)||G.includes(o)))throw new Error("Not a AVIF/HEIF/HEIC file");let l={},s={},u=0,g=null;e:for(let e=i.end;e<t;){let t=r.getBox(e,Y);switch(t.type){case"meta":g=r.getMetaBox(t);break e;case"mdat":break e}e=t.end}if(g){let e=a(g.subBoxes,"type"),{iinf:t,iprp:n}=e;if(t){let n,i=e.pitm?.item_ID,a=t.items_infos.find((e=>e.item_ID===i));if("grid"===a?.type&&(s.grid=!0),n=t.items_infos.find((e=>"Exif"===e.item_type)),n){let t=X(r,e,n).buffer;t.byteLength>0&&(l.EXIF={content:t},u|=4)}if(n=t.items_infos.find((e=>"XMP"===e.item_name||"mime"===e.item_type&&"application/rdf+xml"===e.content_type)),n){let t=X(r,e,n).buffer;t.byteLength>0&&(l.XMP={content:t},u|=2)}}if(n){let e=n.subBoxes.find((e=>"ipco"===e.type));if(e)for(let t of e.subBoxes)switch(t.type){case"colr":"prof"!==t.colour_type&&"rICC"!==t.colour_type||(l.ICC={content:t.ICC_profile.buffer},u|=1);break;case"ispe":(!s.width||t.width*t.height>s.width*s.height)&&(s.width=t.width,s.height=t.height);break;case"pixi":s.bitDepth||t.channels>=3&&(s.bitDepth=t.bit_depth),(1===t.channels||t.channels>3)&&(s.alpha=!0);break;case"irot":s.rotation=t.rotation;break;case"imir":s.mirror=t.mirror;break;case"crtt":s.creationTime=t.time;break;case"mdft":s.modificationTime=t.time}}}return s.animation=["avis","msf1","hevc","hevx"].includes(i.major_brand),s.bitDepth||(s.bitDepth=8),s.alpha||(s.alpha=!1),l.INFO={parsed:s},s.flags=u,l}function X(e,t,n){let{item_ID:r}=n,{iloc:i}=t,a=i.items.find((e=>e.item_ID===r));if(!a)throw new Error("Cannot found item_ID "+r+" in iloc box");let o=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(0===i.version){let t=a.extents[0],r=a.base_offset+t.extent_offset,i=t.extent_length;if("mime"===n.item_type)return o.slice(r,r+i);{let t=e.getUint32(r);return r+=4+t,i-=4+t,o.slice(r,r+i)}}let{construction_method:l}=a;if(0===l){let t=a.extents[0],n=t.extent_offset,r=e.getUint32(n);n+=4+r;let i=t.extent_length-(4+r);return o.slice(n,n+i)}return o.slice(0,0)}function*W(e,t=0){let r=new Uint8Array(e.buffer,e.byteOffset+t),i=0;for(let e=0;e<r.length;e++)0===r[e]&&(yield{bytesRead:e+1,data:n.decode(r.subarray(i,e))},i=e+1)}let z=/^\w{3,4} ?/;class H extends DataView{getBinaryString(e,t,r=!1){let i=new Uint8Array(super.buffer,super.byteOffset+e,t);if(r){let e=i.length-1;for(;e>-1&&0===i[e];)e--;return n.decode(i.subarray(0,e+1))}return n.decode(i)}getBox(e,t){let n=new t,r=super.getUint32(e),i=this.getBinaryString(e+4,4);n.type=i;let a=e+8;return 1===r?(n.largesize=Number(super.getBigUint64(a)),a+=8):0===r&&(r=this.byteLength-e),n.size=r,"uuid"===i&&(n.usertype=this.getBinaryString(a,16),a+=16),z.test(i)||console.warn("Unexpected box signature: "+i),n.start=e,n.end=e+r,n.cur=a,n}getFullBox(e){let t=e,{cur:n}=t;return t.version=super.getUint8(n),t.flags=super.getUint8(n+1)<<24|super.getUint16(n+2),t.cur=n+4,t}getFileTypeBox(e){let t;if("number"==typeof e){if(t=this.getBox(e,J),"ftyp"!==t.type)throw new Error(`Expected boxtype to be "ftyp", but got "${t.type}"`)}else{t=e}let{cur:n}=t;t.major_brand=this.getBinaryString(n,4),t.minor_version=super.getUint32(n+4,4),n+=8;let r=Math.floor((t.end-n)/4),i=new Array(r);for(let e=0;e<r;e++)i[e]=this.getBinaryString(n,4),n+=4;return t.compatible_brands=i,t.cur=n,t}getMetaBox(e){let t=this.getFullBox(e),{cur:n}=t,r=t.subBoxes=[];for(;n<t.end;){let e=this.getBox(n,Y);switch(e.type){case"hdlr":e=this.getHandlerBox(e);break;case"pitm":e=this.getPrimaryItemBox(e);break;case"iloc":e=this.getItemLocationBox(e);break;case"iinf":e=this.getItemInfoBox(e);break;case"iref":e=this.getItemReferenceBox(e);break;case"iprp":e=this.getItemPropertiesBox(e);break;case"idat":e=this.getItemDataBox(e)}r.push(e),n=e.end}return t.cur=n,t}getHandlerBox(e){let t=this.getFullBox(e),n=t.cur;if(0!==super.getUint32(n))throw new Error(`Expected pre_defined to be 0, bot got ${t.pre_defined}`);t.handler_type=this.getBinaryString(n+4,4),n+=20;let r=t.end-n;return t.name=this.getBinaryString(n,r,!0),t.cur=t.end,t}getPrimaryItemBox(e){let t=this.getFullBox(e),{cur:n,version:r}=t;return 0===r?(t.item_ID=super.getUint16(n),n+=2):(t.item_ID=super.getUint32(n),n+=2),t.cur=n,t}getItemLocationBox(e){let t=this.getFullBox(e),{cur:n,version:r}=t,i=super.getUint16(n);n+=2;let a=t.offset_size=i>>12&15,o=t.length_size=i>>8&15,l=t.base_offset_size=i>>4&15,s=0;1===r||2===r?s=t.index_size=i>>0&15:t.reserved=i>>0&15;let u=0;r<2?(u=super.getUint16(n),n+=2):2===r&&(u=super.getUint32(n),n+=4);let g=t.items=[];for(let e=0;e<u;e++){let t=g[e]={};switch(r<2?(t.item_ID=super.getUint16(n),n+=2):(t.item_ID=super.getUint32(n),n+=4),1!==r&&2!==r||(i=super.getUint16(n),n+=2,t.reserved=i>>4&15,t.construction_method=15&i),t.data_reference_index=super.getUint16(n),n+=2,l){case 0:t.base_offset=0;break;case 1:t.base_offset=super.getUint8(n);break;case 2:t.base_offset=super.getUint16(n);break;case 4:t.base_offset=super.getUint32(n);break;case 8:t.base_offset=Number(super.getBigUint64(n));break;default:throw new Error("Unexpected base_offset_size: "+l)}n+=l;let u=super.getUint16(n);n+=2;let c=t.extents=[];for(let e=0;e<u;e++){let t=c[e]={};if((1===r||2===r)&&s>0){switch(s){case 1:t.extent_index=super.getUint8(n);break;case 2:t.extent_index=super.getUint16(n);break;case 4:t.extent_index=super.getUint32(n);break;case 8:t.extent_index=Number(super.getBigUint64(n));break;default:throw new Error("Unexpected index_size: "+s)}n+=s}switch(a){case 0:break;case 1:t.extent_offset=super.getUint8(n);break;case 2:t.extent_offset=super.getUint16(n);break;case 4:t.extent_offset=super.getUint32(n);break;case 8:t.extent_offset=Number(super.getBigUint64(n));break;default:throw new Error("Unexpected index_size: "+a)}switch(n+=a,o){case 0:break;case 1:t.extent_length=super.getUint8(n);break;case 2:t.extent_length=super.getUint16(n);break;case 4:t.extent_length=super.getUint32(n);break;case 8:t.extent_length=Number(super.getBigUint64(n));break;default:throw new Error("Unexpected index_size: "+o)}n+=o}}return t.cur=t.end,t}getItemDataBox(e){let t=e;return t.data=new Uint8Array(this.buffer).slice(t.cur,t.end),t.cur=t.end,t}getSingleItemTypeReferenceBox(e){let t=this.getFullBox(this.getBox(e,q)),{cur:n}=t;t.from_item_ID=super.getUint16(n),n+=2;let r=t.reference_count=super.getUint16(n);n+=2;let i=t.to_item_ID=new Uint16Array(r);for(let e=0;e<r;e++)i[e]=super.getUint16(n),n+=2;return t.cur=n,t}getSingleItemTypeReferenceBoxLarge(e){let t=this.getFullBox(this.getBox(e,$)),{cur:n}=t;t.from_item_ID=super.getUint32(n),n+=4;let r=t.reference_count=super.getUint16(n);n+=2;let i=t.to_item_ID=new Uint32Array(r);for(let e=0;e<r;e++)i[e]=super.getUint32(n),n+=4;return t.cur=n,t}getItemReferenceBox(e){let t=this.getFullBox(e),{cur:n,version:r}=t,i=t.references=[];if(0===r)for(;n<t.end;){let e=this.getSingleItemTypeReferenceBox(n);n=e.end,i.push(e)}else for(;n<t.end;){let e=this.getSingleItemTypeReferenceBoxLarge(n);n=e.end,i.push(e)}return t.cur=n,t}getItemInfoEntry(e){let t=this.getFullBox(this.getBox(e,Z)),{cur:n,version:r}=t;if(0===r||1===r){t.item_ID=super.getUint16(n),n+=2,t.item_protection_index=super.getUint16(n),n+=2;let e,i=W(this,n);if((e=i.next()).done||(t.item_name=e.value.data),(e=i.next()).done||(t.content_type=e.value.data),(e=i.next()).done||(t.content_encoding=e.value.data),1===r){let r;if((e=i.next()).done||(r=t.extension_type=e.value.data),"fdel"===r){(e=i.next()).done||(t.content_location=e.value.data),(e=i.next()).done||(t.content_MD5=e.value.data),n+=i.bytesRead,t.content_length=super.getBigUint64(n),n+=8,t.transfer_length=super.getBigUint64(n),n+=8;let r=t.entry_count=super.getBigUint8(n);n+=1;let a=t.group_ids=new Uint32Array(r);for(let e=0;e<r;e++)a[e]=super.getUint32(n),n+=4}}t.cur=t.end}else if(r>=2){2===r?(t.item_ID=super.getUint16(n),n+=2):3===r&&(t.item_ID=super.getUint32(n),n+=4),t.item_protection_index=super.getUint16(n),n+=2;let e=t.item_type=this.getBinaryString(n,4);n+=4;let i,a=W(this,n);(i=a.next()).done||(t.item_name=i.value.data),"mime"===e?((i=a.next()).done||(t.content_type=i.value.data),(i=a.next()).done||(t.content_encoding=i.value.data),n=t.end):"uri "===e&&((i=a.next()).done||(t.item_uri_type=i.value.data),n=t.end),t.cur=n}return t}getItemInfoBox(e){let t,n=this.getFullBox(e),{cur:r,version:i}=n;0===i?(t=super.getUint16(r),r+=2):(t=super.getUint32(r),r+=4);let a=n.items_infos=new Array(t);for(let e=0;e<t;e++){r=(a[e]=this.getItemInfoEntry(r)).end}return n}getItemPropertyContainerBox(e){let t=e,{cur:n}=t,r=t.entries=[],i=t.subBoxes=[];for(;n<t.end;){let e=this.getBox(n,Y);switch(e.type){case"ispe":this.getImageSpacialExtent(e),i.push(e);break;case"pixi":this.getPixelInformation(e),i.push(e);break;case"colr":this.getColourInformationBox(e),i.push(e);break;case"crtt":case"mdft":this.getTimeInformationBox(e),i.push(e);break;case"irot":this.getImageRotation(e),i.push(e);break;case"imir":this.getImageMirror(e),i.push(e);break;default:{let t={};r.push(t),t.name=e.type,t.data=new Uint8Array(super.buffer).slice(e.cur,e.end);break}}n=e.end}return t.cur=n,t}getItemPropertiesBox(e){let t=e,{cur:n}=t,r=t.subBoxes=[];for(;n<t.end;){let e=this.getBox(n,Y);switch(e.type){case"ipco":e=this.getItemPropertyContainerBox(e);break;case"ipma":e=this.getItemPropertyAssociation(e)}r.push(e),n=e.end}return t}getColourInformationBox(e){let{cur:t}=e,n=e.colour_type=this.getBinaryString(t,4);if(t+=4,"nclx"===n)e.colour_primaries=super.getUint16(t),e.transfer_characteristics=super.getUint16(t+2),e.matrix_coefficients=super.getUint16(t+4),e.full_range_flag=super.getUint8(t+6);else if("rICC"===n||"prof"===n){let n=super.getUint32(t);e.ICC_profile=new Uint8Array(this.buffer).slice(t,t+n)}return e.cur=e.end,e}getTimeInformationBox(e){let{cur:t}=e;return e.time=Number(super.getBigUint64(t)),e.cur=e.end,e}getImageSpacialExtent(e){let{cur:t}=e;return e.item_ID=super.getUint32(t),e.width=super.getUint32(t+4),e.height=super.getUint32(t+8),e.cur=e.end,e}getPixelInformation(e){let{cur:t}=e;return e.item_ID=super.getUint32(t),e.channels=super.getUint8(t+4),e.bit_depth=super.getUint8(t+5),e.cur=e.end,e}getImageRotation(e){let{cur:t}=e;return e.rotation=90*super.getUint8(t),e.cur=t+1,e}getImageMirror(e){let{cur:t}=e;return e.mirror=90*super.getUint8(t),e.cur=t+1,e}getCleanAperture(e){return e}getItemPropertyAssociation(e){let{cur:t}=e;return e.cur=t,e}}class Y{type;size;start;end}class j extends Y{version;flags}class J extends Y{major_brand;minor_version;compatible_brands}class q{from_item_ID;reference_count;to_item_ID}class ${from_item_ID;reference_count;to_item_ID}class Z extends j{item_ID;item_protection_index;item_name;content_type;item_type}async function K(e){let t,n={},r=0,i=await e.text(),a=i.indexOf("<x:xmpmeta");if(a>-1){let e=i.indexOf("</x:xmpmeta>",a);e>-1&&(t=i.slice(a,e+12))}t&&(n.XMP={content:t},r|=2);let o=(new DOMParser).parseFromString(i,"text/xml"),{documentElement:l}=o,s=l.getAttribute("width"),u=l.getAttribute("height");if(!s){let e=/\d+ \d+ (\d+) (\d+)/.exec(l.getAttribute("viewBox"));e&&(s=e[1],u=e[2])}let g={width:+s,height:+u,flags:r,alpha:!0,lossless:!0};return n.INFO={parsed:g},n}const Q={1:"InteropIndex",2:"InteropVersion",11:"ProcessingSoftware",254:"SubfileType",255:"OldSubfileType",256:"ImageWidth",257:"ImageHeight",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",263:"Thresholding",264:"CellWidth",265:"CellLength",266:"FillOrder",269:"DocumentName",270:"ImageDescription",271:"Make",272:"Model",273:"StripOffsets",274:"Orientation",277:"SamplesPerPixel",278:"RowsPerStrip",279:"StripByteCounts",280:"MinSampleValue",281:"MaxSampleValue",282:"XResolution",283:"YResolution",284:"PlanarConfiguration",285:"PageName",286:"XPosition",287:"YPosition",288:"FreeOffsets",289:"FreeByteCounts",290:"GrayResponseUnit",291:"GrayResponseCurve",292:"T4Options",293:"T6Options",296:"ResolutionUnit",297:"PageNumber",300:"ColorResponseUnit",301:"TransferFunction",305:"Software",306:"ModifyDate",315:"Artist",316:"HostComputer",317:"Predictor",318:"WhitePoint",319:"PrimaryChromaticities",320:"ColorMap",321:"HalftoneHints",322:"TileWidth",323:"TileLength",324:"TileOffsets",325:"TileByteCounts",326:"BadFaxLines",327:"CleanFaxData",328:"ConsecutiveBadFaxLines",330:"SubIFD",332:"InkSet",333:"InkNames",334:"NumberofInks",336:"DotRange",337:"TargetPrinter",338:"ExtraSamples",339:"SampleFormat",340:"SMinSampleValue",341:"SMaxSampleValue",342:"TransferRange",343:"ClipPath",344:"XClipPathUnits",345:"YClipPathUnits",346:"Indexed",347:"JPEGTables",351:"OPIProxy",400:"GlobalParametersIFD",401:"ProfileType",402:"FaxProfile",403:"CodingMethods",404:"VersionYear",405:"ModeNumber",433:"Decode",434:"DefaultImageColor",435:"T82Options",437:"JPEGTables",512:"JPEGProc",513:"ThumbnailOffset",514:"ThumbnailLength",515:"JPEGRestartInterval",517:"JPEGLosslessPredictors",518:"JPEGPointTransforms",519:"JPEGQTables",520:"JPEGDCTables",521:"JPEGACTables",529:"YCbCrCoefficients",530:"YCbCrSubSampling",531:"YCbCrPositioning",532:"ReferenceBlackWhite",559:"StripRowCounts",700:"ApplicationNotes",999:"USPTOMiscellaneous",4096:"RelatedImageFileFormat",4097:"RelatedImageWidth",4098:"RelatedImageHeight",18246:"Rating",18247:"XP_DIP_XML",18248:"StitchInfo",18249:"RatingPercent",28672:"SonyRawFileType",28688:"SonyToneCurve",28721:"VignettingCorrection",28722:"VignettingCorrParams",28724:"ChromaticAberrationCorrection",28725:"ChromaticAberrationCorrParams",28726:"DistortionCorrection",28727:"DistortionCorrParams",28728:"SonyRawImageSize",29456:"BlackLevel",29459:"WB_RGGBLevels",29895:"SonyCropTopLeft",29896:"SonyCropSize",32781:"ImageID",32931:"WangTag1",32932:"WangAnnotation",32933:"WangTag3",32934:"WangTag4",32953:"ImageReferencePoints",32954:"RegionXformTackPoint",32955:"WarpQuadrilateral",32956:"AffineTransformMat",32995:"Matteing",32996:"DataType",32997:"ImageDepth",32998:"TileDepth",33300:"ImageFullWidth",33301:"ImageFullHeight",33302:"TextureFormat",33303:"WrapModes",33304:"FovCot",33305:"MatrixWorldToScreen",33306:"MatrixWorldToCamera",33405:"Model2",33421:"CFARepeatPatternDim",33422:"CFAPattern2",33423:"BatteryLevel",33424:"KodakIFD",33432:"Copyright",33434:"ExposureTime",33437:"FNumber",33445:"MDFileTag",33446:"MDScalePixel",33447:"MDColorTable",33448:"MDLabName",33449:"MDSampleInfo",33450:"MDPrepDate",33451:"MDPrepTime",33452:"MDFileUnits",33550:"PixelScale",33589:"AdventScale",33590:"AdventRevision",33628:"UIC1Tag",33629:"UIC2Tag",33630:"UIC3Tag",33631:"UIC4Tag",33723:"IPTC-NAA",33918:"IntergraphPacketData",33919:"IntergraphFlagRegisters",33920:"IntergraphMatrix",33921:"INGRReserved",33922:"ModelTiePoint",34016:"Site",34017:"ColorSequence",34018:"IT8Header",34019:"RasterPadding",34020:"BitsPerRunLength",34021:"BitsPerExtendedRunLength",34022:"ColorTable",34023:"ImageColorIndicator",34024:"BackgroundColorIndicator",34025:"ImageColorValue",34026:"BackgroundColorValue",34027:"PixelIntensityRange",34028:"TransparencyIndicator",34029:"ColorCharacterization",34030:"HCUsage",34031:"TrapIndicator",34032:"CMYKEquivalent",34118:"SEMInfo",34152:"AFCP_IPTC",34232:"PixelMagicJBIGOptions",34263:"JPLCartoIFD",34264:"ModelTransform",34306:"WB_GRGBLevels",34310:"LeafData",34377:"PhotoshopSettings",34665:"ExifOffset",34675:"ICC_Profile",34687:"TIFF_FXExtensions",34688:"MultiProfiles",34689:"SharedData",34690:"T88Options",34732:"ImageLayer",34735:"GeoTiffDirectory",34736:"GeoTiffDoubleParams",34737:"GeoTiffAsciiParams",34750:"JBIGOptions",34850:"ExposureProgram",34852:"SpectralSensitivity",34853:"GPSInfo",34855:"ISO",34856:"Opto-ElectricConvFactor",34857:"Interlace",34858:"TimeZoneOffset",34859:"SelfTimerMode",34864:"SensitivityType",34865:"StandardOutputSensitivity",34866:"RecommendedExposureIndex",34867:"ISOSpeed",34868:"ISOSpeedLatitudeyyy",34869:"ISOSpeedLatitudezzz",34908:"FaxRecvParams",34909:"FaxSubAddress",34910:"FaxRecvTime",34929:"FedexEDR",34954:"LeafSubIFD",36864:"ExifVersion",36867:"DateTimeOriginal",36868:"DateTimeDigitized",36873:"GooglePlusUploadCode",36880:"OffsetTime",36881:"OffsetTimeOriginal",36882:"OffsetTimeDigitized",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBiasValue",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",37387:"FlashEnergy",37388:"SpatialFrequencyResponse",37389:"Noise",37390:"FocalPlaneXResolution",37391:"FocalPlaneYResolution",37392:"FocalPlaneResolutionUnit",37393:"ImageNumber",37394:"SecurityClassification",37395:"ImageHistory",37396:"SubjectArea",37397:"ExposureIndex",37398:"TIFF-EPStandardID",37399:"SensingMethod",37434:"CIP3DataFile",37435:"CIP3Sheet",37436:"CIP3Side",37439:"StoNits",37500:"MakerNote",37510:"UserComment",37520:"SubSecTime",37521:"SubSecTimeOriginal",37522:"SubSecTimeDigitized",37679:"MSDocumentText",37680:"MSPropertySetStorage",37681:"MSDocumentTextPosition",37724:"ImageSourceData",37888:"AmbientTemperature",37889:"Humidity",37890:"Pressure",37891:"WaterDepth",37892:"Acceleration",37893:"CameraElevationAngle",40091:"XPTitle",40092:"XPComment",40093:"XPAuthor",40094:"XPKeywords",40095:"XPSubject",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",40964:"RelatedSoundFile",40965:"InteropOffset",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41485:"Noise",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41489:"ImageNumber",41490:"SecurityClassification",41491:"ImageHistory",41492:"SubjectLocation",41493:"ExposureIndex",41494:"TIFF-EPStandardID",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRatio",41989:"FocalLengthIn35mmFormat",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",42016:"ImageUniqueID",42032:"CameraOwnerName",42033:"BodySerialNumber",42034:"LensSpecification",42035:"LensMake",42036:"LensModel",42037:"LensSerialNumber",42038:"Title",42039:"Photographer",42040:"ImageEditor",42041:"CameraFirmware",42042:"RAWDevelopingSoftware",42043:"ImageEditingSoftware",42044:"MetadataEditingSoftware",42080:"CompositeImage",42081:"CompositeImageCount",42082:"CompositeImageExposureTimes",42112:"GDALMetadata",42113:"GDALNoData",42240:"Gamma",44992:"ExpandSoftware",44993:"ExpandLens",44994:"ExpandFilm",44995:"ExpandFilterLens",44996:"ExpandScanner",44997:"ExpandFlashLamp",45056:"MPFVersion",45057:"MPFNumberOfImages",45058:"MPFImageList",45059:"MPFImageUIDList",45060:"MPFTotalFrames",45313:"MPFIndividualNum",45569:"MPFPanOrientation",45570:"MPFPanOverlapH",45571:"MPFPanOverlapV",45572:"MPFBaseViewpointNum",45573:"MPFConvergenceAngle",45574:"MPFBaselineLength",45575:"MPFVerticalDivergence",45576:"MPFAxisDistanceX",45577:"MPFAxisDistanceY",45578:"MPFAxisDistanceZ",45579:"MPFYawAngle",45580:"MPFPitchAngle",45581:"MPFRollAngle",46275:"HasselbladRawImage",48129:"PixelFormat",48130:"Transformation",48131:"Uncompressed",48132:"ImageType",48256:"ImageWidth",48257:"ImageHeight",48258:"WidthResolution",48259:"HeightResolution",48320:"ImageOffset",48321:"ImageByteCount",48322:"AlphaOffset",48323:"AlphaByteCount",48324:"ImageDataDiscard",48325:"AlphaDataDiscard",50215:"OceScanjobDesc",50216:"OceApplicationSelector",50217:"OceIDNumber",50218:"OceImageLogic",50255:"Annotations",50341:"PrintIM",50459:"HasselbladExif",50547:"OriginalFileName",50560:"USPTOOriginalContentType",50656:"CR2CFAPattern",50706:"DNGVersion",50707:"DNGBackwardVersion",50708:"UniqueCameraModel",50709:"LocalizedCameraModel",50710:"CFAPlaneColor",50711:"CFALayout",50712:"LinearizationTable",50713:"BlackLevelRepeatDim",50714:"BlackLevel",50715:"BlackLevelDeltaH",50716:"BlackLevelDeltaV",50717:"WhiteLevel",50718:"DefaultScale",50719:"DefaultCropOrigin",50720:"DefaultCropSize",50721:"ColorMatrix1",50722:"ColorMatrix2",50723:"CameraCalibration1",50724:"CameraCalibration2",50725:"ReductionMatrix1",50726:"ReductionMatrix2",50727:"AnalogBalance",50728:"AsShotNeutral",50729:"AsShotWhiteXY",50730:"BaselineExposure",50731:"BaselineNoise",50732:"BaselineSharpness",50733:"BayerGreenSplit",50734:"LinearResponseLimit",50735:"CameraSerialNumber",50736:"DNGLensInfo",50737:"ChromaBlurRadius",50738:"AntiAliasStrength",50739:"ShadowScale",50740:"DNGAdobeData",50741:"MakerNoteSafety",50752:"RawImageSegmentation",50778:"CalibrationIlluminant1",50779:"CalibrationIlluminant2",50780:"BestQualityScale",50781:"RawDataUniqueID",50784:"AliasLayerMetadata",50827:"OriginalRawFileName",50828:"OriginalRawFileData",50829:"ActiveArea",50830:"MaskedAreas",50831:"AsShotICCProfile",50832:"AsShotPreProfileMatrix",50833:"CurrentICCProfile",50834:"CurrentPreProfileMatrix",50879:"ColorimetricReference",50885:"SRawType",50898:"PanasonicTitle",50899:"PanasonicTitle2",50931:"CameraCalibrationSig",50932:"ProfileCalibrationSig",50933:"ProfileIFD",50934:"AsShotProfileName",50935:"NoiseReductionApplied",50936:"ProfileName",50937:"ProfileHueSatMapDims",50938:"ProfileHueSatMapData1",50939:"ProfileHueSatMapData2",50940:"ProfileToneCurve",50941:"ProfileEmbedPolicy",50942:"ProfileCopyright",50964:"ForwardMatrix1",50965:"ForwardMatrix2",50966:"PreviewApplicationName",50967:"PreviewApplicationVersion",50968:"PreviewSettingsName",50969:"PreviewSettingsDigest",50970:"PreviewColorSpace",50971:"PreviewDateTime",50972:"RawImageDigest",50973:"OriginalRawFileDigest",50974:"SubTileBlockSize",50975:"RowInterleaveFactor",50981:"ProfileLookTableDims",50982:"ProfileLookTableData",51008:"OpcodeList1",51009:"OpcodeList2",51022:"OpcodeList3",51041:"NoiseProfile",51043:"TimeCodes",51044:"FrameRate",51058:"TStop",51081:"ReelName",51089:"OriginalDefaultFinalSize",51090:"OriginalBestQualitySize",51091:"OriginalDefaultCropSize",51105:"CameraLabel",51107:"ProfileHueSatMapEncoding",51108:"ProfileLookTableEncoding",51109:"BaselineExposureOffset",51110:"DefaultBlackRender",51111:"NewRawImageDigest",51112:"RawToPreviewGain",51114:"CacheVersion",51125:"DefaultUserCrop",51157:"NikonNEFInfo",51177:"DepthFormat",51178:"DepthNear",51179:"DepthFar",51180:"DepthUnits",51181:"DepthMeasureType",51182:"EnhanceParams",52525:"ProfileGainTableMap",52526:"SemanticName",52528:"SemanticInstanceID",52529:"CalibrationIlluminant3",52530:"CameraCalibration3",52531:"ColorMatrix3",52532:"ForwardMatrix3",52533:"IlluminantData1",52534:"IlluminantData2",52535:"IlluminantData3",52536:"MaskSubArea",52537:"ProfileHueSatMapData3",52538:"ReductionMatrix3",52539:"RGBTables",59932:"Padding",59933:"OffsetSchema",65e3:"OwnerName",65001:"SerialNumber",65002:"Lens",65024:"KDC_IFD",65100:"RawFile",65101:"Converter",65102:"WhiteBalance",65105:"Exposure",65106:"Shadows",65107:"Brightness",65108:"Contrast",65109:"Saturation",65110:"Sharpness",65111:"Smoothness",65112:"MoireFilter"},ee={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential",31:"GPSHPositioningError"};function te(e){let t=new Uint8Array(e),n=new ae(e);if(t.length<=8)throw new Error("Invalid EXIF data: ends before ifdOffset");let r,i=n.getUint32(0);if(1229531648===i)r=!0;else{if(1296891946!==i)throw new Error("Invalid EXIF data: expected byte order marker.");r=!1}let a=n.getUint32(4,r);if(a<8)throw new Error("Invalid EXIF data: ifdOffset < 8");let o={},l=ne(n,a,Q,r);if(o.tiff=l,t.length>=a+2){let e=n.getUint16(a,r);if(t.length>=a+2+12*e+4){let t=n.getUint32(a+2+12*e,r);0!==t&&(o.thumbnail=ne(n,t,Q,r))}}if(l){l.ExifOffset>0&&(o.exif=ne(n,l.ExifOffset,Q,r)),l.GPSInfo>0&&(o.gps=ne(n,l.GPSInfo,ee,r));let e=l.InteropOffset||o.exif?.InteropOffset;e>0&&(o.interop=ne(n,e,Q,r))}return o}function ne(e,t,n,r=!1){let i=e.byteLength;if(t+2>i)return null;let a={},o=e.getUint16(t,r);if(t+2+12*o>i)return null;for(let i,l=0,s=t+2;l<o;l++,s+=12){i=e.getUint16(s,r);let t=n[i]||i.toString(16).toUpperCase().padStart(4,"0"),o=e.getTag(s+2,r);a[t]=o}return a}const re=[0,1,1,2,4,8,1,1,2,4,8,8,8],ie=[null,Uint8Array,null,Uint8Array,Uint32Array,Float64Array,Int8Array,null,Int16Array,Int32Array,Float64Array,Float32Array,Float64Array];let ae=class extends DataView{getBinaryString(e,t,r=!1){let i=new Uint8Array(super.buffer,super.byteOffset+e,t);if(r){let e=i.length-1;for(;e>-1&&0===i[e];)e--;return n.decode(i.subarray(0,e+1))}return n.decode(i)}getTag(e,t){let n=super.byteLength;if(e+7>n)return null;let r=super.getUint16(e,t);if(0===r||r>10)return console.warn("Unrecognized tag type: "+r),null;let i,a=re[r]||4,o=super.getUint32(e+2,t),l=a*o;if(l<=4)i=e+6;else{if(e+10>n)return null;i=super.getUint32(e+6,t)}if(2===r)return this.getBinaryString(i,o,!0).trimEnd();if(7===r)return new Uint8Array(super.buffer).slice(i,i+l);if(e+l>n)return null;if(1===o)return this.getTagValue(i,r,t);{let e=new ie[r](o);for(let l=0;l<o&&i<n;l++,i+=a)e[l]=this.getTagValue(i,r,t);return e}}getTagValue(e,t,n){switch(t){case 1:return super.getUint8(e);case 3:return super.getUint16(e,n);case 4:return super.getUint32(e,n);case 5:return super.getUint32(e,n)/super.getUint32(e+4,n);case 6:return super.getInt8(e);case 8:return super.getInt16(e,n);case 9:return super.getInt32(e,n);case 10:return super.getInt32(e,n)/super.getInt32(e+4,n);case 11:return super.getFloat32(e,n);case 12:return super.getFloat64(e,n);default:return null}}};const oe={"dc:Date":"Date[]","exif:DateTimeOriginal":"Date","exif:ColorSpace":"integer","exif:ExposureTime":"rational","exif:FNumber":"rational","exif:ExposureProgram":"integer","exifEX:PhotographicSensitivity":"integer","exifEX:SensitivityType":"integer","exif:ISOSpeedRatings":"integer","exifEX:StandardOutputSensitivity":"integer","exifEX:ISOSpeed":"integer","exifEX:ISOSpeedLatitudeyyy":"integer","exifEX:ISOSpeedLatitudezzz":"integer","exif:ShutterSpeedValue":"rational","exif:ApertureValue":"rational","exif:BrightnessValue":"rational","exif:ExposureBiasValue":"rational","exif:MaxApertureValue":"rational","exif:SubjectDistance":"rational","exif:MeteringMode":"integer","exif:LightSource":"integer","exif:FocalLength":"rational","exif:SubjectArea":"integer","exif:FlashEnergy":"rational","exif:FocalPlaneXResolution":"rational","exif:FocalPlaneYResolution":"rational","exif:SubjectLocation":"integer","exif:ExposureIndex":"rational","exif:SensingMethod":"integer","exif:FileSource":"integer","exif:SceneType":"integer","exif:CustomRendered":"integer","exif:ExposureMode":"integer","exif:WhiteBalance":"integer","exif:DigitalZoomRatio":"rational","exif:FocalLengthIn35mmFilm":"integer","exif:SceneCaptureType":"integer","exif:GainControl":"integer","exif:Contrast":"integer","exif:Saturation":"integer","exif:Sharpness":"integer","exif:DeviceSettingDescription":"integer","exif:SubjectDistanceRange":"integer","exifEX:LensSpecification":"rational[]","exif:GPSLatitude":"GPSCoordinate","exif:GPSLongitude":"GPSCoordinate","exif:GPSAltitudeRef":"integer","exif:GPSAltitude":"rational","exif:GPSTimeStamp":"Date","exif:GPSMeasureMode":"integer","exif:GPSDOP":"rational","exif:GPSSpeed":"rational","exif:GPSTrack":"rational","exif:GPSImgDirection":"rational","exif:GPSDestLatitude":"GPSCoordinate","exif:GPSDestLongitude":"GPSCoordinate","exif:GPSDestBearing":"rational","exif:GPSDestDistance":"rational","exif:GPSDifferential":"integer","exifEX:GPSHPositioningError":"rational","exifEX:Gamma":"rational","exif:ComponentsConfiguration":"integer","exif:CompressedBitsPerPixel":"rational","exif:PixelXDimension":"integer","exif:PixelYDimension":"integer","exif:Columns":"integer","exif:Rows":"integer","exif:Fired":"boolean","exif:Function":"boolean","exif:Mode":"integer","exif:RedEyeMode":"boolean","exif:Return":"integer","tiff:ImageWidth":"integer","tiff:ImageLength":"integer","tiff:DateTime":"Date","tiff:ImageHeight":"integer","tiff:BitsPerSample":"integer","tiff:Compression":"integer","tiff:PhotometricInterpretation":"integer","tiff:Orientation":"integer","tiff:SamplesPerPixel":"integer","tiff:PlanarConfiguration":"integer","tiff:YCbCrSubSampling":"integer","tiff:YCbCrPositioning":"integer","tiff:XResolution":"rational","tiff:YResolution":"rational","tiff:ResolutionUnit":"integer","tiff:TransferFunction":"integer","tiff:WhitePoint":"rational[]","tiff:PrimaryChromaticities":"rational[]","tiff:YCbCrCoefficients":"rational[]","tiff:ReferenceBlackWhite":"rational[]","xmp:CreateDate":"Date","xmp:MetadataDate":"Date","xmp:ModifyDate":"Date","xmp:PageImageHeight":"integer","xmp:PageImagePageNumber":"integer","xmp:PageImageWidth":"integer","xmp:Rating":"real","xmp:RatingPercent":"real[]","xmp:ThumbnailHeight":"integer","xmp:ThumbnailWidth":"integer","xmp:PageNumber":"integer","xmp:Height":"integer","xmp:Width":"integer","xmpDM:AltTimecodeValue":"integer","xmpDM:AudioModDate":"Date","xmpDM:AudioSampleRate":"integer","xmpDM:BeatSpliceParamsRiseInDecibel":"real","xmpDM:BeatSpliceParamsRiseInTimeDurationScale":"rational","xmpDM:BeatSpliceParamsRiseInTimeDurationValue":"integer","xmpDM:BeatSpliceParamsUseFileBeatsMarker":"boolean","xmpDM:ContributedMediaDurationScale":"rational","xmpDM:ContributedMediaDurationValue":"integer","xmpDM:ContributedMediaManaged":"boolean","xmpDM:ContributedMediaStartTimeScale":"rational","xmpDM:ContributedMediaStartTimeValue":"integer","xmpDM:DurationScale":"rational","xmpDM:DurationValue":"integer","xmpDM:FileDataRate":"rational","xmpDM:Good":"boolean","xmpDM:IntroTimeScale":"rational","xmpDM:IntroTimeValue":"integer","xmpDM:Loop":"boolean","xmpDM:MarkersProbability":"real","xmpDM:MetadataModDate":"Date","xmpDM:NumberOfBeats":"real","xmpDM:OutCueScale":"rational","xmpDM:OutCueValue":"integer","xmpDM:PartOfCompilation":"boolean","xmpDM:RelativeTimestampScale":"rational","xmpDM:RelativeTimestampValue":"integer","xmpDM:ReleaseDate":"Date","xmpDM:ShotDate":"Date","xmpDM:StartTimecodeValue":"integer","xmpDM:StartTimeSampleSize":"integer","xmpDM:TakeNumber":"integer","xmpDM:Tempo":"real","xmpDM:TimeScaleParamsFrameOverlappingPercentage":"real","xmpDM:TimeScaleParamsFrameSize":"real","xmpDM:TrackNumber":"integer","xmpDM:TracksMarkersProbability":"real","xmpDM:VideoAlphaPremultipleColorA":"integer","xmpDM:VideoAlphaPremultipleColorB":"integer","xmpDM:VideoAlphaPremultipleColorBlack":"real","xmpDM:VideoAlphaPremultipleColorBlue":"integer","xmpDM:VideoAlphaPremultipleColorCyan":"real","xmpDM:VideoAlphaPremultipleColorGray":"integer","xmpDM:VideoAlphaPremultipleColorGreen":"integer","xmpDM:VideoAlphaPremultipleColorL":"real","xmpDM:VideoAlphaPremultipleColorMagenta":"real","xmpDM:VideoAlphaPremultipleColorRed":"integer","xmpDM:VideoAlphaPremultipleColorTint":"integer","xmpDM:VideoAlphaPremultipleColorYellow":"real","xmpDM:VideoAlphaUnityIsTransparent":"boolean","xmpDM:VideoFrameRate":"real","xmpDM:VideoFrameSizeH":"real","xmpDM:VideoFrameSizeW":"real","xmpDM:VideoModDate":"Date","xmpDM:VideoPixelAspectRatio":"rational","xmpDM:RiseInDecibel":"real","xmpDM:Scale":"rational","xmpDM:Value":"integer","xmpDM:Managed":"boolean","xmpDM:Probability":"real","xmpDM:FrameOverlappingPercentage":"real","xmpDM:FrameSize":"real","xmpDM:A":"integer","xmpDM:B":"integer","xmpDM:L":"real","xmpDM:Black":"real","xmpDM:Blue":"integer","xmpDM:Cyan":"real","xmpDM:Gray":"integer","xmpDM:Green":"integer","xmpDM:Magenta":"real","xmpDM:Red":"integer","xmpDM:Tint":"integer","xmpDM:Yellow":"real","xmpDM:H":"real","xmpDM:W":"real","xmpMM:DerivedFromLastModifyDate":"Date","xmpMM:HistoryWhen":"Date","xmpMM:IngredientsLastModifyDate":"Date","xmpMM:ManagedFromLastModifyDate":"Date","xmpMM:ManifestPlacedXResolution":"real","xmpMM:ManifestPlacedYResolution":"real","xmpMM:ManifestReferenceLastModifyDate":"Date","xmpMM:RenditionOfLastModifyDate":"Date","xmpMM:SaveID":"integer","xmpMM:VersionsEventWhen":"Date","xmpMM:VersionsModifyDate":"Date","xmpMM:LastModifyDate":"Date","xmpMM:ResourceEvent":"Date","stEvt:when":"Date","xmpRights:Marked":"boolean","xmpTPg:ColorantA":"integer","xmpTPg:ColorantB":"integer","xmpTPg:ColorantBlack":"real","xmpTPg:ColorantBlue":"integer","xmpTPg:ColorantCyan":"real","xmpTPg:ColorantGray":"integer","xmpTPg:ColorantGreen":"integer","xmpTPg:ColorantL":"real","xmpTPg:ColorantMagenta":"real","xmpTPg:ColorantRed":"integer","xmpTPg:ColorantTint":"integer","xmpTPg:ColorantYellow":"real","xmpTPg:FontComposite":"boolean","xmpTPg:HasVisibleOverprint":"boolean","xmpTPg:HasVisibleTransparency":"boolean","xmpTPg:MaxPageSizeH":"real","xmpTPg:MaxPageSizeW":"real","xmpTPg:NPages":"integer","xmpTPg:SwatchColorantA":"integer","xmpTPg:SwatchColorantB":"integer","xmpTPg:SwatchColorantBlack":"real","xmpTPg:SwatchColorantBlue":"integer","xmpTPg:SwatchColorantCyan":"real","xmpTPg:SwatchColorantGray":"integer","xmpTPg:SwatchColorantGreen":"integer","xmpTPg:SwatchColorantL":"real","xmpTPg:SwatchColorantMagenta":"real","xmpTPg:SwatchColorantRed":"integer","xmpTPg:SwatchColorantTint":"integer","xmpTPg:SwatchColorantYellow":"real","xmpTPg:SwatchGroupType":"integer"},le="http://www.w3.org/1999/02/22-rdf-syntax-ns#";function se(e){let n;if(e instanceof ArrayBuffer)n=t.decode(e);else{if("string"!=typeof e)throw new TypeError("param buffer can be either an ArrayBuffer or a string");n=e}let r,i={},a=(new DOMParser).parseFromString(n,"text/xml");{let e,t=a.documentElement;e=t.getAttributeNodeNS("adobe:ns:meta/","xmptk"),e&&(i[e.prefix]={[e.localName]:e.value}),e=t.getAttributeNodeNS("http://ns.adobe.com/xmp/note/","HasExtendedXMP"),e&&(i[e.prefix]={[e.localName]:e.value})}if(r=a.getElementsByTagNameNS(le,"RDF").item(0),!r)return i;for(let e of r.children){if("Description"!==e.localName)continue;if(""===e.getAttributeNS(le,"about")){for(let t of e.attributes){let{prefix:e,localName:n,value:r}=t;if(0!==e.length)if("xmlns"===e){let e=i[n];e||(e=i[n]={})}else{let a=i[e];a||(a=i[e]={}),ge(a,t.name,n,r)}}for(let t of e.children){let{prefix:e,localName:n}=t,r=i[e];if(!r)continue;let a=fe(t);ge(r,t.nodeName,n,a)}}}return i}function ue(e){let t={};for(let n of e.attributes){let{prefix:e,localName:r,value:i}=n;if(0!==e.length)if("xmlns"===e){let e=t[r];e||(e=t[r]={})}else{let a=t[e];a||(a=t[e]={}),ge(a,n.name,r,i)}}for(let n of e.children){let{prefix:e,localName:r}=n,i=t[e];if(!i)continue;let a=fe(n);ge(i,n.nodeName,r,a)}return t}function ge(e,t,n,r){let i=oe[t];if(i){let t=r;switch(i){case"integer":t=parseInt(r);break;case"boolean":t=4===r.length;break;case"real":t=Number(r);break;case"rational":t=me(r);break;case"integer[]":case"real[]":t=r.map(Number);break;case"boolean[]":t=r.map((e=>4===e.length));break;case"rational[]":t=r.map(me);break;case"Date":t=ce(r);break;case"Date[]":t=r.map((e=>ce(e)));break;case"GPSCoordinate":t=function(e){let t;if(null!==(t=e.match(/^(\d+),(\d+)[,.](\d+)([NSWE])$/))){let e=+t[1]+t[2]/60+t[3]/3600;switch(t[4]){case"N":case"E":break;case"S":case"W":e=-e}return e}if(null!==(t=e.match(/^(-?\d+)\/(\d+) (-?\d+)\/(\d+) (-?\d+)\/(\d+)$/))){return t[1]/t[2]+t[2]/t[3]/60+t[4]/t[5]/3600}throw new Error("Invalid GPSCoodinate: "+e)}(r);break;case"base64":t=function(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0,r=n.length;e<r;e++)n[e]=t.charCodeAt(e);return n}(r);break;default:throw new Error("Unsupported type: "+i+" "+r)}e[n]=t}else e[n]=r}function ce(e){return"T"===e.charAt(10)?new Date(e):new Date(e.replace(/^(\d{4}):(\d\d):(\d\d) /,"$1-$2-$3T"))}function me(e){let t=e.indexOf("/");return-1===t?NaN:Number(e.slice(0,t))/Number(e.slice(t+1))}function fe(e){let t,{attributes:n,children:r}=e;if(0===r.length)return 0===n.length?e.textContent:pe(e);if(1===r.length&&"rdf"===(t=e.firstElementChild).prefix)return function(e,t){switch(e.localName){case"Seq":{let t=[];for(let n of e.children)if(n.hasAttributes()){let e=n.attributes[n.attributes.length-1];"Resource"===n.getAttributeNS(le,"parseType")?t.push(de(n)):t.push(pe(n,e.prefix))}else if(1===n.childElementCount){let e=n.children[0];"rdf:Description"===e.nodeName?t.push(ue(e)):t.push(fe(e))}else t.push(n.textContent);return t}case"Alt":{let t;for(let n of e.children){t=n.textContent;break}return t}case"Bag":{let t=[];for(let n of e.children){t=t.push(n.textContent);break}return t}default:return console.warn("Unsupported child element: "+e.nodeName),null}}(t);{let t=e.getAttributeNS(le,"parseType");return null!=t?"Resource"===t?de(e):(console.warn("Unsupported parseType: "+t),null):(console.warn("Expected parseType attribute on node "+e.nodeName),null)}}function pe(e,t=null){let n={};if(t)for(let r of e.attributes)r.prefix===t&&ge(n,r.name,r.localName,r.value);else for(let t of e.attributes)"rdf"!==t.prefix&&ge(n,t.name,t.localName,t.value);return n}function de(e,t=null){let n={};if(t)for(let r of e.children)r.prefix===t&&ge(n,r.nodeName,r.localName,fe(r));else for(let t of e.children)ge(n,t.nodeName,t.localName,fe(t));return n}const he={A2B0:"AToB0",A2B1:"AToB1",A2B2:"AToB2",bXYZ:"blueMatrixColumn",bTRC:"blueTRC",B2A0:"BToA0",B2A1:"BToA1",B2A2:"BToA2",B2D0:"BToD0",B2D1:"BToD1",B2D2:"BToD2",B2D3:"BToD3",calt:"calibrationDateTime",targ:"charTarget",chad:"chromaticAdaptation",chrm:"chromaticity",cicp:"cipc",clro:"colorantOrder",clrt:"colorantTable",clot:"colorantTableOut",ciis:"colorimetricIntentImageState",cprt:"copyright",crdi:"creditInfo",data:"data",dtim:"dateTime",dmnd:"deviceMfgDesc",dmdd:"deviceModelDesc",devs:"deviceSettings",D2B0:"DToB0",D2B1:"DToB1",D2B2:"DToB2",D2B3:"DToB3",gamt:"gamut",kTRC:"grayTRC",gXYZ:"greenMatrixColumn",gTRC:"greenTRC",lumi:"luminance",meas:"measurement",meta:"metadata",bkpt:"mediaBlackPoint",wtpt:"mediaWhitePoint",ncol:"namedColor",ncl2:"namedColor2",resp:"outputResponse",rig0:"perceptualRenderingIntentGamut",pre0:"preview0",pre1:"preview1",pre2:"preview2",desc:"profileDescription",pseq:"profileSequenceDesc",psd0:"ps2CRD0",psd1:"ps2CRD1",psd2:"ps2CRD2",psd3:"ps2CRD3",ps2s:"ps2CSA",ps2i:"ps2RenderingIntent",rXYZ:"redMatrixColumn",rTRC:"redTRC",rig2:"saturationRenderingIntentGamut",scrd:"screeningDesc",scrn:"screening",tech:"technology","bfd ":"ucrBg",vued:"viewingCondDesc",view:"viewingConditions"};let ye={desc:function(e,t,n){let r=e.getUint32(t+8),i=e.getBinaryString(t+12,r,!0),a=t+12+r,o=(e.getUint32(a),e.getUint32(a+4)),l=e.getUTF16BEString(a+8,o,!0);a+=4+o;e.getUint16(a);let s=e.getUint8(a+2),u=e.getBinaryString(a+3,s,!0);return i||l||u},chrm:function(e,t,n){let r=e.getUint16(t+8),i=[];for(let n=0,a=t+12;n<r;n++,a+=8){let t=new Float64Array(2);t[0]=e.getU16Fixed16Number(a),t[1]=e.getU16Fixed16Number(a+4