From f4f365913646034987595a9d714b25bf6dd4d135 Mon Sep 17 00:00:00 2001 From: DMGithubPublisher Date: Thu, 7 Dec 2023 18:04:48 +0800 Subject: [PATCH 1/3] 9.6.32 --- Api Reference.url | 2 +- README.md | 70 +++++++++--------- ...worker.js => dbr-9.6.32.browser.worker.js} | 2 +- ...-9.6.31.full.wasm => dbr-9.6.32.full.wasm} | Bin 4109156 -> 4109588 bytes ...1.full.wasm.js => dbr-9.6.32.full.wasm.js} | 0 ...full.wasm => dbr-9.6.32.standby.full.wasm} | Bin 5215698 -> 5216124 bytes ...asm.js => dbr-9.6.32.standby.full.wasm.js} | 0 ...1.standby.wasm => dbr-9.6.32.standby.wasm} | Bin 3818913 -> 3819240 bytes ...dby.wasm.js => dbr-9.6.32.standby.wasm.js} | 0 dist/{dbr-9.6.31.wasm => dbr-9.6.32.wasm} | Bin 3080577 -> 3080929 bytes ...{dbr-9.6.31.wasm.js => dbr-9.6.32.wasm.js} | 0 dist/dbr.js | 8 +- dist/dbr.mjs | 8 +- dist/dbr.pure.esm.js | 8 +- dist/dbr.pure.js | 4 +- dist/dbr.pure.mjs | 4 +- dist/types/class/barcodescanner.d.ts | 4 + package.json | 19 +++-- samples.url | 2 +- sonar-project.properties | 21 ++++++ 20 files changed, 90 insertions(+), 62 deletions(-) rename dist/{dbr-9.6.31.browser.worker.js => dbr-9.6.32.browser.worker.js} (99%) rename dist/{dbr-9.6.31.full.wasm => dbr-9.6.32.full.wasm} (83%) rename dist/{dbr-9.6.31.full.wasm.js => dbr-9.6.32.full.wasm.js} (100%) rename dist/{dbr-9.6.31.standby.full.wasm => dbr-9.6.32.standby.full.wasm} (87%) rename dist/{dbr-9.6.31.standby.full.wasm.js => dbr-9.6.32.standby.full.wasm.js} (100%) rename dist/{dbr-9.6.31.standby.wasm => dbr-9.6.32.standby.wasm} (94%) rename dist/{dbr-9.6.31.standby.wasm.js => dbr-9.6.32.standby.wasm.js} (100%) rename dist/{dbr-9.6.31.wasm => dbr-9.6.32.wasm} (89%) rename dist/{dbr-9.6.31.wasm.js => dbr-9.6.32.wasm.js} (100%) create mode 100644 sonar-project.properties diff --git a/Api Reference.url b/Api Reference.url index c935278..7269631 100644 --- a/Api Reference.url +++ b/Api Reference.url @@ -1,2 +1,2 @@ [InternetShortcut] -URL=https://www.dynamsoft.com/barcode-reader/programming/javascript/api-reference/?ver=9.6.31 \ No newline at end of file +URL=https://www.dynamsoft.com/barcode-reader/programming/javascript/api-reference/?ver=9.6.32 \ No newline at end of file diff --git a/README.md b/README.md index 0653635..3b94752 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,7 @@ Once the DBR-JS SDK gets integrated into your web page, your users can access a camera via the browser and read barcodes directly from its video input. - - -In this guide, you will learn step by step on how to integrate the DBR-JS SDK into your website. +In this guide, you will learn step by step how to integrate the DBR-JS SDK into your website. Table of Contents @@ -33,21 +29,21 @@ In this guide, you will learn step by step on how to integrate the DBR-JS SDK in **Popular Examples** -- Hello World - [Guide](#hello-world---simplest-implementation) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/1.hello-world/1.hello-world.html) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/1.hello-world.html?ver=9.6.31&utm_source=github) -- Angular App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-angular.html?ver=9.6.31&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/1.hello-world/3.read-video-angular) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/3.read-video-angular/dist/hello-world/?ver=9.6.31&utm_source=github) -- React App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-reactjs.html?ver=9.6.31&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/1.hello-world/4.read-video-react) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/4.read-video-react/build/?ver=9.6.31&utm_source=github) -- Vue App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-vuejsv3.html?ver=9.6.31&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/1.hello-world/6.read-video-vue3) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/6.read-video-vue3/dist/?ver=9.6.31&utm_source=github) -- PWA App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-pwa.html?ver=9.6.31&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/1.hello-world/10.read-video-pwa) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/10.read-video-pwa/helloworld-pwa.html?ver=9.6.31&utm_source=github) -- WebView in Android and iOS - [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/v9.6.31/1.hello-world/14.read-video-webview) -- Read Driver Licenses - [Guide](https://www.dynamsoft.com/barcode-reader/docs/core/programming/usecases/scan-and-parse-AAMVA.html?ver=9.6.31&utm_source=github&&lang=js) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/4.use-case/2.read-a-drivers-license.html) \| [Run](https://demo.dynamsoft.com/samples/dbr/js/4.use-case/2.read-a-drivers-license.html?ver=9.6.31&utm_source=github) -- Fill A Form - [Guide](https://www.dynamsoft.com/barcode-reader/docs/core/programming/usecases/scan-barcodes-as-input.html?lang=js&&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/4.use-case/1.fill-a-form-with-barcode-reading.html) \| [Run](https://demo.dynamsoft.com/samples/dbr/js/4.use-case/1.fill-a-form-with-barcode-reading.html?ver=9.6.31&utm_source=github) -- Show result information on the video - [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/4.use-case/3.show-result-texts-on-the-video.html) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/4.use-case/3.show-result-texts-on-the-video.html?ver=9.6.31&utm_source=github) -- Debug Camera and Collect Video Frame - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/debug.html?lang=js&&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.31/5.others/debug) +- Hello World - [Guide](#hello-world---simplest-implementation) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/1.hello-world/1.hello-world.html) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/1.hello-world.html?ver=9.6.32&utm_source=github) +- Angular App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-angular.html?ver=9.6.32&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/1.hello-world/3.read-video-angular) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/3.read-video-angular/dist/hello-world/?ver=9.6.32&utm_source=github) +- React App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-reactjs.html?ver=9.6.32&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/1.hello-world/4.read-video-react) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/4.read-video-react/build/?ver=9.6.32&utm_source=github) +- Vue App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-vuejsv3.html?ver=9.6.32&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/1.hello-world/6.read-video-vue3) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/6.read-video-vue3/dist/?ver=9.6.32&utm_source=github) +- PWA App - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/helloworld-pwa.html?ver=9.6.32&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/1.hello-world/10.read-video-pwa) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/1.hello-world/10.read-video-pwa/helloworld-pwa.html?ver=9.6.32&utm_source=github) +- WebView in Android and iOS - [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/v9.6.32/1.hello-world/14.read-video-webview) +- Read Driver Licenses - [Guide](https://www.dynamsoft.com/barcode-reader/docs/core/programming/usecases/scan-and-parse-AAMVA.html?ver=9.6.32&utm_source=github&&lang=js) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/4.use-case/2.read-a-drivers-license.html) \| [Run](https://demo.dynamsoft.com/samples/dbr/js/4.use-case/2.read-a-drivers-license.html?ver=9.6.32&utm_source=github) +- Fill A Form - [Guide](https://www.dynamsoft.com/barcode-reader/docs/core/programming/usecases/scan-barcodes-as-input.html?lang=js&&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/4.use-case/1.fill-a-form-with-barcode-reading.html) \| [Run](https://demo.dynamsoft.com/samples/dbr/js/4.use-case/1.fill-a-form-with-barcode-reading.html?ver=9.6.32&utm_source=github) +- Show result information on the video - [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/4.use-case/3.show-result-texts-on-the-video.html) \| [Run](https://demo.dynamsoft.com/Samples/DBR/JS/4.use-case/3.show-result-texts-on-the-video.html?ver=9.6.32&utm_source=github) +- Debug Camera and Collect Video Frame - [Guide](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/debug.html?lang=js&&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/v9.6.32/5.others/debug) You can also: -- Try the Official Demo - [Run](https://demo.dynamsoft.com/barcode-reader-js/?ver=9.6.31&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-demo/) -- Try Online Examples - [Run](https://demo.dynamsoft.com/Samples/DBR/JS/index.html?ver=9.6.31&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/v9.6.31/) +- Try the Official Demo - [Run](https://demo.dynamsoft.com/barcode-reader-js/?ver=9.6.32&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-demo/) +- Try Online Examples - [Run](https://demo.dynamsoft.com/Samples/DBR/JS/index.html?ver=9.6.32&utm_source=github) \| [Github](https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/v9.6.32/) ## Hello World - Simplest Implementation @@ -67,9 +63,9 @@ The complete code of the "Hello World" example is shown below - + + ``` - UNPKG ```html - + ``` #### Host the SDK yourself @@ -169,7 +165,7 @@ Options to download the SDK: - From the website - Download the JavaScript Package + Download the JavaScript Package - yarn @@ -186,7 +182,7 @@ Options to download the SDK: Depending on how you downloaded the SDK and how you intend to use it, you can typically include it like this: ```html - + ``` or @@ -228,7 +224,7 @@ The SDK requires a license to work, use the API `license` to specify a license k Dynamsoft.DBR.BarcodeScanner.license = "YOUR-LICENSE-KEY"; ``` -To test the SDK, you can request a 30-day trial license via the [customer portal](https://www.dynamsoft.com/customer/license/trialLicense?ver=9.6.31&utm_source=github&product=dbr&package=js). +To test the SDK, you can request a 30-day trial license via the [customer portal](https://www.dynamsoft.com/customer/license/trialLicense?ver=9.6.32&utm_source=github&product=dbr&package=js). > If you register a Dynamsoft account and download the SDK from the official website, Dynamsoft will automatically generate a 30-day trial license for you, and put the license key into all the samples attached to the SDK. @@ -240,7 +236,7 @@ The purpose is to tell the SDK where to find the engine files (\*.worker.js, \*. ```javascript //The following code uses the jsDelivr CDN, feel free to change it to your own location of these files -Dynamsoft.DBR.BarcodeScanner.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-javascript-barcode@9.6.31/dist/"; +Dynamsoft.DBR.BarcodeScanner.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-javascript-barcode@9.6.32/dist/"; ``` ### Interact with the SDK @@ -335,9 +331,9 @@ As you can see from the above code snippets, there are three types of configurat Try in [JSFiddle](https://jsfiddle.net/DynamsoftTeam/f24h8c1m/). - See also [settings samples](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/parameter-settings.html?ver=9.6.31&utm_source=github). + See also [settings samples](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/samples-demos/parameter-settings.html?ver=9.6.32&utm_source=github). -> Find the full list of the runtime settings here. +> Find the full list of the runtime settings here. ### Customize the UI (optional) @@ -421,8 +417,8 @@ The built-in UI of the `BarcodeScanner` object is defined in the file `dist/dbr. ```html ``` @@ -435,7 +431,7 @@ The built-in UI of the `BarcodeScanner` object is defined in the file `dist/dbr. ## API Documentation You can check out the detailed documentation about the APIs of the SDK at -[https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/api-reference/?ver=9.6.31](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/api-reference/?ver=9.6.31). +[https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/api-reference/?ver=9.6.32](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/api-reference/?ver=9.6.32). ## System Requirements @@ -456,7 +452,7 @@ DBR requires the following features to work: - `MediaDevices`/`getUserMedia` - This API is only required for in-browser video streaming. If a browser does not support this API, the [Single Frame Mode](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/api-reference/BarcodeScanner.html?ver=9.6.31&utm_source=github#singleframemode) will be used automatically. If the API exists but doesn't work correctly, the Single Frame Mode can be used as an alternative way to access the camera. + This API is only required for in-browser video streaming. If a browser does not support this API, the [Single Frame Mode](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/api-reference/BarcodeScanner.html?ver=9.6.32&utm_source=github#singleframemode) will be used automatically. If the API exists but doesn't work correctly, the Single Frame Mode can be used as an alternative way to access the camera. - `getSettings` @@ -481,7 +477,7 @@ Apart from the browsers, the operating systems may impose some limitations of th ## How to Upgrade -If you want to upgrade the SDK from an old version to a newer one, please see [how to upgrade](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/upgrade-guide/?ver=9.6.31&utm_source=github). +If you want to upgrade the SDK from an old version to a newer one, please see [how to upgrade](https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/upgrade-guide/?ver=9.6.32&utm_source=github). ## Release Notes diff --git a/dist/dbr-9.6.31.browser.worker.js b/dist/dbr-9.6.32.browser.worker.js similarity index 99% rename from dist/dbr-9.6.31.browser.worker.js rename to dist/dbr-9.6.32.browser.worker.js index f29ce31..2031c10 100644 --- a/dist/dbr-9.6.31.browser.worker.js +++ b/dist/dbr-9.6.32.browser.worker.js @@ -4,7 +4,7 @@ * @website http://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 9.6.31 (js 20230908) + * @version 9.6.32 (js 20231027) * @fileoverview Dynamsoft JavaScript Library for Barcode Reader * More info on DBR JS: https://www.dynamsoft.com/barcode-reader/sdk-javascript/ */ diff --git a/dist/dbr-9.6.31.full.wasm b/dist/dbr-9.6.32.full.wasm similarity index 83% rename from dist/dbr-9.6.31.full.wasm rename to dist/dbr-9.6.32.full.wasm index 98e14c0f2c5ba4f3477e680e49243614f254d23b..afb396e30a85d973f97f7e80b5077e300a34abdf 100644 GIT binary patch delta 167724 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%0A9VXyTAFizKJ)B7nZ=*9h% z)5am1NA@eAi!jC3roCv*f3BF9#$i+*)?7zY-Qo7Jd{Qf}*m%PAuk6 zu@^MQY#*S!fw4=!0m`@!=$_a$Q{i>+RrvjDrc7u>3DN_U+&ZLbX+8Ee0dwTuie3jb zL6c}Tl&y|<%BBo@`x4F-k?>1;<&MpL@9f`ryFOk*>WA!tY0rex)&??&{OH4=xjxI~*n-#%Ii^$j^nz5#dJ zA&MM>5&DH<$I}9DQ7|YSt#@7q z^(9z4^ZeFXDj_w9`bR5zy2GQ6JqEeRHECxN)*>Xe;67F(<0qi zOe2RP{$-YU=~tyajY?~6RpMY7zpxbxRsPhU+@{PI!f(^77J9trAo1OHe{lXKHALTfLTM|Aqdd6<;18kP0?!vI>x7Z|{URj(5t8}ybm*wQ z&i+2F^fl%9vop$YaY92Tyre#<*Dh98i{iB)wtBhkS)V&o zC{f-Kt0LI2d0HK|x;kx$#HL?R;>9tMhTF05g7O)hFdZ){ zZ=-F^zNiG!>K}BV)e@7IvkjM&uB=0;5(?*WOey-|Nu`S7XHJ^UV(*nIEkfrY1CBAJ zMwIds{E(PYTgZMXRpKJ)6y~BS+TvfeJ5Rq*3Z)~?i)81IN)cjKB+E&Xg2`3wWG`P) zmeH9JBd~&2yNXT`Q;oymoEGOt8W90}f@4{kassooBd#fHg|G#YXcPbCkX>MYotMHK zUHtsW*L@=a8Go8P;`QPiu#T|&wCbj^R6u%~MZYVpU}K&CUFq+KVa@aZC@+YCD=qF; zvKe>Lu@|sE?xG(&&$N3=f|wi0ZocF9vYvKNDHFYOBO`)*5JX=$f*iCD6qw*^^~(>H zp|*%q^=O6(-06E`nQ*Ji9Ikys1|{N z-fEK}V8?t_2-qf%fNf-r{nZPwcH{uHyP#gG$5$R$c`Gilp;&kTr!9#r9UyXgK#*GS zf8!et-5QAo;?`Wo#1NXzR=q$`dkYSlrh^lf(r6;rF3b;P>w8X9KNHnG^c+IbXfgwv zWMP%*4yU?OhMQnmE%i$wO}|o0jTW&Snm3w=x@w3B1E5)bbtINr=hj!dio$taY@`nM z!f{A~3UB0jmeE{og~QS2Y6K29o2zNCr+;jr))h}8WAF~?Mg8{{>Oe2?Kt0wjt!_&; zv6cFac(NXA)-tG}?G(AXZ4euQ@Wh>eNWC>(;4N`}eu;O;=X5<~3`K+o57(#JAcC@E&bJ_E4N~!Um!4ko{ z&*9r>>;IKgWWAA71YH~dI5>1vN1&gIe;)N9mKpD%2#%|fYm`=HmHR zZtKXul1MAk4)jowYo*{{xmF5zt`&4CyrjSN6R)f30&Iql-c*;0<&hNq5rzIS;Vnqv z@4EIjak}5&)LQ?t-{4fd7s-P{=*WW~9xbxB((Ui6vJG>B(LL2I6(#S9_}i z{gBT930#BqBLme`LHJdF|6{d@AXn7qRt#oj$*)wQ&m5$-^u{b(!Ds5XzJ7)Ep_fGE zw%+3#b&(C4x$--;ENEm@Je=6*2yB=mx%s_X;&+Gc6L4SQ59-@KP=<|1sc&I@lRkR1 zI!y>n=ZRX-ksv2Pt+7~OI8Ikm)I8+UV*4kkHF4jq3F?0+-^qZ9YHk0iQGpZ^rHo?J zCaQDcVR&Ma`Wy^~Zzic-@oV=a2=8L{a1!{~z$Q#q>xhr)v$d1eH?@%sDC`LdTCocq z#>_O?6`7_YI3`)oOIM?PP~ZuMS&gaevkZLl8G23zK6Ch(25|_3@`lbuRGk-p60OZ! z8KZCcS%vkHroWU)?P{vtcaHior2soPPaOpxqyEYQ^)+}j*n)*>UGx$M7pmu@CNzM) z#wH#L5s!C=v-Lf{sOSx6N0CVth5Q2ni`64yW)yq4T8Yr_ELNih`R4{)?=&)|6@O-N zOVuaC=0rjB{gJ4#bf;^VG8foBBt77z@~-UWNv#*r2`;nQk`%Whj3?>>DzS&5)UV)?=eO+P0xV z1UnL;1+(8bq9Vq!=QgQNK{bB2NqxiZn7F?QO=6n<%w{!N49RVPAartu`2(FmI}c#D z*;M`H780-f`cFI5cWoHzp4zRh60jfX_KpQ#2K0l~_9ef`dRN!zVHYo;!`WXyw9~{JI*~}vI)t>0?zs*-;gOZR5h5+35 zQvTL|$yecsW$g4JwGHGm%u?!?J!fyzDK_y{r?KMwW6)jTdLx4YAvP3U4^h&Yw~n*)r_L zYsDK;hJB`-Q3KdZr=ehGvLUB|X}0l(ji=Q&;kr}Ls4W6lH{@*JX%P4}I~t)m#J?LD z4-Y@1wiO>VVB1fsQS8(iwKIG}HH%TDVpbzI_uD$r?2WUk%)U6QcEG3C&#I>T#t-2e zG!)2S!a4P-u{=KUVx%%fr0jfOOP4;oHG+!js*!%CSM0Zl5v?z z{)H}jVU0l6ReYP9(EjGPDWGrjEF?XqOzjvr-3l&5%CmSshie)YJe5~44WRl92+Oab z41s4wP~KEdvbkmIcj{*Q;{&pzEK2oxz9|O$rnBIv#S;1+_tRkF-b=mG~ z>g1-!Ox`BDYju&q+pfoJ6_<&(#cb4de3)Zw-*xqwdW95@2a|*ZeIhMEHp~;HisS&A z#84-Rzq7_S)F08kEWe>{Q7<-poP!JOyPIf~C2Y-2bxPy~AT>soqJ{oEp+DD<_4Tub z3TN3jx75k70DXT~9hiP(k>zS@*NkZT66V5QTcV5Hm@(Lk1ZoVZXXsy)t7mO~cZoGD zmDJz<3#oL3x$NEBu;l0J<8Q0|D024qJJ1NQm!AJetp&jy^pAQ9I-_GH%#N#UY^C}( zu9Z}(Tggbgt6qV4jJ>CR;JntbrTDht3d4uTbekU%OFXy-1Lr!sc3Hb<5{x@p+Fs-k!a{6ytBVpa@cwCp+DSoaQ%5}f?EdoYYH3VueE>`ywM*lZDTP3S_^$v0E%Q2 z12icxA98Gr!SmUO04*Z$kagk^`zuiEWm}22DI#{W92BHQ!nPO_g!iSejX~O{NPtw& zuFa*%qkx;HtaB_6KVhTV1h=BFYM> zt-$&X$|Qni9s+4e!$`ks-F%f@3eh^juh1}5dlyK?glZiy>OK&vDIzSDGvV5I(4lWe zXzj%`GX>aWGX>a=2yKx#0il=IFl3v+hDT}%uo-e9wL0DtY=aSkb|zBm5{A$;w+^d_ zCMlus7>KQ1E;I^?(%+5J0&L=_7g9K^9I^mqH&dWtVfe@U-iRWbx9+wi*XS)UiFJ!2y1z+vG%nf zOx8CvLB2}(IA2fDZiqn#dG0Z|jay--i7qX)3|m-kGb~3A;HC^ug~IJmvMBGj)ar_n z{IZ722t`zsHe^n6pf=p`Olxht59WyWJ*&k8!Lqs9MVpGl_b+Q-`b~~O-FPXJ**`C% z*7xacx@wL5qxLn94So?}4%j~kVqb&4er#+FgzZHlS;nY0wL8A3=5KpxYhcke>a8^q zCh70>*1~MU2>r_swBJN{#9r*L)yLuU{#r{Mmf}~P5pWM+e3CE-`+g!r7_UuQzKe5M zs*2jA%t|x$%Kq8{yg|?WNSi^vwHAZ;n|co7Z<>Z*3V#y?0Gn@OhX!e}XkEV#!XpRR z=)qbmVdUa1gEfH%LQfGPcfN_+uqysAJN${($uBJiMl^iPEc#RJ1!%_)Kh?fBPKr2r z^;2yTPEH!4{T+6=F?uk_EEF$)2zj6zgI>ZiKhr88trLf8-QhYqH&px9CSHP%DLbgH zp7fE{f)0R#NZU`J-^ZJ+Qgq@3|G(3`lsJ(^#t*J zW0p9vRs!4m1C-nx{q_%9V=;D44E#y7CW{8q;6^ZP`f4!iJ92!b9iA@LLS$FOOCsCg-xOk=n1~xyBR%AIye? z+7vx`l-AeRwaJcFd|g1ljwO2SF=2pVCa)Oib8lt2?lnOR6UF5*Y-^&OhsZC}+fIZt z1kI`4B<;8m@yI}BxuPEZ3sw6x%@LYSs2*SZ160|BDvnJ^gXFGcu5?s=j;>76;5N*O zVXwp>{(TkeF;&|yu8J|%?>q@lvLKIc!bhQIaO-H+ce?f@>pc_R(MQ`AyRn?-*mP~T zxH5(vS*Ju{hIRc6d^>Rke@&Qvj6pSNNlj3n)qHkIO$;BWodoHycpK31oN-W z=V?!SEo*{ZGl$O8>N@F3V|_hh@@aXZsN}Kb^RxtlQn12S7tedoNBh~pUY@VLjKSs1 z`C4=Lh`D5Qd=zsmK-=BQo>`#9I&zvogSn6-2F;dK6se}63$$>uWX3PlK87W8d!cqz z@Y`j_Y?iOGiyc~|O~>kjev7r4BClU-63Gcknn2_xhwDJ@@;Lu<&39%U$6LPgD0I+2) zHQ8PN?@e|mLz8X7RT}c59RW(QJ4B&t|(@FWI1t6+(|dWCDZH zFcS+7($pXbuR+L4{L?0_rf^iBzezhFU?B17ujp#8vwgpU+3Wg*E!y`&$aU^K!~O%% zcS^F2+$1>aQQNfTLfGXd5K|%XsxKnRsMRNy))<1Gzm%QduGLk~#Bd=--0@+4`V0%* zp~Xk7Y#InOrbqa`e;kb)QEhk}xv}2Z0ZZsGOWL6=jQXQVVvIZ7Ik9BjjvD-r(jzej zeR%tw5ax$$$WARvc%V<%sUdFe7MrwJYly?fz1mI~F+c6o7#v}LtaJ1hl$#;EwHkT` zzgROLsflb$fK|AFbItguV)5l%$bDQ#% zUE&QB86B~9h;6F}1=6z}CeoJ`YEL6}=W?O;J|;S!JFc}s^yN>-q5Vd&&rWEAFcEe7 zgqF~DOH-qrZeF^hhB6Kd;F@5#gYZeLi6mJ?!^Is`?VFmm6g%RGD-aFjTUR!+7fx!+ z0rhL?{-TbDIBlk)W$SGA24 z{MzH1*3UnvpedSr2mF5t(b(Jm)UFD6=aSpnSKuk;4y=re`m=Ym1rR~~(p~KZZ^&SS zN7@D9&blB6LT={idqu|^2xM%^V!RxYIO=V@9Q%>X*6i*VyLfjmE_UfdzSsN&7GrmW zhb?u{=ON!RQI_evguP;S#39UWnBDP&2vxR7cEqAT-77n=vUQn$LUG&^)bR;iZ5Xar zeCzS-g64QKEZYTL;&!$Y#RVbTMGH}5^==Nw_q2c7fndi>Yvyc~3%%Tb&77?=D-1Jd zNL0T@?;YuQN)*?)*spdq0;vJ@+-Qe_r5O6|7)Na}bS=WYET1h=yxg@6dnarb*6CZ~ z9M6j4Iv1G@rzMLapHPRUv8u?h7Zs{~zd)4)+zkTVky`$8^c{^m?1)^jvP&&5S@ zgDH}y8sgh+(wjDNyoxzBmob&Gk!3Y@lwv|{bQ1?!@oYlK6KLa$0mkeEqZMy<8B-ZJ zdZsdx5*$d$bwc0rgyUtJt_W=D*el@oZ%;Y0kd0RVvW)}5f+zIswvJ=;dw6>X(g2^( zi=T6x@y6Q9ycZpVg#~)8&JM(E%+s@8a$t0}LT~@Fqm6&)e8fNVa7H^)8^Oui0fDkF zDL3^gZ#Y)^q7O^#>8OW?2K98jLoVlCy&SQ%*CY^V#LXZSkJ7CuV=3X}C>!*JNU@*T z>jt*1e{TncRD9aoag2h++xG?fJbhwcDm_nc+|RMshP8-y1~`~_%*A&K)Rzo&RCuHR zocXC^KBi9E4soQ4@P+Rm>Udgg|8pvQQkX6FOH85^)wHf#Oq}wslbE~^6X*ZyB+`G0 zi4$3eFA!idg8lS`qX*21f-mryj<9l}L9LL(uEZMM_@0r8!_f@D92DOn*5^yd+cBFH zz|E!v8uHPkK8EqT60pw?^j@-{6tWXvI+z_IU&FZSjmX6BzQUWgu!64~uS9G?`ysXJ zhme2rM3F|t8*P|*ZT+=lJtDX&zIJ2^?6vP5KQO;<9V^{uf{#^897(OE^lFj>% zW1zA4?xcS9dq`{aNf!mK!C^#JjEE=jheB!+{RU&N$=Dwqy{Hd~^OGXktREdbH11_T ztX(>x|Meq8S~--!rvl8zawvh8ZZ!%iqSD>1#aupLgs+6<^ZMA~j<>upqj-LlqlFkz zM)|O@4KuPiBqn?UtBi7mP|CY9z0nxQi-^5pU!^)WDCb<1v5MA6hYdo2=Q-AHqGJLS z;em;cHX@5mb2N8wlcVGpBS|qzM+yl2r8LJzLA>eWov0o;#nDy}ZnC$hI%4qRZ>BoV z2{-gNr%{`_X|yR!5F2gkrqQOtZjnBUwLtePSBoL z^eHnOFVK#Qr!pMTV({OT&e>fdysnW?Ko6Ydc#$@8Gw%84f86sA!#&ej#9XYGysOun z>u4av-L*a$ty9HnUaWBytF3XZWM5=KS-?j(&ygUgqnhzAgnPNx8P$wFk&ETccLays zqwj<(?g1FRP*Cm}Uuwnz$4{_!hA)7eh!40X!jk$bwqv2A0I|SRf1&R`wi!2cOtLp#m+o~DdZ=XI<_E?<*%iL+~JLdnk+ro>A<1yA;;@_K~3iqUg*vFxl#Na z!@2*k_trV4|9{wL$+1S9XEHq&#@g4C>UGpIirH#-}wK-zxrP8wF2}{qM#%8Szt&D1FH;hp!jA zcGU4P)yYHspActDWR5l}D_sZIDPEX7=5;rPDj}a8IOgaoOxMGHbJP~#xNKMGh=v>U z{X(3b3gZwB>JqzJ=s<1*z1eZccS7(CD&DNl<>F@`Egq4w}Bw8K-x?@0cR8zBcC%=BpPQuU>4ux|671_H!zNxXmn}PJq)W z;03nW-`TDDd6csJU!}0NDvCK7=$s;A)W^BZuJ&$(SMzf#bg=r07dsH+to{kuz?#mF z^%)TmUFKB}mq0$$57(lvv&Q%wYq%(z;=R^5x0atX#QSnRfM2KoUC;S}Ag(i8SZ=J* z!WJ}eZjp0i-KHvX!DD(;Smp@UM>lk~6SNcmYIG-zMi;g|mYXYv^jdS@>#Mav)~T^G zQ#i>=8#|{V4*AeS`=QDRE!$0#E13Qj7BQfcBW6wlaM z!a*@qS%$HvLeIIc7B_W12Tkota6W;F#@7>^DF~K1o8WBZ{kUNty5)Z&-9i-<#)iIP z41FyJL+EDUscr zF~|$qoEv_o4`@Vl%7fx!2M{+X?u|8kZ+i`>?K|7OD1*v-;{I5p(~9rzM5nc%_3q(} z7WY9zHAcGOr9GT^aFu@WDllmyn?G(2j%;qI%mcB8If$cW4zixFJDXt<#^l$X5%3u< zd)@iI=zS=bLdDKM=?ueIq}E$bc+B$kr`~o3i1L``)wS9f*8N>)iC_I7?MYGa%8&M3|3j39<%S>OlGry`D0bHZ77 zM+B1hvq!|86AgvSF zs)5dr{6-@cJS?PEe6K2P0%jKnDcg~2Pys0_#R{8Sfiy#Vnw#5K;dX()9Z%5qRfw%x z{*iMaa-};ycJ9aF?8naD7|K2~$mx3Jf*sX>u*bkg#$5fGSZX-N)b1L}T@QB;orohm z7cgVQ=QT|KMy3xxP50sa>gItx*@c@ywb+qC&W|81tp+2g4D)_Zf8wk!u%1Jl^;y49 zo%h(7AOE80VL?Kod4J$4m&41&tm*M zFU{Eran0A#oCt5$1Jj+s0?x)wakgahrZ^G28ttbgJixawM#x0*5%PaeDm}DrdZ=el zah4$)GBz7_hKhj~$Z5YF(<)eqqtA3cA*R3qfn+ec__OnAfqs$uR~#G1Zmm-qvaz$A z>*2C(m+9;yXcJoSCT@AtC$wPmwkxr$V7AjKj*BzK^EgsF*AecWsdYBeuXq{BUQo;Y zcjC1iIkCpmHEJZ562U#H=9RS7vZ9L-iTiLI6VI0hsQerSVgJ(KHn*(dA~lx7i$1?g(y!yUTsI_Gj)!LwF(ZW2oL z&+?oyQW)*!w`6CkiPH@-4`e!Y@FG}?^^FgA+9e0fPNwnkoqn*wI zFW@ZL=V2iS@m64=YM;Tvl7pOu5A&*PEvRM8oOg_OM(3)4WFEM$R9 zXSWY|Sg71*v5>sqVj&G=xxW6e!NRBl?12ra!Dl>B)2?!;iDwL`x6X2?OV3qpq7F(Yr6tuxqiRIfV%IZQzfXU zZ+f7Xq-j*EKDP|0Ysxv)Ar;l2Zl0yN%iRYuolX1012sDnXN+3S18G9t1=56CKsT_5 ze|VrSnWMP{BNwCzbsNZXxYrD*6K@+(=RWj6&DqGI9(-s({YD5T8Ezp4dt^9uw^eQi z$aMCOE!dLbDmr5dz#a?gG>~oq0GZBq+JY?^uH0)uP2OigO#@l3kM;`YGW@Dfuo}>~ zWILDi;!9fMuXU)!m4Vt(R)fgfAkB7|RLXfsQ-XOrZ0q1WR645hQ2e_Es0?H}iwXAd zkY8@`Pz2Jf?oyB@4;6F+O9}SyuRjAFO{#v^l)a(q0yWBjG>FiP+57f+=IAf{|kZzR$(uBH=ZeU&OdZ1>^a=0a9 zAxO8%09mff^$e)R^$n=Mx9~vC(mB+KCk&{2T5_l(pQ;A6YP(f#$_^@bNh=T3n{>v2 zS_#sGn!M9`Bn@Ob(^`9=mhG~j-UewxP1;RR3tJmd=e4OO8Tlm+Q!Mo%h*vXeXJmmdu z@vsY|$wL9ia(!kOgNFfKgKLpwOnA#v-P^`H399~<0kz+|9IETRYEUz$JKg0j0h!L8 zf8PT&bq3BD)tv#-gt`!<2{ngqV5{EuKuyVTx+P;8NE2!n$Z~yHPXlVZ-hk?Eh&R_d z&FZcMWmb1`uG3xJX&}MF}D;2~s~QQd96_f&VuSq^pJ_XbqQPaNuzpQ=IK zTxONK4`e#KGu#6;`I{R^*hlk87 z77t56nmpu!Gdp%HZ(iu~CgEXNgr&*7rflO!Fdp%Ig(nH*maT}xw zHEBu+pbpt*Ky7otfZDat1GQoWhx%=y0k!r?4)wyxYEbj@ta6J$rZeAD9;ll)SWx$Y zG@%xPG;6hlZeYVsd7$QPvY_q)X+kXkS+2J@&7rO@uGY(Bo(wVD;Sx}$VB~@{1!EgX z)ONco1`F5AI17ueRbwIZqJ?J($aI!}-NQoaC5wd&kR}TYL7FV&&<(8R4G#+`mn{~i zfizjj0$HwC-Y{x=_pRV|mg-I&5$e_@pxn9yq+6GO1P=+71`oyeI1d^3tMQPU8tMj= z0WzI!sq*kpMQ2Q1GBMQ6!!(d44_P47S-l4y9x5k=x+Nxga;Te!G?3-`^#=wI`lH~s z77ta++&rW#w|JNa(&QlvBzTAo2;p{MeozS6vMKfuk1boZ&H|LOo&c?sLM&VMCY>>* z9;939b?cEdkm)Q;4zX<6vOJ52+aTRizkzr-Er)PhcCi}rJoWasB10@YFzq;p8Xjdp z-5tZBj&N0jdh@(hZY9Wcwm8-UwYbEBS_aaDdK;u!-ANbd5jD;OwdkS+wG^ZYwE|?h z{#%>@HLGSwJA!(?u?K3>BMvpNi2+ql;84G4Rt;+LxG;CQWgyep%;p}b`QvfMsMR8n zCe%`pCe#YLf!SJkpzcczb4x}cNE2!a$Z~ym3j^wuCqteisK=l6K&@C3MgkzTH=wR~ zjzj&pLp7-RYprsNK&G?F9X(Jt=UPzrfi$5Of;6F)&<*TvM-SAz^%m4!AWf(RAj|bl z&l^xvI)(HmsAWAoP?LV+P@S(DP`AC#q5kkjHK@gBt#ZpirnC8PdZ6Z?v!E7%bk{0K zcdgP5Ea)u{)O{ru)IyN%S_N6IAAZY#I_sSfK4w|b&jYofibFls&wx650Ee15uo~3t zvElA=^FXGvfggFGW~ShbAplE2nox5=nozgV4eaPg9;g}P!`%X~5Tpq;2V}WE^})vpYwQ~$%EzVdA~sGCCbsM%{QsCghwsJlR# zPz&e=cK$mL)FrtV)Lf7z)NLTk^?BbLP>1{&(w3kuAM1fyP{5&{9BV)wHJ(F#c0x6% z*=MYB^FXGv{;3|QnZ*{=B_Q3k3esJxbOSq*>VcYZ&VsrSq`Ou@mh0&g4XC{)8v-zN zrUz=)Jq|TG8d z&l1#<9R}1Dy9}sX4|||iRC1^{4jWL}Q4aOBW7VMMkBW3xQ4z>=_U&&TsGE~<#(=sH zqzSbUq*<#abOXEen+Iy%m`Jw(>;h>*EdW`r|59i`{rp5oBWhN2OFU3>7DSQ&94s-Q zeshUKZBbecYU)a>+zgQTnwLFLtLTgYHD#3rbs9($Y8FWNvo3p}R_0hxlUG|%(?G(X zb;W@CY8h(PJ&Z2Sk2GzuGEk;1b{nK=$0Qx%Jf!_;@X+=S=b`dWH6DsjT7b$x;xqr_ z;UT}s;-LtnS>2@|O&%)f2A1-VhlhQqEglL%n$=wb68@}8gNM+2hGf+D3bpK*g1Y!Q${rErE;kP(KC@q_WpZVX#2KTymwPRGWwY>FJ%dB!! zmQ%S)B0NxU(iyY8fpoXGZ0nIUknm?kdZ3oAu%O-s>27Z;32I@a0d-z9pt>a^e}9xI z8AYH>$tVSBN=5}p@NmAa!NY_GoQF;gtMQOuXaOn$34c~24-cD28Q1-3^g$ zU?&@Sc*r|x@vsY|yCH&vKdZ69!+@qnb^oWer@FWO#i1^2Z9whbmO~ACrW(}DhgP{u zK&G?i?L1IZA6ZZ{K$=h&f;6G#&r4j_j=ZV+AuMcyWYBY z@jy+R9Zj|RLl*;Ty>1+8X}4-nZ!V5@ms<%kodtCFKrLQ^Glpc8fi$7s25CY~T1t<6 z+1&%RXqg4I6r>5Y0%W<~vWEfH_F8B>skb^kJy1*baHy~LG@w50&7p4WQw{3oqgJ{5 zK&G>jz8zD zso+rSeP%!{9LAxheO?V}>V2!+43Oz;{TCjnRdmMG#8np5X&_CgSs>F{?3W&>l@Bba z$qy~4X&}q>i(eX0SAA{B>h>fL)TEzdNC0jn8Bk}A;!xj6t_HPuVT`-nGLY%)`_Ue# z`M=}Zx*L$f4>P|)kh~hP%9R>NC2jtFrcbgqlM)un%u}pr)L&piTp6Ld^nMuGjh9fcjUtApqX@JW$i_aj4Di8Botwai}vN zRD*gmIo4fnCCGHP^`Qr9@o1beYPAfc3H3He6Kc{JdZhj%57eTuvF=(e1!+R909mfz zcw|7$6T-N0a3C*#nE6r|*)hH3FpqJtd8JkEK9K1wSqZc3nCw*+ z)I5+T)LkG=s0DNb`&|jM?3g91EvUI5O{m*Img_lc7`J17bc7w(+{Qun(OA z2fIL;#z6r{@G!iN!9&CPoQJFRtMQOsYyrvxna=DDJv?NdwRl(p(&Ql*q{+iJx`BPu z(8EK0>td*y_v+i@K9a|YtE1u?1v)fdIS~WV(U2e*l zIFx&=tq1B&I%BE^kS5gRvDPDLAk$gfXFO2LQsUf_aT}xwHECQNpgw%YfO_!Ru!hv* z{?pk5HSL!;s@0k=8BmYB%%M)`S`F&WRaUu`Ak*3EZXT$`ITqA1kZvIc=@#PE^ho3@ z9;iiYEU2X*-9ikqTtEAY0d-lAFmA^jdCvp2VN|2+fh;$9qTzuwiLZa!s|yANbK z8`sAJHT$#$H4mg)h(WrAm~LQy_3=PmQfxuZ1?d)IkmdTiz6R8h{S2s!KlMP(spL?9 z`_zCsd?<(7W>__-siWfEHZ4OxktH#6491Bn-Nb~?3JUkSywsibYv_@;H+py| zT5Iu83ex1E0%W-!vB}`!>Sm+5@9yzbcgYbBwf0^E>e2li>cj)ppl&{GmAemQI$L|t z12y}M1vL+(33V4p6KVn7z@qa#P?wywpyq-!p>6|-6nXgu)a=6s)Gb9Gs5y5z)aykC z)EQ?u)K`nEK}}7ra&57hjX z7Stk;X04WjG@(||4Qyk%2kO2Y3u+-qvsOz$mg_%M7*IR^8TNGqRKvEQaF2nL&!OH7 z3g-q+h8#`?&g)8eH3R3QRqj5J>Fhf-++*PUKXiQwd<|Foe`fBI(k74&YYR^ea<}Roaa2}%zer{R0{#!3IOO<0Gff^3=Y=~oQoc+1%Pe^0IZVN z*9%t+oXK?s#DGXTcLW$s#2XGC{*LcI#g4qN$zqp0n^DVcAaW1P05_GCbITBTX>;#o+-RLdJYCd3<+_bMs^;tiaD*u{JHRmsd>cH1jsx`wDss+RAP_2FLDL3U`TJFUWI@L;= zqKyrJ8r9?%o?FrY(-G2Ar&^KZbSuCkK#gkBG$*K<-%zQZeN&}c^Px_)I@?JV!10kv zwPdtHHFZoKswXx$-BnZum`=7Q>QwjSB1NTI45(2p1=MP_oMs?VV|A*9KX|Af0@SFM z09MIY$Es8}jZ>+Xe5F$@`bD8y`;|&HcalPN~3(-zhrP)H5EcnSdJA zwSXGce42qgnxa!pDfLjz0Mw}F0Aj1}w<^^cQ^QZ2nH%!Z@58^L8?1kwty9idIXcz6Ye-S4 z76NKi4*_bmTS7CCeyen}I$Hp!Q7rTnKZe{2kvt*_*o{pZ+0y@j!?+>WMB|{`4kPv_(%;(YpSli1zHC zI-;e{YvSga37AfVT3xhSnxcx9GQWvivd>6#E{cPt69**En0F~6Srt-fK~FK z=c;HCFT#~+e7tXjXOv6IQ>c#cjZj88qkjY)<%;|x^il5eE>F1?fa&CRK!j(MJ0W|h zmH}#S;U=I)wVGxiF9$|=M!Di2Jyc5pwYN|XSS8mBicm(mYg~lBi8Ak86ZbS8$UTh* zbWh^}QQZlVstlK-6&W(Eb!5mZ_Yf)s#7-QWE<^Tpj|{nhnhXVinhZrW1Bu~v88UBp zWLOKR$&e3-ojANIgDgfU)qONxukM@|3f0H)D%DlZ6sm70)S+5CyQ#a}lsQdN?u_O- z)k>P8wNF5I`<&~!B@Hm0+;6T^tw?R^){IAh?)EvaDX4C3p;DdFD&ixH+lb%uLsPA~ zi-EN2E(O%8yBrYJ9n?*g;ivA33}5xABg3AZ9zw-{>126NU530}9vKP&-3=Ge-Ee6J z;@wM^A-B*YLjj<>;R064M|-II)#TqjRMP;fsOGUMlZ|IK4KBpyN{LU}03tm~YF;1LZ)=pq zwRI8$Tx)2eoc?aa>vX8N_kmtFMK6@PX*g1?o1Z^Y>SpSwI(3shrRhC#b(0CGy~eeGTHWN+3?yibUNam15kU7Ie^$;I!3LV6=UnP{L0*B?)fB; zdp^0bnOhap0HKOiU#K!H`&yA<_&0TAsNCTpR0D_&rjv9TE*E%Yr~uStcm$})khGKD za%Yk*L)k8m3^xHa8L9!X!E~}J!AJ;{uiHpe&tgeyu|F zn=F;8l&w&`o?VA(>Z}BJxtV}ytt)h@wKPR*H7N;hsu_UpRs)C)rYm%+HM0}knvpyw z!A&&{5F1QaDpYr^0#kP%b$MNarWh4KnqoWx)cUBT^$Aolx@=NK_+zso!ul>uTULZREKKbMNheffcP^1fKE00l80(8phmR-P@`HzGmvKobgG$G zJXF^LYE<(9tK_{0RjP9ip&g>j*m_E*n)6hldg+u(b=GNxYL7E@sMgMC?k+baxjD)m zb5^HXNmI1Z3s9q)JkxVa8elp(dse4f@qKf*Vmt!Ws3y&74yubwRjTiwSENO}BKah4~(; zhX6IIC4g1(xZ5h#4i%~b41B0lEjpo4{raIw)$v%NTK>2W)$HFq<>msW6Y~?DYHFE> zY9^pYbuFMqHJ@f66Q1Z)Q!aX_W&mnba{#O47Bwo>7f)5H!Ny3BwV3v|LbbCoQn42A znj@*TxXwFLw-zgtTDZ%t0fa}{C(>grUY>>&RRJmhHL8yQHL6L|=`F2&BR$q)*^Cx$ z1-J>QQLP57lAriSD%Rp5OJuS)W<>q!M=qwr+_eTe<)XDMs3KSzs+8q$h4N<+btq?V z^^~6rh|Rc>I_1=S59LfickKeYYnNsqhA5qK%61Rs3_y470%9|6luCJ_HB#{OX0<0< zXuVm=sTS_uECW#M&2j)CLwSrULu#BNL*Mv1GSrrN2&G)0gvK|~WvHYnTDt?(WJtc~ zxg`xSos>1vWvIC1k>L@bCPUI?D#OyIstltNA{)~#BE5rN-T5^N)x8~5s$)7URHZI; zsHV8`s>z;rU8t4_6+rf6eFa!WVW3_z{Aa{$xH&aOJunwc%#8j}2dOE=Xtz$*Ex zZYtHD-6IuSeAqypYSQYKv{t7NRH-%{tWf=9a2=|b^E~BN0Hzaeh)(syW)IaeK&@79 z0%}yNX$CTBh)%V5tA}bSpjNBpfK_s*S5&ILuc=fc|D#haIj&Ic^BOVoHTKK6#_4Ci_P_2F8DK{ml70O-uxlXl`rf9kf=+@O~t=v@80Mm)_ z3!Q4k^j2;Kcm(Ly)fufo^_MSHs*Apg+-F9>@K?TzRK7}=r|FcdSG1yvaATTEc|o#5 zdBDs%luvB*lwSr2?UvIFmsyNXgWxrj~lBW&&zd*8*x(^JxZ> zlc`fpIq#vG0jN>U0j!eW&r+#2Tc%QVt<$NdJyfWUTc=VD&sC_N%dJDTver{>4Iqq^ zjXKrK&plKt05z(Q05z&f|I%AN{6VK$_QFH;CZI;O8n8-kv`MAH@@k$sO!`S?DS@|?pe<*H(xa{gh3a^z8!@{!{TTfFb>MqG_Lp5YwrAl>3l|nV3x(?O6HErDG z76PV|mJf8Q*=v!aR(CF-MzsJ?qgq5WkmV0_s+sHCxHV)gphh(xuu6XCp-MIWkxI48 zzdF^Ng9_Eee^sgtm?&zionfMMTdnqlr`(j2wA>mt%44fl(iE*D2Gpn~pYq(21_*bF zApu61xy4xMiKuSV&s=5Dos1^Xa+Z|w)ys&{v^_{RN#b}r) z>QwWWw51BLTvVy{lN72ZXC11ktJ=ED%>+y*agB7UwKPR*Z>!t7sb&DW+Z!N$^rVqa zwPsCQw*n-uZR@6*23REzk5Q>QVpXbbTIp1iiWI8vw^FGFwpFMeYg>ov@HvRH}D7s#Kr#(y5l*Rj4-V ztx`SPSE0I~UmdD>k38iT0>T9BuT#x_?4gCysc^EdzuJI9{i^r`SWa7*L~H3aHg;In6*ej@PLc9`jH=1gKFh0j!e8exg!s zH&Lb9f3i-s=(a-j%gHKL@jHd;)$i(1&3@o1Hy02lV3JNX^`VDqCZI-jEucm2Y0PhMaWyFh%kC}9TD~%^6)7JOegc#=py7D_J~jjsEKe0 zP!pkqW*{|dbP;loctj`w)I=x(tde)HRYjP!Uajq{e7&~wZz#2WIA5hYafd>+NkJW| zsegLP%>+y*ukO^T*3uNMzpe66%>dM><^ZOXy*qWPHPs%f$qzhK(*UdFsk>CF0}EBE z|2e2rEt=nfD#o0HD%CcJ6{-&p*P)u7)xlkEE+D>)KB7}iU5XTyY9^pthXLI>Of!(_ zM|7$w*&W=9kpbw|VZbW6XR%5(_*fmqsFXWsictgPcBmJ2a4SX{AY>R^s><-}yds1A zTOAoH4|)jI0H%{GWx5QPfA+{w0q9n4K(}%qqPO(9pvzEp*dxPDK(}%OR>{5>RT<7- zQmeb-mR{ZE*A=QEw^gb|6$;fUck58yQ|T$U7!cnB|DjXOyYHb|2gFdp)%>{~X{}y(qEemtk3!Y;tPa)GB^}-6W&+}S z;98w(Eltssm~?bg%>Z;OF(AGNuGOj5WOj6GMsik1H`O#id=LCwrTXrRI+}60prhMJ z2XY(ffNmpwry|1&-)O}~>+c^;%}H}Wv~Esb-tQq)0hmtW1EW3W9Tk zWT>VY$dbTlk2zU<&?7@BpjO@GfK~E{plHRMl!Bub8?9|*w8xw*xvEh8AX23oWL2mh zx7MMWch^&HAz(UrVAH8)|KXvU3#d^o0Mw`!(G28GUZ7lw7P@|d;SS3dbD%C&4 zXvL!*)I_IRJ-ZXtjE+rIs&|?xRM#Zbp?V^tle^q9Kny0$b*g(7BSqDWVnB^*DWFER zoMs>`Tj*2^Nhh~v90Js+mH=WfX`xa**b24k9!#=#bkZ~<7f92L0zgeOiU2W~bX7&j zb15Q>?p{ZP?0p_SxquioOL1c2ms&)TrhF!gwE}Q>|Ij*{vAKq_dl98X%1KM3w5@ zu`1PPU+7emb|_REeW_AC`?W%K!8diNUf$~|w*nBx`y`#}iG3cbWq?|(-UQUBR?`f` zHd&`yT;!oz3aHg;IUtPp$tu+?->OuLX6aN*E-O?kXQ@;(=O|QPn_Gu!-W^Z5g@7>L zQ+2A@6&|X&fEv{TK#gh<%|LFZ>QpoT@K9X~s8P)agz-L4rTW1I@L;=qAEZQphh)$q34z~Kp5{UbgC7Ly0{hK z5uipjDWeOhj$NrzZMRCL+JBQywR)>U^~+5vRdI_#_3D;7R8Q>olv@S}<2_%ey5}bk z)nY)6YAK*rtK~EU8K19HE!^v&dI(UXS^@~;eVa=4`F53R&|aNt(FKKS$Gs}mJNp%? zYl`Yn&A#a=Hy057?E#%?>Mak|OhAq5T0o6zKFvT{9@MF(-0@J&0Mw}F0HVJ=s8T(6 z2vptuZRPZ?ZW|5AZKKWT>h5pT0MXz6s)~?zS`lINnK~j=&g<&tQv-R25;?d9}8)%JteV&!bG`!{sW~ zi8mCgO>Wkqx<~euTMP)}{gzHOuh2ua5KyCf2vDP1LNk!Pw{)txyFFA305z&bfH2-~ zt5gS8s8s*+P^X%IUZFbYp-Q#QV}?-lxB!JJj2H z5~i5l$J&?)&r*Lnw{i~hXeHNB3`e=IwMTR9^5wZSNmBxf-C97gTMbf`+b;N8w@TV? z>6XnylJ;Y|Hz{^&0>xGGW78<7R1&o)#^ABa#$FNmx| zdQSoJXr&iZ43joWC!M#GCaI(gDR%1v#oBEpN*>ZHS|^<=gTj5_HlvRnjv@E2Li? zQ-^fzMdZ;+Pq_pP^Dt2-U8y9gq-!YFNGD&`Z%d;%o%oK`NmpD!l1BOw#Tx0PtHAi= zajZ(Zbevk#XTR1-S3gA-kT!gyl728*A-#V}9nvR~5$H}MT}E*_VZPHz@0m%HRMN#1 zYotpl)^00T@{ljS(@7W3!ex#0A&NE9B^2YgN2jW!yG^sc=^ajgm%Mp|t8^KzY51ms zNkNLWUC>IK#bObR>{R*>p+TReSeqkSW0Tp|516wgeYUj|vx1zOZS5RzHUK%be9KAt z9BT-PpJN^If76@)-=q+7V~#ZuQMq55YkeJu=c(2(CYv0XYwd=!yi{vD(jnCvu3s6K zYVD$4d09_vFi%MwI?p;2Va+bhvo>OCh+)3fiSQAz^R3fxmNy@XPf6)~>#InNSzvAC zzm$d#%4ZO4fcsN^bAh#~5uu0YEV3fn+Io5aV(Tpi$92SdnMUcFo@GsD5%bkM+xoWm z%>Y-v&&P?R%O&6NdfG{ZWdy@c#SZp`0(oy#eUTJqTP6JH|J7{kbQaMv-&<+@nfaMW zIo1UHru(oQ)Zg!9QI2&D9@=)5bu|JyUtDEvUH?`9?>#6WfH%7eO^JMc1jEcAH@8D| z4j|H|H7+R0z&)`bC;&oIA;Q&u`TNz@_sj?hQ;}YfpvFZceW%r~ zW{DwJb|SlyFG_B(%Q}&1mxQ2Og(gIjFe8vcl0h(_O1%-sP)SA<02YZfM{gyhN({RP zA-!lK*)LlQeew~_3Ow@3)Iw`-l>AE}>Me;>7g}2dFBR~%5iR__H;(>^2xH#*M{7bu z#IPc7PI6e;tVl9>k|UC=F0sxe{mwvla!A@EYc%O~+PV<|bgE8U-yolwV?q$AIr)q= zf)Q5k=I?Z`j{Ns1WQvdB@%@i zj{>Dt1h_7<2wkD1(sTLr@79A1d)uGHzJ!QV1vjnZxZPCzBm<&*(7y=%*!-3?6oJ(G z+_LUOytwDLtdWM?@Cb7CVQ@pz;92!8??A*h;xRJGq3(_y~^H< zAS)hQMS18GE5mm9BfynmsKdSTf6m?4E$#kC=(_~Jv|&Ry`~0V<#R_s1XFl$lAk7b2 z8v6b0em@6E@ITgaFuH!hmqy7+UoA$HglEQ*I}WYlkq*6IFeaw z4PdtlB)!0|CAnB@{f<4ZweKm<(Y`Cl>gU!uj7*yRYt2KDzl;A`tqA%@p0c)S=rtxA zY~caSBeIyYO^7@dfmpHLT$>0~#>oh_8@_izsCrs;CuBa@){kYb%Zc@Eiy5YTSEy|~ z4)P}rY!?g&5z;Th))GVGw-L5th|xRJc80kvhez2KFieiTG1?YkY|sD|3#&LP+-dCy_1Kpd3*k}U_%yC>ON`5g1-gAn(vTyEsFag6*@BU=x| zYLgen*bs|jjhx%qwu@!{B=5xABvkjzco4iJM>eswWDyo~a5LL%=BRw3neB`z@RUCa zMr;e-G7F(w$d9dU5^tg*p}Y|_nj1@_Mzh^mG-j?nnl$V3>dPC*^v4c+H1_6mXTo^Y zh0>9n4ikJV=mC{LFg|2&jUy}o?a9TnV_gVj4X#`pTL%VFJqNV4HD*r9U$nJNrKgYE zA^DV?(B5{RL2X()LL%lmY1YX$0|%ToAV)jd3Z#`!8P^8P78qAS8pAPO7T30al#~oT z=&jDSj~Vt+06D!oE{u%riimhP5q^r}<)6FS`Y_=uA`q;o3XX8^@4Tf1{85S1-iHWB*pjgp%0)cnvs7n9(>){;Iz% z+Q2^cC)38Y2qO!6Fn*+Pkji7{Bq?@*lOGJS2_{5RtN*HP86v4|ebttXCf@2b z+ebJod(GC%Qcm9jjb+cxCih;$OP@`GhuTI!?-GaFJ`TLYAf%GFs{(_QKQ~9dIn*Yx zh-~dQ0x#k;X*I&u7m;GV9bs#V2r+phPzVa^`-bf#LO3;e)Ao)D&-wCQ=+IKx|2>~E*8OKpb`aI@bsTPc%Itl7|te34vV7280bo^6}X zFwdyoG$c_gY%SPlP=I(``DlfW_`k#8gCJpx5x-{7l5aG`vJ|`OX(|9#P8pGAZBh)n4k~S#X_)REC zy=B^7TQ5K8o*5CMe7HMu$zI#%21Fg|b--5J@R}%i`=iJ3Lj&~YIXu(IH{`C$BM#c$ zqY;XB|7`0US`vqw{kb!79lU&CUii~Um8VI=L$+4X!GVWtOOWx#At?G|(&?~m7!HdL z+g8I!Yx4^#u4}>_sQuKwl^^l?Wj-c-Z(1|h~P^vr}l{r!`+lE8bkqre&08tLVv z+bLT^<`**Jlx<-IE_u`L4VS#py+Kb9fsCbsl5a|EzsjaxG2E#SFe|y}1A3R(TFHG+ z+r}{g&;!_gh*k_;xg#GuV+&_U_kNA)lc^6xKXUc9Z6>;mk#}qk1gVr~-?Me2!9I^w z+CK8evH2rgB}4Yr*c!^wf7@2EOds+Nhjw+p#?}OvBcIyZ87)`BsBW52_&oBT=Qb;I zMgI1=?HD8X4CH$Z)3)|JRqFkXh3Uv z9K{X#A%qX+>m`cyT;8;~`J=_~^=Km$gZW@+3Mv(`qAbvi zkk1fiubyk_XHc%qd{}qp`(z=^f}&9EfqVl#bfFMRYybaKYIH1vODaR&_!7c{acJTb zMUM6;UTAUP$W3VC!l?f5D5ytFfa z-Vd?aH}&NcacIzw?-g9?&&PA~7!-^@k*;z(`6!;Z%M<$XF=jk5YcOv|479z2`B%}5 zf?wv}K@9bYFZ0wmtvD}5ldUiFpW=!*gdd108;9|41)#GskK{k|xne_4 zXo4v;Z6sgABC^_~QGAV&xg~%0F^}+xx8%L!c*K*tC;vU3k7nfP3H*K5*O!`xA!E7T z#P>74Yw&S@SFx#%-FsYq{WJa$gArdiVvHlH=i(#fkzerByqPR=dkR0>l#Vc8+QoNm zZ6nF!^_Y+qRcSgw{%;C>6{&&N8 zsyehcufS(`{I;+=VS+E-QaiM2-WbD{TDU3(MYVO?#&=}!lBR6u$6>Pe$9Db|b~!@q*`y|9><)ec-q__Gyv@g5ha{kY zpAf$M2tG1x>sn@V-EKkcN?PIQq<*uL)B?T@^Mw3dz^`Th3L_KuONgcTkj&i49}SE{ z9*lI%*onq&t~~PbF5VgxMDK*{fPru<_gBD%*}Hg#c_hz~c^kt%4I`)jazw(faioxM zi&)z)3i*Bh2#>w*FyDtcBAb8VI~ZXwxQ_9A5sUA|F}}tdag1xu@Ky$HlZK`I6x2gT zDgTmzc|mUchKBO5Y%b#i*^uwUdDF)tOUDkF5gg(Va;HelMSd+agPgp`Pi9lX)v{;F zA6?@6G9=(SKagy>%-=__LHu0XM1%bLb^a4GJ3m|#a-Mwq4!;f)Lpk*>Kaz#_=)pax z`W?AmB|qP&8kA;NwO69c554)8YJRzasg?&m;y0OKq1HTwI%mn<|KUGi5jb;wEwq_Q zC5N8#2~DRRRcd=0<9a$zHRG=qD=G6lDVW2+h>2l2E?pM?<@+;iW;j`OEk26nh@AR@ z@5Qjo!b$TBrf6pA&IiIJc-P5ER>Z`@*Oy)ylI7PG@pjX*{9ch?_zK$$7$>#`2syBd zUkMam!eLdQ&3}?8hKs9442II3X9+TEYp(=s>fqp3snGO646P!Zd{PCauGT z-iYWuC0rQAS~kbhVLp(L;_}F!kwT|>2=P6e;RdUtLm({A3b|910IyaB5v@WjbbF9h zu;FZ+Rj}eQsaD|?xVp$So6s@%oWCo%?!^2YiQ|R)>^Xlj)xVJq{nSeTMh(djLFmP< z$BP~m7=eo0AqWNR%5buOpltv>`VYcvU?q7W3SD7Nb+rre?0J7>G9qI#@&!xJ4n#;1 zi(cB{LjqjJoqwi7x>6u7IM zuur`r!Xi^hE^jY1S4Bt6c5gm_Dr$v%wLPAT*LbS~N@nw+)LW%!W-FQ7Nw`&iM>zVI zN;rNLP)>n7qq7j|i)NVBTL>|tiEZgG_y=Gr_tS8p7Y@t_ypP>-ml48Q#z zT4Dbxhfww4hl{3fh4uy_K8}kf)zgHIq)U>}2madclLRqrDPEcn1`G?gip~SP@tRws z(_c!8l7w(%TGc(Fsjn{#-qxt4r6hQo&<3e-DJGgq^U~C*NR6ORqJxhwmv6wIfe|o6 z@rQ9G$c?6BQV7A~X9yD^$%+}mM@I5ViqMi6Q-rZ(b&Bu_TNF-4wTO#GciVinumwhK z`D|eWd`T&D@DhI}8|Mg};WoH4M+jipqv3=Z=@$u0qh6}eE(pHu0n3Di%rg1vGFs39 z`9`+Tht_`FDxoc7J|4~oa>wP-tMQ2F`=WuHYWbF#0{2Ogaja-TSX>KGqEL^wkb`Rk z$-*fn61q1bm^@qq)wGb9wZak{_OBHN;^4ndXy1U_E{65+!hfi_2>4YH8$65;CU342 z2E%IFv`+X8Ic@6&yV;MLgnp#&dSQyUAI5+X-j5t#FGNrE2M2zv=;wf0DFpEtXkl-@ zgd7SoenEY0fJV5uXo_G!`{EM0PNJ`?1(yrI2HZ@cuEF%>sGBz)kF{ zQu3jF;eTDgS_UW>5=E21Vs^udw13C546s{a&BAo09v4%hV8m4;Cb5`%;f^|2{rb6> zHW1s3W5#wOO^YSk_4kaYeJnmas`Lk zm+OUYh`f|5NT~nMbA=xmKiResug~8PhL9K6A{OSgA35-Y!2h3=`b#zm*8fh8-6S;m z@01TV3Edj{X-`@-R}95t8SSz1?oGm%ESzS|w+LO#!P|u}o+Dpu5lZ1V>c3S;#9`-F z;jNfpND`1J2JnWyczd*?^ofK9&{;O-ARLbid|)K>ui4Dl2=Z#a@G^v1n=f=~=m(R~ z7ju+IZdQmoO=U4f4>RAz9mnw!zBNeCX3?;A8r<>)QoKBuz#S>*K2Rf{wtlzTh7Lorl}fMED&-n2$LY z+8xH5Nw*zB#|D1j5|b$U3*OKIZ*FG*HI=+c`VJxVRW+#--oA)FrVrIDe^gs2AA-vN z#lV%)F$!j`$whx!gyD`cY7(4%|C8oN`!_UM6M4Er;6I|?5+m1&s(Kli_ovaD>5!<@ z5KQIQ(LuT#5QFQ13AUN*k8YBsS$PY(2sAS@w{ouko%ucdnr!W~^ZnIs`fmD*TOK8lV z)U3r5@{wIaeTFSjj4hbHzmghRkl_Z*FBEF2Z*=o+VG2g0*q?*~20q+tdxRaV(&zh8 zl}qGWV`!(Ik=A%OOUV!Wg-Fj;U-wn&Y@k=K>=*ijNKBCsi^Hqx;kzQC0nQc|p|f5t zcRnEehenytJ}4Z3iTt0Rg)#=6;j}%hi+p`ph+xlzlL>8^MlhH692TA;XE*%H9u6hH zD36(_o-s$Dy-P_`927ce-0A=YSHEY_`BcdyuRJ287@)Q>$AuFP`dZB{pHG!JGskd?!s)w#wfr-Fe0oidS{9QH?0+ z%7Xx?3%P&{JSBwTK_8wHnt4Bq=S{I}IXQVs;K@&?1Pdk*M@|Xz+0fbm0k!Q)gQutt zi^S7H6~olZZ=4lQuy{zL^RQn_<>K?gQ3f8%g=Inos$lX3A-d&KMzHgtw7qf|tLszu zfcay*9Y`lQZ~@}M`K2cF-pU2}_yyrtBXdk%c2%gR-n!IsA<=}^XL+4WT+k@0^%H7} zaRsy?KcNdrJ0je6_6Cnvle#*5Fs8HIcDlT>ErOiRmZHe$>jDS&<~P@cu!b<#7uE>Z z!_=l~;?0U$d!d7I#c&_fYQ7lCPIW!FjHxtQz0zg)V2q1!oso|= z5Z^ZAo<`AP1{R<9MB~;+GHVsDv4PWUZ4DecZC|`8?mDUB#nBd;<^^+`LBjijIGR}? z9~Z=)zA#$2II)QV)>4n*UAc)*0YcS(D3bHJQO43}@B zYiM4s%VbUmF#;2absg}K6cXN1jN{dsz)#Hiq1NG5_VqY8A)|piNk(=QM>40#(T-wU z(}6jxD~*^si6h|M`A;X*D_aynrrD%$a=5d20sL}o(%YoAi)ewf*QcxaBXf-$>?(GE z3*mWJv03Qv;ot$I!VAWS7yiMZ;BLyUZsJgey{FmZf5^LBVo!#-OrCWYyD|6WPCY~; z%TyCrFR?z>sD}0uC7ey}g$ntFT<#^hFxRs77CWJbe6zRs8nyxC_ZAm1)8w9g#8d`Z zPxpn`*GXkx@gp2w?I#Y$9h>@z?QzGge&SQCVO;AkcCEK28sm_e+bO|xsR!>Sw@OYJ zAjUFGlKkdC@fj2GBo3A0#nr?igFjy%Vwk8)-NIoJ1;!~<-NW-&jJ{~01y7??TojiF)|OVVB!!`KIru(>UfbaD_zuDmYV zdHaKhSr*70Ok|9 z1@hJL;<$z=V&L~;FLN|RO`RSP1m4v7;mxmkBe+{0wb?;jT1GSJ1Pzo5G~Oqv}Ln{jh6 z?{wuEFiOzB++#BSh#1fOB`-T77PHY=47I*tz;^H&h&~zaZ&$amiX4gDbCPrnI-MmS zJSJAL?6e4sToAvCJUS^(g17dQQ(_i#g!ujnH9k+?!+~%mVtsP_SM*Zn;w$Wnc)8aZ@l_VxW>%@#1}j@7rD7{I2-7*S z5f%)aoD-vQ7;sK(*JVjOZ=j3RUeu7Ic086QdZSB$RnNVG_OLb@y*^#8fYQ)ej~6FP zFz>0+?**UY0rgSW&WTQDt!zFo_F>@fdFeOtItoZA6L}nll!5gnGQLb4DqQw=RmRrw zxo+|M@AJ##W*O@8ClY)C^}Uy@zaYLqZ?XQOI2f+qzb}f5*~|W9;%bpPVU(Q=$1b5G z_?ryB4Bh&hti3D_3jN@rnvz_+DQ<_$XWlI_*5{~|`x>KeG1-4hd{sDN zKf0DiXMsmNyEpLn8;^EtFi+6pY$jhoBz-bcmK)k`sBK{9i zSu;uFhv-;m%OfA6x5Z#J;V;xA1pW){XddbG2(r#2vmc3rg3J9~6?HvT<>byIF%MTW z9*alZ&E(hLnV8F<9c`%o?S6wSDryfE1#>)h_ErpB7> zt^YUgEb@ujZvWrBv&d?*eGqt5o9#o5kNkO-{A#o}B=36LSE_mGBk7hbjn;R}VtKxg z-N2v+TIg%<3>&J%*N$Byi{)AV_Scza7>4Om755JZkJ`Erx|rx6!8^Ex5quMjFVs4T zVK1|7*dhZ>B|(AqV$@$*p#4W`%%J^+al7G7q7Mk74+v5oVB{9cTZ8N~O%0Qq^Ihqj zo30w;Pf()EjK*0=287zXVum|6)ZPWIpdN>>Y6EFWFzlVVPtffDZbOWRDk=R%M2XLp6cB?d>wq^;ShKs5gU~ zCAV_ge`1X35v~;SS0nofRPVqTJ9;yDMvT3Z!Rq&fSo;sqgUC2gm@kiuvp1n_Wm&x4 zhQm+s_8C|y>)He_^97mL#6A;Ndi|z$hdGnl($7feruI>&opnv^3GQ}swWr;m{P|P! zAQIKg9z+$jgD9ylx=k~CQ@q&^o7pF0T|~Z~U?0mc7vw=L@WPpg^4ym8A}m9Zfo(wa z2wB(0J_#OXzOB6vRy{_yweM#R%Q5Zj0ftsGUyauU$PJ}T%hY<^WA=LOGQ4Vlry{(HT@1@*y-C1`=(K9;}gX@_gHoOJE2 zyqkB_!_?k(2NKt+hofrZUG?DGN6Fb(J@o5i=gsAcAC08-v4?t>U{;TvP-HGH!1B-Q zV>cO@pXBWW?CA`Ky`F>YquD*!B{EfrlP?Uie`SItHsn?0-6((hs(mr5cBaup8fKrz z;sv+UBm6(49n;c+0YwN@Zoa3Ef!^q3e^y9qm!hMw!7F}5u{m)v%9ahM|VpQ-J|Q2Um0V+ zz%X}7{8)QL@Lh(-_PHnvo#fGb?~>tT?N(g@2^qsZ}>62U+(a+y|;n+QJ(gRJt>gcC$rz#*DzSDTR+v_G!Vyg^X%Qcacr>I z{(@m<$_76 zu*j}#_A#Na^~RduM@4pQGP@_I9<;}reM-=Kf!eR~zG8cz4|_vhLn4EG1Yh|=q(6LNpT@wT`Cj97E7_0 z$s~HXM3%6QH<`=wL)I~duBN?ZbQGekg_;~c;H=2x7>IqL0cOW_A5>3OpyPrO$D{Qf z7RL8t1o&~-mP2wjOAW|hA&$+=C3#h-qch9gBG(!^UdN$*nB!d^ESvbFyUCJQg*l>F zOhflYIKq9dMo=Z-uE^IS9A{YbHS96PW}GQj2ds=}hsh7u>+x{NU@OnHXa~XGg|DoR zTMSJPR@3E=c*hLEh_kpx*xI>Ub9e-hgh7Lq`1mB-hJDmsk_zm&Z8Z4}I)!@uBT# zBO5^ueC80zibTgu_Rk3No_|aFdK1BsLBf@W3rY-tC(CD)VD@ZJd0{8FWqu{d{{h5O<{-%89XilH@$rwir zx$&8!%JRFX2C>V4Rv`C&K;h4&>e@7^b=IrAL^6~{!s675F2bx4G zss7s0g#AaWl&5m%ZycS_!OD{+IYJpW343_xV%Q6^d9vda%)=>D9O&w1kc6$06>oXj zcaFIR$%0zOS{$~~vzBnh+sx&%a8@Ic+t^6aunQq1?T{e^`(hnUuy1wVbVp;Kdl66} z)R_A9Mfr4x6n+m|J(U5$L0=plrMwh1%apA%968vTD(_ErM48y6DEZ24N2$TLijHGE zHXf3Md5v1i_vblY#-Wr3q1CKSUKI94-Ha` z97*2m9M?=e&~c}S*XHw)wG*QE}#H;(65Ir;>mMOgEd_CfL;15kH2 z@=?L_Wb-yh0D3zTvcvH$ERuyg90g`3jr7?KpYa0n`)^F4n)j=M*8|KwN*PsE@- zj_-`jLit3I;|&Iy*yy0+A$1T$9L5`dK{_0E#50fOQHLF^4ft?ld9kB!(9B3KC5Bcd zk5zGQ5qVVXNI*X<9d*oyMObhYd}i)CMqhN5|Dxts>0EQwaYuW&11=qRgfsTpkr-Lu`VC(FVgU&V+hoF%t^eXQkk4|d`=fu{eQ*jGr7aBj`a+) zL%v?(@TD4X?=-s7MdaKWhlI0dXB_PV{_uyFM%e=H#VsSQvyPUb6^%r=7pa+y^+awu zUZ~lXBF{eSXn|+QdrGn44|g9p=NN^)q49Y~8vGW!&pW6O?aB|W!%66G4m&cyk=BKb z*wnfm^``yicsn?gu4ytZeR?Zf%N(m1W|mxZ!GS#?v*hecj(6z}+2_|G#!~sy-yOj| z%ziof56515xqGGKVG09kwH#i` z=&x?a_g1#!bM4^+VaK@)i32_jpi3A@#(@D0-3v+K0BRPP&@z?1`rdd6J{`Fq-OBGhmVT;$hfx(WQNOH-F8G-^$c;TTC`8#e z%2-@D_Y~msUj;xMAG%masdR5*Hn?tqL@(+;e2@y8-mx!A3t?`5ZK^)5VaM1qkp*?WKlfMKBMq_?#^9AY&{96oO#p-cQp4h@q= zu_3!-cmuv^;FKeF0DEx_%*F4&yRZSX-mT_?kFKG@9sD_2X{k`e@C6}<%g+9?umE0;tyl9po6yxd6IO)VQ= zaL$syiIJ|G@ZdL_O0jV3ecx2d!&%E_Qg>#H{ADw#mT8n9N%!s0MKL4YFi3sxRGGZF zGcmXT2fr%`3rG2KR&%Kd6Zk)gr7fhFShfHiHimC@Ml<9Dd z;RD*R-LOO6ivw=hhV6+hzUmow-N0iHe;f8=n8LU+5(i{{SG_C;e=EUhcU0c}o%E$I zmXn*ONG~(CnT>m)1A?O9{~|V#b{cr}5nl@mF>t%(oY`Q^K95;+ePvT(s-Wa4@X~{c~U0>YM8v4Dp|>xR4G8tnI|y}H;sCk<~K&O znFpJgOO?0Hm*6HjL#h@?BIYCY((v|~J)~*6)C;5G=jl=qU13dLD1C?{`D2lEk9kJU zXGj&ex_>ct(qaSMktI@NOurs1k!~%#Hyj+@2zb>-QZWO-ckko_X72U-I*?Xll*azm^@D0*)15|D3CRETBvVM~^3=V+j zo22!aRw!(*k|TLi6|%^iB^$Kyx6KlKrMJ`)ZpzTcI6AN^%6Ug#nlCM+U+Og3F3k*A zH(JqUZqb)3fYS|~S!>kCQgVE|6ds~p)~?XCdt8xgwo9#9x}?5S>TO02>=Yu*mXI(q zV5by7R_;XeT1xiplww2a?IyH+eDR5IVW|RR?m?dIl!iy{ZtTK04(K1z!Q*>cbdLPDq#7r;((?m|($pp)vO}xpq?O(4aDs z+6Snb0v1CoHEvPO^GLH((p&j`oWp;OWfbPRoeMeXAuE2{%T*`FJe*sTFp zf9_yojIrR2gVXc%4E*pkh%-ct?Vsy2|XQX3<%-sy!EzUD^fcMQI!$~QT!W>rK|YI63( z>RGtixzoU;%D?(LLs{G0D7wN$C$C{}C|F#q%S+i`r*5*FD;xZsO^so*qo9NaD4~%$ zoDHHE)k70kBlqK+?V0G5D3KcAEVqckW;3o|4BJX>Z{U%HjSggGurm|}<<4N|Xm5C? zt>I1#0V(92NT(BXknba%R_aSyXLS;WebHF%!aFY+Fakt4oS(5w2AS`4zQrVwdrs%< z=zr<79BSonTa^i-w5bygZCPyQe2u}}>Z=5&%`Y_;Pb!C_FqPyaIFtKiVC;g* z8L=6R+lR)^x*oytMn|kdV-HEN8Rwi3cYwaA1IbAGCYG@chkM9|nhN#>3 z+d7-!>+pqbofXVVd2%~vv60;rs}2kkJ3C)uSH+TvO-%_{d4Jg1xs1t`=XY_&;A2`M zcXiT6&@6%pZ|24AMU8RmW8J%1wuZW!LxH}XWnC;3WNj?mc^{i&BCwaGS2yQQGZvnn z^>+5c!PUq41-m_#yljdIAt(Ac-&*wTEkDwtud@}38`T#zE|cJX&UskRUD?n18?%vo z)!+FVUr1}Z2&>@?{mUt*CzMnC<>2^8V$Bla1~|V$b)*bHb>zw$1~>=%V#f63HRn#O zrfeRHH#di{!<=v9@a`}rvB7Ys17{tFJ0q=oV=a~bY{RL_{?&Z%v7!N+M>F$-T(ke8 z-zX0RIbp)(qj=UE>*w;M1>b{K;PohR>)ac(s2ii)rdCD$wc9V8$s(84YZP+mPc zrMDBEef&?LiWR#VK5EtBaU;axkCP2AQlg$&HPV?DVH2gE<0!_LgKb_zlVq#y!l7U~M@&7}< z|I#@WdxkH6>72|yjV0Bmtzl$-t<{fA{>nKFX2+SYob?!N-@f&=vkEOQX_7O9O^YMJ zMsw(rNlpuUCyG>+1;>;2lbpTr^8~owhFL=7NzOye4l-pj)UKQaKCt{CADrT}c*8^+ zG80eu3tEpSkf$@8{_I1Xv|%DFk77jw?V7yc7(8$#80)NyhFon(MkYHeVT366{iEGC zWhU+eUFE)Kp8GD>z3b=CTg>oO=`bK)44(BjJEfM zleTFJUZ~|(l>0R#C~v_ygT=HzW45y^wzZVbc20zP^qzwTdKf9de%jU$Xv$*O#aVGLgnlp@Dt)_aybnf;kjHi7yx09S% z=-dG<`+ku#A$EH-oefg+W_KJNcre3@!zrEc7DRJP=`GZeW8}7z@Rf zE^s^L@fpr?CV_5-8cJu@9lR27h)Ps`_5~?;ZhEwGs0dXKPlGXc`jdRO#F@)v$c=~- zUir!mIhjtzSAB>9E0Vi8^bn`AFdU`GkF%U_Qk!i^wzHMtTwE{gKyl(Tn{21cdOi+T zAA07ajI#NQ{yG8XYGL#b$8B7)+&L&U`kxjycgt%-1?9T4YtWR)Rq$#`y*f+1UCmdT~{iASv0)3BnJefX#gmHFoHq2ncV^$Sjb87g_$z5gV!i@jQ8Fr zccz#Y1Cu#rswuX3_E4n6fnN}*M>y7}-fXgSs!7%#XYhq=@^Y%F4xETJ^04p^lW}<_ zQ!0xl7MKtU3xRM@0z_5o)e4z#Wy7d}0Xaa<=7F_j)3|9S=mld*mFcFn{G=o%8de1y z$g}|SkcHB$oMD3R_9nH>G{NLZNS|3ICyFJrOl45qm}MFXH)PM*rrN3FlMv(0L#V({ zV&raf%-X@a6%&B<>2-2>wn^1olLAO;2Wt{3H^&qY8v5BB)5S2v5Ht4g6Nhh;>T^vE zpuvxvYq}r2kg17ASd++t-#M|^su9qoSP#H16Cf<4o93D9JjUR`0x+@}BtG9{K~W}&?NrW#4p{1~>pB!*;b3C-VN@CF!C znNI`oGwU)_c{Jy{Wu}i|Ygo?Cn8vjnyl^!swZc>nGQf{3Ot2BoBEPJJ_%Vy_TWM;; zj3BO6red6as2pGrW|CT~!P1V9nXB=wN65a_SWye;qt&2bY<r%w{%A(4oj&;hW8* z(K^%q=s8Ku6)ivxE}ZPlBr%$lS#Qe2oIbJM)b*bw@@}0en0DTPr4C4E+D6k4D28n` zb<)qomjajYcB5%`@r6jQ13a&92_XPDK*%SjH<>CzYKq;AwhbqhHk;akI?mo~N{d^9 z=^^^sgUN{2c|j*wer}MFFtzk+9`DV4xzNfnE7hJn%g%PRj?q>2MG5J zzV*-EMWS|?nq$WQxC2XWE?Kh!;^$&gb|-l49P;f>eDz{7WG9x?Y`SQtNylJ$D|VS) z^Alv!uZJm;A20j)+}XcPp;{svTKc&_#BL1YHkq8>CdH9XyG@IEBKvvLc-nA}$;iPX z+jXz0E>Dw4msq(fzafb@XPBZ%iG8L@hQ)r`JQzYWxp3TEf^^$wIux|je|0{ozu#1r zpIg{~IfV^aydMk`Z}EAIF6=iY0zds`zp09Lk^C?A(fk0|#}e7kamF7oB}FWgKk#Gc z|GRd<0aNMVm4LrtaDmD#cFF(Q<7Xg zYU;ubp-qpO4r=tLF#8cxp`0=e0~&JmDN`lB_%tPznP@?;m{T6)^(>hfRXm+kK5H5c zob#cx5K{-zKhA-uz=1mJyy-4H17k0kS}{56X@SWNo4xg-X@2~rBq#)i{Nh|{p`F{v z^f$cl2EBLDR1gHK#KBvpM%Ht(kjDreD1*jlyTwx>tgmkQUH}az5J3!h?j>z-8;cG} zNmkx5dEv)-e#aEAiC?8)f(Ets_FY^|c*)#GhBE%&c}e64piS3E!w06G&}sHOFtvuq z#rDwjIVb$vu6a);NoH7umOV13kY$8> zVOomeS^ffI57(b=e+i8T^574zO$;v=`366pMQXhPFB(J!yfL)}(C+3N)4+&3KHkd< zf3Q#yq{kRd`o1+KK*`B{3%&OaDR^sYTlTK6l1?C6)M9LHtb#%>%!y`A(+R`asSbH5 z=0^+jqH)AP@?pYV(&rtt$6;ejnUOJU>|%2|H)iZLb3L#@H)n3bji*C6^LW14;N;X8 zbb$zV23|0jIJD+cXkQbpxuTGnT=@BOxc1dJA(KqgnrlM9xu!K&ft}E-GXqdCh_un0 zZN-)=tT`;{1OjdZ^pM{CIaJu^dh-C7bpHr6w?}a;(ENs5Nv{N%0Ze#HpM;p_GCwnT zaCu1Er$Wuu;5kbQGn-J<2s2j(uNV+!mcb(yhncGx(8rHr%@=tfGmj;pCF^NoqIp;G zsK-uUJAo%k#H0&hJmN8VVKX;^Hc;Pg?olEmIhA3(0)?jD6eesV5Kb6CPTSG`3>xDw zx8`+!KH-34?d3AZVwA_Z%pJKUMB_F$;Fi!&-R57pbYBHvJN#j=>|=dzNoL$|WwbGf z>CRXX;Q-2OtK!Fy1p-+lNb6f=qI3};tM5p(YOZg{SBw$DWpD>X3U^Y?iE;gsaiNSa zX@vh7JzO!cUCt%bRkK|`TfzJ1ljEw{5lA5?AdL_SPdBFlxZq4TPver7Dlo(W=67ipMCg z>xt6?^g&N^eHO)1xtIAnvF3%N0In;|CY$jNziwB#_ zKuEtn*gTyFE~-_im<*M@PpBA8Hx4xq=lHy2II~N6Nluoz1K8W^EVCu#u2Pt~?hdgJ zN3$=JZ-<+Ihrt)1V{x`F+sqiDeuTL>6VG@io@E`7N|OU;b+HL~%*X5FAEEF0$7RJ| z%NKORu>b5=VKs>*`W&qKTv{o|+yWsjbmAzSVl5pUZ7!pO^*MNg`43IP#AGDDW0pxT zmzroaV0Fa7S{nyz?LC^8YnEABi@kZ~sVGUOndZ^3$8odFpRnu}pUyV7)BpjtXrB25 z(gu*sg=Pne)eFr@+&y}Hp?Ny&2(-sivxbq0lojS^6l0f}Ju%lo2{!A9Gl4r}!=6_z0zQUaT&kLBG{O=dUlgTU0k^Z+7 zB(WDLkiPu9T!S+vr;89mYs`Pa0-kxp1^-lhkV{OiqTL`D4xyuCTj zaMwrKB7l{>LmTffcMIg6(e3-pZ~v3$yioi+=ivc!E_1WNqgdo-dqE~2G>e#6+Yg!> z!u}9*$h?-HpX`qkpGO}aGS}e{$l{wn`TqIS^@#azM3N`_^F1t@{lzge#}BrVJ6WZ? zH21i<9i}bOp8|2rqV7{>7_B$ZN2fu(ATEcVHRtHC=qF#qfM?Pp7tILr8&3~jHplWD zp*OFZpXlL0xp2ok1U`)Rcg;6~C)(hq1hjW6X>ku!u`tib9!?CU`|p_-a3J@8JTSvR zmrHg$1TD`cu198vaXrW%&-#`RWkEO0*B--k15igs3gJt7WImun6C1xU=V|eqkKdTT z;U>_}-hlx%e z$lQy?#JHfa?Kb%OA-*$~Y%YqQ5w)BwB>(HXA)7HW4>)tM zzcAnFBj)449q=h6d1y-k+EPescMLSu12R~UmMf9SN=PTj{$N=qaVnaUdjSclbWx5yR zgY)&mJsMa<1J9xOnRKflj)b(Nttd9;2GeF0#l1-MNKKVRq){0_wtB_c zC^}ZdBp5=ns)_f>)9PY3a<{q|gde~g63K+>ViWR14ZLPJd07Lm8BRa0DIVZpnoFrA zc7$D)X4MvdVI^M|(-Dj2<9g!fa5m1WhbfOVADEOr(5@B5&<3J~oUJd~Nv--~X}Z0E z7|QIJ_C{g@YWzgJjo3FD_9@1QTSRfO9t+ax`$CmSrCVw`j=j&-c#?ff&CtxWrxWfm z&g{3b>IxEZ$Ei4>ZaK(*hCU3Ea){n}CNV0`MAev!@(nSnsgFtq?`fsPJ} z2ZPg7!gUgRldMkS(^xjuy_s`1!>thHOFJaINCxD{N&2P$8ab!4SY5x&j%m4!Jm@Ue z(Z0b=lKMoFNvqtH5YoMiSW>G+1_d&yi`WeY+wdR7m~sPCd@vODW)?W-<=Gz%a~i;3 zm4TZ+8vFhxBG4})X&0)Hey5F*wCj)JN{-t@#cpCmAjY-U*baPSe}Az(it+=*=aA3b8KAJ4q)Ucay7;gZMxr2NGsPnX zuBJ>fD?{uVw<|0)(g-k4C<0Az9L$c9^-O>-V4&Eh7%mA2LV=rD>$|vMpjeq*L?XO@ zF1{Fuv6@Gk4Z^a_Bv%JvUSyIQgT>~JGXD01OZ3Jte;zgOkSreZPetU(3-gBkT6l5H zV^*!K@1mjT;#J>8kME+U=;BlIV6Yeqr7R>${6 z@mlw%cpVD$%o(Bu6ng&*aa?R>ijlWy?sG^5f$}+*7E>*tS^y$pd(8xgIYo14iu)n@ z(vEY)7!7a}8S};7I=n-(M690tw+&Xu`yh)*8E4d5GY=W-ru?%En2)VyZ{KPXP1&Ff*FIOv!Lo9n?GZ5kq#MkBA z%>mx63>gLkl=nWS9s5CpaEku4Tr8t8Wv3K^;<*k>jR8x?8X_=78Q1b|sqEcaS;$T? zY~=$;zdj-H^d=S0Yv4indo2iK0U5teoW@l7McbtqL)GHk*)!u zpJ-NEkT8lmH;Pv{RF2s!!jgE2G};0Na)IV;0lVhL(eqnDyvXKkb7^vNhnQUavR$~( zT;7>H^Hef>8L{jThmnw-Vi$~PkDa0>wAe12x9_e{?~X)tOdnwv%{n692bPHTIxY%8 zbI|M)BF`|4BTqsYm_W9j6x%}3kxzl_z9he&5?>^*-^2-DgF&~#zt6#hIWa&Gwy?x2 z0p3TO$cWQoT$xv!|Eo@{(8E{d`G4O^EWDLT&Yy;laUgwpS{%=T28})oCbyIxJ&Sb! z(c67q6#1u{Nz3!18F0&i=b22>pUk)*idfZqFF*iTOS=|`A2IOhs!QNFSICJ=;N`DK z@yqDKjikY4@bXJ^;AOD}2l4#xDUk=L zvHWS(o{2*=+*7*er6_11!kv91Ch)lb@{L%FC8NdllJq;?vP(l$y`^c8KEV6uRD)p~ zdC;b0Ns>cTBgs{pREk{HTVnZXDGUT1uMzT6h}SMfQb(W#h>lEhA;@AvlLLb-8KD!y z&;|_>Ov8XnNHA{nB^!b*qO~s&N5urMwhwbhAg?*jP^yp~aBg6+4@^bJb-0E?EEVur z{SZsC)_0+Eh{c5q(?XEjDvt~`SW>jp!Vr^|Z?IH>zu=C+k_ZEPNT{W`c6t~R60{4o zT;ZnBPr@unAa;X(U(7NoD1Lg19|REqn}N^H8;Dh;ttJR>Nn)%e4fmM^8|OG+08gLG zq1wg(+;0|Z`7&%)3M6F6wF1!qUHDh5#fB!`jkO>zJnax?$>QQ>;6bAfDILoos{pgo z4|0GCYK4JBNU)TEb~7@;5=F`S`Ht|~Kp~$# z`P4Fl$I_knnZ*rv`M%FA%>%g+)Y`&Qo1uGtYKboMKM@6rT>@78Q!NpUkWKo0Yl)!| zUs;G2)#rX=sn4oEZDVQnAJvQi&$8F` z`puFAx5cF2ET|6a@q-+K|l@&1`Ee^}y4R!_^$qFO~&K72Dpt*tz9&49Lb zxUauPK4nGjqSs1zXD%e1}^szMHmlmzFCH{3r?)I@9AbdZ|P<};d4a)>$SS)M>rY^=qMF)cIJQZk4;Mw?Hzn1Y}M_n&Ebs{^y|H{X)RWBty^w^YJ% zy_jz)$4#Y)3oWCAxs7x&wUp*y+B&w%GMX7N+OM<3a`7iZQzJE1LDaMi1|JSPNw`qg z`?w-31G(!hrGxSM&D$-EgX`ZCpAbIY<#3&ZNJdlmza7_OraFdRFH_z<&kC;jN5r3+p{S3U+IL;3KD?!L?7|up=)|Qa`?s3*q(fc4Od>qCS1bh2HV8c>2 zvg92W-ufw4N>AQuLibGPtvY5AnxnBoMS+^Hwe~~ttIqmOG?u;49>(-Tu`pl<0P_vB zd#aY))mcUUU@VE%TZbWI+YG&RGB(X1)q<>NqXubEm1poR9@tQ11k(tEh&$L?8tT^< z!Pfc+YMT{oU5iirCd6vNCuW6M$MMCG8A0Pcp)U%Pr_L~|jf0}qD%{$J#nuPFCA=%# zIsDEUqcVtewM;D`{yEaWpIqrf`JB3)bhT5gCCRhe`DaYkgKD33hG3p#ac1 zLMKO910$f0&P=lo<#tm?No(04%&2yf)x+_}3m3&P!~ml+3gao)@Q|$-YVE^#O8Sjr z{fWUhkJ+rb#gKQ1rHn-8XGAW*libg4jlsPMcI!(BpJN=>4m@{#oZI>*^zs>Q>qHb) zJk}FIbF83&yl{Y~sMZ!paYX+pYn>Mub2t>2nSSmK?SQ|4gE2VxYg(zQHHUS|KCd+o zMVD&U6a;FFsD=TXKq9JJdjtQHQ{6f+3L$FI%~;(6GW!ebILJqpzqGc|a2M(HmZ-&& z;9`)33sn5t3N!vAa;TNHBJ|Q?t*rphoTq8uSb;7(PJe4-g|+ZF-SMsUV?OP2idXw{ zY5>Mn=jGTcVw{9|N`XK{#ui`%$RFQZ?WFDZ*7eYVOZ{NA@u|1}(S?jm4FXB^Vb$=Q zu>;z0i~iK!+KPFSjx+@no9TFWsZC#REDV&%HdR)9ncAtrZegCDIud9-*}H*5Ex zI}Ts}ohEgEvi5-)_V1spw+(yIdwv_l8?xzV>)d~*B>nXlYa0Aj6MnIF((o@*$dIAP z<@ub7-L1$mI+dLI!@8V*}ia8AXWo1!7i{AcX8j56wy44_dvg%Uga;Ul#DFv}4bzTPF4Fr6*Aj3Mk zI0UmLXG7yiHnAo{uFEG@cmRgctCOtA={k^%nr3Z);=(j*9Y~wj>DB|FN#xZ6OoK5b zA>TSIc9t_N0920m_7Udd&`@|hlWfSxxUZy@7Fs`Iotm-8S_y%aWHYta;zy>Cjf<@b z)U?W4SsOgc$xOQ}M?j}_)^{Ob%$;^vjgVWjcUWg}iR?21j3uE)7DIZfN(`MG3KxkV zo!oGjH6ESN0YyuH#Xy9*sH~F4H%$Ok_C3$+m4%lJpDnx`Q*@anp8Th_P;|Kn?R;^U z^)3&*(!o7e#BDz#ZT4ByA)Zd$XZ8q3 z0F?1(0S*KXt-?iXCOTs4MXLy>!kvrOAqXrbzg@FBaXR;!b&M9q+RC@B-C;{#b=x{l zA2yFA`w9oJ0DAjo+We7q0@G@qJhsAsyNQH9wN@#<5dj?{pBXH)L6Aix24gb)`l+=V z7cnPHH8e#k&t=eUDbhL(B)ynbOcn7+qatP!5%OzEW!u;ALIcNj7#0P^iHLNHVV}fm~N>T#=G#6HqItyEzAaRH; zie=Lb>Kc(NBd_WSQn#{n6BY}#ij)o>*RhIJ5(c82DpC_}H@S+v0>O24Ri(7(-A?fF zX!dYl4s(Too z>ib^*QGKZn+Lcouuirry)t5?O6>O_7eGO__x`C9X?DGE@T${chV}gIAu*1oGorMElqG8RX`x#5Vo5YN|rC`$ZN2w1)mSaCk z$)sdANrVNhemAt4(goe5r&{{>N67%k%eZb*NizL6i9#{?@^|Smhs?TC2yNCw+Ni;V zit8;QzcKT?Z!$M1Gxhfk5&l+SI?R$)nuWXhh|9)4WS1>qV+z^ zd}`@&D!s%Y zqBME7UTO#LPU{WQ0=}P-7W+$D${Ef%{kBgHqV4x=l&10!GUq8J+S#8Vt`TF+Gxgf-pPrku-@PmQ03y24vKik1+>sl3yQ7-($&~ zdn~yPtHZ$Ld^SQo$!23)<%^*3(8;c%D1ZSj(zA=0N_srOgd70umGmcn2q8!e)pii! zNesQ+`Ke^kBB2DYuf2Dv4W3g--R zDp#;FRF36}A8@hYPY4W{8_h(%tZ;@{!{i|)e36aCfGI+7Ls~Rq{#gP&vNKHX4t=^> zxC}%=2I*2|&#(|RRj*m+mbq0#dAB48lMYv)+mi{V}z zD<^_O`!>qh7bho>$T-=nU+BUN$){h&$>4PhN&9%&gGZ*u%WSvG`|)xVtD%SKCnQ0h z2OQXn1i3l~!uui-r%B^oUhJz9&hr5f6<`|2oMk>2%y{J3AsdtBPO$CSQsiwA=^m%Z z-{}#s^QB21t>Z?JyApn51g#>=(0Fpl7)5S^;--Sri?oVOE~&w@ZJhEZu;v5Jx&JDSUy%P~?r}uJXkw>mZvsHO4T1HBhkqfwaL|+zTK95++%Ci};0A^=D zumIa@kn?3_1}q3FCs%@^_E9;U4JTd7$&(>*hLx8;hsOL}dHGEV=*F-oV%`Z8AWOk* z1d(wu`K^Ln0qbU21=+>&O*Qw|I7RMPkk`PaH@~91M|(F^7(jYfl3DJnrIlp1_X6$U zmDlhv2%Boi5Z?Ba&uYrH;s-_S6%)wzyz*_drx6y>F*Rivnf)V0f2bvQ)N=jE(R!G) z{fMr<{1a5p?)BwN=tg`4xin0dVgoi!_t8op%TG0c)_EGqR>+iJHe`#PXsoz$f3xGU*`hyJq zH=a~%kKXasDn;J5mp_I2+pvRN5`OxhJID@h51rXTeqi7VDEUnu&LL7aH38EAE3x>&!xyj?QPO2nbijwqA1~MPeV2xfcQcmeTl3G@2T#PT$s(;M%D+RBIWGC^vJ+Sb)_fL5*+i|JbYilRt_89SlE&)=n6(+CbiVA0-RAF&r3J!#3JJ3~)X#7rsJrB2HT_Mt z=F9Z}2oM&^eL&-K7RomC;9m>nBot>CVt|K{l8fZC(GQZKAy>!0y57}xVUG*x&|{GI zI(jka*f8?*V!2+}Fkp@v_*7jj-oIxt2;xC9W{Erw6h>MquSIcfsoV{6`j^Wv3)hl? z%Ro`G$eLwxT`1JL<#G^Le2tHEV+1;YA9n(GIS-(d{1w<}?-gKGE78vw{grYffEmuMlr2f8jjWC~m0>{2_`;&V7lIicFc5h3QdI5|GQ?%%Qdyq< zb96G5tML%AFRYe%X!zvPdaR^jq~iwpMfhwN(hX_ZewTu9*hSiIl1owYm%N(URzKY= zo0x+0exD(-VJn)_k4A5kf73$s&fX<|jrDSOmwY(1SYHH_uJYyiWg1{#a^M(&7+59nmnO2F%=$7M{9HJaXvXGjTO+nnFkp#M;C}-fRL*P$cn)XhqFOI9#R^3N?yqe zyKQjH)(G(b??-Iuu=k97hzI-1JC8<4?$8a*NC?0Oz;AXR2l)L@gJ~aCx*4tI`_eHr< z#0{gjY{&NRgNS##$S3nPF~ojJmiWJ2q~8c_Jo)t!*2p!o{*wGUJe$Fv%eKcD^TIVF zab6G-*w|i{%j$N!gzYZUby{%~`RIyV98Y|4MRxGpT;xE$#!Qx80m&IgpInjK>chr| zA*%{Y+3(}NKimfS9!sa*me1&ekE6G+=7r-lzsHt02XVwG;epmwd&l-_(Mc8X=m zB?hPZl1q@NlFHN+hSLzTQZddzXB5Xt(G-jA2-5;$c33d_(~=6d8NuU=O_8)mDWw&I zO`NtUbAbEIuqx>&)>;)iF5a>#Hz7+Olax)6sK(2R3W0l{tc0+%b|)3(Ypn8eHl=dX zd514`4s2<#|3-bn<`l?vUx*h8EX>ZPjEkS>#$Av**t}uZ@)~_XfsAI2r#0+~li_}T zbpXgXo)Cv}A7hs3R3wNV%biL+E_<9yNx_NHrIbc8kB?l638T}=rS#AWU zHuVxo({c(-8sw*P$`OoZ?ea=hW?2|gLD_|(aYdyEihUK8%P@{CtE9kxNAb?Z7T3SP7%) zg04z=T^Ozg3+q{)5_av;uSzc-KJ2dDl|Pv;yF^c=W-usM^9*GkevjyfC^hi2^@b>I zdHn3sVaoT=HsZ6Cvn>DA^WjP)B93Y32uxx$CpUO!%0f=nE=%Oti;c9B_=mEI^yPf=iMC+nstU1G;vaHa-eJ}?u$;7$wh z-aqeT35}?EsxlyuY@ekFB!89?M-R_ZWDQN2hlxS>c}g4!TAV%3>~Js73=R)EI$y2z-`gAO!%tMV3d-mGm(k{;e6 zEMPDK;cgi7C^3`IU3z@CqT%q%r}rrJw9t3W2bFzHGJSeTX$WRq>#$ND%25BqN()HK z=MQ5g`4Sq(>6mf(Hc39BWJaw^#S(#b8-#taeWu1Bpa#|)QObh%KRTk+PP+{r#dhcQ z|HXqvTV(sLvUA$DA@$16`O@N;e@-=0-u zDA6O&Dhb>*ntxXLl^JtNomW1EJN?)5XzeC?_`I^5FLNtQXe=}XU@BN(hp?!$7n+S? z2AnEmgsMLN^8VgdII;?>k_{J?r_g^^T*B--NWZwO%+R2Gdri5^QViU=p|mxuNKNBe zSVRQ0zprlkx~9)fblY-r;3mFeH!QPx8u+jB=59B~8Y z2wx&-h{pjy3*8{!-c_aoEvvn!G(gelo^lMWu-sP^!+}(zS(t)A5#evr`o2;JZ=8Q0 zByJZu%g%06^8=-!4wlH@pJL$@$|=4r4;{~x;+PfHpD8o>au<;36)Gx=fvJe7hd3<3 z3#k~k$H+~CJIvV@h^vsuSVeZ~uXLWIz61rEKq|jf>c*Z+g`k8?O&EE^!=XMNy<)CID9o71!s%2a+Y(l5 zDUn4Ag*A= zNZW2M4aN_at&0~tY_l$Q$o+GuVTZIgZ|e~R5$;8Ztz95Dp0p`$>jU@MrQ){aKqyLl zyzNIm_);p6vI#KR8{TXuA&mV0w~G4x%?p+vXs9V`*C)8DX})rn5!cCXQr_ zwmABo)z*voD=$g5Em&)_Wm|dQ9)h9Rsg~t$L%vXQ&tbD82q492E9)GoRXeb1;iHZ*2RGPiNkwXy%0s^M-aba@`Z{9uE3>>7RD&W7NK-So>&HlXew(4V^4 z;F0ZW%!S(AR!}MG6=TT!X@L2LFR=2=wiwbs z(-zN8o#b++?FZi`_H6O`Jp62yu^^yWFi+baj<|=}s>EhY1}y(WezZ8(=Ho}5huIVj zxiZ@JF@2P6d#VBJ@tzoB!>%9n`Y7ALV9?>txi$-om*aD7PZ(Lwo`SdTC(WnYI-uAw z)mAYsH!UqpSk7{~AooBT5dXeo4FsgbJewJ{YUJ4nUU4SR2BG38QK#EpLV0xjiFvb+ zWdCU!9J?kd z_R{3#M%%~i-K$pm-d$^x?IIUGEe*13Fc`8h14pFh7TfeNtZJ}9{J)epsXe*6#RmH{ zXYWGiZneQ&GoOC5({_q^$1DA9OU2au`fr;n5L0v1LG&vu-fIro0y#K3Hy=g^&m&(R zv3&vH)$${@D)5RuK4MegxJWx{>yPc;>CEFcxW7&#H=}K*9_5e=w&rY~kSmvL6*>Kh z1W2?esQC((1blIWuHxcsy5*`38>F&e5ZhN8B=0MDYWtoABGq|rYs<`Bi(lB%!S1fT zuuXxdXwXYrx)y$s^>1yfd3uGjXS0}=pEdRpLEH;E)L>t&2QIQkar;v}w}n=Sv%_Gt znKq2K=jga6q#(tfhs*tqcIde4>D)AXV?D|@q8%WFO|*g44smrO&6eyIJ@*$~<+O(d zqxsv*+bUwwHly^rW#pl?Tisrm4M! zSY&dW+S|UIt(DLE+G|1f%k66~#T})a`r5YxZ%H!;+Diq)%$J{ScOvoG`D}YiiCqqO z?qQ4Mj11n9X0(A89;J~Z?AeBd6w3HWJeju49!b9$V_(JaBnji}9l=yH z$Jv{M(O({CzYXc~AhDOmgnLHptzmf}Ure-Tpg1?tevW%V)=#qcz=)R3wLj)z98;#E z=kcgL&;AQeXXe?rvpL&wy1fd-<^|L3XONPR4w+*g3?@P&=Gi}EJ>PbTy(IYE&?WY% zQIn&Lr5FW6=ny04AwU+qqm`E0$1&D$WVs#Sj2mRoDtjC5I=#8dUWKWw)^+yp9N4lr zipij{h5HrzPNMuLfc>zHkj#?74tyEq$zSX2BZ`9;r!q4~D!XYgrU)-dtM&F~SV*ha z+f~4E@2$7*MmPaoy9FN#wwb;SpE8dAy3Jl5v5aKN4*O*E{wF)_En!p6-)SGL(O%~O za;>n4)js@Y`DUAqfD_S1Lm>8X>Gm^VED8-Jq!booOkzkp7gLS6Ul zn;7`+@qH|YS+vvxdqeiSzdS_qXVMi9?d4fMrTdRq^J(^D`&QtFY2&B%%dA$}=l1%c zGg-UgFon$XC(U_o2mIwa+4{m>4a+?6rM&`(K=qgQQSl%w$D$mV@I$FH+7ZKK-#Rgl zn_NEi#5(%uSZ2Z%Nsbh5Iysu;@Mw>RriRk6WCxh{N}848Xb)Twd1iF14~BFFI8po5 zP_jPN(F0e@ra1;-HT;$40HX6a2`%O5j$%+L$7d)`mvX$~Ldo&cjwBRMN;|M8HrZuz zOofA`o!L?LQg&n_btk>#aI}hmsiHJEthQ|Z3ij^)Ae8{)9{ z4HJ_;^J#o+zH5BDyyeo|MvjA8%^5k3L^N@fr}I8{goS`Yw))1AOpdj7RP!GjNx5$v zCjW8c4=%-#JKs1;aQ$a%+Bo$7pJC27{0#ad0Jh=~{ESw}rAh4^b9LM#vZJ%3h2c`E zBG!w%NnIQf%qa6eZcI4rM@PDjiIqCCX|N6nrhaq;{qH*z3SE6YFm*?268*NT!;Sc6 zI{sHj?LgRY3VJy%hnM!T`=u^Z}+na-@N z{(TW)n`S#DVtPU*PD?g3hll#LQViEsGr4*cX_rT817yOS&(2v;qe? zwcL@U0c!9$#pz@6#VQBO!ZBf$!-ktXS2++=J!$0zhgS!fOSLVI(OM{A$96a-!81j> z?QvvlK##Zs4n!LNNyQ_Mp8x=yoqN=wfnj>`35?Tmdg_E@VGu~`kOD`|;A!z}1qKLt z0Wd?ycbHmY^IlU_1a;(5~ zeSFJN9+H^-w&U|qG;8p4M{R(jR~&H8WWJkUwa$=0kobNE=K&bZXrplFRrYW>!8sN* zdB5O12=f}57VnJqO=rMxyk{_`faWpv)W4wj<1Q*)jd#{WAtyMKQPlGn?Gv0PoQ+Iy z_N&6yM;Mzbees(1OO3S|n$btc@uEr@dOS);D=Yc_5(K6XN9eNBI9=$wn7QJV6Z6Bf+ZG^wexsV;6I z%Ylv!aI`FcMu1QWR0>dhPFP5?n&Yz<()rDuOIb&L^_3GCpYb%KmGg!MOs?~{&ZjY~ z14_U`0V5|mkf}W?AV(8v&+nW+g`$`4b#=P%foa{GV|DnzRlhm40zPd0U}qC;#8eX_ zRBqw2iEWJ;1Yc{(EN3Y$g(cb#_Ri4wH--uJ-hY3z4rv?5leWX1S?GmF!<|vV`V%IW zE`n6OYl@>L;)G^4o+eIk`gG$-6P?Zdx^WZ}rb3x+%y&!U-|NOvOgHA=>&8)R<57eE zl**HxZ<%f^&37{0c<6lR&fp~Wz2V*qK5GcTp}wz%%>-Y~HWKf$!udI-;Eol}hdgwX zHLIM4kPjXSMA!Nsfhh%#0PadIZgy6OMs3>Sd{zwMbIFIDm4ukV5*h_6#sIu%H;<(2 zSoD9AZkL>SfJ#JOc6QLeWoelokc`XDA@CuDUvX}L9Jcq0GX=K&J6D{)0K*WEZ(%zW z`;W%MFf^Y2cGbB-18;8nO=nAJRby^Cdud?*FMby--$>ivb(Uly1KIbSfjlPSxChQe z9aN8HPo2mLI**uNIB#)tY2-_%TMJTC>#g$?>>X+EoEL*32I+!bqu7KSALh!@V|rSm zT*>fV*N$SBbLi<<7u28}+CJV@jK^a=5?yszqSdXnTw6o%*pNmpAeygJT@#mA4{54a zb5{jc4ruKfz@)3dHm+y^-JATAYpfpT$>rT$zaas-+{1M}%y5-;$18^Gzd}8(*5jRP$OM&lwTdwONH<+%P>}t*HVOmeYMl&gSuCI~K zpY)mLn&^V79g>QVVc;+vG7pl|pdMVoC^W(-GyYr)#h;_$2rvr9%&s@x)ds(?Xu9iT z6mO@yMErvJPge`JM?l65*QX)e1bS?t3vng=$1(Z)&g(UipX#34jCZ@%2oGMmLNn?bqY$$CI_| zUG-4}ZEyk1LF;aCEoDFd<}cUxI=th%ZLW(zPS@V<8WfT;IiX0LnEL)`rdV`sHobGe z)h7s{Kb=mxWd3dhxJs!Bgv98l~PhHzfL!lp#=x)z=-(92o zQ@B*Brn=L88Nyq)!LFYa2M0ou-&4_Dfl2g1mE9LLrN>$zU@|i$ zJAhsl%5242ZytxB&ca|*;UOtj%}rqMoL$XbPKVIJf?DoGXtZx@xfl4dotMDiOdw0^ zy4yqTNvh{=#J!?F)^kJCI6`*UcVCZqBGwE8l9;)4u5lm`yXe*i?om9*!RHO#l$$_{ zed=z;`@t_A8oS+?GgBM8CxpFa8{4Pz%h9>mPqXG{Zg=E3i_Zy!UMTO2%Epf3bl7L^ zNgU8~=BDmu!a&H%EQSwW6E+ltj%ezBrGpi7SPOS$6o0pHv*~uXgG zRaljlZa_E4!j|q>|HU|Zp{0AF7Vg>+-?&pzEcwQrfUe&AjXNz6r}x{rYj7v2+TNYV z6~nN=zunB|Z^0mu%N^V!*u~%vF4F!T-E+b*f+Anr8wEuMJeJih-_z~Fdpq@XXY)>W zw?1+o;se+|wd}Mi17rVlT7!{XjxhmW1uFM;kK;mbvCTbTguBfluw&Zoa;52`KJHI+ zEzTpicvYj`-*MV>o<-%sQt!`GiC}kJfe>1FvGAw=IraVYKc~K*4q!j+dkL8`&>e%8 zuN>$WxS$0VTn!QC(tU&6;d)#?o8|t6v-v(Zov+PSiEsY;ex&{fr}z=3F8Mp7Z?=0H zg2mECxEBDhuz!TRBI%vu4kD2`Zj~K{lFxG7EV*Bw9Jhp=A@g(G_j%2`Py?}#ahIf< zM!Vq?pGqf;bFcG_%D)ES+wtzL*hq?6Cb@g+BBop5eM628FW&(gRxx2ZU6JQ*r{^Bh zl-cfgEJbq4T(_5vBGN>@A6nXFt~-V~M+UETSJV907@yeSMp)W;x@apV`9B{Y{O^zd z=hXM{g{QR34tI+n0Ce~4cW2-opB`}E=FyDGhyS}7B>S*?6r%=O7H|Z32Jf3ojw9}d zn4A5MxM_Id+<_C&ck830?mBpB&QbSAKs(aoXWi8?N+jVj*2H;I<+5*bH^1!e6a$bZX&pr-&5B&4#*Y3J6h8R{@ib&@wa^!{E2ruH37w*znJP9w|?NAJS>AsGOonN_I zg);c_@1ehx#=ymH^?LcwXu8)Li|khgj~HWzh|2F339)~&$IH1Vzb4e0pzckU&D za3|Ic^myPD>=WoQlD`8zA!Kf#ClwcV2YNENL8M`j#}d84f*HLOf;+JT* zPdw&e02C%R^NiP(n3P!5TcfN+M-ynRuRIWfcGK>?JTXBcjs z9_?uW6Rl;8rwj{{X+73c6{pk3dP3RhqH!KCiU;F7P5gySej?~<-zAyuBA%wqcWIp9 z5zE{F`2x{lNsr;y7uYE#l+hRjrXCDy2Xhv(%a9#?8yztyEY4}437%4X!XDX2XTC?* zU|Vz8g>dgNl5!;iX|!RIXSNQ0)wa_-5~Pq(C=AP!AVq;;XaJhtIStLbMv|v{O!{0I z%wQ6!JKe*!QEWfm(-UQ0Zu!5P0;>UqTRH#qWjni_-4ZI^p0Ck{*kUt9w3B(vQ3;aLIRoWS-F zr!&aL<(@(4&{``z-!XSl{z}g{j1R4`#?z0B9GvvwLnRUFv51^l>rqfazs}PD>89vs zn>_2;1I4#_7O`^kPLHJH2GP5FJ*o~ZD0SFVIe92+!95sTK5W5l9Wvgb4MRxZ!=A0M z=GQ#p`HZEln|Q)A2XCr=(v!&J4XsXNs$`K#r#)tF7};_fvm>AEd+v!N(it?m9~pTD zGc2DJKkMmWXED$3ctN_}@RTHfTtv5LlH7})>G*{zmpq^H zI30P#GYzNitDeewyrJ7|Pkv$A9(a0dG&^2!P@_C) z^vq+d2GlJ76y*pq{we51Hre~s(*e(wd*-=?d!?V_<9zLBjYZQVY0DQFH2<b)eIqE zT{w{BDE}&^wql7EjS=cg_-zx4tDqZq$?`~b3OuikqtsC-u12YkVE;T-LfsXViwwB) zI8IMm$EY>Q{b=hCQSHnBYb{_C<`gy3uu3Ns5h6MwMP0yQlq;sHFiZC%zop^XfAuQqS5p1u16nl| zJv*p=Xc0lknueXBIb<}D)?B{W%{n1+Kh|1#O|=2 zK)oWn1E|9f71Zyss1H<7%W+ppNJVviiAzaEM0I_!qNAJS?}}=t;#ZUKw0Fj`2=PnDbxa-d}n~lB%mQ?F;X~X8X^bqUV`t`rj}4AFE>T-v5u^>qn+kS0`}=qoSRAdevK9MghsYf;a6KqPJOHH;U3f3->Fj=SpK7SYP=rG zN$W1^ydY>+p}%9U4f+k4!U_2H{hfZW%=*8+|NEmEB&E9= zOT69HgyKtVkQ2)?1C(zM)d1|F+PS;h7?Qx|?&@9$YB@dBnm9YwL%oo+=KU)+vlLZ& z%qgLbp%E+A0XGpZTIlPZn9hbh?6%MFyq9$DrIt!QkZdrNLp`QdBIHz9zzo39XTbkh zuJy&e)QSjFy3-3g`|Ts9-fC|YGkdEoK&ALTpj`XO$iAwVob01g|M4JhAC2v&eyqV` z-)A8I*a0#nL){a9D4Au31FVaodzsnOT)oS&-7 zpaY?KYI}I0=x@{1&w&sj`=_hF0Vq=IPkaZyXT}V53xu2>W~$$!*gI2Q#lN%B!L!sp z9FP}*bJQ@Nl$)ovMo7V=d1~R-hZRBmKHT+ilOyxh-@{(BMlq8;`ZSk( zu|UlNl{~&!6-ju$Iu8_Wbv`Is7WFJt;c@6sEX&k1^1~u^B5qw+rbdyN#h8p4>=72x zGj)ltcKlKmIJ68_dnK--;vNvz{N?I7%Wa#ss^96ygGe(#QJ^r-4l?3PGp>hN(*ggQ zA{pTF6>2G9=}xXtOF$wZ_g1QJ0HeG^)vI7;M^>rb@B_70tErLfm2elcSFqQC#XqGz zS7Vx^-qtnhW01wwYt^OPNYZhgn#jL%kfH0;G9c5N*Qw1RlP9lN*?t~BuE!ueCzIE! z7r^y;Zvf#KO-5{2ZKUBgHIVM!pf1N=o22g+^#zKgJ*tCzy;Th%pYKtNlkQv9DrC+c zHJohUszy@NHWgk=811&J^R-}!C3mYYNaQv(lGyjCgK>lIQDd10_`rVk3$Re@0k-rf z&@Bg5n-*rghey?=*zK0xjw2gRs8vzt-3eA_5*>d^)oanvspr%I=z_oQV6c!uFPgMI z4<466lJ6pMUha9d4VO3Wf|?;*VT5ESY>1uHICO0W8FNAX5%s3s!|=rws2{-v(5e7E zF^#M%P-pq;ulk^Vh0Fic-+0+qzw#y2pH3!TQb+z@>$l{~@?`QQwJBM51^xZMr2gY( zkh~{qqCfH9#+&~y6=xIgv;R}YIseBuYUUPZ9fX5I9l@qAy7nu7hxUT{oqHFZd4qN4 zfe$*zaj&RzzJ!COGkrI&4qQoBv=db@pHIsU8FxdvPKR>ZQ zi`bt@?9Xxhfp~ZOjhc+Y@K&uGwbsryH?6^v^nL>~FQ^3eZfo~ey{QSlZfEXnjc}c| zfO|lLc!6iSbUXhxnd~v7$I`0$bQo9>X&#t<7&O@vln&!}2ALC*UJnB39 zbSD@3Ecv~s@)`L)G~HEcv;DtY|04OnukH9B>b;@ILenATz9nVC(+5Kq{wq8kY+*3n zQ!HJ_vT`00(*Iz)d3_R_9?4ANZQ{}w1cPe}CDYS2WVbmzl73-I2h8O$-D6IN75oW( zXHCDT$N5EPdS#aS7Pip6+(vrOou15;h4A$BJCFiir>C!E%1S}S^k}lHLVB$K*g^~y z(`S8fy?Eej_&%7s5j8t7jif>4bYKG~lD1XTQ|)~|(vv@g4@urv1`f8N*ruPI@UG7bvfa2q7 z>62p*gn>STfdi}w!6pE>5~#3Y&_XrU(}&;-hgVN$fpANzr&~eq&QwnyssRA%`&#L1 z0jerlJ6+E-Lu;M%KiGaMv+JhUxoOK+0EHnj15D5#>BA&oZh2uwsCNADQYwtjk3bl&><>8W8? zt#FS;2(wG$&lPeDcdYDDCs5TVBQQ7d4Z(1{1^IW?VVB<`Ac7Kn!QMF#H_j|;N~8Gcb023Qaa;{c6=`3 z0wvmN1c{(&JxSA;TURxh61WG^VT$nCy9pCYb9xd7+iiBXqOI~s^ukX`4;tKye2fK( zIlV{}it7F^iK4rE5hZ5d2@PMm1z%YL!>7Xp(w4o6f6Tsd(P-V6&j7QlQC z$hoQi5*Y|?GF~#d$$yEoGa0dDD`QtFak03tg4dj3H`s`^uwj7Fm->=$`?4_l`E=4T zAq?wt$l;Z@$C4x8%z-)yq`&ng4Ga!)EPz>606X@xR7|=Bu&l1mDy!wd_-0m7l+?8_ z%K^D4Huobh8&o|On0ynN{BI%~FgX^OEE8s>6(-#RQ&z`dD&#*FJSBB3{FpHB0R~l* z_aC!rE?KkXSh8gq*@Esmyj4SczHH{4@-k@~&s-;l;ai)z7~%g5R>R+&Q-cj6vBxJk z*VEH4lQ%&y?G-ay)&Nw;`>&8BqtN*=CbKy)Mu9ls1uI~d1u(q|V8>TU5-5#*wF;%x zh&Lz|VUs~`;htz;Nql9`nhoN!gn>%aS*} zO5UMEIOAUo@nPJw=tZ?GJlFE&IcX^AVJJ>fO$%U6qlUg7N+RIdVCPU0WB&o}JEx#4 zxjmHhfogPm!=(B48>AysEZ-<7)*H}G-S(D+nf`n?891wL<9Qh$8IV>4orw7~*2YRNiZXg$mlHwj(z0ZL$kN&vCqrJpYVwJpaCNeAJgTo-kvM0G^!C00h zTRP8n`hBv<#EQ9uUMo3lCqx<9iu_G79)CuL!?gR*(%SPaFgYg7(ho@+15cI( zCf$I+X-8Hcw8lp|`38m=DuO3^Lud}8fFFHCo`HIJv>Xsl9s1Wt)^6644R=d}VZbCH z$6!o;1pccIo&R4l(O|8}&qB!0Af!wt%tzF~$vhixXS21aO_r$3lS!(9iTSeES%yb& zZ=JZ#_=U1dyo_l>kp;}-1IBK?G-guy7O)%xjBcJ{*6{r)q&awWP1VJhKwqB9M{aX1 zQHQmtr#V>v*LVhWWA?PSNjqwVHuFoLOsFkO*$zzHM!6&z;Ge{kihGmFQ!iNaFX|VB6e6&@*`IZhW zhj(D^X>4lc<+aGt5!e8|?A+9!Ng4_o0(H<#9N>$|JyCQPZK!>GSzl9s~jT73n$3p5}XZl`nS zG9b2?!j8~X^R`{!w}50CAXu*i2=9#o+{G4ojHK3KV&^sCgMGHaEm!LSCd{+HQ zEat*k+kj&vl!Bg`O`^J4sq=P&qHB0u!H`ZS!^5TH%Z>%4kdqp}6$ZN7=U5P3M*DwG zrZzC7L@b;W9h)X=TJgCd01ZEN&Ea~+N*CXf@u`MG^43~Cuv#r`&8Wo9BTsmOClL;6r&R|niNas zG7ItIiU`H`0w%5k3ve#SwZe)k(~?}?QpbgY@FGQo!uhL-tF)y_xR?Rc&3Pn_wqHOJ z4CV?fFu4Xo6ptfxhTvA|N$(qs$0WSuz_kK>AFH$R)W3N63|445V? zG#2w&+zQN4}Urn4v?N$;YhFH|5rTT5AEjAPMST9}0`Y{B?{JDZPumjc*pYrXtq&WwFp;@W6BhHl z;$qUJm!ay-Om0e>dF6pU0)mgxnX)@W+gOEPYymH{fVZI?ft+4hjM0sbI@bc5&0uN# z5{uo-v?P}|Wyvor!G3_AySS;zSRqf&vF0wYBkYSx)*GdQslML|)o}04vHc25c?&Jc1uU8K$ndh(8^Nxyvs8=)IGf|zyMnYG zr8k;#Z2Rf`O)1;<E@01xZ z=E{kECF}I~vz-$Q2}|`9@~Y-m_sB{TW(+B_H5%HWi__rt&%TP(aR`sk<4ZXOhjnS zSa;zy@M0NaH+f4OXzkyoKltz=t3GWkX%YDHfs$E3iLT*{NV(3^d25qddx z`ap#jp_Fe4@*)iTn$$|Dy3}b3oh^07vJK%#cyc41VdTob<|PPROGNzYw3b9gY7FaL zzr))W=vbr)FcE8rt0C4nSu63;>;i1_8Rh0%fe?#}{;`&X{@ZAR7MM&1^S`nwuVbPq zt)qiL?|J2dE2ca*nf~6SFXocE<^VyH2%r6AbBS=NEz7k?tyn|OrB=w0YZmW(E-L;o z4PHmygAk^!(+bKaVuRL`u)1b*D947LA$7i?_XV3=-du;ZI9*u^EieTfhSv-*#hAQW zV6sg-Yu95rD^vYrJ$X)u$-AJlTX>vi^7rI5y8jz2`Q*_%-*Aq3eBF(h zS?GBSu>+^)E#NzF9H#kE5^licT41s{4ET+p%Qq6)yA%_^T&nA6_)-kV;>ZK>Y&O0h zX%s#S%V&V(m5}bo1dL&8dkFPTo-q>F2dII*15~VP8CkRV3RmhTo^{-&|53_NT`89$ z4N8gOXHuBcs+9CkEd?Xbq%dd(Q&-J+Qg^;FefDXUY}rcZU0b%|qtL8;%P5pB>KQPc zNv>qC6_CKV`poR;CWftV=_2FnTU-eeH)BazR}{7g%W$#DmbM6cW-}2R=*d`MHIlKY z>TN69IGiSJ;pOhSg*V&D_~kon&C${ewDdCk8m+Z8pAG~|q6P_^-1d_2S>h=1Rw!c< zYolHepLu?nh0zkenv02`zH}Sl_GlP*o6F}a!9{UkE6Fq316%0U#i}iIf3}Tun_9u< zo%lM&;hY%|+Q8Z`m3U>xriWO<`+sqc)jR`dz5&8Hzu;|JY$;wR%a`JrISO&%ycfPx z4RO*bpOH{H;9F9|s57kau^hZGWeh1ZAW?M5w-{XVrVvYSeT&bO?$cJ=c@6d0PNZbL zN=vZEpwla2dkozC>FpuZ+a7RDJkNRrSutW&|3~`+b?r|=S~U$x0R2KGbsPG$0q+tN zTX@u|Y739ER7-!wzLL_D`Oe1w+T<(?NO~YEwcavn(5M1Z)2PR+U=vq5-$2rvhdEp* zvxu;SFPQ30!=ElIAfjVY82sw+VZpru(!~@#Ivt(QGQM}!^EiFxp-tH?A-3BrTvt={vb9@NDQof~mR_+NgJ@ zY`;@4K?%o?yixSQPVy}BcG%^cw@KX)xSGL`G&B?o7-px2Jy`=wKHpyD9BkfYEM5n= zv#Ogg>3oHm!vyZ;`wJa+b4onw&E2H8kV*IKCToo@CLL<2^I2AdiHU=j>_ZoJcMtEv z;`W*-p4&^hVBKwwC2G)Nd{vo8_i0gF9C!AT4u&L(Ec|&4{sQZm1<*NYJhw|d6LQGlCm;~V((ymbunSr+o?oJHXAmh0~WX1RVkNSX?H3lEucA_&0hbTdy^)<_{9{%L`#{HFkAF_X*~3^UJkYNjCU(`_ zd9=ckn~i{gu)|TkBKUyEpT2dJv@n#a%p#qVT81(d9wqM@f+@rIFrdr_JS7nfrtdM* z&`4&V>FCMYXFBtaVINi(EBg{hPu9M~xoyqOKDN=5wU2FJPT@@I1jg0Fj+04{=r703 z5`>%};|$bg_#8^lTf#qw`tk&6Y$O+1l07_GNBu!04qw7y)@WBSKD~y?V5cnXIDh%k zN%TjhblXYN$PiJcWv*7vXGZr<8XqoVCD4+b&8KoHr?Azumi9bFx*AAIEo&Rad>vxr zDSQ_UbveZgck>iJF!-HTD%a5T_v^HsngG|lS>X7=4wGV|3+%jj2mQPH9oU+C9#;=G@_KG)nbR4 zZSV({7@wGgaT+F=)9J8MG7@K>PnKfOJcHgXB}Z_)=DVBZtALZZX~}s)?f*N02aXJt z-ogfJHNHmRO3{!W_yeDhWT@%42^`5}sE$7ge5s$JWA2h})p;EQ!SUv}v;7$L+{O1O zPt~Nq*a!C+YU(|*86my)H$Ic!NPoCbwg^Y*j0YHvEmMy_AR##Esun*aU*fPZ9s8KX zId{ckQYkp^GQX|12psTR{1_X69(wdKNpSA5CWbn9(|;ZlX{yeG{vCKQ%j#s9_#2RT z-wGVgb9OEAAYQ|@*Iig)3DaIZ4rj49w$Q<-aRea5=mtB_1SPs~&W?|^m}+YunXCCv z$Z*`$OQR~Fnnkoj1!)vj9EZCt!A6n8xxa<>n&a=>M?b6}t*WPU_lvPC-2so0-&K%K zo&Skteq?xDtn;Dy;}eIo-2BB9(fg~LGs8r)&Eb4N+f|}T?xn9(5|2>1ppMw8>3uJ3 z8z)BX9DPmakF~Y8NatDao9KM9;5`vrw+j}Fz1gvW`~`oCE>;A10M?7ZUs(~<#)6o^ z>UN!79L4IkmP5RPpZ6W&1Lg$uj{xxze%`1iUKel!&&eP$*p9Y$K15uDwl_6Yd?PRb zPU5QJEB>1i;!+%Ynps;+hDXNjwZ%7Bh9rTD3 zZ-82>crhN!tG(jIES#0T5-;Ksln3f7^;t;|!B?dC)Vn~LZPwP96?fJu`P~N3~em-!ts-Bjm2wz2`n%5!-3SoCHrm8f8$gt ze`7ddtbU>e&Bd3|zlOIEahCcty`Kb3C`z(8BQQS+=N1B-)99vTafr{ac+5csr%Kzm z6ys{C>>d^F)*{vGjYg$!wiHK%Z%RTeZi2Acv8)QqkVmh!6vqgav{#DQ6_vCwMI3}* z4^zZ9aEN9=EAbOVUTG!PYrYXzl0X^Q9XCa`u^{zLlFLtXL>++h9s$gqOtcqga%*v9 z)Kg}{7*E^Srhg(k6yop9h^HG{i*?{xxUjX@1SIaZ7M~4X3oq*~X0kU>cdFP1=Nl)a zia40BE=(1Rnb**_+lnthw7c7iAHhqJOvEF0`|-onE{mVy%=K&;safg;S;U#1O!bZ; z#tDAM4-3@OPOM+kjW@JZha2=+%^_cx_Tm$G*z42*8ir-^4&si~1xJ~WmjnLpsmyHR z$f(b6c8zUkE=ikv1xo?MBDy0@`~hg@bcD>-&_6qh?;;r5Nqor8db-6e)iV-AKPTD{ z^V03SLhE)Gm&azNK=a$V!r;Ve46I9-6A|#g28D2bO@HbveiAw}1BA%kgZQCG1hyJ_jSXT=5qAE#hwFpY+F6O-U~ zpj|g)xT}uuCccLDNQ=6QFT!D3LJx6%2)xs6?JIVRgtw8$qeVZsN2itJ#3HoCqVZyF zI3v71UW^rL7pJh}Ue%cUCH!BEkB9u6#cI^MVoHqWmhxf>&YZz5IN*mPJN0lL2{Au2Q8?J;Vf@x2=nXre z8of^( z3+IJ&#(wcWNdEVLINA=+E;kN|!~HPedhvVMzTfFP-^09Krmq|ox1$Gj9uwW{d|RL6 zVxE`36;a@?@+A0cbV~H|6RxYx&WPcGI0V)Hg7|jL;xLFDtGCdrK=*Q-j4Y$OFF;?4 z>8%UmSMULmc~MM6u(F>Y?UB-W>=eik=^(aD!Y>IYHQzJm65oesSs zj)X6<<5y4$$nyHHVqbPZuH7}X=wH-v*Tji_0e|71Z8+V#T?$jVM4fq4%!C6>>bxaR zf-8#8ZizkX+)03)!O2BdefXpRt;gona;f)jiNC?`9X)pkb^m}i`%`=#6Y7b7qSu%~ z8<&aoaFqYKGEo%n(P?Gk->}~k?~1PkAo27=^lpFChY!UrNNiUQ({o#Wqg*^8Xm$CJ z)n&>f$m&0j#I!IR_Fh;`s>M$Ct`Cu@ea;bj#VJMF=NzQ&Fews)k$u&rDElK1O{gg~ zrQ1TKRrYB|Xm~i%X3=qBQWN`5cnq&4Mbi8*sf69_!Qjsv(6Vo1*?+TdI84WfNfCa6 z`xM<>Luzl|yq}Yy;ZEr!>IPa=`Vx%Aa1-Q~kkQO+ETk4+r(lT~I^1wz? zZ~WZUNUFzNke_KRbq)Cn-e#Hi0J!a=^_oZ-_9bC-=fUPK^>7nuK~VJWgD}^1+)ozQ zb(ihuubE5gx}SQ~cUw!xg=8260Uji6P6^hK--V(7^j?jj|KxXK(6Mc#fBk>vQLnd= zaPD}EI)O;I^|_FyDiXhZG?dvR`iUa(%SW|ew-jkY*wfHN2kes@&L&}Y-)bjq!!)9P zdsJy~ zw~8~2x6h2X8Hsx8EF*4*nmJH<*AIu?pA3>x5u^;3-hs7PHCSRj{oTP*Evy9i50UaP zNZ2++Y72i1zYmez{`I#QIJUAk)>||8i%=N)*0Qr7xvxAx(cU@Sio_E*ft?8*e++XLF=8 z0m5cAX07yV6tF+pBf*)#X0`TyX@VWx&ps$!5L7zikkkP7aP}c7%U^4PzrcYBt$Pe@ z0&XCWNm8Kjg_`k$^an1QSKm4(;kfN$`p*Sa!(tk9QHrh0oTl2@EkCxzX3iCY3!X91 z1GmLu_+r}YqLdE@vBJ+%N9LB-eNEEb^1}Z;u3>2FG~Dvqn15BI4rJJv7wvE@)emi{ zEsU%lT~m){&biHKFD~48<=<;03K2<^$2 zLCzWT9N~@jBBdd>q$Vg_n_E&t1g~mAI*(M>-9q~SLI2xQoIksvp(e(8DeTPg4YlQ8 zQWCpsbKqlXEh@#+5yi`G}>CU9N2p4z{^VriVLs;i7|N zha5-$?T~**BpRpvP3H|i+Ra-$&Fx{z-22If0m?JXz6i^=uga&^1^wK({* zr$U2-Xf?dAynv0w*Y=Z}1J@7z1b%Fn@G(GmZZuhJ2dy45SDE$7MS)dutB2YxhUJ^-Vr{Dk87I<+`kegT)vY$jE- zFrRQObbSRaRQoKG=Lylr@$rN2;Ci(NRI*&&YsV-jXQkW+a_GNWPNcO~$^u1j zw5OCEatsvvxgGLpq56|h^nMQX=lBOjYr0ErY8RfUFYS@nv1>%0dSpj6jBf0O^0R8c zLb;1yDEtfw&NZ0SxC5S5=`nc?yN9mB3HhU7_3Sx$n}hB=2iB+mEI-k@fCpfmreA_d zS$j!-qVBycHwvI%Uk1#tS9O?j26O3}oS+6=mvOV*9SVerYTujkT>pqG?7CAng0JQ- zLtDZ<)y^yG!#i>tLG4y1zZpQ2%YZEZfsX7ShHS$_H2E_R(Joc{Be{T?&7F_s%LwV> zr}Az5%&d@8?a?I_ZF~iqU(tpM^jlT=Gq9E62i6A547KSTN)RLOY8NcZKOI7lvU()jB zMe6zfX8G1fDRJuQD21{MwnxP%NpKHGW0V&I)rxvbf#2F|E_m%KqR@zFb$cV_qkt-E zk(Q*afa9T(B&Dw~Uu~PLG-owGI7NwK)^}1Xr5IzpKCPAI`1Mz7Wl`wW*0?RC3!dkk zS5=G|^O;|v?jjiYO)U|XlL7d-DNVr*;%Zz+<)+}5;RmlWuKH2%t>JPjbCJB+tt4Yg zU*cApR9o1T&4SOWH99LVF^WUGC}%XSzmMXvuIu=oDw4?BqeYMZMBh zIpv5hQ>%b_R1T_s^PE!KPA@&LOcZXY{ayfD=rB6=REF6xuUpew=}8Yhuf)*1y_MhT z!#>JrU>x$2azLP$`yjerKLrlb>xrg5GudrK`XAe-m zf&`lmR2)LJSqBA|!+n9ac}*GCBk!=_^2heNyUc@FY@cf{ZY|ys;-0ma#p9|J{^E_t z2zmM*7B6^T+1P||TZqbhx*^bGRV4fV@UlzLtxfwds7 zkvKSAd6{{7i~Cf;u=Ev1i#MwmD`f%Lu~@J|c@1j#_X_1=lfougMG187 zY6**g1rs*E%45^#KBE)EW?U|{Zj~~^p6;SGS1V~krP_P7(jQA6 zE;a9KWw^jzB6F45>=r5jcA?kTDb=wscz>PpLO`}qF96Gw-Pc3Bk5$ilCE9M!aH$u* zQGx`#&}$o&tt?`3p7NWZLw}sFbQiL5!#1!#R#P`am!NXXwxD6M=&j0+n2N02rhJDx zhX#DBlpwOhcIBdL={~{vI;_kfJpWsw@+Z zs{g3?kP^67f2ZUFNxvP+I0T1xpgG*2ZFVZN$uwMt%G@u`E^EymC)_VS!C2bnPDcbD z7V(rv{QYNZHy##Ifen0RJ+t#R=QI~a(6BMfccCu7--WtV|Jj2A(2_l96~{b^w}1MW z5kh_be7?1Bede5R&FYi>u}`^$`%RS%e$nZts=^%8U=|-%PHAL6_L3cW1Z3wOQChG& z_Q1#tkfFPeBJ%1{5ME!uDcesc1~BHD^fxPb^K}Nt`MEGunLi~1sajpe$b8Q zY=-RBvoN|DXJK>~{iyurN7H{qFw~eSAU=0 zVe5zPId9u+NAdjemd%#JHW}&F-n7}y;K?0tv)!GD zxY2l8*=#4iy_|NTMo_a%o2^AdKU)yp=S*uXbWv|Q(-w!d-7wf@t33o$F#H8RZ?jeW zOM9&J!ezykmC>VYwm%V$1@Suw zPvG}$giYQ<0T6Zuj*m|yoPW;!m9}1 zM&W)#_$k5?gxx1V7{!%SD{p|nWd;DiO9)#*0zV^M3xJCVw~e#eE+E`K)@D18@N2*o zBfN?5972EO{|Vv0heL`8?*Z;K!cK@ULUpMbRhjO!o@&v2;s+I>>&FM!Uqt3jcVSHu*ds0+dhOJ zBJ?0UkAmz)cmVnLAe;`uyAk@0u-SG^WiKenPK3L`=?;Wrfbctn^#D+Sa1t0)5yk-F zc7)sT`&)z?@p~J>i6F2Q;SK!Wf-sVac5`Lr>mYa;VFjx462dPK{*3SXK1TP>gfMT9Qco4r!5cUVh(Fn&N<4*|ZBI9NdS_%RJRI3kk$c``>O6`a6 z7<9;iZ~;PpgbqlG{bhFbvwZ}>|KcfX;Ai{tq)qkIOIscy1kpjsX;TrDAm|Y^1C0V& z?~lh1kASCQrp@*Q&m%nLcpl)ngQqoMQ}86?X@RF1o+fylc(5?oGA*@tAhNUM+W@~j z9jxMg7s40uRLAq+6PxXCJb&RijOQSpNqC0hS@WUIHXM%|PXwM|JTBTIB`r0aap@Rl cvkgOIn}EjkF&&qZR@a|F2CG>qX=kVXAJJ#WsQ>@~ delta 166732 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 MRZqzotFCrl8&XP|=MV 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 r>b&}%fz>n-9ptI{I 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 i4P;c>hFC0P&b~+XmQBYjq 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 delta 138928 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�VXoneu#SB%A0 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 GDEuFCL1?o8 diff --git a/dist/dbr-9.6.31.standby.full.wasm.js b/dist/dbr-9.6.32.standby.full.wasm.js similarity index 100% rename from dist/dbr-9.6.31.standby.full.wasm.js rename to dist/dbr-9.6.32.standby.full.wasm.js diff --git a/dist/dbr-9.6.31.standby.wasm b/dist/dbr-9.6.32.standby.wasm similarity index 94% rename from dist/dbr-9.6.31.standby.wasm rename to dist/dbr-9.6.32.standby.wasm index 256a6a4317d041897a8ea9af57862e282eefa9c7..62793c10d4686ecf321928ece02edf71443a0b00 100644 GIT binary patch delta 46997 zcmbTe1$uxD+TJV6b4t9RdtR zin~j3TAbispe^+K&)I~+{XF;ke&3fL>~+TNnrkkbnfv1%k~!uMS$)z{SR#^S5+x#v zk|>KLLJC8SC`lp_l`u(C0FfeA68Q)Ii6l+3ZugQf6OoB1n@l26yowkWCW=bhdF#k< zQ3?wq5+N2;fhxlY{=!rx<2!Y#nBj8R36V4WdS(I9B*__SxnHbgTE@X@Z)CDHV}G3m z7V<2kYqNkzu4asHAv=Zr_tI#W<77$37hUg}$da^%-v-FBv~R!t4pEQ4O(kSsTJzp{ zg(W1d(45G$IlVK<(zKD^H6TkfE`N7IA;&US4Xh`S-5F%aSb-c&8$WC`iKi*Ogm80| zKP(tlDy(W+hWFeCg23VP4G{=jIB3-t+5EC!@DsmDUzG9kMl4Ay{GfG)=hl9ayw13M z=Ldo8rROU8yO6Sl3lkdlPeq>7E8xiEbLO_@PFbP*w?$uxGIkSU3g3MzpbCJ;!`H7Xz zM|u$RFB)b>)PJJulgTc-9V6lGkl-uf%T(GcKWQZ#(`axB@v#T_$wkaQJCH(r3VT?b zY&MguyJ*XhmgPN{CcDc!2Nn8Z`5F$ zUkH-afPi@o3sb{Xj@4KheJM?;PkuJ93(e9x`lLR|9XXG~vS;j7ZMM?=|AC2firUPX3AYYSxEce%> ziG`eF1HLEG0y)oS^d}D#vWSfwM(Ps43&Y6)Ir)*MqStzA0@g~k@Qq7~3w|}3kO9EB zo0_qLz@;#KO-{Na80TX*N0Tyk12fnCiQqo-@*VxeIq>zb>r5iFxYjTMB))8hRE7;M^w0IgQ>561`j+2>u7KWc9eWiUwKTqY;q_^?K z2Aw7i1z_u$Gh~27*0IJH$ruw^&Td>IGez>44!Q+=8bgoVB8@|#cv|^3$w$Vp9=Ayu zi7aKS?vZ!_vw89XIhc$5O4B_;VSwWvAt%6dk1!S0jqwVPt=ddmfQaR>p~Li@bfjM> zMP}030l`bp`-L)O7cK1<;%Kn|3eKX<0zxGKo{W?Wej$dP2naSCxy*hqAPi7Yv~@9| zCBW8V!ghfE#d(NbDlYUC5Uf|yNL*D?m?g~=HGvK)E_{mk<)wr+A4GI6EmY;HQn-32uC&RDMd^3Hvcy zZQ2WsG54&!P%N|(@zl{lP{^;$*Fk6@3fpWndOj(}mUI;U5rFVZQiX{MSqu9+Ytkpt|)1mPcrETtEw3NtWE-%b;TiR2IZ_e>$4{K4YVg%jaq8-214 zXk*}cHGMs?5fu~+yK#S5DzF!5UxvkP5RTfg)gSH>a3l_4k^6+-alEkC2Lux#yD2#& zR3*Dv^+Uoi9MtUi5#b5JPTF})s9-`i<*X1ckf|)kd7%o2pI;R2N$yh`8W~9Vo)^`| zST)c#hcm7&TX#j6WhL`ygL^_nfT{N|v-9ZDd%|mUVgG&MfGA9~(Lz7s5K?~<9Bjj5 z;d4SJ)7YoNae#+Ug=b_kyY@_2Psj>7^@T7Tv2lM0wK*vy4gFE{Za=vk+y94f%Rv^? zRf;%(>|zB?;!p|evQ8Br31kkPZx{QJbQb3jM{3yaOQOZ8M3^elw#%*I?9*6rwuLrK z5^I9Q%}o-Y5|o^jSImrYFCzgQKEdN*sm38Fgz3xJxGLgu8Ef6GmKaGJ)e@tC2ly@| zl1+48UGWB)L4T+xb|g>fqk3X7fW-P@Rq~W|tuNjL3t}L!FioRZUP*mucu?`N5>3RV zU})&IW?~O@G2#5sVj&eot@Wp31z9^!I0;P>%*6#WO-UEdvEgmR&rRs;gN|Y)8L&tf zakWYwu^YX`w^GbKEnd*?VnOtYvR}bTqo)SL^m{U5@6fmX#LDDnTB*O7K{nFY{l$d1 zOwBKaatZoSqW>F|j36yDKx{;Avxx)5_M-k5uoIchsRk9-_fmO?7)Q3T#35ogLME~) zL&c*qnN2?%B~~Mptr{hEvI1KpCu2cu3q?MioX^o0inMznF@nZ@0`?Q=vXG{HA||09 z*y^vRiH$|Fmj-5uZrVOwtR2`URqA02i!w-{Blrr){6&%w6C_o^**L&68F{_*cDh(H zR4yOcyQtPIQN^s*ULw9At7yfg;$X6h?OQ6gHFJ*1`64L?t(qZ@36b;j86wV)^R&hW zu?fIW8^qtp9yXYXv%uN1z|W%93iL|eB^Ci_vrBwL=CHcE#areQ`z1|OG0!6A853#N zE9?6uzbQK`8(~fO&n&dd5it_G+uTvUz}g-a4+->jE+EPU`blo_j$@%^j zpxsmB6|BAJm-M@|`3td$uv9aaft`FIHkQc*mgg@q(Pmpr^tOIE>tLq^tNP+-AG72k zOV~KGbS;*gW<7FAx6R}f{j{Kz=vpFT7SNV%d?cmnx7dV&(l!O>UA^KGIOl2X{72F& zkql-h%Se|*95{tOk=%65Cz6F8Dlg?l#8;K1L>e8Ga)c6N=;Kc$nKlna^a)BELh;o? zS>tK?CsOhEvgX9Mr-HOHl$=O2D@ci<eS4`I=;=T0r3YZ{9(0f%g8E(h zOd6}<1nk^HN+5^n_#RR$*o>7uq&Z;iXr1q+VxWP;zL)yC?AxV)$*%;j5TLHUo!Q4p zlLc)l3E;rwR8I$&GC?{oMx=!cQ3J^Lz^}(b=Xi5MSa8Jnl;Dt6v|ggK0KGch6+@!w zy~$GT+*bsHG{orFHT|wVVE3DY$FrkGtNK|Dcx?`Dr){Q46$Xq40|(Ni#Ved(DV$(w z`jG^joaSIwnvAqNJnc8&vt927q~~@1&yp&N^3?xU)@h_Vv&s_vHn_ZaDpe;NXcsEw zHOByrQc?pEbT*Ynf;Q%vDs6Q7r&SCy{;mYuR|4hp)2CCVT_&`SdREgd)1)WnP+$b1 zTc=4e^u%2R-tVo4`jxWf|9fJgmM0)a{%F%&XRI3^U zQuTZFJ*1Ao_;^7aTMcvN&hDr+oyW?nuQyhEIp`Skixp+M18 ze>eg`$rn&GI&+p(hQ!hHv!oohrP0R3>Zs2jOQqRT3Fjp+d1%h9kLv7qgZjtOnzOOZ zZqwA+QXV&7fPl(dHM)y#N799}rOpF#pk*b0*rojMx`36ulwb9~o237>PbwByF}9o~ zNc27^%mexrtBNjv9ECyPM+y2W^XkF$`Bg4&@*{xv!4o9iLnEfo(j}KCf7tzG-agjb zZ_Xdq5nF!*&Q9s$YD=OqY54K#Lj}Ks*WobgQz20zVABloRSgcrUvJeP-B~|@gUzWg z7P0wI#I8?NIA%O%-_MbrD&TOxS|ruvT;-O<(jZ7uV6OtK^%Ch150?{8Owl}a`*T&L z-~J-maqM1ru9jxof00yT1`!gmF_yAZ+oWE^hQkAAUGN_QdU2OE*&!`=f~HBQqzatR zt9n*S0ms0;yCAtOWHuXfU3z3CTWPpl@wFXEx%^Uaz}JBozbQC}Z_|JtBmpl!zfyzboA_9I;gR%x z1c(OkC`s_7)|LkN{|&LOk0l!+x#;&#q&kHX{pPhTfe&aTEG!T&l*ghN8`8Gc?^!!} zb9_?8Lvt%_c=qOWxeh_{wLgje{R9Lf9$c_gKu@Z8{^-jF*B4yRPHg^Eicg5IaOAL7 zu2nQhb^PXvM-KD9`{m|s2*mS)Ukg}Ne>|Q0RQlK!&zmhb$sfLUVtj7eVw^v>3z%!- zBox1+@hgC?B|MY-mfU_*UST{z$y(2(1U25D(2Dmb-k+0x{|poOH{JA1iX#Df;h8iZ zp!0KSR#FaRiI@E@e{7ZRsqx;(iSp;UTtJ@)8D2mR(gK5+07dMC0Q+4;?|N327NE9 zugHw3dkswha8=*SJZ5cXO$BmQ9YN&2920kaY3wLKSq4T?V_z z?%CyZ&b*Iw$=?9{cDz75KYA|?FY9zbe zS+1hWtD&%j&<0f{YuHQvOyVS<+tDZwJ=RyQ$pim^?Fhp8xfxQ&7ZISnh+CUrBa31V2Q6I>zY=eXZdAh?c z`86TOS*tzr=i&#%&oLt;rwgDsW-g|4Do8mMWTg(sB@B(qiCKwJbj(3Hf|opg)>?{P zJt)@|q1h^YRE83865SE2N6^j3Wt~i7hmXsL2}xtqP9g}n^pspyA=Buc^YRF6yp)`# z`fT?F`Ibu3>9Sk$F@V0e<$eI&9tXmyo+*!ocr!awRw0(MWq0L~Ks1VQ1gmvlo+yx= z?8-y=9|B(U%42yw)B<$ME4enn%~x_QfFiHuCICOamYV_hZoZZ+klxv&Ke0<7#Yg`Q zgkHgh{Vn_D=yROe1TVqKkd8nY0*et4^>cJPQSySy-y=$&2(YZ5M=2+{G*&W3QSGR= zQeGuL!Kne6ts32uPr(Vo4&_sdDP%h%g_R~;q1mj60@?Z?lZq=72sZGP5=uvG;I}1| zC0G@@xU^Cni}QPFWgGN?baq*#9C=QEFRT2CycfzTvDo^r$|*_OpPJvIPYsXq+w_Ah zxx7+E0*dymsN}Pgi*!zXrCBzvQ{Z|jTDyT#3tGsT4V0#shZhYLJ`Z&oDyR7=mC#fv zW`gAPX=^1O^V_er(oV*FU+JKHL=cYrT#*53Tu0?M1mAX4dYHlLckiYo0?=+sIrAI{ zQJA5r?6+>p&k~u>rhcO|5y^b|xVN$}1e&qO-zj#9Tw(w8QxXWdLK6lkj}Y_>RJu#h z11J_YcBm3X$W^*znDU6a2Pz)6e7F)LlI!fiNX04up8ioW3&M4kt`?vvc`-(bkwDm7 z6VY+(!D4Bs@ditrq>PuyO}1ew8lpwh6rJ9krd&bHq3Oy10*o`1b~9%xZ$*;HX3S9v z5t2!d%vD|^xNn|93Aw{s&sVAu;f_l6Qx+fFzCbYrdSa)t z-Uuu+1=x~Z$|{MxV9oX`r)6m43LNDv|3MocL(6~A%Ey(z94}R_*hxu+_9P`$e@W|} zP!5BP$DUMD2zgCwpHf~SSmm@bmC%@zSe?vY`Re>h#j~j7PxkDr(p(^KSe*-e^54)N z7ZLr2wY#KzNoeg0C~)>NFYuN={SC|6_7ax!#qY{Akqo5ct}8y_AC)e;u5<@xMczfBX6G5s5+2&NTy|Cwh=9@{Hl*=L$m1s z8N_l}Ou&LcS_lgUSWU=}kbwpBR8u;E7+>CInlDEV*1)$Lv>()e>1Yoa!yC|d>4VuD zmuaU&hOzD8rd)zBOrzF4rkCvZC{ry$hSBXuO+K1@*;JbKk1_2a>U0|?>ostWOl8$` zn7W9rRhpsolTzcMcLP;grO}#Wl{l6e;DcDsKtI1Dm-E z1&K^D?ImOcyOPHQ8nc&;%5Q2Syi-@cDQNmK+hWH?rI)gi!jtq3J$?sAdq8^q$*!j6>T>z&+uMs9uAahyY zQG9p{*sr7c3NE0p#-P>(EOV@BqllAz?nF~x2@4%dP2&Y&xyH8lGgl+*)pQdm)p9m| zrm4S1Rx-yDQ+Wbdcd5z2AsC;p<^S`fyVsav1gJ?ay4B&3X(xxdkC>)%2uvn|up=w?x#On1goh0B)bb=2 zZbxXIik&izCOETqo;Ee(Fy@S@2#0mgnw}D2Z&vwc=S|H_d`nJf92cYQw}J5i@|8vchBBO^XnWl|06m54NnD)ftv|Xi|51NGqA}!=G$I_`D z^W5wJYw9&uRH2nh_nYsKBkYHO8IPq6e`~t zAy}=?gM+Oe7eUKbGM^;BQDoh=8Vq4D7664RdRO z{KUr9GM^z>m(S~%69Gntz}gTv7XoiXAfc|2WuVjUp{?qgoygv;uK6L^!CKcdFIL2d zno4W`Bv+;No0`MPLzddqTwMaruWwIp(Si+JIW$a)Y*WO$c z*}iOVei5E+dZOR;HUC4lv+uq)=QIg#H9BXB*~8WjG0(tx!fFqLjtlVj;byDExmz>% zTh4zBWG_aUdq~(|UyL(@Bo1NM#+w&%IC7$S7>ABY=5s_CY6~Is+sS4VA;XzM&DeIs zp<=_L4`-3n%+RtgW*euQ2OF6UJZnDF{D_xq%MaKt>1LcTi`ny8<^lv8IOiNQ%nYO1 z(*@?`BKeWcUSeKN0P8L@Pa?vPHhN{aIfe-<%(X0J;-b16%!Ev!^_Y1IKqfOE2l#m- zvQA*Ne>RUoB0Imy+=IiKTg-JN@XRx}n@^ds*}=L@(LfPRXLt+gY~xvTqyld3M%T=%#e54zC{1=Dkz)pV zf?*D!DYwiK0<0qGCoEBUTN<|Vto=9NhT{m+ZInlap>j~|b7Kh|n^o?i-yB7E-ZEE* z;CRAf^3(jc&ELA`+f=w)D1k6&9JuOTMu{B@l(;(zVdk?sGnJni`I9+=?EE@@6A*Usc2+IuQ4QH2K zmU05*_*k#yF1gCgKFe8dro9qjfrH5e`XbVj2y~5(vb+|^66%e$?8bCmh_yI1$T#=% zSQbfS4VzTJf|GR(%_wNOkKmjXi%B4B>Egnc*<>xNTEy~3A?Il2QkL%^XKgQK$*GeJ zcB8rlD4jvQH7&0YwAVtn$a*%fwgqy;db+QUeGM(!38)I`YPl}3&dn_A{tbz(EWe15v39n#d`y;YXlMCOf}oB~*Mgq; z+;Wj@WNSNGaH?)(JHN1eOQ6>%nTnwZKZ78Qw?xruKC73G=xo`-W9m(?#ISZ>T0ljN z*1nMBZMG;)p%YG+!dcvI%S(ZM|BYoB`Jd6AJ{Itlo7vjF7Mw$y>4onxxXtWfKTBFE z7yw&sw9FUY4dK?-|Fw?(JO5|&GU;8Zm51IRc;(}k{x|{Ho)di9b}&pER%i#qjBOVn zGCewD$s>>#H1fQq2ad_n=PjR-eYEpMOBH<|wkj|U8X5&!Vto-kamf-xKfPe-jf|%* zSlR*K(52A$Yo1038!+WtCmAJkc(Zj z#1pE$wCJ?sb;}jRRJ~ytNrYorrf~|ROf!K3|+FoK|j<7c`Ex!o# z)Ss68;UF8_p=h2Q;0Nu|yqsatkL0C0`rC`rM-QzgR_ZUy*CP3K(aN_Lf&99Dl@%(B zUm2?H4ye4x!U3WP&8u1O$6T@n1Q1Mk%6UNbAXI#r8ZXv{(%qw9 zqJ?eNB-bTdXV^AD5uqddsTVwR>Z|(q+{SDmNMiUdPr$IL^C0g^*#6)Y^?C)`j zR|<-@TK(J#esZyO1-Z$)T+MXz{odYQVwFV< z?!j{Fa8bxqslA}nM}J&xEpE;<@-2oL?Xxe10buGA6YlgL@VH%MP!-!!T>AB8&)`o+$=1yy0L3p6jqx~E{ z`ulD)_`qmzsL^0JExN}VL+(Ji)GLAsAeL(Mal`gk9zW{g-vgbPH9G;SciOS zNg;d*7w5Tz9A>C}(W_eVVfqBRF29;ew$Qi&YFRYes(|`}z_QRVMV-f8>0TC6Q&sH6 zb|0%n0H%b%K?AV2AFJ0COzhQ)>K(XRvqM$Xt5!0U9-HI|XS?gGMMSPjF|f(mSS`*2 z9Gh5&#_Hc9q_?)8su6Isqf*~6CV zZ3P;Y6f8V_)B!a@*HWXe+=Wg0Ox-8g-qWnuRN7^U3moGYY9=%$<)&!ibYLe;@(&uV zHPjlzj(1WELTNIkvsw+dpKj09SlY3(8vCK5JjEc4#p>SFF9 z`c+>($OE*=VD#(&n>$$b30w>qs!p{6)*Gin0NKmlPE=uySxk>iQuC3;?DZsdwTRM7 zr>dXuv*p1wwF5x?=?KoHlcyuoT()Dn>g9aj*%|6z3faO=%~Qu)ph)VlT&*TUle2P- zTFo@pkVVUcP{+Gg9VU_cY{mu^nvc0`|3>u|@6D>s>T}-u{HkwT*rDcpuNH1GN9?#A z>Jn5?a;N%3D3Ql!HNnutIt3jXc0kp*{%GPMwPo}&qR+D9NHScKG+xUxIJz5`p%YhddBJgtrq!qJApEx-yk zBTRBQ>_cT{omD6Er73z|Z6!d=PrIl-dS6}1j$Kl#i}F$ur6$utW5jq`{)(DI7-pkS zp24rI{}uHr8N=FKRedt_V!dvu^`R|0cuQ?=6DZu(IgR=FxmpJI&omL9Ao#K9gPhQt;&4m|qZ8J7eY7&szJZ*(g=nu-SUc9+v}V2; z8ax}O!L7~a569dW7b-&4I&D#cU6XL=CAzeaEie|<&Y^wH&O~dyI0_;#gcQ5(6LJlZ z`@v6WyVyD2ngF>Ij1+cQOt5TC>^OXB!HZ#4xsO5^&a3j=u*Po0X*U%4FAc&m4d&9^ z>`E?e0C#X~Q$SN-`Jn|S2I_%tUDf&u2;RJI#Fn_BHAL*_8yawbI-8cMxnxMA%O3zG z;7ALYO!Y_FWyC#vq}4KP?14xU!5Tf&?r^!a+zTzriVFgt{-f>S_WBrNdyHE>)F#`$ zK=51Hc9l!jO-;6zkhwRQY;XB4G}}@DZkcVRz~BTdwwVrC)_;kxH8pQC)_S)LxvPyCx>mBNPc2}1#G{GgwYF$w$9icm2=t3TcAWh$r$=mL0cIt>y?7GCtL?< z9NYH_*^1*EvzVJ!D{Q+(PZY92x-McXP6LH)9$I^?RbkVL*c!-OrEkolfGK?Wk*%|Z ztAq!^OisW1#8%R@*XUOY?^ZmW)zaw`_GolNOJ_3KL;V$OM>vs#wLg-!Iq9t=00-+- zv^^9dvy`oh8!!7<>#8;zf~-po+xg@VXl+_=+a)LXlWwDIpX%fgJv806)zBxW2@!PO z3|q~2fw**=%xp7l3?A!rPdZ#lm$R<3Y#CMvv++x8dx>y3ivfa~r8p0O0g7Ptm)RnT za6}97%0rf8N{+Bi%WYL{oDCL0E?2`VU@5b2vK5udc3NSZZ9Z;`WNx#;x8x*UvC|ey zPO?KgZD0ZB(CNEvHvk6gu~h`vy~lPuc8&Q{%B2VX3Tw)6h?_F9nG4Yxdd- zhsx!lwtcp3p~Cs-#pii6d+>@W6@IfyP=IT(QC$&QX}>MqAF7k^I#E$pod!=Cs+I`{ zY!Vl6LaJ&M~X@KFkCB6L(m-I;`(zga>6wuELeuSW<0uKs}0Vj z>`hw(A^HM$!pPRI8-Z-~`UST9w(Vm}_EE;j6WeSHcG28FZFQ}tGn)FlKtwusa9kvF z%Jw31#17Cl?l!TKvvC1QGvmTT(5&xZEv)v3g#1NoX!fUM2`g)}|0)90Jx+U0fR93; zMF>F2&Lg2;_t1?_dmnrkaoO(z-gJ8l164bOIzw?E_x&ehfI>%-yX`*~Y?9YTJg8`{}308-oA zcLNmcVBZLk*}O4Jxaq+Dn?=W)c1?)E>h+rrIZqWF*azCy>bEyV`f~ zRlm{AzKMXDnBBu3hvQ;f4|_L+QogpI=eX^Ir{H+F$}DBxo_0vx3+T{qk$(Xz*UP?F zL|8C^8q@g2X8T<@AkhZf?85{68d5NVdnp@V@QKd; z1fug#`sX%#bWJ1i?|&2FMUC_TJ9r44IFbRz6DTH{5{DDtV=d4*3?vQ*v_Ob& z#aWF_k$}j1qN6lIxg|#%ghoh?W(ZxA9E%V-Zgb>g>t#o6B`ZHo z(i~+%xpUGH8d};#r)!QX0M|6fCbEmA+Z=EBeV>7DM?rQ_cdX|Y8U#9mU1gauj@SIM z*0r3DO%m9&^dv`XY}hwRj-etqU(CHGM{t4+gGREW4mh_*$&NT!Q`)YzmaqjixFm5) z2Dh8gvA;?+=&byX2G}r9^E;|x!;~rD=w=81wxW!qP9$1+)5vjLPzNtd)(ZqPFXRvY zK+iRGqzrh12ygJ*n&jXc<7@TW{q~IcegGu_mX8PS`!HKJk{A&S_ z-**ZS1)c+-z?9WS0Y=lCIp%>UDgUWs61hx&{nSw%Dp!AVMNj^Zg_M81xg**t z>Ca@`^)(06csK#qpm;RZTR1FWI*cqS`gCGsIT8vN%?_WU9a=a(f-sfd!cmgkqi0(< zib6M|wRA+~7?_@n?Ery84&o{Y=QGxkq_7x$?5AjJ8m-vU5f2pa*wRq}+UaF29fiqR z`ddp!0cgo=tsDjHe@su-yTW&QAU_I+(`v08F_z&o5QkcEjJ0yamI(!67KO!#=M(kr z$UD`@BX= zj@{^V`F0LJ>>qgQwZ5%$UCp+S@k--{~9lp-P ze)v!EI;{Te=m$LP)$)fW=r1FT-oKUTlYcO`%#lN0I+tT38m! z{cq1VyM!fD%0@;%tC?pG3$qpjt3aSiB6b+%`<4h&RDw@UpOqn_N>5B9@w81c*Fz1 zE@X>V6h8Z*1l7PS9&tS@B8E>IkH`!~gpiC!JfQt}V=rgWx}6zh~cu1^GSOH>}I=(z1=u?pRSGGY^)g?J5VqGje?uC;~2;t~NqHtafmt z*KeyGEf86HjpHcU%dBgWg-oX@*YbqZyq27itVM<+V1nS=f0H9OPL73}K+Cq#3!5B? zWcifMj-1}*VEMu!Qa$3{qY%zK_})uD+U%%{YDaE%j6@@Icf#>zJrzFYGxs^3OJoI`aMtI}RZz1TBn3`_|UEzM&{Y1Tp z-~*e43&(;xf@s{~2YCV+ncmL;{5LlMweymMFYJBoIz;x7m>MG@8)`O#ffKC zxM3c5t+}QES9a;Pw)z4d4U_bH(d?Ucx>pvKiPVoVTT$(-w4@t0G)AV87NWOfw-U&h99DR#j;`eXps@b}i-dm~HL-fb1^p-C8c+A+L zul0b{Fwmmo8KA|E5L#?HqrVp2dvGm1xCLa&_<)e6?_ql{=toRo-zHtt8vtZp)9=9j z|KxT3q;Mn)3%A_Bn2&HQ{1fjigsju#mR{I&G)uN|mVS@>MHuR{2DkN+(-h$ zS3wWq5S-`vWs5tabFD_6(V4n45n!k8Y)f$U!0GG?Ei+B?IQx)u%}0Cn;>qnSCE zvog1LA@GJIh29tnxj;%f5A7FN)`+hI2hm>H;;L0i@Qg={#nJdxpP}vj{}IhK-z^obyE-?@)vs?w=a( zLd)~n(MHZ636ei;;>;xTS%s#~YZCX^FqW%KOJ_;b6=N;_)pm}4=SulWD`zR-M!#0h zNYp@EIcoykXyq&kZY4)+CwH&;w6!w{kwaQLJC)%Z(iG(S0usD{9R~wRXC0B8e1mdA zDp`n^g8t2AWHE;#SyCJ43Es~?+d98Py*=AG2P5>do%13#{;BrPl`;@ya3|*x+znxM zyEqRL;d&MYF8r0Vu<5!niinV{eDGJ!pR-578gz5^Q#gP1ExLM`{rRnPu^?Q7Yg&0* zK6>msryt%HkH2#clI+-DX2ZNt1}ErwI-oxm?E;LkV*L1DJsKAX2~H9_&S|q>qlX4N zi?+0Oj#rS5|44V>jIjjqW&-}3h4Nx~0qR!2gBy7vOO7D=Ke$ZBZNtb=*(imJ)7I2r zzhHmVAXSY9wEC6m(S9MddNdwjDKNwtqZkG-3#~iEnK!qBmB<8#hdR&&7$Gz9WEa09 z&l~sxpO9Pin>M;>h_gf<&2I`o5&15C1dNdeb8|PEdpD%QB!iBm1~eKq)EOTk$}qIy z%6(_O3^!94Jw^-X>A0cJXd3;4Gdc$2Q#2FTA}cW9RH>FdFeBTxq0SsR?HCsRV=_!= z>+NKHJ;#OpAt*FXqajpW*LW`MEte)QY0tw&}NQTsJEF?R4odXBlFr zw}&}9sOVQfG5T(&jfXpv1WeSx;Z84ybhxvxS>qR&EqX&5_#-Zc7XQKNEzZ49V6Faw`?GMg^ z@it7IG2IS*iv{z~y>jDCMwC8N2WM)d;s|For-9!tZgIUsm?q&OZ?NE4LB3jbA~g9`>{+|=*$nWEd(AIfJHBIiZ-09aqFDXJ?J~lRwmH{vx@O(woZ%s(*}}6eqPBnmn@~`%C4O#a;UPa2>3JlPZd`ma*Oq;>RKWLCe(K22CYa2eS3gKIUvn%Hxk%MUPloU0T! z6S#oqxGoMe!NqYd+$dYhzDaZ8U91(X_cT`v5tIJwOqbnCvb4~}7rAC9LPK@tu&X50 zD)0HUvC>CexG@Yrw!m6X4p#J->%M}sJaESKz=^Zkk?G1Mq}%A#+pa`&1lPEVdOGWn z>FVSm59raqT}6faYDje*@y6v=LVjzs&>L490q$#af65<0A8Glmbp0DwJ7F z9nC&3yrz4JD5cxtWg4vK_R+8Ex{pFzUACV4f)gTb&=i+KtF?ER z#}iVc+Pih)h8G8H6}aBaVT1u`_x4e7)c(w)(@P!PR;X|XHjj&Eme1U)1?hoZu+Xg? z-KU~JP^(MjD-5i&s|tTB1T;o0{$S85 z+WXyQ;S(`tzxz)DIO3oi?&B}m>O<}%KzjbLy9|KuhMRn z^a=Nr5ME_%z21B`4VUdub91-T>9!j!j%|~GY5$g@pu9>5u$MDs| zvmB{aIocwYb08lis5ml#)@*5h&oOuq(LTjIe}KMqFYfX3XE}c;;i2%5jQhy*9pTQK zoJ`ZzB|QURRZS`7nMlUdxA!9h>_#b1WA1%Z`eP6Ld^fWz+tAIIGbkn>}UdnNuDY{o-ejgFR;+Tw1@v4s7guV)h+ zXIAa=d<&3kzX8(sdpaXzIpFDR`I$eWcAZzY0WlW-V z4te5O%|jmCR=CavAM>QZ1D|D_^c3Y*%*->MIL}AiF?*g-b%MRR^q{X6^ zi;lmJCj0O3MAE!BJf(PCVkoZP4G&x^>4_Vj_B=KxP0#5Kr*&?6e2D%0CI-Bi{uBaN zZerYvS;Q?5_Tw~q>9(g1Kys!5zR&a<F_s@=T+*LLkQ-Bh>hg=ciERbGKrfcW zMXg`m1@58AKxlIHd!8T<`a{9~2qM$=dqxl5-18JfDF1y=aexl@J>AI9?AQCAyLcId zZhz!y6qP-@5`P#nESQw4uYnUI7{#Ai!N(q4aa)SJ-kz!?`wXe^%(I+uyx393JCY54 z;er0(3VZU(bCzSnfj^OTBX#}dX#$Y?m!~?w`oBDFIW`ohUH-z(FZs7839;?|4#gG= z#oh|VI^KBpAo15X9AlX4ttX!ew;syM-bofLU(pd z!{fLi4-=6<*JOI!^p_ZKzR={Q-1ig`k;DSA-mhTKrW4}4e6kP3dHE~Hvft~Iy#H2q z_TS2AN`jZqW{(6ESd0ta-U4QFft^qGekKBzOX1zQz*ZOW4v@(bmQvEYgP6FVqy^WU zUzPHXBG&Br6;xU;;B||9V&|2?yQ6S^k;{48Sxwh8{h2e6NC!3bdg+jA-k-2ExvP68 z0c@%6Z3Pfr!<(1<%qrLLelB73E9!VZhoX&n>U--8rqH`;$wu)-gByB@g7?$H@TA^| zM&6k0@1>2r2{4f!Yvf%@?$ADsy=MUGH9@s^*!NAmUHJP8cbj66nJm7Ucb^C@?QRQi zDnO%_$aI?xZ0W@{?JIO_EAJ`7Si9EV(GpIFNA0~c$scTV2XCAd08J^uJ$#Dur}q@@ z{!gn27axHy2&*z=D;YSmf$sR)Tb68?($kv*CF6Q}xiYwMPw!n&rrw-m9tEEDO2EG5%KiaH0tk#tQ%>C zUf$e%Y?6LK07i^=M8T{77VF!~`#=;Pz}IYGTnroD*PB<6?rWHgb^W}h9q>?lJlgw> zf_Du*PxI!+Glg{Q6mKko%cpqpm=$B&XM0Z)z_hvELR_=AXP$Sr1G>CXYrS~c{Tv;) z-rEqGtsCpTC$lQvw9#8fz+)EH&ECa80_=|TU0d#No z?s4J{^Z66NQs;j<(hp}fPkZwS@{gK6tr!jLjY*+P&v<(a!$A?i1v7BL?@q#+v_-kN zChYqQ-V%alc>fm{A~5Sy>9$MWMjym5|7GuN4bJY{@1Wb3?NSuD$uO}zT~iHjscpKC zj&En}A9%M3{BbDGR?t$9F)dkMF})vqv%O;2tjFGZ+y(#fGw&TPyIlCoJNAFP#u7=- z{O!eMV;Z+OGM9$i0gz^XDu%xO$X>ni))S)U8&`9=#sgw|&v+n>U+(M|qV@Tc+xzZu zDN6qLl1+2sd!)Sgs4p<>6m4qu6^ASPII}Mn{-bP#)z?%e%V>YyhxZm~8QmBBAXJ#$ z(tYK*(locn*8qM>tgqLn5!Xnti{QBVZCkvhXw*E-=c|kKyFMT8@h@Y&B7D(2e_EvP z=l?Z-t7u*5vb55|@!6 z9jN;})Ryey&h`0|eWmD>cwf|wLBPu1qS4={E z0@agz$#ipGpM}m!@D=>eqAcoKYtd2x{!&qrtH^vQI2 zqR;k0WB)%oJSexX(f_@Uj{j!)aJ(p9m>$UElprP`K}cG(7ty=!ze8e7yDHO4$@OpLv2nkIrR zVkCAQtg)aX_ByDj*s(^91$&RiSg<4-vHY(444^*W=l$c=&vIW=&zzY#Q}4p}H`H`j zy_*{w+E~NkRk4ZY1MuAsZK4^B5Bq)-&22i)IP;<6YigmvsK)YJXwnepqn4UYD1T5Z z&0)&yRBO!`u!Dd0vF2Yqx@{ZHWV+C})fU;Vjs1{&mkdn-^{<+ypk4h$1+WG35%*B*_vuZS1i|5QH4M*%&)ki_}!Hn2!G7x z-)uzFqqa3%a}m;RPq^l#gd?6un=uL>U@2QPuy#Pi!W>)CftIuEt(rX$ZtI_mbYofB zZJKEyncFliq-_3po8};G(zfSmJk%ra?$nGHWyFn-j}UfbEOnPA25DyO(saYr_;QzK zZU`!A_EF6^-_TsTNV$ncldso|q0uC>)+aQNk!7RbHQOZYIQ>p(D*NK%t44w5rt(I( zWusSL&Rpj;HBnz(&ug3@zns_90y&_#_@nch&i-g;sj9vrAAMEx9tLi{`+=s=3e`dz zqO|RUq=_udsC9!>H)`!5o#8S~q*IMt74D|#uUc{DD^C1XPvluf?czX;IxTESvz&iz z)0X$8YR2|lDHLDh(6)q*o=u6`D-c-VSCh3ktjXe8<+Yn>xxD{DLXHO_IS??T$`3`S32v&rP8<7s&9vo6p-EgTt!%*eSg*JChfo|GZ~Io; zEkK&i;;(CUy!LQyM>?dLm7=9XnvE$ClA6Mwrf7Rc;9|eaWUWn_&VQP$jZxv;c+OO9 zJ?hgJr)wi{cEcZJXg|k`vR1RS{Shs1mUc7ofe&4zg=(TKK76rutcnhZ)M#k%f@E`b zmi7;HJpOc<_Ae4l0fiR-m0EDZPi3!HYikPDWFPf2HOYPZsHgHKYqW!?GIQ5bLH9HL zdaY46l`h9f7FE`~f3-KMvPKu7NYnY{A}s{!vN!&t zGZ5cKWS}meRNkBq(Pj7}^^geNEaJT{8>Q<^YGM0pbvUiL!E46qviw1>$LsC}A>A>D z4q}s8oV#`HNllbGSvNs4iDG7g8(yHoQk3gQMc-CV7a4=)^Rf4JRs3fXe+`qGL-H@F zp>CjR7UW8r>Ec*!L!Fu&UH)-aLR?iNT`oS!9gTD;r2C(Ev{{EHx=2>|%&&>iRTbV$ z_nC^M0+mJXh!1tei`- z?B9HG@PVsd+!>c7^b-l!;z3_-(~Tqnx<7X44yrUbFV@m$BAGRU#3&!lzFj&97tH1T z_UL4yllSU^X^Av@zs?JCala0XWIQ=vmlX*ouGV6C;W^zmbPv(}lCC~=-|QPYcbTBM zp*T2Cz-^K^+o25RshJ&26?Z+S|^&03v|iQ~10#r9FD=85f}xCD9mW9%9{ zXw~r8u7N0X)K9UPx3c-#$+55>21bNwvG$O9SjhV*B8Xn%rTGA7d~ba6$fuV#j4V|t z{-Lz-A$i3&ky(xTu@&ua()@qrLK(2h^J8PA zyR`77`9v&=t>bt*Cn!kC(*azHuJM#udhhw(;ET*gEJL z?D>k=tI~dUVP)(?DVrZ%75fN>|7_%7}+I=dlglkcymgHP$XI zW1FwWHbys8U5hO$BTeEs@P_#13Wj5dYHZ;B*h|HC2fW*Z*t6jgnW5lpeQR_FBgw1S zwUR3HtsXGFoxZx1xpAWY6s^I(^3_{G#`)@ zxZ_5Dsf`8jS+=sezMbU5{A%cXzB34o8xR7u`^|zP`QaM+UQ*p_AyNz(%(&vyTMmWY z8b7rcmrM0j^&n{{(eXfDXfex@Pu_fUSk9Nk*x;-Fz&kIn3Fc1TyOw^4io|P!Fv5W0 zp+vlvm|C9H(f3rs6rEe>BgLY(B(F25o<2n-U0{#u>%T|)^=Y907Ooo&^!KF;{P*|u z7_Bexo{jWlf=iik0$S-iM~fEH_%BrT#+qnESG~S$QHc6}0xk@Mp1x%~yQ_YH46ZuE zSbaZ`pU1))+%i@!iM#FL;fvoY5a3LD}rH zdfYrLQSdE_GhBx6`FKMX$X2rem$)a;(w5Xd&04DI0?X{JDqz{Qc^ z>g-a<0Ha-;&#Ptt7wAI%thV9PKxoox{l1~Ew2tS!Zy4_fXY(fHWLugT7D420ASh4mSKie3{L@F}VG5 zLcuTf(Km)Dp8k!YuU6W^pZ{X`n+jDp(U2G>O7*s$gZ ziOk1wF3wJczhc~m4J}RqeGLDVA{!wF#;Wl-sTfZ8h z&mx!i%``wSSuX#2iD4tDD@)A6o8_|RS%wO54bL*HL}1b~1C(5BWR~TIE>KH0YB`*- zvvHO{Yj~A9H&P&fkIyYh{gh8yX#fXXE(_maxB&9k2E%ORHFl$69b7dx8LB`Z+JH?; zU9fIBsKSMOdXC{6dP3+H!{>NH-z^3#$!D{HxoCx_d}XfTNwmbLk28M2|2%F0H~1ko z;xt-j5#MpzP#6h0%{6}-T1ktTbO+B`#OK~Iw1~!_cK4N`Cj^qGw=-6h_{MQYXdr@y zzyRX~YKDqIM(jfu@m|43h{^5e2g(?GPzS51HhvZb{|Q#(V-*^^NjTylH9IqY>voC*)9l?(;FL`A+(^e(V>yH z&FE|#th`J)zNoVi))yA>tiHx6@yMoDI*P*CtaM7Qyl(O@Mrb?P&LA~RSwv+RKP3t4 zzB7%(;QVu@@$V=+=<-UVhbkp(ov{|OX|fJ)hAI-SZR?C@;bQBJRAHyq8^2LYJ9zUw zMvb3RnA-f;eB;LuVP}sI8Mh$Hs>8;YGFWo)*<09=2gc#xRBB#mtmYeWAdET~82`LJ zW*x2%4)AG@jsL`Bt{ER0*Ao@~cVt{D7E$b*=(x=w)QCR2QZx>e`^6rjL;ylnE*Y=aRFT&BLIbX$L$Un%d_lSd{ z?1TJ3pSXL_ElJw}8+))RHkk*16Zd@(VvZUfSD#dD>>C-k0dq1RHaf04R21+H>2Z*L z-Orv)jI$tEKPm2vAHJhU)8Yz!YKHVMnHTv1ozI)?Bk#WD{ahOyOutO*C>iO)|2}H_g@xRC2(dX0R8B+^pR@kJ& zq-a(tW;4|JTs|2$E~I3KarAQBE3I^r9eIkX$Y6y}Ja$zK2vF!*_j;4KL5ZJ!9%6^o8iS%$qdP2=5BR7?#d4FUn1kX(<1WkxOfb> zhj~kDJWP6I@Vd$IH|dl=p(^BVpdGzx{7zW0;&~0?aoBYjo3Z$NB+38Vi%2c6*eKpu zHUf7GSRUXw3Uxz=QhB^{+xR3q5~UA|@96;jXJI`0OE&*DGaeUi+5A#gyj?Oa^;M^Z zW2XQMRuZOusPhNh5CB$0Xg^gyX4dTZ>4>~JJO1aW=o6vdpdoMck0?&|(MfO!4c;C< zOj^PpY>%%CqYk{>&iF4R)rq$jPwbCf@ztR}z_dHQ4(Y?{cqslMEt^~Z7QdECBb|&N z8iuO;;c9$CI^x}RE&eZPtHs->V1IPu_4r^v)c%fJ@x4IYx8oOr-TTPx_#IeQ{qkr0 zF=F@bbT9r8a&q5~*TiBw3Z5cgf7s7z7;2gbaw^nR2_!g7A$7t`dVHDf!%UZ?pnW7A zgFO-(F+C!hw=QeSrFw#8zZNkNq3UEeHIv4$Y`bYDwx91iOb4MgSy@N&MoA`!nw)3t zDwujKR1Jg9@OZYbpO}7K2&AfAS6Qq`3 zKsm0d3&{PJrpeG#mfFgc0!5J@nR1AaV{>bi^#;4w+T;Z(_pxaq$cc}U(F4}KjmZg? ztVwN5=;)VOKs!_al2WZ~XFA~r!(iZ!+J+r7d#|JE4@61mMDM`|b~1fe0ei1I6HUE? zq@BE7hUp^-G;5}*gTHi-`~GT*H2B{OB|CfQZ7e*><+CFO1#jDOWX<7PKQ$uj7 zE!bkJDBWlNxu)7oz139pO(KV)xA(u|x>(Ux*pIx=k)VH=c!jvIqqfqe-GfkewQ+Pj z+jhWIUs|#0plO#G&A9uHX<4B3koA3J>L)$q7ap0?V40bH_1x4_f*#=KrXmd%YtXul zZQmTeCDQynfc#_4Sd_uur{3(MO?-gGjEz3evY5YDnUwa%*FyIF)F&m}rV@t!U_aWB zE#viU=995FYm0f$Y?1b{Y9I;!;24drf&J81XcPi30hY;&Rit-#8ICJeLf25aA8vFd}&>JkV4VvxCSWe9v6TVl2Zl}!yJ(_k1H z1L=)YH?20?{jrX8Y%qTlh>2<5R`YzY!PLz)ni z#aH@T>=G$AP#8u3^0PFd)8Q(CmSZ@$VgaF+KIn*pLoGJa7M>Aq(Q7eJtxvEle4EcG zp8evmlzT^m{eFj~og|Ip&;e1VENMc-5KhO4$9bjdmd?JVCim9WvVf`fI4@t<0>-Ar zd~pLyk01z|gg3Wzfegxk=9UY%Rr>Hl%S+nPHEU)06vy$4TUoaG(}6oQPq%`lw3Lr5 z^~){*_d58=)q}x@Oh?ldyqYL}{Ub{qKWRM2yZ)%cT`s0h5~qRwBV3~vo9tcR-je8# zDd=)XOIiR}XnSdIA^IO zLkw&;Z&pHg;d5ctbPM9|Vx?#L3i-Zpls@iMG14&i;gxYeSKnGc~_4*-*F3^61 zh~+!67n3?WbnV^T^1l2XjI*%0wPiccYbc)$$KA@THuB{lX(1olQ9dDs{u+kK9kU|N z>UZ(>o#hOA%EQm)zldJ^LOut|KwI&kuVl4K#K)x$#b;MX%1wE{?sB){eBSnF9e;#z ztkr$wI&5@L`NjWD$X*Q>5t_0(z2(>cBf{!bIgTTTCjU44?v!&=wy~c)7ndkCN6Qu2 znEvuj+!yp7ARFn*C~ctJ2Gx0SpnQg^p!`>I3_mzn#(s7;pY*j1?(^LYv?3e(r5whr z-^ou@3&L3V*RqLq>?2oUc&#{gI8`nq;(?zyRd(=`-^BwoL}q=n5K;_btTts(^mkWH4r z4phK%#>f*Tsem;eE0YnO!DHoGfuO4=$dlmB>rIk36ZgpTsWJ&N$4!%amO)BnMOm;( z)8xfaXI^!>{Dm}!&73axgv)n^+#WN>e`d%Mu1|TV47n1N+OsLMmIi2#*$qV3nD^FhR3;N3*xo;WJ zqNDOt%H#1dxf4k1<8lvd0Ja{N$Cky++Tg0Z8sza+c?`(+*YMRW2Trmew(0 z51%Gt?D6Inob>UIoPO1+P1!ImiG1c?fKRT#D+uQaoI`kzg4L%xs84qA9=iyiry}$M z;nbfg2lep|-uai{oUAy#D+tdLK}S2N4|VY7U53x9@yg>46V3tdh-Vj&W0w-3&POg+ z;JhZ{tss0?;2gq_M6|sf)Vn*V^E!A7Zo+fs6eZIeZ{a5j<|ifVHQ!hY-=&hV#D}l? z(?)(N#p&2@{?ni=Dc`y-#rAm4SnzX=Qi_;E}AoZJb#V@gbo)By`VP(6D z$W(Te$WnHn2xsACK%mEf$QagwNE+)$WIUTd1e!aEOlC)kOk?+nFcuyHGK(b>Im}uR zna}zWS}SQF5_qeHC&usk0VYVC}*$jwk|eVi9M!$1mH?=Wjs z=p9}dW?h5J%8$dLza1xKUCUZ=y1{0ZwYniVy_d*FR!D?1gBoNrYeZx#8%SgughWAh zu>C}KvPVRAv$zP5eXKE&18gvn!)zXr-`D|=s1plFeTPJvG9>jtx=lRA0wS#yb!QhO z;XsB)rBuup&>HJa`vXn5gSCpZ_JO{kZIRY^Is&~AjhlxnGh(b3FdoV=*19+&`vRoF zOXOS~VpZ2Ek3upHCJcl@Y|5LuFv&Y+VG=~pfC2Yy^=VY#EU=>^Mm5y-bnF z66Q;nc|k&(ugd$9MVPH-oI+GIBk~H?fyh2KlE_7tZMHV3JWqKZ)x>D=>e;0pX~JVy zsYkl-*v%{!t2yOzaY-$~Z$H%E`=m7f28s_&AURwNOf!<#fNYBin7=d0^>H)S6 z@>p2vktaM>m3n{+h+=H*Sn31&;?xEgOFa$?k4L2*$Kc^T>DS9bqDG`dpb+Z=fA3FO z#no1(^bJ(R(&O))%Hm{H+(P!AjIk%1b&{t`6&yC&cT^4J(6`D_W1D{McJf7opzV_C2rWEOK1 zS<0H(tsZF$`<}>Qw$yH|g;Rs;c8nHJSfm5wXXYiclno%VgZ)b63_D8X9((Dq#z8H( z!D+3CKH0*FTvo6ji0ot8L@u%dB84o#Wvy*eJ_Srp7*N45jbTr6qLY#~9{PCZfr$_! zWi}Blo8_{W!4h4;xrBGK{VqJ_GJEdAL!U668?Im2TDMgjlB;9_nO`px9(ko63x&s? zQjb;SVJW|r`VzKvD2qQdWd(SZ?u`3&rEuW$qQV_6P8Hz2D6%hXx#60PM;N{u@ArFx=7qF0*A1}9p_q1U}kM44A{Lz4BJD&!&>&d+-V4R>!wIqU3@BX9?M*T8*^ zEh%UHP+G#Dl*15>Bj=KuM>(i1jk`hOT_avD|>xDsENT&<()AjNxjh@ zCwOGPso335{gPd+gf^PV)RnE4GQS}X{6f7q*wM;XZS51qX&{t;Y6cDAzTQIQjMNm; zPkka1d57TJ!FXR1^`VFWp83jFyY^II=+c&U?QkP4UZ;n_dhzl#2PPbcyB^*s)TKrYfN& z4_6$e4}Vyak;+T3^x=v_#8O`W$(witOXDdHB_18t)3d!#5f1fnKHj>@%f5+$XahxM z7M0{yTzqo(!~G6+G)Uqq#!@~T>GDXFZul~rDXrR7i@@0Mc} zrr4kHqrT$t@iB-(DP?*STPc$$_Y~x(lv{~1mvUD!q$sHJ`Sj#|)WHNUeKZA#nADn! zD4K{xur!w9Q1YW{D&NbCwT8O7vZq^KlBBpc$gMOcc%v&@qf=HDhkH}edGH8wm-J0I z*Oep}kfwidhpN0eZ~O_CmPB!smIO;JWzB7&oO4T(6qkhD{Z#1A-KtydF+0d5#w|bf zz>>w@g6h^^vFY~Ku;MUcFWXYnx+7)%vLx>n*}DnEr}*!zDM{WOxUb6UD&DNL^4=Bj zki1ubDE2kkdtFusD|%icdrg0BB}qB|uaPu_$ucWo^6#$X5{Eskedm)h3PH51@ma~@6<NeHXYDT?Wmn&`_G_|zva;Ptr{QeBz!`*p7dVsf zO@Y@C{#)Q&!f9fwluvjP%cyIumU4HZlHJ|w6jk77ghx+O{72sao+I!i!W#shLpV?1 zEW(Eb-az=0zb z;gP>61$st!hQOn*0dEv|65*o)&mnwM;4H%F6O^!JdN;tf#(xmA@B;qxdP`9J|gfQ!e<3OcHIw-8!WuO zwQ0gZ(Go9cpMFf>G^+hG0#74+f&GZ670!s=e>z3IFK`ComjY)JP8Z465T47P)wjlD zf2D0;Z3xn_f%Q~{MI!QHIzm`3Z~@_U0^cCKQ{Y0vN7$F|qnP7_*9$t77%y-d1^*)O zG{O_v2}G?>e9|$8qCOC38CirM3%r4F@d-#C;XUlbhSsDC`NhW`bSQE>O>{}ZcLaVy z__BzTO35a$?1t91DYwQdQRke8*E|t5i|{6aHxMq)E{||=c83X15OE3!r;4m^5S}P- zA>l;=zaTtAi60V&PaRH+4;J%mcq6PUN(ylfkxB|dxTFw-OA0}_q!5Hl3PHG}5QIw# zLAaz4gx?fm5}cwC+7GPygyKTnJ&QOC1N@CXT1AP9opD9OG7wD)eS46!{ zI8Wdwg!c-ZN?9BdIGykbfinot7x`ooKAx&H#2Ug|M=3a$aG}8Ygm=DBo*QtI9Oqb2 zV{5aLvb;C}uidYe@U-874+%Vt@I`^=6TTzx3c~*ioI{w2=kFoBO5kIJi_3U{aB&%L z6TT+mq&y+VKf;lE5;%Q?QuuVj3k1#}yj9>#!aD_CL-?4$xr8qZoKN_^z$Xc>C{kYR z3gK76|1RN4BgIhkj2v@DDi0og3V5}^lL(J`q$Hk0_>l0=B79BY4TN6_oJV-BsPV&u zi(8_AaDni@LAbb83QwiL@zZGK!7nIaj=*WBfv-GQ9z2cka^XLp@OFV$5I!bw4&grp z-b46>z{dzr8>8fZf$$1}ZxcR)T1mkn>k zgr5qWK{)+irD-w=X9~QAaIV0)gii>ZPx!9DDJRJ>PPFS4!V3hxOL)D&&j=q9c=R#g z;(joR@KfPGhwvoPtFs6f_wWsbbA*2$;oSlsCVZwSMJaUwIUb6D8-z!TsxBlvP2d-V zGX+jN4!mCAX@rZ%k@JmIDCtUZLY1wMAXJsf+5;{pW~2z;CHOM#yd zp8rZooJuXXUEp-W=LOCnd`I9+!bPm}hiKi=50zwh55Q}jz|ROz7kKnR;H3gjBAg@e z9Kr_#&LVtX;0=WD37kjxnZSn$7mo@BglCHpBIO1-mIy~7;T;0MAbeWjv_ru61)fHD z^kb#a^9lbf@Cw4S1kNG6R^UB^j|zN@@L7Q`5dQ12Xx-c7cqIa!5T5u%ROVse_3+jPNOeM;`(H zL*Pk-9|=5%@JoTS2&ey}JYWN1CU73%wE`a|d`RE|!l!|IVl2Bsj=LhDknjtEUl5)k zu87j;E6)^o8sW_X&nNtwz$*w}7dVG-@%7Rk!Xx>^mew3CPS3KtTTftV_hS!hBJLBG z^{{pd-VH<1q+en$Q}Bi>N*=AC+4J4hk8)hk0+d%=jfyO;G3+~sEX zwnB5sayGEPbq_MFI>73bw(-sbtmn(%;H=g#YdPEv_8w;K6#*Nhr_-(366lBtcnIi% ziPj24f1hN93YVkYJ=MCYAsAe)7FZ!tG>ad&U^S|Wtz@u}%hv5U?E{B-eHMC!@)gV; z{jOL)CNZ#GH>?&HE!>4(^wFHh3=MU)gM*2jN=vxyRNTA88d*1OnAQf)^(v(2*JtDbjbbm5S20?_w(vrDwyt*czia`@7gQuo=QHePL@tW?-B> zZO`2hNh3aYzut0)_s4-yqlg0!x=T=z;%hlny^bu#lLDx9ym>EML?8}4I}Nn81X(rE zb`ZIIKgf1E2)V$98>HGk8Eos0y!nprA#aRl?H&qN7ewAS%ytS4)pLHZ#lliC-!$BI z3$`%$yi}X)i{PE3Y_TBcN8trB*uSG}Mx@n@wk44CKz9W4^)8^S=b2yuSywJ9jx%?@0MGenUqX8^ zl&W>=kq~7@R~eL+ke~rObH==c$N*dfuDb8kvR#=8M%9L5Ga&bGsRP*a%!Dv$0}oo9 zFkDh?QZDG@`I05*m!(|wJC`QRRpZvMb54Q{+}opb684geQq!#oYe}r`#qNY3DoD%u z_kSn2RZw1=`7{CibH~{~&l0}E{q}$UO(;+54t{x&kP7{=JY2H(jzEtd8fmXV%8Tzu z+V%XmNc*oUsD9`lV~19}<$RIGew}pYA+nvVjI$q;WhpGWStEn9o19O<4*q?&rw71vCyBD>$pTif-PXEW=5X9KgE`!wV zXm0~DO>uGF(GCgFW$Z|2duz0V`E&cv#3-=5i@jQKG#EIs&w(;|u&>`%le`HSnI^Th z$MBHe_WGen*5X_H9cd4%@tu7P#>5@p*>42bTNG-p;|)|V3dOY!8E^N89!GqKwY~oE zGuKjx2vU^>)`Sv01lAzJuaC4hB?(_x)B~T`9zJG@{V9DLKW5m!RzX$a<5~6vP*pg6 zwjFH2%NcY$+qrJ8y@H=KgEw7Z?}`DKuU>A?B8|iCH`>1h-$m|5d)Htzzh#Ggxj*QU zJ$C3J|CNDSxjWzfOR+=d=MLE+{JDiioUjiH-hv??Tr1v3O#0m(&E}u5w@1*wC+tH| z`Tc&kLnX#+w(F#Qv6RJnoU#u_Pq}c)4o+qsc-p>8g}4U`?0rD0owfG>nXeEYe9qok z5ep!>YULCaH($5~6CybK`H1s&FmY|;Wp3KfsW7?Ryk&0^j_JpT=AZz&9Nx=o-?sbH zOjG|6UZxbA?{85AXZik)Jf|15HC<$@|`Ujt*q8aM^9jM-8i;uq+>Pu z+n`a7i7II?Q~l(y8L&dY;s|P2!CJ0X9DCq^%#?aJ^Zw-6AFF&MK2TGOcp$jEz}W;o zm0jF2))Aydo4DsWqDYqVy-Wv~hJR(CRz6{=1LC&7^6=%3K!04}Yt}gSqK8~q<2a5! zwQ8+{`c#{B4ziT~^Ew9%XY-xw96MFgBR*=Q1JlqJ_R}WE?-~e~kOV#TB6N+?F4Uhp z+|ly>FfcrlfQzphkS4!iyagbsaKj1!toK_FIo>0Ue9sR%*7%}9mLGG((pYuOafZgt zxxYJB5?^bxQ;yjv!mU$|zz}#pxZ>zRLty*sj!q$<{5}}}#7LLG=0Aou!aRoI&d$$0 zb|eMkO#)v!mP%QC^-IS`Bn>U8oOxDcyDP!j0t|5xc4tTA-rw$&eDPufUCwVnZo8cL z&R9n`5q`q$oGitaye_PuLRB38psKMfQ)Jg*c|6JapVFD&Ns=?ih%stq6K5xo(56lY zNad!^_l0Lgw!Ep6jD{B|Av2mef5g*~=?PG2;=L)n#)8@_|5UW|=-1&Wz@7WuQ|CoYsO_FPjee>Np{&&l zr_5)(aEAMn1zKs3*}!&6t~20DovCsSiNTW=(sZsiBv)|J=mJ~yVSXas zbro`VY=i8|#A51Gt4k+oiDg$-)Mo@iGdjLL`mavoX*SmrvPb`;(-o=0Xfny|nu4{4 zHPJQ97oYd9$u9KxJ?v6B*JtQ-HOsq(O97|D%rU5q?G;>q(wvf2$psz{eyozKwO=U0 zLe*QakP1*g=gHMwa{{G(>`+}-ZB%nmJ=bd(>|#M5xaR1U0;y52B%Y?|%kYvg4wY&9 z2d;~>{F~Fng*D@HzNwk3TM(Khu8r$ckZ;?#cA>k~Z0kxzyKZgkYKgfkq@BxxS-{iI zm49_X0MCmvYc+Nl_+Gl z?ymbP(6+r?UkAY$8%W_GR|1G;utI7J^2K1h`3e5>V3*q;McMeB>j6H{#oxPT z!c}*u>to|mUvNDw#nJ$rY3ehIF6}^XVWMEZUp3Sf<3}yiMf9{FaXl&6soA;VuC`!A zE1%-Jj7-(3t{XOCV_ZeD?!Mk!s55vsXFt^5GNv2hs)d(pGs1NxWP!3#5&m^Yy6Qt& zs<^$qlGsc3E74yweWZ)y5g(3nHKPLi{#Uk=_qHf7+c3&?JVE4H>Z#mp4hj>cLz)zyZF&TxgOptVq!;YwAJLT_lnKu_`>^Ux~& zEL%3qbt<^DZrIq_u0(Kjte@?gQ3gUlOL{}iDK!H*p&^s9k)Qcx@7WhPH+JDPBMIHddjj+lVMFn!01bgxI60`yseKIy7^qf{EjN zGxyE_h+w?>*jI9%9Ub_U{)xL5dMr=|-?wE2^A$@MJhj(Y}1qJn_L z$^lTO{0RhHU*2(Jy^Y>m=(b{qe5BC5C0ts_(_XvhOW4RECs_YhGI4?n)Ekh93^+1? zOzT>HAta^aT7m}#KoV+n4al2pQIYrJA>>{Kw142EDwF8w} zc$c_+i8K2go2O13^8YtMB|ab`v9@3I*)Y;uqe5@-q3@D}jL)*Xn8X&vA=HnQkWdQY zvL^8kDHaH;o2WIHzSU^g%U{Qlk8obA_h9P4)*vI#6nh5bu zHos|Nc_cXAG!ep|MOq>cnqN6Gx7F^S*{zr>%WB{pnGn|jzi@D|Eo zUqU`jk0uVpgL982nvw3}(ZnZ#0a?)A8}c37*)lAi|9v{~z0plChJ}>Dq2?d^ebfTp zxLFGKyn&f-;OJsl6N}u}SbAc3lo}h<7x<5#CGDyWUa@)^Njm8w|1=}%Jb3hYm7Js@ zDw1|e_WH;2JzJ7u0J?j`%$(8uF6delBTbBu3a}cayqCNmn+8 zdn%B`Q9YF>mX2LI_SA>-yYy%DV^K_2SK!L~)hT#DNAg!+W z97grVs55wxpJ$^Ai;1;?9-FVTIzEv+S9evp#=Ah z@t8|}md1G6mO7N+c+Hz&-d^MRmv(2Z<2+lXeLOtglSt}@YMMPq$g**e+hYj?%l+yvBx3>p~j#r0<~po>-o(WE7}L`J@=YmYeve&L$>*0M)W}syYVeM z)-CEo+F_cyM;ZCIi#%AUU1WV0d%(rYr!DrlAv_PG37#7unM*x;L3(9*21#4_MIvyv z%JyV}{GILT2J)Zfo}UnSeYvNI0xz%h^oFz9Do=-iVxuk=p1%S0jxsgloo6E`ww&;MDV>Gvv!{^klBiF57QzW% zBmeEB2R7j!vu0;J??Ei&=QHT3P^5FlQw1Ka}9Noaj$EWTzbHF+|W{M>WBd)(! z8r<8W*ltnP^Q9V#Qa4eKz$2jA0Ztf5Bt`7-HT$+8ePW^BAK2E!SZv`5=Kijsh1*e9d3qv zVK{50%zfdH-;;7MhO&H$*L?~OG znCzA!__@SnEY$XKUr#d3_CaYzx#Xb%*vk}FNjCaRk9kc@L5=le#3wP!gKp5GaC!yca~0%(s2Ryw}KgY=bVz_?5%2Jbo4MtB7AE z{3_#D1;48JRpSl1RNrwkph1P|l`E9zT{f4Sq2_Zxsj;K1e`>!FpA5F8dkq&K-@QiF z3pD~mLwsKJ4e{w79pXcQAA{0A2|u%6sDdxRKdso`2|serWzQSbGz32{PPUcBzhBcK M*?6P(YknsEKhXDVuK)l5 delta 46782 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 Dp$b*Q diff --git a/dist/dbr-9.6.31.standby.wasm.js b/dist/dbr-9.6.32.standby.wasm.js similarity index 100% rename from dist/dbr-9.6.31.standby.wasm.js rename to dist/dbr-9.6.32.standby.wasm.js diff --git a/dist/dbr-9.6.31.wasm b/dist/dbr-9.6.32.wasm similarity index 89% rename from dist/dbr-9.6.31.wasm rename to dist/dbr-9.6.32.wasm index 1210d5f92ac0342f82aef239962fccc0dccbc5b5..3d2b76cad79e4088f44d1c21be09e5d3f7094d5e 100644 GIT binary patch delta 100973 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%0A!C2GvDn=@#&)gdDnskMm{=%R9F4 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

    # zw%4RgQu~3_m9$tP)q&TXA;+cun0>abK&>7m!7})P`g4WUAglaCm0FR8TCJN>1CE?k z{!u71wh9G3lnRZ@a}vXzv7C^^aNtE7TR#-*AB#bKgZp{&J2f@@XSY2zeqNf8k};5Gf|PU^tO7W@>{f^nX9Gr2yUqcw^)N) zSH-;sTnHlZVQ(je7lh53lJL3XBKxj;VoM#_MqY_P8) zhd)7Qc$<83NJ=BczeyG%mrK1Oxm9OH3slJnU0R2J@?p8A(Ufa&N~1VQYor3ms@)nU zE0*j91Vu>K;-GH0(bQy89vRMYEl#xtr!tDuVXdah$~8EpQJh(8S@xA{quKwpR%!x{ z3f4t~9$6B{&WaXMD<8efX zq1rS}-f1*%#^%EtrMZ!esx>&33)$|1*5o7EG4mL8n+lxac2*9b2V91hE!Jp&}f>SC?8Pj03ZewL>y-Ym|fXtx`Pt z!&WtjHM9#`(I1M*Sd2QP;WnvbgmiIYlyp&IgtYq@3iru2sbxf-#R(e3gor$|EB~dV z#Ya(V;B_I?(e_nJxsiOUH8_=Focklu<(lZyaJ1Vc-__|fI7Ja0vqW(gkRP`*fw0mi zd@fCjkgmqb?65E^>2YI{^aUEvSD$M}#&Qi#X&9$lgha6>x+om&ChvTq88&LI(QIn0 z;cQ%tyYR44t-+~`;FvvX34%MKC3t#=v^JW(CRq_nwq_qn@W4)~6WUzqPL_-XeZNzx zYnuoQ1ty*9ILbuwF3AI{N8?>mcPw#>c1djkDjAsjrPKi*9lw;eMYD>FmZFFeV02qn zNz|L-^HtIlNbysZ)CRz_TiOswSZj$UtYN#@EMekTEMfPrq&`To;45gI<;4DVl;bX6 z{{!JkmxEP$XreCH&@GM9ov=rn%(j=&E!rEUtL&9tjxblw343{-)VpL>~HBcsn}+%Ru_@DA`_+?Uel(=*s|0nz4eEPaC~7UiKPy+Rj!#iOWDlH+8>=_T^Wo< zxDqv8xsr8dHX1y2M6yG&MMqdZEJ!&bxgt%kSToENv0;Yc#2FOIDG$@$|_15kCJ2vc>tu+I=x(Q7m- z`f69GakyP0?%aOZH*y+Q*=MU8B z+8xf;nED!1>kzjVR1&yhfh;KrYE+>^F;G|wLhc%rDG?NiGfL&K2Bj*DVr51{+)S~P z&wi59T@7doRVrY;xrX)Tl=b?*U>ciuO41wfXft)3^!HqplN{%BA75T?GEE#J^!Feg8 zK*hxUIEI;OgWuU`53ay;6z*AN^=KyJ&P&ZA3{TNSU#lBt7;J`U;b29S*4esIT8Akz zxpW@e3}E9zgblFClG<%%ZPF4=(kU$IxCu zmo7-nBdw@R6J5fhIg4C}Jbh8Jp}UU180oHRlOd%DfkZ1VGP}Y>^$TN*GohGTF=m-; zun}W`BlUg{cZ4+Z(C^TIUnetvm-_g$#vuyB*LQ zktC!h>n_6-9PS2X8r%|!OKLAiOn?|-HPP2{Xteu^)S_!R_2C>%PBc24Q;4xx8=G;$ z<3WW6y^K*?qNO%P6MYR=xx&;MhN#(W^|i%38;E9pn4%NusT4`$=QXKyL0AA~ax~KtIYh-4 z9tdMY10kvRH%r>}Z>bRojmOtxEI&FLv+>17&yPi!tB|5(%cL+_IvC+V67%VUdzi3d z>+QY%G015WPN50OjlU%!()q7>qIA!CXmq3Nn$lEhqAO@Ll?gl9Mtfr_-GTs*Wbt)Y z8s$2Mff{lFU(HoajJKhY7piQuG>5Sf7a4NsMjRs>BG&o_Bi8Rm#C(c7oEoWCQK_;) zhHSgR?1X#O6l^THeglJGG0D4$9ori6_Dx1>#Z9Swq*}LT5+|NSj+M2bTBfTj2q?A^GMO*25UnSoFUPy4WQPQ>{{W$<#r2 z{O$jm3lPE`Bp72Qa`d*8jFI`G8pI}q@IV`CruFVb`N6nqA|vidZ$!Fh752lz*;df) zve|OeNaQtaT!kag(v7P*z2($MOF68Gtzxm`_1Nxp{_aNib7q8(~7slECQPHp_YX*O+eVAf036dmijmzB9GH6|IOWvzGdEV#?n*VW#mq2NCsuA1Q5I`qT?seZ8fsl( zLkS%i=?G=JTT83fAmh9{S{k&pI^A^<%P%x^ z4Y4pmUbM?n-deg0oe@tO{_?6?%)OVVsP296}2LYDuNM(ItjzN!=4CH*FP;#vPnUG)$f$QQf7+ z!ulCODQ1??wpI-VYTOKGP(zK3n!+>lHarz-P*kJlT2PR~Jd|ppVX_QSP{#)nZ%nQhe`FFzRR zu;nmDg)6v}8KWk}%Y!iJo{0Y^cU;2V-0ckYHflBxlTgj(sNihUKS556)D`Sp6o-v3 zwaiooPBX}y1i4|PC!I-w3KaRbV!t=izaMQM53$dwgRh~@XE(_w^C54 zLB@Ur`oVTBtzu1dQG`~wPqFi{(SfoShPg0bHL;XdTf0n`4`X0)M+LlrugE%??puVB z*}jFQ0fj6;blW0~qHbHDJJq44Qc>H9iZ$X;_jMwjC}fk5&I+{}S=X>CrLCeh>s4;_ zs_6f;<6x*{{cDQV{;k<#vA>0Drpy^Q>v}kUVZXrHUnkW`@-R&B^^;jCyCus}#S>dv zks{R6s-mUDvIG*u;d6Mpyt_8AxfVgkhFS!jEmkoQs5wxUi6cc$gJ|ogsF|k75*4)i z^+t+35PL2s)Gvl^O_fuDAfz&MHdNo6D(6SqR53OnA#2tM)eT6NY(=V^g=E_`$u6d1 zHVJp)8ci~6gQCh=vXN;l*{f;M+&)Z`!zNs~6M*40k{dI;GLH1=a`^lNjGY=B)zl1} zMax zeU>m=m23l6NhDh^rp|ivU!!n@< z4Z?Y;2Ms_>l?h&AlTFx){nPpXCKH();L%9KIaQ`ab1F}XlswvScrwMMkrdq|h;SCg zN9$=s(%f=3jFt7=OyYM*ryPen!pTb2!yUALqs6pF&)cV_pmH#?W#Bx*35-a%*dj{Y zOOPL?_k-`!A*t^Q*!eQa4TC%YJ;5XXFS=w~RgI+0;*J=cjr9`#Kh-m4No^WdQNDnK`C`qm#=^(Wlan?k|`K2U}i*&|X z9K!(}wotEO$8heKWp5;!9{&kPtH*z4$#VNhG(GAQj#iKQoY$tNXMDoZ>KPx*D_P{c z4`#EGUWjxN+3c0+R_6(Cv_|55^3#zV=rOG@3H6xPyFS?;iLTZ}SF)p4;T%W|z4#js zUnY&)rLKpq*1KC7{U9Hv$f@=<_I8`S~E z|Ji_?-xT{+@$_sI_F~|>8@nhY;a?Y5Gh*qVM7t(hGeN!?-Sv5JXqcM{b+1L;7LX@%!;()U^K<1~j!i%r1RGnuaooEgPfpS6 zua+tu>d5^KcxCgwda{RGtZb<#KTq%PHfk*6YD2AJX)5og@Y`l`ksh#bOSzjqbYsba zEI()s(jSujt>w;KEy-*n-;1wD+sH!zcD7-0wQb}ZcsJ~PTX_};yxI;K1HRK_}Wyr0`kK7-V+^p3rK~4C3pj?;wbjTef_ebc&L2@2KR}Yc} z8v4y38QX=*AA{t3^@!~-Snf)%E42z9RAvp9YiQUrL*@D+uJE*>O{AqAzhwHI=MzRV`s8db)n&^Ea z|PcGhe9DRB*Ij4g7LiSZx1$_X*gep0e zcyVErc&Qo&H}nzWMQV_Z8o@*P4WkKDsk2D|9-WcptwLEqt8|T)amF64wapXqRtr}| zZas%Zc@ar}UY^WNRu(>wQUgwTQGV7yV_&ARO8P5ucie_nhL4wDH*sr}Gq1@ph6bvl zN#FUR^C;6g&G=A%CF1r3{6+7G1H{$0$~fFV`h&P8qct5=Dkfvuk4w~Fy(u4}wYy{* z6wQM~nI;cLZ0dA52M;rmHZx^Dg@zYh_xA+=Dx(94e6$=nb|r^JEK`ywqS{&QU@p$i~A3x4b`h zzAQVpybqTIo_uMmNB5D=6dg?x70`Ed9PCcAOnKl`*00>RnYq!S3!jKULRMXbZPH}=YrKl z-^n`)V00(%NPubvl*XOCxZi<`{#}qwg|f1X_rYZ3YI?xCpXU1ggWlbszhto2m=5|M zJmc*Q`WK$@HU)j}IBx@_892_n)&N}V3*Noyv(Y!{tyWyI!Tb#mjr5*+g>vx)Z@$ZO zioVW3oj&U9_(^Z+;z$Dh>A+9;*|VQgTFvz)Sa3bK$71h%+`j&0v3H<>KAV+{3Wc>O z3D0KTv&;*R2}{VUA9+`x(fU?m~afJ+-}nD zxc7VlEme>{Q$?S4!jq{dyf0h$)kbuIp}6l037RqfwZ}FUelV{oyUBrHydR-DCY<&D zl?29LxbF4i8R*5=Q4c4{f$QGJ=F?Q7aCCCRn*paB-W%S=91tJ8>1_!_aufA-l6-U1 z+sFk(gZ(5&eHl|%bL=U16LrV{$2;)$A>Q(y2WrA??@W|q;cc%4H~TlN@Le%*XUKe` zkAP}Jldl(iD!p#Px4qp$rkDKoBxiN!$ z=Cg>T9}lL={NM|nO+lPT^rP8~P?{9F68)CjT%9Or7^w`go zL;ZYT(jqJx=o?C}aNQo{dm5ilJ>Z*2gDI|+YWt&nKLcbu?)wieW6gRT0te-jg}xys z6tvybzEt}Be7|RXxEi;aOnuI`6rcIeLmX({K&z*$e8C4jWws)`;`14}%cRQ$pIf-h zeDvVOI=JnlPBP&|h&}aVKp(ST#v5k$cG5e^(h0u)Nb&as9}kdG`-+2k9DhusH$ z=6j9fK2?rx_VqS2`uk5fH-I62%}xD}9qO1pi#=dzpJj z8L{1WgX4B6L%#5>Hoy_L?MvTqIQxF`OCRpb?I(uaz6St??DnlfsO2l4!QlNCnapn< zoW%uqyvDI?U;B=Q%#McKBK7zBCOY0TU_F8>fx1rdxHd`WmjruL^h=ZdJ+gPNZz?1( zV4rV3Ty0(1=kvxi{L^Z+;EMZ9uU-AMBl2r`+TI z$U;!odF zTvgt1+`rd`2Ms@r_n)$+FGZnrg&t0jm`iF?@GRULELE0e`M1Y#$H*h1U&bx&X`(;F z6i*+Mq^@~`c<6yBAN%~njEGCj^B+n9gFmC>b3I=Tr93Y(??m}Q3eM6E_%uL zh4%ig+&og*-d_*kQhR?9K;4dhiOlKX=c%WQc3J*RQn!;Io?klnA5ddk-yJctBk~9( zyV22~9gbCy>^GzOkYWtI@oa+}eBJ%8TDdCnem{RBfFu38}hCi9!iytu4-!ul_Z_n{_ z99${Pn(KcKpE1P0i$?D&@fT2k_qP`LaczF7;xF}2ppUn%Sn6+ULSy)4g+D+3s+GRr z2uD1a2d@yJ%-<5D<=`^^+i{MsrSiL%n)fAHbk;kdzw&{{hG~2KoX_Fa~bm?VguS0UltUDex`87<1rz>@?v; zUFM%xr2YcnF=GLz!VbBZl++yHI*QG1}X9eT=Y zA<)Hyb(Qj`H!wGb{+L-OaM_C5nAjX8I;bpb9&pfG@Y`Aia2@)%vZH-qVl1LN_Xsq_ zvh39!fj#sJYVaWGbx&Xe^nKI4fg0*{?dP6>(ez#3`|b}|sKcDWeFFl5$M+4~#$r!- zWnf?g6ffn+;eq?1RVWP~4y;T}Sw@>T^DVm`15^;J{AJ|#X95}Nh`?o#|B7>t3p8x? zFNq>#FuK`;@WE~WZvre-nLaLXp5Ekt@r6J?>N{@Ve*)Ca=DGg_9tY_6QlLdrgnmF@ ziVNUisr02lV=)q3M>mHBhcgZ6(JCq0pDzUlgUJ0a2l}RJ^N-N^?BzgfzcwaHDpJ}o zHO2i(U?&|G&b%5hQy*>TivqLZjFU`!BhV3_yWR-IQpXJ6Obzso1r**1yic87?wS)g zZe>lEzN3Rd`s2BQpD>A%7v=|AVeAQ%=`o|?BNbDx^45|-Uki6hIk_tEng`z__XggJ zf#b3}2Ls38xa`<>f!C;mvZ1E}Q0Z?f^-l-NOn^sz4Lll$@Zi+|yiP4u`u-iTSV3lp zF=wR_%`DcEb0fn|UD#QI%MGeCJ4>)O@@umZVTwo0flJES$~SUOh8~Ud7at&XAQGo> z5n{{9*{+9QJovD3!9^L}c(vm_mRjY`|IVL zZUsR#8We zj-8ZO=fsd#zR4MA{1jslS+Xz3L9Tq01K+s{knXW?CCb-7Z}^M1*xo5gL~usiol#45A&x#k$is>G7Z8KB0#XUiQIgH#ErxdB8sP0fWi zJ6lh`M6tdEa})Sw=w;N7c9Hw=5V*jC*5*ihc^A}fZQ(1OWkw(L$y}+ z_sZ>u+=zcb?mhTKTuVA;ls}Z)m@@J6$lP~mEBVh;xrR8PjsH(>R|N0+PcE^6w;_{r zAE0QT&dBvqExu+Jc==4Z|D9a;>H16=`EKrH6MP(;E6M$xI<-4mn%gp~HV)b$^(&d3z!Dx?}SOVQD;dY~H8%>hMh75N_^@rO)JXrX_f1 zfFnzu%}XVpjmx99gU~B6^PbIX1Q!;{zUTA4r<;Tyyp{JndIvuvuK?hl8F}^18>qEL zA+OKKo6Bt=*)#L*hl7+SXXXXDm<>3hhB#&8+j)~Yt73%J7k?6f-DOr@e@;;r&B|-| zx^f~lf27{pyr4-z!+HfB>Njhow9UwWjDK@QqkR0UqpWCDupvMA_d_~e;~_fT0Kn

    =-RQ5=El1ol59oBQAJpkmfHU|}o$kOugkvS$Oj$U*;7Fq7 z&!=>{&71YQ??}ax*reUnQ-U6hjqFW6afj211@+(r#l9i40sgKjRZ#k#lbq=4}eJ^co?uR;P-$} z10DkG)DMLM90I)kfFB~f8n7eiegn83boK!@NBmyE*HEB6hbP>*vkQn{Bj8tL_!ZzJ zAnpd7je4pAYzz1$;8Td-1!w|+oq!inw>to*BI7RrlTeqR1FlDbwga94tOV?cblU(6 zAgQf@wa9o2;AN!SJOMwR1c#pi1^_n!K7fc%0h7=`DgaM|K?QIU2yO&)18xA!gb3FI zo&sD4cpu3}Ywq0n3K^dOB&f>cfVqIj0G|as3RnjWPxt{pPN5AP1{{nGj{x>T zTlgMu9lmP-cY)(fKqC?!0=y0htU*SxC=rKdwgoL%5BMe8jsb8apb@YD&;Kr~IjQE|l^7f`%$z5d^)dL{(d-S_u?{=XMKnd+{t^Qq^qr@BA9 z?rApnny1-HPrhJG7iBIN)0wNMi)l>PnWiCiHRXGjWw|uNEm)3V8j3I>bb-sJS3GmG zb(c%iblu|;8pBgf6W*}Sn$PiibY?VN7)Umk1W&ivk*1lIGu=nn%i8DsNYnR~JCU=s z(?IWS`TmCw`Z7>q-UH?@#KtV|U6K+kFVz*K}X^ z$8ddWk5lmbV2>gA{klgTetY$_@jFZXZtgh?*FCFh@jI>RLUyG2y{bxd(Cj^~o*{2W z^_jsV>>>Bs_^bUkx?kz{Nz;4PRJ*9p9r%5+54Fl_sL$>-J;O)XO?_|d`&I0#*kU%X z??0Mm*7WoqVPDlAsy%`dkJr?r#M;^oweRtDwd-pitv%AzxpqCCd|2Cv-wAzbPO>kJ z<*mMb@SD+(eut~y8~b&wJi?ZTKIboM8`)0Z4qxl^OY?qfPM_ba(|NyEzuxqDzpm#I z&?qmRPbtPy{X_M)CGYXCihr#Bx*GTFyXtSNzroe_)rYIUs{XR%%j!eb2a*1RYCA8&2+_y?mf)^~uMvrCwDR6h28WNjZin(b;T9d}&DR=?kJncedP%x~!yvwv&4WZVF@wR!!x ze`;)5^NI;GHEo&R^zcn3O+C(!vZrONuhye^_W4ibHJyHS`=%aOw`rPl^ znjgL4G^1(2{JbV(e&6P^=igzl!_7Y~TFlCt{4vdP*}FbqX4ja@GAylJbJ>A<{3gts zy_SZCcQviM?Zl>{rhNIrsVv9)MFFPd*Ilf+s;P#tADgEwHaT0@eC@Ke1_06Zu7@@4 z4!>jxmec(G%B}_=(eA$ESyR)L`%cI8tM|=fyP5~y|GS$lZXWpPM25TvAG;EHW$U); zUK+_r>a_X$<|BFR(dI8-|1iLoHtl#f&XzWR`|d`Dn>Bk!J&F}qlfR=M7pl?1A<1{17Fl)^tx~18-H1|04 z5o2F9<$N^=)yI5w8vClb`758%H0#r|nxFZ0mq6~V|H{!0`((-MMYYYJ|Erv39QN4< zT@8tR%LOoDc@H;Pzue}zi+Z@+-$u@v7|vp{dB-pHKK4km#?5SveUQA`%RblGhU5hS z_JPLUmxIHsZ}=IbTwBM61Q~|qGM|x6VK#!@mi#EpPT}lcS(U|xv3rwqv)BbJ^0q%_ zI6Z3S0*1ccPX3h5zHqarlOGqesRr6Utqsd&>^3>6lnq3(zLd?t({^QSt~;5mU;{Fk zl>e$_6+-H9VP(nRYgx7&&=*T3laKUe4~b9+^Px#G`-s+%NS;>5KGWE~WbIJaBg{UR zQ%`3ScE&$6v@c>X>a-J-e2D zCYRTf)dDTRBdGh4@ z*|L0ed2kCWGcf(gOROuBK`*h>G3gaAu|kGAPrl45JZd#Iwpxwv-eA4iu4LtQ_OS*y zX1vM1*Vy```z`huW2=+Nzq1;HZA*UlF59kaKd{@s*9J-N2P}-i<$b_B8U`2tkUeT3 z-T5ioDncv#7PmbKtlf>exiWeGL3TvXzF)UpF@qR{*M5Q}>}@Wyw|S4;c$nSB?oST+ znvF5oH_3ayXOrBamjERq(9DFnJKrx?RuttYkNcH9#oV9!0ke0woNQ`sl10C>%R!6D z+jZ>{hUMd2+ombPU~-2?%ajE(I`)xe9xaEhl(io1Calye9<93@BmX6=O%v<`IXPRq z(f~33Aiv7irmCyt#2jt32CzMqrvc=<xivsJfOYFk*de7;gEW>3m}m0BH=gPpWIWcKf*O=O$p{hg4xIf=|RI{PGP zcGJuNrUTwMld&7+iW0px`S*U>?HW6foHRhoD%KwL%dZ#5GLuWkYnuY>2RU+*_87S7 z?~}CSksN=C_C&bZ2)eZXme&#(t@)%hFV!sc-1SneJCf=tTBW@0Qf(_n(Rr#Cm$N5p z7hx!$PDZKCRLYWVr)W_O3q^Iow#vRUwcc!Za^_4esIh+}ubZWv69#d7I#0Vo19FeQ zS^LJn$*{a8enRFZId(ne+HoHCQL>HH{03VrJKv#=MY7-yfM>BB zv4ZZBYgcH~HQdJTRu3ER*6uPE>j6!kv_d-z`LkDQd-grrM;d!P+4p`eHyB^Imzi66zGd1wvC_B-7=BCG*B{N6mp5xY*(37NW_0&R z(z{V>X1IMWspZJsk83?BZp4s2SyMe9xJ>n~}ic-Sf#dqev~`_?Bv+~tiW%eQOL)~=JCcWS2{6%NUT zJJCyMneKm`Gtp=Pj&8(xjmpSKr%K6vA;{67Sg}P-LSA; z#hQ|H!}{ww`!G2&s`oM2kI9>J^n2XEk zLHfTS4U?A));IZpk!2_8?;GqM zsh_4_2v$;mnm$tlS$%wlejp6qwEZG|sIJ|r%U?Sc<|Ml`=viJlSsFvxEAmNcd=dJ9 z#R6c-ezT_)06SQ>)X0-{GxQU|BzD~$|5Z%`as3~sqyX2Y6^$UIBZ+!tB3JD%RArj`d$?f;*XE1ha zviyD>O5V?M_8R?RtU~#N`XctNeDXoPHu?>X%4KiyCE_}XyHfKT>3v8q!}HD$>3>1x z4G-xtH#*2Sev_*>nGLt*1&0__hATMJ)5@upXIE->nEV}OMln%Fje`% z9{nWTc6~>G5`~ioKGCOABjY~PL9<7s{e^x!aOdVP0G9`o^AG4@4N_>uAzcrn^2%TI zmyulftNsN0K56}?k74Y4dDZWz^L=vb@A@t;`%vEDHP&EygM7wM8dj`t(70do0UQEz zbD7^HzYH6o?^Vgw8HU9`4S$Uo>u@_gYMkL=zsT1Mj2qam^3+137F{(J8fE^qeyBnA z7M3vACjVM!{H#NLc@7K2*rMdVm~jq6wf=34Wo)N>w~f&YwIiiQSBz{>snLPmDlaWH zUPES|GL<>0%;=5G`^$`jAcUs2#==bPA<*j%ttNR+A7h#h{<*8KG0g}p)1k{jg#!^R zlcUxfKv0*tOqVN!-hnMkt{!NdWMto?$8w=mxXt~nO1oTZv|YG+_z_^~Kw`P&?uHoJ2w^<@C%;x0HON>uh z1ikS_;4vd>f>wX4d~d0-A!{CEtg(&Dw(8?XDOm)1l~yQ6%#0OPzv3e;#ek&&)fp@P zp$_B0uw7M}fdqPuVHeVmkubqCNWXT0XXxe+OzvD}4#zK@3-|HLf!<-g%Fh;jgtZ^iNkm%jkOJJ0P@YgYgj*-vb+r?mW7h zI_35bS3+x4hK#v7+4TwI7S4W2KL3nyw+6UQ*kXK%WYqJIhPA%G)T^`%04{7kL zIJ#z>*}IYhJ^XTDW%6l1Ki31Tv?P-s(Ao1ze=d)NA<>K5@zns>^X>Sv?6KsWa^B5j zeBkr5&IxI{g`J+i09{qly1 zydx?#Pvl*Zd^(X&=jMdMHtAN*<3*`PNN{=4tT4BO$O4vMzIFl6Kg}t0*lEKbz&cQ&p!t?ih0@J| z6jaxj+rR(5oqE4K)qKkskLgYJxsabx6tV<{>?_wi9khKN2D)4;`!9~w`(c52(EYj# zc_$W@A6&@eF;q5tKvS*@f{bH=+E(}GlkMU`(~jlK_(lAzvm;gzwOrrUn_N=C|^L8g<{QgU#s@XPLt+(~A6;=ATM8|Mo?E_>ezuK8)tWf6{ygTE^%zj%nVi2k0^q3S(*$ zycifWCc!%g{pQeoU|PWT)W-vIX@XZ~`WvcXTnB+1-Qqzj2=JonI|<&sa|zJuOsmx1 zp(O~P3eCR+&3}br{gAaKopqDn{KSa$MbQ#rvube z`CUC9&YqD28u*aBe&!a#8Z)6Rm&hFrylWWj z)Y8dl^d!u>c!4x0@d-sy%Wdy-B`h!5XE)}=+Twn9M;gL$v5;IiiD$DMdEX@dGf;HZ zB|H#<>1EpMDu6>gb**V@@Z~X5wf75P{+izo!kwJ75A1qckn!U;pMzzPkL_lLc=SG8(2Nf z&0ebjMEy7e*4GdqYn+Eef|yK!)0EtLIbX{1<@i~=N2CDH4`)NMO{)X8ynhzA&0GEP zZV(U{&Eifmx0Nq{oW+a01y)Q*a6GB--DqRRJt~HF#6k?RUl(m z@`6Bt{dfn04&YTFhhE87WD-hy8*JYs^Oh{|$XE14ELR@6lAqQl7j3=`qcLDNVx*RH zTj??hvJtCXA;*;2JS*FIVg*SoM$GwH;LKk0Be`NW?@*j;b+%nrx%s{u9Pz;-G`WG1 zpHWG=i2P(WugHracL6#w$hdQEQcbkKikE<{kH3m<&Vc=3ufym(NY@}OmRVQxob1ABqAjH1_`u{Zcs>+bcrEWPx6a{NfXDlDc&|_%=*O&&3z!Z9oyF(!0W2!d zxsKEFQzkSqZZyp4|dax$qjE)BXP+_%im@!l4fIO6AYj^5`EySa=;j%N<|T$^;jK=kfKohEYmzu zxl^eP@XQnq(o=cv0$u|^-o1d2>=DLe3^$euN)9CAVMTml6Z^W;u_W;Lg}Gu8&?+h)U&MQ$$Uhe;G~l=L&W#}~ z@N0~~9Dv#bD;_BEy})$yK)$ab+fBZKFlJqBbwGyAs$Gyh3YNvHt_>3p96j|IJ_OTT zB+|E;3BYoxW`|;KoB3m5;<1GGK@wo$x}a>nl}A`K`SPv&c!r^wO?)Df%bNI2NZ4XN z#z%5l%8Lu)ZA^P4wk#U023Q!y1*o_O>)(cG%Ip&d zJwUh=%ej3;kr8Wy0Unk-uecb+;F_vI?fXo^Hr1-%Y6EmcnRZKg2N2iEORWn4{87ZysE+{^drEPVSKUWBT}Yk0OhVr4)ghh?8NyiW%(m>9aU zw-||d1lJi#r|`j52{b(pxRq=6wonLa_{uf>voPU^;+P8# zgf}H_wKW$P#XXpQzP+L{f!&u^ipk~)m|Kfu{pE&7d9_hsJ|<+>xQNM&$M{)ZM@0`n zMW6l{pEJa1);qVEEDU%XKlH09kZKL zGGxyuiyrl;pejJT=;-55(vOk;Y5l`y0`>topS>-bFz+B9Xzy^YG`W904>X2SnzPGl zyCGIjM1pY$n+yi<`%tCpQ;$*$%C$LO+dv$LA5Fj?e$a#U{tpI`y-8U@K?a2*WMgCE zpvTtzF@XkKTS<1ZL*fKjOsY)_uD^pGDv#}_CpZS;%vV`1PzTM`Mb)m)JOQ|GAd*v9 zcf?3wtUKV1hn5tQ&u-ugd!;9&(KxGJhfFNk%5Z($ivOwJREk9Y3Pkd@xKfzr8~z_Sy&X zr9!1{tCLEztllb(0TF^$UI(odz5uKLVr45qXU817S!DdB?8#y|EeVyVSpJse4|P=K zmoLlfw|FdiAqS}6&PkYiGvf`d+8RgC6s^%rlCt)l=lAQ4rUxQ}YW}eILmRF6; z>mUbh=EFoT>1DZc@n-OcT=|d9&=5oNr_H<;Nw25*@qs)n^FG9cc&5gR<@~4l87TJY z)4Yl(tQ6ech39L?BM(5|YC?fj`4CHr(;^4PCY3}-iftkXs7^UqD#t~&$f>o@4b=lI zCTy_ymK#}la^Ew&U1kKvW-Nx9aPT{v!dxW_p5<-A#pW3EI@GU13xy~? z{8^r-lXi6Rvp~_1yyaOaVv)M3Q{fc{$vp8aZ-?A{PU3kE;0nnJ&++b9f+f%KX-K?V zczH#{>WHO2&N@ylH36&MYF|JYOWdhk>(S!0#8Qsk!rKLJ*Yklh5p0E0Keuk-CxwCO zh?rBJkqF85ueb1?Zj_@YWaablxJBeS&tv@`lMg)4+hm1@!N-gBD%YNdNq1sUBR(cS zc%FCjqf6yz0B?|mFYpdtWDp0z?Z_8+FQ819ypj%b{R_MqbT;v?d^ro<{vtnlNV=j% zEEYtx2r|T{SQ1D8ydlk+%$v2i_o&-Q(H$WR7(d~IT=pXTu_3wXMLwqSBWx}Jov;$n zy8V`qR)v~OJ41+x5-g~@2%L`#7@P-?ausabu8|e|GW9YsS56W->s*6=1-H)^z zr6>@i0$L(A7U>bBC7|%gUV;zqadla!=l#jFn(mlxU zPATqtAl>H$Avc0Eh3ysaIZQx$1j9WS=_1^phh+&&jh&C%YjHaf=^CW4yX_+xiP!~5 z4Anm#h>HOH2!Idb2;1`jArh9@{()`{j_D!bfC6mSFlaO$dyzNML37E_R+u_r zdE8dsqXP-Fc>U%UVK#R(^@KIBoln8p|)y?!7FsZODI8r26a^C{~OOs7jR_ZaaKFUB9ti0mFzVr*SWF)iBpcaBFRPaqtNC{s@zDY z+{Lf)7g#h|v5k)P&%+*ebF2Xw$7G+PvM+J6 zL8ejp{TtwV7{PWv+MOyaFWb)FMuh2z9g2eMckpFcJib#I^z}P=Z5b)uM9o$u#JA79 zk6Ex*u(1kpNtmHF6GQU#ojmXOT;NNttq%?&Y6+|yLSt|N=9XIkg*6v0Qqm6WmC!nX zmF;mkCj?C?5vv9qxRqP4N+bZ^u2LB|U^IXJCj3)*(!Gms>wv2ML;}{I zYR>Wy8alpf(rAIdz63Jqx%_n(*mqcV-OaOd(+^PEc8$Q;4KOI+vmCdZw}nC8&|6ze zXt!WDJQHF0@^0QaUy)Txswh1e=7rLO!!rC9AA@2IZ}BdfVS63=^x2sp3;{BL8W)!9 z-crt;-EZ-$QSOw#^S(%K`#bO0RZRdi&w4m z`e7M*n^%Tu$BtXrSjcsr4SSoHgfURWX?blo0(k{=o6Fzk=b*x#w|Rd^lDs|GXNWp| zK;}Z1o*qYxjyz`%&(04qWyqc zsispx#^rbUt&`Dl&nhfVDUMd})CIXl&3=wXKIdKD-5Ua(7hAo}>2k_= z(YCQln@@}oD`1@kr_C7Pd)QtIfWjMzJF+VTc(i#L)`Jprqqj<1OH~jRVV!9~(@<4_ zb#2h{_hE`^E`;Q%M zOb_jBG}JP*m{su~Ydm36$irzZL#s*;ZPi|02}IhymscsMRau==L-SQ>E8%qqB*U`r z`@DOR1Hf@8a1?;$R+ZDIT=+iEu5kc17F$Fuqe_Xr|2VQO$~ArlI@$L=C&$!?f25$) z!RnP7id^>(&PO`^kGHzF>c4~4<3G0iVj4>4z)jjRp6+N>Eub_$;HAeY!crt}rtHu_ zy*X6zGDuu{0BI!x0SY()qx1$8MiyeY6F%TkFpv~kLw5Qc!iEnXgdLU((L5mA`~mO6 zot*t2z+DGa-p4C+VodfvUa2mo>{CwQ`}gslWlC;SThmG45~pd!eB6`;hH?9c9FeT@ z-VYTEdgVhN>+TeD=$BOOLdAff<~i(?c<2IzBkS=?dV{7(V-Cy0k9a-A&O9Vh_<^cj zAU_3=xEm$HQhdx$D1vt>5sLtQ00@sY5cJs-#83wW!WNl~`3pnoMh-B-GY((LA#C+yD;C-e;VD}BiIbvD^V_ClwD76ZXuZNtwJM+dl*i#Z_=tpK zNPhe&@9IxOm7EeKpYhzBP{LjpPHnuS5s&R5H4(J=89(Ew{{}shnE>{>-^9K?1wLX# z>#&Cai@;u=Zh%IkHZhjKT}f(J$Zk$OL!0)7R@b_%VY#UsHYZ&0-(ZaHYS$+O|IZO2 zDX`PgNP)s3`%@DEiO2SsZWY2#4a{Zh5D+cBR=U<>XvcI({h%!zCUOe8{OAA~pP?`G z3)z!aT3xVcwix7vh*ALu3uC$9j)Vwu=cPO^+8z%`ov%bnSkr~z`#J9rcf4@D6*dM* zu|gARTvP!OA=!C9e6%4sd_S+Kg7<*7y~A~|8AzcGG$fS2t__wVV!KaJ8as!c4Ua`F ziEZfGU?-35hx84}o%?w$T*B_-$^2}D7rN2v1iu)P2xbqv(hXFL$j)EzHlbY0GH*Ab zWu5{!uf9m@j$oYfml-$dje7Hc7dX!YDWNzL0cI; zX{V2dN&!C36Y%i3+g#x#!vOQn#Xy|(1M^V6DO#xazvLBl&V8&8G!|@{07KARDzBr} zhqPx^0e%OoW6Rx8+5_xPRe&X=V2}8UXBXx{A1HS;_qGadQ;h0cenLm(vqv zw0OV-{9>mD%+LEhA5si7!F2OJVc+Hh{w=-@~F0$$8)Np1~-JVyCK+ zL@DU}dp`YKSkCoW98ea;FcG^hNbw_p2)lxKXtiY3)BZZ;+Kto5fJ?(5PfeRVF9cb@ zmpD1YSRvcj~)LEtg%(_>^u*R}S4u&#w* z88j)3xn*sEsMy4kcN{^eL|E=W!qEO11~}tyyagAN~Uz8ED=@%Z$ zhAS)(i&;oAv7SiGSQqFAhkoImd6@Q2Wb9WSEh@G$(E$Rh!I5!AfeRb4Gxm%CVdu(| ze&r+KoLKcM@0cI4dO+>%1DOvdh^>_t4I)>5_N%f$Gk@cg`Z@8e8dfedM~wi{ zDm4NDj#i}ABd8HLa}BkCVqGJ0%WoWqC#Z~k|2IAixKsW+FT5C`P5@mN#H@hpMFSMg zi%2Mi&3OP@F^x=l@QF*%vmmW2?bHjB%4(mUww?*RLPgpl7bq*9iD2I>E*Vg+T)J5ep2&)pDisIssT#!ivEVi^yMp=eg~OR^WO&8O!H%rB+gv z!dU2FP&QhPE~ybEs`s=#cU$aI8u&3oUUH>~v+$C;#NP_hwF>%#F5(Q8Of)rO$jfV) zXa^{*WunUvP#+AR-gpGVPJx>Wg4&Sa-tlFSY$1t6q96hZM*xM2N<jHr>pD$THAd-;3b;?vk4B`0KQE{i0+nB$Z#uY(JppVh ztH=l?Zc}2_-g7h;f;XKD986V4Oxm-wD~nO6oVG+F$imXgXCaAeIEu+rN$bf9Hp)|L@y-I z8shjfTTj}L3DcfFW=u0x({mIEnv!$na4OhjiXFiOCVzXwKx{HTyEt|Urr=lH37w7S z;*yH=H~}dNKOyav^kQ(d+|<0_ICQ2Qk^kbN5Uz)i%oCy;26&?h$F_lXeswhHH$fZ!PHuJ_BS1BWQE3}Y$|7}*ok~k~{TN?o| zQ^YAY!ZIK#;Y9P8b2QY2IyD4}4}J*S9`^zJ!W88fK?N8oAf77i3_#OOF*_=VHYd6JJd1(xJmZb&| zrwA_>4Iu-VI?^MGdi|j_xOXtPtva3S0Vf7*F0ty5&Jl_;%@LdG_jtrb8MK+Cnj-*V zMsT%wMO9Ih+|qPD$4i+W{E#Vt6Cs56@=~wZ4O$%J6S1>EQKU50$1@55s0MR@xt6JY zZ7?8cZWuPkr@&GJ)pJP^k>Frr8-u6C5V#u)0zGoUz=A}cx#$SpV$1=o=W{+$9>6&U z710LXACcesM7t3Yrx1#G!C3IPoVLjUBPcg81%TTG9yqd44lR*B3daeljMNr%x7lD< zxVlK1S!ZC>C{g=_%a zDr5t62ESWKz7`Mzi)g9g)i_9AEFyOR7EZRoi2H`dC_4tlWqD{HW6P{UNu@>N#;no? z;qg;JL6LcFLZUsAlKXhs*-mqglLVrC1p|je)2iY+STQRAMdU9=KA8^4w|Dr7-VoQp z9M{KD&&sh4$k#(6KN_;v2AuMXQspAO4>On_&z9|X=RAX`Kfvn6B1@Zw?T%oeD zZ|oRX$gacCre%n>(4CfNh&D)`%@A{;I`of-5lC){h@1lAewzn%SO5OnZ}oXNLPrQ! zzZqbDJ|ap)#QYrWKzgwrPzsO_LiORLfY2tm@{otUeU)b+gD@0IJ;jSJ$rfjW zk$s&l+O;ECG*O(12S-y(Wt)R{T675yXk>%qoGh08av**3 z|1wW>M+@C%`!oMrR?&8v!-9eFp%6PRi-HD7w*xM2SH06{k`u}c6&fda*-hk1_f z0|Iyo6@(Vxz9jI+MlH9hYX!)-M*vEpC;;HDa*}08iqf57byeVVssi?7sKU-dkz4hL zBL6!HRTyTb5eq@h6ve<+AkwVg$M!>UX*rsBlFv&hTb z1xbHwRwC&_t`9QdVKXQnorORyj5)ndYCe-(5F)8wQzj#VIFE*b7CQYx7X$EBeQ!&& zsTGDvK)f=8`ptz#ulxgOkk%3r<na^!Ko17JBr15aoQ(Dctjj8xo}fR1Z;nwRgkc^@PxUByh{c0 z)DrRR35ZinMVcyKIE6GS%aKHl2MA6ZZrvxE`=Oo2IDNzHisy_ zx3&eLh^@9y(AyoB7@Lc2conn(#BT9z!Op`8(3p6s)CqG9rNUf8D$Lb(5%0vp%<=jO z@8wT1QOOEqySP}83U>`6-1V8b*w*LRa94PQ5a^n7OrWb1;z~yY%l{DK`eGZ=5h1RJ z+lX7wQOE9VMueSj@9jvk25RG+eyNjpOEx2XWQKVNLHqd>z=o5Ifq6#w^P$nvR<=cBYCagGx_offp-B%|1^rIt;6wcX29cHAfuIdUgxfOJp*g6p^iYkO?UyP#% zULQlZc(Vas@K7R4+KM%JvCS)O#Vdw)x$Yc5{#q{U2#_q7FLe|a4%vRzQOv^K_zH0Y z-s!ZzLVSeewMy|wUSIP?X0`qIqrZLSt(`E~_shoX^D#G({>z zZoM^?&OkATZY|Ft3W0)7JEK!)FJ}R+ltWr3)=8MpWU2c~*Uk#ew$xq;W=#be39>L0 zoZ|LA7g@$M1YnbMavI@>SQ^MvC}}3W@4*M21fT~8xO!>hA!Y@I6_SEammr`jZ8Tky zaD@!6(#D{CRX*&bm2MpMhK3xl7r7~f0?68^|;%?GSKG#iDmBB?)5Np|!XUemk z_6Mt>1Me+)Yj=??yL1=sZs=wVr~@Fx+GLtP6k7Sv%mnGvB4jX^i@{p~Wb%CqNv1NS3bkrpxZXgH1$Qsow!Tfz{f#cx&9=ZNRk(-TUABgfNG7H!U zLPtqFGt@K01e*O+Y#V};oZ=#ejZ+}}h=_9rB5)j$hLT}9uLrDl(TLSH1g!$OEmA z%(RV5>CS14XcliI8FifKAm6AG)qVcFU2>_a3HqsBKebB{KF+{k^8POjO#jn?RSXcl ze{4eyV;(b4LMQP2P>Xce9GhhMn_~^Mm9KgS8;ci_VKrk@49++VCr0}% z4c4S_ie@m2vIgj-0A*aM6RXwdl_C4`BeIrD_e zOfi=@whA)w#s?%7@#rw}FDj_uNH9IXW+FX^55*xkvIShjtT=wA0tpJ}hPFq0eB9g2X zEgbACYUP=|M2@_xFC^ukBW_k2U|Gb5vee8AFpv~;Lj5)o)X5@%{4)A)Jf(Z&* zSY<&AtNgRJS|$aE{E=Dapz*u=iNp{R0BO#f)6!f#J+wFtEv|+Z#V##1qqkyhI6z9; z67k&r;_NmlsHy&7c(p1>;*AQ%<=wr(16x3Y{{M{g|5^V9s(&m;t7ZWs)od0ud)ogq zNVOgCzX+)`KPzrjQ5DB5ZM0=AqAhFjC(;V)4LAg`43o~6D8F@znGth=;BLig;#tSX z(im-(76N{D-p}V3hasEJ}0Ga;VHB)_&UAuiM=ir;`TMr4y$Co0+#g9bN_5I^mjh-2>!8y>XHuZ#d_ zwLOVF(;mhpb)s4)59Y&lq76XG zF5Vg}%DO-&!xo?AqsGw?P)hN6<>E`}Yt)L;O=0%zlpTf$y9jZ6Er=RwLDZD)DCZ3k zqfYp*MI7x*5N{ERw>VJqz`X(%LYqWKC8d=i+YA*0Mv%v9BRu~w`IX$rFdyVt`V4b* z88Fvl{#b}7us@LJICC6R2a*wbKR|1!ipq?Ets|R<3cPhv?jI^n>~(a8ZqkXNVmp2P zmpMS1nzH_Q(Ny#2h49#!q?;z`cBGnx@D02u4Wc>jCVy>ERu2;~p96Oo?EyJ)m>B$j zfbJ{9gw+UlGNLmLaN|r0*9s^IfTW3{5u}Tz?8ES4L&>-IX=FyiJ}^%MaA9QbHxM%B z!HXuH8x#T;Ek`B1eaAg49x4D`;L5@UIjevl9*{1PB$@=p_KD#bu+NED4%jbp>Lvq3 zj_!M5vF4s2Dmu|VZvh78hID}*;YXAhB3uzA7Ixw{e6ahm@kYKn@~pmxI>MyAuz(Dn zD2hqbBic<_htMq2YX~nOmRMOKqj3x+{eb*+K6LLkXOPANAqA)TT3k5;bKC^!QKk$U zQb#a7kiBELpK1j=Xy?<9+5E8m2P)*c~OO61Uh9NXIQpev**qyae&lAw$Z z7aeNzvG)K*M*cvxOjr&01<3=^Vx(flN2j=xL+*aO*?<#Qmsbo=J0tdJjxz#4Pp={l zjisCsm>L;tSlpw|h*lMdYqb6tt)GH1 zQoV>(NcB=0tm*PnSbKT=J~r$>mqlXK0Fm8gLTAgz?NTquwJ81`HtLJ)_d zxB%HFf4X34XE!0Y;=*yC%pESQi^yzuEO;e0;9w%Ytd=Tm&$oKuxO850VQ9eNAgcymTNW2=LNM` zS?}a*dkSiDQ2snpOi^CKv=5IE=#Rck<=1n;V|N7GC*;>lx%E=MJiJnp@<>HjueMBe zxvk>{yx%hA=Y#4DKc5%UAm!%^+uy;{Mh6LY%LAiC!LTrisCg7egY;TT!IMVeIi1T< zx3nEprAE7CkoiqITSbv6wOC|DuWIYQATb$W3Q7Tx120W8etfbaX@%Ra6~k*hW6kn z546g*JR^?HcKF1N&)fM=vzXq}Cb|g;&86e(J-T0xJ4Li>#PiGPJ!Pam z!N!SorO*?cr;mWOM(iiR^$9%oy>MpXkDOUGU{z1z#CAlzp|>X16IVEXMpjHb1&!2{ z06L&)vd|5D>#zJeh#2kR&2L!v3hbn=Cfs-~^M;}DsAJ+F^ z+m+HCjGVQpiBgz!7QFu;8@lW|9Ds<}I{gu@B)bSTcoOr#{V$;n|N*fJ*7muZP zCP9CKBeU8?XeM`z7DYYiC5g_Pu4rp_8-tFUS~!)qwoc+o41gob*s0>Ix(L=CF9B38 zqE<>u3gRx>fHd25e#ozj~Nzcw{8-s$e+micl>M zyT1U}g>*N)9$vqAVS(kTt49r0xG)~A!=YWYg?A0Al6Z`GArzorXhvSS;|$Rz(H|TD z5+7wDvB)=1$8D%LI*Nn;Ti0D{9Xft97`>cv|3G*Ye-`OHZU>_64iX3yc=FrMEAa3=86D2USy-^sZ$us?jsNNdPm#o1W-g z>@)x`EN>hm`sUIzh&iCA6GZ`5M`4e6{qY!4UW%vFZNhByNX;Hw(sW9894pFurAuOA z!pD}vzBwepv3X`3gGO^rOzbc(rHb#2#ZFK7 z_HlyV)!ccUn2coQIE1Ezy%olZD-xq@f|w0ZTs=W_{_oAcIsxIO0r~X=(Z|6{LX;loiu1BD zHy{!Duz*B3m+PMfiVDj|&PAkDSiXHO>>st^q4+wmNUgf`o+sMig;MEFbPDDn%~JL~ zPqc@1>YUtwS&OR|$)YC{F+V}02j1q(dFP2)wFol@S!$QY1BC8zFNq|~4VoCdPFM-@ z7~mB&>gp)($N5pGr}IS*Z*D;oNtEYqlat3|2jRZ+MQvCu7WfGaXwW6z1$e$#iJ9Cs zQS6OI$hLDlmd+_sJfC}k=#+t|+E^wS?;=f|CPDU=3k1Cn^1Tbhxrlt~dm;RwVL9hQ zak`Ua%P%h!HG;ewpzAIdiSBOIG5AR0A~6z?I8R+9+Kxh=Bl96Eoi{5HGLg;&4F>P7 zMYjTvf-1xrY>FNd&%mO9kT?lRqR%SrS{~pW!|HOe=!X$ZzE}(@2oV>`p%+$w4W)LA zOYQxnLCWnHi{rhH21qO@mJr!Kr5Tb^8kTlKG_n%;d_r{0UZP_Z(18Kg0p`0nO-Awg zB~q&wHH~ckhAzOMF!lkkG*tk(Y6fH@%%6w`3W}Zf{-7|ceQms*B1gVgj~Ii1j5LS} zB>fsh`!cBMF1*y0)rUN8CNzOhB!bJ~{n&%SLxZ+8IA}mAU(g^%`UB=$WyFACdnG?_ z5UaIXz)o!zmO2rgz~oZWd{2kj0=_Vveg+q)&1)EofL9L126zB3x|Xk8Dnn(WSn( zMZE~95%dxa#7Khi;mwQSAoW&YgH-QW{%MA|56#?tnYf%~$=sP@7$T-Hi8G)GbyQLc z7BD0=&8u7+?~monxidvpBSsoJI#TuOOSgSkz1Mt=I%DdlMUUZZUiv?FC_LsYpjZg; z0#0hC(m7iC0y)Yw6gIvTfb9bHSp+8}jo1T3rZNlyGV5{`;??_dahb@(Tg&_fnfXQacBbSR&BDWxuLP+qAOYkr(B$f+IK=m9$cnUlV@TX2Z8F3BmqFq31yf@ML>!1h zz@QYfGXGi}l)W28%{kbKLo7gl44#VPwXE2>O0xx+$&cZ<92yPNv!aoxoi2qdu!;NV zBZg3#=?o4HsuD3#)vk#cJu!GA)zN2(0Pnjbw z1xWrnM|4K=?Hn;ROdm#p8cc`YyONV*`drZ#EU`P8Tr~vE`{s&ajUo60N+GC)xd|>t z!gG4BEPb4Vc;nj`3TB3(KU9n?#6RGJIBOiP-4YaaBDqtDQ$oAPgy9NAr2UX7DR@Ca zPfri34jsY5J6LH15F2&DMklfh-W7YEo{}#6^@KUkd9yu=QRHr_4JBTL5-d)Wdn@bE znKnc@$JNS$neVOir#|Aq%&Ca#p&N4#AVHd+<2l7Bv4uw?bmY&|I#fd9NX`-y$mzPY z(sjBVe2qB42Mb1l22i`>8W9f#&;l_}djDh`@$1)!3%UdpHc=*gD-^kATiB3%nBayO zD7!O#TL_l~Nyt9)J~`o9M6(9u+-pVqp@?@>3K;avEDXkyH_X<3vJ-Z$tAG~N4uCB3IkAV4T7KQDQ2}1`dfT({uSDFDG0&o#B3zmrso%}77KPtIrnOLaNrwZNlslot0RXAmZ7|k}x zmsf~M_`qF{J4HtyKJPRB0TE-Xl7D$X{6){l7uoRgEcj|e_yiZe$p*@$Z|CUvFkA7% z;@l8hD(5~4%}^!z$={w7&-w7_v1eZtpT_Vdp?g2Wi@EWwpwGS(i$eH>)y!YTJ|0v| zmZwB=@_gMrM`zc|PlfvszUkQRjJ)ni;c<7t$2Vm!uRDSF_pJ81>Eo4^KD=rft-cg? z@6T$)~4p+zXlP^Zy-*a{gK49q{7S?`$Pm1>LuK1K=@AmHQY-_Ti zy?ZwE;loXI;wgd8Hht5<{eT-ISl-QDpZd}g$LEkj-Q9oJ@S(F$d%E`vych3{8uw#J zuC8^T!XGn$3UY3(J6C>L>n=lfmjUil*}Jd1SUvN|F8$qEa&lkyH%^r@Ij^6)*eTaW z{;i)o*18Q(e|H-^tLP8%c}!l?-#rk?VcQ*(yZXB=RZ^$kGG)MapV7MJT-)6NWicrD z{B3uUQ?DOjjsZpS6QSSCml9${)%8l>E z-IILd6!)_n7_i_>_uU@0PF9}lp33f!E6;V;-~+7hpX**$(0(5SlcG=TZX?9h@JTNc z2lz}&B8*Rzg83m|eY#NIeYHCWU;0X3?T&cxDX+g>kEL9lJoN_mNBC-QviFVd3>{xU z8#dov9Nt7+STm6X(ZVJU5HQY%00JXHJg)x zCUF>oT`fBqPR1 z%mysV1IfHy&bZ$_JoN;VbDjj~N%HUayMN~R{NtNz-RI%!pjD5!M~3i)+3Pn0v!r}t zvztCNYd-BBgl{D$PkqLn;lno)C|d#`8Q0-2L-B&oSKz!TH~;5#n%OlIghP>*-lx)o^cEu z;{C~7`CVf~r`RYc` z(}Y^rCq2~$2>SWWn9%OzJj*B?jWiO~1vlN=qjXRty;~7ha1R>!hx>;8ABV^pzm(8pN?uybBOA zVY3;jTSmQQod`redM`)6>-mCpmVMvz4DZ|tR>4^4258^q!bd6k zLpETi1|G`|R^A50hnEd{ZB^Z-Z-3q0@BBKeOg{CVr##dl{r*8u|JAWFdH6j~+p{|? zv4Tmf?4C{J(HasD7R1{xvD#bh$!7024tJXeJv!vWD>5Jbyx)0{)R4yTosu6D=6ku- z{Q>bjvJ8%4W%E$M8>Q6v!Q+0hjfj(pvINU@cW+Z^V=^Woeunm{1O0}ngaS< zfi_k0-M;|tcu zPsMy`tKG5gfayE_O5f6ciFS&U{Ysd~+!xODIs)~1g{0QicHc^8CzXbG3cS;PNos9uy{7%|Jhtj+W~Qc-RiT*ln)NY5#>Ymksi|po z1L-d_XQ>l#)x%%j*Mqy@=GF?-CbvQ{b?x<9vv*B(Q`2n-;84Fj=DNEs&MU>QD6wxr zYqCE@fLr74lSfX+q*|H=ur7op#3tnB(=jzIbps8t!do}cfKELfGul+MMo@V>EfOyt z(>jkuNTHDde*jry{ehaJ0%;@g^+#lC4VrQ;W`cq)JQu%b9gFAa`5Q5xnb0>6zZJ8} zT=k+AJvsXX!8{6!>X@~l1LSgq>mqG(H|A-@UV&qK`h4F7Rwt*=2$Fak;GV8LO-%v zwwq%Sp)mq~u4^OQX^l)R#uTFH;E8AN} zMIg3eVn<7k@-6+gqh$rc9Mj%USz57h$61{%%aAnfVtEZoP8Ul7l5S7Kq;F}_)0S7* zu{EBt{AxmatDD7y;FI+4=PVea{X>#^TE0;Jp}9RRtrf&(KK4B3fqSUGm!(-G9;e;= zS!yNCN04Xsv`fXfmHl}iIwjY9lG)GFLYYsu^|O3#!jVt)myS%s?_d~5X7snTsWl(( z#BHewm{XvCO6RLg>HK2sogErmUBpW|)!*VyW>X0`mDq`2r`Gn_23V>Gz@o5u3A@67 z9L4^Wm|dYOjkNsQhFOktVk&@ReY4QKNo3wx3Qk^{| z*n2?s(WV)nQSPe|9ccM5%UV+suE*Z{)Ib|! z)rS%z5ZQIvNJ}?upGn(i7W+U$qsCaqE5>=@c?Uml-W!&eBiOBe+k&CeC0h8Q1rK~e z_e`)9v2^M*%gPAlJKB7f~o*3oU%342K z*qFZdPRm29vYOOBV5x(rYWD+{TFL|R&H+od@*RmRvAnE&OpcZ0tctEx6!nGQ8B%s{LvV_5&vN4%`LlfMlay$XLiME|p** zD%8aO4gOHY^)Xu`F$MSGt-)#%<@XgHxbxouN9`?)qLj!{Q3t@y43`J9uI;HX&IeB^G{l8h*+j(jDE^aS%w>- zPD%HW<(jnFx!lr0+RQGuj59W=`?Te*S^1L0|88ljd`Ub0ZgH@xc>bcr&8lL=B}?Z< zFuDq>h=3xhLz@C%Gh8K@M4=uOUM(ba$r4aj&$(=QCH3J6#kIqP;ZKzSp2}75d7VjH z(ZDAAJr>L{CS0~OU~`Rim(lM%JVB3Mwj5%;!|E%R9SZK>n5&jAF;V3&)O7Q5Bpgk86PHD$w^i= z3+@b)Kvpmkt%zK{A4#zAXRQb(uj%{q_AJO(RS*Y(X;ro#Ui;rsinJk(= zUKCKu4?q&!QmP%mWU+pMa=sr)u>6>|pUDz^e+A!RJ9liJOeK+I{bs(7Ph^~KLMhv&af1+)O=2v5FlgFPt%Y;#G8rVyx{T-^Yw zE+edtsyl2L2P4cj8lQG9Yn@LagNHWnP+(6&_sK$=57`joBP&K&yDD?ZpCi!dc94N1 ztzHv$jfri$5zj@14FJs_C%cb^{-a^jKyf{ zIGn=kMY}$)8C<=ay)m(lv5r%IBvZy%Zz37@hP41m^Ea&*l^8@;RUlTgWYO}1DlzY@N+j=D)vAb`tu>OQ6?ADc5h0SBP=UIzP z9j2AxwRRMHIejpsxSnHwX<-UZ{;y1Y6<`X^`L9fjQ%pgXY+r3{i|+RBYE-OJLSFmU zde2m1BM++DlgWqQS*x-h_Odm_waScf6I{bWs#FSU(KGvn4^n3wX# zNG-qJPu4~V;y&^xYm}m_AaCumeyJS#ez!GR!9+i%*t!GB-eT)@Bq%O{9{kxlNx}2K z?_TR&B+q?mbCcowtSN{jK6#(DCX&_rtS@0t)P6AjMz8I+W+}=M`so2{HKb%giFGd$ zwYM#aetOVqX8Y7%ttS<=uc~=Vmf8RZ>wAV^r;TEJ0|+ct^dvQ-oxEc z%E+es)(1!m|FJ%zoFG^JvDS<_fqUb+K->?kuVK%)2Pm(MSL??Qtv}k8Wu$4k?Fy0^ z9^2bA*J0bF{8!#)mu<*@=Z#DF-@IV5oJVoJ!~cESZa-!x|8@CiQvWyaKyCR_9BpRZ z|IO>u;D66O*7Se#2DbX&a|3N{^NpHb{J8BuYdRz1zv}%&XPe|BA3UpX{VPH#r*odS z!Pm-}uT>|9d)d|?4-V&HdGIwq-Pp%=QBh9QMSX4P?ypnNOST3|^l7wE*Re?Qrpr`= zjOlOt6h2?s-}Vkx35N`@wZm#5SvU|^*+%I=TYa{9_GMcQWgCeeWcwS#Wo57}Lpel0 z8*F>rq?{)|ykZ-Gg~jqQw)RK@_{^4$A8LC&3cD^0x3$2`wCV`kVXQ^tl_Dd*{=H*N1kC>7-H zJGQ;bMY8K%+Z`m^-@|n-l1cBw;EVK)4{Tp3rb{+bG{T;=()E!|Q7)0Vk8MA(yekVW zesZKJwk>J+iERVs6sJG2J!(=e)2icba}?z=Daf$>h0Rr}Z7nwGOA~D0nUqRunQSXl zke>hC=3}Wc#bz>@DsAM;aj|ZiGS$}11T1tE1xO;M0i=TdG0oN^TDeNw&#@g+Vy@aS zB@X5(WMBikn>Nj{p%q`HkIqG{ny!Yg(`~-3fwdl9ra8ke({dWQ{?y)bv(GKtXfZgW z*-u}KRsE&QZM7A=q~Ei`*4g)`72)Or+N?7Mf5M{u<{|r4Y}cQ({z}_WcHHzl+{>k8 zL!K=iNm-t4GrGf^Z)`6rE9muan8~N zQog|Jr*Cey4Km{$e#ti50%a*3z1?PUvUN_Z=ZbaC3BTBmM542K>9DO22DkZ#Z6k4^ zl;3QJB9wdN+A-S#)7|iGT6!F}=`OoXspO{tq0#7yeTVz7BH8G(PAo4rX?@!zFRWDg_ z7~7=@cDyF=0u_RcU7nCc%l@>bD44qceI3sIGih_fb{tFZi8tZn8)=`Lww}>=HMH`c zEe*4UJ@;%MMj`EJvf}}=m~=7Q%duHE!v3=vFMn=C+nZXHIb=wZJ%P54vrjVfjTebK z$^Nu5hhoP7v$B_N^Vmxr$~r=7+ovn*Xq`Ito(g+Gh2K}l>=Z8mCZyZjD&Ny>>Gs|h z)ZYE`z7C{UGy5>;+zY`DA+6r`PwW< zAz3d)`bmBZd!jLQ`j3;OsgpPffBtQMmyJA|9CubFYD@cIwz1{7(@XBRw6|azaVMN9 z1cqwrzn-!`i2MLW9Vv_>(G9XS5a7)O^l?ad}Sy3&Y1OMXIEi(?q}Zm{4L{u$cb>KJ0<7w<%l zCpjMBC9q?q5*~n}s@su*6WY2RKeC}9IQOHheO^aBRKsnrW4*#p?Z{4jLMw}I@;h3v zVaC-IM>QN3Th)+6UdeEAf#Vy$me2S+cqxa;WXs9gqw_y~$Gw_Nil~@)bS)spFF3 zn`36LK=DIUc+0Q6gTwG)#K=H%ziSRTHQrH%3vSME{Kzgmev)Ha1b&4m_6x_OsMxMw zI6`cJxL%gyUrIL3&T`C&M0s^)vf8I~ro(1N`r}uQ+Y!l2&DtM{e#YK1B(X1^dgI%o zrKDt@qb*Lc&37C|Qa;~t0B7Vca2z%%1!U49$74ty&vhh|V~ZROgigtIq;lN~$$PmD zmVB4%IOZ+D57@A{rug0xfA|m?Xa`-2`%*x17dzZIs&KI*<^TJr$R&Vu7#m zSB2~&9(F0L@v~ez-g}BN^b)kAV|o669nFXk{|7|+(d36EjwJ9LUE)~CY*@;yqf3`M zW|^_sY9$<`fDT>h@KsZm&~ZOGE<~om%@CU_c#XN4g1_xUz!Wa=C9w7=T}(gU>*yAZ z6Mp;E@q!6ygWnwZDL_{Bn0SUi_~dI($Qa0O6d!Kpi8kWQSe6r+KToPT7K109>a2K1nROT zy@c+)a3o!3uUur1Yml|Y6rP6|4sutTQLb*-7HDZ5ZJwipT*v2t2cn9UgSCJP<^+vI2 z)$z8;iMLHo_O=OMItCSlA;dRf5bTL}kq&MYo313{qZw0peJBn`$FZZyg2u5vWh14H zW2sG|SI@ss*r$GGV0?P8B8%4GWZA&N4>?u=@nG9ZU^^&MNvCG8<-E}9HMBshG%m2jA!BzkIhu!Q4^qko_+>Eq) zv~z-j^w$_?F9oC1+E!;BT2#BU_v)Ix`p#eMVUa>wR8?~Otkqh5LNJ|-Zi&2`SYTZU|L`! zrz3qy^yya4q)24}8Pv`>Ibmyrt5xuU$92qvuV%Hu-Bx<1ofC8RugOb~1L_d{=5c3? z1^04&XXkHBaz25*IU(ms6M}obcgFcWl7?rUXOOtgIY*(V`}CX>5BAgK$qP930-bWf zxmt-?jK7G*tY$H3chUJ3{NUG%@F8Utu~$0Z$L7RJ=iCS-hgSR3xt=-C!5hx1N-n*6 z!KNp5lmzbI74BlR%9XA{D7oM978KO@&aqVO44av=1 z&nxJThBtS0wr$4|vm=9!;N+!rb8}a5M1$G9m^I%!gJo%~>_Vu_P!%S3LWXTCfm}$} zw&u3=e^j$Axt(O&njdt~LP(Xgdd#qG!4BQFJjk$Z1(0FeiXc_|K#pNs&Q9I7WsqUp z@*zWX=;PeBCLLT`BT(0WbTsZl`C&%t?Zioc>a3AwbdgB6g!E#IAyMqp2I-n|owN`# zOu7>?Oj-h|5?fb;H1CW~S^ya)ErJZu{arcfyk}jHG1Af=66rNYYVOHN*Y?s#NA#9S z@9D)BL#kwIABpt7K?*5IAq6RBN2@6>hO5%N2HuVyLiN z9EJ?LMLFa`dSw7NVeTN!gx-T?6NpRj6ho@y-64_*IWFPyg^<6Xv;u z%NIZj6Cgu$@hjYfF|YE^w$#bQmX{Fj6CZe3VSOK`*u#QYC{%OQZz`DWo8U z6r_+U`FXTN`n^F4DM%qhbm|yR+V4$HI_DjUbSESI;T=vo`hATw{R5fwfL?4dq)MLt zP$DfcNFfC&q#%V<$%YRl(q9cyNI?o2qVImhNuT(HlV)T{q~(lsbp|KxJ3%9jpD2@F z){8BMR7vwm5^1GD3Moh-1u3LTzMdqJ{$Y?p3R1`r9Wp)(l6q4KZO*ekm#Cca?<44t{$vY zcs)lV&4~l)%p6Yo_NR{}$mPnTwq>zFXQjkKbWa8Hn=?a4sQjkK1 z=u-8;n9_v3Aa|tCT!PviXm0v{zfvP$S?s? zm;fnEfK-Y4jby?O!vsiS0%V9jxr&?MTEi=QNWN6rC5$vHpOd!Uppo9#Ad{ZZi!Fv! zN#aI{w9Fud6r_-X6jCMQHcF(Y3{prz3K^muzUQQlLQeYf7KyZykxtpdNn32!NUv>| zNpI`L7DK8e?gxqVjzJ13NFfC&q)I;iK_b0tkU|Pl$Pj&O2Pd`ewJ2U8@&c42j47F^M$aAcYj9kb)Ev&%0w1>3V|{QjkK1 zXshF#G@=aMm)_Kh;zd(~5={+KG&RVDbaXj4!FyIS;qY16guOaXF(k$V=Oh#M874pq z6Ci~Nka!UOE}8I)VFIKu0Ww5W&vO(0xWIeh29;7}mod`5m7LUkRU_SYRVKZl7h4R8 z$Nn{mw89{T6r_-X6cP`@KPA#j1}UTCVdgZQ0ns-ko zosb}kEr!Hn|Gq>zF+q1=NI?oINFnhc{6`|4oS-`}q#%V1VHtpv?s(`L!JZWjBjWT4 zN5)qPAng|sr%gB_qT|?vV>|oP1~K6%Tcj6T0jZMmm^gjHu`gFAErkq|o`VdNUV~Ig zS4*5e;V53BlOBc)la@n7~uc1M@<}aPJ5K=fWq;OzJmCSBvkmlXiNedu_14D-B3ynBwjV5tpbhjv*lo)o4 z3aD_ub`vt}78#QhVZzo&xCz5sX(rTcEtyc3ohW!JAXU<-jbXyR8HvIzN+E@3LkiD^ zRLR;lh6%;95=9$43@JPtGDOF=MNdM}}^qZ$R>3dz`jEBgAZKAUC zpu&}102!|ABFKd_^ei`F>T{Y2PxX*Z_*v)4gH*}uJtY(N7$!gp6Ci~NkSaOYQ!-(n zVFIKu0Ww5qJHSv?(%jpOw9dac>7my( z(rLpa()((XC^qx6Bow=LxItQp9MP{qhDj$*&`-&RREc+lL0T~}NjUIL$S`Tfq$H4@ z7{N*NM!_vWdj3s`bXF2bCBpPw#QknICY{l1~iMjCG9k-Y1-N<#>(sl?;irY_nc$1*A$Qs0Qi2 zEjno_q`3Q#;_gGL^Gt%EPIq8h48tJoH zGU-vh*a}FMjQ&z0Ej36X1u3K;g;dGWFD26B1}UTUpC*;1!aR*@unU?|Z8 zLy8{wA~WH@Y;MBGL^Gjfj%>mWou>j)C4J{gCfqbkfD|S`3KJkz^21!ogjm;f1~!EM}x*dkup&+e2e z`xqmAe-iE$;HDGX@*;OU`RmtCzGDMS(aMCkJIccCwBAwv|=`&@V^!6!@bbUxBov#;L0jZKhZLJCsI5Pf)>lkPhkr!AvZt&m8+Wu#pyIO)wx8tK~0GAY%It$zFXGDPoR;iNxbjqA>yzn+^C>CcSx$(x+?>Mf0Q)oq#d zkX~#Bq)PVQkw_04q>zFXQjkKbq{ZJ7=@EkzQjkK1=CSr~6{`?s=iH)GfD)Yo zr05iWhY1@WkJqN5mrU_&8oJyZFHJ+Q>NpjUD%lkgZ%jk485Tea3m}CBkSb{s8E;HO zuNxLX3JV}Z^m=5xHVxe#9j}db{;|ay6K2(ex<)Wljr4G=MmpUolTP)BVk;n3lJAm8 zvpjlBgA}BYf)o<#v2haVG>_iWAO$I8h?d21(r*$t=>@k$`ZXhs_i)l}K8^H4zf8JP zFSY^_Bi$57xTU>4ldy(j|jr(y3liYz3rBejF^3W_b+<_Ufd_6{L_V zX*fh8o#r(h*sGHwH$<-v;iOxJa<{nqxJ(CtLgKx_Xo+-{K?*7A6f#7Qjpn2)-T39d5$r z_cRmUdtWx;N1dkvQYGXA$%LJT36R1BNMQn`N|X;J6LuLUKnfEeL-fZFxe3`H$14tD z!u?WVLgq2ugxQc`6LKN3j*`hu7(P`qp=Oq3!u_*4Pv$ws)9FjYgi7Ry$sJ_ago(fF zr({E7=K7^!LdALAgqx6I6EZF^6UI*CCOn?a{pFL{hQH+g#Yk7q=A^xdMjD$VlRngo z&CKwj*v4}uQsf9yNI|OlL}h0~V&*zmBK^!KJo_f3Af4a?Y5#egG<`vQU-rPx$Tdid zX81t5I+v67U8<4BFOx_YEYOS1gT!L*a)UJMYn?O)GEBM*GVB)lka+94+#t(_17jn{`n>AAV7Mb+0UThvDI;pJ^>2C%p zq#%V9q>yNxTP4z?1}UTH;Ht%U$m$kNI?oINFi0S=QoLTj$gE>*^q)1GDNeEaMBk`dD|yt z66rEVx}%JfjtOa`b<1VawR*96ka#I^S|ZIiNFfC&q#%V8=V+`qpKQv|*)0x@E6kY%!!tx?eF!*X+|t3n9a#J0ZiQC6Fp9 zykd~%{i2f=K!!<+AVc({KR9XUYrIY;-IPen7-{}ZPCDSWM(VyJlU~q^ErwJ{>%S$^ z3WF3@~_RfzD1rjS@R2ebT9sK5)vUi}YfPAyra6P9n`UNFfC&q#%V<$&@&W zbcsOPbvkl8BbSIo%+=md{Afr*qPo^)=FN4J6WioAqK#AyqP_p+UN3 zi%wb$874gp873`qTER%m zJ8;shCpFT}9c9uRdaytVZ6~BK0Ww5qJkL#dxi_!uwf&^Z&Sj*>`*G6A{Wa3y0GV{P zUTi6(N?sW#k*+aFAq6RAcYLkX)klq{)0K`npY*#EsXT&tDJPg z>l*3f!(`IkdaQuW zQbv0CO-`EewnqBsJ2L56z1UJnl?-@SB0Xo2LJCqyK?;d^@w*b~d4m*EkV1xN=6js9 z&j$$+>?hA&`Y_=w_C59fPYmLWTa5V5C!BcMc#U{ahD2PJQB4$I0jZJ<)ga!dRuleO z3K=Fo2N@>52C0%uszF>lp_=g5!;oR(a>x)}^BE`paALwQY^c>`ia~m9PYsa1J%y82 z&(cVbXGx^{eybshErnFcy)O;YEk|ky(qc$aw~(T4A<-D88Ki}!H3aESNKvvGPiv&XGcxHdz1UJnw5+od>1~4)QjkIlQb@F{vl8jw z1}UT{W?$R!zN5 zAq6RQ0l1P^_(jRVd($Rlwr0I8M((m+Q zOCj-{(mjcEtw9PYNFfC&BtF=^Cy}l*NFfC&BtF=^&q<$n!0R-_l&Fuju5D+et4)d8 zV5@IrA{%VQM5s1LRZ_Zy^;f)o-{ z*O)|Yu+_ktIFtS1>UO6=T7Hs|UUG8MIq@24&jg8dONCx+F{Db~N;F8!bycVbUVV5M7wWNk_U9H9!5vFOmMuNDuotX+|}T^wH`v>BL&1 z*kVZZs{x60QZ3=9g^+?2QjkKTUkym4pVtz8S^z0XAA#)ir$A_~`!Mi+jrFjiV z0Y|WyWzuam6Q5`OcU-zrGr6P|YNlN}ubGN^TFor2FV)Qb#k!f9OPHBE8yGcHi5#({ z0~xNFiA(iUvLRK{sG(6a70dLRxd|DrnT+MEX0A2l_i$_DL~Upv`-nukfswX(gp>Z> zQX|c6C6jK|i_P4|iv6LrM2Z|i3Mojp>!)Nx;$3bViL}Tdg%qSeFw!e+IO)G1<=%Fu zy+nF|k=E$INe?`sk$&-{OnOW&HuE?uc6CRI6gh$vQjng|PsxVFE89*IX_-L^DM(K; z(xaU?>9Wos6~oZ`muiKFp_!L!iDBq$NU{Z4^6xfJBNMK?*5IXX&S8L*iZT0Eu*VZPB!ELJHEaYJ+t3Ku-F> zAWr)IP>FOYBRxHolYaS{M%v|dne(+9 zJCX^=5hg$i6ZYz-WJBU5?>mwS`wSBxg$eta2{Yg2CJcI?_ZImdOO<_sk)HUNlYTx< zBYk4LO!~WCZ031Z?9dE}6gh$vQjlKIPsxT<$^Hz9w89{T6r>j!>2#Ho4w%5*V&3Nx z>1{^()90LY>=znogQ+s9T1R)_&+4GqZdnp3as(-)Af2F}k`1X6nkA7=tfMj<})RY!LVNZ}Tc_`}0l+=TvfG!v4EY{J(%Pv%0#(<(>`HA1NY0HHLiPP9)@4Z~3(z7=(;>Ed~ zxZ6^VIA)ndT)9;*{tl!{>Ml2k%eLvn6_8=#n~>oFLB@7=%Bf!^X?ff|2CtDw4=~cHYdC4EwHoR5wKC~3z1TaD_@sHAM0(sHg%qTag7gGC<NtTn-E*XEBo17v*|NcKIFL^>;7IC37OAcYj9knDRTiS(;<(H56M3Q|b+ zJrXCqvzL>$ERjf;GSVR>oYZkhBP~88lYXZcTL{U%N0La_8l;ed6jG2vvhR^3(sc$Y zq#%W4-y?C-GezFXl6{XP zk?uE0Aq6QU`yPpt?mL_K99tnssgOudFw)Kyob<*ejr6q@UFl#TG)U zWYZmqbV6O-Pay>sf^GMls50EHBwkRf^? zGD(}vE{IOjZhoaLNuPF?tOY1_+d1ivu^Q<(r%d{9z1TuXl`L{eq?-*=NI?oINFh~X ziIYgT8l;ed6f#8j#&Ob|1WsDvmPq$9(gY7D-R{#!Kl00@NAzL~AyqOzMIt?FkU|Pl zNI?pzlE|tO=`n*8QjkK1=nN#(N! zX;!gLngbaoT?QE@&4*OU3*8LT%so2kY{)QaE@X&$x^vRspOYMTL213P1Lr}79k>88 z?7&5k3u*V>+=RO?XeMmzE1Pgu=gEUq$&r4N3FizGAcYB#!URZ_ba+uR;k;o2q%Z+8 zL`^So6Atv}Zs8a#RrXCr+Ilc2J@<-6x@f3O`cN-64^kyXuS%pD^@RiHKnhYwK?;e_ zC;laoepX*N@N7sy3K^o6|Kg;ZUgxB@M@ppG^+B38ij)2_MkAf_hDk7r6@H|VzWuRG zO7&v%An~!tClYC)K?*5IAq6RXud?6(Ey}-=5x~b7HXtT7s;ek8;D}_AXV~wu0)#EKyOiyf)rAaLaJm-u0%Sm zf!?AZ1u0~Rj$6!0pIORDr>vAn7ckO-m7H|&Dvi{?S|(ko7n=vEl6Gq((maC{QjkIl zQb?7oSR;|HGDsl>DP)Ka`<9coSPN3I; z!jC#n9;8ZY7fL4VG)#aLCO`@kAXSoGD4DR!Fac7S02!jsZ{j9Y-^?p};C7?3GmbFQ z%m(;Vd5V+z&q}1L80k}IIqCJ^HPUa-%cKQ* zu@#Ui`Q?H{y3rto6r_-X6cS&5RY;`NAcYj9kRf`vf|KsP#7QHsN~F6OX_Kp*wCqof zlw6ldOY~wZAn~o+4TdahHBdHl#{6)-p&dcI%`!A;Y8@ z#f36(XQZSxCw=l! zjr75zGUw5G^erf#>}~mQLN=@i4-}46jG4R(@)8URLR>7uH zQjjiSq%FE~Qq!}Xv_lVxbQL2V*@Kh1dugP<_L4~p^kOqNvSM%amPnB!NFfF3_xdT> zkSZD2M-$2U)Qv2TP>L z5u}iU^jH0qY)F-K9wLz*GDsl>>0w4{d4-c6846Opshw^tn%bGhdQ*d(5^idc3u*gd z+=R;`G!s^glufAAc`~msp53D)6ObcJfD|VDp`VfssgkCnB@?b1CO`@kt}zpCjOHd3 zy}>K{!P`=0KVYPF-{GXcy{D08zb}(!Hqjk;N)r^j?gNPwIf4{Ykba?`k`1X6|A!Lk z)F!$ELkiNYCLlfeAtzn+F(<7UFOkk`0@8#GPP+Xwjr5}lGU+nC*v#du*!dGBQsf9y zNI|+nKP4Ly%Z!sG(v=1&q#(^>q`N0^(%GNOZn3e6aEtGo=xzZi+yWBIj8nM@-%Qg? zcy+pLLXpms`2*vblr5Qn9AN^aFky#&N;V{x8M7r5el$#g6ejFsCajymO&B*TxtH$Q zS-%Psa-hQVpJk9?6Y?Qp0tuTikDD-GG9l}v&XWTP6BZaI+(%B>gv?XA39})?PwZSs zn6SVw;Z8_5VPd&%LN+8!_&RLDBJM9+mKy$&{|6(zu#}U|TA`74Un!IRtrwdEiIvhk zi4-}4^sYe)DM%r)Qko}`-ZMz=8>Em}DgB0%4qMGhSFDvtzi0~5gKIhIr|UJ+)*EEf zubPTtb0D!&S|E`kN082GD%@f=q#%XFN@;;aN}7r`I5DTGaEok6tdwr#q|Z}Mn!Q;f zUBO5$9 z(sn;`(vNmaq&pbt^4*-Y=N^sJzE>vQuNRvGi9Zh8Cy^pYkp5zjLJCqy{BhVmiS&R$ zT4Inw;*Z1jbJE%e_-Ot8LlWsJM!Mt>C+&VjBefirNiXWf=0IX~vs5BQjv&2ckU|Pl zNUZmjN~D(!(n^CA5`P?ajFZ+l!RvHLNFu$Yz`z=H_u6= z$PuKIo9TWEDM%r)-gizS{k)m(r-HoULr%4^B zyI%qesubLUI2W2IV1mwcx@W}VH^^&NbI-EmBZvYE*^p0)s<}V2_e(rUL1<04N7+CY2i#90`90tcVo#k^_xspdlf<37W@{8#TNWGt@@0+DFX45=eoOR;3xV|cXy{KJIM9}UN3P! z2jU&XS>p9XAX4F6(zL|eoRqAOvEjh>&8r5rm~Y>eb+rQ0%`w`+=%D6lbrt8{XCLKK5;Kb?vYR2 zhd zvpXFTdycc@A~kPuBZ%L1lC~9_v&l1C-Ak3T^y*f33sd0iG5jQaS{!RPu9Jvp$|9(w zMFm)pF&3+5JLy>DZmk?3pBA~>;OG8nk-HUwyIw7FzhPGXB!hOkt1Bz%_?>RVMER50 zcDem+R^nIUUq`5b5Afe`1e}RTuafARp&&qvIXE9bK>uI+JYruC8HCf7Kgh={xlG9} zcb*B60XzKcPDS#{&+bM@X7H^I*s8J6tQUhAsr9Nf+3fl@3UQqyg4yL&T(1We*FqYx z$9*IMXeWNbMOV_>zqs)+);Y~+(^$J~$Ooc+g8|657r zF?S2pUD|Q?GDXQGyHB{=D_@Z4GF0IdQm4$_zM5)F^Wq{ct7IX*9b&(-AR_@2B8I_5+NJp4|q zFJN_L(HP1gv{sC1<4}KEv9eZb{|Z^37rx>3cEn(WDf#gETvz2JOfN##Mg-oxDax+O2F0C zpB5YNj0nV`ik8xNzvluAm2)@6)3z=SL&(~ICEfH+TI5I^f%r#e#CAuhR(8C$g&Iw* zLe#3B>hzPUp2lW`&07=jZ01RAGA-5PRzh?|s^?h~8pe$pp8Cv=>a{#a7|yLao-DRK zp{^&H1*V->-&04~OLo-vw2b^NA{hM)Np0XsMNahwo*GDYH}ljY!y0&sas8$ZJue}N zeZ*6he$&wNCW62dUo-9eCz^TMV(U{JZQg6^MAT;5MR4{Nexir$Z|>;;Fr1yp0>RX1 z=XqIC_R-HC^BiDc&v)>&X4_MPo-Z7x%T{tNB_fg5f6h~Ejy+(-o!4XRP^FjW-xfre z-!j0{h{ephJjl~B$}!u_;sq;+798W6O&h)DIfUp$#5CM<8_C__p0!9;jqqe6WYMD| zJ#|>Dj-jJHHIbV++S3)ehemsbnw4M3>9HO+=|0volj~hb^4{{S!Go*M+nyt=z8k#n zsSQ(lz3+)+kwstpz|+K(jN5_`$SfFK71x^TsfZl!3Z_QWMIQl@h2j14*+3FG_o=5j z+bF@UBTdJ7SWI3-K(B{{1wW^&#(7j`QiIPt@d`q+w4dOapNxp_C+6Z9G`gtyp63y+ z^MFMxT=HR(`?cpAM1s*e z{hh$xz z8ljw|Sp&RN9Y{SRyv>r~P0wU_J6jR-Hp=x!j4fax*HmvB*_Pog#~oXwdb6Xk65nKs zcRvgM_8`lfkx0oWhYin3Zoyk3-%g=0)ZJNwuX^r(F(vBdsW}`zh}hvvPsh&UlLuCRS@RXU?GB zDroXqZwJM6(MHDKwP>F}k`8}) z7a}wCm-iJUPu#-3yL9m_?_Sp8N8j;Iw=46=KM}s>2=&-B(zn_Li%%x`K4dYE`nrAB zViDY^OKsm=M2kIB+qX9sM}ODCcT347%Uk-EB2L!Rt$YKKxw4gSiQacQczm+Ht$m{$ zhphn{I;xro*W;Q^N?QBw;5Pi+#&?808FC->J*p%uH#e*jzz7))A{~!hJTjM)Kic`) zqYrBIn6C)&)vi9~i#5kCH{;2QM|AiQThQ0vwcMO;ifL)Wcru*(UeI?ySx%pN!dF#s zvMaxcE3>}3J+AuJlfHCiIhp^YuLhDC#FxNAJ{C1dGb7@lb_gyvAYdLVopb$3-!A1V zx~ZeDFjiSZ-sJCCWP^ zQE^@0_f=y%@Ypd2ss{XG2mSbc-&^>&ivIDjuM3M%*XmQ>IP~h|`wZW^%39Ju^*yhw zrQ=oKC9|@LjF{wGf*bFc>`P?zpZ2*=jZikxWmA2fu}vzod@R!MlrMeP*zS*}`w*CY z37s&*x6O=eKk=0>i5=E&j_()cD^iE}hVyE4i+gAaJkIVRukFpm_Y(Fe=lCAOMSAC8 z3!7`_`jWlu#taB5W6?MdHlQ3w#(=%%gp&Z=D5(T7K}Iic*%4irv1B*lbwLTGJA`@@HQ! zHfzGRpC%s!l5;D9H0C2NmI7-cTwCWH@_8^+^&axQjTZIgAz!y6W2+jb?ZDmTw07iFa@N#wyCc>4iJKer9De>2Tkd zs%)mO-1o(rcp&J93SvPcf+zj-f$so&w0Dc}H&yPD@e%&!m;-Hy@DGohgJv6rPM`qM z2IFDp9NI9_|G9$Q8>9Rc2x_`8+Fulha|e0-DvJT_^*@IM{oolKlj!$9i)4u3-v<6W z-|v4E$x*)_Q>-~D{^51lGmi(%R)WW?1Y!^lbEFHItffRFbZ8`UkwLOk{E6`NJDwnm-#C>R8=B4g^0|_fKR2_PV6{z33RpD{20jNd8LmPja#XOu?O)k72ls3r(rv z?_X_(IbdOV0nDJxc;C2F#>Z{v4BXkABz2f7xuscm@@SvF2^M^f7;2 zgfpb1#%L|01u|Jcw|7&MF;P7p^v{gNzGw_JOs*Cf3EZL|J>l=5u*?|NMIsX?km4u( zlh`N;Go@f6izj)TzSNPK{sVcZ6VTmceJ6h{#ZO8*`QNS@kEYf(Ef$rD|GN595o#90 z%_MUN%(Wb3*i-&T#>XO%q*mE%KjKQJCgMMfxr3<#xZ|HfGeX?oOvQCF5@F7@p$}#< zdLA0B>$EvFncXvgz@|;+V1zg&&5;_3!cf4oxDeKPVsHgZr$BV4w<5*|t3(DO6WB;9 z5~id@!e|!7GZ0AzclNu-TczUInSivqGVFmw2>b_H7rS)8r7;Fes*FgpqHhIVn)axP z3T6OqmlcOtU0vC9t|h!V-82lQ1RPzNVeAO}i=0L3K+qEjsxjN(hPpug z1tLdkRS3?OsB{d;cUwmVqDKT5N56q;#knK3J`%^pdEyxvt6QA;(B^ueMYE5>nXf*L z#+pQOpZ3?Q?#51#GTQ)P!tGA;pyO!4Bl&sA#i#vG_}Q~9QZr9GEMQ|-cC!o{d8(_w zn%|8KR6LBw{4~Rk%68PK5-hJWGA)jb@9J+lK91EHD%CzB&Ffkdnd*djPMC)$M-^nc zf+KNmz|jrH#<4)|KxmVi1l?hzCS%c(<)hOatfK7!M-Xd=52K&f&TBHl)h>VnDh^wg<>__C)mL?DOV;XLEoiX7Kz>Sz?7WnFKE`%R; z1wF3Tfkak?K37qss|^+?QCZQf7JRN}eYW7ZfMaAD>&}2Tva>t&#~|uvRdq({8X8E_ zjKG~5iXimt=EI^+%&gu%WWcs0_Ky>%V!VU?!j9g;i5_L_vuL>XZg?z)ZyV~3t?$5W zX8`vCO_X;L7G7unc~rpVDv1HU6HN+TV8EjJJt9Kd0(R|Y+L_Ghu@S17 z@uaW@;;KHByDLy_EY|}{be&y%fduwXJgMEy-&XOEA>I5beveiixZ6<}(xsUL%uTTp z1iy8YoNoR)Xaq&w{O%4~M`&RMTkIzEy}03N(LnUW>zRQXI@`h_Z~>O(%8Z3CX$J(X z#NFK=j7MK?2~@+7gf(*%gZ{sLcfU75%hyh3QGK;NWKMT~AH_u~yZe3P*_*wPiJNTr$qVxXy=DoRF=tRDiqT zDz;*yNqFOnSUmVmqf^H_OdVK15-!)#T`LjIJsD@m;sn$uyF{89+x9>*T$+`vT?qT%tyW+{n zE(qkTW$m&Ebutp}5#EjJ&~6JmM4XC;0dFFa0ED|n^Fu5F^GLXEB)V0UAMIjYMFu?Db~46$Ic9yWyV1S8mx4lM~+X9vQ6ZYkks^>_f; zY&a%>zQQyfp4*M_BHTHv-5Azy;<*lQVwDjCzYC(yag0NO2ZpQC29MW{WL~M&9~uH2 z9uH#S6xvOJ^Q7aU!MqC128Eej-AF_)e|5!9YWDI!(O5s53C{@4%h@o1cdVibv8yye z^>POy>w5Wpij(Z?z9AW@g&Z$?fWf*+z=? zuQq&fwM)e?Ff|%?(ls*8if%L3^|^xcw)FPbs2=Y6_#nXge>!^;@F9qC&9l$7R1hnNBhcD00k_ATBb~du?DM{&#h1vcW-H-bR(hWO8?ZXKpB26GIMg zKQ4u|=?Q%<1#3Va?T_-MlLh^qLRt#io$80!K42pwh3xJR#U_cI@9!*vnj;QyW({IW z9(2N~#$f5P4WV$0kB{jMdnK8hb z<3Opz1n66+S_)Y+0D5-{*);&uL^}C%fYa}0-H)nmk?yC-McVtI*QbyccR3%(qBJaY zilnMIjP|s@gVV4>LZvTtWq*t%%p{l9ks>x6Ox&R&^*wQle>qU>|pP+&~SxliS32kTWzZB!4 z`_%A+C!|!`Pacs{SOn{3h2aU9%pBnf&5c0~C;;_}C0?tC8TH^oMjo22`F2AKQ;^KK zFO)qYOU!yrv^c%l?F|OQZEs*bh=;W4|E^ACXoN0rUF*%6g;Z>bkSdziO7+C_wNfs| zJ00`dJeV9#qZ(+ISnnSE$sINZALj7$bcCB}krJUjm?5|E2O@ER!(_p_F`>J8LOU=v z#+WSr_ByQbra7U8q=;$7SZM;A(gbHx!p0|yy--oXPVj`OaVg*mxc$BeJKN+*&7U!c7>VwyppI;|r~Kn@7n8eV zjA^n8J&?Jdxo-;53Bcf15JSG7ff4~D&bNGe-$p|yXZ+QIwjE0rcf@*_{ z^dtlRK&`;vdh}1Q_>nLaS=(c1acUf7NQDz`T0(-jg}8H0#+T%<~v)pW@WbXRUX)>_IR+uHe>dr^976^AgujNM~*>s zQ?xs5ge^UKMsAn7XQA`9G#H*z);Vt&F&#lK(Wc%sRQfMf*x=l0PurCg-f0f=UTkLc|J3=Q6{$DxboMrx)-2*kpYci;GVp8XgWMW*>(@>z&wWk4_`&&(^mP)3 zft9}jD@P*#Imhe1&Fou!`KYsz6*e*TlyfJQ{w2RSkJ%u#hn{!-h~PUeIEPXT+>$?? z-4Y?xYpyt-;G~<2cFb~fQ72t*PPQ6VAdOKaXp0+@3pwPrr^_+>3R&GuVuO( z#BQtlXO624jFc)&q)wx;nj`mJwdIlrJ+24vF?WALZ*23pMb}_%v-+&)%Fo8W<>Kb9 za&Dh`M+;XwEBErUmv6*V)5C50!Mbd20bPWN{m zh?r!J`;y3bdr}LMa+m8qoR1lO7m|FZiUVC;%#MY0NoNXI80qf**t=aNcJo4$eGeJ- zO|DEWY!ub@Xm}d~G-z>G_Kdy^(_jCRj*9ab`OSqR@-Hc#n zkC$D8>vIRxinXpsu|ZF=*SoF)WNdKFz|PI04X!(3>-}qkYYR5-*Q>5P4zOw?SOzn7 zyG^cQ;Eozw@GAF?+WceJcRVO2f9>jG` zPfRF@#B|dqq=otBumRSvSPY3-2n7-ya4m~jv>5p&+2>sKA4-Jquu!>mA{&sY!-@3` zW{4TOE{)hb6R~y{v)P10Ls5?8aJ?sSNU4NsyJKPa44aw(r z3G;L<%zl~2O3B!LMYBOb(GWB>)$?I0vxgh=Z&99OrhKGW%F(b=A>-}F2~4fZ0XI^M zy{Y6(jqA27x`2LAqmqa=12L#Gm~23dxX`+;hPtwoMG1smel`JBb@vT!=298Ivs%H8qHdAO!PrXGq*c3F;SZ8;VF7 zBPEiLFSrygQLVnI9}8E&s@^}5{6kK zx%ZOG3yKpjxj17|B9@Y8Ea=OLy@nv#7F%2r=6U8BzUqZeE%$vPJ*SYjr?)dH7{rr17Z*sze*FofQ~4bf^5ufCTwFyEr=S8 zY-H6nSC(Sa#;S#$-#~jHI}5U7zrY^^I*{w>Yc5}*jc<&oKP=MkB54J01}`!*n?Zh3EyyH2DPTqL1qnagke0LZw&*Mm7X|*#iF&8 zMoLXWGcJvMVG;@)^blEN+6%A#`hqgBwe#3v$$Racba9D-Osc9WBmaf^oT!%3zVH#Oz6_#XXgG{#Q z>4+tl6_qVTWwX^m3BvcB9h+L3CX4Nh);1vkMvkxvx50qB*d{c|N(1_7u&)h-n3c9E zekGFMZ9326d@nrM2bM=p)pl>3oSQ4RVV=XQUjMXAo0S!WNMua7Ki`fFjCUyrU?xv*!W^v zm<+V@VH^4>`>ID5EZT2P#fEX?$$y23S!1+?4Q-tWI;#dhM~Z$HQhoPp%*q;Jb8}-$ zEb4)tsRgAQ!fl|&Q%Q}z5SW-C!M3FdA7DU?P8YK4Y3Z<6jYA?BbgVZ+!MBlj5GzDt zzooIPX^<08YN1^NWp6tAhK-!jfGtCCMiWdz^Xn6w))Is>gxpSsg>2?RG*~sw>VI23pIyh4} zoQ{(g%>qJM3U`?7X(qgkQ@H(_3+=gsYFTpuTl$}pg)M|_+&XncOQD6u&5qrBv# z@)6dX(7LG{2`9oXkr&>qZoE}EV})9`^bTPp4y9*w5blP8I=X{^o%{-NvZK(Co2s_x zBy35_d+8WvYJM(+strxWH=$cIHy}m%*GOt#;Vz&*)K?e^^c{VL*`~CYDllpCr!3(K z)Q({dUnY+X5OQrZX)r#gkm&=2liYM@w!$!OCfR!zdihM!VW3cCn@`X7KvkVjo*#%l zI$vEnP&k=@Gt;jO!-!A5SjF+5;}AawGt(EO>u@0t2_G0PJi)Wd!Whf86Ab)pa(cMn zLhURggw2*oN4W5Q^2G?DsRJ2UPyx&x{Cw4Vzi=c0l|K21aKj8$_T*@Rs^xy zc**(s!bU`&e-~1H5m{3qbfAUd&L?LQ$8v}b98Xy;v?6mC2uK!hhGM$VhuXrU z6ep5sx&?v=mf+k!|E^F#7L*GXvT~7-Tqno>_d-uxBJ}^il6WYNQMbxS-I#p26mnS4 zy8mOny8t!9FqV2`1!K|wneqR#0N{B8wfH?@Il8l&xk_kZ#4)7qYlNkkP5xXX9OBNX zyVnXwjkGgyeJhMz;3_$>UI_o!(8gri24Rzcj%L06#>`4cf^d~J+S6>|sn}Dl zRfnqr4wd~)R%{f4TrK%_qi_iY`068JxDi>_-z@B*C!4N*A}ps^OSdwtZ?+0Aa7)x4 zl|pI)PLkfU1A=Ie`qd7hr4b#~^p$V{Y5)34NX5!|_Uo5(RAIN!A(vZBM*NJaYOy-= zXW~;{DzxEhRqJoUP-8NV>r$;Qa!zT?A3}Y45Uuv(BWuP8;Awx=18z;J7Fo9pI?QRQ~!Hy-{U{}IHk4SCF zPKUdY`%%5*aDNZ^qwY>|4@ltlsYsy;W2{ah=bm)m zsxEW6gIrp5QuwsqFj1{m3+|WAV9|qKw;#s*>0a>Tq-v5;TR>TH&!_C&=5xP-*lvDz zhqMYazbsv{VwJ+t8JIsw7W&=m!IZlK?qT%oH5oD$o>NNR;>bU$=*VD6C9|d9fitmD!g&}&(+B7C#~wc-@)1CL-pOw zQ0vqp_cA0>i`=(pS-7HETq|;iQ1M^`cgtQZ^JomEN;jTG7o!SWt&MH%(RvOG8>!Nh z!E0s1F)((TE>;k_aza5?HE=IR8SZT8Zj>{}1V++>GgLtdC(HPW>ubKZK4Q9$?>b2&mTs<0N#OCFvxRyYpQ)zT6qSv)_^Ymc) z_O|X{=+4c`cJ45vW7OyvDWZ`-HaF}ZfFs{`h24Fidn^y50ni>F-R>UZ#Lc0NDJUb` zwPt*Upn=>rK*BU=kE=6_I4PIzuOdMGxV?KaJ1yGDJsqb-9pqrKDvqcQ>@zq+agnD13Tv_m4Q5{C97+ zLQCiB>psA}MlSSqw*%=Wce+)Mt0uqqL&|Dm?+28$&Qxe-O$zhl{$i>qDGgTO=f~^HJ0;*%1 z`@3vcH63fz1l%DR_etnd+swD1CpS61nq2?hJuY^+T{RdwfNyo*pJM&d_sY z?@Vt7Ib(C#$^3NBeHei^(mi2F_Hc%0tc5EhYCX?05b(Gh@o56u?N8Bjf*Lpv$e#IT z9HW0C=-G)Q_HFV#n`rRg1)kLom}x6odfYs>Sl!XtbIAetNq=7d&e@ylq?wE+< zZrHuWnU3CGE5F4g;qVpg5Sigh97rtpz*3h>uCr_DJT1BP>Yg%>lFYrK{`szF7zeif(#o4pw!9+Q)v3!o zGdQewa+Z7kM0c^j=Xsf)VSjyvXOI!__xC-X3>-MNZ}TiR;{5Td&pfx_^ViQj?Ts8E z9|r;*Scf!?8~}yU2Etoy^t}hSkj|1-2R(z(J#B|P_i$&`hYoq3 zgL`>$>ab^e3hw%{{WBw7>8w`AAMxzBLgDFq($fcE$w|*pEC9@>JTFi+=*6E{=(j(4 z`XMy`XV3B!)NKDn&zlLL`{-3qItskLM4XCxt2UFk6a5RShu9XMX%_J`*h4NShz-G| zf<#eC<(4h$ogwux?PSPr8LxIpG#cF0c)~b+)ZIWQEZh6I5Q~D zv*A>DL1Qt%na(BU5l3UujVpK987pZbu0d4ers9S~oCg23jdp`I!Jz**al+#!7_1F4&>~CRbo#Ew~#2CMW1~oPQhE*U|6a4+bpiP7|U=V{xeY^ z!B53b*u)wAsrV4b-B1sHCMG9v*T~ObiGJI)Bu4_BinJ*)3F~x2xZF|<6T_e!N#^F07jmQ~(Eirs zNLc_oa-`p#E9fQrrZ|?4KRo-uNj(l5Ap8n-cRk5P?~?wOCtU;&k2@tSJx-8U1WEOL z3E6AJJcI*g7CH?X+l3JXIZLnigufy~-I5z#2FAOkFVpuPrdO{q_3&Hil~-eUFB#;K z8gYBcG>_B;+nNVF(zo1R^*vESw?3iXBBQ>@Xn-Q!j?Xt02^*{@NR3~*4R-(=2BdL_ zRaXS1ZYBf+yO~;8DD~uw@0m3|%&IRv$r(SelTin3E}}G$W^vPq+CVDdr{P3pxW-89 zi@*FdwNpcBoHcct-42b&5dM+IAhfEv6y&&<$v-WmcHA_zRZEE&VJ6wvN_sX;Yat`^ z!_Z4K*!|?3%bZQdw3fcGX>lgBS-6cf6S~vhHqr$X?s;x+$EwCIj9~am*(QkWi5(>` zMD~)7(rFH@GrhAk0=uB+J4-d(EON37T6>l%b(I(-7~`;F5&t4i4Gj7!uAm#`^K3F113xQU1^{Q(14-{S^&0Z zGz?f)O6maxTHi%p^`3PV+gJt$$tc!HoebA$F(HyQ>G=4(*)qxqxRU)ZM82k678N zhbK$89I;=$I0aS3Eq?ba(toHr#BOjJHFYRDt9_C3Ha)6@sn)8O(60so0wb*|;Lz zdyf$)wk+=^NbT)e-f|Nazak#kK7HWN#;Lb2N8iXD_U#%hYjQybn;lu)3>vUJ|<0 z^ZmU(99AHU26(@NR{HE+USkHXgg#&FZH+2zEcRZ;1z@snr1vPm>yLUn0qM}A-fhr5 z?U;#lR)NK2#b_@*YmxN0_glK;K0XF~SghU{<85H!J|_*H@jiplif6oAxX;yxp7kz` ztwRR$Nmz%dw>;;?ojj~fp7%Du=Y;3IC#--6^QE+u5UEG=w11*C>2rXXnM!r-a7#L{Oz5Xw#G~i#dNRp;$QUa z@EUUJZ|_uOHnP^+lOliok9QP6=(4v7z`d8f0f5Puy|VyvuXwNF8fMN_Z+-&z4+)#( zrvNsZ}|pTsn|11=z|Jp*!v z84gv37s!1hepf8;yYfkad@J=MbF`tHuPXKB3@&A@8T)?;(Ej=BMt&{nP$XXmf~$!v zs`odLv4&Wy0=p$=*AO)Ot!1+nf!90BZuP#fJk1zbXHGVR%@R!g7@psn_>b&iA8h(zBZ7?l zLOT6Ip;<>Zbdx=5<2&R>6QFgLcaz@&J<__Dd_O>WFL^44NPce_OXIbqQ6G6kB1#R8 zeQhM82g^RZ*d~8v!hOcq`pf^}R;z#Ym+KjUnL3cAe{vv8e{G`MeQ|8K4t}k zGo5$v&7A5GWF)BNW97nF$be#6xUs0R^I6)S8X|~mq2$+bpt_ZSY6ErMb8<~0SE(+U zBqwozt6rAjZs3F}Opz@V%2Q?D$W@Z2ugVJ${q3vrJ<0HV)3{9D1Hip07jqZM$TyMA z7i8L-G69g^lJACNg_5`AG>-d1oi$JX+nzi9Q>ye?!le=wnq9EkN~u(gP|794R>)Rz>vFj< zrjXIgqm;C8YY`RYtH}E|g}dw1@OkfPgeyI9!mB+I!dWEeJ^9gi=I%I7sk?6Go8Ob0 z#Slw$h&4hTL@Ud66=|@dPAToVv4RNkOjbwJW|22n$Qi~dcCz)D>>^*Skc(oOmFp6e zMicanMVIKJYna*%-sias7*keim9NJ6&nQ=`VmM^aO1XcGPNfcKbrdJU`62Jibn-5F zzfPU3RxK0q$xY$zke>6^PF?2C80P~Y$b;jV>u^>_adOPd&5nk|vq~1pfe+;D7evq+=4e3hJyT2-!!)+z@iYF5cDVAhA?Bp24mMW~guHdZSd-aMAJRF}5ornFnuvb1OFrcETu zI$eLP!jaTyXR53hEx4BXtLqp`7p{wEUbRl2xh`$VO=;VHs6(vDiDy!sQ#X^9dc-On zVr5;#X!jJ?$4kRlbk};hL2Nvh>IjrX31pEE*UJsLNu+d}+#|-inrvO6vT32X&twlN z-XMo!I8{2F$~ex~8|0>F6;5SEp~e-mUGFNjZh+1k=44O6Izhxqc~RYkL0GYV%FeBceD|!GbwRKX@ef8N{3S!$8l|v z??Z0mH^oV>(t^@HjtAZTu|Bs9U2Yk%+$w+rN=J3cQZ~!IU<$c+Gou7amPMv*mfwz* zdv$u8Qh9oWDLJHQ3wr+0Pjo}KREJn{6XG|Y$PJM1jZdPPFaj-NnN+34GpS6go5}nw zx=dE<5X)~uOx`LBF^Z)+#FCp3hi{dGF~k~NXNa{6TsN^9Q>&lb&pJ#*q*v(>E9)YX z8(U>dtbec8A(lrGvqU=_$s$9y#YP8G zAKS)Kv%!${sT@L3yHDdmPk*ZG3agXj1j~~tL7L31=<8Oh!zqd4D6ult;FNESM~+yT z?)*%i9OGk^4yQ7TlS3Zcj((E1ok_WN+v9acc;i^wQeE1To6;WI&bn;M=XKI1x@CR& ztL*UtR@!5YNHceP^+SBM4zWCnm_^oqE`Jy=jSias$VUuqr@7t7373cF0~>Yo6aBcjZ=)9XsUP01|dG&}paK9$(XT%3EX9OLf#s zZleC;mojz0_sN&?NF)n=CAZapNM89$o`c@t*%f717GdQXu#2U5eV5z^sLtK;D7TAo zFfxZ$+2VDnWE;Rt6tJ{2zP>5#6Ubra?wfM>V)sp0que<81A!aKp;VVc$xS(2-y=U4 ztN3bW5YTknavZ5%UjX zyeip+sb^!AJS1KUU5av+f{nIrd*v>%aj_alGos_7+!~|$>0Y^^87^GlCDWXoL2Ucv z+hb%)bxBI1NpgsI80&<$$;5qf!x(CfB~HB>8?X_{L{ZIen;bsk-Y4gfQ6I@^q-qP~ zPn6MBx^#5oR+kQ0^w=*K#!y%5P+|YQ33b(exd;|FdS6D@jJhNxb(6$#BOJ!R(>K`@+}mIXa!g6$d<>+nhu}? zVtPLiC6_}UJs>CMu8Nk%q$`anR+@JY$U*K!vgZIs#wsFy7fqdIGGp7g_jj@s&sayH zJW3(U3Otj;OStdkOqu5|va{Qp_wn%S1yY z!@iFdQfA?TzOS#=5h#xlU>WZG9x86UXF3k*^r%u@vXW@BSkD}JP^akEU}G~@L>zF| z^)T8qz2vcjSV3Grs9QnMz0hb9Y=PdKMAEc-9Pp#sJeqawKmJ+A#ZcZt(l*umr zx`3QN6lIWBfmm-_MT!pBjk2%~N6te8GRAq;L$;+i3I&=6T}!zYO*J@TV? z=5SKS%0`#endJIm*&6SRI&G<%X-iZc#C<{jfZ4%lMZ4{4okCC^ zRS0qjl!ioW4r3IVaD>%~38)Q6WIonmYjo14nn@dmbNvVm4G@_>#FO>=LC#0ecr7R{ z``7;q}L-GFR3uGZ}SM_8_MjN8{~4>q0&U0fg6R;Y>M}j>$?a z^VK?)wmhcN;vOdD7-y<`R$yx9zTi4j3vq_XjZ4!|sca!5fjif|} zSX0+9;nvok(S^RwFi}+((TY71bRklGJX%vsV%3JR7!~*F(xHq~0kxUD2c=ZV0q0#&Liy?6yEfD~u293pS$H zXA;7zNY7JpjzbHSHh9{Tj*e$cmb2l z$y4&Wp|K2cXCanh%eomdu2{omI+Up~6s-hI9l$Yt9m-CM5-UQv}41Hp85(KA4xGK7!nLx0}neLWnGpDh@|wi9EcGt(-E8+BiNh~YypCLlAHk! z-f5qSv{)@Rf6?w*-)I^w49la*uX3YU9y@h-8)JBGmPhmdl?Peq*u&(PiBv znzcr<+5aSY&u?`}PXA4QG&XF?G?EhSK~pJ7Hf$hA=pb?bF6Ru;sKmMQrUMUC*+j2kV_%57rB*w`RmjEY!NRD>nv9aeoY%5=z6 zDKgn~R#%MEMR8gOi=xG#?rJHk>(Om-R*Z9UPJ&ilD=9rE2YiL}u1haE>%^;Ep(9pC ziIG>&$+xtLj-IKy=-T?xyfg|Csd>7-t~eBhoIekvenw491%-^tzDC2(Y^na+joxEsx}laRL*Gf!$q`V)AoN_6 zbLcT%z7Y~PizLo;G|~D-PsDQj$%7ZM_Bc)!>TyAyWt8Y(Q|u~IrQx0iZmg73^W&wg z#l5d+Mj+1;I~PR*_MN1@7d(<>sLK3BDRe3k7PdP-0!#SL=@#>a?F0%3Lcq?;UN3ox13a zG&;gd(wgpd`~MB$8lM{H727fbkSurx{jz! ztSc&~>X2(?N^9n2xoJ#P9+cx*?WEC+R#a3vqN4KrW!7r8E3()(DsswnNvFn=(gSo% zYv_f8rZ%`NV4_SDbXKK`vqXTeyEZ2$jobU$5{POV{s6z!9li) zID1XL9rCi#b=|;%-I3MEOzkJMM#B*6k9Ij07VUC7v4{XcO<=P{1S`Xb*Xsyuk!0UM zC8NWtOiRSX-&B?;BDKfgU|r$ANNsFfM$276_cd8ps>9tf9m-U;^$Dph&+#hhvF5GS zp`2zYl(}>Mqr@kmTI_5_>vNjzY@$ASbCxSFL!va`6e?djaY_q(O~6+~#fi?l=E%Go zT_|8zFfSu754|2&0*uW?P9*7?t>} zRiRak@w|*x40X?sO}q!S)T|wMvec{{^GwQORCSAqRUAQCWPw>pcE$x$Ew%__3}ah_ zY#A6dD_vsky;Fy?k>Nxs<;L2kLWffpr89`#*Q~a(;ocfYa~6_T7G)?-O1))KT4yda zd5z%-9jO}z{?_nOda7?Bk?KK7xN1=fft7DndgPX=+KQwC`-#z#ma+XrR?;O_B@EP` ztx9Jc25XSOYRY2nPEhK_Qt!mpUo`bbw)IDGLRhTAg(zQR4jZ(EYb-Y%ei_3@opBv8 zLAfPIv$a^MU&ts)W@}-&c1TnT$jR%#?e&42K&B-sJ!6c-(KVWaHKJyagMulLRGZ?V z-P5MzG}U@WRH;m?t5m|K7E2GKS)>~!khaiP$?F=GHK3BMQHgeIM^v3WhPXQFWHPVs z%cNlv;~uof`km3=sG_OK#K?dsg+VMxVb?YcfwE-xaknEDKq>}0+C5c*U z75&UejgGMdv`(5@xgcG!h`^Qg5|bLkfXjM0GltPlo&zi|U6Eong%c%osieKoGtRD* z#90q}6wQV%x-{!|hC^wgL`52`)v;)prXw|rXyKzAj4hLqfDR^nMGPC703#=~_Eo4;;rOqOsn&zYRsE!u&U#qu?{(}zkk=VQip7zi!*TL{YFwNhPF0%e zhFgeNI>p+2HTJQhRLa>t)~mb{UkX-ZTPPZhO{hpYqC?LS8G1O}$8t+dQ(7YLaN56y z7dymEr`b`6!~8NiO{pJ~i&ZdOMl->!0C4&=j2>HxVF2aQ zu_Nin4&A7Wrq(v<=!8h<*r9f3ZKfyhYh>tH!7j|vbj5{@r^^85Np{JhX&Fs3l=d;c zVIwp~wuWs(mS!lup=F%NP~r;`NEbLagLxv#C_Yn(YZ+`Y9Mv+gMM(*=Zl`TYvI%5( zrjiw76!t`8nU-pqW-4+l8hfj;Xl$iYK4vNdWAoo?t;j5ga<-4la_F0-Ks$_#F1k+~ zErqsE%mnruS(s~%lWke?PK7x#iPUB(sj=*9bZM&@eU`RaHf9}IOR{fDyFOc&wh~+1 z(R{Hbj-s=)7qT&bM-^te_a4R3_TCvzmmH-z_+FC3=(C{rbCf*<|*`)%BZ{;B`Y)dl#zv65U?`I?mR`pmhibe<(~h?8YyI#6WoiI zq8djoqSeBIjwpvC)w0S#m?Lfc3UaIa|3?LLJ-P~3Vh19cFLonts^D6W(mBS9QXOhZ z92GTgO70ewyqK}H3j07&nw4xHh}NZU^U@*)35u7NZb_9nJW7f22 zE7j<5w2h}|FL04kNwJ_S%$1Z8|JE68-l)##Ayd7I>;IrQ?(#+zM}@d#9S2LY;|0WN zt0)H}+T(heb&>0GtUnNFk7=TbUX4Z5My93JIHnb?WqFLq|5hSPb@(L=pVb&jq=kH_ zprjC~N<7OHpYlYkdFZJv3f~$Gsl+E3e~zk13!;H=Qxn>v&e4O?k$O-zT7qju%tI(Td4% z4hNLD)t?@bi`GIrB8QAxk$yqtsRVktITUB%LqTuUZ?dz$0<^I^{ zJFT<19Q4uh{F$$tBBtuhH?=IfK?pp4kK7$n+&S;T7cbqf10SFPLc3>*;#9h=H4pjK zFNkS%no34`BP3!5sH1@$)HbSEjd!w*DmLlT9WAn|K#88lf}v5{XJT{GX|~S<_T`Y& zYMgKWtw8Z|5&Mp}P@(VYjV)9%jK+xz)mMv@0VeJpa-tD%@MvaZ;2o5djTBnSX_&C z$`!l?)+CHJKc{{kM#g}L+AC%g;IWR%C=RDmdvsP>Crq{TKbob6oXuQz%qhq+hO$9gLJ>Gi7iy_Gj{xZ!AT>(Hi`_(o>6x?`(srw$KGrh*uCcIxgc#l#|!#*0OG?H+YsV&{~XwBo7LLcC4 zg+I)4F1CVmhEG)cedr#k^vY8h`T#}4n)Hp& zH%BOCh;4koast)Ld_Z}cvg)-5mEX9R)u$g)8qlU$_Ar9!tDr9aZK4#z`0x&%f5c?> z4*6OGXEne-qDZ!PO#D7$bHjEcDSt%CN`|XnJ`z+O38Gi;BS9rvkONQpM1!iywnvm~ z3!H@T?~qNPh-`k)z;z9XBNaI@LcqXsA;U&0W^}FxMk;QOcDk1zRkqmjCfebc&n&`g zYnhe0GDa@cD{VH;!QAt-G8s+wYTHKI4w4D?k9w7GU^F!CG2nPd0Z zVzC&`2vOJ1RQ@qR=B=8IR@<*0pRM@Oc~t9MrJc!msGM|uQ<;i4`}V%6bi*}w;VmVF zUimAWr`WiRg(iLpM=u;&a1GVVg%6c;R1fs_E<-l8%COAL83f3*x@V_a(ACeUHza zjV#YR;p>Pjn?C7lfh1&KE7d+`(YXWZHXMDSHD_(romx<73&-x18-cz*0Vp|k< zG4V5<{j}1bPW;5HC;Tb(CE`o5ai_?va^F1elv=dVH_$}i#)8jkYVk?K+gP)g_~8Fx zG5P#`-!gRZM?dhjPD1|6H~RYE;^vi&z9Go)u8(}pX)$JO_KgAHK4H8Y!+?6~6W=uO zjy$&2Cm`kYt-j{)=(ByR?@>Fd)p(b$D=PiME?gIIwFbxNgW9sxSfVh4R<&W{sD74a_*W>B)hNqcu+ca4efQ3WMB6+ zwStlfj&6Ei_vIkw;p@IXOz{0eJRkeqWb6%eyOZjVH+(kg{^2a=|I>sAwNG07I9*T1 zS^d3m%k?X(-)TkJe|Gr4Oh;d$Ufr?#jmL$wF0?J#zdZ$uw8<`iHwj*gT7|70?Pn8= zi4(Z-xEu~Q|0Z~cHS&|qkO~#*1(zR>6z^9jxcy(7xlLrD;%}fnC;NT$;X8cbmewY9 zkI!$hXv9n%?Y~%zHjNl=n!_D#oY=*XA6Gy3tLF;+uNskVTmwIz>L%p3#{TZ`KhdIz z|3f?AA8q|o0*aW@(ccWy;T;|QGt7_=`@8y20(nC>|4P()M0eEsXL6;xe?GTEeY1z( z$|bx3-z8?;WMA6T|3H_O?^1WLR(p7FIYMFc(|&}taI-yJzJP|CB0nPGMm*B~4h_fq z9_&XLZV`I;H!q|MmWU^jf^>ewTj-{r+i?e<;35havva_}nnW zKM}zMXl<80b+6yfeN3MIkN;$0G`im^6{glW3nPx=3 zJ=WiZ18&t*{zdqF;%V>*tq$C!X26GD@cT{NpJYaf-vjVLiQfe2v)(@HuR*e}@}heekH3k9LryYUB0(Zg}ZV9lyc9 z!@~VYI&St4#I?5toBc1+>u=sI{@$jh-|gqZXPboQn!<-ud7MrOFZ%YTfC$DXaSXC_ zn}0Iobp22L&*9a-<)8YmaJaSm?sotCCT<_ObEhAUzt#0S{cmvi?D~~|Fu=QC`QJlm z?_GYA$+r)g%)2H0Iv3vlBFD0wcz}hx5f8aap4sD{=z5bn&aC6ECxveTCo>lQO%u8C zz1v4xed8a&m6LbA@z29m=T=pIUqX|=?RFbn3e52F+OO@gUrS=YCdGdJI30NEtndBx z=+lWSe)n5VG9-y2CWWi1zY0zg@e>CwnM2eh>SP1{@ZlBwtiQLB-pxLDS*oYDJ?}qb z=60!tfBF02)kk&W-~L6o0j?^>z-|XF-(N@xoU~^zL=6qaUQU#mziUhQG`vJCRDa70 zY)jydl9k?o!u_o7^#*b*$@E1@h#E1BHzek&mjZ!dX2cCB41AY?a@KDb=tA>(IvfzW zM7+yLADMbxU2uB?L&?Pkq4ba&uF zJ?>St@6Um~7V`&Yi6av><<=v&{SlZBXZXAS2;9q@WnK#053e|{UkW7KjK2j*`Sn0Q z^MNEOS*^Vu_|=H>iYK|?CwRL7ZzpublPRRa7#xRC*%X`%clYm^f{-K!$lvDRvjC4< zg8cx#umrDoP+Pc-r>`^`nL}*J4Od9Uu$j6-a>Lb4wKcdOUXVUa2!2nksc@=99Uj9W zkcqzT^EO_jqp*x>6b`Z?G1!>1lVgd&rgnR=*9<3c)TcRttL(xY`ifQtb+?TtPtgVL zrOG27jv&Kq!F~=qmCA7AUh<4&CzZBfJtxfpcdjv{V1=N0(D&WpaK(fqf7*gA@m@t? zQV`zCNzbI&!SJ5=CP-_4pjhY7_h>D%9B{(OQ zKo@QYOYFgh9Qn`@6q}lGx=*xq#I1UGJmo(zW0p73lo&bn4Kwi$g@Nk5Tr0yXaN*7v zXq-T@l7r33z@DyD@?dgsBHHwHa`32$`#}97E!dHVa+B;0cCugrrw#}N=O)k}XN!Ut z?3m|Hv_eJptESdLCv{2SX&b}^^<%1XM{r^yqL+3Lw!r%DSoh%97AzUU`^l;v!Sz@j zJkT>(O+CnU>>YfBKGnOnU(m*J$H?aXL3l1zkM<8<$Es5OVNh^5v^Dj%5y3m@t^L{e z2bZU2z^ACDWrjb5yb5CrauMnEWH2Wi5is!nEAIIxgH77}mqal#5O#bRewyLB^kxDq zRQ>(Q;2+ej!og>P{iz?kqUVAxfNswP{{yi8xnQfb82zBJ9JlfLMRT7IHj`qZ^$l}a zXf#hOyVy4w@O7Nozq|PxKObhnLgVt)v?BKi9Kc}ArkJ?#>rLS^9R;QE&Phnyu z-@hGfqZYjttT1Ah#YZNlWA%?k!G1RGf*M{Ke9?>V?R$c6CBSvt(C>mjP}gnW2VbNv z+P0nwLh-+*zW!6N!UEXp_uzv`2w!+92$x+8)ekQRZFZ2^V#$Xy)F0J{lk%_Rc&O7p zTX>0yzNbxpVZSZ%YqOa;@_W&nzmmEnY~at&f%hP_QxK3ka7m&9I^w5gWGH`|F`YR8 zbHha&-EigcD)M>tw)*+Qsc()&Mfn}5H@G6;(KmVNi%nFxuWOY5V;eB4Y*c>V?vUTV zZ_2*~F1~yp=XZn@8~JhmRb%$qBrL5#=l7ydjdb3be+Y7%c)!U%0;1Qy$*%x7wm08R23O_tgx{B+Kz^voA86ia zhV0?0@}1<)z4>qrtOBXK4GLGmk$jj=K31PSn!ky<5o>xpzZE_oJD&dvjsE9!euG@h zoB77j4n(WxO(AOnm{pq;;^=s~oE&;00m(*Xg@TACSt01Ov(<#$(2N8qi*v=$w@{qb zM|>eTB&krJY7!~~x|-TLbcT8?yw)ak36Dpsf3^#aq2wRDJ@iikca;q58ft@=qUUSi zaMw^%@^;q{e42L)JrCE@-wq6QQV(|v4X}V_qduYj$cs!F80wBs#I?3^KdAiBP%~PD zjt_=rC2{5Iq0u2z63~v03w1`Y|G5xxpk!O7ga%Wz+?gRiRq@-+MoBiQ>t=^|s@-mX zBQ)6prw!fS3Y|+pGq+w8YMpyN2?`_i{YKs6CqevS$Dj2EGILQV3mx*^MWHTS3hOOB z#TLvEu~@yjI8?(qprp4FbHdm+;un+JcSEzW;(l#u2-EOVb;GhyK?a)hUlY&nh7Dp<@m7AD+GblQ%a8cJzl2`s$-SXgH7nR>nXvy5$M3K} zylejW;n6R=Vs9jfV>1>F+8f29i|l`+Ld5?Yl|Enke?=uyn}V#&|B~Z1(zQ*&FX$VM zZ!PeclgsST3z7`slG0Ro<-Rvuupu+)bLeg1*C0CIQ{4j!7CB+E*!FnAZm@mkn1VrA zP5(Nk;3Ir3exl%BZq72}lLee*5tf^bW2h5q9zTC8ntYs7G)PcWK=2E#vt42H`C42H#sdwj6L&}N9i zkPe(74;l=62O11Z;GwLAdTn^o;Z)nD#|(zen~jEVN%feb0GFaBK2g*vxmmY92E#k} zPygKy#bq#4UJQok`x*>m@t^*?8}a=kIQx1V47!gW(*Y1tmKR_y9_A25{DJgW(Url@A#VzXNU=W-$B)I29%R6|e&EG~iwL84SMw zP6zxMa3$bRfQ3l^BjBN-2E!@9KLM)&*WQmZ9K12%MxPM|!!e401V;hqJzy~W0GI}N z1kjBHhXKXA4TeL2JO~~Hyc6(yz{dc;1H7ZZ!LSeT9^mZ-d=KGOfbBu|8^Cp-vj?yx z;&%g1M1{USIN`>P&w;oL0jH7SSAZ`8@k_wjXs4ZkZ2@-xjzatwfMyW*9PkX31fUtPKA;6~6gWlyRs3Ky>_URC@qZY4bm@l%b=ah$iR1r2&0}k$ diff --git a/dist/dbr-9.6.31.wasm.js b/dist/dbr-9.6.32.wasm.js similarity index 100% rename from dist/dbr-9.6.31.wasm.js rename to dist/dbr-9.6.32.wasm.js diff --git a/dist/dbr.js b/dist/dbr.js index a155330..22ebc22 100644 --- a/dist/dbr.js +++ b/dist/dbr.js @@ -4,18 +4,18 @@ * @website http://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 9.6.31 (js 20230908) + * @version 9.6.32 (js 20231027) * @fileoverview Dynamsoft JavaScript Library for Barcode Reader * More info on DBR JS: https://www.dynamsoft.com/barcode-reader/sdk-javascript/ */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Dynamsoft=e.Dynamsoft||{},e.Dynamsoft.DBR={}))}(this,(function(e){"use strict";const t="undefined"==typeof self,i=t?{}:self;let r,n,s,o,a;if("undefined"!=typeof navigator&&(r=navigator,n=r.userAgent,s=r.platform,o=r.mediaDevices),!t){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:r.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:s,search:"Win"},Mac:{str:s},Linux:{str:s}};let i="unknownBrowser",o=0,l="unknownOS";for(let t in e){const r=e[t]||{};let s=r.str||n,a=r.search||t,l=r.verStr||n,h=r.verSearch||t;if(h instanceof Array||(h=[h]),-1!=s.indexOf(a)){i=t;for(let e of h){let t=l.indexOf(e);if(-1!=t){o=parseFloat(l.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let r=i.str||n,s=i.search||e;if(-1!=r.indexOf(s)){l=e;break}}"Linux"==l&&-1!=n.indexOf("Windows NT")&&(l="HarmonyOS"),a={browser:i,version:o,OS:l}}t&&(a={browser:"ssr",version:0,OS:"ssr"});const l="undefined"!=typeof WebAssembly&&n&&!(/Safari/.test(n)&&!/Chrome/.test(n)&&/\(.+\s11_2_([2-6]).*\)/.test(n)),h=!("undefined"==typeof Worker),c=!(!o||!o.getUserMedia),u=async()=>{let e=!1;if(c)try{(await o.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===a.browser&&a.version>66||"Safari"===a.browser&&a.version>13||"OPR"===a.browser&&a.version>43||"Edge"===a.browser&&a.version;const d=(()=>{if(!t&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),f=" is not allowed to change after `createInstance` or `loadWasm` is called.",g=!t&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",_=!t&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",p=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let i=0;ie&&"object"==typeof e&&"function"==typeof e.then;class C extends Promise{constructor(e){let t,i;super(((e,r)=>{t=e,i=r})),this._s="pending",this.resolve=e=>{this.isPending&&(w(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",i(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,w(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const i=await t;e===this._task&&this.resolve(i)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}var x=function(){this.init()};x.prototype={init:function(){var e=this||T;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var t=this||T;if(e=parseFloat(e),t.ctx||F(),void 0!==e&&e>=0&&e<=1){if(t._volume=e,t._muted)return t;t.usingWebAudio&&t.masterGain.gain.setValueAtTime(e,T.ctx.currentTime);for(var i=0;i=0;t--)e._howls[t].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,F()),e},codecs:function(e){return(this||T)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||T;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||T,t=null;try{t="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!t||"function"!=typeof t.canPlayType)return e;var i=t.canPlayType("audio/mpeg;").replace(/^no$/,""),r=e._navigator?e._navigator.userAgent:"",n=r.match(/OPR\/([0-6].)/g),s=n&&parseInt(n[0].split("/")[1],10)<33,o=-1!==r.indexOf("Safari")&&-1===r.indexOf("Chrome"),a=r.match(/Version\/(.*?) /),l=o&&a&&parseInt(a[1],10)<15;return e._codecs={mp3:!(s||!i&&!t.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!i,opus:!!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(t.canPlayType('audio/wav; codecs="1"')||t.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!t.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!t.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(t.canPlayType("audio/x-m4a;")||t.canPlayType("audio/m4a;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(t.canPlayType("audio/x-m4b;")||t.canPlayType("audio/m4b;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(t.canPlayType("audio/x-mp4;")||t.canPlayType("audio/mp4;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(l||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(l||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(t.canPlayType("audio/x-flac;")||t.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||T;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var t=function(i){for(;e._html5AudioPool.length0?o._seek:i._sprite[e][0]/1e3),h=Math.max(0,(i._sprite[e][0]+i._sprite[e][1])/1e3-l),c=1e3*h/Math.abs(o._rate),u=i._sprite[e][0]/1e3,d=(i._sprite[e][0]+i._sprite[e][1])/1e3;o._sprite=e,o._ended=!1;var f=function(){o._paused=!1,o._seek=l,o._start=u,o._stop=d,o._loop=!(!o._loop&&!i._sprite[e][2])};if(!(l>=d)){var g=o._node;if(i._webAudio){var _=function(){i._playLock=!1,f(),i._refreshBuffer(o);var e=o._muted||i._muted?0:o._volume;g.gain.setValueAtTime(e,T.ctx.currentTime),o._playStart=T.ctx.currentTime,void 0===g.bufferSource.start?o._loop?g.bufferSource.noteGrainOn(0,l,86400):g.bufferSource.noteGrainOn(0,l,h):o._loop?g.bufferSource.start(0,l,86400):g.bufferSource.start(0,l,h),c!==1/0&&(i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c)),t||setTimeout((function(){i._emit("play",o._id),i._loadQueue()}),0)};"running"===T.state&&"interrupted"!==T.ctx.state?_():(i._playLock=!0,i.once("resume",_),i._clearTimer(o._id))}else{var p=function(){g.currentTime=l,g.muted=o._muted||i._muted||T._muted||g.muted,g.volume=o._volume*T.volume(),g.playbackRate=o._rate;try{var r=g.play();if(r&&"undefined"!=typeof Promise&&(r instanceof Promise||"function"==typeof r.then)?(i._playLock=!0,f(),r.then((function(){i._playLock=!1,g._unlocked=!0,t?i._loadQueue():i._emit("play",o._id)})).catch((function(){i._playLock=!1,i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),o._ended=!0,o._paused=!0}))):t||(i._playLock=!1,f(),i._emit("play",o._id)),g.playbackRate=o._rate,g.paused)return void i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||o._loop?i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c):(i._endTimers[o._id]=function(){i._ended(o),g.removeEventListener("ended",i._endTimers[o._id],!1)},g.addEventListener("ended",i._endTimers[o._id],!1))}catch(e){i._emit("playerror",o._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===g.src&&(g.src=i._src,g.load());var m=window&&window.ejecta||!g.readyState&&T._navigator.isCocoonJS;if(g.readyState>=3||m)p();else{i._playLock=!0,i._state="loading";var v=function(){i._state="loaded",p(),g.removeEventListener(T._canPlayEvent,v,!1)};g.addEventListener(T._canPlayEvent,v,!1),i._clearTimer(o._id)}}return o._id}i._ended(o)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var i=t._getSoundIds(e),r=0;r=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else n.length>=2&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(i=t?r._soundById(t):r._sounds[0])?i._volume:0;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"volume",action:function(){r.volume.apply(r,n)}}),r;void 0===t&&(r._volume=e),t=r._getSoundIds(t);for(var a=0;a0?r/h:r),u=Date.now();e._fadeTo=i,e._interval=setInterval((function(){var n=(Date.now()-u)/r;u=Date.now(),a+=l*n,a=Math.round(100*a)/100,a=l<0?Math.max(i,a):Math.min(i,a),o._webAudio?e._volume=a:o.volume(a,e._id,!0),s&&(o._volume=a),(it&&a>=i)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,o.volume(i,e._id),o._emit("fade",e._id))}),c)},_stopFade:function(e){var t=this,i=t._soundById(e);return i&&i._interval&&(t._webAudio&&i._node.gain.cancelScheduledValues(T.ctx.currentTime),clearInterval(i._interval),i._interval=null,t.volume(i._fadeTo,e),i._fadeTo=null,t._emit("fade",e)),t},loop:function(){var e,t,i,r=this,n=arguments;if(0===n.length)return r._loop;if(1===n.length){if("boolean"!=typeof n[0])return!!(i=r._soundById(parseInt(n[0],10)))&&i._loop;e=n[0],r._loop=e}else 2===n.length&&(e=n[0],t=parseInt(n[1],10));for(var s=r._getSoundIds(t),o=0;o=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else 2===n.length&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if("number"!=typeof e)return(i=r._soundById(t))?i._rate:r._rate;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"rate",action:function(){r.rate.apply(r,n)}}),r;void 0===t&&(r._rate=e),t=r._getSoundIds(t);for(var a=0;a=0?t=parseInt(r[0],10):i._sounds.length&&(t=i._sounds[0]._id,e=parseFloat(r[0]))}else 2===r.length&&(e=parseFloat(r[0]),t=parseInt(r[1],10));if(void 0===t)return 0;if("number"==typeof e&&("loaded"!==i._state||i._playLock))return i._queue.push({event:"seek",action:function(){i.seek.apply(i,r)}}),i;var o=i._soundById(t);if(o){if(!("number"==typeof e&&e>=0)){if(i._webAudio){var a=i.playing(t)?T.ctx.currentTime-o._playStart:0,l=o._rateSeek?o._rateSeek-o._seek:0;return o._seek+(l+a*Math.abs(o._rate))}return o._node.currentTime}var h=i.playing(t);h&&i.pause(t,!0),o._seek=e,o._ended=!1,i._clearTimer(t),i._webAudio||!o._node||isNaN(o._node.duration)||(o._node.currentTime=e);var c=function(){h&&i.play(t,!0),i._emit("seek",t)};if(h&&!i._webAudio){var u=function(){i._playLock?setTimeout(u,0):c()};setTimeout(u,0)}else c()}return i},playing:function(e){var t=this;if("number"==typeof e){var i=t._soundById(e);return!!i&&!i._paused}for(var r=0;r=0&&T._howls.splice(r,1);var n=!0;for(i=0;i=0){n=!1;break}return O&&n&&delete O[e._src],T.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,i,r){var n=this["_on"+e];return"function"==typeof t&&n.push(r?{id:i,fn:t,once:r}:{id:i,fn:t}),this},off:function(e,t,i){var r=this,n=r["_on"+e],s=0;if("number"==typeof t&&(i=t,t=null),t||i)for(s=0;s=0;s--)n[s].id&&n[s].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,i)}.bind(r,n[s].fn),0),n[s].once&&r.off(e,n[s].fn,n[s].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var i=t._queue[0];i.event===e&&(t._queue.shift(),t._loadQueue()),e||i.action()}return t},_ended:function(e){var t=this,i=e._sprite;if(!t._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(i<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),i--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],i=0;i=0;if(!e.bufferSource)return this;if(T._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{e.bufferSource.buffer=T._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(T._navigator&&T._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var I=function(e){this._parent=e,this.init()};I.prototype={init:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++T._counter,t._sounds.push(e),e.create(),e},create:function(){var e=this,t=e._parent,i=T._muted||e._muted||e._parent._muted?0:e._volume;return t._webAudio?(e._node=void 0===T.ctx.createGain?T.ctx.createGainNode():T.ctx.createGain(),e._node.gain.setValueAtTime(i,T.ctx.currentTime),e._node.paused=!0,e._node.connect(T.masterGain)):T.noAudio||(e._node=T._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(T._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=t._src,e._node.preload=!0===t._preload?"auto":t._preload,e._node.volume=i*T.volume(),e._node.load()),e},reset:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++T._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,t=e._parent;t._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(t._sprite).length&&(t._sprite={__default:[0,1e3*t._duration]}),"loaded"!==t._state&&(t._state="loaded",t._emit("load"),t._loadQueue()),e._node.removeEventListener(T._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var O={},A=function(e){var t=e._src;if(O[t])return e._duration=O[t].duration,void M(e);if(/^data:[^;]+;base64,/.test(t)){for(var i=atob(t.split(",")[1]),r=new Uint8Array(i.length),n=0;n0?(O[t._src]=e,M(t,e)):i()};"undefined"!=typeof Promise&&1===T.ctx.decodeAudioData.length?T.ctx.decodeAudioData(e).then(r).catch(i):T.ctx.decodeAudioData(e,r,i)},M=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},F=function(){if(T.usingWebAudio){try{"undefined"!=typeof AudioContext?T.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?T.ctx=new webkitAudioContext:T.usingWebAudio=!1}catch(e){T.usingWebAudio=!1}T.ctx||(T.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(T._navigator&&T._navigator.platform),t=T._navigator&&T._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),i=t?parseInt(t[1],10):null;if(e&&i&&i<9){var r=/safari/.test(T._navigator&&T._navigator.userAgent.toLowerCase());T._navigator&&!r&&(T.usingWebAudio=!1)}T.usingWebAudio&&(T.masterGain=void 0===T.ctx.createGain?T.ctx.createGainNode():T.ctx.createGain(),T.masterGain.gain.setValueAtTime(T._muted?0:T._volume,T.ctx.currentTime),T.masterGain.connect(T.ctx.destination)),T._setup()}};!function(e,t,i,r){var n;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var i=t._howls.length-1;i>=0;i--)t._howls[i].stereo(e);return t},e.prototype.pos=function(e,i,r){var n=this;return n.ctx&&n.ctx.listener?(i="number"!=typeof i?n._pos[1]:i,r="number"!=typeof r?n._pos[2]:r,"number"!=typeof e?n._pos:(n._pos=[e,i,r],void 0!==n.ctx.listener.positionX?(n.ctx.listener.positionX.setTargetAtTime(n._pos[0],t.ctx.currentTime,.1),n.ctx.listener.positionY.setTargetAtTime(n._pos[1],t.ctx.currentTime,.1),n.ctx.listener.positionZ.setTargetAtTime(n._pos[2],t.ctx.currentTime,.1)):n.ctx.listener.setPosition(n._pos[0],n._pos[1],n._pos[2]),n)):n},e.prototype.orientation=function(e,i,r,n,s,o){var a=this;if(!a.ctx||!a.ctx.listener)return a;var l=a._orientation;return i="number"!=typeof i?l[1]:i,r="number"!=typeof r?l[2]:r,n="number"!=typeof n?l[3]:n,s="number"!=typeof s?l[4]:s,o="number"!=typeof o?l[5]:o,"number"!=typeof e?l:(a._orientation=[e,i,r,n,s,o],void 0!==a.ctx.listener.forwardX?(a.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),a.ctx.listener.forwardY.setTargetAtTime(i,t.ctx.currentTime,.1),a.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),a.ctx.listener.upX.setTargetAtTime(n,t.ctx.currentTime,.1),a.ctx.listener.upY.setTargetAtTime(s,t.ctx.currentTime,.1),a.ctx.listener.upZ.setTargetAtTime(o,t.ctx.currentTime,.1)):a.ctx.listener.setOrientation(e,i,r,n,s,o),a)},i.prototype.init=(n=i.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],n.call(this,e)}),i.prototype.stereo=function(e,i){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,i)}}),r;var n=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===i){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var o=r._getSoundIds(i),a=0;a{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`license`"+f);i._license=t})(P,e)}static get productKeys(){return this._license}static set productKeys(e){P.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){P.license=e}static get organizationID(){return this._license}static set organizationID(e){P.license=e}static set sessionPassword(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`sessionPassword`"+f);i._sessionPassword=t})(P,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:l,worker:h,getUserMedia:c,camera:await u(),browser:a.browser,version:a.version,OS:a.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");P._engineResourcePath=(e=>{if(null==e&&(e="./"),!t){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`licenseServer`"+f);i._licenseServer=p(t)})(P,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+f);i._deviceFriendlyName=t||""})(P,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");P.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=P._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",P.engineResourcePath)}static set defaultUIElementURL(e){P._defaultUIElementURL=e}static _fireHTTPSWarnning(){P.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{P.onWarning&&P.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new E({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;P._onLog&&P._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const i=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{i?i===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else i||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),i=null;if(t&&t.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:l}=e;i=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(i,r,n,a,l,s,o)}if(this._drawResults(i,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(P._onLog&&P._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!P.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:r,sp:n,rmk:s}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,r,n=t._license||"",s=JSON.parse(JSON.stringify(t._licenseServer)),o=t._sessionPassword,a=0;if(n.startsWith("t")||n.startsWith("f"))a=0;else if(0===n.length||n.startsWith("P")||n.startsWith("L")||n.startsWith("Y")||n.startsWith("A"))a=1;else{a=2;const t=n.indexOf(":");if(-1!=t&&(n=n.substring(t+1)),n.startsWith("DLS2")){let t;try{let e=n.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(n=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof n&&(n=JSON.stringify(n)),0===s.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),s=p(e)}!o&&t.sessionPassword&&(o=t.sessionPassword),e=t.remark}("200001"===n||n.startsWith("200001-"))&&(s&&s.length||(n="")),n||(a=1)}if(a&&(i.crypto||(r="Please upgrade your browser to support online key."),i.crypto.subtle||(r="Require https to use online key in this browser.")),r){if(1!==a)throw new Error(r);a=0,console.warn(r),t._lastErrorCode=-1,t._lastErrorString=r}return 1===a&&(n="",console.warn("Applying for a public trial license ...")),{lt:a,l:n,ls:s,sp:o,rmk:e}}throw new Error("Can't preprocess license again"+f)})(P);this._pLoad.task=async(i,o)=>{let l=P.engineResourcePath+P._workerName;P.engineResourcePath.startsWith(location.origin)||(l=await fetch(l).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),P._dbrWorker=new Worker(l),P._dbrWorker.onerror=e=>{let t=new Error(e.message);o(t)},P._dbrWorker.onmessage=async t=>{let r=t.data?t.data:t;switch(r.type){case"log":P._onLog&&P._onLog(r.message);break;case"load":{r.message&&(r.message=r.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let t,n=!1;1===e&&(n=!0,r.message||(r.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),r.success?(P._dbrWorker.onerror=null,P._version=r.version+"(JS "+P._jsVersion+"."+P._jsEditVersion+")",P._onLog&&P._onLog("load dbr worker success"),r.message&&console.warn(r.message)):(t=new Error(r.message),t.stack=r.stack+"\n"+t.stack,t.ltsErrorCode=r.ltsErrorCode,n||111==r.ltsErrorCode&&-1!=r.message.toLowerCase().indexOf("trial license")&&(n=!0)),n&&P.showDialog(r.success?"warn":"error",r.message),r.success?i():o(t);break}case"task":{let e=r.id,t=r.body;try{P._taskCallbackMap.get(e)(t),P._taskCallbackMap.delete(e)}catch(t){throw P._taskCallbackMap.delete(e),t}break}default:P._onLog&&P._onLog(t)}},P._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:P.engineResourcePath,bUseFullFeature:P._bUseFullFeature,bd:P._bWasmDebug,v:P._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:a,cv:P.authCacheVersion,fn:P.deviceFriendlyName,ls:r,sp:n,rmk:s})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,i)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let n=await r.text();if(!n.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let s=document.createElement("div");s.innerHTML=n;let o=[];for(let e=0;e{if(e==t.target){a.remove();for(let e of o)e.remove()}}));else if(!h&&e.classList.contains("dls-license-icon-close"))h=e,e.addEventListener("click",(()=>{a.remove();for(let e of o)e.remove()}));else if(!c&&e.classList.contains("dls-license-icon-error"))c=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!d&&e.classList.contains("dls-license-msg-content")){d=e;let t=i;for(;t;){let i=t.indexOf("["),r=t.indexOf("]",i),n=t.indexOf("(",r),s=t.indexOf(")",n);if(-1==i||-1==r||-1==n||-1==s){e.appendChild(new Text(t));break}i>0&&e.appendChild(new Text(t.substring(0,i)));let o=document.createElement("a"),a=t.substring(i+1,r);o.innerText=a;let l=t.substring(n+1,s);o.setAttribute("href",l),o.setAttribute("target","_blank"),e.appendChild(o),t=t.substring(s+1)}}document.body.appendChild(a)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await P.loadWasm(),await new Promise(((t,i)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new P;return e._instanceID=await P.createInstanceInWorker(),P._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:i,instanceID:this._instanceID})}))}async decode(e){P._onLog&&P._onLog("decode(source: any)"),P._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):P.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):P.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,i,r,n,s,o){return await new Promise(((a,l)=>{let h=P._nextTaskID++;P._taskCallbackMap.set(h,(e=>{if(e.success){let t,i=P._onLog?Date.now():0;P._onLog&&P._onLog("worker return result: "+i),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return l(e)}if(P._onLog){let e=Date.now();P._onLog("DBR getting message from worker timestamp: "+i),P._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),P._onLog("From DBR entering worker to returning message from worker costs: "+(i-this._timeEnterInnerDBR)),P._onLog("Handling results from DBR worker costs: "+(e-i)),P._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return a(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,l(t)}})),this._timeEnterInnerDBR=Date.now(),P._onLog&&P._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),P._dbrWorker.postMessage({type:"decodeBuffer",id:h,instanceID:this._instanceID,body:{buffer:e,width:t,height:i,stride:r,format:n,orientation:s,config:o}},[e.buffer]),P._onLog&&o&&o.timeStamp&&P._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-o.timeStamp))}))}async _decodeBuffer_Blob(e,t,i,r,n,s,o){P._onLog&&P._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const a=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,i)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{i(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(a),t,i,r,n,s,o)}async decodeBuffer(e,t,i,r,n,s,o){let a;return P._onLog&&P._onLog("decodeBuffer(buffer,width,height,stride,format)"),P._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?a=await this._decodeBuffer_Uint8Array(e,t,i,r,n,s,o):e instanceof ArrayBuffer?a=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,i,r,n,s,o):e instanceof Blob&&(a=await this._decodeBuffer_Blob(e,t,i,r,n,s,o)),a}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,i)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return i(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success){let t=JSON.parse(i.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getRuntimeSettings",id:i,instanceID:this._instanceID})}))}async updateRuntimeSettings(t){let i;if("string"==typeof t)if("speed"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=3,i.expectedBarcodesCount=0,i.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=5,i.expectedBarcodesCount=512,i.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region}else if("dense"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=9,i.expectedBarcodesCount=0,i.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=3,i.expectedBarcodesCount=0,i.localizationModes=[2,8,0,0,0,0,0,0]}else i=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(i=JSON.parse(JSON.stringify(t)),i.region instanceof Array){let e=i.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(i.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!P._bUseFullFeature){if(0!=(i.barcodeFormatIds&~(e.EnumBarcodeFormat.BF_ONED|e.EnumBarcodeFormat.BF_QR_CODE|e.EnumBarcodeFormat.BF_PDF417|e.EnumBarcodeFormat.BF_DATAMATRIX))||0!=i.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=i.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=i.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,i.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(i.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(i=>{if(i.success){try{this._handleRetJsonString(i.updateReturn)}catch(e){t(e)}return e()}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(i)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettings",id:i,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:i,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!P._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:i,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!P._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,i)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){i(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){P._onLog&&P._onLog("_decode_Blob(blob: Blob)");let i=null,r=null;if("undefined"!=typeof createImageBitmap)try{i=await createImageBitmap(e)}catch(e){}i||(r=await function(e){return new Promise(((t,i)=>{let r=URL.createObjectURL(e),n=new Image;n.dbrObjUrl=r,n.src=r,n.onload=()=>{t(n)},n.onerror=e=>{i(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let n=await this._decode_Image(i||r,t);return i&&i.close(),n}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){P._onLog&&P._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let i,r,n=e instanceof HTMLImageElement?e.naturalWidth:e.width,s=e instanceof HTMLImageElement?e.naturalHeight:e.height,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let l=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(l,0,0,n,s,i,r),l}async _decode_Canvas(t,i){if(P._onLog&&P._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";if(0===t.width||0===t.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=t,this.oriCanvasData=null);let r=(t.ctx2d||t.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,t.width,t.height).data;return await this._decodeBuffer_Uint8Array(r,t.width,t.height,4*t.width,e.EnumImagePixelFormat.IPF_ABGR_8888,0,i)}async _decode_Video(e,t){if(P._onLog&&P._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let i,r,n=e.videoWidth,s=e.videoHeight,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r);let l=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(l,0,0,n,s,i,r),l}async _decode_DCEFrame(t,i){if(P._onLog&&P._onLog("_decode_DCEFrame(dceFrame)"),!P.isDCEFrame(t))return[];let r=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,colorMode:t.colorMode,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{width:n,height:s,colorMode:o,pixelFormat:a,stride:l,timeStamp:h}=t;let c;c=i&&i.bCopyData?new Uint8Array(t.data):t.data;let u=null;if(i?(u=JSON.parse(JSON.stringify(i)),u.timeStamp=h):u={timeStamp:h},a&&l)if("grey"===a)r=await this._decodeBuffer_Uint8Array(c,n,s,l,e.EnumImagePixelFormat.IPF_GrayScaled,0,u);else if("rgba"===a)r=await this._decodeBuffer_Uint8Array(c,n,s,l,e.EnumImagePixelFormat.IPF_ABGR_8888,0,u);else{if("bgra"!==a)throw new Error(`Pixel format '${a}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(c,n,s,l,e.EnumImagePixelFormat.IPF_ARGB_8888,0,u)}else if("grey"===o)r=await this._decodeBuffer_Uint8Array(c,n,s,n,e.EnumImagePixelFormat.IPF_GrayScaled,0,u);else if("rgba"===o)r=await this._decodeBuffer_Uint8Array(c,n,s,4*n,e.EnumImagePixelFormat.IPF_ABGR_8888,0,u);else{if("bgra"!==o)throw new Error(`Color mode '${o}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(c,n,s,4*n,e.EnumImagePixelFormat.IPF_ARGB_8888,0,u)}return r}async _decode_DSImage(t,i){if(P._onLog&&P._onLog("_decode_DSImage(dsImage)"),!P.isDSImage(t))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat.toLowerCase(),data:new Uint8Array(t.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{i(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(i,t)}}async _decode_FilePath(e,t){throw P._onLog&&P._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,i,r,n,s,o){if(e.length>0)for(let a of e){let e=a.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*s,e.x2*=.01*s,e.x3*=.01*s,e.x4*=.01*s,e.y1*=.01*o,e.y2*=.01*o,e.y3*=.01*o,e.y4*=.01*o);let l=s/r,h=o/n;e.x1=e.x1/l+t,e.x2=e.x2/l+t,e.x3=e.x3/l+t,e.x4=e.x4/l+t,e.y1=e.y1/h+i,e.y2=e.y2/h+i,e.y3=e.y3/h+i,e.y4=e.y4/h+i,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/n,e.y2*=100/n,e.y3*=100/n,e.y4*=100/n),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(t,i){let r,n=e.EnumErrorCode.DBR_UNKNOWN;return"number"==typeof t?(n=t,r=new Error(i)):r=new Error(t),r.code=n,r}_handleRetJsonString(t){let i=e.EnumErrorCode;if(t.textResults){for(let e=0;e{let i=t.indexOf(":");e[t.substring(0,i)]=t.substring(i+1)})),i.exception=e}}return t.decodeRecords?this.decodeRecords=t.decodeRecords:this.decodeRecords={},this._lastErrorCode=t.exception,this._lastErrorString=t.description,t.exception&&!P._setWarnnedEx.has(t.description)&&(P._setWarnnedEx.add(t.description),console.warn(t.description)),t.textResults}if(t.exception==i.DBR_SUCCESS)return t.data;throw P.BarcodeReaderException(t.exception,t.description)}async setModeArgument(e,t,i,r){return await new Promise(((n,s)=>{let o=P._nextTaskID++;P._taskCallbackMap.set(o,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return s(e)}return n()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),P._dbrWorker.postMessage({type:"setModeArgument",id:o,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i,argumentValue:r}})}))}async getModeArgument(e,t,i){return await new Promise(((r,n)=>{let s=P._nextTaskID++;P._taskCallbackMap.set(s,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return n(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"getModeArgument",id:s,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let t=await this.getIntermediateResults(),i=[];for(let r of t)if(r.dataType==e.EnumIMResultDataType.IMRDT_IMAGE)for(let t of r.results){const r=t.bytes;let n;switch(P._onLog&&P._onLog(" "+r.length+" "+r.byteLength+" "+t.width+" "+t.height+" "+t.stride+" "+t.format),t.format){case e.EnumImagePixelFormat.IPF_ABGR_8888:n=new Uint8ClampedArray(r);break;case e.EnumImagePixelFormat.IPF_RGB_888:{const e=r.length/3;n=new Uint8ClampedArray(4*e);for(let t=0;t=i)break;n[o]=n[o+1]=n[o+2]=(128&e)/128*255,n[o+3]=255,e<<=1}}break}default:console.warn("unknow intermediate image",t)}if(!n)continue;let s=new ImageData(n,t.width,t.height),o=document.createElement("canvas");o.width=t.width,o.height=t.height,o.getContext("2d").putImageData(s,0,0),i.push(o)}return i}async getScanSettings(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success){let t=i.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(i.message);return e.stack+="\n"+i.stack,t(e)}})),P._dbrWorker.postMessage({type:"getScanSettings",id:i,instanceID:this._instanceID})}))}async updateScanSettings(t){if(!t)return;const i=JSON.parse(JSON.stringify(t));if(i.autoZoom||i.autoFocus||i.autoSuggestTip){if(!P._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const t=await this.getRuntimeSettings();t.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(t)}return i.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(i.intervalTime,0),delete i.intervalTime),i.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=i.whenToPlaySoundforSuccessfulRead,delete i.whenToPlaySoundforSuccessfulRead),i.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=i.soundOnSuccessfullRead,delete i.soundOnSuccessfullRead),i.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=i.whenToVibrateforSuccessfulRead,delete i.whenToVibrateforSuccessfulRead),i.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=i.vibrateDuration,delete i.vibrateDuration),i.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=i.captureAndDecodeInParallel,delete i.captureAndDecodeInParallel),i.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=i.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=i.autoZoom,delete i.autoZoom),i.hasOwnProperty("autoFocus")&&(this.autoFocus=i.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete i.autoFocus),i.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=i.autoSuggestTip,delete i.autoFocus),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack+="\n"+i.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:i}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let i of e)t.push(this._cloneDecodeResults(i));return t}{let t=e,i=JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)));return i}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return P._onLog&&P._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));P._onLog&&P._onLog("======= once read ======="),P._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!P.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return P._onLog&&P._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let i=[];if(e){i=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(i&&i.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:l}=e;t=i.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(t,r,n,a,l,s,o)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(i=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return i})().then((e=>{if(P._onLog&&P._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const i=()=>{let i=0;if(t&&t.length){let r=Math.min(...e),n=Math.max(...t);r&&n&&(i=r-n)}else i=0;return i>0?i:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=i()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),P._onLog&&P._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(P._onLog&&P._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};t(e)}else P._onLog&&P._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const i=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let n=0;n{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(P._onLog&&P._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=P._nextTaskID++;P._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),P._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}P._jsVersion="9.6.31",P._jsEditVersion="20230908",P._version=`loading...(JS ${P._jsVersion}.${P._jsEditVersion})`,P._license=g,P._sessionPassword=_,P.browserInfo=a,P._workerName=`dbr-${P._jsVersion}.browser.worker.js`,P._engineResourcePath=d,P._licenseServer=[],P._deviceFriendlyName="",P._isShowRelDecodeTimeInResults=!1,P._bWasmDebug=!1,P._bNeverShowDialog=!1,P.__bUseFullFeature=!0,P._nextTaskID=0,P._taskCallbackMap=new Map,P._pLoad=new C,P._lastErrorCode=0,P._lastErrorString="",P._setWarnnedEx=new Set,P._defaultUIElementURL="@engineResourcePath/dbr.ui.html";var k={653:(e,t,i)=>{var r,n,s,o,a,l,h,c,u,d,f,g,_,p,m,v,y,S,b,w,C,x=x||{version:"5.2.1"};if(t.fabric=x,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?x.document=document:x.document=document.implementation.createHTMLDocument(""),x.window=window;else{var T=new(i(192).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;x.document=T.document,x.jsdomImplForWrapper=i(898).implForWrapper,x.nodeCanvas=i(245).Canvas,x.window=T,DOMParser=x.window.DOMParser}function E(e,t){var i=e.canvas,r=t.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function I(e,t){var i=t.targetCanvas.getContext("2d"),r=t.destinationWidth,n=t.destinationHeight,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);e.readPixels(0,0,r,n,e.RGBA,e.UNSIGNED_BYTE,o);var l=new ImageData(a,r,n);i.putImageData(l,0,0)}x.isTouchSupported="ontouchstart"in x.window||"ontouchstart"in x.document||x.window&&x.window.navigator&&x.window.navigator.maxTouchPoints>0,x.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,x.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],x.DPI=96,x.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",x.commaWsp="(?:\\s+,?\\s*|,\\s*)",x.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,x.reNonWord=/[ \n\.,;!\?\-]/,x.fontPaths={},x.iMatrix=[1,0,0,1,0,0],x.svgNS="http://www.w3.org/2000/svg",x.perfLimitSizeTotal=2097152,x.maxCacheSideLimit=4096,x.minCacheSideLimit=256,x.charWidthsCache={},x.textureSize=2048,x.disableStyleCopyPaste=!1,x.enableGLFiltering=!0,x.devicePixelRatio=x.window.devicePixelRatio||x.window.webkitDevicePixelRatio||x.window.mozDevicePixelRatio||1,x.browserShadowBlurConstant=1,x.arcToSegmentsCache={},x.boundsOfCurveCache={},x.cachesBoundsOfCurve=!0,x.forceGLPutImageData=!1,x.initFilterBackend=function(){return x.enableGLFiltering&&x.isWebglSupported&&x.isWebglSupported(x.textureSize)?(console.log("max texture size: "+x.maxTextureSize),new x.WebglFilterBackend({tileSize:x.textureSize})):x.Canvas2dFilterBackend?new x.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=x),function(){function e(e,t){if(this.__eventListeners[e]){var i=this.__eventListeners[e];t?i[i.indexOf(t)]=!1:x.util.array.fill(i,!1)}}function t(e,t){var i=function(){t.apply(this,arguments),this.off(e,i)}.bind(this);this.on(e,i)}x.Observable={fire:function(e,t){if(!this.__eventListeners)return this;var i=this.__eventListeners[e];if(!i)return this;for(var r=0,n=i.length;r-1||!!t&&this._objects.some((function(t){return"function"==typeof t.contains&&t.contains(e,!0)}))},complexity:function(){return this._objects.reduce((function(e,t){return e+(t.complexity?t.complexity():0)}),0)}},x.CommonMethods={_setOptions:function(e){for(var t in e)this.set(t,e[t])},_initGradient:function(e,t){!e||!e.colorStops||e instanceof x.Gradient||this.set(t,new x.Gradient(e))},_initPattern:function(e,t,i){!e||!e.source||e instanceof x.Pattern?i&&i():this.set(t,new x.Pattern(e,i))},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return"object"==typeof e?this._setObject(e):this._set(e,t),this},_set:function(e,t){this[e]=t},toggle:function(e){var t=this.get(e);return"boolean"==typeof t&&this.set(e,!t),this},get:function(e){return this[e]}},r=t,n=Math.sqrt,s=Math.atan2,o=Math.pow,a=Math.PI/180,l=Math.PI/2,x.util={cos:function(e){if(0===e)return 1;switch(e<0&&(e=-e),e/l){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(0===e)return 0;var t=1;switch(e<0&&(t=-1),e/l){case 1:return t;case 2:return 0;case 3:return-t}return Math.sin(e)},removeFromArray:function(e,t){var i=e.indexOf(t);return-1!==i&&e.splice(i,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*a},radiansToDegrees:function(e){return e/a},rotatePoint:function(e,t,i){var r=new x.Point(e.x-t.x,e.y-t.y),n=x.util.rotateVector(r,i);return new x.Point(n.x,n.y).addEquals(t)},rotateVector:function(e,t){var i=x.util.sin(t),r=x.util.cos(t);return{x:e.x*r-e.y*i,y:e.x*i+e.y*r}},createVector:function(e,t){return new x.Point(t.x-e.x,t.y-e.y)},calcAngleBetweenVectors:function(e,t){return Math.acos((e.x*t.x+e.y*t.y)/(Math.hypot(e.x,e.y)*Math.hypot(t.x,t.y)))},getHatVector:function(e){return new x.Point(e.x,e.y).multiply(1/Math.hypot(e.x,e.y))},getBisector:function(e,t,i){var r=x.util.createVector(e,t),n=x.util.createVector(e,i),s=x.util.calcAngleBetweenVectors(r,n),o=s*(0===x.util.calcAngleBetweenVectors(x.util.rotateVector(r,s),n)?1:-1)/2;return{vector:x.util.getHatVector(x.util.rotateVector(r,o)),angle:s}},projectStrokeOnPoints:function(e,t,i){var r=[],n=t.strokeWidth/2,s=t.strokeUniform?new x.Point(1/t.scaleX,1/t.scaleY):new x.Point(1,1),o=function(e){var t=n/Math.hypot(e.x,e.y);return new x.Point(e.x*t*s.x,e.y*t*s.y)};return e.length<=1||e.forEach((function(a,l){var h,c,u=new x.Point(a.x,a.y);0===l?(c=e[l+1],h=i?o(x.util.createVector(c,u)).addEquals(u):e[e.length-1]):l===e.length-1?(h=e[l-1],c=i?o(x.util.createVector(h,u)).addEquals(u):e[0]):(h=e[l-1],c=e[l+1]);var d,f,g=x.util.getBisector(u,h,c),_=g.vector,p=g.angle;if("miter"===t.strokeLineJoin&&(d=-n/Math.sin(p/2),f=new x.Point(_.x*d*s.x,_.y*d*s.y),Math.hypot(f.x,f.y)/n<=t.strokeMiterLimit))return r.push(u.add(f)),void r.push(u.subtract(f));d=-n*Math.SQRT2,f=new x.Point(_.x*d*s.x,_.y*d*s.y),r.push(u.add(f)),r.push(u.subtract(f))})),r},transformPoint:function(e,t,i){return i?new x.Point(t[0]*e.x+t[2]*e.y,t[1]*e.x+t[3]*e.y):new x.Point(t[0]*e.x+t[2]*e.y+t[4],t[1]*e.x+t[3]*e.y+t[5])},makeBoundingBoxFromPoints:function(e,t){if(t)for(var i=0;i0&&(t>r?t-=r:t=0,i>r?i-=r:i=0);var n,s=!0,o=e.getImageData(t,i,2*r||1,2*r||1),a=o.data.length;for(n=3;n=n?s-n:2*Math.PI-(n-s)}function s(e,t,i){for(var s=i[1],o=i[2],a=i[3],l=i[4],h=i[5],c=function(e,t,i,s,o,a,l){var h=Math.PI,c=l*h/180,u=x.util.sin(c),d=x.util.cos(c),f=0,g=0,_=-d*e*.5-u*t*.5,p=-d*t*.5+u*e*.5,m=(i=Math.abs(i))*i,v=(s=Math.abs(s))*s,y=p*p,S=_*_,b=m*v-m*y-v*S,w=0;if(b<0){var C=Math.sqrt(1-b/(m*v));i*=C,s*=C}else w=(o===a?-1:1)*Math.sqrt(b/(m*y+v*S));var T=w*i*p/s,E=-w*s*_/i,I=d*T-u*E+.5*e,O=u*T+d*E+.5*t,A=n(1,0,(_-T)/i,(p-E)/s),R=n((_-T)/i,(p-E)/s,(-_-T)/i,(-p-E)/s);0===a&&R>0?R-=2*h:1===a&&R<0&&(R+=2*h);for(var D=Math.ceil(Math.abs(R/h*2)),M=[],F=R/D,L=8/3*Math.sin(F/4)*Math.sin(F/4)/Math.sin(F/2),P=A+F,k=0;kw)for(var T=1,E=_.length;T2;for(t=t||0,h&&(a=e[2].xe[i-2].x?1:n.x===e[i-2].x?0:-1,l=n.y>e[i-2].y?1:n.y===e[i-2].y?0:-1),r.push(["L",n.x+a*t,n.y+l*t]),r},x.util.getPathSegmentsInfo=d,x.util.getBoundsOfCurve=function(t,i,r,n,s,o,a,l){var h;if(x.cachesBoundsOfCurve&&(h=e.call(arguments),x.boundsOfCurveCache[h]))return x.boundsOfCurveCache[h];var c,u,d,f,g,_,p,m,v=Math.sqrt,y=Math.min,S=Math.max,b=Math.abs,w=[],C=[[],[]];u=6*t-12*r+6*s,c=-3*t+9*r-9*s+3*a,d=3*r-3*t;for(var T=0;T<2;++T)if(T>0&&(u=6*i-12*n+6*o,c=-3*i+9*n-9*o+3*l,d=3*n-3*i),b(c)<1e-12){if(b(u)<1e-12)continue;0<(f=-d/u)&&f<1&&w.push(f)}else(p=u*u-4*d*c)<0||(0<(g=(-u+(m=v(p)))/(2*c))&&g<1&&w.push(g),0<(_=(-u-m)/(2*c))&&_<1&&w.push(_));for(var E,I,O,A=w.length,R=A;A--;)E=(O=1-(f=w[A]))*O*O*t+3*O*O*f*r+3*O*f*f*s+f*f*f*a,C[0][A]=E,I=O*O*O*i+3*O*O*f*n+3*O*f*f*o+f*f*f*l,C[1][A]=I;C[0][R]=t,C[1][R]=i,C[0][R+1]=a,C[1][R+1]=l;var D=[{x:y.apply(null,C[0]),y:y.apply(null,C[1])},{x:S.apply(null,C[0]),y:S.apply(null,C[1])}];return x.cachesBoundsOfCurve&&(x.boundsOfCurveCache[h]=D),D},x.util.getPointOnPath=function(e,t,i){i||(i=d(e));for(var r=0;t-i[r].length>0&&r1e-4;)i=l(s),n=s,(r=o(h.x,h.y,i.x,i.y))+a>t?(s-=c,c/=2):(h=i,s+=c,a+=r);return i.angle=u(n),i}(s,t)}},x.util.transformPath=function(e,t,i){return i&&(t=x.util.multiplyTransformMatrices(t,[1,0,0,1,-i.x,-i.y])),e.map((function(e){for(var i=e.slice(0),r={},n=1;n=t}))}}}(),function(){function e(t,i,r){if(r)if(!x.isLikelyNode&&i instanceof Element)t=i;else if(i instanceof Array){t=[];for(var n=0,s=i.length;n57343)return e.charAt(t);if(55296<=i&&i<=56319){if(e.length<=t+1)throw"High surrogate without following low surrogate";var r=e.charCodeAt(t+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return e.charAt(t)+e.charAt(t+1)}if(0===t)throw"Low surrogate without preceding high surrogate";var n=e.charCodeAt(t-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}x.util.string={camelize:function(e){return e.replace(/-+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))},capitalize:function(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1).toLowerCase())},escapeXml:function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(t){var i,r=0,n=[];for(r=0;r-1?e.prototype[n]=function(e){return function(){var i=this.constructor.superclass;this.constructor.superclass=r;var n=t[e].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==e)return n}}(n):e.prototype[n]=t[n],i&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};function n(){}function s(t){for(var i=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[t];if(r[t]!==n){i=n;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,e.call(arguments,1)):i.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}x.util.createClass=function(){var i=null,o=e.call(arguments,0);function a(){this.initialize.apply(this,arguments)}"function"==typeof o[0]&&(i=o.shift()),a.superclass=i,a.subclasses=[],i&&(n.prototype=i.prototype,a.prototype=new n,i.subclasses.push(a));for(var l=0,h=o.length;l-1||"touch"===e.pointerType},d="string"==typeof(u=x.document.createElement("div")).style.opacity,f="string"==typeof u.style.filter,g=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,_=function(e){return e},d?_=function(e,t){return e.style.opacity=t,e}:f&&(_=function(e,t){var i=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(i.zoom=1),g.test(i.filter)?(t=t>=.9999?"":"alpha(opacity="+100*t+")",i.filter=i.filter.replace(g,t)):i.filter+=" alpha(opacity="+100*t+")",e}),x.util.setStyle=function(e,t){var i=e.style;if(!i)return e;if("string"==typeof t)return e.style.cssText+=";"+t,t.indexOf("opacity")>-1?_(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)"opacity"===r?_(e,t[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=t[r];return e},function(){var e,t,i,r,n=Array.prototype.slice,s=function(e){return n.call(e,0)};try{e=s(x.document.childNodes)instanceof Array}catch(e){}function o(e,t){var i=x.document.createElement(e);for(var r in t)"class"===r?i.className=t[r]:"for"===r?i.htmlFor=t[r]:i.setAttribute(r,t[r]);return i}function a(e){for(var t=0,i=0,r=x.document.documentElement,n=x.document.body||{scrollLeft:0,scrollTop:0};e&&(e.parentNode||e.host)&&((e=e.parentNode||e.host)===x.document?(t=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(t+=e.scrollLeft||0,i+=e.scrollTop||0),1!==e.nodeType||"fixed"!==e.style.position););return{left:t,top:i}}e||(s=function(e){for(var t=new Array(e.length),i=e.length;i--;)t[i]=e[i];return t}),t=x.document.defaultView&&x.document.defaultView.getComputedStyle?function(e,t){var i=x.document.defaultView.getComputedStyle(e,null);return i?i[t]:void 0}:function(e,t){var i=e.style[t];return!i&&e.currentStyle&&(i=e.currentStyle[t]),i},i=x.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"",x.util.makeElementUnselectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=x.util.falseFunction),r?e.style[r]="none":"string"==typeof e.unselectable&&(e.unselectable="on"),e},x.util.makeElementSelectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=null),r?e.style[r]="":"string"==typeof e.unselectable&&(e.unselectable=""),e},x.util.setImageSmoothing=function(e,t){e.imageSmoothingEnabled=e.imageSmoothingEnabled||e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled||e.oImageSmoothingEnabled,e.imageSmoothingEnabled=t},x.util.getById=function(e){return"string"==typeof e?x.document.getElementById(e):e},x.util.toArray=s,x.util.addClass=function(e,t){e&&-1===(" "+e.className+" ").indexOf(" "+t+" ")&&(e.className+=(e.className?" ":"")+t)},x.util.makeElement=o,x.util.wrapElement=function(e,t,i){return"string"==typeof t&&(t=o(t,i)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t},x.util.getScrollLeftTop=a,x.util.getElementOffset=function(e){var i,r,n=e&&e.ownerDocument,s={left:0,top:0},o={left:0,top:0},l={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var h in l)o[l[h]]+=parseInt(t(e,h),10)||0;return i=n.documentElement,void 0!==e.getBoundingClientRect&&(s=e.getBoundingClientRect()),r=a(e),{left:s.left+r.left-(i.clientLeft||0)+o.left,top:s.top+r.top-(i.clientTop||0)+o.top}},x.util.getNodeCanvas=function(e){var t=x.jsdomImplForWrapper(e);return t._canvas||t._image},x.util.cleanUpJsdomNode=function(e){if(x.isLikelyNode){var t=x.jsdomImplForWrapper(e);t&&(t._image=null,t._canvas=null,t._currentSrc=null,t._attributes=null,t._classList=null)}}}(),function(){function e(){}x.util.request=function(t,i){i||(i={});var r=i.method?i.method.toUpperCase():"GET",n=i.onComplete||function(){},s=new x.window.XMLHttpRequest,o=i.body||i.parameters;return s.onreadystatechange=function(){4===s.readyState&&(n(s),s.onreadystatechange=e)},"GET"===r&&(o=null,"string"==typeof i.parameters&&(t=function(e,t){return e+(/\?/.test(e)?"&":"?")+t}(t,i.parameters))),s.open(r,t,!0),"POST"!==r&&"PUT"!==r||s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(o),s}}(),x.log=console.log,x.warn=console.warn,function(){var e=x.util.object.extend,t=x.util.object.clone,i=[];function r(){return!1}function n(e,t,i,r){return-i*Math.cos(e/r*(Math.PI/2))+i+t}x.util.object.extend(i,{cancelAll:function(){var e=this.splice(0);return e.forEach((function(e){e.cancel()})),e},cancelByCanvas:function(e){if(!e)return[];var t=this.filter((function(t){return"object"==typeof t.target&&t.target.canvas===e}));return t.forEach((function(e){e.cancel()})),t},cancelByTarget:function(e){var t=this.findAnimationsByTarget(e);return t.forEach((function(e){e.cancel()})),t},findAnimationIndex:function(e){return this.indexOf(this.findAnimation(e))},findAnimation:function(e){return this.find((function(t){return t.cancel===e}))},findAnimationsByTarget:function(e){return e?this.filter((function(t){return t.target===e})):[]}});var s=x.window.requestAnimationFrame||x.window.webkitRequestAnimationFrame||x.window.mozRequestAnimationFrame||x.window.oRequestAnimationFrame||x.window.msRequestAnimationFrame||function(e){return x.window.setTimeout(e,1e3/60)},o=x.window.cancelAnimationFrame||x.window.clearTimeout;function a(){return s.apply(x.window,arguments)}x.util.animate=function(i){i||(i={});var s,o=!1,l=function(){var e=x.runningAnimations.indexOf(s);return e>-1&&x.runningAnimations.splice(e,1)[0]};return s=e(t(i),{cancel:function(){return o=!0,l()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),x.runningAnimations.push(s),a((function(e){var t,h=e||+new Date,c=i.duration||500,u=h+c,d=i.onChange||r,f=i.abort||r,g=i.onComplete||r,_=i.easing||n,p="startValue"in i&&i.startValue.length>0,m="startValue"in i?i.startValue:0,v="endValue"in i?i.endValue:100,y=i.byValue||(p?m.map((function(e,t){return v[t]-m[t]})):v-m);i.onStart&&i.onStart(),function e(i){var r=(t=i||+new Date)>u?c:t-h,n=r/c,S=p?m.map((function(e,t){return _(r,m[t],y[t],c)})):_(r,m,y,c),b=p?Math.abs((S[0]-m[0])/y[0]):Math.abs((S-m)/y);if(s.currentValue=p?S.slice():S,s.completionRate=b,s.durationRate=n,!o){if(!f(S,b,n))return t>u?(s.currentValue=p?v.slice():v,s.completionRate=1,s.durationRate=1,d(p?v.slice():v,1,1),g(v,1,1),void l()):(d(S,b,n),void a(e));l()}}(h)})),s.cancel},x.util.requestAnimFrame=a,x.util.cancelAnimFrame=function(){return o.apply(x.window,arguments)},x.runningAnimations=i}(),function(){function e(e,t,i){var r="rgba("+parseInt(e[0]+i*(t[0]-e[0]),10)+","+parseInt(e[1]+i*(t[1]-e[1]),10)+","+parseInt(e[2]+i*(t[2]-e[2]),10);return(r+=","+(e&&t?parseFloat(e[3]+i*(t[3]-e[3])):1))+")"}x.util.animateColor=function(t,i,r,n){var s=new x.Color(t).getSource(),o=new x.Color(i).getSource(),a=n.onComplete,l=n.onChange;return n=n||{},x.util.animate(x.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(t,i,r,s){return e(i,r,n.colorEasing?n.colorEasing(t,s):1-Math.cos(t/s*(Math.PI/2)))},onComplete:function(t,i,r){if(a)return a(e(o,o,0),i,r)},onChange:function(t,i,r){if(l){if(Array.isArray(t))return l(e(t,t,0),i,r);l(t,i,r)}}}))}}(),function(){function e(e,t,i,r){return e-1&&c>-1&&c-1)&&(i="stroke")}else{if("href"===e||"xlink:href"===e||"font"===e)return i;if("imageSmoothing"===e)return"optimizeQuality"===i;a=l?i.map(s):s(i,n)}}else i="";return!l&&isNaN(a)?i:a}function f(e){return new RegExp("^("+e.join("|")+")\\b","i")}function g(e,t){var i,r,n,s,o=[];for(n=0,s=t.length;n1;)l.shift(),h=t.util.multiplyTransformMatrices(h,l[0]);return h}}();var v=new RegExp("^\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*$");function y(e){if(!t.svgViewBoxElementsRegEx.test(e.nodeName))return{};var i,r,n,o,a,l,h=e.getAttribute("viewBox"),c=1,u=1,d=e.getAttribute("width"),f=e.getAttribute("height"),g=e.getAttribute("x")||0,_=e.getAttribute("y")||0,p=e.getAttribute("preserveAspectRatio")||"",m=!h||!(h=h.match(v)),y=!d||!f||"100%"===d||"100%"===f,S=m&&y,b={},w="",C=0,x=0;if(b.width=0,b.height=0,b.toBeParsed=S,m&&(g||_)&&e.parentNode&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") ",a=(e.getAttribute("transform")||"")+w,e.setAttribute("transform",a),e.removeAttribute("x"),e.removeAttribute("y")),S)return b;if(m)return b.width=s(d),b.height=s(f),b;if(i=-parseFloat(h[1]),r=-parseFloat(h[2]),n=parseFloat(h[3]),o=parseFloat(h[4]),b.minX=i,b.minY=r,b.viewBoxWidth=n,b.viewBoxHeight=o,y?(b.width=n,b.height=o):(b.width=s(d),b.height=s(f),c=b.width/n,u=b.height/o),"none"!==(p=t.util.parsePreserveAspectRatioAttribute(p)).alignX&&("meet"===p.meetOrSlice&&(u=c=c>u?u:c),"slice"===p.meetOrSlice&&(u=c=c>u?c:u),C=b.width-n*c,x=b.height-o*c,"Mid"===p.alignX&&(C/=2),"Mid"===p.alignY&&(x/=2),"Min"===p.alignX&&(C=0),"Min"===p.alignY&&(x=0)),1===c&&1===u&&0===i&&0===r&&0===g&&0===_)return b;if((g||_)&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") "),a=w+" matrix("+c+" 0 0 "+u+" "+(i*c+C)+" "+(r*u+x)+") ","svg"===e.nodeName){for(l=e.ownerDocument.createElementNS(t.svgNS,"g");e.firstChild;)l.appendChild(e.firstChild);e.appendChild(l)}else(l=e).removeAttribute("x"),l.removeAttribute("y"),a=l.getAttribute("transform")+a;return l.setAttribute("transform",a),b}function S(e,t){var i="xlink:href",r=m(e,t.getAttribute(i).slice(1));if(r&&r.getAttribute(i)&&S(e,r),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach((function(e){r&&!t.hasAttribute(e)&&r.hasAttribute(e)&&t.setAttribute(e,r.getAttribute(e))})),!t.children.length)for(var n=r.cloneNode(!0);n.firstChild;)t.appendChild(n.firstChild);t.removeAttribute(i)}t.parseSVGDocument=function(e,i,n,s){if(e){!function(e){for(var i=g(e,["use","svg:use"]),r=0;i.length&&re.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return void 0===t&&(t=.5),t=Math.max(Math.min(1,t),0),new i(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,i=this.y-e.y;return Math.sqrt(t*t+i*i)},midPointFrom:function(e){return this.lerp(e)},min:function(e){return new i(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new i(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){return this.x=e,this.y=t,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setFromPoint:function(e){return this.x=e.x,this.y=e.y,this},swap:function(e){var t=this.x,i=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=i},clone:function(){return new i(this.x,this.y)}})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){this.status=e,this.points=[]}t.Intersection?t.warn("fabric.Intersection is already defined"):(t.Intersection=i,t.Intersection.prototype={constructor:i,appendPoint:function(e){return this.points.push(e),this},appendPoints:function(e){return this.points=this.points.concat(e),this}},t.Intersection.intersectLineLine=function(e,r,n,s){var o,a=(s.x-n.x)*(e.y-n.y)-(s.y-n.y)*(e.x-n.x),l=(r.x-e.x)*(e.y-n.y)-(r.y-e.y)*(e.x-n.x),h=(s.y-n.y)*(r.x-e.x)-(s.x-n.x)*(r.y-e.y);if(0!==h){var c=a/h,u=l/h;0<=c&&c<=1&&0<=u&&u<=1?(o=new i("Intersection")).appendPoint(new t.Point(e.x+c*(r.x-e.x),e.y+c*(r.y-e.y))):o=new i}else o=new i(0===a||0===l?"Coincident":"Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var n,s,o,a,l=new i,h=r.length;for(a=0;a0&&(l.status="Intersection"),l},t.Intersection.intersectPolygonPolygon=function(e,t){var r,n=new i,s=e.length;for(r=0;r0&&(n.status="Intersection"),n},t.Intersection.intersectPolygonRectangle=function(e,r,n){var s=r.min(n),o=r.max(n),a=new t.Point(o.x,s.y),l=new t.Point(s.x,o.y),h=i.intersectLinePolygon(s,a,e),c=i.intersectLinePolygon(a,o,e),u=i.intersectLinePolygon(o,l,e),d=i.intersectLinePolygon(l,s,e),f=new i;return f.appendPoints(h.points),f.appendPoints(c.points),f.appendPoints(u.points),f.appendPoints(d.points),f.points.length>0&&(f.status="Intersection"),f})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}t.Color?t.warn("fabric.Color is already defined."):(t.Color=i,t.Color.prototype={_tryParsingColor:function(e){var t;e in i.colorNameMap&&(e=i.colorNameMap[e]),"transparent"===e&&(t=[255,255,255,0]),t||(t=i.sourceFromHex(e)),t||(t=i.sourceFromRgb(e)),t||(t=i.sourceFromHsl(e)),t||(t=[0,0,0,1]),t&&this.setSource(t)},_rgbToHsl:function(e,i,r){e/=255,i/=255,r/=255;var n,s,o,a=t.util.array.max([e,i,r]),l=t.util.array.min([e,i,r]);if(o=(a+l)/2,a===l)n=s=0;else{var h=a-l;switch(s=o>.5?h/(2-a-l):h/(a+l),a){case e:n=(i-r)/h+(i0)-(e<0)||+e};function f(e,t){var i=e.angle+u(Math.atan2(t.y,t.x))+360;return Math.round(i%360/45)}function g(e,i){var r=i.transform.target,n=r.canvas,s=t.util.object.clone(i);s.target=r,n&&n.fire("object:"+e,s),r.fire(e,i)}function _(e,t){var i=t.canvas,r=e[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function p(e){return e.originX===h&&e.originY===h}function m(e,t,i){var r=e.lockScalingX,n=e.lockScalingY;return!((!r||!n)&&(t||!r&&!n||!i)&&(!r||"x"!==t)&&(!n||"y"!==t))}function v(e,t,i,r){return{e,transform:t,pointer:{x:i,y:r}}}function y(e){return function(t,i,r,n){var s=i.target,o=s.getCenterPoint(),a=s.translateToOriginPoint(o,i.originX,i.originY),l=e(t,i,r,n);return s.setPositionByOrigin(a,i.originX,i.originY),l}}function S(e,t){return function(i,r,n,s){var o=t(i,r,n,s);return o&&g(e,v(i,r,n,s)),o}}function b(e,i,r,n,s){var o=e.target,a=o.controls[e.corner],l=o.canvas.getZoom(),h=o.padding/l,c=o.toLocalPoint(new t.Point(n,s),i,r);return c.x>=h&&(c.x-=h),c.x<=-h&&(c.x+=h),c.y>=h&&(c.y-=h),c.y<=h&&(c.y+=h),c.x-=a.offsetX,c.y-=a.offsetY,c}function w(e){return e.flipX!==e.flipY}function C(e,t,i,r,n){if(0!==e[t]){var s=n/e._getTransformedDimensions()[r]*e[i];e.set(i,s)}}function x(e,t,i,r){var n,h=t.target,c=h._getTransformedDimensions(0,h.skewY),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.x)-c.x,g=h.skewX;f<2?n=0:(n=u(Math.atan2(f/h.scaleX,c.y/h.scaleY)),t.originX===s&&t.originY===l&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(h)&&(n=-n));var _=g!==n;if(_){var p=h._getTransformedDimensions().y;h.set("skewX",n),C(h,"skewY","scaleY","y",p)}return _}function T(e,t,i,r){var n,h=t.target,c=h._getTransformedDimensions(h.skewX,0),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.y)-c.y,g=h.skewY;f<2?n=0:(n=u(Math.atan2(f/h.scaleY,c.x/h.scaleX)),t.originX===s&&t.originY===l&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(h)&&(n=-n));var _=g!==n;if(_){var p=h._getTransformedDimensions().x;h.set("skewY",n),C(h,"skewX","scaleX","x",p)}return _}function E(e,t,i,r,n){n=n||{};var s,o,a,l,h,u,f=t.target,g=f.lockScalingX,v=f.lockScalingY,y=n.by,S=_(e,f),w=m(f,y,S),C=t.gestureScale;if(w)return!1;if(C)o=t.scaleX*C,a=t.scaleY*C;else{if(s=b(t,t.originX,t.originY,i,r),h="y"!==y?d(s.x):1,u="x"!==y?d(s.y):1,t.signX||(t.signX=h),t.signY||(t.signY=u),f.lockScalingFlip&&(t.signX!==h||t.signY!==u))return!1;if(l=f._getTransformedDimensions(),S&&!y){var x=Math.abs(s.x)+Math.abs(s.y),T=t.original,E=x/(Math.abs(l.x*T.scaleX/f.scaleX)+Math.abs(l.y*T.scaleY/f.scaleY));o=T.scaleX*E,a=T.scaleY*E}else o=Math.abs(s.x*f.scaleX/l.x),a=Math.abs(s.y*f.scaleY/l.y);p(t)&&(o*=2,a*=2),t.signX!==h&&"y"!==y&&(t.originX=c[t.originX],o*=-1,t.signX=h),t.signY!==u&&"x"!==y&&(t.originY=c[t.originY],a*=-1,t.signY=u)}var I=f.scaleX,O=f.scaleY;return y?("x"===y&&f.set("scaleX",o),"y"===y&&f.set("scaleY",a)):(!g&&f.set("scaleX",o),!v&&f.set("scaleY",a)),I!==f.scaleX||O!==f.scaleY}n.scaleCursorStyleHandler=function(e,t,r){var n=_(e,r),s="";if(0!==t.x&&0===t.y?s="x":0===t.x&&0!==t.y&&(s="y"),m(r,s,n))return"not-allowed";var o=f(r,t);return i[o]+"-resize"},n.skewCursorStyleHandler=function(e,t,i){var n="not-allowed";if(0!==t.x&&i.lockSkewingY)return n;if(0!==t.y&&i.lockSkewingX)return n;var s=f(i,t)%4;return r[s]+"-resize"},n.scaleSkewCursorStyleHandler=function(e,t,i){return e[i.canvas.altActionKey]?n.skewCursorStyleHandler(e,t,i):n.scaleCursorStyleHandler(e,t,i)},n.rotationWithSnapping=S("rotating",y((function(e,t,i,r){var n=t,s=n.target,o=s.translateToOriginPoint(s.getCenterPoint(),n.originX,n.originY);if(s.lockRotation)return!1;var a,l=Math.atan2(n.ey-o.y,n.ex-o.x),h=Math.atan2(r-o.y,i-o.x),c=u(h-l+n.theta);if(s.snapAngle>0){var d=s.snapAngle,f=s.snapThreshold||d,g=Math.ceil(c/d)*d,_=Math.floor(c/d)*d;Math.abs(c-_)0?s:a:(c>0&&(n=u===o?s:a),c<0&&(n=u===o?a:s),w(l)&&(n=n===s?a:s)),t.originX=n,S("skewing",y(x))(e,t,i,r))},n.skewHandlerY=function(e,t,i,r){var n,a=t.target,c=a.skewY,u=t.originX;return!a.lockSkewingY&&(0===c?n=b(t,h,h,i,r).y>0?o:l:(c>0&&(n=u===s?o:l),c<0&&(n=u===s?l:o),w(a)&&(n=n===o?l:o)),t.originY=n,S("skewing",y(T))(e,t,i,r))},n.dragHandler=function(e,t,i,r){var n=t.target,s=i-t.offsetX,o=r-t.offsetY,a=!n.get("lockMovementX")&&n.left!==s,l=!n.get("lockMovementY")&&n.top!==o;return a&&n.set("left",s),l&&n.set("top",o),(a||l)&&g("moving",v(e,t,i,r)),a||l},n.scaleOrSkewActionName=function(e,t,i){var r=e[i.canvas.altActionKey];return 0===t.x?r?"skewX":"scaleY":0===t.y?r?"skewY":"scaleX":void 0},n.rotationStyleHandler=function(e,t,i){return i.lockRotation?"not-allowed":t.cursorStyle},n.fireEvent=g,n.wrapWithFixedAnchor=y,n.wrapWithFireEvent=S,n.getLocalPoint=b,t.controlsUtils=n}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians,r=t.controlsUtils;r.renderCircleControl=function(e,t,i,r,n){r=r||{};var s,o=this.sizeX||r.cornerSize||n.cornerSize,a=this.sizeY||r.cornerSize||n.cornerSize,l=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,h=l?"stroke":"fill",c=!l&&(r.cornerStrokeColor||n.cornerStrokeColor),u=t,d=i;e.save(),e.fillStyle=r.cornerColor||n.cornerColor,e.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,o>a?(s=o,e.scale(1,a/o),d=i*o/a):a>o?(s=a,e.scale(o/a,1),u=t*a/o):s=o,e.lineWidth=1,e.beginPath(),e.arc(u,d,s/2,0,2*Math.PI,!1),e[h](),c&&e.stroke(),e.restore()},r.renderSquareControl=function(e,t,r,n,s){n=n||{};var o=this.sizeX||n.cornerSize||s.cornerSize,a=this.sizeY||n.cornerSize||s.cornerSize,l=void 0!==n.transparentCorners?n.transparentCorners:s.transparentCorners,h=l?"stroke":"fill",c=!l&&(n.cornerStrokeColor||s.cornerStrokeColor),u=o/2,d=a/2;e.save(),e.fillStyle=n.cornerColor||s.cornerColor,e.strokeStyle=n.cornerStrokeColor||s.cornerStrokeColor,e.lineWidth=1,e.translate(t,r),e.rotate(i(s.angle)),e[h+"Rect"](-u,-d,o,a),c&&e.strokeRect(-u,-d,o,a),e.restore()}}(t),function(e){var t=e.fabric||(e.fabric={});t.Control=function(e){for(var t in e)this[t]=e[t]},t.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(e,t){return t.cursorStyle},getActionName:function(e,t){return t.actionName},getVisibility:function(e,t){var i=e._controlsVisibility;return i&&void 0!==i[t]?i[t]:this.visible},setVisibility:function(e){this.visible=e},positionHandler:function(e,i){return t.util.transformPoint({x:this.x*e.x+this.offsetX,y:this.y*e.y+this.offsetY},i)},calcCornerCoords:function(e,i,r,n,s){var o,a,l,h,c=s?this.touchSizeX:this.sizeX,u=s?this.touchSizeY:this.sizeY;if(c&&u&&c!==u){var d=Math.atan2(u,c),f=Math.sqrt(c*c+u*u)/2,g=d-t.util.degreesToRadians(e),_=Math.PI/2-d-t.util.degreesToRadians(e);o=f*t.util.cos(g),a=f*t.util.sin(g),l=f*t.util.cos(_),h=f*t.util.sin(_)}else f=.7071067812*(c&&u?c:i),g=t.util.degreesToRadians(45-e),o=l=f*t.util.cos(g),a=h=f*t.util.sin(g);return{tl:{x:r-h,y:n-l},tr:{x:r+o,y:n-a},bl:{x:r-o,y:n+a},br:{x:r+h,y:n+l}}},render:function(e,i,r,n,s){"circle"===((n=n||{}).cornerStyle||s.cornerStyle)?t.controlsUtils.renderCircleControl.call(this,e,i,r,n,s):t.controlsUtils.renderSquareControl.call(this,e,i,r,n,s)}}}(t),function(){function e(e,t){var i,r,n,s,o=e.getAttribute("style"),a=e.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,o){var l=o.split(/\s*;\s*/);for(""===l[l.length-1]&&l.pop(),s=l.length;s--;){var h=l[s].split(/\s*:\s*/),c=h[0].trim(),u=h[1].trim();"stop-color"===c?i=u:"stop-opacity"===c&&(n=u)}}return i||(i=e.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=e.getAttribute("stop-opacity")),r=(i=new x.Color(i)).getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*t,{offset:a,color:i.toRgb(),opacity:n}}var t=x.util.object.clone;x.Gradient=x.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(e){e||(e={}),e.coords||(e.coords={});var t,i=this;Object.keys(e).forEach((function(t){i[t]=e[t]})),this.id?this.id+="_"+x.Object.__uid++:this.id=x.Object.__uid++,t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},"radial"===this.type&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.colorStops=e.colorStops.slice()},addColorStop:function(e){for(var t in e){var i=new x.Color(e[t]);this.colorStops.push({offset:parseFloat(t),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(e){var t={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return x.util.populateWithProperties(this,t,e),t},toSVG:function(e,i){var r,n,s,o,a=t(this.coords,!0),l=(i=i||{},t(this.colorStops,!0)),h=a.r1>a.r2,c=this.gradientTransform?this.gradientTransform.concat():x.iMatrix.concat(),u=-this.offsetX,d=-this.offsetY,f=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(l.sort((function(e,t){return e.offset-t.offset})),"objectBoundingBox"===g?(u/=e.width,d/=e.height):(u+=e.width/2,d+=e.height/2),"path"===e.type&&"percentage"!==this.gradientUnits&&(u-=e.pathOffset.x,d-=e.pathOffset.y),c[4]-=u,c[5]-=d,o='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',o+=' gradientTransform="'+(f?i.additionalTransform+" ":"")+x.util.matrixToSVG(c)+'" ',"linear"===this.type?s=["\n']:"radial"===this.type&&(s=["\n']),"radial"===this.type){if(h)for((l=l.concat()).reverse(),r=0,n=l.length;r0){var p=_/Math.max(a.r1,a.r2);for(r=0,n=l.length;r\n')}return s.push("linear"===this.type?"\n":"\n"),s.join("")},toLive:function(e){var t,i,r,n=x.util.object.clone(this.coords);if(this.type){for("linear"===this.type?t=e.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(t=e.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i1?1:s,isNaN(s)&&(s=1);var o,a,l,h,c=t.getElementsByTagName("stop"),u="userSpaceOnUse"===t.getAttribute("gradientUnits")?"pixels":"percentage",d=t.getAttribute("gradientTransform")||"",f=[],g=0,_=0;for("linearGradient"===t.nodeName||"LINEARGRADIENT"===t.nodeName?(o="linear",a=function(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")||0,x2:e.getAttribute("x2")||"100%",y2:e.getAttribute("y2")||0}}(t)):(o="radial",a=function(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%",y1:e.getAttribute("fy")||e.getAttribute("cy")||"50%",r1:0,x2:e.getAttribute("cx")||"50%",y2:e.getAttribute("cy")||"50%",r2:e.getAttribute("r")||"50%"}}(t)),l=c.length;l--;)f.push(e(c[l],s));return h=x.parseTransformAttribute(d),function(e,t,i,r){var n,s;Object.keys(t).forEach((function(e){"Infinity"===(n=t[e])?s=1:"-Infinity"===n?s=0:(s=parseFloat(t[e],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(s*=.01,"pixels"===r&&("x1"!==e&&"x2"!==e&&"r2"!==e||(s*=i.viewBoxWidth||i.width),"y1"!==e&&"y2"!==e||(s*=i.viewBoxHeight||i.height)))),t[e]=s}))}(0,a,n,u),"pixels"===u&&(g=-i.left,_=-i.top),new x.Gradient({id:t.getAttribute("id"),type:o,coords:a,colorStops:f,gradientUnits:u,gradientTransform:h,offsetX:g,offsetY:_})}})}(),m=x.util.toFixed,x.Pattern=x.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(e,t){if(e||(e={}),this.id=x.Object.__uid++,this.setOptions(e),!e.source||e.source&&"string"!=typeof e.source)t&&t(this);else{var i=this;this.source=x.util.createImage(),x.util.loadImage(e.source,(function(e,r){i.source=e,t&&t(i,r)}),null,this.crossOrigin)}},toObject:function(e){var t,i,r=x.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?t=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(t=this.source.toDataURL()),i={type:"pattern",source:t,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:m(this.offsetX,r),offsetY:m(this.offsetY,r),patternTransform:this.patternTransform?this.patternTransform.concat():null},x.util.populateWithProperties(this,i,e),i},toSVG:function(e){var t="function"==typeof this.source?this.source():this.source,i=t.width/e.width,r=t.height/e.height,n=this.offsetX/e.width,s=this.offsetY/e.height,o="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(r=1,s&&(r+=Math.abs(s))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,n&&(i+=Math.abs(n))),t.src?o=t.src:t.toDataURL&&(o=t.toDataURL()),'\n\n\n'},setOptions:function(e){for(var t in e)this[t]=e[t]},toLive:function(e){var t=this.source;if(!t)return"";if(void 0!==t.src){if(!t.complete)return"";if(0===t.naturalWidth||0===t.naturalHeight)return""}return e.createPattern(t,this.repeat)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.toFixed;t.Shadow?t.warn("fabric.Shadow is already defined."):(t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(e){for(var i in"string"==typeof e&&(e=this._parseShadow(e)),e)this[i]=e[i];this.id=t.Object.__uid++},_parseShadow:function(e){var i=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var r=40,n=40,s=t.Object.NUM_FRACTION_DIGITS,o=t.util.rotateVector({x:this.offsetX,y:this.offsetY},t.util.degreesToRadians(-e.angle)),a=new t.Color(this.color);return e.width&&e.height&&(r=100*i((Math.abs(o.x)+this.blur)/e.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/e.height,s)+20),e.flipX&&(o.x*=-1),e.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var e={},i=t.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach((function(t){this[t]!==i[t]&&(e[t]=this[t])}),this),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(t),function(){if(x.StaticCanvas)x.warn("fabric.StaticCanvas is already defined.");else{var e=x.util.object.extend,t=x.util.getElementOffset,i=x.util.removeFromArray,r=x.util.toFixed,n=x.util.transformPoint,s=x.util.invertTransform,o=x.util.getNodeCanvas,a=x.util.createCanvasElement,l=new Error("Could not initialize `canvas` element");x.StaticCanvas=x.util.createClass(x.CommonMethods,{initialize:function(e,t){t||(t={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(e,t)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:x.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(e,t){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this.interactive||this._initRetinaScaling(),t.overlayImage&&this.setOverlayImage(t.overlayImage,i),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,i),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,i),t.overlayColor&&this.setOverlayColor(t.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return x.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,x.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var e=x.devicePixelRatio;this.__initRetinaScaling(e,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(e,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(e,t,i){t.setAttribute("width",this.width*e),t.setAttribute("height",this.height*e),i.scale(e,e)},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,i){return this.__setBgOverlayImage("overlayImage",e,t,i)},setBackgroundImage:function(e,t,i){return this.__setBgOverlayImage("backgroundImage",e,t,i)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,i,r){return"string"==typeof t?x.util.loadImage(t,(function(t,n){if(t){var s=new x.Image(t,r);this[e]=s,s.canvas=this}i&&i(t,n)}),this,r&&r.crossOrigin):(r&&t.setOptions(r),this[e]=t,t&&(t.canvas=this),i&&i(t,!1)),this},__setBgOverlayColor:function(e,t,i){return this[e]=t,this._initGradient(t,e),this._initPattern(t,e,i),this},_createCanvasElement:function(){var e=a();if(!e)throw l;if(e.style||(e.style={}),void 0===e.getContext)throw l;return e},_initOptions:function(e){var t=this.lowerCanvasEl;this._setOptions(e),this.width=this.width||parseInt(t.width,10)||0,this.height=this.height||parseInt(t.height,10)||0,this.lowerCanvasEl.style&&(t.width=this.width,t.height=this.height,t.style.width=this.width+"px",t.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(e){e&&e.getContext?this.lowerCanvasEl=e:this.lowerCanvasEl=x.util.getById(e)||this._createCanvasElement(),x.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var i;for(var r in t=t||{},e)i=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),i+="px",this.hasLostContext=!0),t.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),t.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(e){var t,i,r,n=this._activeObject,s=this.backgroundImage,o=this.overlayImage;for(this.viewportTransform=e,i=0,r=this._objects.length;i\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",t),this._setSVGObjects(i,t),this.clipPath&&i.push("\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",t),i.push(""),i.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('\n','\n')},_setSVGHeader:function(e,t){var i,n=t.width||this.width,s=t.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=x.Object.NUM_FRACTION_DIGITS;t.viewBox?o='viewBox="'+t.viewBox.x+" "+t.viewBox.y+" "+t.viewBox.width+" "+t.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),e.push("\n',"Created with Fabric.js ",x.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(t),"\n")},createSVGClipPathMarkup:function(e){var t=this.clipPath;return t?(t.clipPathId="CLIPPATH_"+x.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(e.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var e=this;return["background","overlay"].map((function(t){var i=e[t+"Color"];if(i&&i.toLive){var r=e[t+"Vpt"],n=e.viewportTransform,s={width:e.width/(r?n[0]:1),height:e.height/(r?n[3]:1)};return i.toSVG(s,{additionalTransform:r?x.util.matrixToSVG(n):""})}})).join("")},createSVGFontFacesMarkup:function(){var e,t,i,r,n,s,o,a,l="",h={},c=x.fontPaths,u=[];for(this._objects.forEach((function e(t){u.push(t),t._objects&&t._objects.forEach(e)})),o=0,a=u.length;o',"\n",l,"","\n"].join("")),l},_setSVGObjects:function(e,t){var i,r,n,s=this._objects;for(r=0,n=s.length;r\n")}else e.push('\n")},sendToBack:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(t=(n=s._objects).length;t--;)r=n[t],i(this._objects,r),this._objects.unshift(r);else i(this._objects,e),this._objects.unshift(e);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(n=s._objects,t=0;t0+h&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),h++;else 0!==(s=this._objects.indexOf(e))&&(o=this._findNewLowerIndex(e,s,t),i(this._objects,e),this._objects.splice(o,0,e));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(e,t,i){var r,n;if(i){for(r=t,n=t-1;n>=0;--n)if(e.intersectsWithObject(this._objects[n])||e.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(e)){r=n;break}}else r=t-1;return r},bringForward:function(e,t){if(!e)return this;var r,n,s,o,a,l=this._activeObject,h=0;if(e===l&&"activeSelection"===e.type)for(r=(a=l._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),e(x.StaticCanvas.prototype,x.Observable),e(x.StaticCanvas.prototype,x.Collection),e(x.StaticCanvas.prototype,x.DataURLExporter),e(x.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=a();if(!t||!t.getContext)return null;var i=t.getContext("2d");return i&&"setLineDash"===e?void 0!==i.setLineDash:null}}),x.StaticCanvas.prototype.toJSON=x.StaticCanvas.prototype.toObject,x.isLikelyNode&&(x.StaticCanvas.prototype.createPNGStream=function(){var e=o(this.lowerCanvasEl);return e&&e.createPNGStream()},x.StaticCanvas.prototype.createJPEGStream=function(e){var t=o(this.lowerCanvasEl);return t&&t.createJPEGStream(e)})}}(),x.BaseBrush=x.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(e){e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.miterLimit=this.strokeMiterLimit,e.lineJoin=this.strokeLineJoin,e.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(e){var t=this.canvas.viewportTransform;e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5])},_setShadow:function(){if(this.shadow){var e=this.canvas,t=this.shadow,i=e.contextTop,r=e.getZoom();e&&e._isRetinaScaling()&&(r*=x.devicePixelRatio),i.shadowColor=t.color,i.shadowBlur=t.blur*r,i.shadowOffsetX=t.offsetX*r,i.shadowOffsetY=t.offsetY*r}},needsFullRender:function(){return new x.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_isOutSideCanvas:function(e){return e.x<0||e.x>this.canvas.getWidth()||e.y<0||e.y>this.canvas.getHeight()}}),x.PencilBrush=x.util.createClass(x.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(e){this.canvas=e,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(e,t,i){var r=t.midPointFrom(i);return e.quadraticCurveTo(t.x,t.y,r.x,r.y),r},onMouseDown:function(e,t){this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],this._prepareForDrawing(e),this._captureDrawingPath(e),this._render())},onMouseMove:function(e,t){if(this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(e))&&this._captureDrawingPath(e)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(e){return!this.canvas._isMainEvent(e.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(e){var t=new x.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){return!(this._points.length>1&&e.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(e),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(e){var t=new x.Point(e.x,e.y);return this._addPoint(t)},_render:function(e){var t,i,r=this._points[0],n=this._points[1];if(e=e||this.canvas.contextTop,this._saveAndTransform(e),e.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new x.Point(r.x,r.y),n=new x.Point(n.x,n.y),r.x-=s,n.x+=s}for(e.moveTo(r.x,r.y),t=1,i=this._points.length;t=n&&(o=e[i],a.push(o));return a.push(e[s]),a},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var e=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(e))this.canvas.requestRenderAll();else{var t=this.createPath(e);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:t}),this.canvas.add(t),this.canvas.requestRenderAll(),t.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:t})}}}),x.CircleBrush=x.util.createClass(x.BaseBrush,{width:10,initialize:function(e){this.canvas=e,this.points=[]},drawDot:function(e){var t=this.addPoint(e),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,t),i.restore()},dot:function(e,t){e.fillStyle=t.fill,e.beginPath(),e.arc(t.x,t.y,t.radius,0,2*Math.PI,!1),e.closePath(),e.fill()},onMouseDown:function(e){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(e)},_render:function(){var e,t,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),e=0,t=r.length;e0&&!this.preserveObjectStacking){t=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),t.push.apply(t,i)}else t=this._objects;return t},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var e=this.contextContainer;return this.renderCanvas(e,this._chooseObjectsToRender()),this},renderTopLayer:function(e){e.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(e),this.contextTopDirty=!0),e.restore()},renderTop:function(){var e=this.contextTop;return this.clearContext(e),this.renderTopLayer(e),this.fire("after:render"),this},_normalizePointer:function(e,t){var i=e.calcTransformMatrix(),r=x.util.invertTransform(i),n=this.restorePointerVpt(t);return x.util.transformPoint(n,r)},isTargetTransparent:function(e,t,i){if(e.shouldCache()&&e._cacheCanvas&&e!==this._activeObject){var r=this._normalizePointer(e,{x:t,y:i}),n=Math.max(e.cacheTranslationX+r.x*e.zoomX,0),s=Math.max(e.cacheTranslationY+r.y*e.zoomY,0);return x.util.isTransparent(e._cacheContext,Math.round(n),Math.round(s),this.targetFindTolerance)}var o=this.contextCache,a=e.selectionBackgroundColor,l=this.viewportTransform;return e.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(l[0],l[1],l[2],l[3],l[4],l[5]),e.render(o),o.restore(),e.selectionBackgroundColor=a,x.util.isTransparent(o,t,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(e){return Array.isArray(this.selectionKey)?!!this.selectionKey.find((function(t){return!0===e[t]})):e[this.selectionKey]},_shouldClearSelection:function(e,t){var i=this.getActiveObjects(),r=this._activeObject;return!t||t&&r&&i.length>1&&-1===i.indexOf(t)&&r!==t&&!this._isSelectionKeyPressed(e)||t&&!t.evented||t&&!t.selectable&&r&&r!==t},_shouldCenterTransform:function(e,t,i){var r;if(e)return"scale"===t||"scaleX"===t||"scaleY"===t||"resizing"===t?r=this.centeredScaling||e.centeredScaling:"rotate"===t&&(r=this.centeredRotation||e.centeredRotation),r?!i:i},_getOriginFromCorner:function(e,t){var i={x:e.originX,y:e.originY};return"ml"===t||"tl"===t||"bl"===t?i.x="right":"mr"!==t&&"tr"!==t&&"br"!==t||(i.x="left"),"tl"===t||"mt"===t||"tr"===t?i.y="bottom":"bl"!==t&&"mb"!==t&&"br"!==t||(i.y="top"),i},_getActionFromCorner:function(e,t,i,r){if(!t||!e)return"drag";var n=r.controls[t];return n.getActionName(i,n,r)},_setupCurrentTransform:function(e,i,r){if(i){var n=this.getPointer(e),s=i.__corner,o=i.controls[s],a=r&&s?o.getActionHandler(e,i,o):x.controlsUtils.dragHandler,l=this._getActionFromCorner(r,s,e,i),h=this._getOriginFromCorner(i,s),c=e[this.centeredKey],u={target:i,action:l,actionHandler:a,corner:s,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:h.x,originY:h.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:t(i.angle),width:i.width*i.scaleX,shiftKey:e.shiftKey,altKey:c,original:x.util.saveObjectTransform(i)};this._shouldCenterTransform(i,l,c)&&(u.originX="center",u.originY="center"),u.original.originX=h.x,u.original.originY=h.y,this._currentTransform=u,this._beforeTransform(e)}},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_drawSelection:function(e){var t=this._groupSelector,i=new x.Point(t.ex,t.ey),r=x.util.transformPoint(i,this.viewportTransform),n=new x.Point(t.ex+t.left,t.ey+t.top),s=x.util.transformPoint(n,this.viewportTransform),o=Math.min(r.x,s.x),a=Math.min(r.y,s.y),l=Math.max(r.x,s.x),h=Math.max(r.y,s.y),c=this.selectionLineWidth/2;this.selectionColor&&(e.fillStyle=this.selectionColor,e.fillRect(o,a,l-o,h-a)),this.selectionLineWidth&&this.selectionBorderColor&&(e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor,o+=c,a+=c,l-=c,h-=c,x.Object.prototype._setLineDash.call(this,e,this.selectionDashArray),e.strokeRect(o,a,l-o,h-a))},findTarget:function(e,t){if(!this.skipTargetFind){var r,n,s=this.getPointer(e,!0),o=this._activeObject,a=this.getActiveObjects(),l=i(e),h=a.length>1&&!t||1===a.length;if(this.targets=[],h&&o._findTargetCorner(s,l))return o;if(a.length>1&&!t&&o===this._searchPossibleTargets([o],s))return o;if(1===a.length&&o===this._searchPossibleTargets([o],s)){if(!this.preserveObjectStacking)return o;r=o,n=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,s);return e[this.altSelectionKey]&&c&&r&&c!==r&&(c=r,this.targets=n),c}},_checkTarget:function(e,t,i){if(t&&t.visible&&t.evented&&t.containsPoint(e)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||t.isEditing)return!0;if(!this.isTargetTransparent(t,i.x,i.y))return!0}},_searchPossibleTargets:function(e,t){for(var i,r,n=e.length;n--;){var s=e[n],o=s.group?this._normalizePointer(s.group,t):t;if(this._checkTarget(o,s,t)){(i=e[n]).subTargetCheck&&i instanceof x.Group&&(r=this._searchPossibleTargets(i._objects,t))&&this.targets.push(r);break}}return i},restorePointerVpt:function(e){return x.util.transformPoint(e,x.util.invertTransform(this.viewportTransform))},getPointer:function(t,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=e(t),s=this.upperCanvasEl,o=s.getBoundingClientRect(),a=o.width||0,l=o.height||0;a&&l||("top"in o&&"bottom"in o&&(l=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var h=this.getRetinaScaling();return 1!==h&&(n.x/=h,n.y/=h),r=0===a||0===l?{width:1,height:1}:{width:s.width/a,height:s.height/l},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),t=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),x.util.addClass(i,"upper-canvas "+e),this.wrapperEl.appendChild(i),this._copyCanvasStyle(t,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=x.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),x.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),x.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.width||e.width,i=this.height||e.height;x.util.setStyle(e,{position:"absolute",width:t+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),e.width=t,e.height=i,x.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var e=this._activeObject;return e?"activeSelection"===e.type&&e._objects?e._objects.slice(0):[e]:[]},_onObjectRemoved:function(e){e===this._activeObject&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared",{target:e}),e.fire("deselected")),e===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",e)},_fireSelectionEvents:function(e,t){var i=!1,r=this.getActiveObjects(),n=[],s=[];e.forEach((function(e){-1===r.indexOf(e)&&(i=!0,e.fire("deselected",{e:t,target:e}),s.push(e))})),r.forEach((function(r){-1===e.indexOf(r)&&(i=!0,r.fire("selected",{e:t,target:r}),n.push(r))})),e.length>0&&r.length>0?i&&this.fire("selection:updated",{e:t,selected:n,deselected:s}):r.length>0?this.fire("selection:created",{e:t,selected:n}):e.length>0&&this.fire("selection:cleared",{e:t,deselected:s})},setActiveObject:function(e,t){var i=this.getActiveObjects();return this._setActiveObject(e,t),this._fireSelectionEvents(i,t),this},_setActiveObject:function(e,t){return this._activeObject!==e&&!!this._discardActiveObject(t,e)&&!e.onSelect({e:t})&&(this._activeObject=e,!0)},_discardActiveObject:function(e,t){var i=this._activeObject;if(i){if(i.onDeselect({e,object:t}))return!1;this._activeObject=null}return!0},discardActiveObject:function(e){var t=this.getActiveObjects(),i=this.getActiveObject();return t.length&&this.fire("before:selection:cleared",{target:i,e}),this._discardActiveObject(e),this._fireSelectionEvents(t,e),this},dispose:function(){var e=this.wrapperEl;return this.removeListeners(),e.removeChild(this.upperCanvasEl),e.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(e){x.util.cleanUpJsdomNode(this[e]),this[e]=void 0}.bind(this)),e.parentNode&&e.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,x.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(e){var t=this._activeObject;t&&t._renderControls(e)},_toObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(e),n=this.callSuper("_toObject",e,t,i);return this._unwindGroupTransformOnObject(e,r),n},_realizeGroupTransformOnObject:function(e){if(e.group&&"activeSelection"===e.group.type&&this._activeObject===e.group){var t={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach((function(i){t[i]=e[i]})),x.util.addTransformToObject(e,this._activeObject.calcOwnMatrix()),t}return null},_unwindGroupTransformOnObject:function(e,t){t&&e.set(t)},_setSVGObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(t);this.callSuper("_setSVGObject",e,t,i),this._unwindGroupTransformOnObject(t,r)},setViewportTransform:function(e){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),x.StaticCanvas.prototype.setViewportTransform.call(this,e)}}),x.StaticCanvas)"prototype"!==r&&(x.Canvas[r]=x.StaticCanvas[r])}(),function(){var e=x.util.addListener,t=x.util.removeListener,i={passive:!1};function r(e,t){return e.button&&e.button===t-1}x.util.object.extend(x.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(e,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(e,t){var r=this.upperCanvasEl,n=this._getEventPrefix();e(x.window,"resize",this._onResize),e(r,n+"down",this._onMouseDown),e(r,n+"move",this._onMouseMove,i),e(r,n+"out",this._onMouseOut),e(r,n+"enter",this._onMouseEnter),e(r,"wheel",this._onMouseWheel),e(r,"contextmenu",this._onContextMenu),e(r,"dblclick",this._onDoubleClick),e(r,"dragover",this._onDragOver),e(r,"dragenter",this._onDragEnter),e(r,"dragleave",this._onDragLeave),e(r,"drop",this._onDrop),this.enablePointerEvents||e(r,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&t in eventjs&&(eventjs[t](r,"gesture",this._onGesture),eventjs[t](r,"drag",this._onDrag),eventjs[t](r,"orientation",this._onOrientationChange),eventjs[t](r,"shake",this._onShake),eventjs[t](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(t,"remove");var e=this._getEventPrefix();t(x.document,e+"up",this._onMouseUp),t(x.document,"touchend",this._onTouchEnd,i),t(x.document,e+"move",this._onMouseMove,i),t(x.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(e,t){this.__onTransformGesture&&this.__onTransformGesture(e,t)},_onDrag:function(e,t){this.__onDrag&&this.__onDrag(e,t)},_onMouseWheel:function(e){this.__onMouseWheel(e)},_onMouseOut:function(e){var t=this._hoveredTarget;this.fire("mouse:out",{target:t,e}),this._hoveredTarget=null,t&&t.fire("mouseout",{e});var i=this;this._hoveredTargets.forEach((function(r){i.fire("mouse:out",{target:t,e}),r&&t.fire("mouseout",{e})})),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach((function(e){e.isEditing&&e.hiddenTextarea.focus()}))},_onMouseEnter:function(e){this._currentTransform||this.findTarget(e)||(this.fire("mouse:over",{target:null,e}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(e,t){this.__onOrientationChange&&this.__onOrientationChange(e,t)},_onShake:function(e,t){this.__onShake&&this.__onShake(e,t)},_onLongPress:function(e,t){this.__onLongPress&&this.__onLongPress(e,t)},_onDragOver:function(e){e.preventDefault();var t=this._simpleEventHandler("dragover",e);this._fireEnterLeaveEvents(t,e)},_onDrop:function(e){return this._simpleEventHandler("drop:before",e),this._simpleEventHandler("drop",e)},_onContextMenu:function(e){return this.stopContextMenu&&(e.stopPropagation(),e.preventDefault()),!1},_onDoubleClick:function(e){this._cacheTransformEventData(e),this._handleEvent(e,"dblclick"),this._resetTransformEventData(e)},getPointerId:function(e){var t=e.changedTouches;return t?t[0]&&t[0].identifier:this.enablePointerEvents?e.pointerId:-1},_isMainEvent:function(e){return!0===e.isPrimary||!1!==e.isPrimary&&("touchend"===e.type&&0===e.touches.length||!e.changedTouches||e.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();e(x.document,"touchend",this._onTouchEnd,i),e(x.document,"touchmove",this._onMouseMove,i),t(n,s+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();t(n,s+"move",this._onMouseMove,i),e(x.document,s+"up",this._onMouseUp),e(x.document,s+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var n=this._getEventPrefix();t(x.document,"touchend",this._onTouchEnd,i),t(x.document,"touchmove",this._onMouseMove,i);var s=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((function(){e(s.upperCanvasEl,n+"down",s._onMouseDown),s._willAddMouseDown=0}),400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();this._isMainEvent(r)&&(t(x.document,s+"up",this._onMouseUp),t(x.document,s+"move",this._onMouseMove,i),e(n,s+"move",this._onMouseMove,i))},_onMouseMove:function(e){!this.allowTouchScrolling&&e.preventDefault&&e.preventDefault(),this.__onMouseMove(e)},_onResize:function(){this.calcOffset()},_shouldRender:function(e){var t=this._activeObject;return!!(!!t!=!!e||t&&e&&t!==e)||(t&&t.isEditing,!1)},__onMouseUp:function(e){var t,i=this._currentTransform,n=this._groupSelector,s=!1,o=!n||0===n.left&&0===n.top;if(this._cacheTransformEventData(e),t=this._target,this._handleEvent(e,"up:before"),r(e,3))this.fireRightClick&&this._handleEvent(e,"up",3,o);else{if(r(e,2))return this.fireMiddleClick&&this._handleEvent(e,"up",2,o),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else if(this._isMainEvent(e)){if(i&&(this._finalizeCurrentTransform(e),s=i.actionPerformed),!o){var a=t===this._activeObject;this._maybeGroupObjects(e),s||(s=this._shouldRender(t)||!a&&t===this._activeObject)}var l,h;if(t){if(l=t._findTargetCorner(this.getPointer(e,!0),x.util.isTouchEvent(e)),t.selectable&&t!==this._activeObject&&"up"===t.activeOn)this.setActiveObject(t,e),s=!0;else{var c=t.controls[l],u=c&&c.getMouseUpHandler(e,t,c);u&&u(e,i,(h=this.getPointer(e)).x,h.y)}t.isMoving=!1}if(i&&(i.target!==t||i.corner!==l)){var d=i.target&&i.target.controls[i.corner],f=d&&d.getMouseUpHandler(e,t,c);h=h||this.getPointer(e),f&&f(e,i,h.x,h.y)}this._setCursorFromEvent(e,t),this._handleEvent(e,"up",1,o),this._groupSelector=null,this._currentTransform=null,t&&(t.__corner=0),s?this.requestRenderAll():o||this.renderTop()}}},_simpleEventHandler:function(e,t){var i=this.findTarget(t),r=this.targets,n={e:t,target:i,subTargets:r};if(this.fire(e,n),i&&i.fire(e,n),!r)return i;for(var s=0;s1&&(t=new x.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(t,e))},_collectObjects:function(e){for(var t,i=[],r=this._groupSelector.ex,n=this._groupSelector.ey,s=r+this._groupSelector.left,o=n+this._groupSelector.top,a=new x.Point(v(r,s),v(n,o)),l=new x.Point(y(r,s),y(n,o)),h=!this.selectionFullyContained,c=r===s&&n===o,u=this._objects.length;u--&&!((t=this._objects[u])&&t.selectable&&t.visible&&(h&&t.intersectsWithRect(a,l,!0)||t.isContainedWithinRect(a,l,!0)||h&&t.containsPoint(a,null,!0)||h&&t.containsPoint(l,null,!0))&&(i.push(t),c)););return i.length>1&&(i=i.filter((function(t){return!t.onSelect({e})}))),i},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e),this.setCursor(this.defaultCursor),this._groupSelector=null}}),x.util.object.extend(x.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",i=e.quality||1,r=(e.multiplier||1)*(e.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(r,e);return x.util.toDataURL(n,t,i)},toCanvasElement:function(e,t){e=e||1;var i=((t=t||{}).width||this.width)*e,r=(t.height||this.height)*e,n=this.getZoom(),s=this.width,o=this.height,a=n*e,l=this.viewportTransform,h=(l[4]-(t.left||0))*e,c=(l[5]-(t.top||0))*e,u=this.interactive,d=[a,0,0,a,h,c],f=this.enableRetinaScaling,g=x.util.createCanvasElement(),_=this.contextTop;return g.width=i,g.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=l,this.width=s,this.height=o,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=f,this.contextTop=_,g}}),x.util.object.extend(x.StaticCanvas.prototype,{loadFromJSON:function(e,t,i){if(e){var r="string"==typeof e?JSON.parse(e):x.util.object.clone(e),n=this,s=r.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,(function(e){n.clear(),n._setBgOverlay(r,(function(){s?n._enlivenObjects([s],(function(i){n.clipPath=i[0],n.__setupCanvas.call(n,r,e,o,t)})):n.__setupCanvas.call(n,r,e,o,t)}))}),i),this}},__setupCanvas:function(e,t,i,r){var n=this;t.forEach((function(e,t){n.insertAt(e,t)})),this.renderOnAddRemove=i,delete e.objects,delete e.backgroundImage,delete e.overlayImage,delete e.background,delete e.overlay,this._setOptions(e),this.renderAll(),r&&r()},_setBgOverlay:function(e,t){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(e.backgroundImage||e.overlayImage||e.background||e.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&t&&t()};this.__setBgOverlay("backgroundImage",e.backgroundImage,i,r),this.__setBgOverlay("overlayImage",e.overlayImage,i,r),this.__setBgOverlay("backgroundColor",e.background,i,r),this.__setBgOverlay("overlayColor",e.overlay,i,r)}else t&&t()},__setBgOverlay:function(e,t,i,r){var n=this;if(!t)return i[e]=!0,void(r&&r());"backgroundImage"===e||"overlayImage"===e?x.util.enlivenObjects([t],(function(t){n[e]=t[0],i[e]=!0,r&&r()})):this["set"+x.util.string.capitalize(e,!0)](t,(function(){i[e]=!0,r&&r()}))},_enlivenObjects:function(e,t,i){e&&0!==e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),null,i):t&&t([])},_toDataURL:function(e,t){this.clone((function(i){t(i.toDataURL(e))}))},_toDataURLWithMultiplier:function(e,t,i){this.clone((function(r){i(r.toDataURLWithMultiplier(e,t))}))},clone:function(e,t){var i=JSON.stringify(this.toJSON(t));this.cloneWithoutData((function(t){t.loadFromJSON(i,(function(){e&&e(t)}))}))},cloneWithoutData:function(e){var t=x.util.createCanvasElement();t.width=this.width,t.height=this.height;var i=new x.Canvas(t);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,(function(){i.renderAll(),e&&e(i)})),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):e&&e(i)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n=t.util.toFixed,s=t.util.string.capitalize,o=t.util.degreesToRadians,a=!t.isLikelyNode;t.Object||(t.Object=t.util.createClass(t.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(e){e&&this.setOptions(e)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=t.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(e){var i=t.perfLimitSizeTotal,r=e.width,n=e.height,s=t.maxCacheSideLimit,o=t.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rc&&(e.zoomX/=r/c,e.width=c,e.capped=!0),n>u&&(e.zoomY/=n/u,e.height=u,e.capped=!0),e},_getCacheCanvasDimensions:function(){var e=this.getTotalObjectScaling(),t=this._getTransformedDimensions(0,0),i=t.x*e.scaleX/this.scaleX,r=t.y*e.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:e.scaleX,zoomY:e.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var e=this.canvas;if(this.noScaleCache&&e&&e._currentTransform){var i=e._currentTransform.target,r=e._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,s,o=this._cacheCanvas,a=this._limitCacheSize(this._getCacheCanvasDimensions()),l=t.minCacheSideLimit,h=a.width,c=a.height,u=a.zoomX,d=a.zoomY,f=h!==this.cacheWidth||c!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==d,_=f||g,p=0,m=0,v=!1;if(f){var y=this._cacheCanvas.width,S=this._cacheCanvas.height,b=h>y||c>S;v=b||(h<.9*y||c<.9*S)&&y>l&&S>l,b&&!a.capped&&(h>l||c>l)&&(p=.1*h,m=.1*c)}return this instanceof t.Text&&this.path&&(_=!0,v=!0,p+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!_&&(v?(o.width=Math.ceil(h+p),o.height=Math.ceil(c+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,o.width,o.height)),n=a.x/2,s=a.y/2,this.cacheTranslationX=Math.round(o.width/2-n)+n,this.cacheTranslationY=Math.round(o.height/2-s)+s,this.cacheWidth=h,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,d),this.zoomX=u,this.zoomY=d,!0)},setOptions:function(e){this._setOptions(e),this._initGradient(e.fill,"fill"),this._initGradient(e.stroke,"stroke"),this._initPattern(e.fill,"fill"),this._initPattern(e.stroke,"stroke")},transform:function(e){var t=this.group&&!this.group._transformDone||this.group&&this.canvas&&e===this.canvas.contextTop,i=this.calcTransformMatrix(!t);e.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(e){var i=t.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:t.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(r.clipPath=this.clipPath.toObject(e),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),t.util.populateWithProperties(this,r,e),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var i=t.util.getKlass(e.type).prototype;return i.stateProperties.forEach((function(t){"left"!==t&&"top"!==t&&(e[t]===i[t]&&delete e[t],Array.isArray(e[t])&&Array.isArray(i[t])&&0===e[t].length&&0===i[t].length&&delete e[t])})),e},toString:function(){return"#"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var e=t.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(e.scaleX),scaleY:Math.abs(e.scaleY)}},getTotalObjectScaling:function(){var e=this.getObjectScaling(),t=e.scaleX,i=e.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();t*=r*n,i*=r*n}return{scaleX:t,scaleY:i}},getObjectOpacity:function(){var e=this.opacity;return this.group&&(e*=this.group.getObjectOpacity()),e},_set:function(e,i){var r="scaleX"===e||"scaleY"===e,n=this[e]!==i,s=!1;return r&&(i=this._constrainScale(i)),"scaleX"===e&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===e&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==e||!i||i instanceof t.Shadow?"dirty"===e&&this.group&&this.group.set("dirty",i):i=new t.Shadow(i),this[e]=i,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(e)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(e)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:t.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(e){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(e.save(),this._setupCompositeOperation(e),this.drawSelectionBackground(e),this.transform(e),this._setOpacity(e),this._setShadow(e,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(e)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(e),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),e.restore())},renderCache:function(e){e=e||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,e.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(e,i){if(e.save(),i.inverted?e.globalCompositeOperation="destination-out":e.globalCompositeOperation="destination-in",i.absolutePositioned){var r=t.util.invertTransform(this.calcTransformMatrix());e.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(e),e.scale(1/i.zoomX,1/i.zoomY),e.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),e.restore()},drawObject:function(e,t){var i=this.fill,r=this.stroke;t?(this.fill="black",this.stroke="",this._setClippingProperties(e)):this._renderBackground(e),this._render(e),this._drawClipPath(e,this.clipPath),this.fill=i,this.stroke=r},_drawClipPath:function(e,t){t&&(t.canvas=this.canvas,t.shouldCache(),t._transformDone=!0,t.renderCache({forClipping:!0}),this.drawClipPathOnCache(e,t))},drawCacheOnCanvas:function(e){e.scale(1/this.zoomX,1/this.zoomY),e.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(e){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!e&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!e){var t=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-t/2,-i/2,t,i)}return!0}return!1},_renderBackground:function(e){if(this.backgroundColor){var t=this._getNonTransformedDimensions();e.fillStyle=this.backgroundColor,e.fillRect(-t.x/2,-t.y/2,t.x,t.y),this._removeShadow(e)}},_setOpacity:function(e){this.group&&!this.group._transformDone?e.globalAlpha=this.getObjectOpacity():e.globalAlpha*=this.opacity},_setStrokeStyles:function(e,t){var i=t.stroke;i&&(e.lineWidth=t.strokeWidth,e.lineCap=t.strokeLineCap,e.lineDashOffset=t.strokeDashOffset,e.lineJoin=t.strokeLineJoin,e.miterLimit=t.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(e,i):(e.strokeStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,i)):e.strokeStyle=t.stroke)},_setFillStyles:function(e,t){var i=t.fill;i&&(i.toLive?(e.fillStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,t.fill)):e.fillStyle=i)},_setClippingProperties:function(e){e.globalAlpha=1,e.strokeStyle="transparent",e.fillStyle="#000000"},_setLineDash:function(e,t){t&&0!==t.length&&(1&t.length&&t.push.apply(t,t),e.setLineDash(t))},_renderControls:function(e,i){var r,n,s,a=this.getViewportTransform(),l=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==i.hasControls?i.hasControls:this.hasControls,l=t.util.multiplyTransformMatrices(a,l),r=t.util.qrDecompose(l),e.save(),e.translate(r.translateX,r.translateY),e.lineWidth=1*this.borderScaleFactor,this.group||(e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(r.angle-=180),e.rotate(o(this.group?r.angle:this.angle)),i.forActiveSelection||this.group?n&&this.drawBordersInGroup(e,r,i):n&&this.drawBorders(e,i),s&&this.drawControls(e,i),e.restore()},_setShadow:function(e){if(this.shadow){var i,r=this.shadow,n=this.canvas,s=n&&n.viewportTransform[0]||1,o=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(s*=t.devicePixelRatio,o*=t.devicePixelRatio),e.shadowColor=r.color,e.shadowBlur=r.blur*t.browserShadowBlurConstant*(s+o)*(i.scaleX+i.scaleY)/4,e.shadowOffsetX=r.offsetX*s*i.scaleX,e.shadowOffsetY=r.offsetY*o*i.scaleY}},_removeShadow:function(e){this.shadow&&(e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0)},_applyPatternGradientTransform:function(e,t){if(!t||!t.toLive)return{offsetX:0,offsetY:0};var i=t.gradientTransform||t.patternTransform,r=-this.width/2+t.offsetX||0,n=-this.height/2+t.offsetY||0;return"percentage"===t.gradientUnits?e.transform(this.width,0,0,this.height,r,n):e.transform(1,0,0,1,r,n),i&&e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(e){"stroke"===this.paintFirst?(this._renderStroke(e),this._renderFill(e)):(this._renderFill(e),this._renderStroke(e))},_render:function(){},_renderFill:function(e){this.fill&&(e.save(),this._setFillStyles(e,this),"evenodd"===this.fillRule?e.fill("evenodd"):e.fill(),e.restore())},_renderStroke:function(e){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e),e.save(),this.strokeUniform&&this.group){var t=this.getObjectScaling();e.scale(1/t.scaleX,1/t.scaleY)}else this.strokeUniform&&e.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(e,this.strokeDashArray),this._setStrokeStyles(e,this),e.stroke(),e.restore()}},_applyPatternForTransformedGradient:function(e,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),s=t.util.createCanvasElement(),o=this.canvas.getRetinaScaling(),a=n.x/this.scaleX/o,l=n.y/this.scaleY/o;s.width=a,s.height=l,(r=s.getContext("2d")).beginPath(),r.moveTo(0,0),r.lineTo(a,0),r.lineTo(a,l),r.lineTo(0,l),r.closePath(),r.translate(a/2,l/2),r.scale(n.zoomX/this.scaleX/o,n.zoomY/this.scaleY/o),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(e),r.fill(),e.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),e.scale(o*this.scaleX/n.zoomX,o*this.scaleY/n.zoomY),e.strokeStyle=r.createPattern(s,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var e=t.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",e.scaleX),this.set("scaleY",e.scaleY),this.angle=e.angle,this.skewX=e.skewX,this.skewY=0}},_removeTransformMatrix:function(e){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=t.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,e&&(this.scaleX*=e.scaleX,this.scaleY*=e.scaleY,this.cropX=e.cropX,this.cropY=e.cropY,i.x+=e.offsetLeft,i.y+=e.offsetTop,this.width=e.width,this.height=e.height),this.setPositionByOrigin(i,"center","center")},clone:function(e,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,e):t.Object._fromObject("Object",r,e)},cloneAsImage:function(e,i){var r=this.toCanvasElement(i);return e&&e(new t.Image(r)),this},toCanvasElement:function(e){e||(e={});var i=t.util,r=i.saveObjectTransform(this),n=this.group,s=this.shadow,o=Math.abs,a=(e.multiplier||1)*(e.enableRetinaScaling?t.devicePixelRatio:1);delete this.group,e.withoutTransform&&i.resetObjectTransform(this),e.withoutShadow&&(this.shadow=null);var l,h,c,u,d=t.util.createCanvasElement(),f=this.getBoundingRect(!0,!0),g=this.shadow,_={x:0,y:0};g&&(h=g.blur,l=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),_.x=2*Math.round(o(g.offsetX)+h)*o(l.scaleX),_.y=2*Math.round(o(g.offsetY)+h)*o(l.scaleY)),c=f.width+_.x,u=f.height+_.y,d.width=Math.ceil(c),d.height=Math.ceil(u);var p=new t.StaticCanvas(d,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===e.format&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new t.Point(p.width/2,p.height/2),"center","center");var m=this.canvas;p.add(this);var v=p.toCanvasElement(a||1,e);return this.shadow=s,this.set("canvas",m),n&&(this.group=n),this.set(r).setCoords(),p._objects=[],p.dispose(),p=null,v},toDataURL:function(e){return e||(e={}),t.util.toDataURL(this.toCanvasElement(e),e.format||"png",e.quality||1)},isType:function(e){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===e},complexity:function(){return 1},toJSON:function(e){return this.toObject(e)},rotate:function(e){var t=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(e,i){i=i||this.canvas.getPointer(e);var r=new t.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=t.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(e){this.globalCompositeOperation&&(e.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){t.runningAnimations&&t.runningAnimations.cancelByTarget(this)}}),t.util.createAccessors&&t.util.createAccessors(t.Object),i(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.ENLIVEN_PROPS=["clipPath"],t.Object._fromObject=function(e,i,n,s){var o=t[e];i=r(i,!0),t.util.enlivenPatterns([i.fill,i.stroke],(function(e){void 0!==e[0]&&(i.fill=e[0]),void 0!==e[1]&&(i.stroke=e[1]),t.util.enlivenObjectEnlivables(i,i,(function(){var e=s?new o(i[s],i):new o(i);n&&n(e)}))}))},t.Object.__uid=0)}(t),S=x.util.degreesToRadians,b={left:-.5,center:0,right:.5},w={top:-.5,center:0,bottom:.5},x.util.object.extend(x.Object.prototype,{translateToGivenOrigin:function(e,t,i,r,n){var s,o,a,l=e.x,h=e.y;return"string"==typeof t?t=b[t]:t-=.5,"string"==typeof r?r=b[r]:r-=.5,"string"==typeof i?i=w[i]:i-=.5,"string"==typeof n?n=w[n]:n-=.5,o=n-i,((s=r-t)||o)&&(a=this._getTransformedDimensions(),l=e.x+s*a.x,h=e.y+o*a.y),new x.Point(l,h)},translateToCenterPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,t,i,"center","center");return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},translateToOriginPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,"center","center",t,i);return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},getCenterPoint:function(){var e=new x.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var i=this.getCenterPoint();return this.translateToOriginPoint(i,e,t)},toLocalPoint:function(e,t,i){var r,n,s=this.getCenterPoint();return r=void 0!==t&&void 0!==i?this.translateToGivenOrigin(s,"center","center",t,i):new x.Point(this.left,this.top),n=new x.Point(e.x,e.y),this.angle&&(n=x.util.rotatePoint(n,s,-S(this.angle))),n.subtractEquals(r)},setPositionByOrigin:function(e,t,i){var r=this.translateToCenterPoint(e,t,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(e){var t,i,r=S(this.angle),n=this.getScaledWidth(),s=x.util.cos(r)*n,o=x.util.sin(r)*n;t="string"==typeof this.originX?b[this.originX]:this.originX-.5,i="string"==typeof e?b[e]:e-.5,this.left+=s*(i-t),this.top+=o*(i-t),this.setCoords(),this.originX=e},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),function(){var e=x.util,t=e.degreesToRadians,i=e.multiplyTransformMatrices,r=e.transformPoint;e.object.extend(x.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(e,t){return t?e?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),e?this.aCoords:this.lineCoords)},getCoords:function(e,t){return i=this._getCoords(e,t),[new x.Point(i.tl.x,i.tl.y),new x.Point(i.tr.x,i.tr.y),new x.Point(i.br.x,i.br.y),new x.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(e,t,i,r){var n=this.getCoords(i,r);return"Intersection"===x.Intersection.intersectPolygonRectangle(n,e,t).status},intersectsWithObject:function(e,t,i){return"Intersection"===x.Intersection.intersectPolygonPolygon(this.getCoords(t,i),e.getCoords(t,i)).status||e.isContainedWithinObject(this,t,i)||this.isContainedWithinObject(e,t,i)},isContainedWithinObject:function(e,t,i){for(var r=this.getCoords(t,i),n=t?e.aCoords:e.lineCoords,s=0,o=e._getImageLines(n);s<4;s++)if(!e.containsPoint(r[s],o))return!1;return!0},isContainedWithinRect:function(e,t,i,r){var n=this.getBoundingRect(i,r);return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e,t,i,r){var n=this._getCoords(i,r),s=(t=t||this._getImageLines(n),this._findCrossPoints(e,t));return 0!==s&&s%2==1},isOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,e).some((function(e){return e.x<=i.x&&e.x>=t.x&&e.y<=i.y&&e.y>=t.y}))||!!this.intersectsWithRect(t,i,!0,e)||this._containsCenterOfCanvas(t,i,e)},_containsCenterOfCanvas:function(e,t,i){var r={x:(e.x+t.x)/2,y:(e.y+t.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(t,i,!0,e)||this.getCoords(!0,e).every((function(e){return(e.x>=i.x||e.x<=t.x)&&(e.y>=i.y||e.y<=t.y)}))&&this._containsCenterOfCanvas(t,i,e)},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var i,r,n,s=0;for(var o in t)if(!((n=t[o]).o.y=e.y&&n.d.y>=e.y||(n.o.x===n.d.x&&n.o.x>=e.x?r=n.o.x:(i=(n.d.y-n.o.y)/(n.d.x-n.o.x),r=-(e.y-0*e.x-(n.o.y-i*n.o.x))/(0-i)),r>=e.x&&(s+=1),2!==s)))break;return s},getBoundingRect:function(t,i){var r=this.getCoords(t,i);return e.makeBoundingBoxFromPoints(r)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(e){return Math.abs(e)\n')}},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(e),{reviver:e})},toClipPathSVG:function(e){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(e),{reviver:e})},_createBaseClipPathSVGMarkup:function(e,t){var i=(t=t||{}).reviver,r=t.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=e.indexOf("COMMON_PARTS");return e[s]=n,i?i(e.join("")):e.join("")},_createBaseSVGMarkup:function(e,t){var i,r,n=(t=t||{}).noStyle,s=t.reviver,o=n?"":'style="'+this.getSvgStyles()+'" ',a=t.withShadow?'style="'+this.getSvgFilter()+'" ':"",l=this.clipPath,h=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=l&&l.absolutePositioned,u=this.stroke,d=this.fill,f=this.shadow,g=[],_=e.indexOf("COMMON_PARTS"),p=t.additionalTransform;return l&&(l.clipPathId="CLIPPATH_"+x.Object.__uid++,r='\n'+l.toClipPathSVG(s)+"\n"),c&&g.push("\n"),g.push("\n"),i=[o,h,n?"":this.addPaintOrder()," ",p?'transform="'+p+'" ':""].join(""),e[_]=i,d&&d.toLive&&g.push(d.toSVG(this)),u&&u.toLive&&g.push(u.toSVG(this)),f&&g.push(f.toSVG(this)),l&&g.push(r),g.push(e.join("")),g.push("\n"),c&&g.push("\n"),s?s(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var e=x.util.object.extend,t="stateProperties";function i(t,i,r){var n={};r.forEach((function(e){n[e]=t[e]})),e(t[i],n,!0)}function r(e,t,i){if(e===t)return!0;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(var n=0,s=e.length;n=0;l--)if(n=a[l],this.isControlVisible(n)&&(r=this._getImageLines(t?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:s,y:o},r))&&i%2==1))return this.__corner=n,n;return!1},forEachControl:function(e){for(var t in this.controls)e(this.controls[t],t,this)},_setCornerCoords:function(){var e=this.oCoords;for(var t in e){var i=this.controls[t];e[t].corner=i.calcCornerCoords(this.angle,this.cornerSize,e[t].x,e[t].y,!1),e[t].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,e[t].x,e[t].y,!0)}},drawSelectionBackground:function(t){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;t.save();var i=this.getCenterPoint(),r=this._calculateCurrentDimensions(),n=this.canvas.viewportTransform;return t.translate(i.x,i.y),t.scale(1/n[0],1/n[3]),t.rotate(e(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-r.x/2,-r.y/2,r.x,r.y),t.restore(),this},drawBorders:function(e,t){t=t||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,n=i.x+r,s=i.y+r,o=void 0!==t.hasControls?t.hasControls:this.hasControls,a=!1;return e.save(),e.strokeStyle=t.borderColor||this.borderColor,this._setLineDash(e,t.borderDashArray||this.borderDashArray),e.strokeRect(-n/2,-s/2,n,s),o&&(e.beginPath(),this.forEachControl((function(t,i,r){t.withConnection&&t.getVisibility(r,i)&&(a=!0,e.moveTo(t.x*n,t.y*s),e.lineTo(t.x*n+t.offsetX,t.y*s+t.offsetY))})),a&&e.stroke()),e.restore(),this},drawBordersInGroup:function(e,t,i){i=i||{};var r=x.util.sizeAfterTransform(this.width,this.height,t),n=this.strokeWidth,s=this.strokeUniform,o=this.borderScaleFactor,a=r.x+n*(s?this.canvas.getZoom():t.scaleX)+o,l=r.y+n*(s?this.canvas.getZoom():t.scaleY)+o;return e.save(),this._setLineDash(e,i.borderDashArray||this.borderDashArray),e.strokeStyle=i.borderColor||this.borderColor,e.strokeRect(-a/2,-l/2,a,l),e.restore(),this},drawControls:function(e,t){t=t||{},e.save();var i,r,n=this.canvas.getRetinaScaling();return e.setTransform(n,0,0,n,0,0),e.strokeStyle=e.fillStyle=t.cornerColor||this.cornerColor,this.transparentCorners||(e.strokeStyle=t.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(e,t.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl((function(n,s,o){r=o.oCoords[s],n.getVisibility(o,s)&&(i&&(r=x.util.transformPoint(r,i)),n.render(e,r.x,r.y,t,o))})),e.restore(),this},isControlVisible:function(e){return this.controls[e]&&this.controls[e].getVisibility(this,e)},setControlVisible:function(e,t){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[e]=t,this},setControlsVisibility:function(e){for(var t in e||(e={}),e)this.setControlVisible(t,e[t]);return this},onDeselect:function(){},onSelect:function(){}})}(),x.util.object.extend(x.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxCenterObjectV:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxRemove:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(t){e.set("opacity",t),s.requestRenderAll(),n()},onComplete:function(){s.remove(e),r()}})}}),x.util.object.extend(x.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var e,t,i=[],r=[];for(e in arguments[0])i.push(e);for(var n=0,s=i.length;n-1||n&&s.colorProperties.indexOf(n[1])>-1,a=n?this.get(n[0])[n[1]]:this.get(e);"from"in i||(i.from=a),o||(t=~t.indexOf("=")?a+parseFloat(t.replace("=","")):parseFloat(t));var l={target:this,startValue:i.from,endValue:t,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(e,t,r){return i.abort.call(s,e,t,r)},onChange:function(t,o,a){n?s[n[0]][n[1]]=t:s.set(e,t),r||i.onChange&&i.onChange(t,o,a)},onComplete:function(e,t,n){r||(s.setCoords(),i.onComplete&&i.onComplete(e,t,n))}};return o?x.util.animateColor(l.startValue,l.endValue,l.duration,l):x.util.animate(l)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n={x1:1,x2:1,y1:1,y2:1};function s(e,t){var i=e.origin,r=e.axis1,n=e.axis2,s=e.dimension,o=t.nearest,a=t.center,l=t.farthest;return function(){switch(this.get(i)){case o:return Math.min(this.get(r),this.get(n));case a:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case l:return Math.max(this.get(r),this.get(n))}}}t.Line?t.warn("fabric.Line is already defined"):(t.Line=t.util.createClass(t.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:t.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(e,t){e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,t){return this.callSuper("_set",e,t),void 0!==n[e]&&this._setWidthHeight(),this},_getLeftToOriginX:s({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:s({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e){e.beginPath();var t=this.calcLinePoints();e.moveTo(t.x1,t.y1),e.lineTo(t.x2,t.y2),e.lineWidth=this.strokeWidth;var i=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(e){return i(this.callSuper("toObject",e),this.calcLinePoints())},_getNonTransformedDimensions:function(){var e=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(e.y-=this.strokeWidth),0===this.height&&(e.x-=this.strokeWidth)),e},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,t=this.y1<=this.y2?-1:1,i=e*this.width*.5,r=t*this.height*.5;return{x1:i,x2:e*this.width*-.5,y1:r,y2:t*this.height*-.5}},_toSVG:function(){var e=this.calcLinePoints();return["\n']}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r,n){n=n||{};var s=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];r(new t.Line(o,i(s,n)))},t.Line.fromObject=function(e,i){var n=r(e,!0);n.points=[e.x1,e.y1,e.x2,e.y2],t.Object._fromObject("Line",n,(function(e){delete e.points,i&&i(e)}),"points")})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians;t.Circle?t.warn("fabric.Circle is already defined."):(t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:t.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(e,t){return this.callSuper("_set",e,t),"radius"===e&&this.setRadius(t),this},toObject:function(e){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(e))},_toSVG:function(){var e,r=(this.endAngle-this.startAngle)%360;if(0===r)e=["\n'];else{var n=i(this.startAngle),s=i(this.endAngle),o=this.radius;e=['180?"1":"0")+" 1"," "+t.util.cos(s)*o+" "+t.util.sin(s)*o,'" ',"COMMON_PARTS"," />\n"]}return e},_render:function(e){e.beginPath(),e.arc(0,0,this.radius,i(this.startAngle),i(this.endAngle),!1),this._renderPaintInOrder(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){return this.radius=e,this.set("width",2*e).set("height",2*e)}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,i){var r,n=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!("radius"in(r=n)&&r.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,i(new t.Circle(n))},t.Circle.fromObject=function(e,i){t.Object._fromObject("Circle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={});t.Triangle?t.warn("fabric.Triangle is already defined"):(t.Triangle=t.util.createClass(t.Object,{type:"triangle",width:100,height:100,_render:function(e){var t=this.width/2,i=this.height/2;e.beginPath(),e.moveTo(-t,i),e.lineTo(0,-i),e.lineTo(t,i),e.closePath(),this._renderPaintInOrder(e)},_toSVG:function(){var e=this.width/2,t=this.height/2;return["']}}),t.Triangle.fromObject=function(e,i){return t.Object._fromObject("Triangle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=2*Math.PI;t.Ellipse?t.warn("fabric.Ellipse is already defined."):(t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this.set("rx",e&&e.rx||0),this.set("ry",e&&e.ry||0)},_set:function(e,t){switch(this.callSuper("_set",e,t),e){case"rx":this.rx=t,this.set("width",2*t);break;case"ry":this.ry=t,this.set("height",2*t)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']},_render:function(e){e.beginPath(),e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(0,0,this.rx,0,i,!1),e.restore(),this._renderPaintInOrder(e)}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,i){var r=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new t.Ellipse(r))},t.Ellipse.fromObject=function(e,i){t.Object._fromObject("Ellipse",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend;t.Rect?t.warn("fabric.Rect is already defined"):(t.Rect=t.util.createClass(t.Object,{stateProperties:t.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==t||0!==i,l=.4477152502;e.beginPath(),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-l*t,o,s+r,o+l*i,s+r,o+i),e.lineTo(s+r,o+n-i),a&&e.bezierCurveTo(s+r,o+n-l*i,s+r-l*t,o+n,s+r-t,o+n),e.lineTo(s+t,o+n),a&&e.bezierCurveTo(s+l*t,o+n,s,o+n-l*i,s,o+n-i),e.lineTo(s,o+i),a&&e.bezierCurveTo(s,o+l*i,s+l*t,o,s+t,o),e.closePath(),this._renderPaintInOrder(e)},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r,n){if(!e)return r(null);n=n||{};var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.height=s.height||0,s.width=s.width||0;var o=new t.Rect(i(n?t.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},t.Rect.fromObject=function(e,i){return t.Object._fromObject("Rect",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.array.min,n=t.util.array.max,s=t.util.toFixed,o=t.util.projectStrokeOnPoints;t.Polyline?t.warn("fabric.Polyline is already defined"):(t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:t.Object.prototype.cacheProperties.concat("points"),initialize:function(e,t){t=t||{},this.points=e||[],this.callSuper("initialize",t),this._setPositionDimensions(t)},_projectStrokeOnPoints:function(){return o(this.points,this,!0)},_setPositionDimensions:function(e){var t,i=this._calcDimensions(e),r=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-r,this.height=i.height-r,e.fromSVG||(t=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+r/2,y:i.top-this.strokeWidth/2+r/2},"left","top",this.originX,this.originY)),void 0===e.left&&(this.left=e.fromSVG?i.left:t.x),void 0===e.top&&(this.top=e.fromSVG?i.top:t.y),this.pathOffset={x:i.left+this.width/2+r/2,y:i.top+this.height/2+r/2}},_calcDimensions:function(){var e=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,t=r(e,"x")||0,i=r(e,"y")||0;return{left:t,top:i,width:(n(e,"x")||0)-t,height:(n(e,"y")||0)-i}},toObject:function(e){return i(this.callSuper("toObject",e),{points:this.points.concat()})},_toSVG:function(){for(var e=[],i=this.pathOffset.x,r=this.pathOffset.y,n=t.Object.NUM_FRACTION_DIGITS,o=0,a=this.points.length;o\n']},commonRender:function(e){var t,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;e.beginPath(),e.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(e){return n(this.callSuper("toObject",e),{path:this.path.map((function(e){return e.slice()}))})},toDatalessObject:function(e){var t=this.toObject(["sourcePath"].concat(e));return t.sourcePath&&delete t.path,t},_toSVG:function(){return["\n"]},_getOffsetTransform:function(){var e=t.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,e)+", "+o(-this.pathOffset.y,e)+")"},toClipPathSVG:function(e){var t=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},toSVG:function(e){var t=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var e,n,s=[],o=[],a=0,l=0,h=0,c=0,u=0,d=this.path.length;u"},addWithUpdate:function(e){var i=!!this.group;return this._restoreObjectsState(),t.util.resetObjectTransform(this),e&&(i&&t.util.removeTransformFromObject(e,this.group.calcTransformMatrix()),this._objects.push(e),e.group=this,e._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),t.util.resetObjectTransform(this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(e){this.dirty=!0,e.group=this,e._set("canvas",this.canvas)},_onObjectRemoved:function(e){this.dirty=!0,delete e.group},_set:function(e,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(e,i);if("canvas"===e)for(;r--;)this._objects[r]._set(e,i);t.Object.prototype._set.call(this,e,i)},toObject:function(e){var i=this.includeDefaultValues,r=this._objects.filter((function(e){return!e.excludeFromExport})).map((function(t){var r=t.includeDefaultValues;t.includeDefaultValues=i;var n=t.toObject(e);return t.includeDefaultValues=r,n})),n=t.Object.prototype.toObject.call(this,e);return n.objects=r,n},toDatalessObject:function(e){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map((function(t){var i=t.includeDefaultValues;t.includeDefaultValues=n;var r=t.toDatalessObject(e);return t.includeDefaultValues=i,r}))}var s=t.Object.prototype.toDatalessObject.call(this,e);return s.objects=i,s},render:function(e){this._transformDone=!0,this.callSuper("render",e),this._transformDone=!1},shouldCache:function(){var e=t.Object.prototype.shouldCache.call(this);if(e)for(var i=0,r=this._objects.length;i\n"],i=0,r=this._objects.length;i\n"),t},getSvgStyles:function(){var e=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",t=this.visible?"":" visibility: hidden;";return[e,this.getSvgFilter(),t].join("")},toClipPathSVG:function(e){for(var t=[],i=0,r=this._objects.length;i"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(e,t,i){e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",e,t),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;r\n','\t\n',"\n"),o=' clip-path="url(#imageCrop_'+l+')" '}if(this.imageSmoothing||(a='" image-rendering="optimizeSpeed'),i.push("\t\n"),this.stroke||this.strokeDashArray){var h=this.fill;this.fill=null,e=["\t\n'],this.fill=h}return"fill"!==this.paintFirst?t.concat(e,i):t.concat(i,e)},getSrc:function(e){var t=e?this._element:this._originalElement;return t?t.toDataURL?t.toDataURL():this.srcFromAttribute?t.getAttribute("src"):t.src:this.src||""},setSrc:function(e,t,i){return x.util.loadImage(e,(function(e,r){this.setElement(e,i),this._setWidthHeight(),t&&t(this,r)}),this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var e=this.resizeFilter,t=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!e||r>t&&n>t)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);x.filterBackend||(x.filterBackend=x.initFilterBackend());var o=x.util.createCanvasElement(),a=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,l=s.width,h=s.height;o.width=l,o.height=h,this._element=o,this._lastScaleX=e.scaleX=r,this._lastScaleY=e.scaleY=n,x.filterBackend.applyFilters([e],s,l,h,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(e){if(e=(e=e||this.filters||[]).filter((function(e){return e&&!e.isNeutralState()})),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===e.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var t=this._originalElement,i=t.naturalWidth||t.width,r=t.naturalHeight||t.height;if(this._element===this._originalElement){var n=x.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return x.filterBackend||(x.filterBackend=x.initFilterBackend()),x.filterBackend.applyFilters(e,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(e),this._renderPaintInOrder(e)},drawCacheOnCanvas:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),x.Object.prototype.drawCacheOnCanvas.call(this,e)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(e){var t=this._element;if(t){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,s=this.height,o=Math.min,a=Math.max,l=a(this.cropX,0),h=a(this.cropY,0),c=t.naturalWidth||t.width,u=t.naturalHeight||t.height,d=l*i,f=h*r,g=o(n*i,c-d),_=o(s*r,u-f),p=-n/2,m=-s/2,v=o(n,c/i-l),y=o(s,u/r-h);t&&e.drawImage(t,d,f,g,_,p,m,v,y)}},_needsResize:function(){var e=this.getTotalObjectScaling();return e.scaleX!==this._lastScaleX||e.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(e,t){this.setElement(x.util.getById(e),t),x.util.addClass(this.getElement(),x.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e,t){e&&e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){e||(e={});var t=this.getElement();this.width=e.width||t.naturalWidth||t.width||0,this.height=e.height||t.naturalHeight||t.height||0},parsePreserveAspectRatioAttribute:function(){var e,t=x.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,l=0,h=0,c=this.width,u=this.height,d={width:c,height:u};return!t||"none"===t.alignX&&"none"===t.alignY?(n=c/i,s=u/r):("meet"===t.meetOrSlice&&(e=(c-i*(n=s=x.util.findScaleToFit(this._element,d)))/2,"Min"===t.alignX&&(o=-e),"Max"===t.alignX&&(o=e),e=(u-r*s)/2,"Min"===t.alignY&&(a=-e),"Max"===t.alignY&&(a=e)),"slice"===t.meetOrSlice&&(e=i-c/(n=s=x.util.findScaleToCover(this._element,d)),"Mid"===t.alignX&&(l=e/2),"Max"===t.alignX&&(l=e),e=r-u/s,"Mid"===t.alignY&&(h=e/2),"Max"===t.alignY&&(h=e),i=c/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:l,cropY:h}}}),x.Image.CSS_CANVAS="canvas-img",x.Image.prototype.getSvgSrc=x.Image.prototype.getSrc,x.Image.fromObject=function(e,t){var i=x.util.object.clone(e);x.util.loadImage(i.src,(function(e,r){r?t&&t(null,!0):x.Image.prototype._initFilters.call(i,i.filters,(function(r){i.filters=r||[],x.Image.prototype._initFilters.call(i,[i.resizeFilter],(function(r){i.resizeFilter=r[0],x.util.enlivenObjectEnlivables(i,i,(function(){var r=new x.Image(e,i);t(r,!1)}))}))}))}),null,i.crossOrigin)},x.Image.fromURL=function(e,t,i){x.util.loadImage(e,(function(e,r){t&&t(new x.Image(e,i),r)}),null,i&&i.crossOrigin)},x.Image.ATTRIBUTE_NAMES=x.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),x.Image.fromElement=function(e,i,r){var n=x.parseAttributes(e,x.Image.ATTRIBUTE_NAMES);x.Image.fromURL(n["xlink:href"],i,t(r?x.util.object.clone(r):{},n))})}(t),x.util.object.extend(x.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.angle%360;return e>0?90*Math.round((e-1)/90):90*Math.round(e/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(e){var t=function(){},i=(e=e||{}).onComplete||t,r=e.onChange||t,n=this;return x.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){n.rotate(e),r()},onComplete:function(){n.setCoords(),i()}})}}),x.util.object.extend(x.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function e(e,t){var i="precision "+t+" float;\nvoid main(){}",r=e.createShader(e.FRAGMENT_SHADER);return e.shaderSource(r,i),e.compileShader(r),!!e.getShaderParameter(r,e.COMPILE_STATUS)}function t(e){e&&e.tileSize&&(this.tileSize=e.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}x.isWebglSupported=function(t){if(x.isLikelyNode)return!1;t=t||x.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){x.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=x.maxTextureSize>=t;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(e(r,s[o])){x.webGlPrecision=s[o];break}}return this.isSupported=n,n},x.WebglFilterBackend=t,t.prototype={tileSize:2048,resources:{},setupGLContext:function(e,t){this.dispose(),this.createWebGLCanvas(e,t),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(e,t)},chooseFastestCopyGLTo2DMethod:function(e,t){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(e){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o=x.util.createCanvasElement(),a=new ArrayBuffer(e*t*4);if(x.forceGLPutImageData)return this.imageBuffer=a,void(this.copyGLTo2D=I);var l,h,c={imageBuffer:a,destinationWidth:e,destinationHeight:t,targetCanvas:o};o.width=e,o.height=t,l=window.performance.now(),E.call(c,this.gl,c),h=window.performance.now()-l,l=window.performance.now(),I.call(c,this.gl,c),h>window.performance.now()-l?(this.imageBuffer=a,this.copyGLTo2D=I):this.copyGLTo2D=E}},createWebGLCanvas:function(e,t){var i=x.util.createCanvasElement();i.width=e,i.height=t;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(e,t,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,t));var l={originalWidth:t.width||t.originalWidth,originalHeight:t.height||t.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&t),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&t),passes:e.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},h=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,h),e.forEach((function(e){e&&e.applyTo(l)})),function(e){var t=e.targetCanvas,i=t.width,r=t.height,n=e.destinationWidth,s=e.destinationHeight;i===n&&r===s||(t.width=n,t.height=s)}(l),this.copyGLTo2D(a,l),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(l.sourceTexture),a.deleteTexture(l.targetTexture),a.deleteFramebuffer(h),n.getContext("2d").setTransform(1,0,0,1,0,0),l},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(e,t,i,r){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),r?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,t,i,0,e.RGBA,e.UNSIGNED_BYTE,null),n},getCachedTexture:function(e,t){if(this.textureCache[e])return this.textureCache[e];var i=this.createTexture(this.gl,t.width,t.height,t);return this.textureCache[e]=i,i},evictCachesForKey:function(e){this.textureCache[e]&&(this.gl.deleteTexture(this.textureCache[e]),delete this.textureCache[e])},copyGLTo2D:E,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var e=this.gl,t={renderer:"",vendor:""};if(!e)return t;var i=e.getExtension("WEBGL_debug_renderer_info");if(i){var r=e.getParameter(i.UNMASKED_RENDERER_WEBGL),n=e.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(t.renderer=r.toLowerCase()),n&&(t.vendor=n.toLowerCase())}return this.gpuInfo=t,t}}}(),function(){var e=function(){};function t(){}x.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(e,t,i,r,n){var s=n.getContext("2d");s.drawImage(t,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:t,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return e.forEach((function(e){e.applyTo(o)})),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),x.Image=x.Image||{},x.Image.filters=x.Image.filters||{},x.Image.filters.BaseFilter=x.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(e){e&&this.setOptions(e)},setOptions:function(e){for(var t in e)this[t]=e[t]},createProgram:function(e,t,i){t=t||this.fragmentSource,i=i||this.vertexSource,"highp"!==x.webGlPrecision&&(t=t.replace(/precision highp float/g,"precision "+x.webGlPrecision+" float"));var r=e.createShader(e.VERTEX_SHADER);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+e.getShaderInfoLog(r));var n=e.createShader(e.FRAGMENT_SHADER);if(e.shaderSource(n,t),e.compileShader(n),!e.getShaderParameter(n,e.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+e.getShaderInfoLog(n));var s=e.createProgram();if(e.attachShader(s,r),e.attachShader(s,n),e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+e.getProgramInfoLog(s));var o=this.getAttributeLocations(e,s),a=this.getUniformLocations(e,s)||{};return a.uStepW=e.getUniformLocation(s,"uStepW"),a.uStepH=e.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(e,t){return{aPosition:e.getAttribLocation(t,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(e,t,i){var r=t.aPosition,n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,2,e.FLOAT,!1,0,0),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW)},_setupFrameBuffer:function(e){var t,i,r=e.context;e.passes>1?(t=e.destinationWidth,i=e.destinationHeight,e.sourceWidth===t&&e.sourceHeight===i||(r.deleteTexture(e.targetTexture),e.targetTexture=e.filterBackend.createTexture(r,t,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(e){e.passes--,e.pass++;var t=e.targetTexture;e.targetTexture=e.sourceTexture,e.sourceTexture=t},isNeutralState:function(){var e=this.mainParameter,t=x.Image.filters[this.type].prototype;if(e){if(Array.isArray(t[e])){for(var i=t[e].length;i--;)if(this[e][i]!==t[e][i])return!1;return!0}return t[e]===this[e]}return!1},applyTo:function(e){e.webgl?(this._setupFrameBuffer(e),this.applyToWebGL(e),this._swapTextures(e)):this.applyTo2d(e)},retrieveShader:function(e){return e.programCache.hasOwnProperty(this.type)||(e.programCache[this.type]=this.createProgram(e.context)),e.programCache[this.type]},applyToWebGL:function(e){var t=e.context,i=this.retrieveShader(e);0===e.pass&&e.originalTexture?t.bindTexture(t.TEXTURE_2D,e.originalTexture):t.bindTexture(t.TEXTURE_2D,e.sourceTexture),t.useProgram(i.program),this.sendAttributeData(t,i.attributeLocations,e.aPosition),t.uniform1f(i.uniformLocations.uStepW,1/e.sourceWidth),t.uniform1f(i.uniformLocations.uStepH,1/e.sourceHeight),this.sendUniformData(t,i.uniformLocations),t.viewport(0,0,e.destinationWidth,e.destinationHeight),t.drawArrays(t.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(e,t,i){e.activeTexture(i),e.bindTexture(e.TEXTURE_2D,t),e.activeTexture(e.TEXTURE0)},unbindAdditionalTexture:function(e,t){e.activeTexture(t),e.bindTexture(e.TEXTURE_2D,null),e.activeTexture(e.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(e){this[this.mainParameter]=e},sendUniformData:function(){},createHelpLayer:function(e){if(!e.helpLayer){var t=document.createElement("canvas");t.width=e.sourceWidth,t.height=e.sourceHeight,e.helpLayer=t}},toObject:function(){var e={type:this.type},t=this.mainParameter;return t&&(e[t]=this[t]),e},toJSON:function(){return this.toObject()}}),x.Image.filters.BaseFilter.fromObject=function(e,t){var i=new x.Image.filters[e.type](e);return t&&t(i),i},function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(e){this.callSuper("initialize",e),this.matrix=this.matrix.slice(0)},applyTo2d:function(e){var t,i,r,n,s,o=e.imageData.data,a=o.length,l=this.matrix,h=this.colorsOnly;for(s=0;s=S||o<0||o>=y||(l=4*(a*y+o),h=p[f*m+d],t+=_[l]*h,i+=_[l+1]*h,r+=_[l+2]*h,C||(n+=_[l+3]*h));w[s]=t,w[s+1]=i,w[s+2]=r,w[s+3]=C?_[s+3]:n}e.imageData=b},getUniformLocations:function(e,t){return{uMatrix:e.getUniformLocation(t,"uMatrix"),uOpaque:e.getUniformLocation(t,"uOpaque"),uHalfSize:e.getUniformLocation(t,"uHalfSize"),uSize:e.getUniformLocation(t,"uSize")}},sendUniformData:function(e,t){e.uniform1fv(t.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(e){var t,i,r=e.imageData.data,n=r.length,s=this.mode;for(t=0;th[0]&&n>h[1]&&s>h[2]&&r 0.0) {\n"+this.fragmentSource[e]+"}\n}"},retrieveShader:function(e){var t,i=this.type+"_"+this.mode;return e.programCache.hasOwnProperty(i)||(t=this.buildSource(this.mode),e.programCache[i]=this.createProgram(e.context,t)),e.programCache[i]},applyTo2d:function(e){var i,r,n,s,o,a,l,h=e.imageData.data,c=h.length,u=1-this.alpha;i=(l=new t.Color(this.color).getSource())[0]*this.alpha,r=l[1]*this.alpha,n=l[2]*this.alpha;for(var d=0;d=e||t<=-e)return 0;if(t<1.1920929e-7&&t>-1.1920929e-7)return 1;var i=(t*=Math.PI)/e;return a(t)/t*a(i)/i}},applyTo2d:function(e){var t=e.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=t.width,a=t.height,l=o(s*i),h=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(e,s,a,l,h):"hermite"===this.resizeType?n=this.hermiteFastResize(e,s,a,l,h):"bilinear"===this.resizeType?n=this.bilinearFiltering(e,s,a,l,h):"lanczos"===this.resizeType&&(n=this.lanczosResize(e,s,a,l,h)),e.imageData=n},sliceByTwo:function(e,i,n,s,o){var a,l,h=e.imageData,c=.5,u=!1,d=!1,f=i*c,g=n*c,_=t.filterBackend.resources,p=0,m=0,v=i,y=0;for(_.sliceByTwo||(_.sliceByTwo=document.createElement("canvas")),((a=_.sliceByTwo).width<1.5*i||a.height=t)){M=r(1e3*s(x-b.x)),S[M]||(S[M]={});for(var L=w.y-y;L<=w.y+y;L++)L<0||L>=o||(F=r(1e3*s(L-b.y)),S[M][F]||(S[M][F]=f(n(i(M*p,2)+i(F*m,2))/1e3)),(T=S[M][F])>0&&(I+=T,O+=T*c[E=4*(L*t+x)],A+=T*c[E+1],R+=T*c[E+2],D+=T*c[E+3]))}d[E=4*(C*a+l)]=O/I,d[E+1]=A/I,d[E+2]=R/I,d[E+3]=D/I}return++l1&&F<-1||(y=2*F*F*F-3*F*F+1)>0&&(T+=y*f[3+(M=4*(D+I*t))],b+=y,f[M+3]<255&&(y=y*f[M+3]/250),w+=y*f[M],C+=y*f[M+1],x+=y*f[M+2],S+=y)}_[v]=w/S,_[v+1]=C/S,_[v+2]=x/S,_[v+3]=T/b}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),t.Image.filters.Resize.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(e){if(0!==this.contrast){var t,i=e.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));for(t=0;t1&&(t=1/this.aspectRatio):this.aspectRatio<1&&(t=this.aspectRatio),e=t*this.blur*.12,this.horizontal?i[0]=e:i[1]=e,i}}),i.Blur.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(e){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,e)},applyTo2d:function(e){var t,i=e.imageData.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),t=0,n=256;t'},_getCacheCanvasDimensions:function(){var e=this.callSuper("_getCacheCanvasDimensions"),t=this.fontSize;return e.width+=t*e.zoomX,e.height+=t*e.zoomY,e},_render:function(e){var t=this.path;t&&!t.isNotVisible()&&t._render(e),this._setTextStyles(e),this._renderTextLinesBackground(e),this._renderTextDecoration(e,"underline"),this._renderText(e),this._renderTextDecoration(e,"overline"),this._renderTextDecoration(e,"linethrough")},_renderText:function(e){"stroke"===this.paintFirst?(this._renderTextStroke(e),this._renderTextFill(e)):(this._renderTextFill(e),this._renderTextStroke(e))},_setTextStyles:function(e,t,i){if(e.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":e.textBaseline="middle";break;case"ascender":e.textBaseline="top";break;case"descender":e.textBaseline="bottom"}e.font=this._getFontDeclaration(t,i)},calcTextWidth:function(){for(var e=this.getLineWidth(0),t=1,i=this._textLines.length;te&&(e=r)}return e},_renderTextLine:function(e,t,i,r,n,s){this._renderChars(e,t,i,r,n,s)},_renderTextLinesBackground:function(e){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var t,i,r,n,s,o,a,l=e.fillStyle,h=this._getLeftOffset(),c=this._getTopOffset(),u=0,d=0,f=this.path,g=0,_=this._textLines.length;g<_;g++)if(t=this.getHeightOfLine(g),this.textBackgroundColor||this.styleHas("textBackgroundColor",g)){r=this._textLines[g],i=this._getLineLeftOffset(g),d=0,u=0,n=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var p=0,m=r.length;p=0:ia?u%=a:u<0&&(u+=a),this._setGraphemeOnPath(u,s,o),u+=s.kernedWidth}return{width:l,numOfSpaces:0}},_setGraphemeOnPath:function(e,i,r){var n=e+i.kernedWidth/2,s=this.path,o=t.util.getPointOnPath(s.path,n,s.segmentsInfo);i.renderLeft=o.x-r.x,i.renderTop=o.y-r.y,i.angle=o.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(e,t,i,r,n){var s,o=this.getCompleteStyleDeclaration(t,i),a=r?this.getCompleteStyleDeclaration(t,i-1):{},l=this._measureChar(e,o,r,a),h=l.kernedWidth,c=l.width;0!==this.charSpacing&&(c+=s=this._getWidthOfCharSpacing(),h+=s);var u={width:c,left:0,height:o.fontSize,kernedWidth:h,deltaY:o.deltaY};if(i>0&&!n){var d=this.__charBounds[t][i-1];u.left=d.left+d.width+l.kernedWidth-l.width}return u},getHeightOfLine:function(e){if(this.__lineHeights[e])return this.__lineHeights[e];for(var t=this._textLines[e],i=this.getHeightOfChar(e,0),r=1,n=t.length;r0){var I=v+s+u;"rtl"===this.direction&&(I=this.width-I-d),h&&m&&(e.fillStyle=m,e.fillRect(I,c+w*r+o,d,this.fontSize/15)),u=f.left,d=f.width,h=g,m=p,r=n,o=a}else d+=f.kernedWidth;I=v+s+u,"rtl"===this.direction&&(I=this.width-I-d),e.fillStyle=p,g&&p&&e.fillRect(I,c+w*r+o,d-b,this.fontSize/15),y+=i}else y+=i;this._removeShadow(e)}},_getFontDeclaration:function(e,i){var r=e||this,n=this.fontFamily,s=t.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||s?r.fontFamily:'"'+r.fontFamily+'"';return[t.isLikelyNode?r.fontWeight:r.fontStyle,t.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",e)))},_splitTextIntoLines:function(e){for(var i=e.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-1&&(e.underline=!0),e.textDecoration.indexOf("line-through")>-1&&(e.linethrough=!0),e.textDecoration.indexOf("overline")>-1&&(e.overline=!0),delete e.textDecoration)}x.IText=x.util.createClass(x.Text,x.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(e,t){this.callSuper("initialize",e,t),this.initBehavior()},setSelectionStart:function(e){e=Math.max(e,0),this._updateAndFire("selectionStart",e)},setSelectionEnd:function(e){e=Math.min(e,this.text.length),this._updateAndFire("selectionEnd",e)},_updateAndFire:function(e,t){this[e]!==t&&(this._fireSelectionChanged(),this[e]=t),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(e){this.clearContextTop(),this.callSuper("render",e),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(e){this.callSuper("_render",e)},clearContextTop:function(e){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this.canvas.contextTop,i=this.canvas.viewportTransform;t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(t),this._clearTextArea(t),e||t.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this._getCursorBoundaries(),t=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(e){var t=this.width+4,i=this.height+4;e.clearRect(-t/2,-i/2,t,i)},_getCursorBoundaries:function(e){void 0===e&&(e=this.selectionStart);var t=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(e);return{left:t,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(e){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var t,i,r,n,s=0,o=0,a=this.get2DCursorLocation(e);r=a.charIndex,i=a.lineIndex;for(var l=0;l0?o:0)},"rtl"===this.direction&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(e,t){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,l=e.topOffset,h=this.getValueOfPropertyAt(r,n,"deltaY");l+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(e,t),t.fillStyle=this.cursorColor||this.getValueOfPropertyAt(r,n,"fill"),t.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,t.fillRect(e.left+e.leftOffset-a/2,l+e.top+h,a,s)},renderSelection:function(e,t){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,l=o.lineIndex,h=s.charIndex<0?0:s.charIndex,c=o.charIndex<0?0:o.charIndex,u=a;u<=l;u++){var d,f=this._getLineLeftOffset(u)||0,g=this.getHeightOfLine(u),_=0,p=0;if(u===a&&(_=this.__charBounds[a][h].left),u>=a&&u1)&&(g/=this.lineHeight);var v=e.left+f+_,y=p-_,S=g,b=0;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",S=1,b=g):t.fillStyle=this.selectionColor,"rtl"===this.direction&&(v=this.width-v-y),t.fillRect(v,e.top+e.topOffset+b,y,S),e.topOffset+=d}},getCurrentCharFontSize:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fontSize")},getCurrentCharColor:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fill")},_getCurrentCharIndex:function(){var e=this.get2DCursorLocation(this.selectionStart,!0),t=e.charIndex>0?e.charIndex-1:0;return{l:e.lineIndex,c:t}}}),x.IText.fromObject=function(t,i){if(e(t),t.styles)for(var r in t.styles)for(var n in t.styles[r])e(t.styles[r][n]);x.Object._fromObject("IText",t,i,"text")}}(),C=x.util.object.clone,x.util.object.extend(x.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var e=this;this.on("added",(function(){var t=e.canvas;t&&(t._hasITextHandlers||(t._hasITextHandlers=!0,e._initCanvasHandlers(t)),t._iTextInstances=t._iTextInstances||[],t._iTextInstances.push(e))}))},initRemovedHandler:function(){var e=this;this.on("removed",(function(){var t=e.canvas;t&&(t._iTextInstances=t._iTextInstances||[],x.util.removeFromArray(t._iTextInstances,e),0===t._iTextInstances.length&&(t._hasITextHandlers=!1,e._removeCanvasHandlers(t)))}))},_initCanvasHandlers:function(e){e._mouseUpITextHandler=function(){e._iTextInstances&&e._iTextInstances.forEach((function(e){e.__isMousedown=!1}))},e.on("mouse:up",e._mouseUpITextHandler)},_removeCanvasHandlers:function(e){e.off("mouse:up",e._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(e,t,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},e.animate("_currentCursorOpacity",t,{duration:i,onComplete:function(){n.isAborted||e[r]()},onChange:function(){e.canvas&&e.selectionStart===e.selectionEnd&&e.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout((function(){e._currentTickCompleteState=e._animateCursor(e,0,this.cursorDuration/2,"_tick")}),100)},initDelayedCursor:function(e){var t=this,i=e?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout((function(){t._tick()}),i)},abortCursorAnimation:function(){var e=this._currentTickState||this._currentTickCompleteState,t=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,e&&t&&t.clearContext(t.contextTop||t.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(e){var t=0,i=e-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i--;for(;/\S/.test(this._text[i])&&i>-1;)t++,i--;return e-t},findWordBoundaryRight:function(e){var t=0,i=e;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i++;for(;/\S/.test(this._text[i])&&i-1;)t++,i--;return e-t},findLineBoundaryRight:function(e){for(var t=0,i=e;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=t):(this.selectionStart=t,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(e,t,i){var r=i.slice(0,e),n=x.util.string.graphemeSplit(r).length;if(e===t)return{selectionStart:n,selectionEnd:n};var s=i.slice(e,t);return{selectionStart:n,selectionEnd:n+x.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(e,t,i){var r=i.slice(0,e).join("").length;return e===t?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(e,t).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var e=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=e.selectionStart,this.hiddenTextarea.selectionEnd=e.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var e=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=e.selectionEnd,this.inCompositionMode||(this.selectionStart=e.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var e=this._calcTextareaPosition();this.hiddenTextarea.style.left=e.left,this.hiddenTextarea.style.top=e.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var e=this.inCompositionMode?this.compositionStart:this.selectionStart,t=this._getCursorBoundaries(e),i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=t.leftOffset,a=this.calcTransformMatrix(),l={x:t.left+o,y:t.top+t.topOffset+s},h=this.canvas.getRetinaScaling(),c=this.canvas.upperCanvasEl,u=c.width/h,d=c.height/h,f=u-s,g=d-s,_=c.clientWidth/u,p=c.clientHeight/d;return l=x.util.transformPoint(l,a),(l=x.util.transformPoint(l,this.canvas.viewportTransform)).x*=_,l.y*=p,l.x<0&&(l.x=0),l.x>f&&(l.x=f),l.y<0&&(l.y=0),l.y>g&&(l.y=g),l.x+=this.canvas._offset.left,l.y+=this.canvas._offset.top,{left:l.x+"px",top:l.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var e=this._textBeforeEdit!==this.text,t=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,t&&(t.blur&&t.blur(),t.parentNode&&t.parentNode.removeChild(t)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),e&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),e&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var e in this.styles)this._textLines[e]||delete this.styles[e]},removeStyleFromTo:function(e,t){var i,r,n=this.get2DCursorLocation(e,!0),s=this.get2DCursorLocation(t,!0),o=n.lineIndex,a=n.charIndex,l=s.lineIndex,h=s.charIndex;if(o!==l){if(this.styles[o])for(i=a;i=h&&(r[c-d]=r[u],delete r[u])}},shiftLineStyles:function(e,t){var i=C(this.styles);for(var r in this.styles){var n=parseInt(r,10);n>e&&(this.styles[n+t]=i[n],i[n-t]||delete this.styles[n])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,t,i,r){var n,s={},o=!1,a=this._unwrappedTextLines[e].length===t;for(var l in i||(i=1),this.shiftLineStyles(e,i),this.styles[e]&&(n=this.styles[e][0===t?t:t-1]),this.styles[e]){var h=parseInt(l,10);h>=t&&(o=!0,s[h-t]=this.styles[e][l],a&&0===t||delete this.styles[e][l])}var c=!1;for(o&&!a&&(this.styles[e+i]=s,c=!0),c&&i--;i>0;)r&&r[i-1]?this.styles[e+i]={0:C(r[i-1])}:n?this.styles[e+i]={0:C(n)}:delete this.styles[e+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(e,t,i,r){this.styles||(this.styles={});var n=this.styles[e],s=n?C(n):{};for(var o in i||(i=1),s){var a=parseInt(o,10);a>=t&&(n[a+i]=s[a],s[a-i]||delete n[a])}if(this._forceClearCache=!0,r)for(;i--;)Object.keys(r[i]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][t+i]=C(r[i]));else if(n)for(var l=n[t?t-1:1];l&&i--;)this.styles[e][t+i]=C(l)},insertNewStyleBlock:function(e,t,i){for(var r=this.get2DCursorLocation(t,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s),o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&this.styles[r.lineIndex+o]&&i[0]&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(e,t,i){i<=e?(t===e?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=e),this.selectionStart=i):i>e&&ie?this.selectionStart=e:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>e?this.selectionEnd=e:this.selectionEnd<0&&(this.selectionEnd=0)}}),x.util.object.extend(x.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(e){if(this.canvas){this.__newClickTime=+new Date;var t=e.pointer;this.isTripleClick(t)&&(this.fire("tripleclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(e){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(e.e))},tripleClickHandler:function(e){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(e.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(e.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(e){if(this.__isMousedown=!1,!(!this.editable||this.group||e.transform&&e.transform.actionPerformed||e.e.button&&1!==e.e.button)){if(this.canvas){var t=this.canvas._activeObject;if(t&&t!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(e.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e),i=this.selectionStart,r=this.selectionEnd;e.shiftKey?this.setSelectionStartEndWithShift(i,r,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(e){for(var t,i=this.getLocalPointer(e),r=0,n=0,s=0,o=0,a=0,l=0,h=this._textLines.length;l0&&(o+=this._textLines[l-1].length+this.missingNewlineOffset(l-1));n=this._getLineLeftOffset(a)*this.scaleX,t=this._textLines[a],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+n);for(var c=0,u=t.length;cs||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),x.util.object.extend(x.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=x.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var e=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+e.top+"; left: "+e.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+e.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):x.document.body.appendChild(this.hiddenTextarea),x.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),x.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),x.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),x.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(x.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(this.isEditing){var t="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(e.keyCode in t)this[t[e.keyCode]](e);else{if(!(e.keyCode in this.ctrlKeysMapDown)||!e.ctrlKey&&!e.metaKey)return;this[this.ctrlKeysMapDown[e.keyCode]](e)}e.stopImmediatePropagation(),e.preventDefault(),e.keyCode>=33&&e.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(e){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:e.keyCode in this.ctrlKeysMapUp&&(e.ctrlKey||e.metaKey)&&(this[this.ctrlKeysMapUp[e.keyCode]](e),e.stopImmediatePropagation(),e.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(e){var t=this.fromPaste;if(this.fromPaste=!1,e&&e.stopPropagation(),this.isEditing){var i,r,n,s,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,l=this._text.length,h=a.length,c=h-l,u=this.selectionStart,d=this.selectionEnd,f=u!==d;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),_=u>g.selectionStart;f?(i=this._text.slice(u,d),c+=d-u):h0&&(r+=(i=this.__charBounds[e][t-1]).left+i.width),r},getDownCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||e.metaKey||34===e.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o);return this._textLines[n].slice(s).length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(e,t){return e.shiftKey&&this.selectionStart!==this.selectionEnd&&t?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||e.metaKey||33===e.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),l=this._textLines[n].slice(0,s),h=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-l.length+(1-h)},_getIndexOnLine:function(e,t){for(var i,r,n=this._textLines[e],s=this._getLineLeftOffset(e),o=0,a=0,l=n.length;at){r=!0;var h=s-i,c=s,u=Math.abs(h-t);o=Math.abs(c-t)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",e)},moveCursorUp:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",e)},_moveCursorUpOrDown:function(e,t){var i=this["get"+e+"CursorOffset"](t,"right"===this._selectionDirection);t.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(e){var t="left"===this._selectionDirection?this.selectionStart+e:this.selectionEnd+e;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,t),0!==e},moveCursorWithoutShift:function(e){return e<0?(this.selectionStart+=e,this.selectionEnd=this.selectionStart):(this.selectionEnd+=e,this.selectionStart=this.selectionEnd),0!==e},moveCursorLeft:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",e)},_move:function(e,t,i){var r;if(e.altKey)r=this["findWordBoundary"+i](this[t]);else{if(!e.metaKey&&35!==e.keyCode&&36!==e.keyCode)return this[t]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[t])}if(void 0!==typeof r&&this[t]!==r)return this[t]=r,!0},_moveLeft:function(e,t){return this._move(e,t,"Left")},_moveRight:function(e,t){return this._move(e,t,"Right")},moveCursorLeftWithoutShift:function(e){var t=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(t=this._moveLeft(e,"selectionStart")),this.selectionEnd=this.selectionStart,t},moveCursorLeftWithShift:function(e){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(e,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(e,"selectionStart")):void 0},moveCursorRight:function(e){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",e)},_moveCursorLeftOrRight:function(e,t){var i="moveCursor"+e+"With";this._currentCursorOpacity=1,t.shiftKey?i+="Shift":i+="outShift",this[i](t)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(e){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(e,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(e){var t=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(t=this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t},removeChars:function(e,t){void 0===t&&(t=e+1),this.removeStyleFromTo(e,t),this._text.splice(e,t-e),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(e,t,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=x.util.string.graphemeSplit(e);this.insertNewStyleBlock(n,i,t),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var e=x.util.toFixed,t=/ +/g;x.util.object.extend(x.Text.prototype,{_toSVG:function(){var e=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(e.textTop,e.textLeft);return this._wrapSVGTextAndBg(t)},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(e){var t=this.getSvgTextDecoration(this);return[e.textBgRects.join(""),'\t\t",e.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(e,t){var i,r=[],n=[],s=e;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",x.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(e,t,i,r){var n,s,o,a,l,h=this.getHeightOfLine(t),c=-1!==this.textAlign.indexOf("justify"),u="",d=0,f=this._textLines[t];r+=h*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,_=f.length-1;g<=_;g++)l=g===_||this.charSpacing,u+=f[g],o=this.__charBounds[t][g],0===d?(i+=o.kernedWidth-o.width,d+=o.width):d+=o.kernedWidth,c&&!l&&this._reSpaceAndTab.test(f[g])&&(l=!0),l||(n=n||this.getCompleteStyleDeclaration(t,g),s=this.getCompleteStyleDeclaration(t,g+1),l=this._hasStyleChangedForSvg(n,s)),l&&(a=this._getStyleDeclaration(t,g)||{},e.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=d,d=0)},_pushTextBgRect:function(t,i,r,n,s,o){var a=x.Object.NUM_FRACTION_DIGITS;t.push("\t\t\n')},_setSVGTextLineBg:function(e,t,i,r){for(var n,s,o=this._textLines[t],a=this.getHeightOfLine(t)/this.lineHeight,l=0,h=0,c=this.getValueOfPropertyAt(t,0,"textBackgroundColor"),u=0,d=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(e){for(var t=0,i=0,r=0,n={},s=0;s0?(i=0,r++,t++):!this.splitByGrapheme&&this._reSpaceAndTab.test(e.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:t,offset:i},r+=e.graphemeLines[s].length,i+=e.graphemeLines[s].length;return n},styleHas:function(e,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return t.Text.prototype.styleHas.call(this,e,i)},isEmptyStyles:function(e){if(!this.styles)return!0;var t,i,r=0,n=!1,s=this._styleMap[e],o=this._styleMap[e+1];for(var a in s&&(e=s.line,r=s.offset),o&&(n=o.line===e,t=o.offset),i=void 0===e?this.styles:{line:this.styles[e]})for(var l in i[a])if(l>=r&&(!n||lr&&!p?(a.push(l),l=[],s=f,p=!0):s+=m,p||o||l.push(d),l=l.concat(c),g=o?0:this._measureWord([d],i,u),u++,p=!1,f>_&&(_=f);return v&&a.push(l),_+n>this.dynamicMinWidth&&(this.dynamicMinWidth=_-m+n),a},isEndOfWrapping:function(e){return!this._styleMap[e+1]||this._styleMap[e+1].line!==this._styleMap[e].line},missingNewlineOffset:function(e){return this.splitByGrapheme?this.isEndOfWrapping(e)?1:0:1},_splitTextIntoLines:function(e){for(var i=t.Text.prototype._splitTextIntoLines.call(this,e),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s{},898:()=>{},245:()=>{}},B={};function N(e){var t=B[e];if(void 0!==t)return t.exports;var i=B[e]={exports:{}};return k[e](i,i.exports,N),i.exports}N.d=(e,t)=>{for(var i in t)N.o(t,i)&&!N.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},N.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var j={};(()=>{let e;N.d(j,{R:()=>e}),e="undefined"!=typeof document&&"undefined"!=typeof window?N(653).fabric:{version:"5.2.1"}})();var V=j.R; +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Dynamsoft=e.Dynamsoft||{},e.Dynamsoft.DBR={}))}(this,(function(e){"use strict";const t="undefined"==typeof self,i=t?{}:self;let r,n,s,o,a;if("undefined"!=typeof navigator&&(r=navigator,n=r.userAgent,s=r.platform,o=r.mediaDevices),!t){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:r.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:s,search:"Win"},Mac:{str:s},Linux:{str:s}};let i="unknownBrowser",o=0,l="unknownOS";for(let t in e){const r=e[t]||{};let s=r.str||n,a=r.search||t,l=r.verStr||n,h=r.verSearch||t;if(h instanceof Array||(h=[h]),-1!=s.indexOf(a)){i=t;for(let e of h){let t=l.indexOf(e);if(-1!=t){o=parseFloat(l.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let r=i.str||n,s=i.search||e;if(-1!=r.indexOf(s)){l=e;break}}"Linux"==l&&-1!=n.indexOf("Windows NT")&&(l="HarmonyOS"),a={browser:i,version:o,OS:l}}t&&(a={browser:"ssr",version:0,OS:"ssr"});const l="undefined"!=typeof WebAssembly&&n&&!(/Safari/.test(n)&&!/Chrome/.test(n)&&/\(.+\s11_2_([2-6]).*\)/.test(n)),h=!("undefined"==typeof Worker),c=!(!o||!o.getUserMedia),u=async()=>{let e=!1;if(c)try{(await o.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===a.browser&&a.version>66||"Safari"===a.browser&&a.version>13||"OPR"===a.browser&&a.version>43||"Edge"===a.browser&&a.version;const d=(()=>{if(!t&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),f=" is not allowed to change after `createInstance` or `loadWasm` is called.",g=!t&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",_=!t&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",p=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let i=0;ie&&"object"==typeof e&&"function"==typeof e.then;class C extends Promise{constructor(e){let t,i;super(((e,r)=>{t=e,i=r})),this._s="pending",this.resolve=e=>{this.isPending&&(w(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",i(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,w(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const i=await t;e===this._task&&this.resolve(i)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}var x=function(){this.init()};x.prototype={init:function(){var e=this||T;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var t=this||T;if(e=parseFloat(e),t.ctx||F(),void 0!==e&&e>=0&&e<=1){if(t._volume=e,t._muted)return t;t.usingWebAudio&&t.masterGain.gain.setValueAtTime(e,T.ctx.currentTime);for(var i=0;i=0;t--)e._howls[t].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,F()),e},codecs:function(e){return(this||T)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||T;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||T,t=null;try{t="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!t||"function"!=typeof t.canPlayType)return e;var i=t.canPlayType("audio/mpeg;").replace(/^no$/,""),r=e._navigator?e._navigator.userAgent:"",n=r.match(/OPR\/([0-6].)/g),s=n&&parseInt(n[0].split("/")[1],10)<33,o=-1!==r.indexOf("Safari")&&-1===r.indexOf("Chrome"),a=r.match(/Version\/(.*?) /),l=o&&a&&parseInt(a[1],10)<15;return e._codecs={mp3:!(s||!i&&!t.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!i,opus:!!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(t.canPlayType('audio/wav; codecs="1"')||t.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!t.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!t.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(t.canPlayType("audio/x-m4a;")||t.canPlayType("audio/m4a;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(t.canPlayType("audio/x-m4b;")||t.canPlayType("audio/m4b;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(t.canPlayType("audio/x-mp4;")||t.canPlayType("audio/mp4;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(l||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(l||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(t.canPlayType("audio/x-flac;")||t.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||T;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var t=function(i){for(;e._html5AudioPool.length0?o._seek:i._sprite[e][0]/1e3),h=Math.max(0,(i._sprite[e][0]+i._sprite[e][1])/1e3-l),c=1e3*h/Math.abs(o._rate),u=i._sprite[e][0]/1e3,d=(i._sprite[e][0]+i._sprite[e][1])/1e3;o._sprite=e,o._ended=!1;var f=function(){o._paused=!1,o._seek=l,o._start=u,o._stop=d,o._loop=!(!o._loop&&!i._sprite[e][2])};if(!(l>=d)){var g=o._node;if(i._webAudio){var _=function(){i._playLock=!1,f(),i._refreshBuffer(o);var e=o._muted||i._muted?0:o._volume;g.gain.setValueAtTime(e,T.ctx.currentTime),o._playStart=T.ctx.currentTime,void 0===g.bufferSource.start?o._loop?g.bufferSource.noteGrainOn(0,l,86400):g.bufferSource.noteGrainOn(0,l,h):o._loop?g.bufferSource.start(0,l,86400):g.bufferSource.start(0,l,h),c!==1/0&&(i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c)),t||setTimeout((function(){i._emit("play",o._id),i._loadQueue()}),0)};"running"===T.state&&"interrupted"!==T.ctx.state?_():(i._playLock=!0,i.once("resume",_),i._clearTimer(o._id))}else{var p=function(){g.currentTime=l,g.muted=o._muted||i._muted||T._muted||g.muted,g.volume=o._volume*T.volume(),g.playbackRate=o._rate;try{var r=g.play();if(r&&"undefined"!=typeof Promise&&(r instanceof Promise||"function"==typeof r.then)?(i._playLock=!0,f(),r.then((function(){i._playLock=!1,g._unlocked=!0,t?i._loadQueue():i._emit("play",o._id)})).catch((function(){i._playLock=!1,i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),o._ended=!0,o._paused=!0}))):t||(i._playLock=!1,f(),i._emit("play",o._id)),g.playbackRate=o._rate,g.paused)return void i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||o._loop?i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c):(i._endTimers[o._id]=function(){i._ended(o),g.removeEventListener("ended",i._endTimers[o._id],!1)},g.addEventListener("ended",i._endTimers[o._id],!1))}catch(e){i._emit("playerror",o._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===g.src&&(g.src=i._src,g.load());var m=window&&window.ejecta||!g.readyState&&T._navigator.isCocoonJS;if(g.readyState>=3||m)p();else{i._playLock=!0,i._state="loading";var v=function(){i._state="loaded",p(),g.removeEventListener(T._canPlayEvent,v,!1)};g.addEventListener(T._canPlayEvent,v,!1),i._clearTimer(o._id)}}return o._id}i._ended(o)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var i=t._getSoundIds(e),r=0;r=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else n.length>=2&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(i=t?r._soundById(t):r._sounds[0])?i._volume:0;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"volume",action:function(){r.volume.apply(r,n)}}),r;void 0===t&&(r._volume=e),t=r._getSoundIds(t);for(var a=0;a0?r/h:r),u=Date.now();e._fadeTo=i,e._interval=setInterval((function(){var n=(Date.now()-u)/r;u=Date.now(),a+=l*n,a=Math.round(100*a)/100,a=l<0?Math.max(i,a):Math.min(i,a),o._webAudio?e._volume=a:o.volume(a,e._id,!0),s&&(o._volume=a),(it&&a>=i)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,o.volume(i,e._id),o._emit("fade",e._id))}),c)},_stopFade:function(e){var t=this,i=t._soundById(e);return i&&i._interval&&(t._webAudio&&i._node.gain.cancelScheduledValues(T.ctx.currentTime),clearInterval(i._interval),i._interval=null,t.volume(i._fadeTo,e),i._fadeTo=null,t._emit("fade",e)),t},loop:function(){var e,t,i,r=this,n=arguments;if(0===n.length)return r._loop;if(1===n.length){if("boolean"!=typeof n[0])return!!(i=r._soundById(parseInt(n[0],10)))&&i._loop;e=n[0],r._loop=e}else 2===n.length&&(e=n[0],t=parseInt(n[1],10));for(var s=r._getSoundIds(t),o=0;o=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else 2===n.length&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if("number"!=typeof e)return(i=r._soundById(t))?i._rate:r._rate;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"rate",action:function(){r.rate.apply(r,n)}}),r;void 0===t&&(r._rate=e),t=r._getSoundIds(t);for(var a=0;a=0?t=parseInt(r[0],10):i._sounds.length&&(t=i._sounds[0]._id,e=parseFloat(r[0]))}else 2===r.length&&(e=parseFloat(r[0]),t=parseInt(r[1],10));if(void 0===t)return 0;if("number"==typeof e&&("loaded"!==i._state||i._playLock))return i._queue.push({event:"seek",action:function(){i.seek.apply(i,r)}}),i;var o=i._soundById(t);if(o){if(!("number"==typeof e&&e>=0)){if(i._webAudio){var a=i.playing(t)?T.ctx.currentTime-o._playStart:0,l=o._rateSeek?o._rateSeek-o._seek:0;return o._seek+(l+a*Math.abs(o._rate))}return o._node.currentTime}var h=i.playing(t);h&&i.pause(t,!0),o._seek=e,o._ended=!1,i._clearTimer(t),i._webAudio||!o._node||isNaN(o._node.duration)||(o._node.currentTime=e);var c=function(){h&&i.play(t,!0),i._emit("seek",t)};if(h&&!i._webAudio){var u=function(){i._playLock?setTimeout(u,0):c()};setTimeout(u,0)}else c()}return i},playing:function(e){var t=this;if("number"==typeof e){var i=t._soundById(e);return!!i&&!i._paused}for(var r=0;r=0&&T._howls.splice(r,1);var n=!0;for(i=0;i=0){n=!1;break}return O&&n&&delete O[e._src],T.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,i,r){var n=this["_on"+e];return"function"==typeof t&&n.push(r?{id:i,fn:t,once:r}:{id:i,fn:t}),this},off:function(e,t,i){var r=this,n=r["_on"+e],s=0;if("number"==typeof t&&(i=t,t=null),t||i)for(s=0;s=0;s--)n[s].id&&n[s].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,i)}.bind(r,n[s].fn),0),n[s].once&&r.off(e,n[s].fn,n[s].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var i=t._queue[0];i.event===e&&(t._queue.shift(),t._loadQueue()),e||i.action()}return t},_ended:function(e){var t=this,i=e._sprite;if(!t._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(i<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),i--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],i=0;i=0;if(!e.bufferSource)return this;if(T._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{e.bufferSource.buffer=T._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(T._navigator&&T._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var I=function(e){this._parent=e,this.init()};I.prototype={init:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++T._counter,t._sounds.push(e),e.create(),e},create:function(){var e=this,t=e._parent,i=T._muted||e._muted||e._parent._muted?0:e._volume;return t._webAudio?(e._node=void 0===T.ctx.createGain?T.ctx.createGainNode():T.ctx.createGain(),e._node.gain.setValueAtTime(i,T.ctx.currentTime),e._node.paused=!0,e._node.connect(T.masterGain)):T.noAudio||(e._node=T._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(T._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=t._src,e._node.preload=!0===t._preload?"auto":t._preload,e._node.volume=i*T.volume(),e._node.load()),e},reset:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++T._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,t=e._parent;t._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(t._sprite).length&&(t._sprite={__default:[0,1e3*t._duration]}),"loaded"!==t._state&&(t._state="loaded",t._emit("load"),t._loadQueue()),e._node.removeEventListener(T._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var O={},A=function(e){var t=e._src;if(O[t])return e._duration=O[t].duration,void M(e);if(/^data:[^;]+;base64,/.test(t)){for(var i=atob(t.split(",")[1]),r=new Uint8Array(i.length),n=0;n0?(O[t._src]=e,M(t,e)):i()};"undefined"!=typeof Promise&&1===T.ctx.decodeAudioData.length?T.ctx.decodeAudioData(e).then(r).catch(i):T.ctx.decodeAudioData(e,r,i)},M=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},F=function(){if(T.usingWebAudio){try{"undefined"!=typeof AudioContext?T.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?T.ctx=new webkitAudioContext:T.usingWebAudio=!1}catch(e){T.usingWebAudio=!1}T.ctx||(T.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(T._navigator&&T._navigator.platform),t=T._navigator&&T._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),i=t?parseInt(t[1],10):null;if(e&&i&&i<9){var r=/safari/.test(T._navigator&&T._navigator.userAgent.toLowerCase());T._navigator&&!r&&(T.usingWebAudio=!1)}T.usingWebAudio&&(T.masterGain=void 0===T.ctx.createGain?T.ctx.createGainNode():T.ctx.createGain(),T.masterGain.gain.setValueAtTime(T._muted?0:T._volume,T.ctx.currentTime),T.masterGain.connect(T.ctx.destination)),T._setup()}};!function(e,t,i,r){var n;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var i=t._howls.length-1;i>=0;i--)t._howls[i].stereo(e);return t},e.prototype.pos=function(e,i,r){var n=this;return n.ctx&&n.ctx.listener?(i="number"!=typeof i?n._pos[1]:i,r="number"!=typeof r?n._pos[2]:r,"number"!=typeof e?n._pos:(n._pos=[e,i,r],void 0!==n.ctx.listener.positionX?(n.ctx.listener.positionX.setTargetAtTime(n._pos[0],t.ctx.currentTime,.1),n.ctx.listener.positionY.setTargetAtTime(n._pos[1],t.ctx.currentTime,.1),n.ctx.listener.positionZ.setTargetAtTime(n._pos[2],t.ctx.currentTime,.1)):n.ctx.listener.setPosition(n._pos[0],n._pos[1],n._pos[2]),n)):n},e.prototype.orientation=function(e,i,r,n,s,o){var a=this;if(!a.ctx||!a.ctx.listener)return a;var l=a._orientation;return i="number"!=typeof i?l[1]:i,r="number"!=typeof r?l[2]:r,n="number"!=typeof n?l[3]:n,s="number"!=typeof s?l[4]:s,o="number"!=typeof o?l[5]:o,"number"!=typeof e?l:(a._orientation=[e,i,r,n,s,o],void 0!==a.ctx.listener.forwardX?(a.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),a.ctx.listener.forwardY.setTargetAtTime(i,t.ctx.currentTime,.1),a.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),a.ctx.listener.upX.setTargetAtTime(n,t.ctx.currentTime,.1),a.ctx.listener.upY.setTargetAtTime(s,t.ctx.currentTime,.1),a.ctx.listener.upZ.setTargetAtTime(o,t.ctx.currentTime,.1)):a.ctx.listener.setOrientation(e,i,r,n,s,o),a)},i.prototype.init=(n=i.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],n.call(this,e)}),i.prototype.stereo=function(e,i){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,i)}}),r;var n=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===i){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var o=r._getSoundIds(i),a=0;a{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`license`"+f);i._license=t})(P,e)}static get productKeys(){return this._license}static set productKeys(e){P.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){P.license=e}static get organizationID(){return this._license}static set organizationID(e){P.license=e}static set sessionPassword(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`sessionPassword`"+f);i._sessionPassword=t})(P,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:l,worker:h,getUserMedia:c,camera:await u(),browser:a.browser,version:a.version,OS:a.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");P._engineResourcePath=(e=>{if(null==e&&(e="./"),!t){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`licenseServer`"+f);i._licenseServer=p(t)})(P,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+f);i._deviceFriendlyName=t||""})(P,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");P.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=P._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",P.engineResourcePath)}static set defaultUIElementURL(e){P._defaultUIElementURL=e}static _fireHTTPSWarnning(){P.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{P.onWarning&&P.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new E({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;P._onLog&&P._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const i=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{i?i===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else i||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),i=null;if(t&&t.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:l}=e;i=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(i,r,n,a,l,s,o)}if(this._drawResults(i,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(P._onLog&&P._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!P.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:r,sp:n,rmk:s}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,r,n=t._license||"",s=JSON.parse(JSON.stringify(t._licenseServer)),o=t._sessionPassword,a=0;if(n.startsWith("t")||n.startsWith("f"))a=0;else if(0===n.length||n.startsWith("P")||n.startsWith("L")||n.startsWith("Y")||n.startsWith("A"))a=1;else{a=2;const t=n.indexOf(":");if(-1!=t&&(n=n.substring(t+1)),n.startsWith("DLS2")){let t;try{let e=n.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(n=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof n&&(n=JSON.stringify(n)),0===s.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),s=p(e)}!o&&t.sessionPassword&&(o=t.sessionPassword),e=t.remark}("200001"===n||n.startsWith("200001-"))&&(s&&s.length||(n="")),n||(a=1)}if(a&&(i.crypto||(r="Please upgrade your browser to support online key."),i.crypto.subtle||(r="Require https to use online key in this browser.")),r){if(1!==a)throw new Error(r);a=0,console.warn(r),t._lastErrorCode=-1,t._lastErrorString=r}return 1===a&&(n="",console.warn("Applying for a public trial license ...")),{lt:a,l:n,ls:s,sp:o,rmk:e}}throw new Error("Can't preprocess license again"+f)})(P);this._pLoad.task=async(i,o)=>{let l=P.engineResourcePath+P._workerName;P.engineResourcePath.startsWith(location.origin)||(l=await fetch(l).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),P._dbrWorker=new Worker(l),P._dbrWorker.onerror=e=>{let t=new Error(e.message);o(t)},P._dbrWorker.onmessage=async t=>{let r=t.data?t.data:t;switch(r.type){case"log":P._onLog&&P._onLog(r.message);break;case"load":{r.message&&(r.message=r.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let t,n=!1;1===e&&(n=!0,r.message||(r.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),r.success?(P._dbrWorker.onerror=null,P._version=r.version+"(JS "+P._jsVersion+"."+P._jsEditVersion+")",P._onLog&&P._onLog("load dbr worker success"),r.message&&console.warn(r.message)):(t=new Error(r.message),t.stack=r.stack+"\n"+t.stack,t.ltsErrorCode=r.ltsErrorCode,n||111==r.ltsErrorCode&&-1!=r.message.toLowerCase().indexOf("trial license")&&(n=!0)),n&&P.showDialog(r.success?"warn":"error",r.message),r.success?i():o(t);break}case"task":{let e=r.id,t=r.body;try{P._taskCallbackMap.get(e)(t),P._taskCallbackMap.delete(e)}catch(t){throw P._taskCallbackMap.delete(e),t}break}default:P._onLog&&P._onLog(t)}},P._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:P.engineResourcePath,bUseFullFeature:P._bUseFullFeature,bd:P._bWasmDebug,v:P._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:a,cv:P.authCacheVersion,fn:P.deviceFriendlyName,ls:r,sp:n,rmk:s})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,i)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let n=await r.text();if(!n.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let s=document.createElement("div");s.innerHTML=n;let o=[];for(let e=0;e{if(e==t.target){a.remove();for(let e of o)e.remove()}}));else if(!h&&e.classList.contains("dls-license-icon-close"))h=e,e.addEventListener("click",(()=>{a.remove();for(let e of o)e.remove()}));else if(!c&&e.classList.contains("dls-license-icon-error"))c=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!d&&e.classList.contains("dls-license-msg-content")){d=e;let t=i;for(;t;){let i=t.indexOf("["),r=t.indexOf("]",i),n=t.indexOf("(",r),s=t.indexOf(")",n);if(-1==i||-1==r||-1==n||-1==s){e.appendChild(new Text(t));break}i>0&&e.appendChild(new Text(t.substring(0,i)));let o=document.createElement("a"),a=t.substring(i+1,r);o.innerText=a;let l=t.substring(n+1,s);o.setAttribute("href",l),o.setAttribute("target","_blank"),e.appendChild(o),t=t.substring(s+1)}}document.body.appendChild(a)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await P.loadWasm(),await new Promise(((t,i)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new P;return e._instanceID=await P.createInstanceInWorker(),P._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:i,instanceID:this._instanceID})}))}async decode(e){P._onLog&&P._onLog("decode(source: any)"),P._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):P.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):P.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,i,r,n,s,o){return await new Promise(((a,l)=>{let h=P._nextTaskID++;P._taskCallbackMap.set(h,(e=>{if(e.success){let t,i=P._onLog?Date.now():0;P._onLog&&P._onLog("worker return result: "+i),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return l(e)}if(P._onLog){let e=Date.now();P._onLog("DBR getting message from worker timestamp: "+i),P._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),P._onLog("From DBR entering worker to returning message from worker costs: "+(i-this._timeEnterInnerDBR)),P._onLog("Handling results from DBR worker costs: "+(e-i)),P._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return a(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,l(t)}})),this._timeEnterInnerDBR=Date.now(),P._onLog&&P._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),P._dbrWorker.postMessage({type:"decodeBuffer",id:h,instanceID:this._instanceID,body:{buffer:e,width:t,height:i,stride:r,format:n,orientation:s,config:o}},[e.buffer]),P._onLog&&o&&o.timeStamp&&P._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-o.timeStamp))}))}async _decodeBuffer_Blob(e,t,i,r,n,s,o){P._onLog&&P._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const a=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,i)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{i(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(a),t,i,r,n,s,o)}async decodeBuffer(e,t,i,r,n,s,o){let a;return P._onLog&&P._onLog("decodeBuffer(buffer,width,height,stride,format)"),P._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?a=await this._decodeBuffer_Uint8Array(e,t,i,r,n,s,o):e instanceof ArrayBuffer?a=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,i,r,n,s,o):e instanceof Blob&&(a=await this._decodeBuffer_Blob(e,t,i,r,n,s,o)),a}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,i)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return i(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success){let t=JSON.parse(i.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getRuntimeSettings",id:i,instanceID:this._instanceID})}))}async updateRuntimeSettings(t){let i;if("string"==typeof t)if("speed"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=3,i.expectedBarcodesCount=0,i.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=5,i.expectedBarcodesCount=512,i.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region}else if("dense"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=9,i.expectedBarcodesCount=0,i.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,i.region=e.region,i.deblurLevel=3,i.expectedBarcodesCount=0,i.localizationModes=[2,8,0,0,0,0,0,0]}else i=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(i=JSON.parse(JSON.stringify(t)),i.region instanceof Array){let e=i.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(i.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!P._bUseFullFeature){if(0!=(i.barcodeFormatIds&~(e.EnumBarcodeFormat.BF_ONED|e.EnumBarcodeFormat.BF_QR_CODE|e.EnumBarcodeFormat.BF_PDF417|e.EnumBarcodeFormat.BF_DATAMATRIX))||0!=i.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=i.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=i.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,i.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(i.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(i=>{if(i.success){try{this._handleRetJsonString(i.updateReturn)}catch(e){t(e)}return e()}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(i)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettings",id:i,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:i,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!P._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:i,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!P._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,i)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){i(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){P._onLog&&P._onLog("_decode_Blob(blob: Blob)");let i=null,r=null;if("undefined"!=typeof createImageBitmap)try{i=await createImageBitmap(e)}catch(e){}i||(r=await function(e){return new Promise(((t,i)=>{let r=URL.createObjectURL(e),n=new Image;n.dbrObjUrl=r,n.src=r,n.onload=()=>{t(n)},n.onerror=e=>{i(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let n=await this._decode_Image(i||r,t);return i&&i.close(),n}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){P._onLog&&P._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let i,r,n=e instanceof HTMLImageElement?e.naturalWidth:e.width,s=e instanceof HTMLImageElement?e.naturalHeight:e.height,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let l=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(l,0,0,n,s,i,r),l}async _decode_Canvas(t,i){if(P._onLog&&P._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";if(0===t.width||0===t.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=t,this.oriCanvasData=null);let r=(t.ctx2d||t.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,t.width,t.height).data;return await this._decodeBuffer_Uint8Array(r,t.width,t.height,4*t.width,e.EnumImagePixelFormat.IPF_ABGR_8888,0,i)}async _decode_Video(e,t){if(P._onLog&&P._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let i,r,n=e.videoWidth,s=e.videoHeight,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r);let l=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(l,0,0,n,s,i,r),l}async _decode_DCEFrame(t,i){if(P._onLog&&P._onLog("_decode_DCEFrame(dceFrame)"),!P.isDCEFrame(t))return[];let r=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,colorMode:t.colorMode,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{width:n,height:s,colorMode:o,pixelFormat:a,stride:l,timeStamp:h}=t;let c;c=i&&i.bCopyData?new Uint8Array(t.data):t.data;let u=null;if(i?(u=JSON.parse(JSON.stringify(i)),u.timeStamp=h):u={timeStamp:h},a&&l)if("grey"===a)r=await this._decodeBuffer_Uint8Array(c,n,s,l,e.EnumImagePixelFormat.IPF_GrayScaled,0,u);else if("rgba"===a)r=await this._decodeBuffer_Uint8Array(c,n,s,l,e.EnumImagePixelFormat.IPF_ABGR_8888,0,u);else{if("bgra"!==a)throw new Error(`Pixel format '${a}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(c,n,s,l,e.EnumImagePixelFormat.IPF_ARGB_8888,0,u)}else if("grey"===o)r=await this._decodeBuffer_Uint8Array(c,n,s,n,e.EnumImagePixelFormat.IPF_GrayScaled,0,u);else if("rgba"===o)r=await this._decodeBuffer_Uint8Array(c,n,s,4*n,e.EnumImagePixelFormat.IPF_ABGR_8888,0,u);else{if("bgra"!==o)throw new Error(`Color mode '${o}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(c,n,s,4*n,e.EnumImagePixelFormat.IPF_ARGB_8888,0,u)}return r}async _decode_DSImage(t,i){if(P._onLog&&P._onLog("_decode_DSImage(dsImage)"),!P.isDSImage(t))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat.toLowerCase(),data:new Uint8Array(t.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{i(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(i,t)}}async _decode_FilePath(e,t){throw P._onLog&&P._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,i,r,n,s,o){if(e.length>0)for(let a of e){let e=a.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*s,e.x2*=.01*s,e.x3*=.01*s,e.x4*=.01*s,e.y1*=.01*o,e.y2*=.01*o,e.y3*=.01*o,e.y4*=.01*o);let l=s/r,h=o/n;e.x1=e.x1/l+t,e.x2=e.x2/l+t,e.x3=e.x3/l+t,e.x4=e.x4/l+t,e.y1=e.y1/h+i,e.y2=e.y2/h+i,e.y3=e.y3/h+i,e.y4=e.y4/h+i,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/n,e.y2*=100/n,e.y3*=100/n,e.y4*=100/n),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(t,i){let r,n=e.EnumErrorCode.DBR_UNKNOWN;return"number"==typeof t?(n=t,r=new Error(i)):r=new Error(t),r.code=n,r}_handleRetJsonString(t){let i=e.EnumErrorCode;if(t.textResults){for(let e=0;e{let i=t.indexOf(":");e[t.substring(0,i)]=t.substring(i+1)})),i.exception=e}}return t.decodeRecords?this.decodeRecords=t.decodeRecords:this.decodeRecords={},this._lastErrorCode=t.exception,this._lastErrorString=t.description,t.exception&&!P._setWarnnedEx.has(t.description)&&(P._setWarnnedEx.add(t.description),console.warn(t.description)),t.textResults}if(t.exception==i.DBR_SUCCESS)return t.data;throw P.BarcodeReaderException(t.exception,t.description)}async setModeArgument(e,t,i,r){return await new Promise(((n,s)=>{let o=P._nextTaskID++;P._taskCallbackMap.set(o,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return s(e)}return n()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),P._dbrWorker.postMessage({type:"setModeArgument",id:o,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i,argumentValue:r}})}))}async getModeArgument(e,t,i){return await new Promise(((r,n)=>{let s=P._nextTaskID++;P._taskCallbackMap.set(s,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return n(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"getModeArgument",id:s,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let t=await this.getIntermediateResults(),i=[];for(let r of t)if(r.dataType==e.EnumIMResultDataType.IMRDT_IMAGE)for(let t of r.results){const r=t.bytes;let n;switch(P._onLog&&P._onLog(" "+r.length+" "+r.byteLength+" "+t.width+" "+t.height+" "+t.stride+" "+t.format),t.format){case e.EnumImagePixelFormat.IPF_ABGR_8888:n=new Uint8ClampedArray(r);break;case e.EnumImagePixelFormat.IPF_RGB_888:{const e=r.length/3;n=new Uint8ClampedArray(4*e);for(let t=0;t=i)break;n[o]=n[o+1]=n[o+2]=(128&e)/128*255,n[o+3]=255,e<<=1}}break}default:console.warn("unknow intermediate image",t)}if(!n)continue;let s=new ImageData(n,t.width,t.height),o=document.createElement("canvas");o.width=t.width,o.height=t.height,o.getContext("2d").putImageData(s,0,0),i.push(o)}return i}async getScanSettings(){return await new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success){let t=i.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(i.message);return e.stack+="\n"+i.stack,t(e)}})),P._dbrWorker.postMessage({type:"getScanSettings",id:i,instanceID:this._instanceID})}))}async updateScanSettings(t){if(!t)return;const i=JSON.parse(JSON.stringify(t));if(i.autoZoom||i.autoFocus||i.autoSuggestTip){if(!P._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const t=await this.getRuntimeSettings();t.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(t)}return i.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(i.intervalTime,0),delete i.intervalTime),i.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=i.whenToPlaySoundforSuccessfulRead,delete i.whenToPlaySoundforSuccessfulRead),i.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=i.soundOnSuccessfullRead,delete i.soundOnSuccessfullRead),i.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=i.whenToVibrateforSuccessfulRead,delete i.whenToVibrateforSuccessfulRead),i.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=i.vibrateDuration,delete i.vibrateDuration),i.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=i.captureAndDecodeInParallel,delete i.captureAndDecodeInParallel),i.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=i.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=i.autoZoom,delete i.autoZoom),i.hasOwnProperty("autoFocus")&&(this.autoFocus=i.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete i.autoFocus),i.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=i.autoSuggestTip,delete i.autoFocus),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack+="\n"+i.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:i}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let i of e)t.push(this._cloneDecodeResults(i));return t}{let t=e,i=JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)));return i}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return P._onLog&&P._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));P._onLog&&P._onLog("======= once read ======="),P._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!P.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return P._onLog&&P._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let i=[];if(e){i=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(i&&i.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:l}=e;t=i.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(t,r,n,a,l,s,o)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(i=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return i})().then((e=>{if(P._onLog&&P._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const i=()=>{let i=0;if(t&&t.length){let r=Math.min(...e),n=Math.max(...t);r&&n&&(i=r-n)}else i=0;return i>0?i:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=i()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),P._onLog&&P._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(P._onLog&&P._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};t(e)}else P._onLog&&P._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const i=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let n=0;n{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(P._onLog&&P._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=P._nextTaskID++;P._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),P._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}P._jsVersion="9.6.32",P._jsEditVersion="20231027",P._version=`loading...(JS ${P._jsVersion}.${P._jsEditVersion})`,P._license=g,P._sessionPassword=_,P.browserInfo=a,P._workerName=`dbr-${P._jsVersion}.browser.worker.js`,P._engineResourcePath=d,P._licenseServer=[],P._deviceFriendlyName="",P._isShowRelDecodeTimeInResults=!1,P._bWasmDebug=!1,P._bNeverShowDialog=!1,P.__bUseFullFeature=!0,P._nextTaskID=0,P._taskCallbackMap=new Map,P._pLoad=new C,P._lastErrorCode=0,P._lastErrorString="",P._setWarnnedEx=new Set,P._defaultUIElementURL="@engineResourcePath/dbr.ui.html";var k={653:(e,t,i)=>{var r,n,s,o,a,l,h,c,u,d,f,g,_,p,m,v,y,S,b,w,C,x=x||{version:"5.2.1"};if(t.fabric=x,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?x.document=document:x.document=document.implementation.createHTMLDocument(""),x.window=window;else{var T=new(i(192).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;x.document=T.document,x.jsdomImplForWrapper=i(898).implForWrapper,x.nodeCanvas=i(245).Canvas,x.window=T,DOMParser=x.window.DOMParser}function E(e,t){var i=e.canvas,r=t.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function I(e,t){var i=t.targetCanvas.getContext("2d"),r=t.destinationWidth,n=t.destinationHeight,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);e.readPixels(0,0,r,n,e.RGBA,e.UNSIGNED_BYTE,o);var l=new ImageData(a,r,n);i.putImageData(l,0,0)}x.isTouchSupported="ontouchstart"in x.window||"ontouchstart"in x.document||x.window&&x.window.navigator&&x.window.navigator.maxTouchPoints>0,x.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,x.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],x.DPI=96,x.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",x.commaWsp="(?:\\s+,?\\s*|,\\s*)",x.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,x.reNonWord=/[ \n\.,;!\?\-]/,x.fontPaths={},x.iMatrix=[1,0,0,1,0,0],x.svgNS="http://www.w3.org/2000/svg",x.perfLimitSizeTotal=2097152,x.maxCacheSideLimit=4096,x.minCacheSideLimit=256,x.charWidthsCache={},x.textureSize=2048,x.disableStyleCopyPaste=!1,x.enableGLFiltering=!0,x.devicePixelRatio=x.window.devicePixelRatio||x.window.webkitDevicePixelRatio||x.window.mozDevicePixelRatio||1,x.browserShadowBlurConstant=1,x.arcToSegmentsCache={},x.boundsOfCurveCache={},x.cachesBoundsOfCurve=!0,x.forceGLPutImageData=!1,x.initFilterBackend=function(){return x.enableGLFiltering&&x.isWebglSupported&&x.isWebglSupported(x.textureSize)?(console.log("max texture size: "+x.maxTextureSize),new x.WebglFilterBackend({tileSize:x.textureSize})):x.Canvas2dFilterBackend?new x.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=x),function(){function e(e,t){if(this.__eventListeners[e]){var i=this.__eventListeners[e];t?i[i.indexOf(t)]=!1:x.util.array.fill(i,!1)}}function t(e,t){var i=function(){t.apply(this,arguments),this.off(e,i)}.bind(this);this.on(e,i)}x.Observable={fire:function(e,t){if(!this.__eventListeners)return this;var i=this.__eventListeners[e];if(!i)return this;for(var r=0,n=i.length;r-1||!!t&&this._objects.some((function(t){return"function"==typeof t.contains&&t.contains(e,!0)}))},complexity:function(){return this._objects.reduce((function(e,t){return e+(t.complexity?t.complexity():0)}),0)}},x.CommonMethods={_setOptions:function(e){for(var t in e)this.set(t,e[t])},_initGradient:function(e,t){!e||!e.colorStops||e instanceof x.Gradient||this.set(t,new x.Gradient(e))},_initPattern:function(e,t,i){!e||!e.source||e instanceof x.Pattern?i&&i():this.set(t,new x.Pattern(e,i))},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return"object"==typeof e?this._setObject(e):this._set(e,t),this},_set:function(e,t){this[e]=t},toggle:function(e){var t=this.get(e);return"boolean"==typeof t&&this.set(e,!t),this},get:function(e){return this[e]}},r=t,n=Math.sqrt,s=Math.atan2,o=Math.pow,a=Math.PI/180,l=Math.PI/2,x.util={cos:function(e){if(0===e)return 1;switch(e<0&&(e=-e),e/l){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(0===e)return 0;var t=1;switch(e<0&&(t=-1),e/l){case 1:return t;case 2:return 0;case 3:return-t}return Math.sin(e)},removeFromArray:function(e,t){var i=e.indexOf(t);return-1!==i&&e.splice(i,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*a},radiansToDegrees:function(e){return e/a},rotatePoint:function(e,t,i){var r=new x.Point(e.x-t.x,e.y-t.y),n=x.util.rotateVector(r,i);return new x.Point(n.x,n.y).addEquals(t)},rotateVector:function(e,t){var i=x.util.sin(t),r=x.util.cos(t);return{x:e.x*r-e.y*i,y:e.x*i+e.y*r}},createVector:function(e,t){return new x.Point(t.x-e.x,t.y-e.y)},calcAngleBetweenVectors:function(e,t){return Math.acos((e.x*t.x+e.y*t.y)/(Math.hypot(e.x,e.y)*Math.hypot(t.x,t.y)))},getHatVector:function(e){return new x.Point(e.x,e.y).multiply(1/Math.hypot(e.x,e.y))},getBisector:function(e,t,i){var r=x.util.createVector(e,t),n=x.util.createVector(e,i),s=x.util.calcAngleBetweenVectors(r,n),o=s*(0===x.util.calcAngleBetweenVectors(x.util.rotateVector(r,s),n)?1:-1)/2;return{vector:x.util.getHatVector(x.util.rotateVector(r,o)),angle:s}},projectStrokeOnPoints:function(e,t,i){var r=[],n=t.strokeWidth/2,s=t.strokeUniform?new x.Point(1/t.scaleX,1/t.scaleY):new x.Point(1,1),o=function(e){var t=n/Math.hypot(e.x,e.y);return new x.Point(e.x*t*s.x,e.y*t*s.y)};return e.length<=1||e.forEach((function(a,l){var h,c,u=new x.Point(a.x,a.y);0===l?(c=e[l+1],h=i?o(x.util.createVector(c,u)).addEquals(u):e[e.length-1]):l===e.length-1?(h=e[l-1],c=i?o(x.util.createVector(h,u)).addEquals(u):e[0]):(h=e[l-1],c=e[l+1]);var d,f,g=x.util.getBisector(u,h,c),_=g.vector,p=g.angle;if("miter"===t.strokeLineJoin&&(d=-n/Math.sin(p/2),f=new x.Point(_.x*d*s.x,_.y*d*s.y),Math.hypot(f.x,f.y)/n<=t.strokeMiterLimit))return r.push(u.add(f)),void r.push(u.subtract(f));d=-n*Math.SQRT2,f=new x.Point(_.x*d*s.x,_.y*d*s.y),r.push(u.add(f)),r.push(u.subtract(f))})),r},transformPoint:function(e,t,i){return i?new x.Point(t[0]*e.x+t[2]*e.y,t[1]*e.x+t[3]*e.y):new x.Point(t[0]*e.x+t[2]*e.y+t[4],t[1]*e.x+t[3]*e.y+t[5])},makeBoundingBoxFromPoints:function(e,t){if(t)for(var i=0;i0&&(t>r?t-=r:t=0,i>r?i-=r:i=0);var n,s=!0,o=e.getImageData(t,i,2*r||1,2*r||1),a=o.data.length;for(n=3;n=n?s-n:2*Math.PI-(n-s)}function s(e,t,i){for(var s=i[1],o=i[2],a=i[3],l=i[4],h=i[5],c=function(e,t,i,s,o,a,l){var h=Math.PI,c=l*h/180,u=x.util.sin(c),d=x.util.cos(c),f=0,g=0,_=-d*e*.5-u*t*.5,p=-d*t*.5+u*e*.5,m=(i=Math.abs(i))*i,v=(s=Math.abs(s))*s,y=p*p,S=_*_,b=m*v-m*y-v*S,w=0;if(b<0){var C=Math.sqrt(1-b/(m*v));i*=C,s*=C}else w=(o===a?-1:1)*Math.sqrt(b/(m*y+v*S));var T=w*i*p/s,E=-w*s*_/i,I=d*T-u*E+.5*e,O=u*T+d*E+.5*t,A=n(1,0,(_-T)/i,(p-E)/s),R=n((_-T)/i,(p-E)/s,(-_-T)/i,(-p-E)/s);0===a&&R>0?R-=2*h:1===a&&R<0&&(R+=2*h);for(var D=Math.ceil(Math.abs(R/h*2)),M=[],F=R/D,L=8/3*Math.sin(F/4)*Math.sin(F/4)/Math.sin(F/2),P=A+F,k=0;kw)for(var T=1,E=_.length;T2;for(t=t||0,h&&(a=e[2].xe[i-2].x?1:n.x===e[i-2].x?0:-1,l=n.y>e[i-2].y?1:n.y===e[i-2].y?0:-1),r.push(["L",n.x+a*t,n.y+l*t]),r},x.util.getPathSegmentsInfo=d,x.util.getBoundsOfCurve=function(t,i,r,n,s,o,a,l){var h;if(x.cachesBoundsOfCurve&&(h=e.call(arguments),x.boundsOfCurveCache[h]))return x.boundsOfCurveCache[h];var c,u,d,f,g,_,p,m,v=Math.sqrt,y=Math.min,S=Math.max,b=Math.abs,w=[],C=[[],[]];u=6*t-12*r+6*s,c=-3*t+9*r-9*s+3*a,d=3*r-3*t;for(var T=0;T<2;++T)if(T>0&&(u=6*i-12*n+6*o,c=-3*i+9*n-9*o+3*l,d=3*n-3*i),b(c)<1e-12){if(b(u)<1e-12)continue;0<(f=-d/u)&&f<1&&w.push(f)}else(p=u*u-4*d*c)<0||(0<(g=(-u+(m=v(p)))/(2*c))&&g<1&&w.push(g),0<(_=(-u-m)/(2*c))&&_<1&&w.push(_));for(var E,I,O,A=w.length,R=A;A--;)E=(O=1-(f=w[A]))*O*O*t+3*O*O*f*r+3*O*f*f*s+f*f*f*a,C[0][A]=E,I=O*O*O*i+3*O*O*f*n+3*O*f*f*o+f*f*f*l,C[1][A]=I;C[0][R]=t,C[1][R]=i,C[0][R+1]=a,C[1][R+1]=l;var D=[{x:y.apply(null,C[0]),y:y.apply(null,C[1])},{x:S.apply(null,C[0]),y:S.apply(null,C[1])}];return x.cachesBoundsOfCurve&&(x.boundsOfCurveCache[h]=D),D},x.util.getPointOnPath=function(e,t,i){i||(i=d(e));for(var r=0;t-i[r].length>0&&r1e-4;)i=l(s),n=s,(r=o(h.x,h.y,i.x,i.y))+a>t?(s-=c,c/=2):(h=i,s+=c,a+=r);return i.angle=u(n),i}(s,t)}},x.util.transformPath=function(e,t,i){return i&&(t=x.util.multiplyTransformMatrices(t,[1,0,0,1,-i.x,-i.y])),e.map((function(e){for(var i=e.slice(0),r={},n=1;n=t}))}}}(),function(){function e(t,i,r){if(r)if(!x.isLikelyNode&&i instanceof Element)t=i;else if(i instanceof Array){t=[];for(var n=0,s=i.length;n57343)return e.charAt(t);if(55296<=i&&i<=56319){if(e.length<=t+1)throw"High surrogate without following low surrogate";var r=e.charCodeAt(t+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return e.charAt(t)+e.charAt(t+1)}if(0===t)throw"Low surrogate without preceding high surrogate";var n=e.charCodeAt(t-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}x.util.string={camelize:function(e){return e.replace(/-+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))},capitalize:function(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1).toLowerCase())},escapeXml:function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(t){var i,r=0,n=[];for(r=0;r-1?e.prototype[n]=function(e){return function(){var i=this.constructor.superclass;this.constructor.superclass=r;var n=t[e].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==e)return n}}(n):e.prototype[n]=t[n],i&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};function n(){}function s(t){for(var i=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[t];if(r[t]!==n){i=n;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,e.call(arguments,1)):i.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}x.util.createClass=function(){var i=null,o=e.call(arguments,0);function a(){this.initialize.apply(this,arguments)}"function"==typeof o[0]&&(i=o.shift()),a.superclass=i,a.subclasses=[],i&&(n.prototype=i.prototype,a.prototype=new n,i.subclasses.push(a));for(var l=0,h=o.length;l-1||"touch"===e.pointerType},d="string"==typeof(u=x.document.createElement("div")).style.opacity,f="string"==typeof u.style.filter,g=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,_=function(e){return e},d?_=function(e,t){return e.style.opacity=t,e}:f&&(_=function(e,t){var i=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(i.zoom=1),g.test(i.filter)?(t=t>=.9999?"":"alpha(opacity="+100*t+")",i.filter=i.filter.replace(g,t)):i.filter+=" alpha(opacity="+100*t+")",e}),x.util.setStyle=function(e,t){var i=e.style;if(!i)return e;if("string"==typeof t)return e.style.cssText+=";"+t,t.indexOf("opacity")>-1?_(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)"opacity"===r?_(e,t[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=t[r];return e},function(){var e,t,i,r,n=Array.prototype.slice,s=function(e){return n.call(e,0)};try{e=s(x.document.childNodes)instanceof Array}catch(e){}function o(e,t){var i=x.document.createElement(e);for(var r in t)"class"===r?i.className=t[r]:"for"===r?i.htmlFor=t[r]:i.setAttribute(r,t[r]);return i}function a(e){for(var t=0,i=0,r=x.document.documentElement,n=x.document.body||{scrollLeft:0,scrollTop:0};e&&(e.parentNode||e.host)&&((e=e.parentNode||e.host)===x.document?(t=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(t+=e.scrollLeft||0,i+=e.scrollTop||0),1!==e.nodeType||"fixed"!==e.style.position););return{left:t,top:i}}e||(s=function(e){for(var t=new Array(e.length),i=e.length;i--;)t[i]=e[i];return t}),t=x.document.defaultView&&x.document.defaultView.getComputedStyle?function(e,t){var i=x.document.defaultView.getComputedStyle(e,null);return i?i[t]:void 0}:function(e,t){var i=e.style[t];return!i&&e.currentStyle&&(i=e.currentStyle[t]),i},i=x.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"",x.util.makeElementUnselectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=x.util.falseFunction),r?e.style[r]="none":"string"==typeof e.unselectable&&(e.unselectable="on"),e},x.util.makeElementSelectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=null),r?e.style[r]="":"string"==typeof e.unselectable&&(e.unselectable=""),e},x.util.setImageSmoothing=function(e,t){e.imageSmoothingEnabled=e.imageSmoothingEnabled||e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled||e.oImageSmoothingEnabled,e.imageSmoothingEnabled=t},x.util.getById=function(e){return"string"==typeof e?x.document.getElementById(e):e},x.util.toArray=s,x.util.addClass=function(e,t){e&&-1===(" "+e.className+" ").indexOf(" "+t+" ")&&(e.className+=(e.className?" ":"")+t)},x.util.makeElement=o,x.util.wrapElement=function(e,t,i){return"string"==typeof t&&(t=o(t,i)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t},x.util.getScrollLeftTop=a,x.util.getElementOffset=function(e){var i,r,n=e&&e.ownerDocument,s={left:0,top:0},o={left:0,top:0},l={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var h in l)o[l[h]]+=parseInt(t(e,h),10)||0;return i=n.documentElement,void 0!==e.getBoundingClientRect&&(s=e.getBoundingClientRect()),r=a(e),{left:s.left+r.left-(i.clientLeft||0)+o.left,top:s.top+r.top-(i.clientTop||0)+o.top}},x.util.getNodeCanvas=function(e){var t=x.jsdomImplForWrapper(e);return t._canvas||t._image},x.util.cleanUpJsdomNode=function(e){if(x.isLikelyNode){var t=x.jsdomImplForWrapper(e);t&&(t._image=null,t._canvas=null,t._currentSrc=null,t._attributes=null,t._classList=null)}}}(),function(){function e(){}x.util.request=function(t,i){i||(i={});var r=i.method?i.method.toUpperCase():"GET",n=i.onComplete||function(){},s=new x.window.XMLHttpRequest,o=i.body||i.parameters;return s.onreadystatechange=function(){4===s.readyState&&(n(s),s.onreadystatechange=e)},"GET"===r&&(o=null,"string"==typeof i.parameters&&(t=function(e,t){return e+(/\?/.test(e)?"&":"?")+t}(t,i.parameters))),s.open(r,t,!0),"POST"!==r&&"PUT"!==r||s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(o),s}}(),x.log=console.log,x.warn=console.warn,function(){var e=x.util.object.extend,t=x.util.object.clone,i=[];function r(){return!1}function n(e,t,i,r){return-i*Math.cos(e/r*(Math.PI/2))+i+t}x.util.object.extend(i,{cancelAll:function(){var e=this.splice(0);return e.forEach((function(e){e.cancel()})),e},cancelByCanvas:function(e){if(!e)return[];var t=this.filter((function(t){return"object"==typeof t.target&&t.target.canvas===e}));return t.forEach((function(e){e.cancel()})),t},cancelByTarget:function(e){var t=this.findAnimationsByTarget(e);return t.forEach((function(e){e.cancel()})),t},findAnimationIndex:function(e){return this.indexOf(this.findAnimation(e))},findAnimation:function(e){return this.find((function(t){return t.cancel===e}))},findAnimationsByTarget:function(e){return e?this.filter((function(t){return t.target===e})):[]}});var s=x.window.requestAnimationFrame||x.window.webkitRequestAnimationFrame||x.window.mozRequestAnimationFrame||x.window.oRequestAnimationFrame||x.window.msRequestAnimationFrame||function(e){return x.window.setTimeout(e,1e3/60)},o=x.window.cancelAnimationFrame||x.window.clearTimeout;function a(){return s.apply(x.window,arguments)}x.util.animate=function(i){i||(i={});var s,o=!1,l=function(){var e=x.runningAnimations.indexOf(s);return e>-1&&x.runningAnimations.splice(e,1)[0]};return s=e(t(i),{cancel:function(){return o=!0,l()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),x.runningAnimations.push(s),a((function(e){var t,h=e||+new Date,c=i.duration||500,u=h+c,d=i.onChange||r,f=i.abort||r,g=i.onComplete||r,_=i.easing||n,p="startValue"in i&&i.startValue.length>0,m="startValue"in i?i.startValue:0,v="endValue"in i?i.endValue:100,y=i.byValue||(p?m.map((function(e,t){return v[t]-m[t]})):v-m);i.onStart&&i.onStart(),function e(i){var r=(t=i||+new Date)>u?c:t-h,n=r/c,S=p?m.map((function(e,t){return _(r,m[t],y[t],c)})):_(r,m,y,c),b=p?Math.abs((S[0]-m[0])/y[0]):Math.abs((S-m)/y);if(s.currentValue=p?S.slice():S,s.completionRate=b,s.durationRate=n,!o){if(!f(S,b,n))return t>u?(s.currentValue=p?v.slice():v,s.completionRate=1,s.durationRate=1,d(p?v.slice():v,1,1),g(v,1,1),void l()):(d(S,b,n),void a(e));l()}}(h)})),s.cancel},x.util.requestAnimFrame=a,x.util.cancelAnimFrame=function(){return o.apply(x.window,arguments)},x.runningAnimations=i}(),function(){function e(e,t,i){var r="rgba("+parseInt(e[0]+i*(t[0]-e[0]),10)+","+parseInt(e[1]+i*(t[1]-e[1]),10)+","+parseInt(e[2]+i*(t[2]-e[2]),10);return(r+=","+(e&&t?parseFloat(e[3]+i*(t[3]-e[3])):1))+")"}x.util.animateColor=function(t,i,r,n){var s=new x.Color(t).getSource(),o=new x.Color(i).getSource(),a=n.onComplete,l=n.onChange;return n=n||{},x.util.animate(x.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(t,i,r,s){return e(i,r,n.colorEasing?n.colorEasing(t,s):1-Math.cos(t/s*(Math.PI/2)))},onComplete:function(t,i,r){if(a)return a(e(o,o,0),i,r)},onChange:function(t,i,r){if(l){if(Array.isArray(t))return l(e(t,t,0),i,r);l(t,i,r)}}}))}}(),function(){function e(e,t,i,r){return e-1&&c>-1&&c-1)&&(i="stroke")}else{if("href"===e||"xlink:href"===e||"font"===e)return i;if("imageSmoothing"===e)return"optimizeQuality"===i;a=l?i.map(s):s(i,n)}}else i="";return!l&&isNaN(a)?i:a}function f(e){return new RegExp("^("+e.join("|")+")\\b","i")}function g(e,t){var i,r,n,s,o=[];for(n=0,s=t.length;n1;)l.shift(),h=t.util.multiplyTransformMatrices(h,l[0]);return h}}();var v=new RegExp("^\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*$");function y(e){if(!t.svgViewBoxElementsRegEx.test(e.nodeName))return{};var i,r,n,o,a,l,h=e.getAttribute("viewBox"),c=1,u=1,d=e.getAttribute("width"),f=e.getAttribute("height"),g=e.getAttribute("x")||0,_=e.getAttribute("y")||0,p=e.getAttribute("preserveAspectRatio")||"",m=!h||!(h=h.match(v)),y=!d||!f||"100%"===d||"100%"===f,S=m&&y,b={},w="",C=0,x=0;if(b.width=0,b.height=0,b.toBeParsed=S,m&&(g||_)&&e.parentNode&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") ",a=(e.getAttribute("transform")||"")+w,e.setAttribute("transform",a),e.removeAttribute("x"),e.removeAttribute("y")),S)return b;if(m)return b.width=s(d),b.height=s(f),b;if(i=-parseFloat(h[1]),r=-parseFloat(h[2]),n=parseFloat(h[3]),o=parseFloat(h[4]),b.minX=i,b.minY=r,b.viewBoxWidth=n,b.viewBoxHeight=o,y?(b.width=n,b.height=o):(b.width=s(d),b.height=s(f),c=b.width/n,u=b.height/o),"none"!==(p=t.util.parsePreserveAspectRatioAttribute(p)).alignX&&("meet"===p.meetOrSlice&&(u=c=c>u?u:c),"slice"===p.meetOrSlice&&(u=c=c>u?c:u),C=b.width-n*c,x=b.height-o*c,"Mid"===p.alignX&&(C/=2),"Mid"===p.alignY&&(x/=2),"Min"===p.alignX&&(C=0),"Min"===p.alignY&&(x=0)),1===c&&1===u&&0===i&&0===r&&0===g&&0===_)return b;if((g||_)&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") "),a=w+" matrix("+c+" 0 0 "+u+" "+(i*c+C)+" "+(r*u+x)+") ","svg"===e.nodeName){for(l=e.ownerDocument.createElementNS(t.svgNS,"g");e.firstChild;)l.appendChild(e.firstChild);e.appendChild(l)}else(l=e).removeAttribute("x"),l.removeAttribute("y"),a=l.getAttribute("transform")+a;return l.setAttribute("transform",a),b}function S(e,t){var i="xlink:href",r=m(e,t.getAttribute(i).slice(1));if(r&&r.getAttribute(i)&&S(e,r),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach((function(e){r&&!t.hasAttribute(e)&&r.hasAttribute(e)&&t.setAttribute(e,r.getAttribute(e))})),!t.children.length)for(var n=r.cloneNode(!0);n.firstChild;)t.appendChild(n.firstChild);t.removeAttribute(i)}t.parseSVGDocument=function(e,i,n,s){if(e){!function(e){for(var i=g(e,["use","svg:use"]),r=0;i.length&&re.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return void 0===t&&(t=.5),t=Math.max(Math.min(1,t),0),new i(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,i=this.y-e.y;return Math.sqrt(t*t+i*i)},midPointFrom:function(e){return this.lerp(e)},min:function(e){return new i(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new i(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){return this.x=e,this.y=t,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setFromPoint:function(e){return this.x=e.x,this.y=e.y,this},swap:function(e){var t=this.x,i=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=i},clone:function(){return new i(this.x,this.y)}})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){this.status=e,this.points=[]}t.Intersection?t.warn("fabric.Intersection is already defined"):(t.Intersection=i,t.Intersection.prototype={constructor:i,appendPoint:function(e){return this.points.push(e),this},appendPoints:function(e){return this.points=this.points.concat(e),this}},t.Intersection.intersectLineLine=function(e,r,n,s){var o,a=(s.x-n.x)*(e.y-n.y)-(s.y-n.y)*(e.x-n.x),l=(r.x-e.x)*(e.y-n.y)-(r.y-e.y)*(e.x-n.x),h=(s.y-n.y)*(r.x-e.x)-(s.x-n.x)*(r.y-e.y);if(0!==h){var c=a/h,u=l/h;0<=c&&c<=1&&0<=u&&u<=1?(o=new i("Intersection")).appendPoint(new t.Point(e.x+c*(r.x-e.x),e.y+c*(r.y-e.y))):o=new i}else o=new i(0===a||0===l?"Coincident":"Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var n,s,o,a,l=new i,h=r.length;for(a=0;a0&&(l.status="Intersection"),l},t.Intersection.intersectPolygonPolygon=function(e,t){var r,n=new i,s=e.length;for(r=0;r0&&(n.status="Intersection"),n},t.Intersection.intersectPolygonRectangle=function(e,r,n){var s=r.min(n),o=r.max(n),a=new t.Point(o.x,s.y),l=new t.Point(s.x,o.y),h=i.intersectLinePolygon(s,a,e),c=i.intersectLinePolygon(a,o,e),u=i.intersectLinePolygon(o,l,e),d=i.intersectLinePolygon(l,s,e),f=new i;return f.appendPoints(h.points),f.appendPoints(c.points),f.appendPoints(u.points),f.appendPoints(d.points),f.points.length>0&&(f.status="Intersection"),f})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}t.Color?t.warn("fabric.Color is already defined."):(t.Color=i,t.Color.prototype={_tryParsingColor:function(e){var t;e in i.colorNameMap&&(e=i.colorNameMap[e]),"transparent"===e&&(t=[255,255,255,0]),t||(t=i.sourceFromHex(e)),t||(t=i.sourceFromRgb(e)),t||(t=i.sourceFromHsl(e)),t||(t=[0,0,0,1]),t&&this.setSource(t)},_rgbToHsl:function(e,i,r){e/=255,i/=255,r/=255;var n,s,o,a=t.util.array.max([e,i,r]),l=t.util.array.min([e,i,r]);if(o=(a+l)/2,a===l)n=s=0;else{var h=a-l;switch(s=o>.5?h/(2-a-l):h/(a+l),a){case e:n=(i-r)/h+(i0)-(e<0)||+e};function f(e,t){var i=e.angle+u(Math.atan2(t.y,t.x))+360;return Math.round(i%360/45)}function g(e,i){var r=i.transform.target,n=r.canvas,s=t.util.object.clone(i);s.target=r,n&&n.fire("object:"+e,s),r.fire(e,i)}function _(e,t){var i=t.canvas,r=e[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function p(e){return e.originX===h&&e.originY===h}function m(e,t,i){var r=e.lockScalingX,n=e.lockScalingY;return!((!r||!n)&&(t||!r&&!n||!i)&&(!r||"x"!==t)&&(!n||"y"!==t))}function v(e,t,i,r){return{e,transform:t,pointer:{x:i,y:r}}}function y(e){return function(t,i,r,n){var s=i.target,o=s.getCenterPoint(),a=s.translateToOriginPoint(o,i.originX,i.originY),l=e(t,i,r,n);return s.setPositionByOrigin(a,i.originX,i.originY),l}}function S(e,t){return function(i,r,n,s){var o=t(i,r,n,s);return o&&g(e,v(i,r,n,s)),o}}function b(e,i,r,n,s){var o=e.target,a=o.controls[e.corner],l=o.canvas.getZoom(),h=o.padding/l,c=o.toLocalPoint(new t.Point(n,s),i,r);return c.x>=h&&(c.x-=h),c.x<=-h&&(c.x+=h),c.y>=h&&(c.y-=h),c.y<=h&&(c.y+=h),c.x-=a.offsetX,c.y-=a.offsetY,c}function w(e){return e.flipX!==e.flipY}function C(e,t,i,r,n){if(0!==e[t]){var s=n/e._getTransformedDimensions()[r]*e[i];e.set(i,s)}}function x(e,t,i,r){var n,h=t.target,c=h._getTransformedDimensions(0,h.skewY),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.x)-c.x,g=h.skewX;f<2?n=0:(n=u(Math.atan2(f/h.scaleX,c.y/h.scaleY)),t.originX===s&&t.originY===l&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(h)&&(n=-n));var _=g!==n;if(_){var p=h._getTransformedDimensions().y;h.set("skewX",n),C(h,"skewY","scaleY","y",p)}return _}function T(e,t,i,r){var n,h=t.target,c=h._getTransformedDimensions(h.skewX,0),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.y)-c.y,g=h.skewY;f<2?n=0:(n=u(Math.atan2(f/h.scaleY,c.x/h.scaleX)),t.originX===s&&t.originY===l&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(h)&&(n=-n));var _=g!==n;if(_){var p=h._getTransformedDimensions().x;h.set("skewY",n),C(h,"skewX","scaleX","x",p)}return _}function E(e,t,i,r,n){n=n||{};var s,o,a,l,h,u,f=t.target,g=f.lockScalingX,v=f.lockScalingY,y=n.by,S=_(e,f),w=m(f,y,S),C=t.gestureScale;if(w)return!1;if(C)o=t.scaleX*C,a=t.scaleY*C;else{if(s=b(t,t.originX,t.originY,i,r),h="y"!==y?d(s.x):1,u="x"!==y?d(s.y):1,t.signX||(t.signX=h),t.signY||(t.signY=u),f.lockScalingFlip&&(t.signX!==h||t.signY!==u))return!1;if(l=f._getTransformedDimensions(),S&&!y){var x=Math.abs(s.x)+Math.abs(s.y),T=t.original,E=x/(Math.abs(l.x*T.scaleX/f.scaleX)+Math.abs(l.y*T.scaleY/f.scaleY));o=T.scaleX*E,a=T.scaleY*E}else o=Math.abs(s.x*f.scaleX/l.x),a=Math.abs(s.y*f.scaleY/l.y);p(t)&&(o*=2,a*=2),t.signX!==h&&"y"!==y&&(t.originX=c[t.originX],o*=-1,t.signX=h),t.signY!==u&&"x"!==y&&(t.originY=c[t.originY],a*=-1,t.signY=u)}var I=f.scaleX,O=f.scaleY;return y?("x"===y&&f.set("scaleX",o),"y"===y&&f.set("scaleY",a)):(!g&&f.set("scaleX",o),!v&&f.set("scaleY",a)),I!==f.scaleX||O!==f.scaleY}n.scaleCursorStyleHandler=function(e,t,r){var n=_(e,r),s="";if(0!==t.x&&0===t.y?s="x":0===t.x&&0!==t.y&&(s="y"),m(r,s,n))return"not-allowed";var o=f(r,t);return i[o]+"-resize"},n.skewCursorStyleHandler=function(e,t,i){var n="not-allowed";if(0!==t.x&&i.lockSkewingY)return n;if(0!==t.y&&i.lockSkewingX)return n;var s=f(i,t)%4;return r[s]+"-resize"},n.scaleSkewCursorStyleHandler=function(e,t,i){return e[i.canvas.altActionKey]?n.skewCursorStyleHandler(e,t,i):n.scaleCursorStyleHandler(e,t,i)},n.rotationWithSnapping=S("rotating",y((function(e,t,i,r){var n=t,s=n.target,o=s.translateToOriginPoint(s.getCenterPoint(),n.originX,n.originY);if(s.lockRotation)return!1;var a,l=Math.atan2(n.ey-o.y,n.ex-o.x),h=Math.atan2(r-o.y,i-o.x),c=u(h-l+n.theta);if(s.snapAngle>0){var d=s.snapAngle,f=s.snapThreshold||d,g=Math.ceil(c/d)*d,_=Math.floor(c/d)*d;Math.abs(c-_)0?s:a:(c>0&&(n=u===o?s:a),c<0&&(n=u===o?a:s),w(l)&&(n=n===s?a:s)),t.originX=n,S("skewing",y(x))(e,t,i,r))},n.skewHandlerY=function(e,t,i,r){var n,a=t.target,c=a.skewY,u=t.originX;return!a.lockSkewingY&&(0===c?n=b(t,h,h,i,r).y>0?o:l:(c>0&&(n=u===s?o:l),c<0&&(n=u===s?l:o),w(a)&&(n=n===o?l:o)),t.originY=n,S("skewing",y(T))(e,t,i,r))},n.dragHandler=function(e,t,i,r){var n=t.target,s=i-t.offsetX,o=r-t.offsetY,a=!n.get("lockMovementX")&&n.left!==s,l=!n.get("lockMovementY")&&n.top!==o;return a&&n.set("left",s),l&&n.set("top",o),(a||l)&&g("moving",v(e,t,i,r)),a||l},n.scaleOrSkewActionName=function(e,t,i){var r=e[i.canvas.altActionKey];return 0===t.x?r?"skewX":"scaleY":0===t.y?r?"skewY":"scaleX":void 0},n.rotationStyleHandler=function(e,t,i){return i.lockRotation?"not-allowed":t.cursorStyle},n.fireEvent=g,n.wrapWithFixedAnchor=y,n.wrapWithFireEvent=S,n.getLocalPoint=b,t.controlsUtils=n}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians,r=t.controlsUtils;r.renderCircleControl=function(e,t,i,r,n){r=r||{};var s,o=this.sizeX||r.cornerSize||n.cornerSize,a=this.sizeY||r.cornerSize||n.cornerSize,l=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,h=l?"stroke":"fill",c=!l&&(r.cornerStrokeColor||n.cornerStrokeColor),u=t,d=i;e.save(),e.fillStyle=r.cornerColor||n.cornerColor,e.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,o>a?(s=o,e.scale(1,a/o),d=i*o/a):a>o?(s=a,e.scale(o/a,1),u=t*a/o):s=o,e.lineWidth=1,e.beginPath(),e.arc(u,d,s/2,0,2*Math.PI,!1),e[h](),c&&e.stroke(),e.restore()},r.renderSquareControl=function(e,t,r,n,s){n=n||{};var o=this.sizeX||n.cornerSize||s.cornerSize,a=this.sizeY||n.cornerSize||s.cornerSize,l=void 0!==n.transparentCorners?n.transparentCorners:s.transparentCorners,h=l?"stroke":"fill",c=!l&&(n.cornerStrokeColor||s.cornerStrokeColor),u=o/2,d=a/2;e.save(),e.fillStyle=n.cornerColor||s.cornerColor,e.strokeStyle=n.cornerStrokeColor||s.cornerStrokeColor,e.lineWidth=1,e.translate(t,r),e.rotate(i(s.angle)),e[h+"Rect"](-u,-d,o,a),c&&e.strokeRect(-u,-d,o,a),e.restore()}}(t),function(e){var t=e.fabric||(e.fabric={});t.Control=function(e){for(var t in e)this[t]=e[t]},t.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(e,t){return t.cursorStyle},getActionName:function(e,t){return t.actionName},getVisibility:function(e,t){var i=e._controlsVisibility;return i&&void 0!==i[t]?i[t]:this.visible},setVisibility:function(e){this.visible=e},positionHandler:function(e,i){return t.util.transformPoint({x:this.x*e.x+this.offsetX,y:this.y*e.y+this.offsetY},i)},calcCornerCoords:function(e,i,r,n,s){var o,a,l,h,c=s?this.touchSizeX:this.sizeX,u=s?this.touchSizeY:this.sizeY;if(c&&u&&c!==u){var d=Math.atan2(u,c),f=Math.sqrt(c*c+u*u)/2,g=d-t.util.degreesToRadians(e),_=Math.PI/2-d-t.util.degreesToRadians(e);o=f*t.util.cos(g),a=f*t.util.sin(g),l=f*t.util.cos(_),h=f*t.util.sin(_)}else f=.7071067812*(c&&u?c:i),g=t.util.degreesToRadians(45-e),o=l=f*t.util.cos(g),a=h=f*t.util.sin(g);return{tl:{x:r-h,y:n-l},tr:{x:r+o,y:n-a},bl:{x:r-o,y:n+a},br:{x:r+h,y:n+l}}},render:function(e,i,r,n,s){"circle"===((n=n||{}).cornerStyle||s.cornerStyle)?t.controlsUtils.renderCircleControl.call(this,e,i,r,n,s):t.controlsUtils.renderSquareControl.call(this,e,i,r,n,s)}}}(t),function(){function e(e,t){var i,r,n,s,o=e.getAttribute("style"),a=e.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,o){var l=o.split(/\s*;\s*/);for(""===l[l.length-1]&&l.pop(),s=l.length;s--;){var h=l[s].split(/\s*:\s*/),c=h[0].trim(),u=h[1].trim();"stop-color"===c?i=u:"stop-opacity"===c&&(n=u)}}return i||(i=e.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=e.getAttribute("stop-opacity")),r=(i=new x.Color(i)).getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*t,{offset:a,color:i.toRgb(),opacity:n}}var t=x.util.object.clone;x.Gradient=x.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(e){e||(e={}),e.coords||(e.coords={});var t,i=this;Object.keys(e).forEach((function(t){i[t]=e[t]})),this.id?this.id+="_"+x.Object.__uid++:this.id=x.Object.__uid++,t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},"radial"===this.type&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.colorStops=e.colorStops.slice()},addColorStop:function(e){for(var t in e){var i=new x.Color(e[t]);this.colorStops.push({offset:parseFloat(t),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(e){var t={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return x.util.populateWithProperties(this,t,e),t},toSVG:function(e,i){var r,n,s,o,a=t(this.coords,!0),l=(i=i||{},t(this.colorStops,!0)),h=a.r1>a.r2,c=this.gradientTransform?this.gradientTransform.concat():x.iMatrix.concat(),u=-this.offsetX,d=-this.offsetY,f=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(l.sort((function(e,t){return e.offset-t.offset})),"objectBoundingBox"===g?(u/=e.width,d/=e.height):(u+=e.width/2,d+=e.height/2),"path"===e.type&&"percentage"!==this.gradientUnits&&(u-=e.pathOffset.x,d-=e.pathOffset.y),c[4]-=u,c[5]-=d,o='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',o+=' gradientTransform="'+(f?i.additionalTransform+" ":"")+x.util.matrixToSVG(c)+'" ',"linear"===this.type?s=["\n']:"radial"===this.type&&(s=["\n']),"radial"===this.type){if(h)for((l=l.concat()).reverse(),r=0,n=l.length;r0){var p=_/Math.max(a.r1,a.r2);for(r=0,n=l.length;r\n')}return s.push("linear"===this.type?"\n":"\n"),s.join("")},toLive:function(e){var t,i,r,n=x.util.object.clone(this.coords);if(this.type){for("linear"===this.type?t=e.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(t=e.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i1?1:s,isNaN(s)&&(s=1);var o,a,l,h,c=t.getElementsByTagName("stop"),u="userSpaceOnUse"===t.getAttribute("gradientUnits")?"pixels":"percentage",d=t.getAttribute("gradientTransform")||"",f=[],g=0,_=0;for("linearGradient"===t.nodeName||"LINEARGRADIENT"===t.nodeName?(o="linear",a=function(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")||0,x2:e.getAttribute("x2")||"100%",y2:e.getAttribute("y2")||0}}(t)):(o="radial",a=function(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%",y1:e.getAttribute("fy")||e.getAttribute("cy")||"50%",r1:0,x2:e.getAttribute("cx")||"50%",y2:e.getAttribute("cy")||"50%",r2:e.getAttribute("r")||"50%"}}(t)),l=c.length;l--;)f.push(e(c[l],s));return h=x.parseTransformAttribute(d),function(e,t,i,r){var n,s;Object.keys(t).forEach((function(e){"Infinity"===(n=t[e])?s=1:"-Infinity"===n?s=0:(s=parseFloat(t[e],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(s*=.01,"pixels"===r&&("x1"!==e&&"x2"!==e&&"r2"!==e||(s*=i.viewBoxWidth||i.width),"y1"!==e&&"y2"!==e||(s*=i.viewBoxHeight||i.height)))),t[e]=s}))}(0,a,n,u),"pixels"===u&&(g=-i.left,_=-i.top),new x.Gradient({id:t.getAttribute("id"),type:o,coords:a,colorStops:f,gradientUnits:u,gradientTransform:h,offsetX:g,offsetY:_})}})}(),m=x.util.toFixed,x.Pattern=x.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(e,t){if(e||(e={}),this.id=x.Object.__uid++,this.setOptions(e),!e.source||e.source&&"string"!=typeof e.source)t&&t(this);else{var i=this;this.source=x.util.createImage(),x.util.loadImage(e.source,(function(e,r){i.source=e,t&&t(i,r)}),null,this.crossOrigin)}},toObject:function(e){var t,i,r=x.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?t=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(t=this.source.toDataURL()),i={type:"pattern",source:t,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:m(this.offsetX,r),offsetY:m(this.offsetY,r),patternTransform:this.patternTransform?this.patternTransform.concat():null},x.util.populateWithProperties(this,i,e),i},toSVG:function(e){var t="function"==typeof this.source?this.source():this.source,i=t.width/e.width,r=t.height/e.height,n=this.offsetX/e.width,s=this.offsetY/e.height,o="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(r=1,s&&(r+=Math.abs(s))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,n&&(i+=Math.abs(n))),t.src?o=t.src:t.toDataURL&&(o=t.toDataURL()),'\n\n\n'},setOptions:function(e){for(var t in e)this[t]=e[t]},toLive:function(e){var t=this.source;if(!t)return"";if(void 0!==t.src){if(!t.complete)return"";if(0===t.naturalWidth||0===t.naturalHeight)return""}return e.createPattern(t,this.repeat)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.toFixed;t.Shadow?t.warn("fabric.Shadow is already defined."):(t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(e){for(var i in"string"==typeof e&&(e=this._parseShadow(e)),e)this[i]=e[i];this.id=t.Object.__uid++},_parseShadow:function(e){var i=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var r=40,n=40,s=t.Object.NUM_FRACTION_DIGITS,o=t.util.rotateVector({x:this.offsetX,y:this.offsetY},t.util.degreesToRadians(-e.angle)),a=new t.Color(this.color);return e.width&&e.height&&(r=100*i((Math.abs(o.x)+this.blur)/e.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/e.height,s)+20),e.flipX&&(o.x*=-1),e.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var e={},i=t.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach((function(t){this[t]!==i[t]&&(e[t]=this[t])}),this),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(t),function(){if(x.StaticCanvas)x.warn("fabric.StaticCanvas is already defined.");else{var e=x.util.object.extend,t=x.util.getElementOffset,i=x.util.removeFromArray,r=x.util.toFixed,n=x.util.transformPoint,s=x.util.invertTransform,o=x.util.getNodeCanvas,a=x.util.createCanvasElement,l=new Error("Could not initialize `canvas` element");x.StaticCanvas=x.util.createClass(x.CommonMethods,{initialize:function(e,t){t||(t={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(e,t)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:x.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(e,t){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this.interactive||this._initRetinaScaling(),t.overlayImage&&this.setOverlayImage(t.overlayImage,i),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,i),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,i),t.overlayColor&&this.setOverlayColor(t.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return x.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,x.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var e=x.devicePixelRatio;this.__initRetinaScaling(e,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(e,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(e,t,i){t.setAttribute("width",this.width*e),t.setAttribute("height",this.height*e),i.scale(e,e)},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,i){return this.__setBgOverlayImage("overlayImage",e,t,i)},setBackgroundImage:function(e,t,i){return this.__setBgOverlayImage("backgroundImage",e,t,i)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,i,r){return"string"==typeof t?x.util.loadImage(t,(function(t,n){if(t){var s=new x.Image(t,r);this[e]=s,s.canvas=this}i&&i(t,n)}),this,r&&r.crossOrigin):(r&&t.setOptions(r),this[e]=t,t&&(t.canvas=this),i&&i(t,!1)),this},__setBgOverlayColor:function(e,t,i){return this[e]=t,this._initGradient(t,e),this._initPattern(t,e,i),this},_createCanvasElement:function(){var e=a();if(!e)throw l;if(e.style||(e.style={}),void 0===e.getContext)throw l;return e},_initOptions:function(e){var t=this.lowerCanvasEl;this._setOptions(e),this.width=this.width||parseInt(t.width,10)||0,this.height=this.height||parseInt(t.height,10)||0,this.lowerCanvasEl.style&&(t.width=this.width,t.height=this.height,t.style.width=this.width+"px",t.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(e){e&&e.getContext?this.lowerCanvasEl=e:this.lowerCanvasEl=x.util.getById(e)||this._createCanvasElement(),x.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var i;for(var r in t=t||{},e)i=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),i+="px",this.hasLostContext=!0),t.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),t.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(e){var t,i,r,n=this._activeObject,s=this.backgroundImage,o=this.overlayImage;for(this.viewportTransform=e,i=0,r=this._objects.length;i\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",t),this._setSVGObjects(i,t),this.clipPath&&i.push("\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",t),i.push(""),i.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('\n','\n')},_setSVGHeader:function(e,t){var i,n=t.width||this.width,s=t.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=x.Object.NUM_FRACTION_DIGITS;t.viewBox?o='viewBox="'+t.viewBox.x+" "+t.viewBox.y+" "+t.viewBox.width+" "+t.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),e.push("\n',"Created with Fabric.js ",x.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(t),"\n")},createSVGClipPathMarkup:function(e){var t=this.clipPath;return t?(t.clipPathId="CLIPPATH_"+x.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(e.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var e=this;return["background","overlay"].map((function(t){var i=e[t+"Color"];if(i&&i.toLive){var r=e[t+"Vpt"],n=e.viewportTransform,s={width:e.width/(r?n[0]:1),height:e.height/(r?n[3]:1)};return i.toSVG(s,{additionalTransform:r?x.util.matrixToSVG(n):""})}})).join("")},createSVGFontFacesMarkup:function(){var e,t,i,r,n,s,o,a,l="",h={},c=x.fontPaths,u=[];for(this._objects.forEach((function e(t){u.push(t),t._objects&&t._objects.forEach(e)})),o=0,a=u.length;o',"\n",l,"","\n"].join("")),l},_setSVGObjects:function(e,t){var i,r,n,s=this._objects;for(r=0,n=s.length;r\n")}else e.push('\n")},sendToBack:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(t=(n=s._objects).length;t--;)r=n[t],i(this._objects,r),this._objects.unshift(r);else i(this._objects,e),this._objects.unshift(e);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(n=s._objects,t=0;t0+h&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),h++;else 0!==(s=this._objects.indexOf(e))&&(o=this._findNewLowerIndex(e,s,t),i(this._objects,e),this._objects.splice(o,0,e));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(e,t,i){var r,n;if(i){for(r=t,n=t-1;n>=0;--n)if(e.intersectsWithObject(this._objects[n])||e.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(e)){r=n;break}}else r=t-1;return r},bringForward:function(e,t){if(!e)return this;var r,n,s,o,a,l=this._activeObject,h=0;if(e===l&&"activeSelection"===e.type)for(r=(a=l._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),e(x.StaticCanvas.prototype,x.Observable),e(x.StaticCanvas.prototype,x.Collection),e(x.StaticCanvas.prototype,x.DataURLExporter),e(x.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=a();if(!t||!t.getContext)return null;var i=t.getContext("2d");return i&&"setLineDash"===e?void 0!==i.setLineDash:null}}),x.StaticCanvas.prototype.toJSON=x.StaticCanvas.prototype.toObject,x.isLikelyNode&&(x.StaticCanvas.prototype.createPNGStream=function(){var e=o(this.lowerCanvasEl);return e&&e.createPNGStream()},x.StaticCanvas.prototype.createJPEGStream=function(e){var t=o(this.lowerCanvasEl);return t&&t.createJPEGStream(e)})}}(),x.BaseBrush=x.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(e){e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.miterLimit=this.strokeMiterLimit,e.lineJoin=this.strokeLineJoin,e.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(e){var t=this.canvas.viewportTransform;e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5])},_setShadow:function(){if(this.shadow){var e=this.canvas,t=this.shadow,i=e.contextTop,r=e.getZoom();e&&e._isRetinaScaling()&&(r*=x.devicePixelRatio),i.shadowColor=t.color,i.shadowBlur=t.blur*r,i.shadowOffsetX=t.offsetX*r,i.shadowOffsetY=t.offsetY*r}},needsFullRender:function(){return new x.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_isOutSideCanvas:function(e){return e.x<0||e.x>this.canvas.getWidth()||e.y<0||e.y>this.canvas.getHeight()}}),x.PencilBrush=x.util.createClass(x.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(e){this.canvas=e,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(e,t,i){var r=t.midPointFrom(i);return e.quadraticCurveTo(t.x,t.y,r.x,r.y),r},onMouseDown:function(e,t){this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],this._prepareForDrawing(e),this._captureDrawingPath(e),this._render())},onMouseMove:function(e,t){if(this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(e))&&this._captureDrawingPath(e)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(e){return!this.canvas._isMainEvent(e.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(e){var t=new x.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){return!(this._points.length>1&&e.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(e),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(e){var t=new x.Point(e.x,e.y);return this._addPoint(t)},_render:function(e){var t,i,r=this._points[0],n=this._points[1];if(e=e||this.canvas.contextTop,this._saveAndTransform(e),e.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new x.Point(r.x,r.y),n=new x.Point(n.x,n.y),r.x-=s,n.x+=s}for(e.moveTo(r.x,r.y),t=1,i=this._points.length;t=n&&(o=e[i],a.push(o));return a.push(e[s]),a},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var e=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(e))this.canvas.requestRenderAll();else{var t=this.createPath(e);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:t}),this.canvas.add(t),this.canvas.requestRenderAll(),t.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:t})}}}),x.CircleBrush=x.util.createClass(x.BaseBrush,{width:10,initialize:function(e){this.canvas=e,this.points=[]},drawDot:function(e){var t=this.addPoint(e),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,t),i.restore()},dot:function(e,t){e.fillStyle=t.fill,e.beginPath(),e.arc(t.x,t.y,t.radius,0,2*Math.PI,!1),e.closePath(),e.fill()},onMouseDown:function(e){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(e)},_render:function(){var e,t,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),e=0,t=r.length;e0&&!this.preserveObjectStacking){t=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),t.push.apply(t,i)}else t=this._objects;return t},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var e=this.contextContainer;return this.renderCanvas(e,this._chooseObjectsToRender()),this},renderTopLayer:function(e){e.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(e),this.contextTopDirty=!0),e.restore()},renderTop:function(){var e=this.contextTop;return this.clearContext(e),this.renderTopLayer(e),this.fire("after:render"),this},_normalizePointer:function(e,t){var i=e.calcTransformMatrix(),r=x.util.invertTransform(i),n=this.restorePointerVpt(t);return x.util.transformPoint(n,r)},isTargetTransparent:function(e,t,i){if(e.shouldCache()&&e._cacheCanvas&&e!==this._activeObject){var r=this._normalizePointer(e,{x:t,y:i}),n=Math.max(e.cacheTranslationX+r.x*e.zoomX,0),s=Math.max(e.cacheTranslationY+r.y*e.zoomY,0);return x.util.isTransparent(e._cacheContext,Math.round(n),Math.round(s),this.targetFindTolerance)}var o=this.contextCache,a=e.selectionBackgroundColor,l=this.viewportTransform;return e.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(l[0],l[1],l[2],l[3],l[4],l[5]),e.render(o),o.restore(),e.selectionBackgroundColor=a,x.util.isTransparent(o,t,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(e){return Array.isArray(this.selectionKey)?!!this.selectionKey.find((function(t){return!0===e[t]})):e[this.selectionKey]},_shouldClearSelection:function(e,t){var i=this.getActiveObjects(),r=this._activeObject;return!t||t&&r&&i.length>1&&-1===i.indexOf(t)&&r!==t&&!this._isSelectionKeyPressed(e)||t&&!t.evented||t&&!t.selectable&&r&&r!==t},_shouldCenterTransform:function(e,t,i){var r;if(e)return"scale"===t||"scaleX"===t||"scaleY"===t||"resizing"===t?r=this.centeredScaling||e.centeredScaling:"rotate"===t&&(r=this.centeredRotation||e.centeredRotation),r?!i:i},_getOriginFromCorner:function(e,t){var i={x:e.originX,y:e.originY};return"ml"===t||"tl"===t||"bl"===t?i.x="right":"mr"!==t&&"tr"!==t&&"br"!==t||(i.x="left"),"tl"===t||"mt"===t||"tr"===t?i.y="bottom":"bl"!==t&&"mb"!==t&&"br"!==t||(i.y="top"),i},_getActionFromCorner:function(e,t,i,r){if(!t||!e)return"drag";var n=r.controls[t];return n.getActionName(i,n,r)},_setupCurrentTransform:function(e,i,r){if(i){var n=this.getPointer(e),s=i.__corner,o=i.controls[s],a=r&&s?o.getActionHandler(e,i,o):x.controlsUtils.dragHandler,l=this._getActionFromCorner(r,s,e,i),h=this._getOriginFromCorner(i,s),c=e[this.centeredKey],u={target:i,action:l,actionHandler:a,corner:s,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:h.x,originY:h.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:t(i.angle),width:i.width*i.scaleX,shiftKey:e.shiftKey,altKey:c,original:x.util.saveObjectTransform(i)};this._shouldCenterTransform(i,l,c)&&(u.originX="center",u.originY="center"),u.original.originX=h.x,u.original.originY=h.y,this._currentTransform=u,this._beforeTransform(e)}},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_drawSelection:function(e){var t=this._groupSelector,i=new x.Point(t.ex,t.ey),r=x.util.transformPoint(i,this.viewportTransform),n=new x.Point(t.ex+t.left,t.ey+t.top),s=x.util.transformPoint(n,this.viewportTransform),o=Math.min(r.x,s.x),a=Math.min(r.y,s.y),l=Math.max(r.x,s.x),h=Math.max(r.y,s.y),c=this.selectionLineWidth/2;this.selectionColor&&(e.fillStyle=this.selectionColor,e.fillRect(o,a,l-o,h-a)),this.selectionLineWidth&&this.selectionBorderColor&&(e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor,o+=c,a+=c,l-=c,h-=c,x.Object.prototype._setLineDash.call(this,e,this.selectionDashArray),e.strokeRect(o,a,l-o,h-a))},findTarget:function(e,t){if(!this.skipTargetFind){var r,n,s=this.getPointer(e,!0),o=this._activeObject,a=this.getActiveObjects(),l=i(e),h=a.length>1&&!t||1===a.length;if(this.targets=[],h&&o._findTargetCorner(s,l))return o;if(a.length>1&&!t&&o===this._searchPossibleTargets([o],s))return o;if(1===a.length&&o===this._searchPossibleTargets([o],s)){if(!this.preserveObjectStacking)return o;r=o,n=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,s);return e[this.altSelectionKey]&&c&&r&&c!==r&&(c=r,this.targets=n),c}},_checkTarget:function(e,t,i){if(t&&t.visible&&t.evented&&t.containsPoint(e)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||t.isEditing)return!0;if(!this.isTargetTransparent(t,i.x,i.y))return!0}},_searchPossibleTargets:function(e,t){for(var i,r,n=e.length;n--;){var s=e[n],o=s.group?this._normalizePointer(s.group,t):t;if(this._checkTarget(o,s,t)){(i=e[n]).subTargetCheck&&i instanceof x.Group&&(r=this._searchPossibleTargets(i._objects,t))&&this.targets.push(r);break}}return i},restorePointerVpt:function(e){return x.util.transformPoint(e,x.util.invertTransform(this.viewportTransform))},getPointer:function(t,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=e(t),s=this.upperCanvasEl,o=s.getBoundingClientRect(),a=o.width||0,l=o.height||0;a&&l||("top"in o&&"bottom"in o&&(l=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var h=this.getRetinaScaling();return 1!==h&&(n.x/=h,n.y/=h),r=0===a||0===l?{width:1,height:1}:{width:s.width/a,height:s.height/l},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),t=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),x.util.addClass(i,"upper-canvas "+e),this.wrapperEl.appendChild(i),this._copyCanvasStyle(t,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=x.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),x.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),x.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.width||e.width,i=this.height||e.height;x.util.setStyle(e,{position:"absolute",width:t+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),e.width=t,e.height=i,x.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var e=this._activeObject;return e?"activeSelection"===e.type&&e._objects?e._objects.slice(0):[e]:[]},_onObjectRemoved:function(e){e===this._activeObject&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared",{target:e}),e.fire("deselected")),e===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",e)},_fireSelectionEvents:function(e,t){var i=!1,r=this.getActiveObjects(),n=[],s=[];e.forEach((function(e){-1===r.indexOf(e)&&(i=!0,e.fire("deselected",{e:t,target:e}),s.push(e))})),r.forEach((function(r){-1===e.indexOf(r)&&(i=!0,r.fire("selected",{e:t,target:r}),n.push(r))})),e.length>0&&r.length>0?i&&this.fire("selection:updated",{e:t,selected:n,deselected:s}):r.length>0?this.fire("selection:created",{e:t,selected:n}):e.length>0&&this.fire("selection:cleared",{e:t,deselected:s})},setActiveObject:function(e,t){var i=this.getActiveObjects();return this._setActiveObject(e,t),this._fireSelectionEvents(i,t),this},_setActiveObject:function(e,t){return this._activeObject!==e&&!!this._discardActiveObject(t,e)&&!e.onSelect({e:t})&&(this._activeObject=e,!0)},_discardActiveObject:function(e,t){var i=this._activeObject;if(i){if(i.onDeselect({e,object:t}))return!1;this._activeObject=null}return!0},discardActiveObject:function(e){var t=this.getActiveObjects(),i=this.getActiveObject();return t.length&&this.fire("before:selection:cleared",{target:i,e}),this._discardActiveObject(e),this._fireSelectionEvents(t,e),this},dispose:function(){var e=this.wrapperEl;return this.removeListeners(),e.removeChild(this.upperCanvasEl),e.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(e){x.util.cleanUpJsdomNode(this[e]),this[e]=void 0}.bind(this)),e.parentNode&&e.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,x.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(e){var t=this._activeObject;t&&t._renderControls(e)},_toObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(e),n=this.callSuper("_toObject",e,t,i);return this._unwindGroupTransformOnObject(e,r),n},_realizeGroupTransformOnObject:function(e){if(e.group&&"activeSelection"===e.group.type&&this._activeObject===e.group){var t={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach((function(i){t[i]=e[i]})),x.util.addTransformToObject(e,this._activeObject.calcOwnMatrix()),t}return null},_unwindGroupTransformOnObject:function(e,t){t&&e.set(t)},_setSVGObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(t);this.callSuper("_setSVGObject",e,t,i),this._unwindGroupTransformOnObject(t,r)},setViewportTransform:function(e){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),x.StaticCanvas.prototype.setViewportTransform.call(this,e)}}),x.StaticCanvas)"prototype"!==r&&(x.Canvas[r]=x.StaticCanvas[r])}(),function(){var e=x.util.addListener,t=x.util.removeListener,i={passive:!1};function r(e,t){return e.button&&e.button===t-1}x.util.object.extend(x.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(e,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(e,t){var r=this.upperCanvasEl,n=this._getEventPrefix();e(x.window,"resize",this._onResize),e(r,n+"down",this._onMouseDown),e(r,n+"move",this._onMouseMove,i),e(r,n+"out",this._onMouseOut),e(r,n+"enter",this._onMouseEnter),e(r,"wheel",this._onMouseWheel),e(r,"contextmenu",this._onContextMenu),e(r,"dblclick",this._onDoubleClick),e(r,"dragover",this._onDragOver),e(r,"dragenter",this._onDragEnter),e(r,"dragleave",this._onDragLeave),e(r,"drop",this._onDrop),this.enablePointerEvents||e(r,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&t in eventjs&&(eventjs[t](r,"gesture",this._onGesture),eventjs[t](r,"drag",this._onDrag),eventjs[t](r,"orientation",this._onOrientationChange),eventjs[t](r,"shake",this._onShake),eventjs[t](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(t,"remove");var e=this._getEventPrefix();t(x.document,e+"up",this._onMouseUp),t(x.document,"touchend",this._onTouchEnd,i),t(x.document,e+"move",this._onMouseMove,i),t(x.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(e,t){this.__onTransformGesture&&this.__onTransformGesture(e,t)},_onDrag:function(e,t){this.__onDrag&&this.__onDrag(e,t)},_onMouseWheel:function(e){this.__onMouseWheel(e)},_onMouseOut:function(e){var t=this._hoveredTarget;this.fire("mouse:out",{target:t,e}),this._hoveredTarget=null,t&&t.fire("mouseout",{e});var i=this;this._hoveredTargets.forEach((function(r){i.fire("mouse:out",{target:t,e}),r&&t.fire("mouseout",{e})})),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach((function(e){e.isEditing&&e.hiddenTextarea.focus()}))},_onMouseEnter:function(e){this._currentTransform||this.findTarget(e)||(this.fire("mouse:over",{target:null,e}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(e,t){this.__onOrientationChange&&this.__onOrientationChange(e,t)},_onShake:function(e,t){this.__onShake&&this.__onShake(e,t)},_onLongPress:function(e,t){this.__onLongPress&&this.__onLongPress(e,t)},_onDragOver:function(e){e.preventDefault();var t=this._simpleEventHandler("dragover",e);this._fireEnterLeaveEvents(t,e)},_onDrop:function(e){return this._simpleEventHandler("drop:before",e),this._simpleEventHandler("drop",e)},_onContextMenu:function(e){return this.stopContextMenu&&(e.stopPropagation(),e.preventDefault()),!1},_onDoubleClick:function(e){this._cacheTransformEventData(e),this._handleEvent(e,"dblclick"),this._resetTransformEventData(e)},getPointerId:function(e){var t=e.changedTouches;return t?t[0]&&t[0].identifier:this.enablePointerEvents?e.pointerId:-1},_isMainEvent:function(e){return!0===e.isPrimary||!1!==e.isPrimary&&("touchend"===e.type&&0===e.touches.length||!e.changedTouches||e.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();e(x.document,"touchend",this._onTouchEnd,i),e(x.document,"touchmove",this._onMouseMove,i),t(n,s+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();t(n,s+"move",this._onMouseMove,i),e(x.document,s+"up",this._onMouseUp),e(x.document,s+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var n=this._getEventPrefix();t(x.document,"touchend",this._onTouchEnd,i),t(x.document,"touchmove",this._onMouseMove,i);var s=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((function(){e(s.upperCanvasEl,n+"down",s._onMouseDown),s._willAddMouseDown=0}),400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();this._isMainEvent(r)&&(t(x.document,s+"up",this._onMouseUp),t(x.document,s+"move",this._onMouseMove,i),e(n,s+"move",this._onMouseMove,i))},_onMouseMove:function(e){!this.allowTouchScrolling&&e.preventDefault&&e.preventDefault(),this.__onMouseMove(e)},_onResize:function(){this.calcOffset()},_shouldRender:function(e){var t=this._activeObject;return!!(!!t!=!!e||t&&e&&t!==e)||(t&&t.isEditing,!1)},__onMouseUp:function(e){var t,i=this._currentTransform,n=this._groupSelector,s=!1,o=!n||0===n.left&&0===n.top;if(this._cacheTransformEventData(e),t=this._target,this._handleEvent(e,"up:before"),r(e,3))this.fireRightClick&&this._handleEvent(e,"up",3,o);else{if(r(e,2))return this.fireMiddleClick&&this._handleEvent(e,"up",2,o),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else if(this._isMainEvent(e)){if(i&&(this._finalizeCurrentTransform(e),s=i.actionPerformed),!o){var a=t===this._activeObject;this._maybeGroupObjects(e),s||(s=this._shouldRender(t)||!a&&t===this._activeObject)}var l,h;if(t){if(l=t._findTargetCorner(this.getPointer(e,!0),x.util.isTouchEvent(e)),t.selectable&&t!==this._activeObject&&"up"===t.activeOn)this.setActiveObject(t,e),s=!0;else{var c=t.controls[l],u=c&&c.getMouseUpHandler(e,t,c);u&&u(e,i,(h=this.getPointer(e)).x,h.y)}t.isMoving=!1}if(i&&(i.target!==t||i.corner!==l)){var d=i.target&&i.target.controls[i.corner],f=d&&d.getMouseUpHandler(e,t,c);h=h||this.getPointer(e),f&&f(e,i,h.x,h.y)}this._setCursorFromEvent(e,t),this._handleEvent(e,"up",1,o),this._groupSelector=null,this._currentTransform=null,t&&(t.__corner=0),s?this.requestRenderAll():o||this.renderTop()}}},_simpleEventHandler:function(e,t){var i=this.findTarget(t),r=this.targets,n={e:t,target:i,subTargets:r};if(this.fire(e,n),i&&i.fire(e,n),!r)return i;for(var s=0;s1&&(t=new x.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(t,e))},_collectObjects:function(e){for(var t,i=[],r=this._groupSelector.ex,n=this._groupSelector.ey,s=r+this._groupSelector.left,o=n+this._groupSelector.top,a=new x.Point(v(r,s),v(n,o)),l=new x.Point(y(r,s),y(n,o)),h=!this.selectionFullyContained,c=r===s&&n===o,u=this._objects.length;u--&&!((t=this._objects[u])&&t.selectable&&t.visible&&(h&&t.intersectsWithRect(a,l,!0)||t.isContainedWithinRect(a,l,!0)||h&&t.containsPoint(a,null,!0)||h&&t.containsPoint(l,null,!0))&&(i.push(t),c)););return i.length>1&&(i=i.filter((function(t){return!t.onSelect({e})}))),i},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e),this.setCursor(this.defaultCursor),this._groupSelector=null}}),x.util.object.extend(x.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",i=e.quality||1,r=(e.multiplier||1)*(e.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(r,e);return x.util.toDataURL(n,t,i)},toCanvasElement:function(e,t){e=e||1;var i=((t=t||{}).width||this.width)*e,r=(t.height||this.height)*e,n=this.getZoom(),s=this.width,o=this.height,a=n*e,l=this.viewportTransform,h=(l[4]-(t.left||0))*e,c=(l[5]-(t.top||0))*e,u=this.interactive,d=[a,0,0,a,h,c],f=this.enableRetinaScaling,g=x.util.createCanvasElement(),_=this.contextTop;return g.width=i,g.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=l,this.width=s,this.height=o,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=f,this.contextTop=_,g}}),x.util.object.extend(x.StaticCanvas.prototype,{loadFromJSON:function(e,t,i){if(e){var r="string"==typeof e?JSON.parse(e):x.util.object.clone(e),n=this,s=r.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,(function(e){n.clear(),n._setBgOverlay(r,(function(){s?n._enlivenObjects([s],(function(i){n.clipPath=i[0],n.__setupCanvas.call(n,r,e,o,t)})):n.__setupCanvas.call(n,r,e,o,t)}))}),i),this}},__setupCanvas:function(e,t,i,r){var n=this;t.forEach((function(e,t){n.insertAt(e,t)})),this.renderOnAddRemove=i,delete e.objects,delete e.backgroundImage,delete e.overlayImage,delete e.background,delete e.overlay,this._setOptions(e),this.renderAll(),r&&r()},_setBgOverlay:function(e,t){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(e.backgroundImage||e.overlayImage||e.background||e.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&t&&t()};this.__setBgOverlay("backgroundImage",e.backgroundImage,i,r),this.__setBgOverlay("overlayImage",e.overlayImage,i,r),this.__setBgOverlay("backgroundColor",e.background,i,r),this.__setBgOverlay("overlayColor",e.overlay,i,r)}else t&&t()},__setBgOverlay:function(e,t,i,r){var n=this;if(!t)return i[e]=!0,void(r&&r());"backgroundImage"===e||"overlayImage"===e?x.util.enlivenObjects([t],(function(t){n[e]=t[0],i[e]=!0,r&&r()})):this["set"+x.util.string.capitalize(e,!0)](t,(function(){i[e]=!0,r&&r()}))},_enlivenObjects:function(e,t,i){e&&0!==e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),null,i):t&&t([])},_toDataURL:function(e,t){this.clone((function(i){t(i.toDataURL(e))}))},_toDataURLWithMultiplier:function(e,t,i){this.clone((function(r){i(r.toDataURLWithMultiplier(e,t))}))},clone:function(e,t){var i=JSON.stringify(this.toJSON(t));this.cloneWithoutData((function(t){t.loadFromJSON(i,(function(){e&&e(t)}))}))},cloneWithoutData:function(e){var t=x.util.createCanvasElement();t.width=this.width,t.height=this.height;var i=new x.Canvas(t);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,(function(){i.renderAll(),e&&e(i)})),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):e&&e(i)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n=t.util.toFixed,s=t.util.string.capitalize,o=t.util.degreesToRadians,a=!t.isLikelyNode;t.Object||(t.Object=t.util.createClass(t.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(e){e&&this.setOptions(e)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=t.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(e){var i=t.perfLimitSizeTotal,r=e.width,n=e.height,s=t.maxCacheSideLimit,o=t.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rc&&(e.zoomX/=r/c,e.width=c,e.capped=!0),n>u&&(e.zoomY/=n/u,e.height=u,e.capped=!0),e},_getCacheCanvasDimensions:function(){var e=this.getTotalObjectScaling(),t=this._getTransformedDimensions(0,0),i=t.x*e.scaleX/this.scaleX,r=t.y*e.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:e.scaleX,zoomY:e.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var e=this.canvas;if(this.noScaleCache&&e&&e._currentTransform){var i=e._currentTransform.target,r=e._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,s,o=this._cacheCanvas,a=this._limitCacheSize(this._getCacheCanvasDimensions()),l=t.minCacheSideLimit,h=a.width,c=a.height,u=a.zoomX,d=a.zoomY,f=h!==this.cacheWidth||c!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==d,_=f||g,p=0,m=0,v=!1;if(f){var y=this._cacheCanvas.width,S=this._cacheCanvas.height,b=h>y||c>S;v=b||(h<.9*y||c<.9*S)&&y>l&&S>l,b&&!a.capped&&(h>l||c>l)&&(p=.1*h,m=.1*c)}return this instanceof t.Text&&this.path&&(_=!0,v=!0,p+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!_&&(v?(o.width=Math.ceil(h+p),o.height=Math.ceil(c+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,o.width,o.height)),n=a.x/2,s=a.y/2,this.cacheTranslationX=Math.round(o.width/2-n)+n,this.cacheTranslationY=Math.round(o.height/2-s)+s,this.cacheWidth=h,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,d),this.zoomX=u,this.zoomY=d,!0)},setOptions:function(e){this._setOptions(e),this._initGradient(e.fill,"fill"),this._initGradient(e.stroke,"stroke"),this._initPattern(e.fill,"fill"),this._initPattern(e.stroke,"stroke")},transform:function(e){var t=this.group&&!this.group._transformDone||this.group&&this.canvas&&e===this.canvas.contextTop,i=this.calcTransformMatrix(!t);e.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(e){var i=t.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:t.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(r.clipPath=this.clipPath.toObject(e),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),t.util.populateWithProperties(this,r,e),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var i=t.util.getKlass(e.type).prototype;return i.stateProperties.forEach((function(t){"left"!==t&&"top"!==t&&(e[t]===i[t]&&delete e[t],Array.isArray(e[t])&&Array.isArray(i[t])&&0===e[t].length&&0===i[t].length&&delete e[t])})),e},toString:function(){return"#"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var e=t.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(e.scaleX),scaleY:Math.abs(e.scaleY)}},getTotalObjectScaling:function(){var e=this.getObjectScaling(),t=e.scaleX,i=e.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();t*=r*n,i*=r*n}return{scaleX:t,scaleY:i}},getObjectOpacity:function(){var e=this.opacity;return this.group&&(e*=this.group.getObjectOpacity()),e},_set:function(e,i){var r="scaleX"===e||"scaleY"===e,n=this[e]!==i,s=!1;return r&&(i=this._constrainScale(i)),"scaleX"===e&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===e&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==e||!i||i instanceof t.Shadow?"dirty"===e&&this.group&&this.group.set("dirty",i):i=new t.Shadow(i),this[e]=i,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(e)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(e)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:t.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(e){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(e.save(),this._setupCompositeOperation(e),this.drawSelectionBackground(e),this.transform(e),this._setOpacity(e),this._setShadow(e,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(e)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(e),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),e.restore())},renderCache:function(e){e=e||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,e.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(e,i){if(e.save(),i.inverted?e.globalCompositeOperation="destination-out":e.globalCompositeOperation="destination-in",i.absolutePositioned){var r=t.util.invertTransform(this.calcTransformMatrix());e.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(e),e.scale(1/i.zoomX,1/i.zoomY),e.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),e.restore()},drawObject:function(e,t){var i=this.fill,r=this.stroke;t?(this.fill="black",this.stroke="",this._setClippingProperties(e)):this._renderBackground(e),this._render(e),this._drawClipPath(e,this.clipPath),this.fill=i,this.stroke=r},_drawClipPath:function(e,t){t&&(t.canvas=this.canvas,t.shouldCache(),t._transformDone=!0,t.renderCache({forClipping:!0}),this.drawClipPathOnCache(e,t))},drawCacheOnCanvas:function(e){e.scale(1/this.zoomX,1/this.zoomY),e.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(e){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!e&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!e){var t=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-t/2,-i/2,t,i)}return!0}return!1},_renderBackground:function(e){if(this.backgroundColor){var t=this._getNonTransformedDimensions();e.fillStyle=this.backgroundColor,e.fillRect(-t.x/2,-t.y/2,t.x,t.y),this._removeShadow(e)}},_setOpacity:function(e){this.group&&!this.group._transformDone?e.globalAlpha=this.getObjectOpacity():e.globalAlpha*=this.opacity},_setStrokeStyles:function(e,t){var i=t.stroke;i&&(e.lineWidth=t.strokeWidth,e.lineCap=t.strokeLineCap,e.lineDashOffset=t.strokeDashOffset,e.lineJoin=t.strokeLineJoin,e.miterLimit=t.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(e,i):(e.strokeStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,i)):e.strokeStyle=t.stroke)},_setFillStyles:function(e,t){var i=t.fill;i&&(i.toLive?(e.fillStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,t.fill)):e.fillStyle=i)},_setClippingProperties:function(e){e.globalAlpha=1,e.strokeStyle="transparent",e.fillStyle="#000000"},_setLineDash:function(e,t){t&&0!==t.length&&(1&t.length&&t.push.apply(t,t),e.setLineDash(t))},_renderControls:function(e,i){var r,n,s,a=this.getViewportTransform(),l=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==i.hasControls?i.hasControls:this.hasControls,l=t.util.multiplyTransformMatrices(a,l),r=t.util.qrDecompose(l),e.save(),e.translate(r.translateX,r.translateY),e.lineWidth=1*this.borderScaleFactor,this.group||(e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(r.angle-=180),e.rotate(o(this.group?r.angle:this.angle)),i.forActiveSelection||this.group?n&&this.drawBordersInGroup(e,r,i):n&&this.drawBorders(e,i),s&&this.drawControls(e,i),e.restore()},_setShadow:function(e){if(this.shadow){var i,r=this.shadow,n=this.canvas,s=n&&n.viewportTransform[0]||1,o=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(s*=t.devicePixelRatio,o*=t.devicePixelRatio),e.shadowColor=r.color,e.shadowBlur=r.blur*t.browserShadowBlurConstant*(s+o)*(i.scaleX+i.scaleY)/4,e.shadowOffsetX=r.offsetX*s*i.scaleX,e.shadowOffsetY=r.offsetY*o*i.scaleY}},_removeShadow:function(e){this.shadow&&(e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0)},_applyPatternGradientTransform:function(e,t){if(!t||!t.toLive)return{offsetX:0,offsetY:0};var i=t.gradientTransform||t.patternTransform,r=-this.width/2+t.offsetX||0,n=-this.height/2+t.offsetY||0;return"percentage"===t.gradientUnits?e.transform(this.width,0,0,this.height,r,n):e.transform(1,0,0,1,r,n),i&&e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(e){"stroke"===this.paintFirst?(this._renderStroke(e),this._renderFill(e)):(this._renderFill(e),this._renderStroke(e))},_render:function(){},_renderFill:function(e){this.fill&&(e.save(),this._setFillStyles(e,this),"evenodd"===this.fillRule?e.fill("evenodd"):e.fill(),e.restore())},_renderStroke:function(e){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e),e.save(),this.strokeUniform&&this.group){var t=this.getObjectScaling();e.scale(1/t.scaleX,1/t.scaleY)}else this.strokeUniform&&e.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(e,this.strokeDashArray),this._setStrokeStyles(e,this),e.stroke(),e.restore()}},_applyPatternForTransformedGradient:function(e,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),s=t.util.createCanvasElement(),o=this.canvas.getRetinaScaling(),a=n.x/this.scaleX/o,l=n.y/this.scaleY/o;s.width=a,s.height=l,(r=s.getContext("2d")).beginPath(),r.moveTo(0,0),r.lineTo(a,0),r.lineTo(a,l),r.lineTo(0,l),r.closePath(),r.translate(a/2,l/2),r.scale(n.zoomX/this.scaleX/o,n.zoomY/this.scaleY/o),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(e),r.fill(),e.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),e.scale(o*this.scaleX/n.zoomX,o*this.scaleY/n.zoomY),e.strokeStyle=r.createPattern(s,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var e=t.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",e.scaleX),this.set("scaleY",e.scaleY),this.angle=e.angle,this.skewX=e.skewX,this.skewY=0}},_removeTransformMatrix:function(e){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=t.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,e&&(this.scaleX*=e.scaleX,this.scaleY*=e.scaleY,this.cropX=e.cropX,this.cropY=e.cropY,i.x+=e.offsetLeft,i.y+=e.offsetTop,this.width=e.width,this.height=e.height),this.setPositionByOrigin(i,"center","center")},clone:function(e,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,e):t.Object._fromObject("Object",r,e)},cloneAsImage:function(e,i){var r=this.toCanvasElement(i);return e&&e(new t.Image(r)),this},toCanvasElement:function(e){e||(e={});var i=t.util,r=i.saveObjectTransform(this),n=this.group,s=this.shadow,o=Math.abs,a=(e.multiplier||1)*(e.enableRetinaScaling?t.devicePixelRatio:1);delete this.group,e.withoutTransform&&i.resetObjectTransform(this),e.withoutShadow&&(this.shadow=null);var l,h,c,u,d=t.util.createCanvasElement(),f=this.getBoundingRect(!0,!0),g=this.shadow,_={x:0,y:0};g&&(h=g.blur,l=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),_.x=2*Math.round(o(g.offsetX)+h)*o(l.scaleX),_.y=2*Math.round(o(g.offsetY)+h)*o(l.scaleY)),c=f.width+_.x,u=f.height+_.y,d.width=Math.ceil(c),d.height=Math.ceil(u);var p=new t.StaticCanvas(d,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===e.format&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new t.Point(p.width/2,p.height/2),"center","center");var m=this.canvas;p.add(this);var v=p.toCanvasElement(a||1,e);return this.shadow=s,this.set("canvas",m),n&&(this.group=n),this.set(r).setCoords(),p._objects=[],p.dispose(),p=null,v},toDataURL:function(e){return e||(e={}),t.util.toDataURL(this.toCanvasElement(e),e.format||"png",e.quality||1)},isType:function(e){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===e},complexity:function(){return 1},toJSON:function(e){return this.toObject(e)},rotate:function(e){var t=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(e,i){i=i||this.canvas.getPointer(e);var r=new t.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=t.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(e){this.globalCompositeOperation&&(e.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){t.runningAnimations&&t.runningAnimations.cancelByTarget(this)}}),t.util.createAccessors&&t.util.createAccessors(t.Object),i(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.ENLIVEN_PROPS=["clipPath"],t.Object._fromObject=function(e,i,n,s){var o=t[e];i=r(i,!0),t.util.enlivenPatterns([i.fill,i.stroke],(function(e){void 0!==e[0]&&(i.fill=e[0]),void 0!==e[1]&&(i.stroke=e[1]),t.util.enlivenObjectEnlivables(i,i,(function(){var e=s?new o(i[s],i):new o(i);n&&n(e)}))}))},t.Object.__uid=0)}(t),S=x.util.degreesToRadians,b={left:-.5,center:0,right:.5},w={top:-.5,center:0,bottom:.5},x.util.object.extend(x.Object.prototype,{translateToGivenOrigin:function(e,t,i,r,n){var s,o,a,l=e.x,h=e.y;return"string"==typeof t?t=b[t]:t-=.5,"string"==typeof r?r=b[r]:r-=.5,"string"==typeof i?i=w[i]:i-=.5,"string"==typeof n?n=w[n]:n-=.5,o=n-i,((s=r-t)||o)&&(a=this._getTransformedDimensions(),l=e.x+s*a.x,h=e.y+o*a.y),new x.Point(l,h)},translateToCenterPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,t,i,"center","center");return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},translateToOriginPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,"center","center",t,i);return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},getCenterPoint:function(){var e=new x.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var i=this.getCenterPoint();return this.translateToOriginPoint(i,e,t)},toLocalPoint:function(e,t,i){var r,n,s=this.getCenterPoint();return r=void 0!==t&&void 0!==i?this.translateToGivenOrigin(s,"center","center",t,i):new x.Point(this.left,this.top),n=new x.Point(e.x,e.y),this.angle&&(n=x.util.rotatePoint(n,s,-S(this.angle))),n.subtractEquals(r)},setPositionByOrigin:function(e,t,i){var r=this.translateToCenterPoint(e,t,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(e){var t,i,r=S(this.angle),n=this.getScaledWidth(),s=x.util.cos(r)*n,o=x.util.sin(r)*n;t="string"==typeof this.originX?b[this.originX]:this.originX-.5,i="string"==typeof e?b[e]:e-.5,this.left+=s*(i-t),this.top+=o*(i-t),this.setCoords(),this.originX=e},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),function(){var e=x.util,t=e.degreesToRadians,i=e.multiplyTransformMatrices,r=e.transformPoint;e.object.extend(x.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(e,t){return t?e?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),e?this.aCoords:this.lineCoords)},getCoords:function(e,t){return i=this._getCoords(e,t),[new x.Point(i.tl.x,i.tl.y),new x.Point(i.tr.x,i.tr.y),new x.Point(i.br.x,i.br.y),new x.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(e,t,i,r){var n=this.getCoords(i,r);return"Intersection"===x.Intersection.intersectPolygonRectangle(n,e,t).status},intersectsWithObject:function(e,t,i){return"Intersection"===x.Intersection.intersectPolygonPolygon(this.getCoords(t,i),e.getCoords(t,i)).status||e.isContainedWithinObject(this,t,i)||this.isContainedWithinObject(e,t,i)},isContainedWithinObject:function(e,t,i){for(var r=this.getCoords(t,i),n=t?e.aCoords:e.lineCoords,s=0,o=e._getImageLines(n);s<4;s++)if(!e.containsPoint(r[s],o))return!1;return!0},isContainedWithinRect:function(e,t,i,r){var n=this.getBoundingRect(i,r);return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e,t,i,r){var n=this._getCoords(i,r),s=(t=t||this._getImageLines(n),this._findCrossPoints(e,t));return 0!==s&&s%2==1},isOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,e).some((function(e){return e.x<=i.x&&e.x>=t.x&&e.y<=i.y&&e.y>=t.y}))||!!this.intersectsWithRect(t,i,!0,e)||this._containsCenterOfCanvas(t,i,e)},_containsCenterOfCanvas:function(e,t,i){var r={x:(e.x+t.x)/2,y:(e.y+t.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(t,i,!0,e)||this.getCoords(!0,e).every((function(e){return(e.x>=i.x||e.x<=t.x)&&(e.y>=i.y||e.y<=t.y)}))&&this._containsCenterOfCanvas(t,i,e)},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var i,r,n,s=0;for(var o in t)if(!((n=t[o]).o.y=e.y&&n.d.y>=e.y||(n.o.x===n.d.x&&n.o.x>=e.x?r=n.o.x:(i=(n.d.y-n.o.y)/(n.d.x-n.o.x),r=-(e.y-0*e.x-(n.o.y-i*n.o.x))/(0-i)),r>=e.x&&(s+=1),2!==s)))break;return s},getBoundingRect:function(t,i){var r=this.getCoords(t,i);return e.makeBoundingBoxFromPoints(r)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(e){return Math.abs(e)\n')}},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(e),{reviver:e})},toClipPathSVG:function(e){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(e),{reviver:e})},_createBaseClipPathSVGMarkup:function(e,t){var i=(t=t||{}).reviver,r=t.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=e.indexOf("COMMON_PARTS");return e[s]=n,i?i(e.join("")):e.join("")},_createBaseSVGMarkup:function(e,t){var i,r,n=(t=t||{}).noStyle,s=t.reviver,o=n?"":'style="'+this.getSvgStyles()+'" ',a=t.withShadow?'style="'+this.getSvgFilter()+'" ':"",l=this.clipPath,h=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=l&&l.absolutePositioned,u=this.stroke,d=this.fill,f=this.shadow,g=[],_=e.indexOf("COMMON_PARTS"),p=t.additionalTransform;return l&&(l.clipPathId="CLIPPATH_"+x.Object.__uid++,r='\n'+l.toClipPathSVG(s)+"\n"),c&&g.push("\n"),g.push("\n"),i=[o,h,n?"":this.addPaintOrder()," ",p?'transform="'+p+'" ':""].join(""),e[_]=i,d&&d.toLive&&g.push(d.toSVG(this)),u&&u.toLive&&g.push(u.toSVG(this)),f&&g.push(f.toSVG(this)),l&&g.push(r),g.push(e.join("")),g.push("\n"),c&&g.push("\n"),s?s(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var e=x.util.object.extend,t="stateProperties";function i(t,i,r){var n={};r.forEach((function(e){n[e]=t[e]})),e(t[i],n,!0)}function r(e,t,i){if(e===t)return!0;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(var n=0,s=e.length;n=0;l--)if(n=a[l],this.isControlVisible(n)&&(r=this._getImageLines(t?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:s,y:o},r))&&i%2==1))return this.__corner=n,n;return!1},forEachControl:function(e){for(var t in this.controls)e(this.controls[t],t,this)},_setCornerCoords:function(){var e=this.oCoords;for(var t in e){var i=this.controls[t];e[t].corner=i.calcCornerCoords(this.angle,this.cornerSize,e[t].x,e[t].y,!1),e[t].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,e[t].x,e[t].y,!0)}},drawSelectionBackground:function(t){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;t.save();var i=this.getCenterPoint(),r=this._calculateCurrentDimensions(),n=this.canvas.viewportTransform;return t.translate(i.x,i.y),t.scale(1/n[0],1/n[3]),t.rotate(e(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-r.x/2,-r.y/2,r.x,r.y),t.restore(),this},drawBorders:function(e,t){t=t||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,n=i.x+r,s=i.y+r,o=void 0!==t.hasControls?t.hasControls:this.hasControls,a=!1;return e.save(),e.strokeStyle=t.borderColor||this.borderColor,this._setLineDash(e,t.borderDashArray||this.borderDashArray),e.strokeRect(-n/2,-s/2,n,s),o&&(e.beginPath(),this.forEachControl((function(t,i,r){t.withConnection&&t.getVisibility(r,i)&&(a=!0,e.moveTo(t.x*n,t.y*s),e.lineTo(t.x*n+t.offsetX,t.y*s+t.offsetY))})),a&&e.stroke()),e.restore(),this},drawBordersInGroup:function(e,t,i){i=i||{};var r=x.util.sizeAfterTransform(this.width,this.height,t),n=this.strokeWidth,s=this.strokeUniform,o=this.borderScaleFactor,a=r.x+n*(s?this.canvas.getZoom():t.scaleX)+o,l=r.y+n*(s?this.canvas.getZoom():t.scaleY)+o;return e.save(),this._setLineDash(e,i.borderDashArray||this.borderDashArray),e.strokeStyle=i.borderColor||this.borderColor,e.strokeRect(-a/2,-l/2,a,l),e.restore(),this},drawControls:function(e,t){t=t||{},e.save();var i,r,n=this.canvas.getRetinaScaling();return e.setTransform(n,0,0,n,0,0),e.strokeStyle=e.fillStyle=t.cornerColor||this.cornerColor,this.transparentCorners||(e.strokeStyle=t.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(e,t.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl((function(n,s,o){r=o.oCoords[s],n.getVisibility(o,s)&&(i&&(r=x.util.transformPoint(r,i)),n.render(e,r.x,r.y,t,o))})),e.restore(),this},isControlVisible:function(e){return this.controls[e]&&this.controls[e].getVisibility(this,e)},setControlVisible:function(e,t){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[e]=t,this},setControlsVisibility:function(e){for(var t in e||(e={}),e)this.setControlVisible(t,e[t]);return this},onDeselect:function(){},onSelect:function(){}})}(),x.util.object.extend(x.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxCenterObjectV:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxRemove:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(t){e.set("opacity",t),s.requestRenderAll(),n()},onComplete:function(){s.remove(e),r()}})}}),x.util.object.extend(x.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var e,t,i=[],r=[];for(e in arguments[0])i.push(e);for(var n=0,s=i.length;n-1||n&&s.colorProperties.indexOf(n[1])>-1,a=n?this.get(n[0])[n[1]]:this.get(e);"from"in i||(i.from=a),o||(t=~t.indexOf("=")?a+parseFloat(t.replace("=","")):parseFloat(t));var l={target:this,startValue:i.from,endValue:t,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(e,t,r){return i.abort.call(s,e,t,r)},onChange:function(t,o,a){n?s[n[0]][n[1]]=t:s.set(e,t),r||i.onChange&&i.onChange(t,o,a)},onComplete:function(e,t,n){r||(s.setCoords(),i.onComplete&&i.onComplete(e,t,n))}};return o?x.util.animateColor(l.startValue,l.endValue,l.duration,l):x.util.animate(l)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n={x1:1,x2:1,y1:1,y2:1};function s(e,t){var i=e.origin,r=e.axis1,n=e.axis2,s=e.dimension,o=t.nearest,a=t.center,l=t.farthest;return function(){switch(this.get(i)){case o:return Math.min(this.get(r),this.get(n));case a:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case l:return Math.max(this.get(r),this.get(n))}}}t.Line?t.warn("fabric.Line is already defined"):(t.Line=t.util.createClass(t.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:t.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(e,t){e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,t){return this.callSuper("_set",e,t),void 0!==n[e]&&this._setWidthHeight(),this},_getLeftToOriginX:s({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:s({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e){e.beginPath();var t=this.calcLinePoints();e.moveTo(t.x1,t.y1),e.lineTo(t.x2,t.y2),e.lineWidth=this.strokeWidth;var i=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(e){return i(this.callSuper("toObject",e),this.calcLinePoints())},_getNonTransformedDimensions:function(){var e=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(e.y-=this.strokeWidth),0===this.height&&(e.x-=this.strokeWidth)),e},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,t=this.y1<=this.y2?-1:1,i=e*this.width*.5,r=t*this.height*.5;return{x1:i,x2:e*this.width*-.5,y1:r,y2:t*this.height*-.5}},_toSVG:function(){var e=this.calcLinePoints();return["\n']}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r,n){n=n||{};var s=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];r(new t.Line(o,i(s,n)))},t.Line.fromObject=function(e,i){var n=r(e,!0);n.points=[e.x1,e.y1,e.x2,e.y2],t.Object._fromObject("Line",n,(function(e){delete e.points,i&&i(e)}),"points")})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians;t.Circle?t.warn("fabric.Circle is already defined."):(t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:t.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(e,t){return this.callSuper("_set",e,t),"radius"===e&&this.setRadius(t),this},toObject:function(e){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(e))},_toSVG:function(){var e,r=(this.endAngle-this.startAngle)%360;if(0===r)e=["\n'];else{var n=i(this.startAngle),s=i(this.endAngle),o=this.radius;e=['180?"1":"0")+" 1"," "+t.util.cos(s)*o+" "+t.util.sin(s)*o,'" ',"COMMON_PARTS"," />\n"]}return e},_render:function(e){e.beginPath(),e.arc(0,0,this.radius,i(this.startAngle),i(this.endAngle),!1),this._renderPaintInOrder(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){return this.radius=e,this.set("width",2*e).set("height",2*e)}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,i){var r,n=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!("radius"in(r=n)&&r.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,i(new t.Circle(n))},t.Circle.fromObject=function(e,i){t.Object._fromObject("Circle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={});t.Triangle?t.warn("fabric.Triangle is already defined"):(t.Triangle=t.util.createClass(t.Object,{type:"triangle",width:100,height:100,_render:function(e){var t=this.width/2,i=this.height/2;e.beginPath(),e.moveTo(-t,i),e.lineTo(0,-i),e.lineTo(t,i),e.closePath(),this._renderPaintInOrder(e)},_toSVG:function(){var e=this.width/2,t=this.height/2;return["']}}),t.Triangle.fromObject=function(e,i){return t.Object._fromObject("Triangle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=2*Math.PI;t.Ellipse?t.warn("fabric.Ellipse is already defined."):(t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this.set("rx",e&&e.rx||0),this.set("ry",e&&e.ry||0)},_set:function(e,t){switch(this.callSuper("_set",e,t),e){case"rx":this.rx=t,this.set("width",2*t);break;case"ry":this.ry=t,this.set("height",2*t)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']},_render:function(e){e.beginPath(),e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(0,0,this.rx,0,i,!1),e.restore(),this._renderPaintInOrder(e)}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,i){var r=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new t.Ellipse(r))},t.Ellipse.fromObject=function(e,i){t.Object._fromObject("Ellipse",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend;t.Rect?t.warn("fabric.Rect is already defined"):(t.Rect=t.util.createClass(t.Object,{stateProperties:t.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==t||0!==i,l=.4477152502;e.beginPath(),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-l*t,o,s+r,o+l*i,s+r,o+i),e.lineTo(s+r,o+n-i),a&&e.bezierCurveTo(s+r,o+n-l*i,s+r-l*t,o+n,s+r-t,o+n),e.lineTo(s+t,o+n),a&&e.bezierCurveTo(s+l*t,o+n,s,o+n-l*i,s,o+n-i),e.lineTo(s,o+i),a&&e.bezierCurveTo(s,o+l*i,s+l*t,o,s+t,o),e.closePath(),this._renderPaintInOrder(e)},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r,n){if(!e)return r(null);n=n||{};var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.height=s.height||0,s.width=s.width||0;var o=new t.Rect(i(n?t.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},t.Rect.fromObject=function(e,i){return t.Object._fromObject("Rect",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.array.min,n=t.util.array.max,s=t.util.toFixed,o=t.util.projectStrokeOnPoints;t.Polyline?t.warn("fabric.Polyline is already defined"):(t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:t.Object.prototype.cacheProperties.concat("points"),initialize:function(e,t){t=t||{},this.points=e||[],this.callSuper("initialize",t),this._setPositionDimensions(t)},_projectStrokeOnPoints:function(){return o(this.points,this,!0)},_setPositionDimensions:function(e){var t,i=this._calcDimensions(e),r=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-r,this.height=i.height-r,e.fromSVG||(t=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+r/2,y:i.top-this.strokeWidth/2+r/2},"left","top",this.originX,this.originY)),void 0===e.left&&(this.left=e.fromSVG?i.left:t.x),void 0===e.top&&(this.top=e.fromSVG?i.top:t.y),this.pathOffset={x:i.left+this.width/2+r/2,y:i.top+this.height/2+r/2}},_calcDimensions:function(){var e=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,t=r(e,"x")||0,i=r(e,"y")||0;return{left:t,top:i,width:(n(e,"x")||0)-t,height:(n(e,"y")||0)-i}},toObject:function(e){return i(this.callSuper("toObject",e),{points:this.points.concat()})},_toSVG:function(){for(var e=[],i=this.pathOffset.x,r=this.pathOffset.y,n=t.Object.NUM_FRACTION_DIGITS,o=0,a=this.points.length;o\n']},commonRender:function(e){var t,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;e.beginPath(),e.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(e){return n(this.callSuper("toObject",e),{path:this.path.map((function(e){return e.slice()}))})},toDatalessObject:function(e){var t=this.toObject(["sourcePath"].concat(e));return t.sourcePath&&delete t.path,t},_toSVG:function(){return["\n"]},_getOffsetTransform:function(){var e=t.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,e)+", "+o(-this.pathOffset.y,e)+")"},toClipPathSVG:function(e){var t=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},toSVG:function(e){var t=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var e,n,s=[],o=[],a=0,l=0,h=0,c=0,u=0,d=this.path.length;u"},addWithUpdate:function(e){var i=!!this.group;return this._restoreObjectsState(),t.util.resetObjectTransform(this),e&&(i&&t.util.removeTransformFromObject(e,this.group.calcTransformMatrix()),this._objects.push(e),e.group=this,e._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),t.util.resetObjectTransform(this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(e){this.dirty=!0,e.group=this,e._set("canvas",this.canvas)},_onObjectRemoved:function(e){this.dirty=!0,delete e.group},_set:function(e,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(e,i);if("canvas"===e)for(;r--;)this._objects[r]._set(e,i);t.Object.prototype._set.call(this,e,i)},toObject:function(e){var i=this.includeDefaultValues,r=this._objects.filter((function(e){return!e.excludeFromExport})).map((function(t){var r=t.includeDefaultValues;t.includeDefaultValues=i;var n=t.toObject(e);return t.includeDefaultValues=r,n})),n=t.Object.prototype.toObject.call(this,e);return n.objects=r,n},toDatalessObject:function(e){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map((function(t){var i=t.includeDefaultValues;t.includeDefaultValues=n;var r=t.toDatalessObject(e);return t.includeDefaultValues=i,r}))}var s=t.Object.prototype.toDatalessObject.call(this,e);return s.objects=i,s},render:function(e){this._transformDone=!0,this.callSuper("render",e),this._transformDone=!1},shouldCache:function(){var e=t.Object.prototype.shouldCache.call(this);if(e)for(var i=0,r=this._objects.length;i\n"],i=0,r=this._objects.length;i\n"),t},getSvgStyles:function(){var e=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",t=this.visible?"":" visibility: hidden;";return[e,this.getSvgFilter(),t].join("")},toClipPathSVG:function(e){for(var t=[],i=0,r=this._objects.length;i"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(e,t,i){e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",e,t),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;r\n','\t\n',"\n"),o=' clip-path="url(#imageCrop_'+l+')" '}if(this.imageSmoothing||(a='" image-rendering="optimizeSpeed'),i.push("\t\n"),this.stroke||this.strokeDashArray){var h=this.fill;this.fill=null,e=["\t\n'],this.fill=h}return"fill"!==this.paintFirst?t.concat(e,i):t.concat(i,e)},getSrc:function(e){var t=e?this._element:this._originalElement;return t?t.toDataURL?t.toDataURL():this.srcFromAttribute?t.getAttribute("src"):t.src:this.src||""},setSrc:function(e,t,i){return x.util.loadImage(e,(function(e,r){this.setElement(e,i),this._setWidthHeight(),t&&t(this,r)}),this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var e=this.resizeFilter,t=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!e||r>t&&n>t)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);x.filterBackend||(x.filterBackend=x.initFilterBackend());var o=x.util.createCanvasElement(),a=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,l=s.width,h=s.height;o.width=l,o.height=h,this._element=o,this._lastScaleX=e.scaleX=r,this._lastScaleY=e.scaleY=n,x.filterBackend.applyFilters([e],s,l,h,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(e){if(e=(e=e||this.filters||[]).filter((function(e){return e&&!e.isNeutralState()})),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===e.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var t=this._originalElement,i=t.naturalWidth||t.width,r=t.naturalHeight||t.height;if(this._element===this._originalElement){var n=x.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return x.filterBackend||(x.filterBackend=x.initFilterBackend()),x.filterBackend.applyFilters(e,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(e),this._renderPaintInOrder(e)},drawCacheOnCanvas:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),x.Object.prototype.drawCacheOnCanvas.call(this,e)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(e){var t=this._element;if(t){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,s=this.height,o=Math.min,a=Math.max,l=a(this.cropX,0),h=a(this.cropY,0),c=t.naturalWidth||t.width,u=t.naturalHeight||t.height,d=l*i,f=h*r,g=o(n*i,c-d),_=o(s*r,u-f),p=-n/2,m=-s/2,v=o(n,c/i-l),y=o(s,u/r-h);t&&e.drawImage(t,d,f,g,_,p,m,v,y)}},_needsResize:function(){var e=this.getTotalObjectScaling();return e.scaleX!==this._lastScaleX||e.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(e,t){this.setElement(x.util.getById(e),t),x.util.addClass(this.getElement(),x.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e,t){e&&e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){e||(e={});var t=this.getElement();this.width=e.width||t.naturalWidth||t.width||0,this.height=e.height||t.naturalHeight||t.height||0},parsePreserveAspectRatioAttribute:function(){var e,t=x.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,l=0,h=0,c=this.width,u=this.height,d={width:c,height:u};return!t||"none"===t.alignX&&"none"===t.alignY?(n=c/i,s=u/r):("meet"===t.meetOrSlice&&(e=(c-i*(n=s=x.util.findScaleToFit(this._element,d)))/2,"Min"===t.alignX&&(o=-e),"Max"===t.alignX&&(o=e),e=(u-r*s)/2,"Min"===t.alignY&&(a=-e),"Max"===t.alignY&&(a=e)),"slice"===t.meetOrSlice&&(e=i-c/(n=s=x.util.findScaleToCover(this._element,d)),"Mid"===t.alignX&&(l=e/2),"Max"===t.alignX&&(l=e),e=r-u/s,"Mid"===t.alignY&&(h=e/2),"Max"===t.alignY&&(h=e),i=c/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:l,cropY:h}}}),x.Image.CSS_CANVAS="canvas-img",x.Image.prototype.getSvgSrc=x.Image.prototype.getSrc,x.Image.fromObject=function(e,t){var i=x.util.object.clone(e);x.util.loadImage(i.src,(function(e,r){r?t&&t(null,!0):x.Image.prototype._initFilters.call(i,i.filters,(function(r){i.filters=r||[],x.Image.prototype._initFilters.call(i,[i.resizeFilter],(function(r){i.resizeFilter=r[0],x.util.enlivenObjectEnlivables(i,i,(function(){var r=new x.Image(e,i);t(r,!1)}))}))}))}),null,i.crossOrigin)},x.Image.fromURL=function(e,t,i){x.util.loadImage(e,(function(e,r){t&&t(new x.Image(e,i),r)}),null,i&&i.crossOrigin)},x.Image.ATTRIBUTE_NAMES=x.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),x.Image.fromElement=function(e,i,r){var n=x.parseAttributes(e,x.Image.ATTRIBUTE_NAMES);x.Image.fromURL(n["xlink:href"],i,t(r?x.util.object.clone(r):{},n))})}(t),x.util.object.extend(x.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.angle%360;return e>0?90*Math.round((e-1)/90):90*Math.round(e/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(e){var t=function(){},i=(e=e||{}).onComplete||t,r=e.onChange||t,n=this;return x.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){n.rotate(e),r()},onComplete:function(){n.setCoords(),i()}})}}),x.util.object.extend(x.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function e(e,t){var i="precision "+t+" float;\nvoid main(){}",r=e.createShader(e.FRAGMENT_SHADER);return e.shaderSource(r,i),e.compileShader(r),!!e.getShaderParameter(r,e.COMPILE_STATUS)}function t(e){e&&e.tileSize&&(this.tileSize=e.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}x.isWebglSupported=function(t){if(x.isLikelyNode)return!1;t=t||x.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){x.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=x.maxTextureSize>=t;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(e(r,s[o])){x.webGlPrecision=s[o];break}}return this.isSupported=n,n},x.WebglFilterBackend=t,t.prototype={tileSize:2048,resources:{},setupGLContext:function(e,t){this.dispose(),this.createWebGLCanvas(e,t),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(e,t)},chooseFastestCopyGLTo2DMethod:function(e,t){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(e){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o=x.util.createCanvasElement(),a=new ArrayBuffer(e*t*4);if(x.forceGLPutImageData)return this.imageBuffer=a,void(this.copyGLTo2D=I);var l,h,c={imageBuffer:a,destinationWidth:e,destinationHeight:t,targetCanvas:o};o.width=e,o.height=t,l=window.performance.now(),E.call(c,this.gl,c),h=window.performance.now()-l,l=window.performance.now(),I.call(c,this.gl,c),h>window.performance.now()-l?(this.imageBuffer=a,this.copyGLTo2D=I):this.copyGLTo2D=E}},createWebGLCanvas:function(e,t){var i=x.util.createCanvasElement();i.width=e,i.height=t;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(e,t,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,t));var l={originalWidth:t.width||t.originalWidth,originalHeight:t.height||t.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&t),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&t),passes:e.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},h=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,h),e.forEach((function(e){e&&e.applyTo(l)})),function(e){var t=e.targetCanvas,i=t.width,r=t.height,n=e.destinationWidth,s=e.destinationHeight;i===n&&r===s||(t.width=n,t.height=s)}(l),this.copyGLTo2D(a,l),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(l.sourceTexture),a.deleteTexture(l.targetTexture),a.deleteFramebuffer(h),n.getContext("2d").setTransform(1,0,0,1,0,0),l},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(e,t,i,r){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),r?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,t,i,0,e.RGBA,e.UNSIGNED_BYTE,null),n},getCachedTexture:function(e,t){if(this.textureCache[e])return this.textureCache[e];var i=this.createTexture(this.gl,t.width,t.height,t);return this.textureCache[e]=i,i},evictCachesForKey:function(e){this.textureCache[e]&&(this.gl.deleteTexture(this.textureCache[e]),delete this.textureCache[e])},copyGLTo2D:E,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var e=this.gl,t={renderer:"",vendor:""};if(!e)return t;var i=e.getExtension("WEBGL_debug_renderer_info");if(i){var r=e.getParameter(i.UNMASKED_RENDERER_WEBGL),n=e.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(t.renderer=r.toLowerCase()),n&&(t.vendor=n.toLowerCase())}return this.gpuInfo=t,t}}}(),function(){var e=function(){};function t(){}x.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(e,t,i,r,n){var s=n.getContext("2d");s.drawImage(t,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:t,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return e.forEach((function(e){e.applyTo(o)})),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),x.Image=x.Image||{},x.Image.filters=x.Image.filters||{},x.Image.filters.BaseFilter=x.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(e){e&&this.setOptions(e)},setOptions:function(e){for(var t in e)this[t]=e[t]},createProgram:function(e,t,i){t=t||this.fragmentSource,i=i||this.vertexSource,"highp"!==x.webGlPrecision&&(t=t.replace(/precision highp float/g,"precision "+x.webGlPrecision+" float"));var r=e.createShader(e.VERTEX_SHADER);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+e.getShaderInfoLog(r));var n=e.createShader(e.FRAGMENT_SHADER);if(e.shaderSource(n,t),e.compileShader(n),!e.getShaderParameter(n,e.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+e.getShaderInfoLog(n));var s=e.createProgram();if(e.attachShader(s,r),e.attachShader(s,n),e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+e.getProgramInfoLog(s));var o=this.getAttributeLocations(e,s),a=this.getUniformLocations(e,s)||{};return a.uStepW=e.getUniformLocation(s,"uStepW"),a.uStepH=e.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(e,t){return{aPosition:e.getAttribLocation(t,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(e,t,i){var r=t.aPosition,n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,2,e.FLOAT,!1,0,0),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW)},_setupFrameBuffer:function(e){var t,i,r=e.context;e.passes>1?(t=e.destinationWidth,i=e.destinationHeight,e.sourceWidth===t&&e.sourceHeight===i||(r.deleteTexture(e.targetTexture),e.targetTexture=e.filterBackend.createTexture(r,t,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(e){e.passes--,e.pass++;var t=e.targetTexture;e.targetTexture=e.sourceTexture,e.sourceTexture=t},isNeutralState:function(){var e=this.mainParameter,t=x.Image.filters[this.type].prototype;if(e){if(Array.isArray(t[e])){for(var i=t[e].length;i--;)if(this[e][i]!==t[e][i])return!1;return!0}return t[e]===this[e]}return!1},applyTo:function(e){e.webgl?(this._setupFrameBuffer(e),this.applyToWebGL(e),this._swapTextures(e)):this.applyTo2d(e)},retrieveShader:function(e){return e.programCache.hasOwnProperty(this.type)||(e.programCache[this.type]=this.createProgram(e.context)),e.programCache[this.type]},applyToWebGL:function(e){var t=e.context,i=this.retrieveShader(e);0===e.pass&&e.originalTexture?t.bindTexture(t.TEXTURE_2D,e.originalTexture):t.bindTexture(t.TEXTURE_2D,e.sourceTexture),t.useProgram(i.program),this.sendAttributeData(t,i.attributeLocations,e.aPosition),t.uniform1f(i.uniformLocations.uStepW,1/e.sourceWidth),t.uniform1f(i.uniformLocations.uStepH,1/e.sourceHeight),this.sendUniformData(t,i.uniformLocations),t.viewport(0,0,e.destinationWidth,e.destinationHeight),t.drawArrays(t.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(e,t,i){e.activeTexture(i),e.bindTexture(e.TEXTURE_2D,t),e.activeTexture(e.TEXTURE0)},unbindAdditionalTexture:function(e,t){e.activeTexture(t),e.bindTexture(e.TEXTURE_2D,null),e.activeTexture(e.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(e){this[this.mainParameter]=e},sendUniformData:function(){},createHelpLayer:function(e){if(!e.helpLayer){var t=document.createElement("canvas");t.width=e.sourceWidth,t.height=e.sourceHeight,e.helpLayer=t}},toObject:function(){var e={type:this.type},t=this.mainParameter;return t&&(e[t]=this[t]),e},toJSON:function(){return this.toObject()}}),x.Image.filters.BaseFilter.fromObject=function(e,t){var i=new x.Image.filters[e.type](e);return t&&t(i),i},function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(e){this.callSuper("initialize",e),this.matrix=this.matrix.slice(0)},applyTo2d:function(e){var t,i,r,n,s,o=e.imageData.data,a=o.length,l=this.matrix,h=this.colorsOnly;for(s=0;s=S||o<0||o>=y||(l=4*(a*y+o),h=p[f*m+d],t+=_[l]*h,i+=_[l+1]*h,r+=_[l+2]*h,C||(n+=_[l+3]*h));w[s]=t,w[s+1]=i,w[s+2]=r,w[s+3]=C?_[s+3]:n}e.imageData=b},getUniformLocations:function(e,t){return{uMatrix:e.getUniformLocation(t,"uMatrix"),uOpaque:e.getUniformLocation(t,"uOpaque"),uHalfSize:e.getUniformLocation(t,"uHalfSize"),uSize:e.getUniformLocation(t,"uSize")}},sendUniformData:function(e,t){e.uniform1fv(t.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(e){var t,i,r=e.imageData.data,n=r.length,s=this.mode;for(t=0;th[0]&&n>h[1]&&s>h[2]&&r 0.0) {\n"+this.fragmentSource[e]+"}\n}"},retrieveShader:function(e){var t,i=this.type+"_"+this.mode;return e.programCache.hasOwnProperty(i)||(t=this.buildSource(this.mode),e.programCache[i]=this.createProgram(e.context,t)),e.programCache[i]},applyTo2d:function(e){var i,r,n,s,o,a,l,h=e.imageData.data,c=h.length,u=1-this.alpha;i=(l=new t.Color(this.color).getSource())[0]*this.alpha,r=l[1]*this.alpha,n=l[2]*this.alpha;for(var d=0;d=e||t<=-e)return 0;if(t<1.1920929e-7&&t>-1.1920929e-7)return 1;var i=(t*=Math.PI)/e;return a(t)/t*a(i)/i}},applyTo2d:function(e){var t=e.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=t.width,a=t.height,l=o(s*i),h=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(e,s,a,l,h):"hermite"===this.resizeType?n=this.hermiteFastResize(e,s,a,l,h):"bilinear"===this.resizeType?n=this.bilinearFiltering(e,s,a,l,h):"lanczos"===this.resizeType&&(n=this.lanczosResize(e,s,a,l,h)),e.imageData=n},sliceByTwo:function(e,i,n,s,o){var a,l,h=e.imageData,c=.5,u=!1,d=!1,f=i*c,g=n*c,_=t.filterBackend.resources,p=0,m=0,v=i,y=0;for(_.sliceByTwo||(_.sliceByTwo=document.createElement("canvas")),((a=_.sliceByTwo).width<1.5*i||a.height=t)){M=r(1e3*s(x-b.x)),S[M]||(S[M]={});for(var L=w.y-y;L<=w.y+y;L++)L<0||L>=o||(F=r(1e3*s(L-b.y)),S[M][F]||(S[M][F]=f(n(i(M*p,2)+i(F*m,2))/1e3)),(T=S[M][F])>0&&(I+=T,O+=T*c[E=4*(L*t+x)],A+=T*c[E+1],R+=T*c[E+2],D+=T*c[E+3]))}d[E=4*(C*a+l)]=O/I,d[E+1]=A/I,d[E+2]=R/I,d[E+3]=D/I}return++l1&&F<-1||(y=2*F*F*F-3*F*F+1)>0&&(T+=y*f[3+(M=4*(D+I*t))],b+=y,f[M+3]<255&&(y=y*f[M+3]/250),w+=y*f[M],C+=y*f[M+1],x+=y*f[M+2],S+=y)}_[v]=w/S,_[v+1]=C/S,_[v+2]=x/S,_[v+3]=T/b}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),t.Image.filters.Resize.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(e){if(0!==this.contrast){var t,i=e.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));for(t=0;t1&&(t=1/this.aspectRatio):this.aspectRatio<1&&(t=this.aspectRatio),e=t*this.blur*.12,this.horizontal?i[0]=e:i[1]=e,i}}),i.Blur.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(e){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,e)},applyTo2d:function(e){var t,i=e.imageData.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),t=0,n=256;t'},_getCacheCanvasDimensions:function(){var e=this.callSuper("_getCacheCanvasDimensions"),t=this.fontSize;return e.width+=t*e.zoomX,e.height+=t*e.zoomY,e},_render:function(e){var t=this.path;t&&!t.isNotVisible()&&t._render(e),this._setTextStyles(e),this._renderTextLinesBackground(e),this._renderTextDecoration(e,"underline"),this._renderText(e),this._renderTextDecoration(e,"overline"),this._renderTextDecoration(e,"linethrough")},_renderText:function(e){"stroke"===this.paintFirst?(this._renderTextStroke(e),this._renderTextFill(e)):(this._renderTextFill(e),this._renderTextStroke(e))},_setTextStyles:function(e,t,i){if(e.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":e.textBaseline="middle";break;case"ascender":e.textBaseline="top";break;case"descender":e.textBaseline="bottom"}e.font=this._getFontDeclaration(t,i)},calcTextWidth:function(){for(var e=this.getLineWidth(0),t=1,i=this._textLines.length;te&&(e=r)}return e},_renderTextLine:function(e,t,i,r,n,s){this._renderChars(e,t,i,r,n,s)},_renderTextLinesBackground:function(e){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var t,i,r,n,s,o,a,l=e.fillStyle,h=this._getLeftOffset(),c=this._getTopOffset(),u=0,d=0,f=this.path,g=0,_=this._textLines.length;g<_;g++)if(t=this.getHeightOfLine(g),this.textBackgroundColor||this.styleHas("textBackgroundColor",g)){r=this._textLines[g],i=this._getLineLeftOffset(g),d=0,u=0,n=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var p=0,m=r.length;p=0:ia?u%=a:u<0&&(u+=a),this._setGraphemeOnPath(u,s,o),u+=s.kernedWidth}return{width:l,numOfSpaces:0}},_setGraphemeOnPath:function(e,i,r){var n=e+i.kernedWidth/2,s=this.path,o=t.util.getPointOnPath(s.path,n,s.segmentsInfo);i.renderLeft=o.x-r.x,i.renderTop=o.y-r.y,i.angle=o.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(e,t,i,r,n){var s,o=this.getCompleteStyleDeclaration(t,i),a=r?this.getCompleteStyleDeclaration(t,i-1):{},l=this._measureChar(e,o,r,a),h=l.kernedWidth,c=l.width;0!==this.charSpacing&&(c+=s=this._getWidthOfCharSpacing(),h+=s);var u={width:c,left:0,height:o.fontSize,kernedWidth:h,deltaY:o.deltaY};if(i>0&&!n){var d=this.__charBounds[t][i-1];u.left=d.left+d.width+l.kernedWidth-l.width}return u},getHeightOfLine:function(e){if(this.__lineHeights[e])return this.__lineHeights[e];for(var t=this._textLines[e],i=this.getHeightOfChar(e,0),r=1,n=t.length;r0){var I=v+s+u;"rtl"===this.direction&&(I=this.width-I-d),h&&m&&(e.fillStyle=m,e.fillRect(I,c+w*r+o,d,this.fontSize/15)),u=f.left,d=f.width,h=g,m=p,r=n,o=a}else d+=f.kernedWidth;I=v+s+u,"rtl"===this.direction&&(I=this.width-I-d),e.fillStyle=p,g&&p&&e.fillRect(I,c+w*r+o,d-b,this.fontSize/15),y+=i}else y+=i;this._removeShadow(e)}},_getFontDeclaration:function(e,i){var r=e||this,n=this.fontFamily,s=t.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||s?r.fontFamily:'"'+r.fontFamily+'"';return[t.isLikelyNode?r.fontWeight:r.fontStyle,t.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",e)))},_splitTextIntoLines:function(e){for(var i=e.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-1&&(e.underline=!0),e.textDecoration.indexOf("line-through")>-1&&(e.linethrough=!0),e.textDecoration.indexOf("overline")>-1&&(e.overline=!0),delete e.textDecoration)}x.IText=x.util.createClass(x.Text,x.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(e,t){this.callSuper("initialize",e,t),this.initBehavior()},setSelectionStart:function(e){e=Math.max(e,0),this._updateAndFire("selectionStart",e)},setSelectionEnd:function(e){e=Math.min(e,this.text.length),this._updateAndFire("selectionEnd",e)},_updateAndFire:function(e,t){this[e]!==t&&(this._fireSelectionChanged(),this[e]=t),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(e){this.clearContextTop(),this.callSuper("render",e),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(e){this.callSuper("_render",e)},clearContextTop:function(e){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this.canvas.contextTop,i=this.canvas.viewportTransform;t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(t),this._clearTextArea(t),e||t.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this._getCursorBoundaries(),t=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(e){var t=this.width+4,i=this.height+4;e.clearRect(-t/2,-i/2,t,i)},_getCursorBoundaries:function(e){void 0===e&&(e=this.selectionStart);var t=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(e);return{left:t,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(e){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var t,i,r,n,s=0,o=0,a=this.get2DCursorLocation(e);r=a.charIndex,i=a.lineIndex;for(var l=0;l0?o:0)},"rtl"===this.direction&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(e,t){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,l=e.topOffset,h=this.getValueOfPropertyAt(r,n,"deltaY");l+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(e,t),t.fillStyle=this.cursorColor||this.getValueOfPropertyAt(r,n,"fill"),t.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,t.fillRect(e.left+e.leftOffset-a/2,l+e.top+h,a,s)},renderSelection:function(e,t){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,l=o.lineIndex,h=s.charIndex<0?0:s.charIndex,c=o.charIndex<0?0:o.charIndex,u=a;u<=l;u++){var d,f=this._getLineLeftOffset(u)||0,g=this.getHeightOfLine(u),_=0,p=0;if(u===a&&(_=this.__charBounds[a][h].left),u>=a&&u1)&&(g/=this.lineHeight);var v=e.left+f+_,y=p-_,S=g,b=0;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",S=1,b=g):t.fillStyle=this.selectionColor,"rtl"===this.direction&&(v=this.width-v-y),t.fillRect(v,e.top+e.topOffset+b,y,S),e.topOffset+=d}},getCurrentCharFontSize:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fontSize")},getCurrentCharColor:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fill")},_getCurrentCharIndex:function(){var e=this.get2DCursorLocation(this.selectionStart,!0),t=e.charIndex>0?e.charIndex-1:0;return{l:e.lineIndex,c:t}}}),x.IText.fromObject=function(t,i){if(e(t),t.styles)for(var r in t.styles)for(var n in t.styles[r])e(t.styles[r][n]);x.Object._fromObject("IText",t,i,"text")}}(),C=x.util.object.clone,x.util.object.extend(x.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var e=this;this.on("added",(function(){var t=e.canvas;t&&(t._hasITextHandlers||(t._hasITextHandlers=!0,e._initCanvasHandlers(t)),t._iTextInstances=t._iTextInstances||[],t._iTextInstances.push(e))}))},initRemovedHandler:function(){var e=this;this.on("removed",(function(){var t=e.canvas;t&&(t._iTextInstances=t._iTextInstances||[],x.util.removeFromArray(t._iTextInstances,e),0===t._iTextInstances.length&&(t._hasITextHandlers=!1,e._removeCanvasHandlers(t)))}))},_initCanvasHandlers:function(e){e._mouseUpITextHandler=function(){e._iTextInstances&&e._iTextInstances.forEach((function(e){e.__isMousedown=!1}))},e.on("mouse:up",e._mouseUpITextHandler)},_removeCanvasHandlers:function(e){e.off("mouse:up",e._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(e,t,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},e.animate("_currentCursorOpacity",t,{duration:i,onComplete:function(){n.isAborted||e[r]()},onChange:function(){e.canvas&&e.selectionStart===e.selectionEnd&&e.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout((function(){e._currentTickCompleteState=e._animateCursor(e,0,this.cursorDuration/2,"_tick")}),100)},initDelayedCursor:function(e){var t=this,i=e?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout((function(){t._tick()}),i)},abortCursorAnimation:function(){var e=this._currentTickState||this._currentTickCompleteState,t=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,e&&t&&t.clearContext(t.contextTop||t.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(e){var t=0,i=e-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i--;for(;/\S/.test(this._text[i])&&i>-1;)t++,i--;return e-t},findWordBoundaryRight:function(e){var t=0,i=e;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i++;for(;/\S/.test(this._text[i])&&i-1;)t++,i--;return e-t},findLineBoundaryRight:function(e){for(var t=0,i=e;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=t):(this.selectionStart=t,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(e,t,i){var r=i.slice(0,e),n=x.util.string.graphemeSplit(r).length;if(e===t)return{selectionStart:n,selectionEnd:n};var s=i.slice(e,t);return{selectionStart:n,selectionEnd:n+x.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(e,t,i){var r=i.slice(0,e).join("").length;return e===t?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(e,t).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var e=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=e.selectionStart,this.hiddenTextarea.selectionEnd=e.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var e=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=e.selectionEnd,this.inCompositionMode||(this.selectionStart=e.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var e=this._calcTextareaPosition();this.hiddenTextarea.style.left=e.left,this.hiddenTextarea.style.top=e.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var e=this.inCompositionMode?this.compositionStart:this.selectionStart,t=this._getCursorBoundaries(e),i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=t.leftOffset,a=this.calcTransformMatrix(),l={x:t.left+o,y:t.top+t.topOffset+s},h=this.canvas.getRetinaScaling(),c=this.canvas.upperCanvasEl,u=c.width/h,d=c.height/h,f=u-s,g=d-s,_=c.clientWidth/u,p=c.clientHeight/d;return l=x.util.transformPoint(l,a),(l=x.util.transformPoint(l,this.canvas.viewportTransform)).x*=_,l.y*=p,l.x<0&&(l.x=0),l.x>f&&(l.x=f),l.y<0&&(l.y=0),l.y>g&&(l.y=g),l.x+=this.canvas._offset.left,l.y+=this.canvas._offset.top,{left:l.x+"px",top:l.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var e=this._textBeforeEdit!==this.text,t=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,t&&(t.blur&&t.blur(),t.parentNode&&t.parentNode.removeChild(t)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),e&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),e&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var e in this.styles)this._textLines[e]||delete this.styles[e]},removeStyleFromTo:function(e,t){var i,r,n=this.get2DCursorLocation(e,!0),s=this.get2DCursorLocation(t,!0),o=n.lineIndex,a=n.charIndex,l=s.lineIndex,h=s.charIndex;if(o!==l){if(this.styles[o])for(i=a;i=h&&(r[c-d]=r[u],delete r[u])}},shiftLineStyles:function(e,t){var i=C(this.styles);for(var r in this.styles){var n=parseInt(r,10);n>e&&(this.styles[n+t]=i[n],i[n-t]||delete this.styles[n])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,t,i,r){var n,s={},o=!1,a=this._unwrappedTextLines[e].length===t;for(var l in i||(i=1),this.shiftLineStyles(e,i),this.styles[e]&&(n=this.styles[e][0===t?t:t-1]),this.styles[e]){var h=parseInt(l,10);h>=t&&(o=!0,s[h-t]=this.styles[e][l],a&&0===t||delete this.styles[e][l])}var c=!1;for(o&&!a&&(this.styles[e+i]=s,c=!0),c&&i--;i>0;)r&&r[i-1]?this.styles[e+i]={0:C(r[i-1])}:n?this.styles[e+i]={0:C(n)}:delete this.styles[e+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(e,t,i,r){this.styles||(this.styles={});var n=this.styles[e],s=n?C(n):{};for(var o in i||(i=1),s){var a=parseInt(o,10);a>=t&&(n[a+i]=s[a],s[a-i]||delete n[a])}if(this._forceClearCache=!0,r)for(;i--;)Object.keys(r[i]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][t+i]=C(r[i]));else if(n)for(var l=n[t?t-1:1];l&&i--;)this.styles[e][t+i]=C(l)},insertNewStyleBlock:function(e,t,i){for(var r=this.get2DCursorLocation(t,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s),o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&this.styles[r.lineIndex+o]&&i[0]&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(e,t,i){i<=e?(t===e?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=e),this.selectionStart=i):i>e&&ie?this.selectionStart=e:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>e?this.selectionEnd=e:this.selectionEnd<0&&(this.selectionEnd=0)}}),x.util.object.extend(x.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(e){if(this.canvas){this.__newClickTime=+new Date;var t=e.pointer;this.isTripleClick(t)&&(this.fire("tripleclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(e){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(e.e))},tripleClickHandler:function(e){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(e.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(e.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(e){if(this.__isMousedown=!1,!(!this.editable||this.group||e.transform&&e.transform.actionPerformed||e.e.button&&1!==e.e.button)){if(this.canvas){var t=this.canvas._activeObject;if(t&&t!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(e.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e),i=this.selectionStart,r=this.selectionEnd;e.shiftKey?this.setSelectionStartEndWithShift(i,r,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(e){for(var t,i=this.getLocalPointer(e),r=0,n=0,s=0,o=0,a=0,l=0,h=this._textLines.length;l0&&(o+=this._textLines[l-1].length+this.missingNewlineOffset(l-1));n=this._getLineLeftOffset(a)*this.scaleX,t=this._textLines[a],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+n);for(var c=0,u=t.length;cs||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),x.util.object.extend(x.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=x.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var e=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+e.top+"; left: "+e.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+e.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):x.document.body.appendChild(this.hiddenTextarea),x.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),x.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),x.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),x.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(x.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(this.isEditing){var t="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(e.keyCode in t)this[t[e.keyCode]](e);else{if(!(e.keyCode in this.ctrlKeysMapDown)||!e.ctrlKey&&!e.metaKey)return;this[this.ctrlKeysMapDown[e.keyCode]](e)}e.stopImmediatePropagation(),e.preventDefault(),e.keyCode>=33&&e.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(e){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:e.keyCode in this.ctrlKeysMapUp&&(e.ctrlKey||e.metaKey)&&(this[this.ctrlKeysMapUp[e.keyCode]](e),e.stopImmediatePropagation(),e.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(e){var t=this.fromPaste;if(this.fromPaste=!1,e&&e.stopPropagation(),this.isEditing){var i,r,n,s,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,l=this._text.length,h=a.length,c=h-l,u=this.selectionStart,d=this.selectionEnd,f=u!==d;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),_=u>g.selectionStart;f?(i=this._text.slice(u,d),c+=d-u):h0&&(r+=(i=this.__charBounds[e][t-1]).left+i.width),r},getDownCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||e.metaKey||34===e.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o);return this._textLines[n].slice(s).length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(e,t){return e.shiftKey&&this.selectionStart!==this.selectionEnd&&t?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||e.metaKey||33===e.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),l=this._textLines[n].slice(0,s),h=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-l.length+(1-h)},_getIndexOnLine:function(e,t){for(var i,r,n=this._textLines[e],s=this._getLineLeftOffset(e),o=0,a=0,l=n.length;at){r=!0;var h=s-i,c=s,u=Math.abs(h-t);o=Math.abs(c-t)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",e)},moveCursorUp:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",e)},_moveCursorUpOrDown:function(e,t){var i=this["get"+e+"CursorOffset"](t,"right"===this._selectionDirection);t.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(e){var t="left"===this._selectionDirection?this.selectionStart+e:this.selectionEnd+e;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,t),0!==e},moveCursorWithoutShift:function(e){return e<0?(this.selectionStart+=e,this.selectionEnd=this.selectionStart):(this.selectionEnd+=e,this.selectionStart=this.selectionEnd),0!==e},moveCursorLeft:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",e)},_move:function(e,t,i){var r;if(e.altKey)r=this["findWordBoundary"+i](this[t]);else{if(!e.metaKey&&35!==e.keyCode&&36!==e.keyCode)return this[t]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[t])}if(void 0!==typeof r&&this[t]!==r)return this[t]=r,!0},_moveLeft:function(e,t){return this._move(e,t,"Left")},_moveRight:function(e,t){return this._move(e,t,"Right")},moveCursorLeftWithoutShift:function(e){var t=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(t=this._moveLeft(e,"selectionStart")),this.selectionEnd=this.selectionStart,t},moveCursorLeftWithShift:function(e){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(e,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(e,"selectionStart")):void 0},moveCursorRight:function(e){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",e)},_moveCursorLeftOrRight:function(e,t){var i="moveCursor"+e+"With";this._currentCursorOpacity=1,t.shiftKey?i+="Shift":i+="outShift",this[i](t)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(e){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(e,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(e){var t=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(t=this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t},removeChars:function(e,t){void 0===t&&(t=e+1),this.removeStyleFromTo(e,t),this._text.splice(e,t-e),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(e,t,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=x.util.string.graphemeSplit(e);this.insertNewStyleBlock(n,i,t),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var e=x.util.toFixed,t=/ +/g;x.util.object.extend(x.Text.prototype,{_toSVG:function(){var e=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(e.textTop,e.textLeft);return this._wrapSVGTextAndBg(t)},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(e){var t=this.getSvgTextDecoration(this);return[e.textBgRects.join(""),'\t\t",e.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(e,t){var i,r=[],n=[],s=e;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",x.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(e,t,i,r){var n,s,o,a,l,h=this.getHeightOfLine(t),c=-1!==this.textAlign.indexOf("justify"),u="",d=0,f=this._textLines[t];r+=h*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,_=f.length-1;g<=_;g++)l=g===_||this.charSpacing,u+=f[g],o=this.__charBounds[t][g],0===d?(i+=o.kernedWidth-o.width,d+=o.width):d+=o.kernedWidth,c&&!l&&this._reSpaceAndTab.test(f[g])&&(l=!0),l||(n=n||this.getCompleteStyleDeclaration(t,g),s=this.getCompleteStyleDeclaration(t,g+1),l=this._hasStyleChangedForSvg(n,s)),l&&(a=this._getStyleDeclaration(t,g)||{},e.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=d,d=0)},_pushTextBgRect:function(t,i,r,n,s,o){var a=x.Object.NUM_FRACTION_DIGITS;t.push("\t\t\n')},_setSVGTextLineBg:function(e,t,i,r){for(var n,s,o=this._textLines[t],a=this.getHeightOfLine(t)/this.lineHeight,l=0,h=0,c=this.getValueOfPropertyAt(t,0,"textBackgroundColor"),u=0,d=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(e){for(var t=0,i=0,r=0,n={},s=0;s0?(i=0,r++,t++):!this.splitByGrapheme&&this._reSpaceAndTab.test(e.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:t,offset:i},r+=e.graphemeLines[s].length,i+=e.graphemeLines[s].length;return n},styleHas:function(e,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return t.Text.prototype.styleHas.call(this,e,i)},isEmptyStyles:function(e){if(!this.styles)return!0;var t,i,r=0,n=!1,s=this._styleMap[e],o=this._styleMap[e+1];for(var a in s&&(e=s.line,r=s.offset),o&&(n=o.line===e,t=o.offset),i=void 0===e?this.styles:{line:this.styles[e]})for(var l in i[a])if(l>=r&&(!n||lr&&!p?(a.push(l),l=[],s=f,p=!0):s+=m,p||o||l.push(d),l=l.concat(c),g=o?0:this._measureWord([d],i,u),u++,p=!1,f>_&&(_=f);return v&&a.push(l),_+n>this.dynamicMinWidth&&(this.dynamicMinWidth=_-m+n),a},isEndOfWrapping:function(e){return!this._styleMap[e+1]||this._styleMap[e+1].line!==this._styleMap[e].line},missingNewlineOffset:function(e){return this.splitByGrapheme?this.isEndOfWrapping(e)?1:0:1},_splitTextIntoLines:function(e){for(var i=t.Text.prototype._splitTextIntoLines.call(this,e),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s{},898:()=>{},245:()=>{}},B={};function N(e){var t=B[e];if(void 0!==t)return t.exports;var i=B[e]={exports:{}};return k[e](i,i.exports,N),i.exports}N.d=(e,t)=>{for(var i in t)N.o(t,i)&&!N.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},N.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var j={};(()=>{let e;N.d(j,{R:()=>e}),e="undefined"!=typeof document&&"undefined"!=typeof window?N(653).fabric:{version:"5.2.1"}})();var V=j.R; /*! * Dynamsoft JavaScript Library * @product Dynamsoft Camera Enhancer JS Edition * @website https://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 3.3.8 (js 20231011) + * @version 3.3.9 (js 20231205) * @fileoverview Dynamsoft JavaScript Library for Camera Enhancer * More info on DCE JS: https://www.dynamsoft.com/camera-enhancer/docs/programming/javascript/?ver=latest - */const U="undefined"==typeof self;let G,W,H,Y,X;if("undefined"!=typeof navigator&&(G=navigator,W=G.userAgent,H=G.platform,Y=G.mediaDevices),!U){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:G.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:H,search:"Win"},Mac:{str:H},Linux:{str:H}};let i="unknownBrowser",r=0,n="unknownOS";for(let t in e){const n=e[t]||{};let s=n.str||W,o=n.search||t,a=n.verStr||W,l=n.verSearch||t;if(l instanceof Array||(l=[l]),-1!=s.indexOf(o)){i=t;for(let e of l){let t=a.indexOf(e);if(-1!=t){r=parseFloat(a.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let r=i.str||W,s=i.search||e;if(-1!=r.indexOf(s)){n=e;break}}"Linux"==n&&-1!=W.indexOf("Windows NT")&&(n="HarmonyOS"),X={browser:i,version:r,OS:n}}U&&(X={browser:"ssr",version:0,OS:"ssr"});const z="undefined"!=typeof WebAssembly&&W&&!(/Safari/.test(W)&&!/Chrome/.test(W)&&/\(.+\s11_2_([2-6]).*\)/.test(W)),Z=!("undefined"==typeof Worker),J=!(!Y||!Y.getUserMedia),K=async()=>{let e=!1;if(J)try{(await Y.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===X.browser&&X.version>66||"Safari"===X.browser&&X.version>13||"OPR"===X.browser&&X.version>43||"Edge"===X.browser&&X.version;const q=(()=>{if(!U&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})();class Q{constructor(e,t){this._zIndex=null,this._drawingLayer=null,this._drawingLayerId=null,this._mapStyle=new Map,this.mapEvent_Callbacks=new Map([["selected",new Map],["deselected",new Map],["mousedown",new Map],["mouseup",new Map],["dblclick",new Map],["mouseover",new Map],["mouseout",new Map]]),this.mapNoteName_Content=new Map([]),this.isDrawingItem=!0,this._setFabricObject(e),this._mediaType=e.type,this.styleSelector="default",this.styleId=t}get mediaType(){return this._mediaType}get drawingLayerId(){return this._drawingLayerId}_setFabricObject(e){this._fabricObject=e,this._fabricObject.on("selected",(()=>{this.styleSelector="selected"})),this._fabricObject.on("deselected",(()=>{this._fabricObject.canvas&&this._fabricObject.canvas.getActiveObjects().includes(this._fabricObject)?this.styleSelector="selected":this.styleSelector="default","textbox"===this._fabricObject.type&&(this._fabricObject.isEditing&&this._fabricObject.exitEditing(),this._fabricObject.selected=!1)})),e.getDrawingItem=()=>this}_getFabricObject(){return this._fabricObject}_on(e,t){if(!t)return;const i=e.toLowerCase(),r=this.mapEvent_Callbacks.get(i);if(!r)throw new Error(`Event '${e}' does not exist.`);let n=r.get(t);n||(n=e=>{const i=e.e;if(!i)return void(t&&t.apply(this,[{targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null}]));const r={targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null};if(this._drawingLayer){let e,t,n,s;const o=i.target.getBoundingClientRect();e=o.left,t=o.top,n=e+window.scrollX,s=t+window.scrollY;const a=this._drawingLayer.fabricCanvas.lowerCanvasEl.width,l=this._drawingLayer.fabricCanvas.lowerCanvasEl.height,h=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).width),c=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).height),u=h/c,d=a/l,f=this._drawingLayer._getObjectFit();let g,_,p,m,v=1;if("contain"===f)u0?i-1:r,te),actionName:"modifyPolygon",pointIndex:i}),e}),{})}_extendSet(e,t){if("vertices"===e){const e=this._fabricObject;if(e.group){const i=e.group;e.points=t.map((e=>({x:e.x-i.left-i.width/2,y:e.y-i.top-i.height/2}))),i.addWithUpdate()}else e.points=t;const i=e.points.length-1;return e.controls=e.points.reduce((function(e,t,r){return e["p"+r]=new V.Control({positionHandler:$,actionHandler:ie(r>0?r-1:i,te),actionName:"modifyPolygon",pointIndex:r}),e}),{}),e._setPositionDimensions({}),!0}}_extendGet(e){if("vertices"===e){const e=[],t=this._fabricObject;if(t.selectable&&!t.group)for(let i in t.oCoords)e.push({x:t.oCoords[i].x,y:t.oCoords[i].y});else for(let i of t.points){let r=i.x-t.pathOffset.x,n=i.y-t.pathOffset.y;const s=V.util.transformPoint({x:r,y:n},t.calcTransformMatrix());e.push({x:s.x,y:s.y})}return e}}}const ne=e=>{let t=(e=>e.split("\n").map((e=>e.split("\t"))))(e);return(e=>{for(let t=0;;t++){let i=-1;for(let r=0;ri&&(i=n.length)}if(-1===i)break;for(let r=0;r=e[r].length-1)continue;let n=" ".repeat(i+2-e[r][t].length);e[r][t]=e[r][t].concat(n)}}})(t),(e=>{let t="";for(let i=0;im?(g=d,_=d/p,{x:n.x*i.width,y:(n.y-(f-_)/2)*i.width}):(g=f*p,_=f,{x:(n.x-(d-g)/2)*i.height,y:n.y*i.height}):"cover"===h?p>m?{x:(c-i.height*d)/2+n.x*i.height,y:n.y*i.height}:{x:n.x*i.width,y:(u-i.width*f)/2+n.y*i.width}:{x:n.x*i.width,y:n.y*i.height}}return i={width:1,height:1},{x:n.x*i.width,y:n.y*i.height}},V.Canvas.prototype._onTouchStart=function(e){var t=this.findTarget(e);!this.allowTouchScrolling&&e.cancelable&&e.preventDefault&&e.preventDefault(),t&&e.cancelable&&e.preventDefault&&e.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(e)),this.__onMouseDown(e),this._resetTransformEventData();var i=this.upperCanvasEl,r=this._getEventPrefix();V.util.addListener(V.document,"touchend",this._onTouchEnd,{passive:!1}),V.util.addListener(V.document,"touchmove",this._onMouseMove,{passive:!1}),V.util.removeListener(i,r+"down",this._onMouseDown)},V.Textbox.prototype._wrapLine=function(e,t,i,r){const n=e.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/g),s=!(!n||!n.length);var o=0,a=this.splitByGrapheme||s,l=[],h=[],c=a?V.util.string.graphemeSplit(e):e.split(this._wordJoiners),u="",d=0,f=a?"":" ",g=0,_=0,p=0,m=!0,v=this._getWidthOfCharSpacing();r=r||0,0===c.length&&c.push([]),i-=r;for(var y=0;yi&&!m?(l.push(h),h=[],o=g,m=!0):o+=v,m||a||h.push(f),h=h.concat(u),_=a?0:this._measureWord([f],t,d),d++,m=!1,g>p&&(p=g);return y&&l.push(h),p+r>this.dynamicMinWidth&&(this.dynamicMinWidth=p-v+r),l});class oe{constructor(e,t,i,r){let n,s;switch(this.mapMediaType_Style=new Map,this.mode="viewer",this.onSelectionChange=null,this._arrDrwaingItem=[],this._arrFabricObject=[],this._visible=!0,e.hasOwnProperty("getFabricCanvas")?this.fabricCanvas=e.getFabricCanvas():(this.fabricCanvas=new V.Canvas(e,Object.assign(r,{allowTouchScrolling:!0})),this.fabricCanvas.setDimensions({width:"100%",height:"100%"},{cssOnly:!0}),this.fabricCanvas.lowerCanvasEl.className="",this.fabricCanvas.upperCanvasEl.className="",this.fabricCanvas.on("selection:created",(function(e){const t=e.selected,i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(i,[])}),0)}})),this.fabricCanvas.on("before:selection:cleared",(function(e){const t=this.getActiveObjects(),i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{const t=[];for(let r of i)e.hasDrawingItem(r)&&t.push(r);t.length>0&&e.onSelectionChange&&e.onSelectionChange([],t)}),0)}})),this.fabricCanvas.on("selection:updated",(function(e){const t=e.selected,i=e.deselected,r=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of i){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of r){const r=[],n=[];for(let i of t){const t=i.getDrawingItem();t._drawingLayer===e&&r.push(t)}for(let t of i){const i=t.getDrawingItem();i._drawingLayer===e&&n.push(i)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(r,n)}),0)}})),this.fabricCanvas.wrapperEl.style.position="absolute",e.getFabricCanvas=()=>this.fabricCanvas),this.id=t,this._mapDrawingStyles=i,t){case 1:n=i.get(1),s=i.get(5);break;case 2:n=i.get(2),s=i.get(6);break;case 3:n=i.get(3),s=i.get(7);break;default:n=i.get(4),s=i.get(8)}for(let e of Q.arrMediaTypes)this.mapMediaType_Style.set(e,{default:n,selected:s})}getId(){return this.id}_getDrawingStyle(e,t){if("number"!=typeof e)throw new Error("Invalid style id.");const i=this._mapDrawingStyles.get(e);return i?t?JSON.parse(JSON.stringify(i)):i:null}setVisible(e){if(e){for(let e of this._arrFabricObject)e.visible=!0;this._visible=!0}else{for(let e of this._arrFabricObject)e.visible=!1;this._visible=!1}this.fabricCanvas.renderAll()}isVisible(){return this._visible}_getItemCurrentStyleId(e){return e.styleId?e.styleId:this.mapMediaType_Style.get(e._mediaType)[e.styleSelector].styleId}_getItemCurrentStyle(e){if(e.styleId)return this._getDrawingStyle(e.styleId);return e._mapStyle.get(e.styleSelector)||null}_changeMediaTypeCurStyleInStyleSelector(e,t,i,r){let n;switch(e){case"rect":n=this.fabricCanvas.getObjects("rect");break;case"arc":n=this.fabricCanvas.getObjects("circle");break;case"polygon":n=this.fabricCanvas.getObjects("polygon");break;case"image":n=this.fabricCanvas.getObjects("image");break;case"text":n=this.fabricCanvas.getObjects("textbox");break;case"line":n=this.fabricCanvas.getObjects("line");break;case"path":n=this.fabricCanvas.getObjects("path")}for(let e of n){if(!this._arrFabricObject.includes(e))continue;const r=e.getDrawingItem();r.styleSelector===t&&this._changeItemStyle(r,i,!0)}r||this.fabricCanvas.renderAll()}_changeItemStyle(e,t,i){if(!e||!t)return;const r=e._getFabricObject();"number"==typeof e.styleId&&(t=this._getDrawingStyle(e.styleId)),r.strokeWidth=t.lineWidth,"fill"===t.paintMode?(r.fill=t.fillStyle,r.stroke=t.fillStyle):"stroke"===t.paintMode?(r.fill="transparent",r.stroke=t.strokeStyle):"strokeAndFill"===t.paintMode&&(r.fill=t.fillStyle,r.stroke=t.strokeStyle),r.fontFamily&&(r.fontFamily=t.fontFamily),r.fontSize&&(r.fontSize=t.fontSize),r.group||(r.dirty=!0),i||this.fabricCanvas.renderAll()}_updateGroupItem(e,t,i){if(!e||!t)return;const r=e.getChildItems();if("add"===i){if(r.includes(t))return;const i=t._getFabricObject();if(this.fabricCanvas.getObjects().includes(i)){if(!this._arrFabricObject.includes(i))throw new Error("Existed in other drawing layers.");t._zIndex=null}else{let i;if(t.styleId)i=this._getDrawingStyle(t.styleId);else{i=this.mapMediaType_Style.get(t._mediaType)[e.styleSelector];const r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected,!0)},n=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default,!0)};t._on("selected",r),t._on("deselected",n),t._funcChangeStyleToSelected=r,t._funcChangeStyleToDefault=n}t._drawingLayer=this,t._drawingLayerId=this.id,this._changeItemStyle(t,i,!0)}e._fabricObject.addWithUpdate(t._getFabricObject())}else{if("remove"!==i)return;if(!r.includes(t))return;t._zIndex=null,t._drawingLayer=null,t._drawingLayerId=null,t._off("selected",t._funcChangeStyleToSelected),t._off("deselected",t._funcChangeStyleToDefault),t._funcChangeStyleToSelected=null,t._funcChangeStyleToDefault=null,e._fabricObject.removeWithUpdate(t._getFabricObject())}this.fabricCanvas.renderAll()}_addDrawingItem(e,t){let i=e._getFabricObject();const r=this.fabricCanvas.getObjects();let n,s;if(r.includes(i)){if(this._arrFabricObject.includes(i))return;throw new Error("Existed in other drawing layers.")}if("group"===e._mediaType){n=e.getChildItems();for(let e of n)if(e._drawingLayer&&e._drawingLayer!==this)throw new Error("The childItems of DT_Group have existed in other drawing layers.")}if(t&&"object"==typeof t&&!Array.isArray(t))for(let e in t)i.set(e,t[e]);if(n){for(let e of n){const t=this.mapMediaType_Style.get(e._mediaType);for(let i of Q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected,!0)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default,!0)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}e._drawingLayer=this,e._drawingLayerId=this.id,this._changeItemStyle(e,s,!0)}i.dirty=!0,this.fabricCanvas.renderAll()}else{const t=this.mapMediaType_Style.get(e._mediaType);for(let i of Q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}this._changeItemStyle(e,s)}e._zIndex=this.id,e._drawingLayer=this,e._drawingLayerId=this.id;const o=this._arrFabricObject.length;let a=r.length;if(o)a=r.indexOf(this._arrFabricObject[o-1])+1;else for(let t=0;t{for(let t of this._arrDrawingLayer)if(t.getId()===e)return!0;return!1};if(void 0===t){for(let e=100;;e++)if(!i(e)){t=e;break}}else if(i(t))throw new Error("Existed drawing layer id.");const r=new oe(e,t,this._mapDrawingStyles,{enableRetinaScaling:!1});return r._manager=this,this._arrDrawingLayer.push(r),this._switchPointerEvent(),r}deleteDrawingLayer(e){const t=this.getDrawingLayer(e);if(!t)return;const i=this._arrDrawingLayer;t.dispose(),i.splice(i.indexOf(t),1),this._switchPointerEvent()}clearDrawingLayers(){for(let e of this._arrDrawingLayer)e.dispose();this._arrDrawingLayer.length=0}getDrawingLayer(e){for(let t of this._arrDrawingLayer)if(t.getId()===e)return t;return null}getDrawingLayers(){return Array.from(this._arrDrawingLayer)}getSelectedDrawingItems(){if(!this._arrDrawingLayer.length)return;const e=this._arrDrawingLayer[0].fabricCanvas.getActiveObjects(),t=[];for(let i of e)t.push(i.getDrawingItem());return t}setDimensions(e,t){this._arrDrawingLayer.length&&this._arrDrawingLayer[0]._setDimensions(e,t)}setObjectFit(e){for(let t of this._arrDrawingLayer)t&&t._setObjectFit(e)}getObjectFit(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0]._getObjectFit():null}setVisible(e){this._arrDrawingLayer.length&&(this._arrDrawingLayer[0].fabricCanvas.wrapperEl.style.display=e?"block":"none")}_switchPointerEvent(){if(this._arrDrawingLayer.length)for(let e of this._arrDrawingLayer)e.getMode()}}class le{constructor(e){this._controlTarget=null,this._arrUsers=[],this._mapAction_UserArgs=new Map,this._mapProperty_UserValue=new Map,this._mapAction_Callbacks=new Map,this._controlTarget=e}setControlTarget(e){this._controlTarget=e}getControlTarget(){return this._controlTarget}register(e){this._arrUsers.includes(e)||this._arrUsers.push(e)}logout(e){const t=this._arrUsers.indexOf(e);-1!==t&&(this.clearUserDisiredAction({user:e}),this.clearUserDisiredValue({user:e}),this._arrUsers.splice(t,1))}getRegisteredUsers(){return this._arrUsers}ifUserExisted(e){return this._arrUsers.includes(e)}setDisiredValue(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");r&&(this._controlTarget[t]=i),this._mapProperty_UserValue.get(t)?this._mapProperty_UserValue.get(t).set(e,i):this._mapProperty_UserValue.set(t,new Map([[e,i]]))}clearUserDisiredValue(e){if(e&&(e.user||e.property)){if(e.property&&e.user){const t=this._mapProperty_UserValue.get(e.property);if(!t)return;t.delete(e.user)}else if(e.property)this._mapProperty_UserValue.delete(e.property);else if(e.user)for(let t of this._mapProperty_UserValue.values())t.delete(e.user)}else this._mapProperty_UserValue=new Map}getValue(e){if(!this._controlTarget)throw new Error("Control target is not set.");return this._controlTarget[e]}getPropertyDisiredValue(e){if(this._mapProperty_UserValue.get(e)){const t=[],i=this._mapProperty_UserValue.get(e);for(let e of i.values())t.push(e);return t}return null}setDisiredAction(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");return i||(i=[]),r?this._controlTarget[t](...i):(this._mapAction_UserArgs.get(t)?this._mapAction_UserArgs.get(t).set(e,i):this._mapAction_UserArgs.set(t,new Map([[e,i]])),this._render(t))}clearUserDisiredAction(e){if(e&&(e.user||e.actionName)){if(e.actionName&&e.user){const t=this._mapAction_UserArgs.get(e.actionName);if(!t)return;t.delete(e.user)}else if(e.actionName)this._mapAction_UserArgs.delete(e.actionName);else if(e.user)for(let t of this._mapAction_UserArgs.values())t.delete(e.user);this.render()}else this._mapAction_UserArgs=new Map}addCallback(e,t){const i=this._mapAction_Callbacks.get(e);i?i.push(t):this._mapAction_Callbacks.set(e,[t])}removeCallback(e,t){const i=this._mapAction_Callbacks.get(e);if(!i)return;const r=i.indexOf(t);-1!==r&&i.splice(r,1)}clearCallback(e){e?this._mapAction_Callbacks.delete(e):this._mapAction_Callbacks.clear()}_fireCallback(e){const t=this._mapAction_Callbacks.get(e);if(t)for(let e of t){if(!e)return;setTimeout(e.bind(this._controlTarget),0)}}_render(e){const t=this._mapAction_UserArgs.get(e);if(!t)throw new Error("Unrecorded action.");if(t.size===this._arrUsers.length){let i=[];for(let e of t.values())e.length>0&&(i=e);if(this._controlTarget[e]){const t=this._controlTarget[e](...i);return this._mapAction_UserArgs.delete(e),this._fireCallback(e),t}}}render(e){if(e)return this._render(e);for(let e of this._mapAction_UserArgs.keys())this._render(e)}}class he{static multiply(e,t){const i=[];for(let r=0;r<3;r++){const n=t.slice(3*r,3*r+3);for(let t=0;t<3;t++){const r=[e[t],e[t+3],e[t+6]].reduce(((e,t,i)=>e+t*n[i]),0);i.push(r)}}return i}static identity(){return[1,0,0,0,1,0,0,0,1]}static translate(e,t,i){return he.multiply(e,[1,0,0,0,1,0,t,i,1])}static rotate(e,t){var i=Math.cos(t),r=Math.sin(t);return he.multiply(e,[i,-r,0,r,i,0,0,0,1])}static scale(e,t,i){return he.multiply(e,[t,0,0,0,i,0,0,0,1])}}var ce;!function(e){e.GREY="grey",e.GREY32="grey32",e.RGBA="rgba",e.RBGA="rbga",e.GRBA="grba",e.GBRA="gbra",e.BRGA="brga",e.BGRA="bgra"}(ce||(ce={}));const ue=(e,t,i,r)=>{let n=t+Math.round((e-t)/i)*i;return r&&(n=Math.min(n,r)),n};class de{constructor(){this._maxCvsSideLength=void 0,this._defaultMaxCvsSideLength=null,this._predefinedResolutions=[{width:160,height:120},{width:320,height:240},{width:480,height:360},{width:640,height:480},{width:800,height:600},{width:960,height:720},{width:1280,height:720},{width:1920,height:1080},{width:2560,height:1440},{width:3840,height:2160}],this._mapCameraResolutions=new Map,this._bWebGLSupported=!0,this.extraBindings=[],this._cvsSingleFrameMode=null,this._cvsOriginalImage=null,this._imgWidth=0,this._imgHeight=0,this._singleFrameInputContainer=null,this._clickIptSingleFrameMode=()=>{if(!this._isSingleFrameModeEnabled())return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;let e;if(this._singleFrameInputContainer)e=this._singleFrameInputContainer.firstElementChild;else{e=document.createElement("input"),e.setAttribute("type","file"),"camera"===this.singleFrameMode?(e.setAttribute("capture",""),e.setAttribute("accept","image/*")):1!=this.singleFrameMode&&"image"!==this.singleFrameMode||(e.removeAttribute("capture"),e.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp")),e.addEventListener("change",(async()=>{const t=e.files[0];e.value="";const i=await(async e=>{let t=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(t=await createImageBitmap(e),t)return t}catch(e){}var r;return t||(i=await(r=e,new Promise(((e,t)=>{let i=URL.createObjectURL(r),n=new Image;n.dbrObjUrl=i,n.src=i,n.onload=()=>{e(n)},n.onerror=e=>{t(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}})))),i})(t),r=i instanceof HTMLImageElement?i.naturalWidth:i.width,n=i instanceof HTMLImageElement?i.naturalHeight:i.height;this._imgWidth=r,this._imgHeight=n;const s=e=>{const t=Date.now();if(0===r||0===n)return null;if(e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");const i=this._scanRegion,s=this.getFrameSize(r,n,i,this.maxCvsSideLength);if(!s)return null;let o=!0;r===s.sWidth&&n===s.sHeight&&(o=!1);const a=this.mapPixelFormatString_Enum.get(this.framePixelFormat.toLowerCase()),l={data:null,region:i?JSON.parse(JSON.stringify(i)):null,sx:s.sx,sy:s.sy,width:s.dWidth,height:s.dHeight,colorMode:null,pixelFormat:null,timeSpent:null,timeStamp:null,isCropped:o,toCanvas:this._toCanvas,_sWidth:s.sWidth,_sHeight:s.sHeight,_bUseWebGL:null},h=this._getImageData(e,r,n,s,null,{pixelFormat:a});if(!h)return null;const c=Date.now();return l.data=h.data,l.pixelFormat=l.colorMode=h.pixelFormat,l._bUseWebGL=h._bUseWebGL,l.timeSpent=c-t,l.timeStamp=c,h.pixelFormat===ce.GREY?l.stride=l.width:l.stride=4*l.width,l};(e=>{let t=this._cvsSingleFrameMode;if(!t){if(t=document.createElement("canvas"),!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t),t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit="contain",t.style.pointerEvents="none",this._cvsSingleFrameMode=t}t.width==r&&t.height==n||(t.width=r,t.height=n);const i=t.getContext("2d");i.clearRect(0,0,t.width,t.height),i.drawImage(e,0,0)})(i),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);let o;this._updateDrawingLayersSize();try{o=s(i)}catch(e){throw e}const a=this.mapCameraEvents.get("singleframeacquired");for(let e of a)if(e)try{const t={data:new Uint8Array(o.data),region:JSON.parse(JSON.stringify(o.region)),sx:o.sx,sy:o.sy,width:o.width,height:o.height,stride:o.stride,colorMode:o.colorMode,pixelFormat:o.pixelFormat,timeSpent:o.timeSpent,timeStamp:o.timeStamp,isCropped:o.isCropped,toCanvas:o.toCanvas,_sWidth:o._sWidth,_sHeight:o._sHeight,_bUseWebGL:o._bUseWebGL};await e.apply(this,[t])}catch(e){console.error(e)}})),e.style.position="absolute",e.style.top="-9999px",e.style.backgroundColor="transparent",e.style.color="transparent";const t=document.createElement("div");t.append(e),t.style.position="absolute",t.style.width="1px",t.style.height="1px",t.style.overflow="hidden",t.style.pointerEvents="none",this._elContainer.prepend(t),this._singleFrameInputContainer=t}null==e||e.click()},this.styleEls=[],this._framePixelFormat=void 0,this._defaultFramePixelFormat="rgba",this.mapPixelFormatString_Enum=new Map([["grey",ce.GREY],["grey32",ce.GREY32],["rgba",ce.RGBA],["rbga",ce.RBGA],["grba",ce.GRBA],["gbra",ce.GBRA],["brga",ce.BRGA],["bgra",ce.BGRA]]),this.shaderPixelFormat=ce.RGBA,this.maxVideoCvsLength=3,this._reusedCvs=null,this._reusedWebGLCvs=null,this._tempDataContainer=null,this._webGLTexture=null,this._webGLProgramInfo=null,this._webGLBuffers=null,this._softwareScale=1,this._scaleCenter={x:0,y:0},this._focusParameters={maxTimeout:400,minTimeout:300,kTimeout:void 0,oldDistance:null,fds:null,isDoingFocus:0,taskBackToContinous:null,curFocusTaskId:0,focusCancelableTime:1500,defaultFocusAreaSizeRatio:6,focusBackToContinousTime:5e3,tapFocusMinDistance:null,tapFocusMaxDistance:null,_focusArea:null},this._tapFocusEnabled=!0,this._focusSupported=!0,this._tapDoFocus=async e=>{if(this._touchMoved)return void(this._touchMoved=!1);if(!this._tapFocusEnabled)return;if(!this._bOpen)return;if(this._isSingleFrameModeEnabled())return;if(!this._video||this._video.paused)return;if(!this._videoTrack)return;if(!this._focusSupported)return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))return void(this._focusSupported=!1);if(null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),1==this._focusParameters.isDoingFocus)return;let t,i,r,n;if(this._focusParameters.taskBackToContinous&&(clearTimeout(this._focusParameters.taskBackToContinous),this._focusParameters.taskBackToContinous=null),e instanceof MouseEvent)t=e.clientX,i=e.clientY;else{if(!(e instanceof TouchEvent))throw new Error("Unknown event type.");if(!e.changedTouches.length)return;t=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY}const s=this.getVideoFit(),o=this._video.videoWidth,a=this._video.videoHeight,l=this._elContainer.getBoundingClientRect(),h=l.left,c=l.top,u=window.getComputedStyle(this._elContainer),d=parseFloat(u.width),f=parseFloat(u.height),g=d/f,_=o/a;let p=1;if("contain"===s)_>g?(p=d/o,r=(t-h)/p,n=(i-c-(f-d/_)/2)/p):(p=f/a,n=(i-c)/p,r=(t-h-(d-f*_)/2)/p);else{if("cover"!==s)throw new Error("Unsupported object-fit.");_>g?(p=f/a,n=(i-c)/p,r=(t-h+(f*_-d)/2)/p):(p=d/o,r=(t-h)/p,n=(i-c+(d/_-f)/2)/p)}const m={x:r+"px",y:n+"px"},v=2*Math.round(Math.min(o,a)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px",y=v;await this._setLocalFocus(m,v,y,this._focusParameters.tapFocusMinDistance,this._focusParameters.tapFocusMaxDistance),this._focusParameters.taskBackToContinous=setTimeout((()=>{this._videoTrack&&this._videoTrack.applyConstraints({advanced:[{focusMode:"continuous"}]}).catch((()=>{}))}),this._focusParameters.focusBackToContinousTime)},this._touchMoved=!1,this._touchMoveEvent=()=>{this._touchMoved=!0},this._recordedStates={},this.playCallbackInfo=null,this._toCanvas=function(){const e=document.createElement("canvas");let t;if(e.width=this.width,e.height=this.height,"grey"===(this.pixelFormat||this.colorMode)){t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{await this.selectCamera(this._selCam.value),this._bOpen||this.stop()},this._onResolutionSelChange=async()=>{let e,t;if(this._selRsl&&-1!=this._selRsl.selectedIndex){let i=this._selRsl.options[this._selRsl.selectedIndex];e=i.getAttribute("data-width"),t=i.getAttribute("data-height")}await this.setResolution(e,t),this._bOpen||this.stop()},this._onCloseBtnClick=()=>{this.close(!0)},this._bOpen=!1,this.isCameraEnhancer=!0,this.isDisposed=!1,this.disposed=!1,this.videoSrc=null,this.videoSettings={video:{width:{ideal:1280},height:{ideal:720},facingMode:{ideal:"environment"}}},this.iPlayRound=0,this.promisePlay=null,this._ifSaveLastUsedCamera=!1,this.ifSkipCameraInspection=!1,this._allCameras=[],this._currentCamera=null,this._videoTrack=null,this._lastDeviceId=void 0,this._vc_bPlayingVideoBeforeHide=!1,this._ev_documentHideEvent=()=>{if(!this._isSingleFrameModeEnabled())if("visible"===document.visibilityState){if(de._onLog&&de._onLog("DCE: document visible."),this._bOpen&&this._vc_bPlayingVideoBeforeHide)if(this.videoSrc)this._video.play();else if(this._video.srcObject){const e=this._video.srcObject.getTracks()[0];this._video.srcObject.active&&e&&!e.muted?this._video.play():this.play()}}else"hidden"===document.visibilityState&&(de._onLog&&de._onLog("DCE: document hidden."),["iPhone","iPad","Mac"].includes(X.OS)?(this._vc_bPlayingVideoBeforeHide=!0,this._video&&this._video.pause()):this._video&&!this._video.paused?(this._vc_bPlayingVideoBeforeHide=!0,this._video.pause()):this._vc_bPlayingVideoBeforeHide=!1)},this.containerClassName="dce-video-container",this._elContainer=null,this._videoContainer=null,this._video=null,this.videoFit="contain",this._cvsScanRegion=null,this._divScanArea=null,this._divScanLight=null,this._bgLoading=null,this._selCam=null,this._bgCamera=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this.regionMaskFillStyle="rgba(0,0,0,0.5)",this.regionMaskStrokeStyle="rgb(254,142,20)",this.regionMaskLineWidth=2,this._bShowScanRegionMask=!0,this._bShowScanRegionLaser=void 0,this._defaultBShowScanRegionLaser=!1,this._scanRegion=null,this._arrScanRegionOverlays=[],this._layerBaseCvs=null,this._drawingLayerOfTip=null,this._tipArgs={x:void 0,y:void 0,width:void 0,duration:void 0,autoShowSuggestedTip:void 0},this._hideTipTimeoutId=null,this.onTipSuggested=null,this._cvsViewDecorator=null,this._decoratorType=[],this._decoratorArea=null,this._viewDecoratorInfo={rectangle:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},focus:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},crossline:{lineWidth:2,strokeStyle:"rgb(254,142,20)"},crosshair:{lineWidth:4,strokeStyle:"rgb(254,142,20)"}},this._croppingRegions=void 0,this._defaultCroppingRegions=[null],this.bIncreaseRegionIndexAuto=!0,this._croppingRegionIndex=0,this._loopInterval=void 0,this._defaultLoopInterval=0,this._maxNumberOfFramesInBuffer=void 0,this._defaultMaxNumberOfFramesInBuffer=1,this._frameQueue=[],this._bFetchingLoopStarted=!1,this._refreshInterval=void 0,this._defaultRefreshInterval=-1,this._updateLayersTimeout=500,this._updateLayers=()=>{this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none");for(let e of this._arrScanRegionOverlays)e&&(e.style.display="none");this._resizeTimeoutId&&clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout((()=>{if(!this.isDisposed||!this.disposed){this.ifShowScanRegionMask&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this.showScanRegionLaser(),this._cvsViewDecorator&&this.showViewDecorator(),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&(e.style.display="",this._updateScanRegionOverlay(e));this._updateDrawingLayersSize(),this._updateVideoContainerStyle()}}),this._updateLayersTimeout)},this._windowResizeListener=()=>{this._windowWidth!==document.documentElement.clientWidth&&(this._windowWidth=document.documentElement.clientWidth,this._updateLayers())},this.mapCameraEvents=new Map([["cameraopen",[]],["cameraclose",[]],["camerachange",[]],["resolutionchange",[]],["played",[]],["singleframeacquired",[]],["frameaddedtobuffer",[]]]),this._controler=null,navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia?this._singleFrameMode=!1:this._singleFrameMode=!0}static getVersion(){return this._version}static async detectEnvironment(){return await(async()=>({wasm:z,worker:Z,getUserMedia:J,camera:await K(),browser:X.browser,version:X.version,OS:X.OS}))()}static set engineResourcePath(e){if(this._hasEngineResourceLoaded)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` is called.");de._engineResourcePath=(e=>{if(null==e&&(e="./"),!U){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get engineResourcePath(){return this._engineResourcePath}static isStorageAvailable(e){let t;try{t=window[e];const i="__storage_test__";return t.setItem(i,i),t.removeItem(i),!0}catch(e){return e instanceof DOMException&&(22===e.code||1014===e.code||"QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name)&&t&&0!==t.length}}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"data"in e&&"region"in e&&"sx"in e&&"sy"in e&&"width"in e&&"height"in e&&("colorMode"in e||"pixelFormat"in e)&&"timeSpent"in e&&"timeStamp"in e&&"isCropped"in e&&"toCanvas"in e&&"_sWidth"in e&&"_sHeight"in e&&"_bUseWebGL"in e}static async testCameraAccess(){try{if(!navigator||!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return{ok:!1,message:"Insecure context."};(await navigator.mediaDevices.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()}))}catch(e){if("OverconstrainedError"===e.name||"NotFoundError"===e.name)return{ok:!1,message:"No camera detected."};if("NotAllowedError"===e.name)return{ok:!1,message:"No permission to access camera."};if("AbortError"===e.name)return{ok:!1,message:"Some problem occurred which prevented the device from being used."};if("NotReadableError"===e.name)return{ok:!1,message:"A hardware error occurred."};if("SecurityError"===e.name)return{ok:!1,message:"User media support is disabled."};throw e}return{ok:!0,message:"Successfully accessed the camera."}}set maxCvsSideLength(e){if(e<=0)throw new Error("Invalid value.");this._maxCvsSideLength=e}get maxCvsSideLength(){if(void 0!==this._maxCvsSideLength)return this._maxCvsSideLength;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxCvsSideLength");if(e&&1===e.length)return e[0]}return this._defaultMaxCvsSideLength}static set defaultUIElementURL(e){de._defaultUIElementURL=e}static get defaultUIElementURL(){var e;return null===(e=de._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",de.engineResourcePath)}getUIElement(){return this.UIElement}async setUIElement(e){if(this._bOpen)throw new Error("It is not allowed to change the UIElement when the camera is open.");if("string"==typeof e||e instanceof String){if(!e.trim().startsWith("<")){let t=await fetch(e);if(!t.ok)throw Error("setUIElement(elementOrUrl): Network Error: "+t.statusText);e=await t.text()}if(!e.trim().startsWith("<"))throw Error("setUIElement(elementOrUrl): Can't get valid HTMLElement.");let t=document.createElement("div");t.innerHTML=e;for(let e=0;e100||e.regionTop>100||e.regionRight>100||e.regionBottom>100)))}set scanRegion(e){if(!this._checkValidRegion(e))throw new Error("Invalid region.");this._scanRegion=JSON.parse(JSON.stringify(e)),this._updateScanRegionCanvas(),this._updateScanAreaDiv();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e)}setScanRegion(e){this.scanRegion=e}getScanRegion(){return JSON.parse(JSON.stringify(this._scanRegion))}_calculateCvsSize(){var e,t;let i,r,n;if(this._isSingleFrameModeEnabled()?(i=this._imgWidth,r=this._imgHeight,n="contain"):(i=null===(e=this._video)||void 0===e?void 0:e.videoWidth,r=null===(t=this._video)||void 0===t?void 0:t.videoHeight,n=this.getVideoFit()),!i||!r)throw new Error("Invalid content dimensions.");return{width:i,height:r,objectFit:n}}addScanRegionOverlayCanvas(){this._assertOpen();const e=document.createElement("canvas");if(this._updateScanRegionOverlay(e),!this._scanRegionOverlayContainer){const e=document.createElement("div");if(this._scanRegionOverlayContainer=e,e.style.position="absolute",e.style.left="0",e.style.top="0",e.style.width="100%",e.style.height="100%",e.style.overflow="hidden",e.style.pointerEvents="none",this._layerBaseCvs)this._layerBaseCvs.parentElement.after(e);else if(this._cvsScanRegion)this._cvsScanRegion.after(e);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(e);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._recordedStates.overlayShow=!0}return this._scanRegionOverlayContainer.append(e),this._arrScanRegionOverlays.push(e),e}removeScanRegionOverlayCanvas(e){const t=this._arrScanRegionOverlays.indexOf(e);-1!==t&&(e.remove(),this._arrScanRegionOverlays.splice(t,1))}_updateScanRegionOverlay(e){if(!e)return;let t;try{t=this._calculateCvsSize()}catch(e){if("Invalid content dimensions."===(e.message||e))return;throw e}const{width:i,height:r,objectFit:n}=t;if(i<=0||r<=0)return e.width=0,void(e.height=0);const s=this._getRegionInPixels(i,r,this._scanRegion),o=this.getFrameSize(i,r,this._scanRegion,this.maxCvsSideLength),a=o.dWidth,l=o.dHeight;e.width==a&&e.height==l||(e.width=a,e.height=l);const h=window.getComputedStyle(this._elContainer),c=parseFloat(h.width),u=parseFloat(h.height),d=c/u,f=i/r;let g,_,p,m,v=1;"contain"===n?(f>d?(v=c/i,g=0,_=(u-r*v)/2):(v=u/r,g=(c-i*v)/2,_=0),g+=s.regionLeft*v,_+=s.regionTop*v,p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):"cover"===n?(f>d?(v=u/r,g=s.regionLeft*v-(i*v-c)/2,_=s.regionTop*v):(v=c/i,g=s.regionLeft*v,_=s.regionTop*v-(r*v-u)/2),p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):(g=0,_=0,p=0,m=0),e.style.position="absolute",e.style.left=g+"px",e.style.top=_+"px",e.style.width=p+"px",e.style.height=m+"px"}showScanRegionOverlays(){this._scanRegionOverlayContainer&&("none"==this._scanRegionOverlayContainer.style.display&&(this._scanRegionOverlayContainer.style.display=""),this._recordedStates.overlayShow=!0)}hideScanRegionOverlays(){this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none",this._recordedStates.overlayShow=!1)}setViewDecorator(e,t){if(!e)return void(this._cvsViewDecorator&&(this._cvsViewDecorator.remove(),this._cvsViewDecorator=null));if(!t)throw new Error("Invalid area.");this._assertOpen();let i=[];if("string"==typeof e?i.push(e):Array.isArray(e)&&(i=JSON.parse(JSON.stringify(e))),!this._cvsViewDecorator){if(this._cvsViewDecorator=document.createElement("canvas"),this._scanRegionOverlayContainer)this._scanRegionOverlayContainer.after(this._cvsViewDecorator);else if(this._layerBaseCvs)this._layerBaseCvs.parentElement.after(this._cvsViewDecorator);else if(this._cvsScanRegion)this._cvsScanRegion.after(this._cvsViewDecorator);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(this._cvsViewDecorator);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(this._cvsViewDecorator);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(this._cvsViewDecorator)}this._recordedStates.decoratorShow=!0}this._decoratorArea=JSON.parse(JSON.stringify(t)),this._decoratorType.length=0;const r=["rectangle","focus"],n=["crossline","crosshair"];let s=!1,o=!1;for(let e of i)e=e.toLowerCase(),r.includes(e)&&!s&&(s=!0,this._decoratorType.push(e)),n.includes(e)&&!o&&(o=!0,!this._decoratorType.includes(e)&&this._decoratorType.push(e));this._updateViewDecorator()}getViewDecorator(){return{type:JSON.parse(JSON.stringify(this._decoratorType)),area:JSON.parse(JSON.stringify(this._decoratorArea)),canvas:this._cvsViewDecorator}}showViewDecorator(){this._cvsViewDecorator&&("none"==this._cvsViewDecorator.style.display&&(this._cvsViewDecorator.style.display=""),this._recordedStates.decoratorShow=!0)}hideViewDecorator(){this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none",this._recordedStates.decoratorShow=!1)}setViewDecoratorLineWidth(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("lineWidth"))throw new Error(`It is not allowed to change the property 'lineWidth' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].lineWidth=t,this._updateViewDecorator()}setViewDecoratorStrokeStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("strokeStyle"))throw new Error(`It is not allowed to change the property 'strokeStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].strokeStyle=t,this._updateViewDecorator()}setViewDecoratorFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("fillStyle"))throw new Error(`It is not allowed to change the property 'fillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].fillStyle=t,this._updateViewDecorator()}setViewDecoratorMaskFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("maskFillStyle"))throw new Error(`It is not allowed to change the property 'maskFillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].maskFillStyle=t,this._updateViewDecorator()}_updateViewDecorator(){if(!this._bOpen)return;if(!this._cvsViewDecorator||!this._decoratorArea)return;let e;if(this._isSingleFrameModeEnabled())e="contain";else{if(!this._video)return;e=this.getVideoFit()}const t=this._cvsViewDecorator;t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit=e,t.style.pointerEvents="none";const i=this.getVisibleRegion(!0);if(!i)return;const r=i.regionRight-i.regionLeft,n=i.regionBottom-i.regionTop;if(t.width==r&&t.height==n||(t.width=r,t.height=n),r<=0||n<=0)return;const s=t.getContext("2d");s.clearRect(0,0,t.width,t.height);const o=this._decoratorArea.x/100*r,a=this._decoratorArea.y/100*n,l=this._decoratorArea.width/100*r,h=this._decoratorArea.height/100*n;for(let e of this._decoratorType){if("rectangle"===e){s.fillStyle=this._viewDecoratorInfo.rectangle.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.fillStyle=this._viewDecoratorInfo.rectangle.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.lineWidth=this._viewDecoratorInfo.rectangle.lineWidth,s.strokeStyle=this._viewDecoratorInfo.rectangle.strokeStyle;const e=s.lineWidth/2;s.strokeRect(Math.round(o-e),Math.round(a-e),Math.round(l+s.lineWidth),Math.round(h+s.lineWidth))}if("focus"===e){s.fillStyle=this._viewDecoratorInfo.focus.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.fillStyle=this._viewDecoratorInfo.focus.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.lineWidth=this._viewDecoratorInfo.focus.lineWidth,s.strokeStyle=this._viewDecoratorInfo.focus.strokeStyle;const e=s.lineWidth/2,i=[0,.25,.75,1],r=[0,.25,.75,1];s.beginPath();for(let e=0;e{const e=parseFloat(window.getComputedStyle(this._elContainer).width),t=parseFloat(window.getComputedStyle(this._elContainer).height);let s,o={regionBottom:r,regionRight:i,regionLeft:0,regionTop:0,regionMeasuredByPercentage:!1};return"cover"===n?e/tthis.maxNumberOfFramesInBuffer;)this._frameQueue.shift()}get maxNumberOfFramesInBuffer(){if(void 0!==this._maxNumberOfFramesInBuffer)return this._maxNumberOfFramesInBuffer;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxNumberOfFramesInBuffer");if(e&&1===e.length)return e[0]}return this._defaultMaxNumberOfFramesInBuffer}get numberOfFramesInBuffer(){return this._frameQueue.length}set refreshInterval(e){this._refreshInterval=e}get refreshInterval(){if(void 0!==this._refreshInterval)return this._refreshInterval;if(this._controler){const e=this._controler.getPropertyDisiredValue("refreshInterval");if(e&&1===e.length)return e[0]}return this._defaultRefreshInterval}static async createInstance(e){let t=new de;("string"==typeof e||e instanceof String)&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return this._hasEngineResourceLoaded=!0,de.onWarning&&(location&&"file:"===location.protocol?setTimeout((()=>{de.onWarning&&de.onWarning({id:1,message:"The page is opened over file:// and Dynamsoft Camera Enhancer may not work properly. Please open the page via https://."})}),0):!1!==window.isSecureContext&&navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia||setTimeout((()=>{de.onWarning&&de.onWarning({id:2,message:"Dynamsoft Camera Enhancer may not work properly in a non-secure context. Please open the page via https://."})}),0)),t._drawingLayersManager=new ae,t}static async playVideo(e,t,i){return new Promise(((r,n)=>{e||n(new Error("Invalid video element.")),t||n(new Error("Invalid source.")),e.onloadedmetadata=async()=>{e.onloadedmetadata=null,await e.play(),r(e)},"string"==typeof t||t instanceof String?e.src=t:e.srcObject=t,void 0!==i&&setTimeout((()=>n(new Error("Failed to play video. Timeout."))),i)}))}static findBestRearCameraInIOS(e){if(!e||!e.length)return null;const t=["back","baksidan","bakre","bak","後置","后置","背面","خلفية","задна","posteriore","posterior","zadní","bagside","rück","πίσω","trasera","taka","arrière","אחורית","बैक","stražnja","hátsó","belakang","aртқы","후면","achterzijde","tylny","traseira","spate","задняя","задней","zadná","านหลัง","arka","sau"],i=["triple","三镜头","三鏡頭","トリプル","ثلاثية","тройна","trojný","τριπλή","kolmois","משולשת","ट्रिपल","trostruka","tiga","tripla","үштік","트리플","trippelt","trippel","trójobiektywowy","triplă","тройная","trojitá","สาม","üçlü","потроєна","ba camera"],r=["dual wide","dual-weitwinkel","dual con gran angular","dual","doble","double","双广角","雙廣角","デュアル広角","مزدوجة عريضة","двойна широкоъгълна","duální širokoúhlý","διπλή ευρεία","laajakulmainen kaksois","כפולה רחבה","ड्युअल वाइड","dvostruka široka","kettős, széles látószögű","ganda","doppia con grandangolo","қос кең бұрышты","듀얼 와이드","dwikamera","dobbelt vidvinkelkamera","dwuobiektywowy","dupla grande-angular","grande angular dupla","dublă","двойная широкоугольная","duálna širokouhlá","dubbel vidvinkel","คู่ด้านหลังมุมกว้าง","çift geniş","здвоєна ширококутна","kép rộng mặt sau"],n=e.filter((e=>{const i=e.label.toLowerCase();return t.some((e=>i.includes(e)))}));if(!n.length)return null;const s=n.find((e=>{const t=e.label.toLowerCase();return i.some((e=>t.includes(e)))}));if(s)return s.deviceId;const o=n.find((e=>{const t=e.label.toLowerCase();return r.some((e=>t.includes(e)))}));return o?o.deviceId:n[0].deviceId}static findBestRearCamera(e){if(!e||!e.length)return null;if(["iPhone","iPad","Mac"].includes(X.OS))return de.findBestRearCameraInIOS(e);const t=["rear","back","rück","arrière","trasera","trás","traseira","posteriore","posterior","后面","後面","背面","后置","後置","背置","задней","خلفية","후","arka","achterzijde","หลัง","baksidan","bagside","sau","bak","tylny","taka","אחורית","πίσω","spate","hátsó","zadní","darrere","zadná","задня","stražnja","belakang","बैक","задна","aртқы","задняя","bakre","านหลัง"];for(let i of e){const e=i.label.toLowerCase();if(e&&t.some((t=>e.includes(t)))&&/\b0(\b)?/.test(e))return i.deviceId}return["Android","HarmonyOS"].includes(X.OS)?e[e.length-1].deviceId:null}_isSingleFrameModeEnabled(){return 0!=this.singleFrameMode}async play(e,t,i,r){let n;if(this._video&&this.videoSrc){de._onLog&&(n=Date.now(),de._onLog("DCE: start loading static video: "+n));const e=await de.playVideo(this._video,this.videoSrc,4e3);if(de._onLog&&de._onLog("DCE: finish loading static video. Costs: "+(Date.now()-n)),!this._video)return e.pause(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};const t={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};this.playCallbackInfo=JSON.parse(JSON.stringify(t));const i=this.mapCameraEvents.get("played");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return this._recordedStates.videoPlaying=!0,t}if(this._isSingleFrameModeEnabled())return r&&r.notTriggerSingleFrameClick||this._clickIptSingleFrameMode(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};if(!this._video)throw new Error("'video' is null or undefined.");const s=++this.iPlayRound;if(this.promisePlay&&(await this.promisePlay,s{var n;try{this._video&&this._video.srcObject&&this.stop(),de._onLog&&de._onLog("DCE: ======before video========");const s=()=>{if(!this._video)throw l&&l.getTracks().forEach((e=>{e.stop()})),this._videoTrack=null,this._currentCamera=null,new Error("'video' is null or undefined.")},o=this.getVideoSettings();let a,l;if("boolean"==typeof o.video&&(o.video={}),e)delete o.video.facingMode,o.video.deviceId={exact:e};else if(o.video.deviceId);else if(this._lastDeviceId)delete o.video.facingMode,o.video.deviceId={exact:this._lastDeviceId};else if(this.ifSaveLastUsedCamera&&de.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")){delete o.video.facingMode,o.video.deviceId={ideal:window.localStorage.getItem("dce_last_camera_id")};const e=JSON.parse(window.localStorage.getItem("dce_last_apply_width")),t=JSON.parse(window.localStorage.getItem("dce_last_apply_height"));e&&t&&(o.video.width=e,o.video.height=t)}else if(this.ifSkipCameraInspection);else if(o.video.facingMode){if(await this.getAllCameras(!1),!this._video)throw new Error("'video' is null or undefined.");let e=o.video.facingMode;if(e instanceof Array&&e.length&&(e=e[0]),e=e.exact||e.ideal||e,"environment"===e){a=!0;const e=de.findBestRearCamera(this._allCameras);e&&(delete o.video.facingMode,o.video.deviceId={exact:e})}}t&&(o.video.width={ideal:t}),i&&(o.video.height={ideal:i}),de._onLog&&de._onLog("DCE: ======try getUserMedia========");let h=[0,500],c=null;const u=async e=>{for(let t of h){t&&await new Promise((e=>setTimeout(e,t))),s();try{de._onLog&&de._onLog("DCE: ask "+JSON.stringify(e)),l=await navigator.mediaDevices.getUserMedia(e);break}catch(e){if(s(),"NotFoundError"===e.name||"NotAllowedError"===e.name)throw e;c=e,de._onLog&&de._onLog("DCE: "+e.message||e)}}s()};let d;if(await u(o),l||(de._onLog&&de._onLog("DCE: ======try getUserMedia again========"),d=JSON.parse(JSON.stringify(o)),"object"==typeof d.video&&(["iPhone","iPad"].includes(X.OS)?(t>=1280||i>=1280?d.video.width=1280:t>=640||i>=640?d.video.width=640:(t<640||i<640)&&(d.video.width=320),delete d.video.height):a&&!o.video.deviceId?(delete d.video.facingMode,this._allCameras.length&&(d.video.deviceId={ideal:this._allCameras[this._allCameras.length-1].deviceId})):d.video=!0),de._onLog&&de._onLog("DCE: "+d),await u(d)),l||(h=[1e3,2e3],await u(o)),l||await u(d),!l)throw c;const f=()=>{const e=l.getVideoTracks();let t,i;if(e.length&&(t=this._videoTrack=e[0]),this._video&&t){const e=t.getSettings();if(e)for(let r of this._allCameras)if(e.deviceId===r.deviceId){r._checked=!0,r.label=t.label,i=r;break}}this._currentCamera=i};if(await this.getAllCameras(!1),s(),a&&!this.ifSkipCameraInspection){f();const e=de.findBestRearCamera(this._allCameras),t=null===(n=this._currentCamera)||void 0===n?void 0:n.deviceId;e&&e!=t&&(l.getTracks().forEach((e=>{e.stop()})),h=[0,500,1e3,2e3],o.video.deviceId={exact:e},await u(o))}de._onLog&&de._onLog("DCE: ======play video========"),s(),await de.playVideo(this._video,l,4e3),s(),de._onLog&&de._onLog("DCE: ======played video========"),this._bgLoading&&(this._bgLoading.style.animationPlayState="paused");const g=this._video.videoWidth+"x"+this._video.videoHeight;this._optGotRsl&&(this._optGotRsl.setAttribute("data-width",this._video.videoWidth),this._optGotRsl.setAttribute("data-height",this._video.videoHeight),this._optGotRsl.innerText=g,this._selRsl&&this._optGotRsl.parentNode==this._selRsl&&(this._selRsl.value="got")),de._onLog&&de._onLog("DCE: got "+g),f(),this._renderSelCameraInfo();const _={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};if(_.deviceId&&(this._lastDeviceId=_.deviceId,this.ifSaveLastUsedCamera&&de.isStorageAvailable&&(window.localStorage.setItem("dce_last_camera_id",this._lastDeviceId),o.video.width&&o.video.height&&(window.localStorage.setItem("dce_last_apply_width",JSON.stringify(o.video.width)),window.localStorage.setItem("dce_last_apply_height",JSON.stringify(o.video.height))))),!r||!r.notTriggerPlayedEvent){const e=this.mapCameraEvents.get("played");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(_));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return this.promisePlay=null,_}catch(e){throw this.promisePlay=null,this._bgLoading&&(this._bgLoading.style.display="none"),"NotFoundError"===e.name&&(DOMException?e=new DOMException("No camera available, please use a device with an accessible camera.",e.name):(e=new Error("No camera available, please use a device with an accessible camera.")).name="NotFoundError"),e}})(),de._onLog&&(n=Date.now(),de._onLog("DCE: start opening camera: "+n));const o=await this.promisePlay;return de._onLog&&de._onLog("DCE: finish opening camera. Costs: "+(Date.now()-n)),this.playCallbackInfo=JSON.parse(JSON.stringify(o)),this._recordedStates.videoPlaying=!0,o}async resume(){this._assertOpen(),this._video&&(await this._video.play(),this._recordedStates.videoPlaying=!0),this.ifShowScanRegionLaser&&this.showScanRegionLaser()}pause(){this._assertOpen(),this._video&&(this._video.pause(),this._recordedStates.videoPlaying=!1),this.ifShowScanRegionLaser&&this.hideScanRegionLaser()}isPaused(){var e;return!this._isSingleFrameModeEnabled()&&!0===(null===(e=this._video)||void 0===e?void 0:e.paused)}_bindUI(){if(!this.UIElement)throw new Error("Need to define `UIElement` before opening.");const e=[this.UIElement];for(let t=0;t','','',''].join(""),this._optGotRsl=this._optGotRsl||this._selRsl.options[0])):!this._optGotRsl&&t.classList.contains("dce-opt-gotResolution")?this._optGotRsl=t:!this._btnClose&&t.classList.contains("dce-btn-close")?this._btnClose=t:!this._selMinLtr&&t.classList.contains("dlr-sel-minletter")?(this._selMinLtr=t,this._selMinLtr.options.length||(this._selMinLtr.innerHTML=[this._optGotMinLtr?"":'','','','','','','','','','',''].join(""),this._optGotMinLtr=this._optGotMinLtr||this._selMinLtr.options[0])):!this._optGotMinLtr&&t.classList.contains("dlr-opt-gotMinLtr")&&(this._optGotMinLtr=t);if(this.extraBindings&&this.extraBindings.length)for(let i of this.extraBindings)try{i(t)}catch(e){}}if(!this._video)throw this._unbindUI(),Error(`Can not find the video container element with class '${this.containerClassName}'`);this._isSingleFrameModeEnabled()||this.videoSrc?(this._isSingleFrameModeEnabled()&&(this._elContainer&&(this._elContainer.addEventListener("click",this._clickIptSingleFrameMode),this._elContainer.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block")),this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._elContainer&&(["Android","HarmonyOS"].includes(X.OS)?(this._elContainer.addEventListener("touchend",this._tapDoFocus),this._elContainer.addEventListener("touchmove",this._touchMoveEvent)):this._elContainer.addEventListener("click",this._tapDoFocus)),this._selCam&&(this._selCam.style.display="block",this._selCam.addEventListener("change",this._onCameraSelChange)),this._selRsl&&(this._selRsl.style.display="block",this._selRsl.addEventListener("change",this._onResolutionSelChange)),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._bgLoading&&(this._bgLoading.style.display="block")),this._btnClose&&this._btnClose.addEventListener("click",this._onCloseBtnClick),document.addEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&(this._resizeObserver||(this._resizeObserver=new ResizeObserver((e=>{for(let t of e)t.target===this._elContainer&&this._updateLayers()}))),this._elContainer&&this._resizeObserver.observe(this._elContainer)),this._windowWidth=document.documentElement.clientWidth,window.addEventListener("resize",this._windowResizeListener)}_unbindUI(){this._isSingleFrameModeEnabled()?(this._elContainer&&(this._elContainer.removeEventListener("click",this._clickIptSingleFrameMode),this._elContainer.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none")):this._bgLoading&&(this._bgLoading.style.display="none"),this._elContainer&&(this._elContainer.removeEventListener("click",this._tapDoFocus),this._elContainer.removeEventListener("touchend",this._tapDoFocus),this._elContainer.removeEventListener("touchmove",this._touchMoveEvent)),this._selCam&&this._selCam.removeEventListener("change",this._onCameraSelChange),this._selRsl&&this._selRsl.removeEventListener("change",this._onResolutionSelChange),this._btnClose&&this._btnClose.removeEventListener("click",this._onCloseBtnClick),this.hideScanRegionLaser(),this.hideViewDecorator(),this.hideScanRegionOverlays(),this._drawingLayersManager.setVisible(!1),this._hideOriginalImageCvs(),this._videoContainer&&this._videoContainer.remove(),this._video=null,this._videoContainer=null,this._elContainer=null,this._selCam=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._divScanArea=null,this._divScanLight=null,this._cvsScanRegion&&(this._cvsScanRegion.remove(),this._cvsScanRegion=null),this._singleFrameInputContainer&&(this._singleFrameInputContainer.remove(),this._singleFrameInputContainer=null),this._cvsSingleFrameMode&&(this._cvsSingleFrameMode.remove(),this._cvsSingleFrameMode=null),document.removeEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&this._resizeObserver&&this._resizeObserver.disconnect(),window.removeEventListener("resize",this._windowResizeListener)}_assertOpen(){if(!this._bOpen)throw Error("The camera is not open.")}async open(e){this.UIElement||await this.setUIElement(de.defaultUIElementURL),this._bindUI(),e&&this.appendAndShowUI();let t=await this.play();this.bOpen=!0,this._focusParameters.fds=null,this._focusParameters.kTimeout=void 0,this._focusSupported=!0,this._tapFocusEnabled&&!this._isSingleFrameModeEnabled()&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,this._focusParameters.fds||(this._focusSupported=!1,this._tapFocusEnabled=!1));const i=this.mapCameraEvents.get("cameraopen");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return t}close(e){if(!this._video)return;this.stop(),this._hideOriginalImage(!1),this.hideTip(),this._unbindUI(),e&&this.hideUI(),this.stopFetchingLoop(),this.bOpen=!1;const t=this.mapCameraEvents.get("cameraclose");for(let e of t){if(!e)continue;const t={width:0,height:0,deviceId:null};setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}stop(){this._video&&this._video.srcObject&&(de._onLog&&de._onLog("DCE: ======stop video========"),this._video.srcObject.getTracks().forEach((e=>{e.stop()})),this._video.srcObject=null,this._videoTrack=null,this._currentCamera=null),this._video&&this.videoSrc&&(de._onLog&&de._onLog("DCE: ======stop existing video========"),this._video.pause(),this._video.currentTime=0),this._bgLoading&&(this._bgLoading.style.animationPlayState=""),this._frameQueue.length=0,this._reusedCvs&&this._reusedCvs.ctx2d&&this._reusedCvs.ctx2d.clearRect(0,0,this._reusedCvs.width,this._reusedCvs.height),this.forceLoseContext()}async getAllCameras(e=!0){let t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind));if(e&&t&&t.length&&!t[0].deviceId){let e=await navigator.mediaDevices.getUserMedia({video:!0});t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind)),e.getTracks().forEach((e=>{e.stop()}))}const i=[],r=[];if(this._allCameras)for(let e of this._allCameras)e._checked&&r.push(e);for(let e=0;e{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}if(r!==s.width||n!==s.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(s));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return s}getResolution(){if(this._bOpen)return[this._video.videoWidth,this._video.videoHeight];{let e=0,t=0;const i=this.videoSettings.video.width,r=this.videoSettings.video.height;return i&&(e=i.exact||i.ideal||i),r&&(t=r.exact||r.ideal||r),[e,t]}}async setResolution(e,t){let i,r;if(e instanceof Array?(i=e[0],r=e[1]):(i=e,r=t),this.videoSettings.video.width={ideal:i},this.videoSettings.video.height={ideal:r},!this._bOpen||this._video.paused)return null;const n=this._video.videoWidth,s=this._video.videoHeight,o=await this.play(null,i,r);if(n!==o.width||s!==o.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(o));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return o}async getResolutions(e){var t,i;let r="";const n=(e,t)=>{const i=this._mapCameraResolutions.get(e);if(!i||!i.length)return!1;for(let e of i)if(e[0]===t.width&&e[1]===t.height)return!0;return!1},s=async(e,t,i)=>{const r={video:{deviceId:{exact:e},width:{ideal:t},height:{ideal:i}}};let n=null;try{n=await navigator.mediaDevices.getUserMedia(r)}catch(e){return null}if(!n)return null;const s=n.getVideoTracks();let o=null;try{const e=s[0].getSettings();o={width:e.width,height:e.height}}catch(e){const t=document.createElement("video");t.srcObject=n,o={width:t.videoWidth,height:t.videoHeight},t.srcObject=null}return s.forEach((e=>{e.stop()})),o};if(!this._bOpen){const o=null===(i=null===(t=this.videoSettings)||void 0===t?void 0:t.video)||void 0===i?void 0:i.deviceId;if(!o)return null;if(r=o.hasOwnProperty("exact")?this.videoSettings.video.deviceId.exact:o.hasOwnProperty("ideal")?this.videoSettings.video.deviceId.ideal:this.videoSettings.video.deviceId,!r)return null;let a=this._mapCameraResolutions.get(r);if(a&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),a=this._mapCameraResolutions.get(r);for(let e of this._predefinedResolutions){const t=await s(r,e.width,e.height);t&&!n(r,t)&&a.push([t.width,t.height])}return a}if(this._currentCamera){r=this._currentCamera.deviceId;let t=this._mapCameraResolutions.get(r);if(t&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),t=this._mapCameraResolutions.get(r);let i=this._videoTrack;for(let e of this._predefinedResolutions){await i.applyConstraints({width:{ideal:e.width},height:{ideal:e.height}});const s=i.getSettings(),o={width:s.width,height:s.height};n(r,o)||t.push([o.width,o.height])}return this._video.srcObject.getTracks().forEach((e=>{e.stop()})),await this.play(r,null,null,{notTriggerPlayedEvent:!0}),t}return null}on(e,t){if(!t)return;const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);i.includes(t)||i.push(t)}off(e,t){const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);const r=i.indexOf(t);-1!==r&&i.splice(r,1)}offAll(e){if(e){if("string"==typeof e){const t=this.mapCameraEvents.get(e);t&&(t.length=0)}}else for(let e of this.mapCameraEvents.values())e&&(e.length=0)}getVideoSettings(){return JSON.parse(JSON.stringify(this.videoSettings))}updateVideoSettings(e){if(this.videoSettings=JSON.parse(JSON.stringify(e)),this._lastDeviceId=null,this._bOpen)return this.play()}isOpen(){return this._bOpen}getCapabilities(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCapabilities()' is unavailable in singleFrameMode.");return this._videoTrack&&this._videoTrack.getCapabilities?this._videoTrack.getCapabilities():{}}getCameraSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCameraSettings()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings():null}getConstraints(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getConstraints()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getConstraints():null}async applyConstraints(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'applyConstraints()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error('"_videoTrack" is null.');if(!this._videoTrack.applyConstraints)throw Error("Not supported.");return await this._videoTrack.applyConstraints(e)}async turnOnTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOnTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!0}]});throw Error("Not supported.")}async turnOffTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOffTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!1}]});throw Error("Not supported.")}async setColorTemperature(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setColorTemperature()' is unavailable in singleFrameMode.");let t=this.getCapabilities().colorTemperature;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{colorTemperature:e,whiteBalanceMode:"manual"}]})}getColorTemperature(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getColorTemperature()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().colorTemperature||0:null}async setExposureCompensation(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setExposureCompensation()' is unavailable in singleFrameMode.");let t=this.getCapabilities().exposureCompensation;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{exposureCompensation:e}]})}getExposureCompensation(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getExposureCompensation()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().exposureCompensation||0:null}async _setHardwareScale(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setHardwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");if(!this._videoTrack)return;const t=this.getCapabilities().zoom;if(!t)throw new Error("Not supported.");return et.max&&(e=t.max),e=ue(e,t.min,t.step,t.max),await this._videoTrack.applyConstraints({advanced:[{zoom:e}]}),e}_getHardwareScale(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().zoom||1:null}_setSoftwareScale(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setSoftwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");t&&this._setScaleCenter(t),this._softwareScale=e,this._scaleVideo(e,t)}_getSoftwareScale(){return this._softwareScale}_setScaleCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setScaleCenter()' is unavailable in singleFrameMode.");if(!e||"string"!=typeof e.x||"string"!=typeof e.y)throw new Error("Invalid center.");const t=this._video.videoWidth,i=this._video.videoHeight;let r=0,n=0;if(e.x.endsWith("px"))r=parseFloat(e.x);else{if(!e.x.endsWith("%"))throw new Error("Invalid scale center.");r=parseFloat(e.x)/100*t}if(e.y.endsWith("px"))n=parseFloat(e.y);else{if(!e.y.endsWith("%"))throw new Error("Invalid scale center.");n=parseFloat(e.y)/100*i}if(NaN==r||NaN==n)throw new Error("Invalid scale center.");this._scaleCenter={x:r,y:n}}_resetScaleCenter(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_resetScaleCenter()' is unavailable in singleFrameMode.");const e=this._video.videoWidth,t=this._video.videoHeight;this._scaleCenter={x:e/2,y:t/2}}_isVideoCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_isVideoCenter()' is unavailable in singleFrameMode.");return e&&e.x==this._video.videoWidth/2&&e.y==this._video.videoHeight/2}async _setZoom(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e>i?this._setSoftwareScale(e/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e)}}async setZoom(e){if("number"!=typeof e&&"object"!=typeof e)throw new TypeError("Illegal type of argument.");if("number"==typeof e)return this._setZoom(e);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e){if("number"!=typeof e.factor)throw new TypeError("Illegal type of 'factor'.");if(e.factor<1)throw new RangeError("Invalid value.");e.centerPoint?this._setScaleCenter(e.centerPoint):this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e.factor);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e.factor>i?this._setSoftwareScale(e.factor/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e.factor)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e.factor)}}}getZoom(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?this._getHardwareScale()*this._softwareScale:null}getZoomSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?{factor:this._getHardwareScale()*this._softwareScale}:null}async resetZoom(){await this.setZoom({factor:1})}async setFrameRate(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFrameRate()' is unavailable in singleFrameMode.");let t=this.getCapabilities().frameRate;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({width:{ideal:Math.max(this._video.videoWidth,this._video.videoHeight)},frameRate:e})}getFrameRate(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrameRate()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().frameRate:null}async _setFocus(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if("string"!=typeof e)throw Error("Invalid focus mode.");e=e.toLowerCase();const i=this.getCapabilities().focusMode,r=this.getCapabilities().focusDistance;if(!i)throw Error("Not supported.");if(!i.includes(e))throw Error("Unsupported mode.");if(t>=0){if(!r)throw Error("Manual focus unsupported.");return tr.max&&(t=r.max),t=ue(t,r.min,r.step,r.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:e,focusDistance:t}]})}return await this._videoTrack.applyConstraints({advanced:[{focusMode:e}]})}async setFocus(e,t){if("string"==typeof e)return this._setFocus(e,t);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if(!e)return;const i=this.getCapabilities(),r=i.focusMode,n=i.focusDistance;if(!r)throw Error("Not supported.");if("string"!=typeof e.mode)throw Error("Invalid focus mode.");const s=e.mode.toLowerCase();if(!r.includes(s))throw Error("Unsupported focus mode.");if("manual"!==s)return this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s}]});if(!n)throw Error("Manual focus unsupported.");if(e.hasOwnProperty("distance")){let t=e.distance;return tn.max&&(t=n.max),t=ue(t,n.min,n.step,n.max),this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s,focusDistance:t}]})}if(!e.area)throw new Error("'distance' or 'area' should be specified in 'manual' mode.");{const t=e.area.centerPoint;let i=e.area.width,r=e.area.height;if(!i||!r){const e=this._video.videoWidth,t=this._video.videoHeight;i||(i=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px"),r||(r=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px")}this._focusParameters._focusArea={centerPoint:{x:t.x,y:t.y},width:i,height:r},await this._setLocalFocus(t,i,r)}}getFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings().focusMode;return e?"continuous"===e?{mode:e}:{mode:e,distance:this._videoTrack.getSettings().focusDistance}:null}getFocusSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings(),t=e.focusMode;return t?"manual"===t?this._focusParameters._focusArea?{mode:"manual",area:JSON.parse(JSON.stringify(this._focusParameters._focusArea))}:{mode:"manual",distance:e.focusDistance}:{mode:t}:null}async _setFocusAndGetContract(e,t){const i=e=>{if(!this._bOpen||!this._videoTrack||this.video.paused||e.focusTaskId!=this._focusParameters.curFocusTaskId){this._bOpen&&this._videoTrack&&!this.video.paused||(this._focusParameters.isDoingFocus=0);const t=new Error(`Focus task ${e.focusTaskId} canceled.`);throw t.name="DeprecatedTaskError",t}1===this._focusParameters.isDoingFocus&&Date.now()-e.timeStart>this._focusParameters.focusCancelableTime&&(this._focusParameters.isDoingFocus=-1)};let r;t=ue(t,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:"manual",focusDistance:t}]}),i(e),r=null==this._focusParameters.oldDistance?this._focusParameters.kTimeout*Math.max(Math.abs(1/this._focusParameters.fds.min-1/t),Math.abs(1/this._focusParameters.fds.max-1/t))+this._focusParameters.minTimeout:this._focusParameters.kTimeout*Math.abs(1/this._focusParameters.oldDistance-1/t)+this._focusParameters.minTimeout,this._focusParameters.oldDistance=t,await new Promise((e=>{setTimeout(e,r)})),i(e);let n=e.focusL-e.focusW/2,s=e.focusT-e.focusH/2,o=e.focusW,a=e.focusH;if(n>=this.video.videoWidth||s>=this.video.videoHeight)throw new Error("Invalid area.");n+o>this.video.videoWidth&&(o=this.video.videoWidth-n),s+a>this.video.videoHeight&&(a=this.video.videoHeight-s);const l=this._getImageData(this.video,this.video.videoWidth,this.video.videoHeight,{sx:n,sy:s,sWidth:o,sHeight:a,dWidth:o,dHeight:a},null,{pixelFormat:ce.RGBA});if(!l)return this._setFocusAndGetContract(e,t);const h=l.data;let c=0;for(let e=0,t=h.length-8;eo&&oc)return await this._doFocusDetail(e,s,o,r,n,h,c)}else{let a=await this._setFocusAndGetContract(e,h);if(o>a)return await this._doFocusDetail(e,s,o,r,n,h,a);if(o==a)return await this._doFocusDetail(e,s,o,h,a);let c=await this._setFocusAndGetContract(e,l);if(c>o&&o{try{(null==t||tthis._focusParameters.fds.max)&&(i=this._focusParameters.fds.max),this._focusParameters.oldDistance=null;let r=ue(Math.sqrt(i*(t||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),n=ue(Math.sqrt((t||this._focusParameters.fds.step)*r),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=ue(Math.sqrt(r*i),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),o=await this._setFocusAndGetContract(e,s),a=await this._setFocusAndGetContract(e,n),l=await this._setFocusAndGetContract(e,r);if(a>l&&lo&&a>o){let t=await this._setFocusAndGetContract(e,i);const n=await this._doFocusDetail(e,r,l,i,t,s,o);return this._focusParameters.isDoingFocus=0,n}if(a==l&&ll){const t=await this._doFocusDetail(e,r,l,s,o);return this._focusParameters.isDoingFocus=0,t}return d(e,t,i)}catch(e){if("DeprecatedTaskError"!==e.name)throw e}};return d(u,r,n)}async enableTapToFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'enableTapToFocus()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error("Video is not playing.");if(!this._focusSupported)throw new Error("Tapping to focus unsupported.");if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))throw this._focusSupported=!1,this._tapFocusEnabled=!1,new Error("Tapping to focus unsupported.");this._tapFocusEnabled=!0}disableTapToFocus(){this._tapFocusEnabled=!1}isTapToFocusEnabled(){return this._tapFocusEnabled}_updateVideoContainerStyle(){if(!this._video)return;if(this._isSingleFrameModeEnabled())return;const e=this._getSoftwareScale(),t=this._videoContainer;if("contain"===this.videoFit&&e>1){const e=this._video.videoWidth,i=this._video.videoHeight,r=window.getComputedStyle(this._elContainer),n=parseFloat(r.width),s=parseFloat(r.height),o=e/i;if(n/sa?o/(i/e):s/(r/e));const c=h*(1-1/e)*(i/2-this._scaleCenter.x),u=h*(1-1/e)*(r/2-this._scaleCenter.y);this._video.style.transform=`translate(${c}px, ${u}px) scale(${e})`}this._updateVideoContainerStyle()}}getFrameSize(e,t,i,r){if(!e||!t)return null;let n,s,o,a,l=e,h=t;const c={regionLeft:0,regionTop:0,regionRight:l,regionBottom:h,regionMeasuredByPercentage:!1};i?(i.regionMeasuredByPercentage?(c.regionLeft=i.regionLeft*l/100,c.regionTop=i.regionTop*h/100,c.regionRight=i.regionRight*l/100,c.regionBottom=i.regionBottom*h/100):(c.regionLeft=i.regionLeft,c.regionTop=i.regionTop,c.regionRight=i.regionRight,c.regionBottom=i.regionBottom),n=Math.round(c.regionLeft),s=Math.round(c.regionTop),l=Math.round(c.regionRight-c.regionLeft),h=Math.round(c.regionBottom-c.regionTop)):(n=0,s=0,l=Math.round(l),h=Math.round(h));const u=Math.max(l,h);if(r&&r>0&&u>r){const e=r/u;l>h?(o=r,a=Math.round(h*e)):(o=Math.round(l*e),a=r)}else o=l,a=h;return o<=0||a<=0?null:{sx:n,sy:s,sWidth:l,sHeight:h,dWidth:o,dHeight:a}}getFrame(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrame()' is unavailable in singleFrameMode.");return this._getVideoData()}getImage(){return this.getFrame()}_drawImage(e,t,i,r,n,s,o){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(!i||!r)return null;if(t instanceof HTMLVideoElement&&4!==t.readyState||t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");let a;de._onLog&&(a=Date.now(),de._onLog("DCE: _drawImage(), START: "+a));let l=0,h=0,c=i,u=r,d=0,f=0,g=i,_=r;n&&(n.sx&&(l=Math.round(n.sx)),n.sy&&(h=Math.round(n.sy)),n.sWidth&&(c=Math.round(n.sWidth)),n.sHeight&&(u=Math.round(n.sHeight)),n.dx&&(d=Math.round(n.dx)),n.dy&&(f=Math.round(n.dy)),n.dWidth&&(g=Math.round(n.dWidth)),n.dHeight&&(_=Math.round(n.dHeight)));let p=ce.RGBA;o&&o.pixelFormat&&(p=o.pixelFormat);const m=e;if(!o||!o.bUseWebGL){de._onLog&&de._onLog("DCE: _drawImage() in context2d."),m.ctx2d||(m.ctx2d=m.getContext("2d",{willReadFrequently:!0}));const e=m.ctx2d;if(!e)throw new Error("Unable to get 'CanvasRenderingContext2D' from canvas.");return(m.width{const t=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW);const i=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,i),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW),{positions:t,texCoords:i}},i=e=>{const t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),t},r=(e,t)=>{const i=e.createProgram();if(t.forEach((t=>e.attachShader(i,t))),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS)){const t=new Error(`An error occured linking the program: ${e.getProgramInfoLog(i)}.`);throw t.name="WebGLError",t}return e.useProgram(i),i},n=(e,t,i)=>{const r=e.createShader(t);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){const t=new Error(`An error occured compiling the shader: ${e.getShaderInfoLog(r)}.`);throw t.name="WebGLError",t}return r},s="\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n \n uniform mat3 u_matrix;\n uniform mat3 u_textureMatrix;\n \n varying vec2 v_texCoord;\n void main(void) {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1.0);\n v_texCoord = vec4((u_textureMatrix * vec3(a_texCoord, 1)).xy, 0, 1.0).xy;\n }\n ";let o="rgb";["rgba","rbga","grba","gbra","brga","bgra"].includes(p)&&(o=p.slice(0,3));const a=`\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_image;\n uniform float uColorFactor;\n \n void main() {\n vec4 sample = texture2D(u_image, v_texCoord);\n float grey = 0.21 * sample.r + 0.71 * sample.g + 0.07 * sample.b;\n gl_FragColor = vec4(sample.${o} * (1.0 - uColorFactor) + (grey * uColorFactor), sample.a);\n }\n `,l=r(e,[n(e,e.VERTEX_SHADER,s),n(e,e.FRAGMENT_SHADER,a)]);this._webGLProgramInfo={program:l,attribLocations:{vertexPosition:e.getAttribLocation(l,"a_position"),texPosition:e.getAttribLocation(l,"a_texCoord")},uniformLocations:{uSampler:e.getUniformLocation(l,"u_image"),uColorFactor:e.getUniformLocation(l,"uColorFactor"),uMatrix:e.getUniformLocation(l,"u_matrix"),uTextureMatrix:e.getUniformLocation(l,"u_textureMatrix")}},this._webGLBuffers=t(e),this._webGLTexture=i(e),this.shaderPixelFormat=p}const n=(e,t,i)=>{e.bindBuffer(e.ARRAY_BUFFER,t),e.enableVertexAttribArray(i),e.vertexAttribPointer(i,2,e.FLOAT,!1,0,0)},o=(e,t,i)=>{const r=e.RGBA,n=e.RGBA,s=e.UNSIGNED_BYTE;e.bindTexture(e.TEXTURE_2D,t),e.texImage2D(e.TEXTURE_2D,0,r,n,s,i)},v=(e,t,s,o)=>{e.clearColor(0,0,0,1),e.clearDepth(1),e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),n(e,s.positions,t.attribLocations.vertexPosition),n(e,s.texCoords,t.attribLocations.texPosition),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,o),e.uniform1i(t.uniformLocations.uSampler,0),e.uniform1f(t.uniformLocations.uColorFactor,[ce.GREY,ce.GREY32].includes(p)?1:0);let a,m,v=he.translate(he.identity(),-1,-1);v=he.scale(v,2,2),v=he.scale(v,1/e.canvas.width,1/e.canvas.height),a=he.translate(v,d,f),a=he.scale(a,g,_),e.uniformMatrix3fv(t.uniformLocations.uMatrix,!1,a),m=he.translate(he.identity(),l/i,h/r),m=he.scale(m,c/i,u/r),e.uniformMatrix3fv(t.uniformLocations.uTextureMatrix,!1,m),e.drawArrays(e.TRIANGLES,0,6)};let y;if(o(e,this._webGLTexture,t),v(e,this._webGLProgramInfo,this._webGLBuffers,this._webGLTexture),s){if(s.lengtht||r.sy>i||r.sx+r.sWidth>t||r.sy+r.sHeight>i)throw new Error("Invalid position.");if(e instanceof HTMLVideoElement&&4!==e.readyState||e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");let o;de._onLog&&(o=Date.now(),de._onLog("DCE: _getImageData(), START: "+o));const a=Math.round(r.sx),l=Math.round(r.sy),h=Math.round(r.sWidth),c=Math.round(r.sHeight),u=Math.round(r.dWidth),d=Math.round(r.dHeight);let f=ce.RGBA;s&&s.pixelFormat&&(f=s.pixelFormat);let g,_,p,m=this._bWebGLSupported;s&&0==s.bUseWebGL&&(m=!1),m?(this._reusedWebGLCvs||(this._reusedWebGLCvs=document.createElement("canvas")),g=this._reusedWebGLCvs):(this._reusedCvs||(this._reusedCvs=document.createElement("canvas")),g=this._reusedCvs);try{if(m)if(de._onLog&&de._onLog("DCE: _getImageData() in WebGL."),n)if(f===ce.GREY){if(p=new Uint8Array(u*d*4),_=this._drawImage(g,e,t,i,{sx:a,sy:l,sWidth:h,sHeight:c,dWidth:u,dHeight:d},p,{pixelFormat:f,bUseWebGL:m}),p=this._transformPixelFormat(p,_.pixelFormat,f),n){if(n.length=this.croppingRegions.length||this._croppingRegionIndex<0)throw new Error("The 'croppingRegionIndex' is out of bounds.");e=this.croppingRegions[this._croppingRegionIndex],this.bIncreaseRegionIndexAuto&&++this._croppingRegionIndex>=this.croppingRegions.length&&(this._croppingRegionIndex=0)}return e}_fetchingLoop(e){if(this.isDisposed&&this.disposed)return;if(!this._bOpen||!this.isFetchingLoopStarted())return void this.stopFetchingLoop();const t=()=>{de._onLog&&de._onLog("DCE: start fetching a frame into buffer: "+Date.now());const e=this.getCurrentRegion();let t=this._getVideoData(null,{region:e});if(!t)return void de._onLog;for(;this._frameQueue&&this._frameQueue.length>=this.maxNumberOfFramesInBuffer;)this._frameQueue.shift();this._frameQueue.push(t);const i=this.mapCameraEvents.get("frameaddedtobuffer");for(let e of i)e&&setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this)}),0)},i=()=>{this.isDisposed&&this.disposed||(this._frameLoopTimeoutId2&&clearTimeout(this._frameLoopTimeoutId2),this.refreshInterval<=0||(this._frameLoopTimeoutId2=setTimeout((()=>{this.isDisposed&&this.disposed||(this._bOpen&&this.isFetchingLoopStarted()?(t(),i()):this.stopFetchingLoop())}),this.refreshInterval)))};e&&(this._frameQueue.length0&&i()):this.refreshInterval>0?(t(),i()):0===this.refreshInterval?t():this.refreshInterval),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameLoopTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._fetchingLoop(!0)}),this.loopInterval)}startFetchingLoop(){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(this._assertOpen(),this._isSingleFrameModeEnabled())throw Error("'startFetchingLoop()' is unavailable in singleFrameMode.");this.isFetchingLoopStarted()||(this._bFetchingLoopStarted=!0,this._recordedStates.fetchingLoopStart=!0,de._onLog&&de._onLog("DCE: start fetching loop: "+Date.now()),this._fetchingLoop(!0))}isFetchingLoopStarted(){return this._bFetchingLoopStarted}stopFetchingLoop(){this._bFetchingLoopStarted&&(de._onLog&&de._onLog("DCE: stop fetching loop: "+Date.now()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameQueue.length=0,this._bFetchingLoopStarted=!1,this._recordedStates.fetchingLoopStart=!1)}getFrameFromBuffer(e){return this._frameQueue&&this._frameQueue.length?e?ee.getId()>=0))}getSelectedDrawingItems(){return this._drawingLayersManager.getSelectedDrawingItems()}createDrawingStyle(e){return this._drawingLayersManager.createDrawingStyle(e)}getDrawingStyle(e){return this._drawingLayersManager.getDrawingStyle(e)}getDrawingStyles(){return this._drawingLayersManager.getDrawingStyles()}updateDrawingStyle(e,t){return this._drawingLayersManager.updateDrawingStyle(e,t)}clearDrawingLayers(){const e=this.getDrawingLayers();for(let t of e)this.deleteDrawingLayer(t.getId())}showTip(e,t,i,r,n=3e3,s=!0){this._assertOpen(),this._tipArgs.x=e,this._tipArgs.y=t,this._tipArgs.width=i,this._tipArgs.autoShowSuggestedTip=!!s,this._drawingLayerOfTip||(this._drawingLayerOfTip=this._createDrawingLayer(-1)),this._tipStyleId||(this._tipStyleId=this.createDrawingStyle({fillStyle:"#FFFFFF",paintMode:"fill",fontFamily:"Open Sans",fontSize:40})),this._drawingLayerOfTip.clearDrawingItems();const o=new se(r||"",e,t,i,this._tipStyleId);o._fabricObject.paddingTop=15,o._fabricObject.calcTextHeight=function(){for(var e=0,t=0,i=this._textLines.length;t0&&(this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}_hideTip(){this._drawingLayerOfTip&&(this.deleteDrawingLayer(this._drawingLayerOfTip.getId()),this._drawingLayerOfTip=null,this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId))}hideTip(){this._hideTip(),this._tipArgs.x=null,this._tipArgs.y=null,this._tipArgs.width=null,this._tipArgs.autoShowSuggestedTip=null}updateTipMessage(e){if(!this._drawingLayerOfTip)throw new Error("The Tip is not showing.");this._drawingLayerOfTip.getDrawingItems()[0].setAttribute("text",e),this._drawingLayerOfTip.renderAll(),this._tipArgs.duration>0&&(this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId),this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}suggestTip(e,t){this._tipArgs.autoShowSuggestedTip&&(this._drawingLayerOfTip?this.updateTipMessage(t):void 0!==this._tipArgs.x&&this.showTip(this._tipArgs.x,this._tipArgs.y,this._tipArgs.width,t,this._tipArgs.duration)),this.onTipSuggested&&setTimeout((()=>{this.isDisposed&&this.disposed||this.onTipSuggested.apply(this,[e,t])}),0)}_createControler(){if(this._controler||(this._controler=new le(this)),this._controler)return this._controler}_destroyControler(){this._controler=null}setOriginalImage(e,t,i){if(!e||!t||!i)throw new Error("Invalid arguments");this._originalImageData={imageData:e,width:t,height:i};let r=this._cvsOriginalImage;r||(r=document.createElement("canvas"),r.style.position="absolute",r.style.width="100%",r.style.height="100%",r.style.left="0",r.style.top="0",r.style.backgroundColor="white",r.style.objectFit="contain",this._cvsOriginalImage=r),r.width===t&&r.height===i||(r.width=t,r.height=i);const n=r.getContext("2d");n.clearRect(0,0,r.width,r.height),e instanceof Uint8Array||e instanceof Uint8ClampedArray?(e instanceof Uint8Array&&(e=new Uint8ClampedArray(e.buffer)),n.putImageData(new ImageData(e,t,i),0,0)):e instanceof HTMLCanvasElement&&n.drawImage(e,0,0),document.body.contains(r)&&""===r.style.display&&this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"})}getOriginalImage(){return this._originalImageData?Object.assign({},this._originalImageData):null}async deleteOriginalImage(){await this.hideOriginalImage(),this._cvsOriginalImage&&(this._cvsOriginalImage.remove(),this._cvsOriginalImage=null),this._originalImageData=null}_showOriginalImageCvs(){this._cvsOriginalImage&&"none"==this._cvsOriginalImage.style.display&&(this._cvsOriginalImage.style.display="")}_hideOriginalImageCvs(){this._cvsOriginalImage&&(this._cvsOriginalImage.style.display="none")}showOriginalImage(){if(!this._originalImageData)throw new Error("No original image is set.");const e=this._cvsOriginalImage;if(""===e.style.display&&document.body.contains(e))return;const{width:t,height:i}=this._originalImageData;if(this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"}),this._bOpen&&(this._video&&!this._video.paused&&this._video.pause(),this._bFetchingLoopStarted&&(this.stopFetchingLoop(),this._recordedStates.fetchingLoopStart=!0),this.ifShowScanRegionMask&&this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this.ifShowScanRegionLaser&&this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none"),this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none"),this._selCam&&(this._selCam.parentElement.style.display="none")),!document.body.contains(e))if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._showOriginalImageCvs()}async _hideOriginalImage(e){this._originalImageData&&this._cvsOriginalImage&&"none"!==this._cvsOriginalImage.style.display&&(this._updateDrawingLayersSize(),this._bOpen&&e&&(this._video&&this._recordedStates.videoPlaying&&await this.play(null,null,null,{notTriggerSingleFrameClick:!0}),this._recordedStates.fetchingLoopStart&&!this._isSingleFrameModeEnabled()&&this.startFetchingLoop(),this.ifShowScanRegionMask&&this._cvsScanRegion&&this._recordedStates.maskShow&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this._divScanLight&&this._recordedStates.laserShow&&this.showScanRegionLaser(),this._cvsViewDecorator&&this._recordedStates.decoratorShow&&this.showViewDecorator(),this._scanRegionOverlayContainer&&this._recordedStates.overlayShow&&this.showScanRegionOverlays()),this._selCam&&(this._selCam.parentElement.style.display=""),this._hideOriginalImageCvs())}async hideOriginalImage(){return this._hideOriginalImage(!0)}transformCoord(e){if(!this.isOpen())throw new Error("Unavailable when the camera is not open.");if(this._isSingleFrameModeEnabled()&&!this._cvsSingleFrameMode)throw new Error("No image is selected. ");const t=this._elContainer.getBoundingClientRect();let i,r,n,s,o,a=t.left,l=t.top,h=a+window.scrollX,c=l+window.scrollY;this._isSingleFrameModeEnabled()?(i=this._cvsSingleFrameMode.width,r=this._cvsSingleFrameMode.height,n=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).width),s=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).height),o="contain"):(i=this.video.videoWidth,r=this.video.videoHeight,n=parseFloat(window.getComputedStyle(this._elContainer).width),s=parseFloat(window.getComputedStyle(this._elContainer).height),o=this.videoFit);const u=n/s,d=i/r;let f,g,_,p,m=1;if("contain"===o)u({x:t.x-e.left-e.width/2,y:t.y-e.top-e.height/2}))),e.addWithUpdate()}else i.points=t;const r=i.points.length-1;return i.controls=i.points.reduce((function(e,t,i){return e["p"+i]=new V.Control({positionHandler:$,actionHandler:ie(i>0?i-1:r,te),actionName:"modifyPolygon",pointIndex:i}),e}),{}),i._setPositionDimensions({}),!0}}_extendGet(e){if("startPoint"===e||"endPoint"===e){const t=[],i=this._fabricObject;if(i.selectable&&!i.group)for(let e in i.oCoords)t.push({x:i.oCoords[e].x,y:i.oCoords[e].y});else for(let e of i.points){let r=e.x-i.pathOffset.x,n=e.y-i.pathOffset.y;const s=V.util.transformPoint({x:r,y:n},i.calcTransformMatrix());t.push({x:s.x,y:s.y})}return"startPoint"===e?t[0]:t[1]}}},DT_Group:class extends Q{constructor(e){super(new V.Group(e.map((e=>e._getFabricObject())))),this._fabricObject.on("selected",(()=>{this.styleSelector="selected";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("selected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)})),this._fabricObject.on("deselected",(()=>{this.styleSelector="default";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("deselected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)}))}getChildItems(){return this._fabricObject._objects.map((e=>e.getDrawingItem()))}addChildItem(e){if(!e||!e.isDrawingItem)throw TypeError("Illegal drawing item.");this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"add"):this._fabricObject.addWithUpdate(e._getFabricObject())}removeChildItem(e){e&&e.isDrawingItem&&(this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"remove"):this._fabricObject.removeWithUpdate(e._getFabricObject()))}}};function ge(e,t,i){return(i.x-e.x)*(t.y-e.y)==(t.x-e.x)*(i.y-e.y)&&Math.min(e.x,t.x)<=i.x&&i.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=i.y&&i.y<=Math.max(e.y,t.y)}function _e(e){return Math.abs(e)<1e-6?0:e<0?-1:1}function pe(e,t,i,r){let n=e[0]*(i[1]-t[1])+t[0]*(e[1]-i[1])+i[0]*(t[1]-e[1]),s=e[0]*(r[1]-t[1])+t[0]*(e[1]-r[1])+r[0]*(t[1]-e[1]);return!((n^s)>=0&&0!==n&&0!==s)&&(n=i[0]*(e[1]-r[1])+r[0]*(i[1]-e[1])+e[0]*(r[1]-i[1]),s=i[0]*(t[1]-r[1])+r[0]*(i[1]-t[1])+t[0]*(r[1]-i[1]),!((n^s)>=0&&0!==n&&0!==s))}class me extends P{constructor(){super(),this._barcodeFillStyle="rgba(254,180,32,0.3)",this._barcodeStrokeStyle="rgba(254,180,32,0.9)",this._barcodeLineWidth=1,this._barcodeFillStyleBeforeVerification="rgba(248,252,0,0.2)",this._barcodeStrokeStyleBeforeVerification="transparent",this._barcodeLineWidthBeforeVerification=2,this.bFilterRegionInJs=!0,this._onPlayed=null}static get version(){return this._version+`(DCE ${de.getVersion()})`}static _fireHTTPSWarnning(){me.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{me.onWarning&&me.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}static async testCameraAccess(){return de.testCameraAccess()}_fireResolutionWarning(){if(!this.singleFrameMode&&this.onWarning&&this.dce.isOpen()){const e=this.dce.getConstraints();e&&e.width<1280&&e.height<720&&setTimeout((()=>{this.onWarning&&this.onWarning({id:3,message:"Camera resolution too low, please use a higher resolution (720P or better)."})}),0)}}getUIElement(){return this.dce.getUIElement()}async setUIElement(e){await this.dce.setUIElement(e)}get singleFrameMode(){return this.dce.singleFrameMode}set singleFrameMode(e){if("boolean"!=typeof e&&!["image","camera"].includes(e))throw new Error("Invalid value.");this.dce.singleFrameMode=e,e&&(this.dce.ifShowScanRegionLaser=!1,(async()=>{let e=await this.getScanSettings();e.oneDTrustFrameCount=1,await this.updateScanSettings(e)})())}get onUnduplicatedRead(){return this.onUniqueRead}set onUnduplicatedRead(e){this.onUniqueRead=e}get video(){return this.dce&&this.dce.video}set videoSrc(e){this.dce&&(this.dce.videoSrc=e)}get videoSrc(){return this.dce&&this.dce.videoSrc}set onTipSuggested(e){this.dce&&(this.dce.onTipSuggested=e)}get onTipSuggested(){return this.dce&&this.dce.onTipSuggested}_assertOpen(){if(!this.dce.isOpen())throw Error("The scanner is not open.")}set barcodeFillStyle(e){this._barcodeFillStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{fillStyle:e})}get barcodeFillStyle(){return this._barcodeFillStyle}set barcodeStrokeStyle(e){this._barcodeStrokeStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{strokeStyle:e})}get barcodeStrokeStyle(){return this._barcodeStrokeStyle}set barcodeLineWidth(e){this._barcodeLineWidth=e,this.dce&&this.dce.updateDrawingStyle(3,{lineWidth:e})}get barcodeLineWidth(){return this._barcodeLineWidth}set barcodeFillStyleBeforeVerification(e){this._barcodeFillStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{fillStyle:e})}get barcodeFillStyleBeforeVerification(){return this._barcodeFillStyleBeforeVerification}set barcodeStrokeStyleBeforeVerification(e){this._barcodeStrokeStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{strokeStyle:e})}get barcodeStrokeStyleBeforeVerification(){return this._barcodeStrokeStyleBeforeVerification}set barcodeLineWidthBeforeVerification(e){this._barcodeLineWidthBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{lineWidth:e})}get barcodeLineWidthBeforeVerification(){return this._barcodeLineWidthBeforeVerification}set regionMaskFillStyle(e){this.dce.setScanRegionMaskStyle({fillStyle:e})}get regionMaskFillStyle(){return this.dce.regionMaskFillStyle}set regionMaskStrokeStyle(e){this.dce.setScanRegionMaskStyle({strokeStyle:e})}get regionMaskStrokeStyle(){return this.dce.regionMaskStrokeStyle}set regionMaskLineWidth(e){this.dce.setScanRegionMaskStyle({lineWidth:e})}get regionMaskLineWidth(){return this.dce.regionMaskLineWidth}set region(e){this._region=e,this.dce&&(e?e instanceof Array||this.dce.setScanRegion(e):this.dce.setScanRegion(null)),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e,this.dce.framePixelFormat=e?"rgba":"grey"}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}async createDCEInstance(){this.dce||(P._onLog&&P._onLog("createDCEInstance()"),de.defaultUIElementURL=null,this.dce=await de.createInstance(),this.dce.refreshInterval=200,this.dce.framePixelFormat="grey",this.dce.maxCvsSideLength=this.maxCvsSideLength,this._drawingItemNamespace=fe,["iPhone","iPad","Android","HarmonyOS"].includes(P.browserInfo.OS)||this.dce.setResolution(1920,1080),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"}),this.barcodeLineWidth=this._barcodeLineWidth,this.dce.on("cameraChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("resolutionChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("cameraClose",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1})),this.dce.on("singleFrameAcquired",(async t=>{if(!t)return;if(!t.data)return;let i;this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:r,sx:n,sy:s,width:o,height:a,stride:l,pixelFormat:h,timeStamp:c,_sWidth:u,_sHeight:d}=t,f={timeStamp:c};if("grey"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_GrayScaled,0,f);else if("rgba"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ABGR_8888,0,f);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ARGB_8888,0,f)}if(await this.clearMapDecodeRecord(),P.recalculateResultLocation(i,n,s,u,d,o,a),this._drawResults(i),this.onFrameRead&&this.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(i);this.onFrameRead(e)}if(this.onUniqueRead&&this.isOpen()&&!this._bPauseScan)for(let e of i)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))})))}set maxCvsSideLength(e){this._maxCvsSideLength=e,this.dce.maxCvsSideLength=e}get maxCvsSideLength(){return this._maxCvsSideLength}static async createInstance(e){const t=new me;t._instanceID=await me.createInstanceInWorker(!0),await t.createDCEInstance(),"string"==typeof e&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return await t.dce.setUIElement(me.defaultUIElementURL),t.singleFrameMode&&console.warn("The `navigator.mediaDevices.getUserMedia` is unavailable. automatically change to `singleFrameMode`."),me._fireHTTPSWarnning(),t.singleFrameMode||await t.updateRuntimeSettings("single"),t}async decodeCurrentFrame(e){this._assertOpen();let t=null;e&&e.region&&(t=e.region);const i=this.dce._getVideoData(null,{region:t});return this._decode_DCEFrame(i)}async updateRuntimeSettings(t){let i;if("string"==typeof t)if("speed"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=0,i.localizationModes=[2,0,0,0,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9}else if("balance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=512,i.deblurLevel=3,i.localizationModes=[2,16,0,0,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else if("coverage"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=512,i.deblurLevel=5,i.scaleDownThreshold=1e5,i.localizationModes=[2,16,4,8,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else if("single"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region)}else if("dense"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=0,i.deblurLevel=7,i.scaleDownThreshold=1e5,i.localizationModes=[2,8,0,0,0,0,0,0],i.minResultConfidence=0,i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else if("distance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=0,i.scaleDownThreshold=1e5,i.localizationModes=[2,8,0,0,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else i=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(i=JSON.parse(JSON.stringify(t)),i.region instanceof Array){let e=t.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(i.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!P._bUseFullFeature){if(0!=(i.barcodeFormatIds&~(e.EnumBarcodeFormat.BF_ONED|e.EnumBarcodeFormat.BF_QR_CODE|e.EnumBarcodeFormat.BF_PDF417|e.EnumBarcodeFormat.BF_DATAMATRIX))||0!=i.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=i.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}{let e=i.region;if(this.bFilterRegionInJs?this.userDefinedRegion=JSON.parse(JSON.stringify(e)):this.userDefinedRegion=null,e instanceof Array)if(e.length){for(let t=0;t{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(i=>{if(i.success){try{this._handleRetJsonString(i.updateReturn)}catch(e){t(e)}return e()}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(i)}})})),"string"==typeof t&&["speed","balance","coverage","dense","distance"].includes(t)&&(await this.setModeArgument("BinarizationModes",0,"EnableFillBinaryVacancy","1"),await this.setModeArgument("BinarizationModes",0,"BlockSizeX","0"),await this.setModeArgument("BinarizationModes",0,"BlockSizeY","0"))}_bindUI(){if(!this.getUIElement())throw new Error("Need to define `UIElement` before opening.");if(this.dce._bindUI(),!this.dce.video)throw this._unbindUI(),Error("Can not find the video container element with class 'dce-video-container'")}_unbindUI(){this.dce._unbindUI()}set onPlayed(e){this.dce.off("played",this._onPlayed),this._onPlayed=e,this.dce.on("played",this._onPlayed)}get onPlayed(){return this._onPlayed}async getAllCameras(){return this.dce.getAllCameras()}async getCurrentCamera(){return this.dce.getSelectedCamera()}async setCurrentCamera(e){const t=await this.dce.selectCamera(e);return this._fireResolutionWarning(),t}getResolution(){return this.dce.getResolution()}async setResolution(e,t){const i=await this.dce.setResolution(e,t);return this._fireResolutionWarning(),i}getVideoSettings(){return this.dce.getVideoSettings()}updateVideoSettings(e){return this.dce.updateVideoSettings(e)}isOpen(){return this.dce&&this.dce.isOpen()}setVideoFit(e){return this.dce&&this.dce.setVideoFit(e)}getVideoFit(){return this.dce&&this.dce.getVideoFit()}set ifShowScanRegionMask(e){this.dce&&(this.dce.ifShowScanRegionMask=e)}get ifShowScanRegionMask(){return this.dce&&this.dce.ifShowScanRegionMask}set ifSaveLastUsedCamera(e){this.dce&&(this.dce.ifSaveLastUsedCamera=e)}get ifSaveLastUsedCamera(){return this.dce&&this.dce.ifSaveLastUsedCamera}set ifSkipCameraInspection(e){this.dce&&(this.dce.ifSkipCameraInspection=e)}get ifSkipCameraInspection(){return this.dce&&this.dce.ifSkipCameraInspection}stop(){this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.dce.stop(),this.dce.ifShowScanRegionLaser=!1,this.dce.hideViewDecorator(),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}pause(){this.dce.pause()}async play(e,t,i){this.dce.ifShowScanRegionLaser=!0;const r=await this.dce.play(e,t,i);return this._fireResolutionWarning(),r}pauseScan(e){this._assertOpen(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce.ifShowScanRegionLaser=!1,this.dce.stopFetchingLoop()}resumeScan(){this._assertOpen(),this._bPauseScan=!1,this.dce.ifShowScanRegionLaser=!0}getCapabilities(){return this.dce.getCapabilities()}getCameraSettings(){return this.dce.getCameraSettings()}getConstraints(){return this.dce.getConstraints()}async applyConstraints(e){return this.dce.applyConstraints(e)}async turnOnTorch(){return this.dce.turnOnTorch()}async turnOffTorch(){return this.dce.turnOffTorch()}async setColorTemperature(e){return this.dce.setColorTemperature(e)}getColorTemperature(){return this.dce.getColorTemperature()}async setExposureCompensation(e){return this.dce.setExposureCompensation(e)}getExposureCompensation(){return this.dce.getExposureCompensation()}async setZoom(e){return this.dce.setZoom(e)}getZoomSettings(){return this.dce.getZoomSettings()}resetZoom(){return this.dce.resetZoom()}async setFrameRate(e){return this.dce.setFrameRate(e)}getFrameRate(){return this.dce.getFrameRate()}async setFocus(e,t){return this.dce.setFocus(e,t)}getFocus(){return this.dce.getFocus()}getFocusSettings(){return this.dce.getFocusSettings()}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this.dce.stopFetchingLoop(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(!this.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce.video||this.dce.video.paused||this._bPauseScan)return P._onLog&&P._onLog("Video or scan is paused. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));P._onLog&&P._onLog("======= once read ======="),P._onLog&&(this._timeStartDecode=Date.now());const t=this._getVideoFrame();if(!t)return P._onLog&&P._onLog("Get invalid frame."),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{t._bUseWebGL||"grey"!==t.pixelFormat||(this.dce.framePixelFormat="rgba");let i=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:r,sx:n,sy:s,width:o,height:a,stride:l,pixelFormat:h,timeStamp:c,_sWidth:u,_sHeight:d}=t,f={timeStamp:c};if("grey"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_GrayScaled,0,f);else if("rgba"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ABGR_8888,0,f);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ARGB_8888,0,f)}if(P.recalculateResultLocation(i,n,s,u,d,o,a),0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration)),this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan&&(this.autoZoom||this.autoFocus||this.autoSuggestTip))if(i.length)this.autoZoomInFrameArray.length=0,this.autoZoomOutFrameCount=0,this.frameArrayInIdealZoom.length=0,this.suggestTipFrameArray.length=0,this.autoZoom&&this.autoFocus&&(this.nextActionInIdealZoom="focus"),this.autoFocusFrameArray.length=0,this.noIntermediateResultsCount=0;else{const t=async()=>new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!1}})})),i=await t(),r=(e,t,i,r,n,s,o)=>{let a=s/r,l=o/n;e.x1=e.x1/a+t,e.x2=e.x2/a+t,e.x3=e.x3/a+t,e.x4=e.x4/a+t,e.y1=e.y1/l+i,e.y2=e.y2/l+i,e.y3=e.y3/l+i,e.y4=e.y4/l+i},l=t=>{if(!t)return null;const i={};let l,h,c,f,g;{const e=this.video.videoWidth*(1-this.autoZoomDetectionArea)/2,t=this.video.videoWidth*(1+this.autoZoomDetectionArea)/2,i=t,r=e,n=this.video.videoHeight*(1-this.autoZoomDetectionArea)/2,s=n,o=this.video.videoHeight*(1+this.autoZoomDetectionArea)/2;g={x1:e,x2:t,x3:i,x4:r,y1:n,y2:s,y3:o,y4:o}}const _=(e,t)=>{const i=(e,t)=>{if(!e&&!t)throw new Error("Invalid arguments.");return function(e,t,i){let r=!1;const n=e.length;if(n<=2)return!1;for(let s=0;s0!=_e(a.y-i)>0&&_e(t-(i-o.y)*(o.x-a.x)/(o.y-a.y)-o.x)<0&&(r=!r)}return r}([{x:t.x1,y:t.y1},{x:t.x2,y:t.y2},{x:t.x3,y:t.y3},{x:t.x4,y:t.y4}],e.x,e.y)},r=(e,t)=>!!(pe([e[0],e[1]],[e[2],e[3]],[t.x1,t.y1],[t.x2,t.y2])||pe([e[0],e[1]],[e[2],e[3]],[t.x2,t.y2],[t.x3,t.y3])||pe([e[0],e[1]],[e[2],e[3]],[t.x3,t.y3],[t.x4,t.y4])||pe([e[0],e[1]],[e[2],e[3]],[t.x4,t.y4],[t.x1,t.y1]));return!!(i({x:e.x1,y:e.y1},t)||i({x:e.x2,y:e.y2},t)||i({x:e.x3,y:e.y3},t)||i({x:e.x4,y:e.y4},t))||(!!(i({x:t.x1,y:t.y1},e)||i({x:t.x2,y:t.y2},e)||i({x:t.x3,y:t.y3},e)||i({x:t.x4,y:t.y4},e))||!!(r([t.x1,t.y1,t.x2,t.y2],e)||r([t.x2,t.y2,t.x3,t.y3],e)||r([t.x3,t.y3,t.x4,t.y4],e)||r([t.x4,t.y4,t.x1,t.y1],e)))},p=[];for(let i of t){if(i.resultType!==e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE)continue;const t=i.scaleDownRatio;for(let e of i.results){if(!e)continue;const i={x1:e.x1=e.x1*t,x2:e.x2=e.x2*t,x3:e.x3=e.x3*t,x4:e.x4=e.x4*t,y1:e.y1=e.y1*t,y2:e.y2=e.y2*t,y3:e.y4=e.y3*t,y4:e.y4=e.y4*t};r(i,n,s,u,d,o,a),_(g,i)&&p.push(e)}}const m=(t=>{if(!t||!t.length)return null;const i=e=>{const t=(e.x1+e.x2+e.x3+e.x4)/4,i=(e.y1+e.y2+e.y3+e.y4)/4;return(t-o/2)*(t-o/2)+(i-a/2)*(i-a/2)};let r,n=t.filter((t=>t.barcodeFormat==e.EnumBarcodeFormat.BF_QR_CODE||t.barcodeFormat==e.EnumBarcodeFormat.BF_DATAMATRIX));if(n.length||(n=t.filter((t=>t.barcodeFormat==e.EnumBarcodeFormat.BF_ONED)),n.length||(n=t)),!n.length)return null;r=n[0];let s=i(r);if(1!=n.length)for(let e=1;e1.1*r.confidence?(r=n[e],s=t):n[e].confidence>.9*r.confidence&&t!0===e)).length>=this.suggestTipFrameLimit[1]){this.suggestTipFrameArray.length=0;const e=h.x3-h.x1,t=h.y3-h.y1;h.result.moduleSizet?e>o*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):e>.6*o&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."):e<=t&&(t>a*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):t>.6*a&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."))}if(this.autoZoom){const e=this.autoZoomIdealArea[1];let t=(1-this.autoZoomTargetBorder)/2;const i=h.x1/u,l=(u-h.x3)/u,c=h.y1/d,f=(d-h.y3)/d;if(i>e&&l>e&&c>e&&f>e&&h.result.moduleSize{}))),this.autoZoomInFrameArray.filter((e=>!0===e)).length>=this.autoZoomInFrameLimit[1]){this.autoZoomInFrameArray.length=0;const e=[(.5-t)/(.5-i),(.5-t)/(.5-l),(.5-t)/(.5-c),(.5-t)/(.5-f)].filter((e=>e>0)),r=Math.min(...e,this.autoZoomInIdealModuleSize/h.result.moduleSize),n=this.dce.getZoomSettings().factor;let s=Math.max(Math.pow(n*r,1/this.autoZoomInMaxTimes),this.autoZoomInMinStep);s=Math.min(s,r);const o=n*s;await this.setZoom({factor:o}),this.dce.clearFrameBuffer()}}else if(this.autoZoomInFrameArray.length=0,this.frameArrayInIdealZoom.push(!0),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.frameArrayInIdealZoom.filter((e=>!0===e)).length>=this.frameLimitInIdealZoom[1])if(this.frameArrayInIdealZoom.length=0,"focus"===this.nextActionInIdealZoom&&this.autoFocus){r(h,n,s,u,d,o,a);try{await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer(),this.nextActionInIdealZoom="zoomOut"}else{if("zoomOut"!==this.nextActionInIdealZoom&&this.autoFocus)throw new Error("Invalid action.");if(this.enableZoomOutInIdealZoom){t=this.autoZoomIdealArea[1]+this.autoZoomOutStepRate_2;const e=[(.5-t)/(.5-i),(.5-t)/(.5-l),(.5-t)/(.5-c),(.5-t)/(.5-f)].filter((e=>e>0));let r=Math.min(...e)*this.dce.getZoomSettings().factor;await this.setZoom({factor:r}),this.dce.clearFrameBuffer(),this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}}}else if(this.autoFocus&&(this.autoFocusFrameArray.push(!0),this.autoFocusFrameArray.splice(0,this.autoFocusFrameArray.length-this.autoFocusFrameLimit[0]),this.autoFocusFrameArray.filter((e=>!0===e)).length>=this.autoFocusFrameLimit[1])){this.autoFocusFrameArray.length=0;try{r(h,n,s,u,d,o,a),await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer()}}else if(this.noIntermediateResultsCount++,this.suggestTipFrameArray.push(!1),this.autoZoom){if(this.autoZoomInFrameArray.push(!1),this.autoZoomInFrameArray.splice(0,this.autoZoomInFrameArray.length-this.autoZoomInFrameLimit[0]),this.autoZoomOutFrameCount++,this.frameArrayInIdealZoom.push(!1),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.autoZoomOutFrameCount>=this.autoZoomOutFrameLimit){this.autoZoomOutFrameCount=0;const e=this.getZoomSettings().factor;if(e>this.autoZoomOutMinValue){const t=Math.max((e-1)*this.autoZoomOutStepRate,this.autoZoomOutMinStep),i=Math.max(e-t,this.autoZoomOutMinValue);await this.setZoom({factor:i}),this.dce.clearFrameBuffer()}}this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}else this.autoFocus&&(this.autoFocusFrameArray.length=0,this.setFocus({mode:"continuous"}).catch((e=>{})))}return i})().then((e=>{if(P._onLog&&P._onLog(e),this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost,i=this._indexCurrentDecodingFrame;const r=()=>{let r=0;if(this.region instanceof Array){let n=0,s=0;n=i+1>=this.region.length?0:i+1,s=n+1>=this.region.length?0:n+1,r=e[n]&&e[n].length&&t[s]&&t[s].length?Math.min(...e[n])-Math.max(...t[s]):0}else if(t&&t.length){let i=Math.min(...e),n=Math.max(...t);i&&n&&(r=i-n)}else r=0;return r>0?r:0};(()=>{if(this.region instanceof Array){for(e[i]&&e[i]instanceof Array||(e[i]=[]);e[i].length>=5;)e[i].shift();e[i].push(this._lastInnerDecodeDuration)}else{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)}})(),this._intervalGetVideoFrame=r()+this.intervalTime,P._onLog&&P._onLog("Next fetching frame loop interval: "+this._intervalGetVideoFrame)}if(this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onFrameRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onFrameRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){P._onLog&&P._onLog("Get frame in parallel.");let t=this.dce.isFetchingLoopStarted();if(this.dce.loopInterval=this._intervalGetVideoFrame,t||this.dce.startFetchingLoop(),!this.dce.numberOfFramesInBuffer)return this.dce.loopInterval=0,null;e=this.dce.getFrameFromBuffer();const i=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};i(e)}else P._onLog&&P._onLog("Get frame in serial."),this.dce.stopFetchingLoop(),e=this.dce.getFrame();return e}async open(){this._bindUI();const e=await this.dce.open();return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async openVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open();return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}close(){this._drawResults(null),this.dce.close(),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}async show(){this._bindUI();const e=await this.dce.open(!0);return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async showVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open(!0);return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}hide(){this.dce.close(!0),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}showTip(e,t,i,r,n=3e3,s=!0){this.dce&&this.dce.showTip(e,t,i,r,n,s)}hideTip(){this.dce&&this.dce.hideTip()}updateTipMessage(e){this.dce&&this.dce.updateTipMessage(e)}async enableTapToFocus(){this.dce&&this.dce.enableTapToFocus()}disableTapToFocus(){this.dce&&this.dce.disableTapToFocus()}isTapToFocusEnabled(){return this.dce.isTapToFocusEnabled()}convertToPageCoordinates(e){return this.dce.convertToPageCoordinates(e)}convertToClientCoordinates(e){return this.dce.convertToClientCoordinates(e)}destroyContext(){this.close(),this.dce&&this.dce.dispose(!1),this.bDestroyed||super.destroyContext()}}var ve,ye,Se,be,we,Ce,xe,Te,Ee,Ie,Oe,Ae,Re,De,Me,Fe,Le,Pe,ke,Be,Ne,je,Ve,Ue,Ge,We;e.EnumBarcodeColourMode=void 0,(ve=e.EnumBarcodeColourMode||(e.EnumBarcodeColourMode={}))[ve.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",ve[ve.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",ve[ve.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",ve[ve.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",ve[ve.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",ve[ve.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",ve[ve.BICM_SKIP=0]="BICM_SKIP",ve[ve.BICM_REV=2147483648]="BICM_REV",e.EnumBarcodeComplementMode=void 0,(ye=e.EnumBarcodeComplementMode||(e.EnumBarcodeComplementMode={}))[ye.BCM_AUTO=1]="BCM_AUTO",ye[ye.BCM_GENERAL=2]="BCM_GENERAL",ye[ye.BCM_SKIP=0]="BCM_SKIP",ye[ye.BCM_REV=2147483648]="BCM_REV",e.EnumBarcodeFormat_2=void 0,(Se=e.EnumBarcodeFormat_2||(e.EnumBarcodeFormat_2={}))[Se.BF2_NULL=0]="BF2_NULL",Se[Se.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",Se[Se.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",Se[Se.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",Se[Se.BF2_POSTNET=2097152]="BF2_POSTNET",Se[Se.BF2_PLANET=4194304]="BF2_PLANET",Se[Se.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",Se[Se.BF2_RM4SCC=16777216]="BF2_RM4SCC",Se[Se.BF2_DOTCODE=2]="BF2_DOTCODE",Se[Se.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",Se[Se.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",Se[Se.BF2_PHARMACODE=12]="BF2_PHARMACODE",Se[Se.BF2_ALL=-1]="BF2_ALL",e.EnumBinarizationMode=void 0,(be=e.EnumBinarizationMode||(e.EnumBinarizationMode={}))[be.BM_AUTO=1]="BM_AUTO",be[be.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",be[be.BM_SKIP=0]="BM_SKIP",be[be.BM_THRESHOLD=4]="BM_THRESHOLD",be[be.BM_REV=2147483648]="BM_REV",e.EnumClarityCalculationMethod=void 0,(we=e.EnumClarityCalculationMethod||(e.EnumClarityCalculationMethod={}))[we.ECCM_CONTRAST=1]="ECCM_CONTRAST",e.EnumClarityFilterMode=void 0,(Ce=e.EnumClarityFilterMode||(e.EnumClarityFilterMode={}))[Ce.CFM_GENERAL=1]="CFM_GENERAL",e.EnumColourClusteringMode=void 0,(xe=e.EnumColourClusteringMode||(e.EnumColourClusteringMode={}))[xe.CCM_AUTO=1]="CCM_AUTO",xe[xe.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",xe[xe.CCM_SKIP=0]="CCM_SKIP",xe[xe.CCM_REV=2147483648]="CCM_REV",e.EnumColourConversionMode=void 0,(Te=e.EnumColourConversionMode||(e.EnumColourConversionMode={}))[Te.CICM_GENERAL=1]="CICM_GENERAL",Te[Te.CICM_SKIP=0]="CICM_SKIP",Te[Te.CICM_REV=2147483648]="CICM_REV",e.EnumConflictMode=void 0,(Ee=e.EnumConflictMode||(e.EnumConflictMode={}))[Ee.CM_IGNORE=1]="CM_IGNORE",Ee[Ee.CM_OVERWRITE=2]="CM_OVERWRITE",e.EnumDeblurMode=void 0,(Ie=e.EnumDeblurMode||(e.EnumDeblurMode={}))[Ie.DM_SKIP=0]="DM_SKIP",Ie[Ie.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",Ie[Ie.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",Ie[Ie.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",Ie[Ie.DM_SMOOTHING=8]="DM_SMOOTHING",Ie[Ie.DM_MORPHING=16]="DM_MORPHING",Ie[Ie.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",Ie[Ie.DM_SHARPENING=64]="DM_SHARPENING",Ie[Ie.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",Ie[Ie.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING",e.EnumDeformationResistingMode=void 0,(Oe=e.EnumDeformationResistingMode||(e.EnumDeformationResistingMode={}))[Oe.DRM_AUTO=1]="DRM_AUTO",Oe[Oe.DRM_GENERAL=2]="DRM_GENERAL",Oe[Oe.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",Oe[Oe.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",Oe[Oe.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",Oe[Oe.DRM_SKIP=0]="DRM_SKIP",Oe[Oe.DRM_REV=2147483648]="DRM_REV",e.EnumDPMCodeReadingMode=void 0,(Ae=e.EnumDPMCodeReadingMode||(e.EnumDPMCodeReadingMode={}))[Ae.DPMCRM_AUTO=1]="DPMCRM_AUTO",Ae[Ae.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",Ae[Ae.DPMCRM_SKIP=0]="DPMCRM_SKIP",Ae[Ae.DPMCRM_REV=2147483648]="DPMCRM_REV",e.EnumGrayscaleTransformationMode=void 0,(Re=e.EnumGrayscaleTransformationMode||(e.EnumGrayscaleTransformationMode={}))[Re.GTM_INVERTED=1]="GTM_INVERTED",Re[Re.GTM_ORIGINAL=2]="GTM_ORIGINAL",Re[Re.GTM_SKIP=0]="GTM_SKIP",Re[Re.GTM_REV=2147483648]="GTM_REV",e.EnumImagePreprocessingMode=void 0,(De=e.EnumImagePreprocessingMode||(e.EnumImagePreprocessingMode={}))[De.IPM_AUTO=1]="IPM_AUTO",De[De.IPM_GENERAL=2]="IPM_GENERAL",De[De.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",De[De.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",De[De.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",De[De.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",De[De.IPM_SKIP=0]="IPM_SKIP",De[De.IPM_REV=2147483648]="IPM_REV",e.EnumIntermediateResultSavingMode=void 0,(Me=e.EnumIntermediateResultSavingMode||(e.EnumIntermediateResultSavingMode={}))[Me.IRSM_MEMORY=1]="IRSM_MEMORY",Me[Me.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",Me[Me.IRSM_BOTH=4]="IRSM_BOTH",e.EnumLocalizationMode=void 0,(Fe=e.EnumLocalizationMode||(e.EnumLocalizationMode={}))[Fe.LM_SKIP=0]="LM_SKIP",Fe[Fe.LM_AUTO=1]="LM_AUTO",Fe[Fe.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",Fe[Fe.LM_LINES=8]="LM_LINES",Fe[Fe.LM_STATISTICS=4]="LM_STATISTICS",Fe[Fe.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",Fe[Fe.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",Fe[Fe.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",Fe[Fe.LM_CENTRE=128]="LM_CENTRE",Fe[Fe.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",Fe[Fe.LM_REV=2147483648]="LM_REV",e.EnumPDFReadingMode=void 0,(Le=e.EnumPDFReadingMode||(e.EnumPDFReadingMode={}))[Le.PDFRM_RASTER=1]="PDFRM_RASTER",Le[Le.PDFRM_AUTO=2]="PDFRM_AUTO",Le[Le.PDFRM_VECTOR=4]="PDFRM_VECTOR",Le[Le.PDFRM_REV=2147483648]="PDFRM_REV",e.EnumQRCodeErrorCorrectionLevel=void 0,(Pe=e.EnumQRCodeErrorCorrectionLevel||(e.EnumQRCodeErrorCorrectionLevel={}))[Pe.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",Pe[Pe.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",Pe[Pe.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",Pe[Pe.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q",e.EnumRegionPredetectionMode=void 0,(ke=e.EnumRegionPredetectionMode||(e.EnumRegionPredetectionMode={}))[ke.RPM_AUTO=1]="RPM_AUTO",ke[ke.RPM_GENERAL=2]="RPM_GENERAL",ke[ke.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",ke[ke.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",ke[ke.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",ke[ke.RPM_SKIP=0]="RPM_SKIP",ke[ke.RPM_REV=2147483648]="RPM_REV",e.EnumResultCoordinateType=void 0,(Be=e.EnumResultCoordinateType||(e.EnumResultCoordinateType={}))[Be.RCT_PIXEL=1]="RCT_PIXEL",Be[Be.RCT_PERCENTAGE=2]="RCT_PERCENTAGE",e.EnumResultType=void 0,(Ne=e.EnumResultType||(e.EnumResultType={}))[Ne.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",Ne[Ne.RT_RAW_TEXT=1]="RT_RAW_TEXT",Ne[Ne.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",Ne[Ne.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT",e.EnumScaleUpMode=void 0,(je=e.EnumScaleUpMode||(e.EnumScaleUpMode={}))[je.SUM_AUTO=1]="SUM_AUTO",je[je.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",je[je.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",je[je.SUM_SKIP=0]="SUM_SKIP",je[je.SUM_REV=2147483648]="SUM_REV",e.EnumTerminatePhase=void 0,(Ve=e.EnumTerminatePhase||(e.EnumTerminatePhase={}))[Ve.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",Ve[Ve.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",Ve[Ve.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",Ve[Ve.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",Ve[Ve.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",Ve[Ve.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED",e.EnumTextFilterMode=void 0,(Ue=e.EnumTextFilterMode||(e.EnumTextFilterMode={}))[Ue.TFM_AUTO=1]="TFM_AUTO",Ue[Ue.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",Ue[Ue.TFM_SKIP=0]="TFM_SKIP",Ue[Ue.TFM_REV=2147483648]="TFM_REV",e.EnumTextResultOrderMode=void 0,(Ge=e.EnumTextResultOrderMode||(e.EnumTextResultOrderMode={}))[Ge.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",Ge[Ge.TROM_POSITION=2]="TROM_POSITION",Ge[Ge.TROM_FORMAT=4]="TROM_FORMAT",Ge[Ge.TROM_SKIP=0]="TROM_SKIP",Ge[Ge.TROM_REV=2147483648]="TROM_REV",e.EnumTextureDetectionMode=void 0,(We=e.EnumTextureDetectionMode||(e.EnumTextureDetectionMode={}))[We.TDM_AUTO=1]="TDM_AUTO",We[We.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",We[We.TDM_SKIP=0]="TDM_SKIP",We[We.TDM_REV=2147483648]="TDM_REV",e.BarcodeReader=P,e.BarcodeScanner=me,Object.defineProperty(e,"__esModule",{value:!0})})); + */const U="undefined"==typeof self;let G,W,H,Y,X;if("undefined"!=typeof navigator&&(G=navigator,W=G.userAgent,H=G.platform,Y=G.mediaDevices),!U){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:G.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:H,search:"Win"},Mac:{str:H},Linux:{str:H}};let i="unknownBrowser",r=0,n="unknownOS";for(let t in e){const n=e[t]||{};let s=n.str||W,o=n.search||t,a=n.verStr||W,l=n.verSearch||t;if(l instanceof Array||(l=[l]),-1!=s.indexOf(o)){i=t;for(let e of l){let t=a.indexOf(e);if(-1!=t){r=parseFloat(a.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let r=i.str||W,s=i.search||e;if(-1!=r.indexOf(s)){n=e;break}}"Linux"==n&&-1!=W.indexOf("Windows NT")&&(n="HarmonyOS"),X={browser:i,version:r,OS:n}}U&&(X={browser:"ssr",version:0,OS:"ssr"});const z="undefined"!=typeof WebAssembly&&W&&!(/Safari/.test(W)&&!/Chrome/.test(W)&&/\(.+\s11_2_([2-6]).*\)/.test(W)),Z=!("undefined"==typeof Worker),J=!(!Y||!Y.getUserMedia),K=async()=>{let e=!1;if(J)try{(await Y.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===X.browser&&X.version>66||"Safari"===X.browser&&X.version>13||"OPR"===X.browser&&X.version>43||"Edge"===X.browser&&X.version;const q=(()=>{if(!U&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})();class Q{constructor(e,t){this._zIndex=null,this._drawingLayer=null,this._drawingLayerId=null,this._mapStyle=new Map,this.mapEvent_Callbacks=new Map([["selected",new Map],["deselected",new Map],["mousedown",new Map],["mouseup",new Map],["dblclick",new Map],["mouseover",new Map],["mouseout",new Map]]),this.mapNoteName_Content=new Map([]),this.isDrawingItem=!0,this._setFabricObject(e),this._mediaType=e.type,this.styleSelector="default",this.styleId=t}get mediaType(){return this._mediaType}get drawingLayerId(){return this._drawingLayerId}_setFabricObject(e){this._fabricObject=e,this._fabricObject.on("selected",(()=>{this.styleSelector="selected"})),this._fabricObject.on("deselected",(()=>{this._fabricObject.canvas&&this._fabricObject.canvas.getActiveObjects().includes(this._fabricObject)?this.styleSelector="selected":this.styleSelector="default","textbox"===this._fabricObject.type&&(this._fabricObject.isEditing&&this._fabricObject.exitEditing(),this._fabricObject.selected=!1)})),e.getDrawingItem=()=>this}_getFabricObject(){return this._fabricObject}_on(e,t){if(!t)return;const i=e.toLowerCase(),r=this.mapEvent_Callbacks.get(i);if(!r)throw new Error(`Event '${e}' does not exist.`);let n=r.get(t);n||(n=e=>{const i=e.e;if(!i)return void(t&&t.apply(this,[{targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null}]));const r={targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null};if(this._drawingLayer){let e,t,n,s;const o=i.target.getBoundingClientRect();e=o.left,t=o.top,n=e+window.scrollX,s=t+window.scrollY;const a=this._drawingLayer.fabricCanvas.lowerCanvasEl.width,l=this._drawingLayer.fabricCanvas.lowerCanvasEl.height,h=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).width),c=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).height),u=h/c,d=a/l,f=this._drawingLayer._getObjectFit();let g,_,p,m,v=1;if("contain"===f)u0?i-1:r,te),actionName:"modifyPolygon",pointIndex:i}),e}),{})}_extendSet(e,t){if("vertices"===e){const e=this._fabricObject;if(e.group){const i=e.group;e.points=t.map((e=>({x:e.x-i.left-i.width/2,y:e.y-i.top-i.height/2}))),i.addWithUpdate()}else e.points=t;const i=e.points.length-1;return e.controls=e.points.reduce((function(e,t,r){return e["p"+r]=new V.Control({positionHandler:$,actionHandler:ie(r>0?r-1:i,te),actionName:"modifyPolygon",pointIndex:r}),e}),{}),e._setPositionDimensions({}),!0}}_extendGet(e){if("vertices"===e){const e=[],t=this._fabricObject;if(t.selectable&&!t.group)for(let i in t.oCoords)e.push({x:t.oCoords[i].x,y:t.oCoords[i].y});else for(let i of t.points){let r=i.x-t.pathOffset.x,n=i.y-t.pathOffset.y;const s=V.util.transformPoint({x:r,y:n},t.calcTransformMatrix());e.push({x:s.x,y:s.y})}return e}}}const ne=e=>{let t=(e=>e.split("\n").map((e=>e.split("\t"))))(e);return(e=>{for(let t=0;;t++){let i=-1;for(let r=0;ri&&(i=n.length)}if(-1===i)break;for(let r=0;r=e[r].length-1)continue;let n=" ".repeat(i+2-e[r][t].length);e[r][t]=e[r][t].concat(n)}}})(t),(e=>{let t="";for(let i=0;im?(g=d,_=d/p,{x:n.x*i.width,y:(n.y-(f-_)/2)*i.width}):(g=f*p,_=f,{x:(n.x-(d-g)/2)*i.height,y:n.y*i.height}):"cover"===h?p>m?{x:(c-i.height*d)/2+n.x*i.height,y:n.y*i.height}:{x:n.x*i.width,y:(u-i.width*f)/2+n.y*i.width}:{x:n.x*i.width,y:n.y*i.height}}return i={width:1,height:1},{x:n.x*i.width,y:n.y*i.height}},V.Canvas.prototype._onTouchStart=function(e){var t=this.findTarget(e);!this.allowTouchScrolling&&e.cancelable&&e.preventDefault&&e.preventDefault(),t&&e.cancelable&&e.preventDefault&&e.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(e)),this.__onMouseDown(e),this._resetTransformEventData();var i=this.upperCanvasEl,r=this._getEventPrefix();V.util.addListener(V.document,"touchend",this._onTouchEnd,{passive:!1}),V.util.addListener(V.document,"touchmove",this._onMouseMove,{passive:!1}),V.util.removeListener(i,r+"down",this._onMouseDown)},V.Textbox.prototype._wrapLine=function(e,t,i,r){const n=e.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/g),s=!(!n||!n.length);var o=0,a=this.splitByGrapheme||s,l=[],h=[],c=a?V.util.string.graphemeSplit(e):e.split(this._wordJoiners),u="",d=0,f=a?"":" ",g=0,_=0,p=0,m=!0,v=this._getWidthOfCharSpacing();r=r||0,0===c.length&&c.push([]),i-=r;for(var y=0;yi&&!m?(l.push(h),h=[],o=g,m=!0):o+=v,m||a||h.push(f),h=h.concat(u),_=a?0:this._measureWord([f],t,d),d++,m=!1,g>p&&(p=g);return y&&l.push(h),p+r>this.dynamicMinWidth&&(this.dynamicMinWidth=p-v+r),l});class oe{constructor(e,t,i,r){let n,s;switch(this.mapMediaType_Style=new Map,this.mode="viewer",this.onSelectionChange=null,this._arrDrwaingItem=[],this._arrFabricObject=[],this._visible=!0,e.hasOwnProperty("getFabricCanvas")?this.fabricCanvas=e.getFabricCanvas():(this.fabricCanvas=new V.Canvas(e,Object.assign(r,{allowTouchScrolling:!0})),this.fabricCanvas.setDimensions({width:"100%",height:"100%"},{cssOnly:!0}),this.fabricCanvas.lowerCanvasEl.className="",this.fabricCanvas.upperCanvasEl.className="",this.fabricCanvas.on("selection:created",(function(e){const t=e.selected,i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(i,[])}),0)}})),this.fabricCanvas.on("before:selection:cleared",(function(e){const t=this.getActiveObjects(),i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{const t=[];for(let r of i)e.hasDrawingItem(r)&&t.push(r);t.length>0&&e.onSelectionChange&&e.onSelectionChange([],t)}),0)}})),this.fabricCanvas.on("selection:updated",(function(e){const t=e.selected,i=e.deselected,r=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of i){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of r){const r=[],n=[];for(let i of t){const t=i.getDrawingItem();t._drawingLayer===e&&r.push(t)}for(let t of i){const i=t.getDrawingItem();i._drawingLayer===e&&n.push(i)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(r,n)}),0)}})),this.fabricCanvas.wrapperEl.style.position="absolute",e.getFabricCanvas=()=>this.fabricCanvas),this.id=t,this._mapDrawingStyles=i,t){case 1:n=i.get(1),s=i.get(5);break;case 2:n=i.get(2),s=i.get(6);break;case 3:n=i.get(3),s=i.get(7);break;default:n=i.get(4),s=i.get(8)}for(let e of Q.arrMediaTypes)this.mapMediaType_Style.set(e,{default:n,selected:s})}getId(){return this.id}_getDrawingStyle(e,t){if("number"!=typeof e)throw new Error("Invalid style id.");const i=this._mapDrawingStyles.get(e);return i?t?JSON.parse(JSON.stringify(i)):i:null}setVisible(e){if(e){for(let e of this._arrFabricObject)e.visible=!0;this._visible=!0}else{for(let e of this._arrFabricObject)e.visible=!1;this._visible=!1}this.fabricCanvas.renderAll()}isVisible(){return this._visible}_getItemCurrentStyleId(e){return e.styleId?e.styleId:this.mapMediaType_Style.get(e._mediaType)[e.styleSelector].styleId}_getItemCurrentStyle(e){if(e.styleId)return this._getDrawingStyle(e.styleId);return e._mapStyle.get(e.styleSelector)||null}_changeMediaTypeCurStyleInStyleSelector(e,t,i,r){let n;switch(e){case"rect":n=this.fabricCanvas.getObjects("rect");break;case"arc":n=this.fabricCanvas.getObjects("circle");break;case"polygon":n=this.fabricCanvas.getObjects("polygon");break;case"image":n=this.fabricCanvas.getObjects("image");break;case"text":n=this.fabricCanvas.getObjects("textbox");break;case"line":n=this.fabricCanvas.getObjects("line");break;case"path":n=this.fabricCanvas.getObjects("path")}for(let e of n){if(!this._arrFabricObject.includes(e))continue;const r=e.getDrawingItem();r.styleSelector===t&&this._changeItemStyle(r,i,!0)}r||this.fabricCanvas.renderAll()}_changeItemStyle(e,t,i){if(!e||!t)return;const r=e._getFabricObject();"number"==typeof e.styleId&&(t=this._getDrawingStyle(e.styleId)),r.strokeWidth=t.lineWidth,"fill"===t.paintMode?(r.fill=t.fillStyle,r.stroke=t.fillStyle):"stroke"===t.paintMode?(r.fill="transparent",r.stroke=t.strokeStyle):"strokeAndFill"===t.paintMode&&(r.fill=t.fillStyle,r.stroke=t.strokeStyle),r.fontFamily&&(r.fontFamily=t.fontFamily),r.fontSize&&(r.fontSize=t.fontSize),r.group||(r.dirty=!0),i||this.fabricCanvas.renderAll()}_updateGroupItem(e,t,i){if(!e||!t)return;const r=e.getChildItems();if("add"===i){if(r.includes(t))return;const i=t._getFabricObject();if(this.fabricCanvas.getObjects().includes(i)){if(!this._arrFabricObject.includes(i))throw new Error("Existed in other drawing layers.");t._zIndex=null}else{let i;if(t.styleId)i=this._getDrawingStyle(t.styleId);else{i=this.mapMediaType_Style.get(t._mediaType)[e.styleSelector];const r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected,!0)},n=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default,!0)};t._on("selected",r),t._on("deselected",n),t._funcChangeStyleToSelected=r,t._funcChangeStyleToDefault=n}t._drawingLayer=this,t._drawingLayerId=this.id,this._changeItemStyle(t,i,!0)}e._fabricObject.addWithUpdate(t._getFabricObject())}else{if("remove"!==i)return;if(!r.includes(t))return;t._zIndex=null,t._drawingLayer=null,t._drawingLayerId=null,t._off("selected",t._funcChangeStyleToSelected),t._off("deselected",t._funcChangeStyleToDefault),t._funcChangeStyleToSelected=null,t._funcChangeStyleToDefault=null,e._fabricObject.removeWithUpdate(t._getFabricObject())}this.fabricCanvas.renderAll()}_addDrawingItem(e,t){let i=e._getFabricObject();const r=this.fabricCanvas.getObjects();let n,s;if(r.includes(i)){if(this._arrFabricObject.includes(i))return;throw new Error("Existed in other drawing layers.")}if("group"===e._mediaType){n=e.getChildItems();for(let e of n)if(e._drawingLayer&&e._drawingLayer!==this)throw new Error("The childItems of DT_Group have existed in other drawing layers.")}if(t&&"object"==typeof t&&!Array.isArray(t))for(let e in t)i.set(e,t[e]);if(n){for(let e of n){const t=this.mapMediaType_Style.get(e._mediaType);for(let i of Q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected,!0)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default,!0)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}e._drawingLayer=this,e._drawingLayerId=this.id,this._changeItemStyle(e,s,!0)}i.dirty=!0,this.fabricCanvas.renderAll()}else{const t=this.mapMediaType_Style.get(e._mediaType);for(let i of Q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}this._changeItemStyle(e,s)}e._zIndex=this.id,e._drawingLayer=this,e._drawingLayerId=this.id;const o=this._arrFabricObject.length;let a=r.length;if(o)a=r.indexOf(this._arrFabricObject[o-1])+1;else for(let t=0;t{for(let t of this._arrDrawingLayer)if(t.getId()===e)return!0;return!1};if(void 0===t){for(let e=100;;e++)if(!i(e)){t=e;break}}else if(i(t))throw new Error("Existed drawing layer id.");const r=new oe(e,t,this._mapDrawingStyles,{enableRetinaScaling:!1});return r._manager=this,this._arrDrawingLayer.push(r),this._switchPointerEvent(),r}deleteDrawingLayer(e){const t=this.getDrawingLayer(e);if(!t)return;const i=this._arrDrawingLayer;t.dispose(),i.splice(i.indexOf(t),1),this._switchPointerEvent()}clearDrawingLayers(){for(let e of this._arrDrawingLayer)e.dispose();this._arrDrawingLayer.length=0}getDrawingLayer(e){for(let t of this._arrDrawingLayer)if(t.getId()===e)return t;return null}getDrawingLayers(){return Array.from(this._arrDrawingLayer)}getSelectedDrawingItems(){if(!this._arrDrawingLayer.length)return;const e=this._arrDrawingLayer[0].fabricCanvas.getActiveObjects(),t=[];for(let i of e)t.push(i.getDrawingItem());return t}setDimensions(e,t){this._arrDrawingLayer.length&&this._arrDrawingLayer[0]._setDimensions(e,t)}setObjectFit(e){for(let t of this._arrDrawingLayer)t&&t._setObjectFit(e)}getObjectFit(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0]._getObjectFit():null}setVisible(e){this._arrDrawingLayer.length&&(this._arrDrawingLayer[0].fabricCanvas.wrapperEl.style.display=e?"block":"none")}_switchPointerEvent(){if(this._arrDrawingLayer.length)for(let e of this._arrDrawingLayer)e.getMode()}}class le{constructor(e){this._controlTarget=null,this._arrUsers=[],this._mapAction_UserArgs=new Map,this._mapProperty_UserValue=new Map,this._mapAction_Callbacks=new Map,this._controlTarget=e}setControlTarget(e){this._controlTarget=e}getControlTarget(){return this._controlTarget}register(e){this._arrUsers.includes(e)||this._arrUsers.push(e)}logout(e){const t=this._arrUsers.indexOf(e);-1!==t&&(this.clearUserDisiredAction({user:e}),this.clearUserDisiredValue({user:e}),this._arrUsers.splice(t,1))}getRegisteredUsers(){return this._arrUsers}ifUserExisted(e){return this._arrUsers.includes(e)}setDisiredValue(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");r&&(this._controlTarget[t]=i),this._mapProperty_UserValue.get(t)?this._mapProperty_UserValue.get(t).set(e,i):this._mapProperty_UserValue.set(t,new Map([[e,i]]))}clearUserDisiredValue(e){if(e&&(e.user||e.property)){if(e.property&&e.user){const t=this._mapProperty_UserValue.get(e.property);if(!t)return;t.delete(e.user)}else if(e.property)this._mapProperty_UserValue.delete(e.property);else if(e.user)for(let t of this._mapProperty_UserValue.values())t.delete(e.user)}else this._mapProperty_UserValue=new Map}getValue(e){if(!this._controlTarget)throw new Error("Control target is not set.");return this._controlTarget[e]}getPropertyDisiredValue(e){if(this._mapProperty_UserValue.get(e)){const t=[],i=this._mapProperty_UserValue.get(e);for(let e of i.values())t.push(e);return t}return null}setDisiredAction(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");return i||(i=[]),r?this._controlTarget[t](...i):(this._mapAction_UserArgs.get(t)?this._mapAction_UserArgs.get(t).set(e,i):this._mapAction_UserArgs.set(t,new Map([[e,i]])),this._render(t))}clearUserDisiredAction(e){if(e&&(e.user||e.actionName)){if(e.actionName&&e.user){const t=this._mapAction_UserArgs.get(e.actionName);if(!t)return;t.delete(e.user)}else if(e.actionName)this._mapAction_UserArgs.delete(e.actionName);else if(e.user)for(let t of this._mapAction_UserArgs.values())t.delete(e.user);this.render()}else this._mapAction_UserArgs=new Map}addCallback(e,t){const i=this._mapAction_Callbacks.get(e);i?i.push(t):this._mapAction_Callbacks.set(e,[t])}removeCallback(e,t){const i=this._mapAction_Callbacks.get(e);if(!i)return;const r=i.indexOf(t);-1!==r&&i.splice(r,1)}clearCallback(e){e?this._mapAction_Callbacks.delete(e):this._mapAction_Callbacks.clear()}_fireCallback(e){const t=this._mapAction_Callbacks.get(e);if(t)for(let e of t){if(!e)return;setTimeout(e.bind(this._controlTarget),0)}}_render(e){const t=this._mapAction_UserArgs.get(e);if(!t)throw new Error("Unrecorded action.");if(t.size===this._arrUsers.length){let i=[];for(let e of t.values())e.length>0&&(i=e);if(this._controlTarget[e]){const t=this._controlTarget[e](...i);return this._mapAction_UserArgs.delete(e),this._fireCallback(e),t}}}render(e){if(e)return this._render(e);for(let e of this._mapAction_UserArgs.keys())this._render(e)}}class he{static multiply(e,t){const i=[];for(let r=0;r<3;r++){const n=t.slice(3*r,3*r+3);for(let t=0;t<3;t++){const r=[e[t],e[t+3],e[t+6]].reduce(((e,t,i)=>e+t*n[i]),0);i.push(r)}}return i}static identity(){return[1,0,0,0,1,0,0,0,1]}static translate(e,t,i){return he.multiply(e,[1,0,0,0,1,0,t,i,1])}static rotate(e,t){var i=Math.cos(t),r=Math.sin(t);return he.multiply(e,[i,-r,0,r,i,0,0,0,1])}static scale(e,t,i){return he.multiply(e,[t,0,0,0,i,0,0,0,1])}}var ce;!function(e){e.GREY="grey",e.GREY32="grey32",e.RGBA="rgba",e.RBGA="rbga",e.GRBA="grba",e.GBRA="gbra",e.BRGA="brga",e.BGRA="bgra"}(ce||(ce={}));const ue=(e,t,i,r)=>{if(!i)return e;let n=t+Math.round((e-t)/i)*i;return r&&(n=Math.min(n,r)),n};class de{constructor(){this._maxCvsSideLength=void 0,this._defaultMaxCvsSideLength=null,this._predefinedResolutions=[{width:160,height:120},{width:320,height:240},{width:480,height:360},{width:640,height:480},{width:800,height:600},{width:960,height:720},{width:1280,height:720},{width:1920,height:1080},{width:2560,height:1440},{width:3840,height:2160}],this._mapCameraResolutions=new Map,this._bWebGLSupported=!0,this.extraBindings=[],this._cvsSingleFrameMode=null,this._cvsOriginalImage=null,this._imgWidth=0,this._imgHeight=0,this._singleFrameInputContainer=null,this._clickIptSingleFrameMode=()=>{if(!this._isSingleFrameModeEnabled())return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;let e;if(this._singleFrameInputContainer)e=this._singleFrameInputContainer.firstElementChild;else{e=document.createElement("input"),e.setAttribute("type","file"),"camera"===this.singleFrameMode?(e.setAttribute("capture",""),e.setAttribute("accept","image/*")):1!=this.singleFrameMode&&"image"!==this.singleFrameMode||(e.removeAttribute("capture"),e.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp")),e.addEventListener("change",(async()=>{const t=e.files[0];e.value="";const i=await(async e=>{let t=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(t=await createImageBitmap(e),t)return t}catch(e){}var r;return t||(i=await(r=e,new Promise(((e,t)=>{let i=URL.createObjectURL(r),n=new Image;n.dbrObjUrl=i,n.src=i,n.onload=()=>{e(n)},n.onerror=e=>{t(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}})))),i})(t),r=i instanceof HTMLImageElement?i.naturalWidth:i.width,n=i instanceof HTMLImageElement?i.naturalHeight:i.height;this._imgWidth=r,this._imgHeight=n;const s=e=>{const t=Date.now();if(0===r||0===n)return null;if(e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");const i=this._scanRegion,s=this.getFrameSize(r,n,i,this.maxCvsSideLength);if(!s)return null;let o=!0;r===s.sWidth&&n===s.sHeight&&(o=!1);const a=this.mapPixelFormatString_Enum.get(this.framePixelFormat.toLowerCase()),l={data:null,region:i?JSON.parse(JSON.stringify(i)):null,sx:s.sx,sy:s.sy,width:s.dWidth,height:s.dHeight,colorMode:null,pixelFormat:null,timeSpent:null,timeStamp:null,isCropped:o,toCanvas:this._toCanvas,_sWidth:s.sWidth,_sHeight:s.sHeight,_bUseWebGL:null},h=this._getImageData(e,r,n,s,null,{pixelFormat:a});if(!h)return null;const c=Date.now();return de._onLog&&de._onLog("DCE: _getVideoData(region?) END: "+c),l.data=h.data,l.pixelFormat=l.colorMode=h.pixelFormat,l._bUseWebGL=h._bUseWebGL,l.timeSpent=c-t,l.timeStamp=c,h.pixelFormat===ce.GREY?l.stride=l.width:l.stride=4*l.width,l};(e=>{let t=this._cvsSingleFrameMode;if(!t){if(t=document.createElement("canvas"),!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t),t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit="contain",t.style.pointerEvents="none",this._cvsSingleFrameMode=t}t.width==r&&t.height==n||(t.width=r,t.height=n);const i=t.getContext("2d");i.clearRect(0,0,t.width,t.height),i.drawImage(e,0,0)})(i),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);let o;this._updateDrawingLayersSize();try{o=s(i)}catch(e){throw e}const a=this.mapCameraEvents.get("singleframeacquired");for(let e of a)if(e)try{const t={data:new Uint8Array(o.data),region:JSON.parse(JSON.stringify(o.region)),sx:o.sx,sy:o.sy,width:o.width,height:o.height,stride:o.stride,colorMode:o.colorMode,pixelFormat:o.pixelFormat,timeSpent:o.timeSpent,timeStamp:o.timeStamp,isCropped:o.isCropped,toCanvas:o.toCanvas,_sWidth:o._sWidth,_sHeight:o._sHeight,_bUseWebGL:o._bUseWebGL};await e.apply(this,[t])}catch(e){console.error(e)}})),e.style.position="absolute",e.style.top="-9999px",e.style.backgroundColor="transparent",e.style.color="transparent";const t=document.createElement("div");t.append(e),t.style.position="absolute",t.style.width="1px",t.style.height="1px",t.style.overflow="hidden",t.style.pointerEvents="none",this._elContainer.prepend(t),this._singleFrameInputContainer=t}null==e||e.click()},this.styleEls=[],this._framePixelFormat=void 0,this._defaultFramePixelFormat="rgba",this.mapPixelFormatString_Enum=new Map([["grey",ce.GREY],["grey32",ce.GREY32],["rgba",ce.RGBA],["rbga",ce.RBGA],["grba",ce.GRBA],["gbra",ce.GBRA],["brga",ce.BRGA],["bgra",ce.BGRA]]),this.shaderPixelFormat=ce.RGBA,this.maxVideoCvsLength=3,this._reusedCvs=null,this._reusedWebGLCvs=null,this._tempDataContainer=null,this._webGLTexture=null,this._webGLProgramInfo=null,this._webGLBuffers=null,this._softwareScale=1,this._scaleCenter={x:0,y:0},this._focusParameters={maxTimeout:400,minTimeout:300,kTimeout:void 0,oldDistance:null,fds:null,isDoingFocus:0,taskBackToContinous:null,curFocusTaskId:0,focusCancelableTime:1500,defaultFocusAreaSizeRatio:6,focusBackToContinousTime:5e3,tapFocusMinDistance:null,tapFocusMaxDistance:null,_focusArea:null},this._tapFocusEnabled=!0,this._focusSupported=!0,this._tapDoFocus=async e=>{if(this._touchMoved)return void(this._touchMoved=!1);if(!this._tapFocusEnabled)return;if(!this._bOpen)return;if(this._isSingleFrameModeEnabled())return;if(!this._video||this._video.paused)return;if(!this._videoTrack)return;if(!this._focusSupported)return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))return void(this._focusSupported=!1);if(null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),1==this._focusParameters.isDoingFocus)return;let t,i,r,n;if(this._focusParameters.taskBackToContinous&&(clearTimeout(this._focusParameters.taskBackToContinous),this._focusParameters.taskBackToContinous=null),e instanceof MouseEvent)t=e.clientX,i=e.clientY;else{if(!(e instanceof TouchEvent))throw new Error("Unknown event type.");if(!e.changedTouches.length)return;t=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY}const s=this.getVideoFit(),o=this._video.videoWidth,a=this._video.videoHeight,l=this._elContainer.getBoundingClientRect(),h=l.left,c=l.top,u=window.getComputedStyle(this._elContainer),d=parseFloat(u.width),f=parseFloat(u.height),g=d/f,_=o/a;let p=1;if("contain"===s)_>g?(p=d/o,r=(t-h)/p,n=(i-c-(f-d/_)/2)/p):(p=f/a,n=(i-c)/p,r=(t-h-(d-f*_)/2)/p);else{if("cover"!==s)throw new Error("Unsupported object-fit.");_>g?(p=f/a,n=(i-c)/p,r=(t-h+(f*_-d)/2)/p):(p=d/o,r=(t-h)/p,n=(i-c+(d/_-f)/2)/p)}const m={x:r+"px",y:n+"px"},v=2*Math.round(Math.min(o,a)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px",y=v;await this._setLocalFocus(m,v,y,this._focusParameters.tapFocusMinDistance,this._focusParameters.tapFocusMaxDistance),this._focusParameters.taskBackToContinous=setTimeout((()=>{this._videoTrack&&this._videoTrack.applyConstraints({advanced:[{focusMode:"continuous"}]}).catch((()=>{}))}),this._focusParameters.focusBackToContinousTime)},this._touchMoved=!1,this._touchMoveEvent=()=>{this._touchMoved=!0},this._recordedStates={},this.playCallbackInfo=null,this._toCanvas=function(){const e=document.createElement("canvas");let t;if(e.width=this.width,e.height=this.height,"grey"===(this.pixelFormat||this.colorMode)){t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{await this.selectCamera(this._selCam.value),this._bOpen||this.stop()},this._onResolutionSelChange=async()=>{let e,t;if(this._selRsl&&-1!=this._selRsl.selectedIndex){let i=this._selRsl.options[this._selRsl.selectedIndex];e=i.getAttribute("data-width"),t=i.getAttribute("data-height")}await this.setResolution(e,t),this._bOpen||this.stop()},this._onCloseBtnClick=()=>{this.close(!0)},this._bOpen=!1,this.isCameraEnhancer=!0,this.isDisposed=!1,this.disposed=!1,this.videoSrc=null,this.cameraOpenTimeout=4e3,this.videoSettings={video:{width:{ideal:1280},height:{ideal:720},facingMode:{ideal:"environment"}}},this.iPlayRound=0,this.promisePlay=null,this._ifSaveLastUsedCamera=!1,this.ifSkipCameraInspection=!1,this._allCameras=[],this._currentCamera=null,this._videoTrack=null,this._lastDeviceId=void 0,this._vc_bPlayingVideoBeforeHide=!1,this._ev_documentHideEvent=()=>{if(!this._isSingleFrameModeEnabled())if("visible"===document.visibilityState){if(de._onLog&&de._onLog("DCE: document visible."),this._bOpen&&this._vc_bPlayingVideoBeforeHide)if(this.videoSrc)this._video.play();else if(this._video.srcObject){const e=this._video.srcObject.getTracks()[0];if(this._video.srcObject.active&&e)if(e.muted&&["iPhone","iPad","Mac"].includes(X.OS)){if(X.version>=17)return;this.play()}else this._video.play();else this.play()}}else if("hidden"===document.visibilityState)if(de._onLog&&de._onLog("DCE: document hidden."),["iPhone","iPad","Mac"].includes(X.OS)){if(this._vc_bPlayingVideoBeforeHide=!0,X.version>=17)return;this._video&&this._video.pause()}else this._video&&!this._video.paused?(this._vc_bPlayingVideoBeforeHide=!0,this._video.pause()):this._vc_bPlayingVideoBeforeHide=!1},this.containerClassName="dce-video-container",this._elContainer=null,this._videoContainer=null,this._video=null,this.videoFit="contain",this._cvsScanRegion=null,this._divScanArea=null,this._divScanLight=null,this._bgLoading=null,this._selCam=null,this._bgCamera=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this.regionMaskFillStyle="rgba(0,0,0,0.5)",this.regionMaskStrokeStyle="rgb(254,142,20)",this.regionMaskLineWidth=2,this._bShowScanRegionMask=!0,this._bShowScanRegionLaser=void 0,this._defaultBShowScanRegionLaser=!1,this._scanRegion=null,this._arrScanRegionOverlays=[],this._layerBaseCvs=null,this._drawingLayerOfTip=null,this._tipArgs={x:void 0,y:void 0,width:void 0,duration:void 0,autoShowSuggestedTip:void 0},this._hideTipTimeoutId=null,this.onTipSuggested=null,this._cvsViewDecorator=null,this._decoratorType=[],this._decoratorArea=null,this._viewDecoratorInfo={rectangle:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},focus:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},crossline:{lineWidth:2,strokeStyle:"rgb(254,142,20)"},crosshair:{lineWidth:4,strokeStyle:"rgb(254,142,20)"}},this._croppingRegions=void 0,this._defaultCroppingRegions=[null],this.bIncreaseRegionIndexAuto=!0,this._croppingRegionIndex=0,this._loopInterval=void 0,this._defaultLoopInterval=0,this._maxNumberOfFramesInBuffer=void 0,this._defaultMaxNumberOfFramesInBuffer=1,this._frameQueue=[],this._bFetchingLoopStarted=!1,this._refreshInterval=void 0,this._defaultRefreshInterval=-1,this._updateLayersTimeout=500,this._updateLayers=()=>{this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none");for(let e of this._arrScanRegionOverlays)e&&(e.style.display="none");this._resizeTimeoutId&&clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout((()=>{if(!this.isDisposed||!this.disposed){this.ifShowScanRegionMask&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this.showScanRegionLaser(),this._cvsViewDecorator&&this.showViewDecorator(),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&(e.style.display="",this._updateScanRegionOverlay(e));this._updateDrawingLayersSize(),this._updateVideoContainerStyle()}}),this._updateLayersTimeout)},this._windowResizeListener=()=>{this._windowWidth!==document.documentElement.clientWidth&&(this._windowWidth=document.documentElement.clientWidth,this._updateLayers())},this.mapCameraEvents=new Map([["cameraopen",[]],["cameraclose",[]],["camerachange",[]],["resolutionchange",[]],["played",[]],["singleframeacquired",[]],["frameaddedtobuffer",[]]]),this._controler=null,navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia?this._singleFrameMode=!1:this._singleFrameMode=!0}static getVersion(){return this._version}static async detectEnvironment(){return await(async()=>({wasm:z,worker:Z,getUserMedia:J,camera:await K(),browser:X.browser,version:X.version,OS:X.OS}))()}static set engineResourcePath(e){if(this._hasEngineResourceLoaded)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` is called.");de._engineResourcePath=(e=>{if(null==e&&(e="./"),!U){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get engineResourcePath(){return this._engineResourcePath}static isStorageAvailable(e){let t;try{t=window[e];const i="__storage_test__";return t.setItem(i,i),t.removeItem(i),!0}catch(e){return e instanceof DOMException&&(22===e.code||1014===e.code||"QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name)&&t&&0!==t.length}}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"data"in e&&"region"in e&&"sx"in e&&"sy"in e&&"width"in e&&"height"in e&&("colorMode"in e||"pixelFormat"in e)&&"timeSpent"in e&&"timeStamp"in e&&"isCropped"in e&&"toCanvas"in e&&"_sWidth"in e&&"_sHeight"in e&&"_bUseWebGL"in e}static async testCameraAccess(){try{if(!navigator||!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return{ok:!1,message:"Insecure context."};(await navigator.mediaDevices.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()}))}catch(e){if("OverconstrainedError"===e.name||"NotFoundError"===e.name)return{ok:!1,message:"No camera detected."};if("NotAllowedError"===e.name)return{ok:!1,message:"No permission to access camera."};if("AbortError"===e.name)return{ok:!1,message:"Some problem occurred which prevented the device from being used."};if("NotReadableError"===e.name)return{ok:!1,message:"A hardware error occurred."};if("SecurityError"===e.name)return{ok:!1,message:"User media support is disabled."};throw e}return{ok:!0,message:"Successfully accessed the camera."}}set maxCvsSideLength(e){if(e<=0)throw new Error("Invalid value.");this._maxCvsSideLength=e}get maxCvsSideLength(){if(void 0!==this._maxCvsSideLength)return this._maxCvsSideLength;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxCvsSideLength");if(e&&1===e.length)return e[0]}return this._defaultMaxCvsSideLength}static set defaultUIElementURL(e){de._defaultUIElementURL=e}static get defaultUIElementURL(){var e;return null===(e=de._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",de.engineResourcePath)}getUIElement(){return this.UIElement}async setUIElement(e){if(this._bOpen)throw new Error("It is not allowed to change the UIElement when the camera is open.");if("string"==typeof e||e instanceof String){if(!e.trim().startsWith("<")){let t=await fetch(e);if(!t.ok)throw Error("setUIElement(elementOrUrl): Network Error: "+t.statusText);e=await t.text()}if(!e.trim().startsWith("<"))throw Error("setUIElement(elementOrUrl): Can't get valid HTMLElement.");let t=document.createElement("div");t.innerHTML=e;for(let e=0;e100||e.regionTop>100||e.regionRight>100||e.regionBottom>100)))}set scanRegion(e){if(!this._checkValidRegion(e))throw new Error("Invalid region.");this._scanRegion=JSON.parse(JSON.stringify(e)),this._updateScanRegionCanvas(),this._updateScanAreaDiv();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e)}setScanRegion(e){this.scanRegion=e}getScanRegion(){return JSON.parse(JSON.stringify(this._scanRegion))}_calculateCvsSize(){var e,t;let i,r,n;if(this._isSingleFrameModeEnabled()?(i=this._imgWidth,r=this._imgHeight,n="contain"):(i=null===(e=this._video)||void 0===e?void 0:e.videoWidth,r=null===(t=this._video)||void 0===t?void 0:t.videoHeight,n=this.getVideoFit()),!i||!r)throw new Error("Invalid content dimensions.");return{width:i,height:r,objectFit:n}}addScanRegionOverlayCanvas(){this._assertOpen();const e=document.createElement("canvas");if(this._updateScanRegionOverlay(e),!this._scanRegionOverlayContainer){const e=document.createElement("div");if(this._scanRegionOverlayContainer=e,e.style.position="absolute",e.style.left="0",e.style.top="0",e.style.width="100%",e.style.height="100%",e.style.overflow="hidden",e.style.pointerEvents="none",this._layerBaseCvs)this._layerBaseCvs.parentElement.after(e);else if(this._cvsScanRegion)this._cvsScanRegion.after(e);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(e);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._recordedStates.overlayShow=!0}return this._scanRegionOverlayContainer.append(e),this._arrScanRegionOverlays.push(e),e}removeScanRegionOverlayCanvas(e){const t=this._arrScanRegionOverlays.indexOf(e);-1!==t&&(e.remove(),this._arrScanRegionOverlays.splice(t,1))}_updateScanRegionOverlay(e){if(!e)return;let t;try{t=this._calculateCvsSize()}catch(e){if("Invalid content dimensions."===(e.message||e))return;throw e}const{width:i,height:r,objectFit:n}=t;if(i<=0||r<=0)return e.width=0,void(e.height=0);const s=this._getRegionInPixels(i,r,this._scanRegion),o=this.getFrameSize(i,r,this._scanRegion,this.maxCvsSideLength),a=o.dWidth,l=o.dHeight;e.width==a&&e.height==l||(e.width=a,e.height=l);const h=window.getComputedStyle(this._elContainer),c=parseFloat(h.width),u=parseFloat(h.height),d=c/u,f=i/r;let g,_,p,m,v=1;"contain"===n?(f>d?(v=c/i,g=0,_=(u-r*v)/2):(v=u/r,g=(c-i*v)/2,_=0),g+=s.regionLeft*v,_+=s.regionTop*v,p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):"cover"===n?(f>d?(v=u/r,g=s.regionLeft*v-(i*v-c)/2,_=s.regionTop*v):(v=c/i,g=s.regionLeft*v,_=s.regionTop*v-(r*v-u)/2),p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):(g=0,_=0,p=0,m=0),e.style.position="absolute",e.style.left=g+"px",e.style.top=_+"px",e.style.width=p+"px",e.style.height=m+"px"}showScanRegionOverlays(){this._scanRegionOverlayContainer&&("none"==this._scanRegionOverlayContainer.style.display&&(this._scanRegionOverlayContainer.style.display=""),this._recordedStates.overlayShow=!0)}hideScanRegionOverlays(){this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none",this._recordedStates.overlayShow=!1)}setViewDecorator(e,t){if(!e)return void(this._cvsViewDecorator&&(this._cvsViewDecorator.remove(),this._cvsViewDecorator=null));if(!t)throw new Error("Invalid area.");this._assertOpen();let i=[];if("string"==typeof e?i.push(e):Array.isArray(e)&&(i=JSON.parse(JSON.stringify(e))),!this._cvsViewDecorator){if(this._cvsViewDecorator=document.createElement("canvas"),this._scanRegionOverlayContainer)this._scanRegionOverlayContainer.after(this._cvsViewDecorator);else if(this._layerBaseCvs)this._layerBaseCvs.parentElement.after(this._cvsViewDecorator);else if(this._cvsScanRegion)this._cvsScanRegion.after(this._cvsViewDecorator);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(this._cvsViewDecorator);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(this._cvsViewDecorator);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(this._cvsViewDecorator)}this._recordedStates.decoratorShow=!0}this._decoratorArea=JSON.parse(JSON.stringify(t)),this._decoratorType.length=0;const r=["rectangle","focus"],n=["crossline","crosshair"];let s=!1,o=!1;for(let e of i)e=e.toLowerCase(),r.includes(e)&&!s&&(s=!0,this._decoratorType.push(e)),n.includes(e)&&!o&&(o=!0,!this._decoratorType.includes(e)&&this._decoratorType.push(e));this._updateViewDecorator()}getViewDecorator(){return{type:JSON.parse(JSON.stringify(this._decoratorType)),area:JSON.parse(JSON.stringify(this._decoratorArea)),canvas:this._cvsViewDecorator}}showViewDecorator(){this._cvsViewDecorator&&("none"==this._cvsViewDecorator.style.display&&(this._cvsViewDecorator.style.display=""),this._recordedStates.decoratorShow=!0)}hideViewDecorator(){this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none",this._recordedStates.decoratorShow=!1)}setViewDecoratorLineWidth(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("lineWidth"))throw new Error(`It is not allowed to change the property 'lineWidth' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].lineWidth=t,this._updateViewDecorator()}setViewDecoratorStrokeStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("strokeStyle"))throw new Error(`It is not allowed to change the property 'strokeStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].strokeStyle=t,this._updateViewDecorator()}setViewDecoratorFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("fillStyle"))throw new Error(`It is not allowed to change the property 'fillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].fillStyle=t,this._updateViewDecorator()}setViewDecoratorMaskFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("maskFillStyle"))throw new Error(`It is not allowed to change the property 'maskFillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].maskFillStyle=t,this._updateViewDecorator()}_updateViewDecorator(){if(!this._bOpen)return;if(!this._cvsViewDecorator||!this._decoratorArea)return;let e;if(this._isSingleFrameModeEnabled())e="contain";else{if(!this._video)return;e=this.getVideoFit()}const t=this._cvsViewDecorator;t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit=e,t.style.pointerEvents="none";const i=this.getVisibleRegion(!0);if(!i)return;const r=i.regionRight-i.regionLeft,n=i.regionBottom-i.regionTop;if(t.width==r&&t.height==n||(t.width=r,t.height=n),r<=0||n<=0)return;const s=t.getContext("2d");s.clearRect(0,0,t.width,t.height);const o=this._decoratorArea.x/100*r,a=this._decoratorArea.y/100*n,l=this._decoratorArea.width/100*r,h=this._decoratorArea.height/100*n;for(let e of this._decoratorType){if("rectangle"===e){s.fillStyle=this._viewDecoratorInfo.rectangle.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.fillStyle=this._viewDecoratorInfo.rectangle.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.lineWidth=this._viewDecoratorInfo.rectangle.lineWidth,s.strokeStyle=this._viewDecoratorInfo.rectangle.strokeStyle;const e=s.lineWidth/2;s.strokeRect(Math.round(o-e),Math.round(a-e),Math.round(l+s.lineWidth),Math.round(h+s.lineWidth))}if("focus"===e){s.fillStyle=this._viewDecoratorInfo.focus.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.fillStyle=this._viewDecoratorInfo.focus.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(l),Math.round(h)),s.lineWidth=this._viewDecoratorInfo.focus.lineWidth,s.strokeStyle=this._viewDecoratorInfo.focus.strokeStyle;const e=s.lineWidth/2,i=[0,.25,.75,1],r=[0,.25,.75,1];s.beginPath();for(let e=0;e{const e=parseFloat(window.getComputedStyle(this._elContainer).width),t=parseFloat(window.getComputedStyle(this._elContainer).height);let s,o={regionBottom:r,regionRight:i,regionLeft:0,regionTop:0,regionMeasuredByPercentage:!1};return"cover"===n?e/tthis.maxNumberOfFramesInBuffer;)this._frameQueue.shift()}get maxNumberOfFramesInBuffer(){if(void 0!==this._maxNumberOfFramesInBuffer)return this._maxNumberOfFramesInBuffer;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxNumberOfFramesInBuffer");if(e&&1===e.length)return e[0]}return this._defaultMaxNumberOfFramesInBuffer}get numberOfFramesInBuffer(){return this._frameQueue.length}set refreshInterval(e){this._refreshInterval=e}get refreshInterval(){if(void 0!==this._refreshInterval)return this._refreshInterval;if(this._controler){const e=this._controler.getPropertyDisiredValue("refreshInterval");if(e&&1===e.length)return e[0]}return this._defaultRefreshInterval}static async createInstance(e){let t=new de;("string"==typeof e||e instanceof String)&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return this._hasEngineResourceLoaded=!0,de.onWarning&&(location&&"file:"===location.protocol?setTimeout((()=>{de.onWarning&&de.onWarning({id:1,message:"The page is opened over file:// and Dynamsoft Camera Enhancer may not work properly. Please open the page via https://."})}),0):!1!==window.isSecureContext&&navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia||setTimeout((()=>{de.onWarning&&de.onWarning({id:2,message:"Dynamsoft Camera Enhancer may not work properly in a non-secure context. Please open the page via https://."})}),0)),t._drawingLayersManager=new ae,t}static async playVideo(e,t,i){if(!e)throw new Error("Invalid 'videoEl'.");if(!t)throw new Error("Invalid 'source'.");return"string"==typeof t||t instanceof String?e.src=t:e.srcObject=t,new Promise(((t,r)=>{let n;const s=()=>{e.removeEventListener("loadstart",l),e.removeEventListener("abort",h),e.removeEventListener("play",c),e.removeEventListener("error",u)},o=()=>{n&&clearTimeout(n),s(),t(e)},a=e=>{n&&clearTimeout(n),s(),r(e)},l=()=>{e.addEventListener("abort",h,{once:!0})},h=()=>{const e=new Error("Video playing was interrupted.");e.name="AbortError",a(e)},c=()=>{o()},u=()=>{a(new Error(`Video error ${e.error.code}: ${e.error.message}.`))};e.addEventListener("loadstart",l,{once:!0}),e.autoplay?(e.addEventListener("play",c,{once:!0}),e.addEventListener("error",u,{once:!0})):(e.load(),e.play().then((()=>{o()})).catch((e=>{a(e)}))),i&&(n=setTimeout((()=>{s(),r(new Error("Failed to play video. Timeout."))}),i))}))}static findBestRearCameraInIOS(e){if(!e||!e.length)return null;const t=["back","baksidan","bakre","bak","後置","后置","背面","خلفية","задна","posteriore","posterior","zadní","bagside","rück","πίσω","trasera","taka","arrière","אחורית","बैक","stražnja","hátsó","belakang","aртқы","후면","achterzijde","tylny","traseira","spate","задняя","задней","zadná","านหลัง","arka","sau"],i=["triple","三镜头","三鏡頭","トリプル","ثلاثية","тройна","trojný","τριπλή","kolmois","משולשת","ट्रिपल","trostruka","tiga","tripla","үштік","트리플","trippelt","trippel","trójobiektywowy","triplă","тройная","trojitá","สาม","üçlü","потроєна","ba camera"],r=["dual wide","dual-weitwinkel","dual con gran angular","dual","doble","double","双广角","雙廣角","デュアル広角","مزدوجة عريضة","двойна широкоъгълна","duální širokoúhlý","διπλή ευρεία","laajakulmainen kaksois","כפולה רחבה","ड्युअल वाइड","dvostruka široka","kettős, széles látószögű","ganda","doppia con grandangolo","қос кең бұрышты","듀얼 와이드","dwikamera","dobbelt vidvinkelkamera","dwuobiektywowy","dupla grande-angular","grande angular dupla","dublă","двойная широкоугольная","duálna širokouhlá","dubbel vidvinkel","คู่ด้านหลังมุมกว้าง","çift geniş","здвоєна ширококутна","kép rộng mặt sau"],n=e.filter((e=>{const i=e.label.toLowerCase();return t.some((e=>i.includes(e)))}));if(!n.length)return null;const s=n.find((e=>{const t=e.label.toLowerCase();return i.some((e=>t.includes(e)))}));if(s)return s.deviceId;const o=n.find((e=>{const t=e.label.toLowerCase();return r.some((e=>t.includes(e)))}));return o?o.deviceId:n[0].deviceId}static findBestRearCamera(e){if(!e||!e.length)return null;if(["iPhone","iPad","Mac"].includes(X.OS))return de.findBestRearCameraInIOS(e);const t=["rear","back","rück","arrière","trasera","trás","traseira","posteriore","posterior","后面","後面","背面","后置","後置","背置","задней","خلفية","후","arka","achterzijde","หลัง","baksidan","bagside","sau","bak","tylny","taka","אחורית","πίσω","spate","hátsó","zadní","darrere","zadná","задня","stražnja","belakang","बैक","задна","aртқы","задняя","bakre","านหลัง"];for(let i of e){const e=i.label.toLowerCase();if(e&&t.some((t=>e.includes(t)))&&/\b0(\b)?/.test(e))return i.deviceId}return["Android","HarmonyOS"].includes(X.OS)?e[e.length-1].deviceId:null}_isSingleFrameModeEnabled(){return 0!=this.singleFrameMode}async play(e,t,i,r){let n;if(this._video&&this.videoSrc){de._onLog&&(n=Date.now(),de._onLog("DCE: start loading static video: "+n));const e=await de.playVideo(this._video,this.videoSrc,this.cameraOpenTimeout);if(de._onLog&&de._onLog("DCE: finish loading static video. Costs: "+(Date.now()-n)),!this._video)return e.pause(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};const t={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};this.playCallbackInfo=JSON.parse(JSON.stringify(t));const i=this.mapCameraEvents.get("played");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return this._recordedStates.videoPlaying=!0,t}if(this._isSingleFrameModeEnabled())return r&&r.notTriggerSingleFrameClick||this._clickIptSingleFrameMode(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};if(!this._video)throw new Error("'video' is null or undefined.");const s=++this.iPlayRound;if(this.promisePlay&&(await this.promisePlay,s{var n;try{this._video&&this._video.srcObject&&this.stop(),de._onLog&&de._onLog("DCE: ======before video========");const s=()=>{if(!this._video)throw l&&l.getTracks().forEach((e=>{e.stop()})),this._videoTrack=null,this._currentCamera=null,new Error("'video' is null or undefined.")},o=this.getVideoSettings();let a,l;if("boolean"==typeof o.video&&(o.video={}),e)delete o.video.facingMode,o.video.deviceId={exact:e};else if(o.video.deviceId);else if(this._lastDeviceId)delete o.video.facingMode,o.video.deviceId={exact:this._lastDeviceId};else if(this.ifSaveLastUsedCamera&&de.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")){delete o.video.facingMode,o.video.deviceId={ideal:window.localStorage.getItem("dce_last_camera_id")};const e=JSON.parse(window.localStorage.getItem("dce_last_apply_width")),t=JSON.parse(window.localStorage.getItem("dce_last_apply_height"));e&&t&&(o.video.width=e,o.video.height=t)}else if(this.ifSkipCameraInspection);else if(o.video.facingMode){if(await this.getAllCameras(!1),!this._video)throw new Error("'video' is null or undefined.");let e=o.video.facingMode;if(e instanceof Array&&e.length&&(e=e[0]),e=e.exact||e.ideal||e,"environment"===e){a=!0;const e=de.findBestRearCamera(this._allCameras);e&&(delete o.video.facingMode,o.video.deviceId={exact:e})}}t&&(o.video.width={ideal:t}),i&&(o.video.height={ideal:i}),de._onLog&&de._onLog("DCE: ======try getUserMedia========");let h=[0,500],c=null;const u=async e=>{for(let t of h){t&&await new Promise((e=>setTimeout(e,t))),s();try{de._onLog&&de._onLog("DCE: ask "+JSON.stringify(e)),l=await navigator.mediaDevices.getUserMedia(e);break}catch(e){if(s(),"NotFoundError"===e.name||"NotAllowedError"===e.name)throw e;c=e,de._onLog&&de._onLog("DCE: "+e.message||e)}}s()};let d;if(await u(o),l||(de._onLog&&de._onLog("DCE: ======try getUserMedia again========"),d=JSON.parse(JSON.stringify(o)),"object"==typeof d.video&&(["iPhone","iPad"].includes(X.OS)?(t>=1280||i>=1280?d.video.width=1280:t>=640||i>=640?d.video.width=640:(t<640||i<640)&&(d.video.width=320),delete d.video.height):a&&!o.video.deviceId?(delete d.video.facingMode,this._allCameras.length&&(d.video.deviceId={ideal:this._allCameras[this._allCameras.length-1].deviceId})):d.video=!0),de._onLog&&de._onLog("DCE: "+d),await u(d)),l||(h=[1e3,2e3],await u(o)),l||await u(d),!l)throw c;const f=()=>{const e=l.getVideoTracks();let t,i;if(e.length&&(t=this._videoTrack=e[0]),this._video&&t){const e=t.getSettings();if(e)for(let r of this._allCameras)if(e.deviceId===r.deviceId){r._checked=!0,r.label=t.label,i=r;break}}this._currentCamera=i};if(await this.getAllCameras(!1),s(),a&&!this.ifSkipCameraInspection){f();const e=de.findBestRearCamera(this._allCameras),t=null===(n=this._currentCamera)||void 0===n?void 0:n.deviceId;e&&e!=t&&(l.getTracks().forEach((e=>{e.stop()})),h=[0,500,1e3,2e3],o.video.deviceId={exact:e},await u(o))}de._onLog&&de._onLog("DCE: ======play video========"),s(),await de.playVideo(this._video,l,this.cameraOpenTimeout),s(),de._onLog&&de._onLog("DCE: ======played video========"),this._bgLoading&&(this._bgLoading.style.animationPlayState="paused");const g="got "+this._video.videoWidth+"x"+this._video.videoHeight;this._optGotRsl&&(this._optGotRsl.setAttribute("data-width",this._video.videoWidth),this._optGotRsl.setAttribute("data-height",this._video.videoHeight),this._optGotRsl.innerText=g,this._selRsl&&this._optGotRsl.parentNode==this._selRsl&&(this._selRsl.value="got")),de._onLog&&de._onLog("DCE: got "+g),f(),this._renderSelCameraInfo();const _={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};if(_.deviceId&&(this._lastDeviceId=_.deviceId,this.ifSaveLastUsedCamera&&de.isStorageAvailable&&(window.localStorage.setItem("dce_last_camera_id",this._lastDeviceId),o.video.width&&o.video.height&&(window.localStorage.setItem("dce_last_apply_width",JSON.stringify(o.video.width)),window.localStorage.setItem("dce_last_apply_height",JSON.stringify(o.video.height))))),!r||!r.notTriggerPlayedEvent){const e=this.mapCameraEvents.get("played");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(_));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return this.promisePlay=null,_}catch(e){throw this.promisePlay=null,this._bgLoading&&(this._bgLoading.style.display="none"),"NotFoundError"===e.name&&(DOMException?e=new DOMException("No camera available, please use a device with an accessible camera.",e.name):(e=new Error("No camera available, please use a device with an accessible camera.")).name="NotFoundError"),e}})(),de._onLog&&(n=Date.now(),de._onLog("DCE: start opening camera: "+n));const o=await this.promisePlay;return de._onLog&&de._onLog("DCE: finish opening camera. Costs: "+(Date.now()-n)),this.playCallbackInfo=JSON.parse(JSON.stringify(o)),this._recordedStates.videoPlaying=!0,o}async resume(){this._assertOpen(),this._video&&(await this._video.play(),this._recordedStates.videoPlaying=!0),this.ifShowScanRegionLaser&&this.showScanRegionLaser()}pause(){this._assertOpen(),this._video&&(this._video.pause(),this._recordedStates.videoPlaying=!1),this.ifShowScanRegionLaser&&this.hideScanRegionLaser()}isPaused(){var e;return!this._isSingleFrameModeEnabled()&&!0===(null===(e=this._video)||void 0===e?void 0:e.paused)}_bindUI(){if(!this.UIElement)throw new Error("Need to define `UIElement` before opening.");const e=[this.UIElement];for(let t=0;t=17&&e.setAttribute("poster","data:image/gif;base64,R0lGODlhAQABAIEAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAgEAAEEBAA7"),this._video=e;const i=document.createElement("div");i.append(e),i.style.position="absolute",i.style.left="0",i.style.top="0",i.style.width="100%",i.style.height="100%",i.style.overflow="hidden",this._videoContainer=i,t.prepend(i)}else!this._divScanArea&&t.classList.contains("dce-scanarea")?this._divScanArea=t:!this._divScanLight&&t.classList.contains("dce-scanlight")?this._divScanLight=t:!this._bgLoading&&t.classList.contains("dce-bg-loading")?this._bgLoading=t:!this._bgCamera&&t.classList.contains("dce-bg-camera")?this._bgCamera=t:!this._selCam&&t.classList.contains("dce-sel-camera")?this._selCam=t:!this._selRsl&&t.classList.contains("dce-sel-resolution")?(this._selRsl=t,this.videoSrc||this._isSingleFrameModeEnabled()||this._selRsl.options.length||(this._selRsl.innerHTML=[this._optGotRsl?"":'','','',''].join(""),this._optGotRsl=this._optGotRsl||this._selRsl.options[0])):!this._optGotRsl&&t.classList.contains("dce-opt-gotResolution")?this._optGotRsl=t:!this._btnClose&&t.classList.contains("dce-btn-close")?this._btnClose=t:!this._selMinLtr&&t.classList.contains("dlr-sel-minletter")?(this._selMinLtr=t,this._selMinLtr.options.length||(this._selMinLtr.innerHTML=[this._optGotMinLtr?"":'','','','','','','','','','',''].join(""),this._optGotMinLtr=this._optGotMinLtr||this._selMinLtr.options[0])):!this._optGotMinLtr&&t.classList.contains("dlr-opt-gotMinLtr")&&(this._optGotMinLtr=t);if(this.extraBindings&&this.extraBindings.length)for(let i of this.extraBindings)try{i(t)}catch(e){}}if(!this._video)throw this._unbindUI(),Error(`Can not find the video container element with class '${this.containerClassName}'`);this._isSingleFrameModeEnabled()||this.videoSrc?(this._isSingleFrameModeEnabled()&&(this._elContainer&&(this._elContainer.addEventListener("click",this._clickIptSingleFrameMode),this._elContainer.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block")),this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._elContainer&&(["Android","HarmonyOS"].includes(X.OS)?(this._elContainer.addEventListener("touchend",this._tapDoFocus),this._elContainer.addEventListener("touchmove",this._touchMoveEvent)):this._elContainer.addEventListener("click",this._tapDoFocus)),this._selCam&&(this._selCam.style.display="block",this._selCam.addEventListener("change",this._onCameraSelChange)),this._selRsl&&(this._selRsl.style.display="block",this._selRsl.addEventListener("change",this._onResolutionSelChange)),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._bgLoading&&(this._bgLoading.style.display="block")),this._btnClose&&this._btnClose.addEventListener("click",this._onCloseBtnClick),document.addEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&(this._resizeObserver||(this._resizeObserver=new ResizeObserver((e=>{for(let t of e)t.target===this._elContainer&&this._updateLayers()}))),this._elContainer&&this._resizeObserver.observe(this._elContainer)),this._windowWidth=document.documentElement.clientWidth,window.addEventListener("resize",this._windowResizeListener)}_unbindUI(){this._isSingleFrameModeEnabled()?(this._elContainer&&(this._elContainer.removeEventListener("click",this._clickIptSingleFrameMode),this._elContainer.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none")):this._bgLoading&&(this._bgLoading.style.display="none"),this._elContainer&&(this._elContainer.removeEventListener("click",this._tapDoFocus),this._elContainer.removeEventListener("touchend",this._tapDoFocus),this._elContainer.removeEventListener("touchmove",this._touchMoveEvent)),this._selCam&&this._selCam.removeEventListener("change",this._onCameraSelChange),this._selRsl&&this._selRsl.removeEventListener("change",this._onResolutionSelChange),this._btnClose&&this._btnClose.removeEventListener("click",this._onCloseBtnClick),this.hideScanRegionLaser(),this.hideViewDecorator(),this.hideScanRegionOverlays(),this._drawingLayersManager.setVisible(!1),this._hideOriginalImageCvs(),this._videoContainer&&this._videoContainer.remove(),this._video=null,this._videoContainer=null,this._elContainer=null,this._selCam=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._divScanArea=null,this._divScanLight=null,this._cvsScanRegion&&(this._cvsScanRegion.remove(),this._cvsScanRegion=null),this._singleFrameInputContainer&&(this._singleFrameInputContainer.remove(),this._singleFrameInputContainer=null),this._cvsSingleFrameMode&&(this._cvsSingleFrameMode.remove(),this._cvsSingleFrameMode=null),document.removeEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&this._resizeObserver&&this._resizeObserver.disconnect(),window.removeEventListener("resize",this._windowResizeListener)}_assertOpen(){if(!this._bOpen)throw Error("The camera is not open.")}async open(e){this.UIElement||await this.setUIElement(de.defaultUIElementURL),this._bindUI(),e&&this.appendAndShowUI();let t=await this.play();this.bOpen=!0,this._focusParameters.fds=null,this._focusParameters.kTimeout=void 0,this._focusSupported=!0,this._tapFocusEnabled&&!this._isSingleFrameModeEnabled()&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,this._focusParameters.fds||(this._focusSupported=!1,this._tapFocusEnabled=!1));const i=this.mapCameraEvents.get("cameraopen");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return t}close(e){if(!this._video)return;this.stop(),this._hideOriginalImage(!1),this.hideTip(),this._unbindUI(),e&&this.hideUI(),this.stopFetchingLoop(),this.bOpen=!1;const t=this.mapCameraEvents.get("cameraclose");for(let e of t){if(!e)continue;const t={width:0,height:0,deviceId:null};setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}stop(){this._video&&this._video.srcObject&&(de._onLog&&de._onLog("DCE: ======stop video========"),this._video.srcObject.getTracks().forEach((e=>{e.stop()})),this._video.srcObject=null,this._videoTrack=null,this._currentCamera=null),this._video&&this.videoSrc&&(de._onLog&&de._onLog("DCE: ======stop existing video========"),this._video.pause(),this._video.currentTime=0),this._bgLoading&&(this._bgLoading.style.animationPlayState=""),this._frameQueue.length=0,this._reusedCvs&&this._reusedCvs.ctx2d&&this._reusedCvs.ctx2d.clearRect(0,0,this._reusedCvs.width,this._reusedCvs.height),this.forceLoseContext()}async getAllCameras(e=!0){let t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind));if(e&&t&&t.length&&!t[0].deviceId){let e=await navigator.mediaDevices.getUserMedia({video:!0});t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind)),e.getTracks().forEach((e=>{e.stop()}))}const i=[],r=[];if(this._allCameras)for(let e of this._allCameras)e._checked&&r.push(e);for(let e=0;e{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}if(r!==s.width||n!==s.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(s));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return s}getResolution(){if(this._bOpen)return[this._video.videoWidth,this._video.videoHeight];{let e=0,t=0;const i=this.videoSettings.video.width,r=this.videoSettings.video.height;return i&&(e=i.exact||i.ideal||i),r&&(t=r.exact||r.ideal||r),[e,t]}}async setResolution(e,t){let i,r;if(e instanceof Array?(i=e[0],r=e[1]):(i=e,r=t),this.videoSettings.video.width={ideal:i},this.videoSettings.video.height={ideal:r},!this._bOpen||this._video.paused)return null;const n=this._video.videoWidth,s=this._video.videoHeight,o=await this.play(null,i,r);if(n!==o.width||s!==o.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(o));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return o}async getResolutions(e){var t,i;let r="";const n=(e,t)=>{const i=this._mapCameraResolutions.get(e);if(!i||!i.length)return!1;for(let e of i)if(e[0]===t.width&&e[1]===t.height)return!0;return!1},s=async(e,t,i)=>{const r={video:{deviceId:{exact:e},width:{ideal:t},height:{ideal:i}}};let n=null;try{n=await navigator.mediaDevices.getUserMedia(r)}catch(e){return null}if(!n)return null;const s=n.getVideoTracks();let o=null;try{const e=s[0].getSettings();o={width:e.width,height:e.height}}catch(e){const t=document.createElement("video");t.srcObject=n,o={width:t.videoWidth,height:t.videoHeight},t.srcObject=null}return s.forEach((e=>{e.stop()})),o};if(!this._bOpen){const o=null===(i=null===(t=this.videoSettings)||void 0===t?void 0:t.video)||void 0===i?void 0:i.deviceId;if(!o)return null;if(r=o.hasOwnProperty("exact")?this.videoSettings.video.deviceId.exact:o.hasOwnProperty("ideal")?this.videoSettings.video.deviceId.ideal:this.videoSettings.video.deviceId,!r)return null;let a=this._mapCameraResolutions.get(r);if(a&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),a=this._mapCameraResolutions.get(r);for(let e of this._predefinedResolutions){const t=await s(r,e.width,e.height);t&&!n(r,t)&&a.push([t.width,t.height])}return a}if(this._currentCamera){r=this._currentCamera.deviceId;let t=this._mapCameraResolutions.get(r);if(t&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),t=this._mapCameraResolutions.get(r);let i=this._videoTrack;for(let e of this._predefinedResolutions){await i.applyConstraints({width:{ideal:e.width},height:{ideal:e.height}});const s=i.getSettings(),o={width:s.width,height:s.height};n(r,o)||t.push([o.width,o.height])}return this._video.srcObject.getTracks().forEach((e=>{e.stop()})),await this.play(r,null,null,{notTriggerPlayedEvent:!0}),t}return null}on(e,t){if(!t)return;const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);i.includes(t)||i.push(t)}off(e,t){const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);const r=i.indexOf(t);-1!==r&&i.splice(r,1)}offAll(e){if(e){if("string"==typeof e){const t=this.mapCameraEvents.get(e);t&&(t.length=0)}}else for(let e of this.mapCameraEvents.values())e&&(e.length=0)}getVideoSettings(){return JSON.parse(JSON.stringify(this.videoSettings))}updateVideoSettings(e){if(this.videoSettings=JSON.parse(JSON.stringify(e)),this._lastDeviceId=null,this._bOpen)return this.play()}isOpen(){return this._bOpen}getCapabilities(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCapabilities()' is unavailable in singleFrameMode.");return this._videoTrack&&this._videoTrack.getCapabilities?this._videoTrack.getCapabilities():{}}getCameraSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCameraSettings()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings():null}getConstraints(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getConstraints()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getConstraints():null}async applyConstraints(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'applyConstraints()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error('"_videoTrack" is null.');if(!this._videoTrack.applyConstraints)throw Error("Not supported.");return await this._videoTrack.applyConstraints(e)}async turnOnTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOnTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!0}]});throw Error("Not supported.")}async turnOffTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOffTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!1}]});throw Error("Not supported.")}async setColorTemperature(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setColorTemperature()' is unavailable in singleFrameMode.");let t=this.getCapabilities().colorTemperature;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{colorTemperature:e,whiteBalanceMode:"manual"}]})}getColorTemperature(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getColorTemperature()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().colorTemperature||0:null}async setExposureCompensation(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setExposureCompensation()' is unavailable in singleFrameMode.");let t=this.getCapabilities().exposureCompensation;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{exposureCompensation:e}]})}getExposureCompensation(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getExposureCompensation()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().exposureCompensation||0:null}async _setHardwareScale(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setHardwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");if(!this._videoTrack)return;const t=this.getCapabilities().zoom;if(!t)throw new Error("Not supported.");return et.max&&(e=t.max),e=ue(e,t.min,t.step,t.max),await this._videoTrack.applyConstraints({advanced:[{zoom:e}]}),e}_getHardwareScale(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().zoom||1:null}_setSoftwareScale(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setSoftwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");t&&this._setScaleCenter(t),this._softwareScale=e,this._scaleVideo(e,t)}_getSoftwareScale(){return this._softwareScale}_setScaleCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setScaleCenter()' is unavailable in singleFrameMode.");if(!e||"string"!=typeof e.x||"string"!=typeof e.y)throw new Error("Invalid center.");const t=this._video.videoWidth,i=this._video.videoHeight;let r=0,n=0;if(e.x.endsWith("px"))r=parseFloat(e.x);else{if(!e.x.endsWith("%"))throw new Error("Invalid scale center.");r=parseFloat(e.x)/100*t}if(e.y.endsWith("px"))n=parseFloat(e.y);else{if(!e.y.endsWith("%"))throw new Error("Invalid scale center.");n=parseFloat(e.y)/100*i}if(NaN==r||NaN==n)throw new Error("Invalid scale center.");this._scaleCenter={x:r,y:n}}_resetScaleCenter(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_resetScaleCenter()' is unavailable in singleFrameMode.");const e=this._video.videoWidth,t=this._video.videoHeight;this._scaleCenter={x:e/2,y:t/2}}_isVideoCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_isVideoCenter()' is unavailable in singleFrameMode.");return e&&e.x==this._video.videoWidth/2&&e.y==this._video.videoHeight/2}async _setZoom(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e>i?this._setSoftwareScale(e/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e)}}async setZoom(e){if("number"!=typeof e&&"object"!=typeof e)throw new TypeError("Illegal type of argument.");if("number"==typeof e)return this._setZoom(e);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e){if("number"!=typeof e.factor)throw new TypeError("Illegal type of 'factor'.");if(e.factor<1)throw new RangeError("Invalid value.");e.centerPoint?this._setScaleCenter(e.centerPoint):this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e.factor);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e.factor>i?this._setSoftwareScale(e.factor/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e.factor)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e.factor)}}}getZoom(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?this._getHardwareScale()*this._softwareScale:null}getZoomSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?{factor:this._getHardwareScale()*this._softwareScale}:null}async resetZoom(){await this.setZoom({factor:1})}async setFrameRate(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFrameRate()' is unavailable in singleFrameMode.");let t=this.getCapabilities().frameRate;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({width:{ideal:Math.max(this._video.videoWidth,this._video.videoHeight)},frameRate:e})}getFrameRate(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrameRate()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().frameRate:null}async _setFocus(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if("string"!=typeof e)throw Error("Invalid focus mode.");e=e.toLowerCase();const i=this.getCapabilities().focusMode,r=this.getCapabilities().focusDistance;if(!i)throw Error("Not supported.");if(!i.includes(e))throw Error("Unsupported mode.");if(t>=0){if(!r)throw Error("Manual focus unsupported.");return tr.max&&(t=r.max),t=ue(t,r.min,r.step,r.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:e,focusDistance:t}]})}return await this._videoTrack.applyConstraints({advanced:[{focusMode:e}]})}async setFocus(e,t){if("string"==typeof e)return this._setFocus(e,t);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if(!e)return;const i=this.getCapabilities(),r=i.focusMode,n=i.focusDistance;if(!r)throw Error("Not supported.");if("string"!=typeof e.mode)throw Error("Invalid focus mode.");const s=e.mode.toLowerCase();if(!r.includes(s))throw Error("Unsupported focus mode.");if("manual"!==s)return this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s}]});if(!n)throw Error("Manual focus unsupported.");if(e.hasOwnProperty("distance")){let t=e.distance;return tn.max&&(t=n.max),t=ue(t,n.min,n.step,n.max),this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s,focusDistance:t}]})}if(!e.area)throw new Error("'distance' or 'area' should be specified in 'manual' mode.");{const t=e.area.centerPoint;let i=e.area.width,r=e.area.height;if(!i||!r){const e=this._video.videoWidth,t=this._video.videoHeight;i||(i=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px"),r||(r=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px")}this._focusParameters._focusArea={centerPoint:{x:t.x,y:t.y},width:i,height:r},await this._setLocalFocus(t,i,r)}}getFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings().focusMode;return e?"continuous"===e?{mode:e}:{mode:e,distance:this._videoTrack.getSettings().focusDistance}:null}getFocusSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings(),t=e.focusMode;return t?"manual"===t?this._focusParameters._focusArea?{mode:"manual",area:JSON.parse(JSON.stringify(this._focusParameters._focusArea))}:{mode:"manual",distance:e.focusDistance}:{mode:t}:null}async _setFocusAndGetContract(e,t){const i=e=>{if(!this._bOpen||!this._videoTrack||this.video.paused||e.focusTaskId!=this._focusParameters.curFocusTaskId){this._bOpen&&this._videoTrack&&!this.video.paused||(this._focusParameters.isDoingFocus=0);const t=new Error(`Focus task ${e.focusTaskId} canceled.`);throw t.name="DeprecatedTaskError",t}1===this._focusParameters.isDoingFocus&&Date.now()-e.timeStart>this._focusParameters.focusCancelableTime&&(this._focusParameters.isDoingFocus=-1)};let r;t=ue(t,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:"manual",focusDistance:t}]}),i(e),r=null==this._focusParameters.oldDistance?this._focusParameters.kTimeout*Math.max(Math.abs(1/this._focusParameters.fds.min-1/t),Math.abs(1/this._focusParameters.fds.max-1/t))+this._focusParameters.minTimeout:this._focusParameters.kTimeout*Math.abs(1/this._focusParameters.oldDistance-1/t)+this._focusParameters.minTimeout,this._focusParameters.oldDistance=t,await new Promise((e=>{setTimeout(e,r)})),i(e);let n=e.focusL-e.focusW/2,s=e.focusT-e.focusH/2,o=e.focusW,a=e.focusH;if(n>=this.video.videoWidth||s>=this.video.videoHeight)throw new Error("Invalid area.");n+o>this.video.videoWidth&&(o=this.video.videoWidth-n),s+a>this.video.videoHeight&&(a=this.video.videoHeight-s);const l=this._getImageData(this.video,this.video.videoWidth,this.video.videoHeight,{sx:n,sy:s,sWidth:o,sHeight:a,dWidth:o,dHeight:a},null,{pixelFormat:ce.RGBA});if(!l)return this._setFocusAndGetContract(e,t);const h=l.data;let c=0;for(let e=0,t=h.length-8;eo&&oc)return await this._doFocusDetail(e,s,o,r,n,h,c)}else{let a=await this._setFocusAndGetContract(e,h);if(o>a)return await this._doFocusDetail(e,s,o,r,n,h,a);if(o==a)return await this._doFocusDetail(e,s,o,h,a);let c=await this._setFocusAndGetContract(e,l);if(c>o&&o{try{(null==t||tthis._focusParameters.fds.max)&&(i=this._focusParameters.fds.max),this._focusParameters.oldDistance=null;let r=ue(Math.sqrt(i*(t||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),n=ue(Math.sqrt((t||this._focusParameters.fds.step)*r),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=ue(Math.sqrt(r*i),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),o=await this._setFocusAndGetContract(e,s),a=await this._setFocusAndGetContract(e,n),l=await this._setFocusAndGetContract(e,r);if(a>l&&lo&&a>o){let t=await this._setFocusAndGetContract(e,i);const n=await this._doFocusDetail(e,r,l,i,t,s,o);return this._focusParameters.isDoingFocus=0,n}if(a==l&&ll){const t=await this._doFocusDetail(e,r,l,s,o);return this._focusParameters.isDoingFocus=0,t}return d(e,t,i)}catch(e){if("DeprecatedTaskError"!==e.name)throw e}};return d(u,r,n)}async enableTapToFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'enableTapToFocus()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error("Video is not playing.");if(!this._focusSupported)throw new Error("Tapping to focus unsupported.");if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))throw this._focusSupported=!1,this._tapFocusEnabled=!1,new Error("Tapping to focus unsupported.");this._tapFocusEnabled=!0}disableTapToFocus(){this._tapFocusEnabled=!1}isTapToFocusEnabled(){return this._tapFocusEnabled}_updateVideoContainerStyle(){if(!this._video)return;if(this._isSingleFrameModeEnabled())return;const e=this._getSoftwareScale(),t=this._videoContainer;if("contain"===this.videoFit&&e>1){const e=this._video.videoWidth,i=this._video.videoHeight,r=window.getComputedStyle(this._elContainer),n=parseFloat(r.width),s=parseFloat(r.height),o=e/i;if(n/sa?o/(i/e):s/(r/e));const c=h*(1-1/e)*(i/2-this._scaleCenter.x),u=h*(1-1/e)*(r/2-this._scaleCenter.y);this._video.style.transform=`translate(${c}px, ${u}px) scale(${e})`}this._updateVideoContainerStyle()}}getFrameSize(e,t,i,r){if(!e||!t)return null;let n,s,o,a,l=e,h=t;const c={regionLeft:0,regionTop:0,regionRight:l,regionBottom:h,regionMeasuredByPercentage:!1};i?(i.regionMeasuredByPercentage?(c.regionLeft=i.regionLeft*l/100,c.regionTop=i.regionTop*h/100,c.regionRight=i.regionRight*l/100,c.regionBottom=i.regionBottom*h/100):(c.regionLeft=i.regionLeft,c.regionTop=i.regionTop,c.regionRight=i.regionRight,c.regionBottom=i.regionBottom),n=Math.round(c.regionLeft),s=Math.round(c.regionTop),l=Math.round(c.regionRight-c.regionLeft),h=Math.round(c.regionBottom-c.regionTop)):(n=0,s=0,l=Math.round(l),h=Math.round(h));const u=Math.max(l,h);if(r&&r>0&&u>r){const e=r/u;l>h?(o=r,a=Math.round(h*e)):(o=Math.round(l*e),a=r)}else o=l,a=h;return o<=0||a<=0?null:{sx:n,sy:s,sWidth:l,sHeight:h,dWidth:o,dHeight:a}}getFrame(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrame()' is unavailable in singleFrameMode.");return this._getVideoData()}getImage(){return this.getFrame()}_drawImage(e,t,i,r,n,s,o){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(!i||!r)return null;if(t instanceof HTMLVideoElement&&4!==t.readyState||t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");let a;de._onLog&&(a=Date.now(),de._onLog("DCE: _drawImage(), START: "+a));let l=0,h=0,c=i,u=r,d=0,f=0,g=i,_=r;n&&(n.sx&&(l=Math.round(n.sx)),n.sy&&(h=Math.round(n.sy)),n.sWidth&&(c=Math.round(n.sWidth)),n.sHeight&&(u=Math.round(n.sHeight)),n.dx&&(d=Math.round(n.dx)),n.dy&&(f=Math.round(n.dy)),n.dWidth&&(g=Math.round(n.dWidth)),n.dHeight&&(_=Math.round(n.dHeight)));let p=ce.RGBA;o&&o.pixelFormat&&(p=o.pixelFormat);const m=e;if(!o||!o.bUseWebGL){de._onLog&&de._onLog("DCE: _drawImage() in context2d."),m.ctx2d||(m.ctx2d=m.getContext("2d",{willReadFrequently:!0}));const e=m.ctx2d;if(!e)throw new Error("Unable to get 'CanvasRenderingContext2D' from canvas.");return(m.width{const t=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW);const i=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,i),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW),{positions:t,texCoords:i}},i=e=>{const t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),t},r=(e,t)=>{const i=e.createProgram();if(t.forEach((t=>e.attachShader(i,t))),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS)){const t=new Error(`An error occured linking the program: ${e.getProgramInfoLog(i)}.`);throw t.name="WebGLError",t}return e.useProgram(i),i},n=(e,t,i)=>{const r=e.createShader(t);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){const t=new Error(`An error occured compiling the shader: ${e.getShaderInfoLog(r)}.`);throw t.name="WebGLError",t}return r},s="\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n \n uniform mat3 u_matrix;\n uniform mat3 u_textureMatrix;\n \n varying vec2 v_texCoord;\n void main(void) {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1.0);\n v_texCoord = vec4((u_textureMatrix * vec3(a_texCoord, 1)).xy, 0, 1.0).xy;\n }\n ";let o="rgb";["rgba","rbga","grba","gbra","brga","bgra"].includes(p)&&(o=p.slice(0,3));const a=`\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_image;\n uniform float uColorFactor;\n \n void main() {\n vec4 sample = texture2D(u_image, v_texCoord);\n float grey = 0.21 * sample.r + 0.71 * sample.g + 0.07 * sample.b;\n gl_FragColor = vec4(sample.${o} * (1.0 - uColorFactor) + (grey * uColorFactor), sample.a);\n }\n `,l=r(e,[n(e,e.VERTEX_SHADER,s),n(e,e.FRAGMENT_SHADER,a)]);this._webGLProgramInfo={program:l,attribLocations:{vertexPosition:e.getAttribLocation(l,"a_position"),texPosition:e.getAttribLocation(l,"a_texCoord")},uniformLocations:{uSampler:e.getUniformLocation(l,"u_image"),uColorFactor:e.getUniformLocation(l,"uColorFactor"),uMatrix:e.getUniformLocation(l,"u_matrix"),uTextureMatrix:e.getUniformLocation(l,"u_textureMatrix")}},this._webGLBuffers=t(e),this._webGLTexture=i(e),this.shaderPixelFormat=p}const n=(e,t,i)=>{e.bindBuffer(e.ARRAY_BUFFER,t),e.enableVertexAttribArray(i),e.vertexAttribPointer(i,2,e.FLOAT,!1,0,0)},o=(e,t,i)=>{const r=e.RGBA,n=e.RGBA,s=e.UNSIGNED_BYTE;e.bindTexture(e.TEXTURE_2D,t),e.texImage2D(e.TEXTURE_2D,0,r,n,s,i)},v=(e,t,s,o)=>{e.clearColor(0,0,0,1),e.clearDepth(1),e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),n(e,s.positions,t.attribLocations.vertexPosition),n(e,s.texCoords,t.attribLocations.texPosition),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,o),e.uniform1i(t.uniformLocations.uSampler,0),e.uniform1f(t.uniformLocations.uColorFactor,[ce.GREY,ce.GREY32].includes(p)?1:0);let a,m,v=he.translate(he.identity(),-1,-1);v=he.scale(v,2,2),v=he.scale(v,1/e.canvas.width,1/e.canvas.height),a=he.translate(v,d,f),a=he.scale(a,g,_),e.uniformMatrix3fv(t.uniformLocations.uMatrix,!1,a),m=he.translate(he.identity(),l/i,h/r),m=he.scale(m,c/i,u/r),e.uniformMatrix3fv(t.uniformLocations.uTextureMatrix,!1,m),e.drawArrays(e.TRIANGLES,0,6)};let y;if(o(e,this._webGLTexture,t),v(e,this._webGLProgramInfo,this._webGLBuffers,this._webGLTexture),s){if(s.lengtht||r.sy>i||r.sx+r.sWidth>t||r.sy+r.sHeight>i)throw new Error("Invalid position.");if(e instanceof HTMLVideoElement&&4!==e.readyState||e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");let o;de._onLog&&(o=Date.now(),de._onLog("DCE: _getImageData(), START: "+o));const a=Math.round(r.sx),l=Math.round(r.sy),h=Math.round(r.sWidth),c=Math.round(r.sHeight),u=Math.round(r.dWidth),d=Math.round(r.dHeight);let f=ce.RGBA;s&&s.pixelFormat&&(f=s.pixelFormat);let g,_,p,m=this._bWebGLSupported;s&&0==s.bUseWebGL&&(m=!1),m?(this._reusedWebGLCvs||(this._reusedWebGLCvs=document.createElement("canvas")),g=this._reusedWebGLCvs):(this._reusedCvs||(this._reusedCvs=document.createElement("canvas")),g=this._reusedCvs);try{if(m)if(de._onLog&&de._onLog("DCE: _getImageData() in WebGL."),n)if(f===ce.GREY){if(p=new Uint8Array(u*d*4),_=this._drawImage(g,e,t,i,{sx:a,sy:l,sWidth:h,sHeight:c,dWidth:u,dHeight:d},p,{pixelFormat:f,bUseWebGL:m}),p=this._transformPixelFormat(p,_.pixelFormat,f),n){if(n.length=this.croppingRegions.length||this._croppingRegionIndex<0)throw new Error("The 'croppingRegionIndex' is out of bounds.");e=this.croppingRegions[this._croppingRegionIndex],this.bIncreaseRegionIndexAuto&&++this._croppingRegionIndex>=this.croppingRegions.length&&(this._croppingRegionIndex=0)}return e}_fetchingLoop(e){if(this.isDisposed&&this.disposed)return;if(!this._bOpen||!this.isFetchingLoopStarted())return void this.stopFetchingLoop();const t=()=>{de._onLog&&de._onLog("DCE: start fetching a frame into buffer: "+Date.now());const e=this.getCurrentRegion();let t=this._getVideoData(null,{region:e});if(!t)return void(de._onLog&&de._onLog("DCE: get a invalid frame, abandon it: "+Date.now()));for(;this._frameQueue&&this._frameQueue.length>=this.maxNumberOfFramesInBuffer;)this._frameQueue.shift();this._frameQueue.push(t),de._onLog&&de._onLog("DCE: finish fetching a frame into buffer: "+Date.now());const i=this.mapCameraEvents.get("frameaddedtobuffer");for(let e of i)e&&setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this)}),0)},i=()=>{this.isDisposed&&this.disposed||(this._frameLoopTimeoutId2&&clearTimeout(this._frameLoopTimeoutId2),this.refreshInterval<=0||(this._frameLoopTimeoutId2=setTimeout((()=>{this.isDisposed&&this.disposed||(this._bOpen&&this.isFetchingLoopStarted()?(de._onLog&&de._onLog("DCE: second timeout executes: "+Date.now()),t(),i()):this.stopFetchingLoop())}),this.refreshInterval)))};e&&(this._frameQueue.length0&&i()):0===this.refreshInterval&&t()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameLoopTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._fetchingLoop(!0)}),this.loopInterval)}startFetchingLoop(){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(this._assertOpen(),this._isSingleFrameModeEnabled())throw Error("'startFetchingLoop()' is unavailable in singleFrameMode.");this.isFetchingLoopStarted()||(this._bFetchingLoopStarted=!0,this._recordedStates.fetchingLoopStart=!0,de._onLog&&de._onLog("DCE: start fetching loop: "+Date.now()),this._fetchingLoop(!0))}isFetchingLoopStarted(){return this._bFetchingLoopStarted}stopFetchingLoop(){this._bFetchingLoopStarted&&(de._onLog&&de._onLog("DCE: stop fetching loop: "+Date.now()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameQueue.length=0,this._bFetchingLoopStarted=!1,this._recordedStates.fetchingLoopStart=!1)}getFrameFromBuffer(e){return this._frameQueue&&this._frameQueue.length?e?ee.getId()>=0))}getSelectedDrawingItems(){return this._drawingLayersManager.getSelectedDrawingItems()}createDrawingStyle(e){return this._drawingLayersManager.createDrawingStyle(e)}getDrawingStyle(e){return this._drawingLayersManager.getDrawingStyle(e)}getDrawingStyles(){return this._drawingLayersManager.getDrawingStyles()}updateDrawingStyle(e,t){return this._drawingLayersManager.updateDrawingStyle(e,t)}clearDrawingLayers(){const e=this.getDrawingLayers();for(let t of e)this.deleteDrawingLayer(t.getId())}showTip(e,t,i,r,n=3e3,s=!0){this._assertOpen(),this._tipArgs.x=e,this._tipArgs.y=t,this._tipArgs.width=i,this._tipArgs.autoShowSuggestedTip=!!s,this._drawingLayerOfTip||(this._drawingLayerOfTip=this._createDrawingLayer(-1)),this._tipStyleId||(this._tipStyleId=this.createDrawingStyle({fillStyle:"#FFFFFF",paintMode:"fill",fontFamily:"Open Sans",fontSize:40})),this._drawingLayerOfTip.clearDrawingItems();const o=new se(r||"",e,t,i,this._tipStyleId);o._fabricObject.paddingTop=15,o._fabricObject.calcTextHeight=function(){for(var e=0,t=0,i=this._textLines.length;t0&&(this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}_hideTip(){this._drawingLayerOfTip&&(this.deleteDrawingLayer(this._drawingLayerOfTip.getId()),this._drawingLayerOfTip=null,this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId))}hideTip(){this._hideTip(),this._tipArgs.x=null,this._tipArgs.y=null,this._tipArgs.width=null,this._tipArgs.autoShowSuggestedTip=null}updateTipMessage(e){if(!this._drawingLayerOfTip)throw new Error("The Tip is not showing.");this._drawingLayerOfTip.getDrawingItems()[0].setAttribute("text",e),this._drawingLayerOfTip.renderAll(),this._tipArgs.duration>0&&(this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId),this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}suggestTip(e,t){this._tipArgs.autoShowSuggestedTip&&(this._drawingLayerOfTip?this.updateTipMessage(t):void 0!==this._tipArgs.x&&this.showTip(this._tipArgs.x,this._tipArgs.y,this._tipArgs.width,t,this._tipArgs.duration)),this.onTipSuggested&&setTimeout((()=>{this.isDisposed&&this.disposed||this.onTipSuggested.apply(this,[e,t])}),0)}_createControler(){if(this._controler||(this._controler=new le(this)),this._controler)return this._controler}_destroyControler(){this._controler=null}setOriginalImage(e,t,i){if(!e||!t||!i)throw new Error("Invalid arguments");this._originalImageData={imageData:e,width:t,height:i};let r=this._cvsOriginalImage;r||(r=document.createElement("canvas"),r.style.position="absolute",r.style.width="100%",r.style.height="100%",r.style.left="0",r.style.top="0",r.style.backgroundColor="white",r.style.objectFit="contain",this._cvsOriginalImage=r),r.width===t&&r.height===i||(r.width=t,r.height=i);const n=r.getContext("2d");n.clearRect(0,0,r.width,r.height),e instanceof Uint8Array||e instanceof Uint8ClampedArray?(e instanceof Uint8Array&&(e=new Uint8ClampedArray(e.buffer)),n.putImageData(new ImageData(e,t,i),0,0)):e instanceof HTMLCanvasElement&&n.drawImage(e,0,0),document.body.contains(r)&&""===r.style.display&&this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"})}getOriginalImage(){return this._originalImageData?Object.assign({},this._originalImageData):null}async deleteOriginalImage(){await this.hideOriginalImage(),this._cvsOriginalImage&&(this._cvsOriginalImage.remove(),this._cvsOriginalImage=null),this._originalImageData=null}_showOriginalImageCvs(){this._cvsOriginalImage&&"none"==this._cvsOriginalImage.style.display&&(this._cvsOriginalImage.style.display="")}_hideOriginalImageCvs(){this._cvsOriginalImage&&(this._cvsOriginalImage.style.display="none")}showOriginalImage(){if(!this._originalImageData)throw new Error("No original image is set.");const e=this._cvsOriginalImage;if(""===e.style.display&&document.body.contains(e))return;const{width:t,height:i}=this._originalImageData;if(this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"}),this._bOpen&&(this._video&&!this._video.paused&&this._video.pause(),this._bFetchingLoopStarted&&(this.stopFetchingLoop(),this._recordedStates.fetchingLoopStart=!0),this.ifShowScanRegionMask&&this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this.ifShowScanRegionLaser&&this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none"),this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none"),this._selCam&&(this._selCam.parentElement.style.display="none")),!document.body.contains(e))if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._showOriginalImageCvs()}async _hideOriginalImage(e){this._originalImageData&&this._cvsOriginalImage&&"none"!==this._cvsOriginalImage.style.display&&(this._updateDrawingLayersSize(),this._bOpen&&e&&(this._video&&this._recordedStates.videoPlaying&&await this.play(null,null,null,{notTriggerSingleFrameClick:!0}),this._recordedStates.fetchingLoopStart&&!this._isSingleFrameModeEnabled()&&this.startFetchingLoop(),this.ifShowScanRegionMask&&this._cvsScanRegion&&this._recordedStates.maskShow&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this._divScanLight&&this._recordedStates.laserShow&&this.showScanRegionLaser(),this._cvsViewDecorator&&this._recordedStates.decoratorShow&&this.showViewDecorator(),this._scanRegionOverlayContainer&&this._recordedStates.overlayShow&&this.showScanRegionOverlays()),this._selCam&&(this._selCam.parentElement.style.display=""),this._hideOriginalImageCvs())}async hideOriginalImage(){return this._hideOriginalImage(!0)}transformCoord(e){if(!this.isOpen())throw new Error("Unavailable when the camera is not open.");if(this._isSingleFrameModeEnabled()&&!this._cvsSingleFrameMode)throw new Error("No image is selected. ");const t=this._elContainer.getBoundingClientRect();let i,r,n,s,o,a=t.left,l=t.top,h=a+window.scrollX,c=l+window.scrollY;this._isSingleFrameModeEnabled()?(i=this._cvsSingleFrameMode.width,r=this._cvsSingleFrameMode.height,n=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).width),s=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).height),o="contain"):(i=this.video.videoWidth,r=this.video.videoHeight,n=parseFloat(window.getComputedStyle(this._elContainer).width),s=parseFloat(window.getComputedStyle(this._elContainer).height),o=this.videoFit);const u=n/s,d=i/r;let f,g,_,p,m=1;if("contain"===o)u({x:t.x-e.left-e.width/2,y:t.y-e.top-e.height/2}))),e.addWithUpdate()}else i.points=t;const r=i.points.length-1;return i.controls=i.points.reduce((function(e,t,i){return e["p"+i]=new V.Control({positionHandler:$,actionHandler:ie(i>0?i-1:r,te),actionName:"modifyPolygon",pointIndex:i}),e}),{}),i._setPositionDimensions({}),!0}}_extendGet(e){if("startPoint"===e||"endPoint"===e){const t=[],i=this._fabricObject;if(i.selectable&&!i.group)for(let e in i.oCoords)t.push({x:i.oCoords[e].x,y:i.oCoords[e].y});else for(let e of i.points){let r=e.x-i.pathOffset.x,n=e.y-i.pathOffset.y;const s=V.util.transformPoint({x:r,y:n},i.calcTransformMatrix());t.push({x:s.x,y:s.y})}return"startPoint"===e?t[0]:t[1]}}},DT_Group:class extends Q{constructor(e){super(new V.Group(e.map((e=>e._getFabricObject())))),this._fabricObject.on("selected",(()=>{this.styleSelector="selected";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("selected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)})),this._fabricObject.on("deselected",(()=>{this.styleSelector="default";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("deselected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)}))}getChildItems(){return this._fabricObject._objects.map((e=>e.getDrawingItem()))}addChildItem(e){if(!e||!e.isDrawingItem)throw TypeError("Illegal drawing item.");this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"add"):this._fabricObject.addWithUpdate(e._getFabricObject())}removeChildItem(e){e&&e.isDrawingItem&&(this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"remove"):this._fabricObject.removeWithUpdate(e._getFabricObject()))}}};function ge(e,t,i){return(i.x-e.x)*(t.y-e.y)==(t.x-e.x)*(i.y-e.y)&&Math.min(e.x,t.x)<=i.x&&i.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=i.y&&i.y<=Math.max(e.y,t.y)}function _e(e){return Math.abs(e)<1e-6?0:e<0?-1:1}function pe(e,t,i,r){let n=e[0]*(i[1]-t[1])+t[0]*(e[1]-i[1])+i[0]*(t[1]-e[1]),s=e[0]*(r[1]-t[1])+t[0]*(e[1]-r[1])+r[0]*(t[1]-e[1]);return!((n^s)>=0&&0!==n&&0!==s)&&(n=i[0]*(e[1]-r[1])+r[0]*(i[1]-e[1])+e[0]*(r[1]-i[1]),s=i[0]*(t[1]-r[1])+r[0]*(i[1]-t[1])+t[0]*(r[1]-i[1]),!((n^s)>=0&&0!==n&&0!==s))}var me,ve,ye,Se,be,we,Ce,xe,Te,Ee,Ie,Oe,Ae,Re,De,Me,Fe,Le,Pe,ke,Be,Ne,je,Ve,Ue,Ge,We,He;class Ye extends P{constructor(){super(),this._barcodeFillStyle="rgba(254,180,32,0.3)",this._barcodeStrokeStyle="rgba(254,180,32,0.9)",this._barcodeLineWidth=1,this._barcodeFillStyleBeforeVerification="rgba(248,252,0,0.2)",this._barcodeStrokeStyleBeforeVerification="transparent",this._barcodeLineWidthBeforeVerification=2,this.bFilterRegionInJs=!0,this._onPlayed=null}static set _onLog(e){!function(e,t,i,r,n){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===r?n.call(e,i):n?n.value=i:t.set(e,i)}(Ye,me,e,"f",ve),de._onLog=e}static get _onLog(){return function(e,t,i,r){if("a"===i&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?r:"a"===i?r.call(e):r?r.value:t.get(e)}(Ye,me,"f",ve)}static get version(){return this._version+`(DCE ${de.getVersion()})`}static _fireHTTPSWarnning(){Ye.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{Ye.onWarning&&Ye.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}static async testCameraAccess(){return de.testCameraAccess()}_fireResolutionWarning(){if(!this.singleFrameMode&&this.onWarning&&this.dce.isOpen()){const e=this.dce.getConstraints();e&&e.width<1280&&e.height<720&&setTimeout((()=>{this.onWarning&&this.onWarning({id:3,message:"Camera resolution too low, please use a higher resolution (720P or better)."})}),0)}}getUIElement(){return this.dce.getUIElement()}async setUIElement(e){await this.dce.setUIElement(e)}get singleFrameMode(){return this.dce.singleFrameMode}set singleFrameMode(e){if("boolean"!=typeof e&&!["image","camera"].includes(e))throw new Error("Invalid value.");this.dce.singleFrameMode=e,e&&(this.dce.ifShowScanRegionLaser=!1,(async()=>{let e=await this.getScanSettings();e.oneDTrustFrameCount=1,await this.updateScanSettings(e)})())}get onUnduplicatedRead(){return this.onUniqueRead}set onUnduplicatedRead(e){this.onUniqueRead=e}get video(){return this.dce&&this.dce.video}set videoSrc(e){this.dce&&(this.dce.videoSrc=e)}get videoSrc(){return this.dce&&this.dce.videoSrc}set onTipSuggested(e){this.dce&&(this.dce.onTipSuggested=e)}get onTipSuggested(){return this.dce&&this.dce.onTipSuggested}_assertOpen(){if(!this.dce.isOpen())throw Error("The scanner is not open.")}set barcodeFillStyle(e){this._barcodeFillStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{fillStyle:e})}get barcodeFillStyle(){return this._barcodeFillStyle}set barcodeStrokeStyle(e){this._barcodeStrokeStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{strokeStyle:e})}get barcodeStrokeStyle(){return this._barcodeStrokeStyle}set barcodeLineWidth(e){this._barcodeLineWidth=e,this.dce&&this.dce.updateDrawingStyle(3,{lineWidth:e})}get barcodeLineWidth(){return this._barcodeLineWidth}set barcodeFillStyleBeforeVerification(e){this._barcodeFillStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{fillStyle:e})}get barcodeFillStyleBeforeVerification(){return this._barcodeFillStyleBeforeVerification}set barcodeStrokeStyleBeforeVerification(e){this._barcodeStrokeStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{strokeStyle:e})}get barcodeStrokeStyleBeforeVerification(){return this._barcodeStrokeStyleBeforeVerification}set barcodeLineWidthBeforeVerification(e){this._barcodeLineWidthBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{lineWidth:e})}get barcodeLineWidthBeforeVerification(){return this._barcodeLineWidthBeforeVerification}set regionMaskFillStyle(e){this.dce.setScanRegionMaskStyle({fillStyle:e})}get regionMaskFillStyle(){return this.dce.regionMaskFillStyle}set regionMaskStrokeStyle(e){this.dce.setScanRegionMaskStyle({strokeStyle:e})}get regionMaskStrokeStyle(){return this.dce.regionMaskStrokeStyle}set regionMaskLineWidth(e){this.dce.setScanRegionMaskStyle({lineWidth:e})}get regionMaskLineWidth(){return this.dce.regionMaskLineWidth}set region(e){this._region=e,this.dce&&(e?e instanceof Array||this.dce.setScanRegion(e):this.dce.setScanRegion(null)),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e,this.dce.framePixelFormat=e?"rgba":"grey"}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}async createDCEInstance(){this.dce||(P._onLog&&P._onLog("createDCEInstance()"),de.defaultUIElementURL=null,this.dce=await de.createInstance(),this.dce.refreshInterval=200,this.dce.framePixelFormat="grey",this.dce.maxCvsSideLength=this.maxCvsSideLength,this._drawingItemNamespace=fe,["iPhone","iPad","Android","HarmonyOS"].includes(P.browserInfo.OS)||this.dce.setResolution(1920,1080),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"}),this.barcodeLineWidth=this._barcodeLineWidth,this.dce.on("cameraChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("resolutionChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("cameraClose",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1})),this.dce.on("singleFrameAcquired",(async t=>{if(!t)return;if(!t.data)return;let i;this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:r,sx:n,sy:s,width:o,height:a,stride:l,pixelFormat:h,timeStamp:c,_sWidth:u,_sHeight:d}=t,f={timeStamp:c};if("grey"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_GrayScaled,0,f);else if("rgba"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ABGR_8888,0,f);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ARGB_8888,0,f)}if(await this.clearMapDecodeRecord(),P.recalculateResultLocation(i,n,s,u,d,o,a),this._drawResults(i),this.onFrameRead&&this.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(i);this.onFrameRead(e)}if(this.onUniqueRead&&this.isOpen()&&!this._bPauseScan)for(let e of i)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))})))}set maxCvsSideLength(e){this._maxCvsSideLength=e,this.dce.maxCvsSideLength=e}get maxCvsSideLength(){return this._maxCvsSideLength}static async createInstance(e){const t=new Ye;t._instanceID=await Ye.createInstanceInWorker(!0),await t.createDCEInstance(),"string"==typeof e&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return await t.dce.setUIElement(Ye.defaultUIElementURL),t.singleFrameMode&&console.warn("The `navigator.mediaDevices.getUserMedia` is unavailable. automatically change to `singleFrameMode`."),Ye._fireHTTPSWarnning(),t.singleFrameMode||await t.updateRuntimeSettings("single"),t}async decodeCurrentFrame(e){this._assertOpen();let t=null;e&&e.region&&(t=e.region);const i=this.dce._getVideoData(null,{region:t});return this._decode_DCEFrame(i)}async updateRuntimeSettings(t){let i;if("string"==typeof t)if("speed"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=0,i.localizationModes=[2,0,0,0,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9}else if("balance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=512,i.deblurLevel=3,i.localizationModes=[2,16,0,0,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else if("coverage"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=512,i.deblurLevel=5,i.scaleDownThreshold=1e5,i.localizationModes=[2,16,4,8,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else if("single"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region)}else if("dense"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=0,i.deblurLevel=7,i.scaleDownThreshold=1e5,i.localizationModes=[2,8,0,0,0,0,0,0],i.minResultConfidence=0,i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else if("distance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,i=await this.getRuntimeSettings(),i.barcodeFormatIds=e.barcodeFormatIds,i.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(i.region=e.region),i.expectedBarcodesCount=0,i.scaleDownThreshold=1e5,i.localizationModes=[2,8,0,0,0,0,0,0],i.barcodeZoneMinDistanceToImageBorders=9,i.timeout=1e5}else i=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(i=JSON.parse(JSON.stringify(t)),i.region instanceof Array){let e=t.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(i.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!P._bUseFullFeature){if(0!=(i.barcodeFormatIds&~(e.EnumBarcodeFormat.BF_ONED|e.EnumBarcodeFormat.BF_QR_CODE|e.EnumBarcodeFormat.BF_PDF417|e.EnumBarcodeFormat.BF_DATAMATRIX))||0!=i.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=i.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}{let e=i.region;if(this.bFilterRegionInJs?this.userDefinedRegion=JSON.parse(JSON.stringify(e)):this.userDefinedRegion=null,e instanceof Array)if(e.length){for(let t=0;t{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(i=>{if(i.success){try{this._handleRetJsonString(i.updateReturn)}catch(e){t(e)}return e()}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(i)}})})),"string"==typeof t&&["speed","balance","coverage","dense","distance"].includes(t)&&(await this.setModeArgument("BinarizationModes",0,"EnableFillBinaryVacancy","1"),await this.setModeArgument("BinarizationModes",0,"BlockSizeX","0"),await this.setModeArgument("BinarizationModes",0,"BlockSizeY","0"))}_bindUI(){if(!this.getUIElement())throw new Error("Need to define `UIElement` before opening.");if(this.dce._bindUI(),!this.dce.video)throw this._unbindUI(),Error("Can not find the video container element with class 'dce-video-container'")}_unbindUI(){this.dce._unbindUI()}set onPlayed(e){this.dce.off("played",this._onPlayed),this._onPlayed=e,this.dce.on("played",this._onPlayed)}get onPlayed(){return this._onPlayed}async getAllCameras(){return this.dce.getAllCameras()}async getCurrentCamera(){return this.dce.getSelectedCamera()}async setCurrentCamera(e){const t=await this.dce.selectCamera(e);return this._fireResolutionWarning(),t}getResolution(){return this.dce.getResolution()}async setResolution(e,t){const i=await this.dce.setResolution(e,t);return this._fireResolutionWarning(),i}getVideoSettings(){return this.dce.getVideoSettings()}updateVideoSettings(e){return this.dce.updateVideoSettings(e)}isOpen(){return this.dce&&this.dce.isOpen()}setVideoFit(e){return this.dce&&this.dce.setVideoFit(e)}getVideoFit(){return this.dce&&this.dce.getVideoFit()}set ifShowScanRegionMask(e){this.dce&&(this.dce.ifShowScanRegionMask=e)}get ifShowScanRegionMask(){return this.dce&&this.dce.ifShowScanRegionMask}set ifSaveLastUsedCamera(e){this.dce&&(this.dce.ifSaveLastUsedCamera=e)}get ifSaveLastUsedCamera(){return this.dce&&this.dce.ifSaveLastUsedCamera}set ifSkipCameraInspection(e){this.dce&&(this.dce.ifSkipCameraInspection=e)}get ifSkipCameraInspection(){return this.dce&&this.dce.ifSkipCameraInspection}stop(){this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.dce.stop(),this.dce.ifShowScanRegionLaser=!1,this.dce.hideViewDecorator(),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}pause(){this.dce.pause()}async play(e,t,i){this.dce.ifShowScanRegionLaser=!0;const r=await this.dce.play(e,t,i);return this._fireResolutionWarning(),r}pauseScan(e){this._assertOpen(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce.ifShowScanRegionLaser=!1,this.dce.stopFetchingLoop()}resumeScan(){this._assertOpen(),this._bPauseScan=!1,this.dce.ifShowScanRegionLaser=!0}getCapabilities(){return this.dce.getCapabilities()}getCameraSettings(){return this.dce.getCameraSettings()}getConstraints(){return this.dce.getConstraints()}async applyConstraints(e){return this.dce.applyConstraints(e)}async turnOnTorch(){return this.dce.turnOnTorch()}async turnOffTorch(){return this.dce.turnOffTorch()}async setColorTemperature(e){return this.dce.setColorTemperature(e)}getColorTemperature(){return this.dce.getColorTemperature()}async setExposureCompensation(e){return this.dce.setExposureCompensation(e)}getExposureCompensation(){return this.dce.getExposureCompensation()}async setZoom(e){return this.dce.setZoom(e)}getZoomSettings(){return this.dce.getZoomSettings()}resetZoom(){return this.dce.resetZoom()}async setFrameRate(e){return this.dce.setFrameRate(e)}getFrameRate(){return this.dce.getFrameRate()}async setFocus(e,t){return this.dce.setFocus(e,t)}getFocus(){return this.dce.getFocus()}getFocusSettings(){return this.dce.getFocusSettings()}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this.dce.stopFetchingLoop(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(!this.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce.video||this.dce.video.paused||this._bPauseScan)return P._onLog&&P._onLog("Video or scan is paused. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));P._onLog&&P._onLog("======= once read ======="),P._onLog&&(this._timeStartDecode=Date.now());const t=this._getVideoFrame();if(!t)return P._onLog&&P._onLog("Get invalid frame."),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{t._bUseWebGL||"grey"!==t.pixelFormat||(this.dce.framePixelFormat="rgba");let i=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:r,sx:n,sy:s,width:o,height:a,stride:l,pixelFormat:h,timeStamp:c,_sWidth:u,_sHeight:d}=t,f={timeStamp:c};if("grey"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_GrayScaled,0,f);else if("rgba"===h)i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ABGR_8888,0,f);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);i=await this._decodeBuffer_Uint8Array(r,o,a,l,e.EnumImagePixelFormat.IPF_ARGB_8888,0,f)}if(P.recalculateResultLocation(i,n,s,u,d,o,a),0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration)),this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan&&(this.autoZoom||this.autoFocus||this.autoSuggestTip))if(i.length)this.autoZoomInFrameArray.length=0,this.autoZoomOutFrameCount=0,this.frameArrayInIdealZoom.length=0,this.suggestTipFrameArray.length=0,this.autoZoom&&this.autoFocus&&(this.nextActionInIdealZoom="focus"),this.autoFocusFrameArray.length=0,this.noIntermediateResultsCount=0;else{const t=async()=>new Promise(((e,t)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!1}})})),i=await t(),r=(e,t,i,r,n,s,o)=>{let a=s/r,l=o/n;e.x1=e.x1/a+t,e.x2=e.x2/a+t,e.x3=e.x3/a+t,e.x4=e.x4/a+t,e.y1=e.y1/l+i,e.y2=e.y2/l+i,e.y3=e.y3/l+i,e.y4=e.y4/l+i},l=t=>{if(!t)return null;const i={};let l,h,c,f,g;{const e=this.video.videoWidth*(1-this.autoZoomDetectionArea)/2,t=this.video.videoWidth*(1+this.autoZoomDetectionArea)/2,i=t,r=e,n=this.video.videoHeight*(1-this.autoZoomDetectionArea)/2,s=n,o=this.video.videoHeight*(1+this.autoZoomDetectionArea)/2;g={x1:e,x2:t,x3:i,x4:r,y1:n,y2:s,y3:o,y4:o}}const _=(e,t)=>{const i=(e,t)=>{if(!e&&!t)throw new Error("Invalid arguments.");return function(e,t,i){let r=!1;const n=e.length;if(n<=2)return!1;for(let s=0;s0!=_e(a.y-i)>0&&_e(t-(i-o.y)*(o.x-a.x)/(o.y-a.y)-o.x)<0&&(r=!r)}return r}([{x:t.x1,y:t.y1},{x:t.x2,y:t.y2},{x:t.x3,y:t.y3},{x:t.x4,y:t.y4}],e.x,e.y)},r=(e,t)=>!!(pe([e[0],e[1]],[e[2],e[3]],[t.x1,t.y1],[t.x2,t.y2])||pe([e[0],e[1]],[e[2],e[3]],[t.x2,t.y2],[t.x3,t.y3])||pe([e[0],e[1]],[e[2],e[3]],[t.x3,t.y3],[t.x4,t.y4])||pe([e[0],e[1]],[e[2],e[3]],[t.x4,t.y4],[t.x1,t.y1]));return!!(i({x:e.x1,y:e.y1},t)||i({x:e.x2,y:e.y2},t)||i({x:e.x3,y:e.y3},t)||i({x:e.x4,y:e.y4},t))||(!!(i({x:t.x1,y:t.y1},e)||i({x:t.x2,y:t.y2},e)||i({x:t.x3,y:t.y3},e)||i({x:t.x4,y:t.y4},e))||!!(r([t.x1,t.y1,t.x2,t.y2],e)||r([t.x2,t.y2,t.x3,t.y3],e)||r([t.x3,t.y3,t.x4,t.y4],e)||r([t.x4,t.y4,t.x1,t.y1],e)))},p=[];for(let i of t){if(i.resultType!==e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE)continue;const t=i.scaleDownRatio;for(let e of i.results){if(!e)continue;const i={x1:e.x1=e.x1*t,x2:e.x2=e.x2*t,x3:e.x3=e.x3*t,x4:e.x4=e.x4*t,y1:e.y1=e.y1*t,y2:e.y2=e.y2*t,y3:e.y4=e.y3*t,y4:e.y4=e.y4*t};r(i,n,s,u,d,o,a),_(g,i)&&p.push(e)}}const m=(t=>{if(!t||!t.length)return null;const i=e=>{const t=(e.x1+e.x2+e.x3+e.x4)/4,i=(e.y1+e.y2+e.y3+e.y4)/4;return(t-o/2)*(t-o/2)+(i-a/2)*(i-a/2)};let r,n=t.filter((t=>t.barcodeFormat==e.EnumBarcodeFormat.BF_QR_CODE||t.barcodeFormat==e.EnumBarcodeFormat.BF_DATAMATRIX));if(n.length||(n=t.filter((t=>t.barcodeFormat==e.EnumBarcodeFormat.BF_ONED)),n.length||(n=t)),!n.length)return null;r=n[0];let s=i(r);if(1!=n.length)for(let e=1;e1.1*r.confidence?(r=n[e],s=t):n[e].confidence>.9*r.confidence&&t!0===e)).length>=this.suggestTipFrameLimit[1]){this.suggestTipFrameArray.length=0;const e=h.x3-h.x1,t=h.y3-h.y1;h.result.moduleSizet?e>o*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):e>.6*o&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."):e<=t&&(t>a*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):t>.6*a&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."))}if(this.autoZoom){const e=this.autoZoomIdealArea[1];let t=(1-this.autoZoomTargetBorder)/2;const i=h.x1/u,l=(u-h.x3)/u,c=h.y1/d,f=(d-h.y3)/d;if(i>e&&l>e&&c>e&&f>e&&h.result.moduleSize{}))),this.autoZoomInFrameArray.filter((e=>!0===e)).length>=this.autoZoomInFrameLimit[1]){this.autoZoomInFrameArray.length=0;const e=[(.5-t)/(.5-i),(.5-t)/(.5-l),(.5-t)/(.5-c),(.5-t)/(.5-f)].filter((e=>e>0)),r=Math.min(...e,this.autoZoomInIdealModuleSize/h.result.moduleSize),n=this.dce.getZoomSettings().factor;let s=Math.max(Math.pow(n*r,1/this.autoZoomInMaxTimes),this.autoZoomInMinStep);s=Math.min(s,r);const o=n*s;await this.setZoom({factor:o}),this.dce.clearFrameBuffer()}}else if(this.autoZoomInFrameArray.length=0,this.frameArrayInIdealZoom.push(!0),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.frameArrayInIdealZoom.filter((e=>!0===e)).length>=this.frameLimitInIdealZoom[1])if(this.frameArrayInIdealZoom.length=0,"focus"===this.nextActionInIdealZoom&&this.autoFocus){r(h,n,s,u,d,o,a);try{await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer(),this.nextActionInIdealZoom="zoomOut"}else{if("zoomOut"!==this.nextActionInIdealZoom&&this.autoFocus)throw new Error("Invalid action.");if(this.enableZoomOutInIdealZoom){t=this.autoZoomIdealArea[1]+this.autoZoomOutStepRate_2;const e=[(.5-t)/(.5-i),(.5-t)/(.5-l),(.5-t)/(.5-c),(.5-t)/(.5-f)].filter((e=>e>0));let r=Math.min(...e)*this.dce.getZoomSettings().factor;await this.setZoom({factor:r}),this.dce.clearFrameBuffer(),this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}}}else if(this.autoFocus&&(this.autoFocusFrameArray.push(!0),this.autoFocusFrameArray.splice(0,this.autoFocusFrameArray.length-this.autoFocusFrameLimit[0]),this.autoFocusFrameArray.filter((e=>!0===e)).length>=this.autoFocusFrameLimit[1])){this.autoFocusFrameArray.length=0;try{r(h,n,s,u,d,o,a),await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer()}}else if(this.noIntermediateResultsCount++,this.suggestTipFrameArray.push(!1),this.autoZoom){if(this.autoZoomInFrameArray.push(!1),this.autoZoomInFrameArray.splice(0,this.autoZoomInFrameArray.length-this.autoZoomInFrameLimit[0]),this.autoZoomOutFrameCount++,this.frameArrayInIdealZoom.push(!1),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.autoZoomOutFrameCount>=this.autoZoomOutFrameLimit){this.autoZoomOutFrameCount=0;const e=this.getZoomSettings().factor;if(e>this.autoZoomOutMinValue){const t=Math.max((e-1)*this.autoZoomOutStepRate,this.autoZoomOutMinStep),i=Math.max(e-t,this.autoZoomOutMinValue);await this.setZoom({factor:i}),this.dce.clearFrameBuffer()}}this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}else this.autoFocus&&(this.autoFocusFrameArray.length=0,this.setFocus({mode:"continuous"}).catch((e=>{})))}return i})().then((e=>{if(P._onLog&&P._onLog(e),this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost,i=this._indexCurrentDecodingFrame;const r=()=>{let r=0;if(this.region instanceof Array){let n=0,s=0;n=i+1>=this.region.length?0:i+1,s=n+1>=this.region.length?0:n+1,r=e[n]&&e[n].length&&t[s]&&t[s].length?Math.min(...e[n])-Math.max(...t[s]):0}else if(t&&t.length){let i=Math.min(...e),n=Math.max(...t);i&&n&&(r=i-n)}else r=0;return r>0?r:0};(()=>{if(this.region instanceof Array){for(e[i]&&e[i]instanceof Array||(e[i]=[]);e[i].length>=5;)e[i].shift();e[i].push(this._lastInnerDecodeDuration)}else{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)}})(),this._intervalGetVideoFrame=r()+this.intervalTime,P._onLog&&P._onLog("Next fetching frame loop interval: "+this._intervalGetVideoFrame)}if(this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onFrameRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onFrameRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){P._onLog&&P._onLog("Get frame in parallel.");let t=this.dce.isFetchingLoopStarted();if(this.dce.loopInterval=this._intervalGetVideoFrame,t||this.dce.startFetchingLoop(),!this.dce.numberOfFramesInBuffer)return this.dce.loopInterval=0,null;e=this.dce.getFrameFromBuffer();const i=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};i(e)}else P._onLog&&P._onLog("Get frame in serial."),this.dce.stopFetchingLoop(),e=this.dce.getFrame();return e}async open(){this._bindUI();const e=await this.dce.open();return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async openVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open();return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}close(){this._drawResults(null),this.dce.close(),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}async show(){this._bindUI();const e=await this.dce.open(!0);return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async showVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open(!0);return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}hide(){this.dce.close(!0),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}showTip(e,t,i,r,n=3e3,s=!0){this.dce&&this.dce.showTip(e,t,i,r,n,s)}hideTip(){this.dce&&this.dce.hideTip()}updateTipMessage(e){this.dce&&this.dce.updateTipMessage(e)}async enableTapToFocus(){this.dce&&this.dce.enableTapToFocus()}disableTapToFocus(){this.dce&&this.dce.disableTapToFocus()}isTapToFocusEnabled(){return this.dce.isTapToFocusEnabled()}convertToPageCoordinates(e){return this.dce.convertToPageCoordinates(e)}convertToClientCoordinates(e){return this.dce.convertToClientCoordinates(e)}destroyContext(){this.close(),this.dce&&this.dce.dispose(!1),this.bDestroyed||super.destroyContext()}}me=Ye,ve={value:void 0},e.EnumBarcodeColourMode=void 0,(ye=e.EnumBarcodeColourMode||(e.EnumBarcodeColourMode={}))[ye.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",ye[ye.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",ye[ye.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",ye[ye.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",ye[ye.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",ye[ye.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",ye[ye.BICM_SKIP=0]="BICM_SKIP",ye[ye.BICM_REV=2147483648]="BICM_REV",e.EnumBarcodeComplementMode=void 0,(Se=e.EnumBarcodeComplementMode||(e.EnumBarcodeComplementMode={}))[Se.BCM_AUTO=1]="BCM_AUTO",Se[Se.BCM_GENERAL=2]="BCM_GENERAL",Se[Se.BCM_SKIP=0]="BCM_SKIP",Se[Se.BCM_REV=2147483648]="BCM_REV",e.EnumBarcodeFormat_2=void 0,(be=e.EnumBarcodeFormat_2||(e.EnumBarcodeFormat_2={}))[be.BF2_NULL=0]="BF2_NULL",be[be.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",be[be.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",be[be.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",be[be.BF2_POSTNET=2097152]="BF2_POSTNET",be[be.BF2_PLANET=4194304]="BF2_PLANET",be[be.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",be[be.BF2_RM4SCC=16777216]="BF2_RM4SCC",be[be.BF2_DOTCODE=2]="BF2_DOTCODE",be[be.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",be[be.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",be[be.BF2_PHARMACODE=12]="BF2_PHARMACODE",be[be.BF2_ALL=-1]="BF2_ALL",e.EnumBinarizationMode=void 0,(we=e.EnumBinarizationMode||(e.EnumBinarizationMode={}))[we.BM_AUTO=1]="BM_AUTO",we[we.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",we[we.BM_SKIP=0]="BM_SKIP",we[we.BM_THRESHOLD=4]="BM_THRESHOLD",we[we.BM_REV=2147483648]="BM_REV",e.EnumClarityCalculationMethod=void 0,(Ce=e.EnumClarityCalculationMethod||(e.EnumClarityCalculationMethod={}))[Ce.ECCM_CONTRAST=1]="ECCM_CONTRAST",e.EnumClarityFilterMode=void 0,(xe=e.EnumClarityFilterMode||(e.EnumClarityFilterMode={}))[xe.CFM_GENERAL=1]="CFM_GENERAL",e.EnumColourClusteringMode=void 0,(Te=e.EnumColourClusteringMode||(e.EnumColourClusteringMode={}))[Te.CCM_AUTO=1]="CCM_AUTO",Te[Te.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",Te[Te.CCM_SKIP=0]="CCM_SKIP",Te[Te.CCM_REV=2147483648]="CCM_REV",e.EnumColourConversionMode=void 0,(Ee=e.EnumColourConversionMode||(e.EnumColourConversionMode={}))[Ee.CICM_GENERAL=1]="CICM_GENERAL",Ee[Ee.CICM_SKIP=0]="CICM_SKIP",Ee[Ee.CICM_REV=2147483648]="CICM_REV",e.EnumConflictMode=void 0,(Ie=e.EnumConflictMode||(e.EnumConflictMode={}))[Ie.CM_IGNORE=1]="CM_IGNORE",Ie[Ie.CM_OVERWRITE=2]="CM_OVERWRITE",e.EnumDeblurMode=void 0,(Oe=e.EnumDeblurMode||(e.EnumDeblurMode={}))[Oe.DM_SKIP=0]="DM_SKIP",Oe[Oe.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",Oe[Oe.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",Oe[Oe.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",Oe[Oe.DM_SMOOTHING=8]="DM_SMOOTHING",Oe[Oe.DM_MORPHING=16]="DM_MORPHING",Oe[Oe.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",Oe[Oe.DM_SHARPENING=64]="DM_SHARPENING",Oe[Oe.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",Oe[Oe.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING",e.EnumDeformationResistingMode=void 0,(Ae=e.EnumDeformationResistingMode||(e.EnumDeformationResistingMode={}))[Ae.DRM_AUTO=1]="DRM_AUTO",Ae[Ae.DRM_GENERAL=2]="DRM_GENERAL",Ae[Ae.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",Ae[Ae.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",Ae[Ae.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",Ae[Ae.DRM_SKIP=0]="DRM_SKIP",Ae[Ae.DRM_REV=2147483648]="DRM_REV",e.EnumDPMCodeReadingMode=void 0,(Re=e.EnumDPMCodeReadingMode||(e.EnumDPMCodeReadingMode={}))[Re.DPMCRM_AUTO=1]="DPMCRM_AUTO",Re[Re.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",Re[Re.DPMCRM_SKIP=0]="DPMCRM_SKIP",Re[Re.DPMCRM_REV=2147483648]="DPMCRM_REV",e.EnumGrayscaleTransformationMode=void 0,(De=e.EnumGrayscaleTransformationMode||(e.EnumGrayscaleTransformationMode={}))[De.GTM_INVERTED=1]="GTM_INVERTED",De[De.GTM_ORIGINAL=2]="GTM_ORIGINAL",De[De.GTM_SKIP=0]="GTM_SKIP",De[De.GTM_REV=2147483648]="GTM_REV",e.EnumImagePreprocessingMode=void 0,(Me=e.EnumImagePreprocessingMode||(e.EnumImagePreprocessingMode={}))[Me.IPM_AUTO=1]="IPM_AUTO",Me[Me.IPM_GENERAL=2]="IPM_GENERAL",Me[Me.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",Me[Me.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",Me[Me.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",Me[Me.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",Me[Me.IPM_SKIP=0]="IPM_SKIP",Me[Me.IPM_REV=2147483648]="IPM_REV",e.EnumIntermediateResultSavingMode=void 0,(Fe=e.EnumIntermediateResultSavingMode||(e.EnumIntermediateResultSavingMode={}))[Fe.IRSM_MEMORY=1]="IRSM_MEMORY",Fe[Fe.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",Fe[Fe.IRSM_BOTH=4]="IRSM_BOTH",e.EnumLocalizationMode=void 0,(Le=e.EnumLocalizationMode||(e.EnumLocalizationMode={}))[Le.LM_SKIP=0]="LM_SKIP",Le[Le.LM_AUTO=1]="LM_AUTO",Le[Le.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",Le[Le.LM_LINES=8]="LM_LINES",Le[Le.LM_STATISTICS=4]="LM_STATISTICS",Le[Le.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",Le[Le.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",Le[Le.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",Le[Le.LM_CENTRE=128]="LM_CENTRE",Le[Le.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",Le[Le.LM_REV=2147483648]="LM_REV",e.EnumPDFReadingMode=void 0,(Pe=e.EnumPDFReadingMode||(e.EnumPDFReadingMode={}))[Pe.PDFRM_RASTER=1]="PDFRM_RASTER",Pe[Pe.PDFRM_AUTO=2]="PDFRM_AUTO",Pe[Pe.PDFRM_VECTOR=4]="PDFRM_VECTOR",Pe[Pe.PDFRM_REV=2147483648]="PDFRM_REV",e.EnumQRCodeErrorCorrectionLevel=void 0,(ke=e.EnumQRCodeErrorCorrectionLevel||(e.EnumQRCodeErrorCorrectionLevel={}))[ke.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",ke[ke.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",ke[ke.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",ke[ke.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q",e.EnumRegionPredetectionMode=void 0,(Be=e.EnumRegionPredetectionMode||(e.EnumRegionPredetectionMode={}))[Be.RPM_AUTO=1]="RPM_AUTO",Be[Be.RPM_GENERAL=2]="RPM_GENERAL",Be[Be.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",Be[Be.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",Be[Be.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",Be[Be.RPM_SKIP=0]="RPM_SKIP",Be[Be.RPM_REV=2147483648]="RPM_REV",e.EnumResultCoordinateType=void 0,(Ne=e.EnumResultCoordinateType||(e.EnumResultCoordinateType={}))[Ne.RCT_PIXEL=1]="RCT_PIXEL",Ne[Ne.RCT_PERCENTAGE=2]="RCT_PERCENTAGE",e.EnumResultType=void 0,(je=e.EnumResultType||(e.EnumResultType={}))[je.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",je[je.RT_RAW_TEXT=1]="RT_RAW_TEXT",je[je.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",je[je.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT",e.EnumScaleUpMode=void 0,(Ve=e.EnumScaleUpMode||(e.EnumScaleUpMode={}))[Ve.SUM_AUTO=1]="SUM_AUTO",Ve[Ve.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",Ve[Ve.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",Ve[Ve.SUM_SKIP=0]="SUM_SKIP",Ve[Ve.SUM_REV=2147483648]="SUM_REV",e.EnumTerminatePhase=void 0,(Ue=e.EnumTerminatePhase||(e.EnumTerminatePhase={}))[Ue.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",Ue[Ue.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",Ue[Ue.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",Ue[Ue.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",Ue[Ue.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",Ue[Ue.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED",e.EnumTextFilterMode=void 0,(Ge=e.EnumTextFilterMode||(e.EnumTextFilterMode={}))[Ge.TFM_AUTO=1]="TFM_AUTO",Ge[Ge.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",Ge[Ge.TFM_SKIP=0]="TFM_SKIP",Ge[Ge.TFM_REV=2147483648]="TFM_REV",e.EnumTextResultOrderMode=void 0,(We=e.EnumTextResultOrderMode||(e.EnumTextResultOrderMode={}))[We.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",We[We.TROM_POSITION=2]="TROM_POSITION",We[We.TROM_FORMAT=4]="TROM_FORMAT",We[We.TROM_SKIP=0]="TROM_SKIP",We[We.TROM_REV=2147483648]="TROM_REV",e.EnumTextureDetectionMode=void 0,(He=e.EnumTextureDetectionMode||(e.EnumTextureDetectionMode={}))[He.TDM_AUTO=1]="TDM_AUTO",He[He.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",He[He.TDM_SKIP=0]="TDM_SKIP",He[He.TDM_REV=2147483648]="TDM_REV",e.BarcodeReader=P,e.BarcodeScanner=Ye,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/dist/dbr.mjs b/dist/dbr.mjs index 07c73c0..fa05d4b 100644 --- a/dist/dbr.mjs +++ b/dist/dbr.mjs @@ -4,18 +4,18 @@ * @website http://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 9.6.31 (js 20230908) + * @version 9.6.32 (js 20231027) * @fileoverview Dynamsoft JavaScript Library for Barcode Reader * More info on DBR JS: https://www.dynamsoft.com/barcode-reader/sdk-javascript/ */ -const e="undefined"==typeof self,t=e?{}:self;let i,r,n,s,o;if("undefined"!=typeof navigator&&(i=navigator,r=i.userAgent,n=i.platform,s=i.mediaDevices),!e){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:i.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:n,search:"Win"},Mac:{str:n},Linux:{str:n}};let s="unknownBrowser",a=0,h="unknownOS";for(let t in e){const i=e[t]||{};let n=i.str||r,o=i.search||t,h=i.verStr||r,l=i.verSearch||t;if(l instanceof Array||(l=[l]),-1!=n.indexOf(o)){s=t;for(let e of l){let t=h.indexOf(e);if(-1!=t){a=parseFloat(h.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let n=i.str||r,s=i.search||e;if(-1!=n.indexOf(s)){h=e;break}}"Linux"==h&&-1!=r.indexOf("Windows NT")&&(h="HarmonyOS"),o={browser:s,version:a,OS:h}}e&&(o={browser:"ssr",version:0,OS:"ssr"});const a="undefined"!=typeof WebAssembly&&r&&!(/Safari/.test(r)&&!/Chrome/.test(r)&&/\(.+\s11_2_([2-6]).*\)/.test(r)),h=!("undefined"==typeof Worker),l=!(!s||!s.getUserMedia),c=async()=>{let e=!1;if(l)try{(await s.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===o.browser&&o.version>66||"Safari"===o.browser&&o.version>13||"OPR"===o.browser&&o.version>43||"Edge"===o.browser&&o.version;const u=(()=>{if(!e&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),d=" is not allowed to change after `createInstance` or `loadWasm` is called.",f=!e&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",g=!e&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",_=t=>{if(null==t)t=[];else{t=t instanceof Array?[...t]:[t];for(let i=0;ie&&"object"==typeof e&&"function"==typeof e.then;class w extends Promise{constructor(e){let t,i;super(((e,r)=>{t=e,i=r})),this._s="pending",this.resolve=e=>{this.isPending&&(b(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",i(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,b(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const i=await t;e===this._task&&this.resolve(i)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}var C=function(){this.init()};C.prototype={init:function(){var e=this||x;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var t=this||x;if(e=parseFloat(e),t.ctx||M(),void 0!==e&&e>=0&&e<=1){if(t._volume=e,t._muted)return t;t.usingWebAudio&&t.masterGain.gain.setValueAtTime(e,x.ctx.currentTime);for(var i=0;i=0;t--)e._howls[t].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,M()),e},codecs:function(e){return(this||x)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||x;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||x,t=null;try{t="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!t||"function"!=typeof t.canPlayType)return e;var i=t.canPlayType("audio/mpeg;").replace(/^no$/,""),r=e._navigator?e._navigator.userAgent:"",n=r.match(/OPR\/([0-6].)/g),s=n&&parseInt(n[0].split("/")[1],10)<33,o=-1!==r.indexOf("Safari")&&-1===r.indexOf("Chrome"),a=r.match(/Version\/(.*?) /),h=o&&a&&parseInt(a[1],10)<15;return e._codecs={mp3:!(s||!i&&!t.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!i,opus:!!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(t.canPlayType('audio/wav; codecs="1"')||t.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!t.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!t.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(t.canPlayType("audio/x-m4a;")||t.canPlayType("audio/m4a;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(t.canPlayType("audio/x-m4b;")||t.canPlayType("audio/m4b;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(t.canPlayType("audio/x-mp4;")||t.canPlayType("audio/mp4;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(h||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(h||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(t.canPlayType("audio/x-flac;")||t.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||x;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var t=function(i){for(;e._html5AudioPool.length0?o._seek:i._sprite[e][0]/1e3),l=Math.max(0,(i._sprite[e][0]+i._sprite[e][1])/1e3-h),c=1e3*l/Math.abs(o._rate),u=i._sprite[e][0]/1e3,d=(i._sprite[e][0]+i._sprite[e][1])/1e3;o._sprite=e,o._ended=!1;var f=function(){o._paused=!1,o._seek=h,o._start=u,o._stop=d,o._loop=!(!o._loop&&!i._sprite[e][2])};if(!(h>=d)){var g=o._node;if(i._webAudio){var _=function(){i._playLock=!1,f(),i._refreshBuffer(o);var e=o._muted||i._muted?0:o._volume;g.gain.setValueAtTime(e,x.ctx.currentTime),o._playStart=x.ctx.currentTime,void 0===g.bufferSource.start?o._loop?g.bufferSource.noteGrainOn(0,h,86400):g.bufferSource.noteGrainOn(0,h,l):o._loop?g.bufferSource.start(0,h,86400):g.bufferSource.start(0,h,l),c!==1/0&&(i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c)),t||setTimeout((function(){i._emit("play",o._id),i._loadQueue()}),0)};"running"===x.state&&"interrupted"!==x.ctx.state?_():(i._playLock=!0,i.once("resume",_),i._clearTimer(o._id))}else{var p=function(){g.currentTime=h,g.muted=o._muted||i._muted||x._muted||g.muted,g.volume=o._volume*x.volume(),g.playbackRate=o._rate;try{var r=g.play();if(r&&"undefined"!=typeof Promise&&(r instanceof Promise||"function"==typeof r.then)?(i._playLock=!0,f(),r.then((function(){i._playLock=!1,g._unlocked=!0,t?i._loadQueue():i._emit("play",o._id)})).catch((function(){i._playLock=!1,i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),o._ended=!0,o._paused=!0}))):t||(i._playLock=!1,f(),i._emit("play",o._id)),g.playbackRate=o._rate,g.paused)return void i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||o._loop?i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c):(i._endTimers[o._id]=function(){i._ended(o),g.removeEventListener("ended",i._endTimers[o._id],!1)},g.addEventListener("ended",i._endTimers[o._id],!1))}catch(e){i._emit("playerror",o._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===g.src&&(g.src=i._src,g.load());var m=window&&window.ejecta||!g.readyState&&x._navigator.isCocoonJS;if(g.readyState>=3||m)p();else{i._playLock=!0,i._state="loading";var v=function(){i._state="loaded",p(),g.removeEventListener(x._canPlayEvent,v,!1)};g.addEventListener(x._canPlayEvent,v,!1),i._clearTimer(o._id)}}return o._id}i._ended(o)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var i=t._getSoundIds(e),r=0;r=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else n.length>=2&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(i=t?r._soundById(t):r._sounds[0])?i._volume:0;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"volume",action:function(){r.volume.apply(r,n)}}),r;void 0===t&&(r._volume=e),t=r._getSoundIds(t);for(var a=0;a0?r/l:r),u=Date.now();e._fadeTo=i,e._interval=setInterval((function(){var n=(Date.now()-u)/r;u=Date.now(),a+=h*n,a=Math.round(100*a)/100,a=h<0?Math.max(i,a):Math.min(i,a),o._webAudio?e._volume=a:o.volume(a,e._id,!0),s&&(o._volume=a),(it&&a>=i)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,o.volume(i,e._id),o._emit("fade",e._id))}),c)},_stopFade:function(e){var t=this,i=t._soundById(e);return i&&i._interval&&(t._webAudio&&i._node.gain.cancelScheduledValues(x.ctx.currentTime),clearInterval(i._interval),i._interval=null,t.volume(i._fadeTo,e),i._fadeTo=null,t._emit("fade",e)),t},loop:function(){var e,t,i,r=this,n=arguments;if(0===n.length)return r._loop;if(1===n.length){if("boolean"!=typeof n[0])return!!(i=r._soundById(parseInt(n[0],10)))&&i._loop;e=n[0],r._loop=e}else 2===n.length&&(e=n[0],t=parseInt(n[1],10));for(var s=r._getSoundIds(t),o=0;o=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else 2===n.length&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if("number"!=typeof e)return(i=r._soundById(t))?i._rate:r._rate;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"rate",action:function(){r.rate.apply(r,n)}}),r;void 0===t&&(r._rate=e),t=r._getSoundIds(t);for(var a=0;a=0?t=parseInt(r[0],10):i._sounds.length&&(t=i._sounds[0]._id,e=parseFloat(r[0]))}else 2===r.length&&(e=parseFloat(r[0]),t=parseInt(r[1],10));if(void 0===t)return 0;if("number"==typeof e&&("loaded"!==i._state||i._playLock))return i._queue.push({event:"seek",action:function(){i.seek.apply(i,r)}}),i;var o=i._soundById(t);if(o){if(!("number"==typeof e&&e>=0)){if(i._webAudio){var a=i.playing(t)?x.ctx.currentTime-o._playStart:0,h=o._rateSeek?o._rateSeek-o._seek:0;return o._seek+(h+a*Math.abs(o._rate))}return o._node.currentTime}var l=i.playing(t);l&&i.pause(t,!0),o._seek=e,o._ended=!1,i._clearTimer(t),i._webAudio||!o._node||isNaN(o._node.duration)||(o._node.currentTime=e);var c=function(){l&&i.play(t,!0),i._emit("seek",t)};if(l&&!i._webAudio){var u=function(){i._playLock?setTimeout(u,0):c()};setTimeout(u,0)}else c()}return i},playing:function(e){var t=this;if("number"==typeof e){var i=t._soundById(e);return!!i&&!i._paused}for(var r=0;r=0&&x._howls.splice(r,1);var n=!0;for(i=0;i=0){n=!1;break}return E&&n&&delete E[e._src],x.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,i,r){var n=this["_on"+e];return"function"==typeof t&&n.push(r?{id:i,fn:t,once:r}:{id:i,fn:t}),this},off:function(e,t,i){var r=this,n=r["_on"+e],s=0;if("number"==typeof t&&(i=t,t=null),t||i)for(s=0;s=0;s--)n[s].id&&n[s].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,i)}.bind(r,n[s].fn),0),n[s].once&&r.off(e,n[s].fn,n[s].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var i=t._queue[0];i.event===e&&(t._queue.shift(),t._loadQueue()),e||i.action()}return t},_ended:function(e){var t=this,i=e._sprite;if(!t._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(i<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),i--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],i=0;i=0;if(!e.bufferSource)return this;if(x._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{e.bufferSource.buffer=x._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(x._navigator&&x._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var I=function(e){this._parent=e,this.init()};I.prototype={init:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++x._counter,t._sounds.push(e),e.create(),e},create:function(){var e=this,t=e._parent,i=x._muted||e._muted||e._parent._muted?0:e._volume;return t._webAudio?(e._node=void 0===x.ctx.createGain?x.ctx.createGainNode():x.ctx.createGain(),e._node.gain.setValueAtTime(i,x.ctx.currentTime),e._node.paused=!0,e._node.connect(x.masterGain)):x.noAudio||(e._node=x._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(x._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=t._src,e._node.preload=!0===t._preload?"auto":t._preload,e._node.volume=i*x.volume(),e._node.load()),e},reset:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++x._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,t=e._parent;t._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(t._sprite).length&&(t._sprite={__default:[0,1e3*t._duration]}),"loaded"!==t._state&&(t._state="loaded",t._emit("load"),t._loadQueue()),e._node.removeEventListener(x._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var E={},O=function(e){var t=e._src;if(E[t])return e._duration=E[t].duration,void D(e);if(/^data:[^;]+;base64,/.test(t)){for(var i=atob(t.split(",")[1]),r=new Uint8Array(i.length),n=0;n0?(E[t._src]=e,D(t,e)):i()};"undefined"!=typeof Promise&&1===x.ctx.decodeAudioData.length?x.ctx.decodeAudioData(e).then(r).catch(i):x.ctx.decodeAudioData(e,r,i)},D=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},M=function(){if(x.usingWebAudio){try{"undefined"!=typeof AudioContext?x.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?x.ctx=new webkitAudioContext:x.usingWebAudio=!1}catch(e){x.usingWebAudio=!1}x.ctx||(x.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(x._navigator&&x._navigator.platform),t=x._navigator&&x._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),i=t?parseInt(t[1],10):null;if(e&&i&&i<9){var r=/safari/.test(x._navigator&&x._navigator.userAgent.toLowerCase());x._navigator&&!r&&(x.usingWebAudio=!1)}x.usingWebAudio&&(x.masterGain=void 0===x.ctx.createGain?x.ctx.createGainNode():x.ctx.createGain(),x.masterGain.gain.setValueAtTime(x._muted?0:x._volume,x.ctx.currentTime),x.masterGain.connect(x.ctx.destination)),x._setup()}};!function(e,t,i,r){var n;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var i=t._howls.length-1;i>=0;i--)t._howls[i].stereo(e);return t},e.prototype.pos=function(e,i,r){var n=this;return n.ctx&&n.ctx.listener?(i="number"!=typeof i?n._pos[1]:i,r="number"!=typeof r?n._pos[2]:r,"number"!=typeof e?n._pos:(n._pos=[e,i,r],void 0!==n.ctx.listener.positionX?(n.ctx.listener.positionX.setTargetAtTime(n._pos[0],t.ctx.currentTime,.1),n.ctx.listener.positionY.setTargetAtTime(n._pos[1],t.ctx.currentTime,.1),n.ctx.listener.positionZ.setTargetAtTime(n._pos[2],t.ctx.currentTime,.1)):n.ctx.listener.setPosition(n._pos[0],n._pos[1],n._pos[2]),n)):n},e.prototype.orientation=function(e,i,r,n,s,o){var a=this;if(!a.ctx||!a.ctx.listener)return a;var h=a._orientation;return i="number"!=typeof i?h[1]:i,r="number"!=typeof r?h[2]:r,n="number"!=typeof n?h[3]:n,s="number"!=typeof s?h[4]:s,o="number"!=typeof o?h[5]:o,"number"!=typeof e?h:(a._orientation=[e,i,r,n,s,o],void 0!==a.ctx.listener.forwardX?(a.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),a.ctx.listener.forwardY.setTargetAtTime(i,t.ctx.currentTime,.1),a.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),a.ctx.listener.upX.setTargetAtTime(n,t.ctx.currentTime,.1),a.ctx.listener.upY.setTargetAtTime(s,t.ctx.currentTime,.1),a.ctx.listener.upZ.setTargetAtTime(o,t.ctx.currentTime,.1)):a.ctx.listener.setOrientation(e,i,r,n,s,o),a)},i.prototype.init=(n=i.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],n.call(this,e)}),i.prototype.stereo=function(e,i){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,i)}}),r;var n=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===i){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var o=r._getSoundIds(i),a=0;a{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`license`"+d);i._license=t})(F,e)}static get productKeys(){return this._license}static set productKeys(e){F.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){F.license=e}static get organizationID(){return this._license}static set organizationID(e){F.license=e}static set sessionPassword(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`sessionPassword`"+d);i._sessionPassword=t})(F,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:a,worker:h,getUserMedia:l,camera:await c(),browser:o.browser,version:o.version,OS:o.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(t){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");F._engineResourcePath=(t=>{if(null==t&&(t="./"),!e){let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(t)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`licenseServer`"+d);i._licenseServer=_(t)})(F,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+d);i._deviceFriendlyName=t||""})(F,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");F.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=F._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",F.engineResourcePath)}static set defaultUIElementURL(e){F._defaultUIElementURL=e}static _fireHTTPSWarnning(){F.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{F.onWarning&&F.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new T({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;F._onLog&&F._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const i=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{i?i===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else i||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),i=null;if(t&&t.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:h}=e;i=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),F.recalculateResultLocation(i,r,n,a,h,s,o)}if(this._drawResults(i,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(F._onLog&&F._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!F.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:i,ls:r,sp:n,rmk:s}=(e=>{const i=e;if(i._pLoad.isEmpty){let e,r,n=i._license||"",s=JSON.parse(JSON.stringify(i._licenseServer)),o=i._sessionPassword,a=0;if(n.startsWith("t")||n.startsWith("f"))a=0;else if(0===n.length||n.startsWith("P")||n.startsWith("L")||n.startsWith("Y")||n.startsWith("A"))a=1;else{a=2;const t=n.indexOf(":");if(-1!=t&&(n=n.substring(t+1)),n.startsWith("DLS2")){let t;try{let e=n.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(n=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof n&&(n=JSON.stringify(n)),0===s.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),s=_(e)}!o&&t.sessionPassword&&(o=t.sessionPassword),e=t.remark}("200001"===n||n.startsWith("200001-"))&&(s&&s.length||(n="")),n||(a=1)}if(a&&(t.crypto||(r="Please upgrade your browser to support online key."),t.crypto.subtle||(r="Require https to use online key in this browser.")),r){if(1!==a)throw new Error(r);a=0,console.warn(r),i._lastErrorCode=-1,i._lastErrorString=r}return 1===a&&(n="",console.warn("Applying for a public trial license ...")),{lt:a,l:n,ls:s,sp:o,rmk:e}}throw new Error("Can't preprocess license again"+d)})(F);this._pLoad.task=async(t,a)=>{let h=F.engineResourcePath+F._workerName;F.engineResourcePath.startsWith(location.origin)||(h=await fetch(h).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),F._dbrWorker=new Worker(h),F._dbrWorker.onerror=e=>{let t=new Error(e.message);a(t)},F._dbrWorker.onmessage=async i=>{let r=i.data?i.data:i;switch(r.type){case"log":F._onLog&&F._onLog(r.message);break;case"load":{r.message&&(r.message=r.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let i,n=!1;1===e&&(n=!0,r.message||(r.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),r.success?(F._dbrWorker.onerror=null,F._version=r.version+"(JS "+F._jsVersion+"."+F._jsEditVersion+")",F._onLog&&F._onLog("load dbr worker success"),r.message&&console.warn(r.message)):(i=new Error(r.message),i.stack=r.stack+"\n"+i.stack,i.ltsErrorCode=r.ltsErrorCode,n||111==r.ltsErrorCode&&-1!=r.message.toLowerCase().indexOf("trial license")&&(n=!0)),n&&F.showDialog(r.success?"warn":"error",r.message),r.success?t():a(i);break}case"task":{let e=r.id,t=r.body;try{F._taskCallbackMap.get(e)(t),F._taskCallbackMap.delete(e)}catch(t){throw F._taskCallbackMap.delete(e),t}break}default:F._onLog&&F._onLog(i)}},F._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:F.engineResourcePath,bUseFullFeature:F._bUseFullFeature,bd:F._bWasmDebug,v:F._jsVersion,brtk:!!e,bptk:1===e,l:i,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:o,cv:F.authCacheVersion,fn:F.deviceFriendlyName,ls:r,sp:n,rmk:s})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,i)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let n=await r.text();if(!n.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let s=document.createElement("div");s.innerHTML=n;let o=[];for(let e=0;e{if(e==t.target){a.remove();for(let e of o)e.remove()}}));else if(!l&&e.classList.contains("dls-license-icon-close"))l=e,e.addEventListener("click",(()=>{a.remove();for(let e of o)e.remove()}));else if(!c&&e.classList.contains("dls-license-icon-error"))c=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!d&&e.classList.contains("dls-license-msg-content")){d=e;let t=i;for(;t;){let i=t.indexOf("["),r=t.indexOf("]",i),n=t.indexOf("(",r),s=t.indexOf(")",n);if(-1==i||-1==r||-1==n||-1==s){e.appendChild(new Text(t));break}i>0&&e.appendChild(new Text(t.substring(0,i)));let o=document.createElement("a"),a=t.substring(i+1,r);o.innerText=a;let h=t.substring(n+1,s);o.setAttribute("href",h),o.setAttribute("target","_blank"),e.appendChild(o),t=t.substring(s+1)}}document.body.appendChild(a)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await F.loadWasm(),await new Promise(((t,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),F._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new F;return e._instanceID=await F.createInstanceInWorker(),F._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:i,instanceID:this._instanceID})}))}async decode(e){F._onLog&&F._onLog("decode(source: any)"),F._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):F.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):F.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,i,r,n,s,o){return await new Promise(((a,h)=>{let l=F._nextTaskID++;F._taskCallbackMap.set(l,(e=>{if(e.success){let t,i=F._onLog?Date.now():0;F._onLog&&F._onLog("worker return result: "+i),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return h(e)}if(F._onLog){let e=Date.now();F._onLog("DBR getting message from worker timestamp: "+i),F._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),F._onLog("From DBR entering worker to returning message from worker costs: "+(i-this._timeEnterInnerDBR)),F._onLog("Handling results from DBR worker costs: "+(e-i)),F._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return a(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,h(t)}})),this._timeEnterInnerDBR=Date.now(),F._onLog&&F._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),F._dbrWorker.postMessage({type:"decodeBuffer",id:l,instanceID:this._instanceID,body:{buffer:e,width:t,height:i,stride:r,format:n,orientation:s,config:o}},[e.buffer]),F._onLog&&o&&o.timeStamp&&F._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-o.timeStamp))}))}async _decodeBuffer_Blob(e,t,i,r,n,s,o){F._onLog&&F._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const a=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,i)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{i(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(a),t,i,r,n,s,o)}async decodeBuffer(e,t,i,r,n,s,o){let a;return F._onLog&&F._onLog("decodeBuffer(buffer,width,height,stride,format)"),F._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?a=await this._decodeBuffer_Uint8Array(e,t,i,r,n,s,o):e instanceof ArrayBuffer?a=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,i,r,n,s,o):e instanceof Blob&&(a=await this._decodeBuffer_Blob(e,t,i,r,n,s,o)),a}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return i(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),F._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success){let t=JSON.parse(i.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"getRuntimeSettings",id:i,instanceID:this._instanceID})}))}async updateRuntimeSettings(e){let t;if("string"==typeof e)if("speed"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=5,t.expectedBarcodesCount=512,t.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region}else if("dense"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=9,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else t=JSON.parse(e);else{if("object"!=typeof e)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(t=JSON.parse(JSON.stringify(e)),t.region instanceof Array){let e=t.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(t.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!F._bUseFullFeature){if(0!=(t.barcodeFormatIds&~(y.BF_ONED|y.BF_QR_CODE|y.BF_PDF417|y.BF_DATAMATRIX))||0!=t.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=t.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=t.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,t.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(t.intermediateResultTypes|=S.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.updateReturn)}catch(e){i(e)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),F._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(t)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"resetRuntimeSettings",id:i,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:i,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!F._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:i,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!F._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){i(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),F._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){F._onLog&&F._onLog("_decode_Blob(blob: Blob)");let i=null,r=null;if("undefined"!=typeof createImageBitmap)try{i=await createImageBitmap(e)}catch(e){}i||(r=await function(e){return new Promise(((t,i)=>{let r=URL.createObjectURL(e),n=new Image;n.dbrObjUrl=r,n.src=r,n.onload=()=>{t(n)},n.onerror=e=>{i(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let n=await this._decode_Image(i||r,t);return i&&i.close(),n}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){F._onLog&&F._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let i,r,n=e instanceof HTMLImageElement?e.naturalWidth:e.width,s=e instanceof HTMLImageElement?e.naturalHeight:e.height,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let h=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return F.recalculateResultLocation(h,0,0,n,s,i,r),h}async _decode_Canvas(e,t){if(F._onLog&&F._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";if(0===e.width||0===e.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=e,this.oriCanvasData=null);let i=(e.ctx2d||e.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,e.width,e.height).data;return await this._decodeBuffer_Uint8Array(i,e.width,e.height,4*e.width,p.IPF_ABGR_8888,0,t)}async _decode_Video(e,t){if(F._onLog&&F._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let i,r,n=e.videoWidth,s=e.videoHeight,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r);let h=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return F.recalculateResultLocation(h,0,0,n,s,i,r),h}async _decode_DCEFrame(e,t){if(F._onLog&&F._onLog("_decode_DCEFrame(dceFrame)"),!F.isDCEFrame(e))return[];let i=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,colorMode:e.colorMode,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{width:r,height:n,colorMode:s,pixelFormat:o,stride:a,timeStamp:h}=e;let l;l=t&&t.bCopyData?new Uint8Array(e.data):e.data;let c=null;if(t?(c=JSON.parse(JSON.stringify(t)),c.timeStamp=h):c={timeStamp:h},o&&a)if("grey"===o)i=await this._decodeBuffer_Uint8Array(l,r,n,a,p.IPF_GrayScaled,0,c);else if("rgba"===o)i=await this._decodeBuffer_Uint8Array(l,r,n,a,p.IPF_ABGR_8888,0,c);else{if("bgra"!==o)throw new Error(`Pixel format '${o}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,n,a,p.IPF_ARGB_8888,0,c)}else if("grey"===s)i=await this._decodeBuffer_Uint8Array(l,r,n,r,p.IPF_GrayScaled,0,c);else if("rgba"===s)i=await this._decodeBuffer_Uint8Array(l,r,n,4*r,p.IPF_ABGR_8888,0,c);else{if("bgra"!==s)throw new Error(`Color mode '${s}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,n,4*r,p.IPF_ARGB_8888,0,c)}return i}async _decode_DSImage(e,t){if(F._onLog&&F._onLog("_decode_DSImage(dsImage)"),!F.isDSImage(e))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat.toLowerCase(),data:new Uint8Array(e.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{i(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(i,t)}}async _decode_FilePath(e,t){throw F._onLog&&F._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,i,r,n,s,o){if(e.length>0)for(let a of e){let e=a.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*s,e.x2*=.01*s,e.x3*=.01*s,e.x4*=.01*s,e.y1*=.01*o,e.y2*=.01*o,e.y3*=.01*o,e.y4*=.01*o);let h=s/r,l=o/n;e.x1=e.x1/h+t,e.x2=e.x2/h+t,e.x3=e.x3/h+t,e.x4=e.x4/h+t,e.y1=e.y1/l+i,e.y2=e.y2/l+i,e.y3=e.y3/l+i,e.y4=e.y4/l+i,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/n,e.y2*=100/n,e.y3*=100/n,e.y4*=100/n),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(e,t){let i,r=m.DBR_UNKNOWN;return"number"==typeof e?(r=e,i=new Error(t)):i=new Error(e),i.code=r,i}_handleRetJsonString(e){let t=m;if(e.textResults){for(let t=0;t{let i=t.indexOf(":");e[t.substring(0,i)]=t.substring(i+1)})),i.exception=e}}return e.decodeRecords?this.decodeRecords=e.decodeRecords:this.decodeRecords={},this._lastErrorCode=e.exception,this._lastErrorString=e.description,e.exception&&!F._setWarnnedEx.has(e.description)&&(F._setWarnnedEx.add(e.description),console.warn(e.description)),e.textResults}if(e.exception==t.DBR_SUCCESS)return e.data;throw F.BarcodeReaderException(e.exception,e.description)}async setModeArgument(e,t,i,r){return await new Promise(((n,s)=>{let o=F._nextTaskID++;F._taskCallbackMap.set(o,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return s(e)}return n()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),F._dbrWorker.postMessage({type:"setModeArgument",id:o,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i,argumentValue:r}})}))}async getModeArgument(e,t,i){return await new Promise(((r,n)=>{let s=F._nextTaskID++;F._taskCallbackMap.set(s,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return n(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),F._dbrWorker.postMessage({type:"getModeArgument",id:s,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let e=await this.getIntermediateResults(),t=[];for(let i of e)if(i.dataType==v.IMRDT_IMAGE)for(let e of i.results){const i=e.bytes;let r;switch(F._onLog&&F._onLog(" "+i.length+" "+i.byteLength+" "+e.width+" "+e.height+" "+e.stride+" "+e.format),e.format){case p.IPF_ABGR_8888:r=new Uint8ClampedArray(i);break;case p.IPF_RGB_888:{const e=i.length/3;r=new Uint8ClampedArray(4*e);for(let t=0;t=n)break;r[o]=r[o+1]=r[o+2]=(128&t)/128*255,r[o+3]=255,t<<=1}}break}default:console.warn("unknow intermediate image",e)}if(!r)continue;let n=new ImageData(r,e.width,e.height),s=document.createElement("canvas");s.width=e.width,s.height=e.height,s.getContext("2d").putImageData(n,0,0),t.push(s)}return t}async getScanSettings(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success){let t=i.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(i.message);return e.stack+="\n"+i.stack,t(e)}})),F._dbrWorker.postMessage({type:"getScanSettings",id:i,instanceID:this._instanceID})}))}async updateScanSettings(e){if(!e)return;const t=JSON.parse(JSON.stringify(e));if(t.autoZoom||t.autoFocus||t.autoSuggestTip){if(!F._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const e=await this.getRuntimeSettings();e.intermediateResultTypes|=S.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(e)}return t.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(t.intervalTime,0),delete t.intervalTime),t.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=t.whenToPlaySoundforSuccessfulRead,delete t.whenToPlaySoundforSuccessfulRead),t.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=t.soundOnSuccessfullRead,delete t.soundOnSuccessfullRead),t.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=t.whenToVibrateforSuccessfulRead,delete t.whenToVibrateforSuccessfulRead),t.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=t.vibrateDuration,delete t.vibrateDuration),t.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=t.captureAndDecodeInParallel,delete t.captureAndDecodeInParallel),t.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=t.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=t.autoZoom,delete t.autoZoom),t.hasOwnProperty("autoFocus")&&(this.autoFocus=t.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete t.autoFocus),t.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=t.autoSuggestTip,delete t.autoFocus),await new Promise(((e,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(t=>{if(t.success)return e();{let e=new Error(t.message);return e.stack+="\n"+t.stack,i(e)}})),F._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:t}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let i of e)t.push(this._cloneDecodeResults(i));return t}{let t=e,i=JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)));return i}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return F._onLog&&F._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));F._onLog&&F._onLog("======= once read ======="),F._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!F.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return F._onLog&&F._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let i=[];if(e){i=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(i&&i.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:h}=e;t=i.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),F.recalculateResultLocation(t,r,n,a,h,s,o)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(i=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return i})().then((e=>{if(F._onLog&&F._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const i=()=>{let i=0;if(t&&t.length){let r=Math.min(...e),n=Math.max(...t);r&&n&&(i=r-n)}else i=0;return i>0?i:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=i()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),F._onLog&&F._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(F._onLog&&F._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};t(e)}else F._onLog&&F._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const i=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let n=0;n{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(F._onLog&&F._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=F._nextTaskID++;F._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),F._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}F._jsVersion="9.6.31",F._jsEditVersion="20230908",F._version=`loading...(JS ${F._jsVersion}.${F._jsEditVersion})`,F._license=f,F._sessionPassword=g,F.browserInfo=o,F._workerName=`dbr-${F._jsVersion}.browser.worker.js`,F._engineResourcePath=u,F._licenseServer=[],F._deviceFriendlyName="",F._isShowRelDecodeTimeInResults=!1,F._bWasmDebug=!1,F._bNeverShowDialog=!1,F.__bUseFullFeature=!0,F._nextTaskID=0,F._taskCallbackMap=new Map,F._pLoad=new w,F._lastErrorCode=0,F._lastErrorString="",F._setWarnnedEx=new Set,F._defaultUIElementURL="@engineResourcePath/dbr.ui.html";var P={653:(e,t,i)=>{var r,n,s,o,a,h,l,c,u,d,f,g,_,p,m,v,y,S,b,w,C,x=x||{version:"5.2.1"};if(t.fabric=x,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?x.document=document:x.document=document.implementation.createHTMLDocument(""),x.window=window;else{var T=new(i(192).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;x.document=T.document,x.jsdomImplForWrapper=i(898).implForWrapper,x.nodeCanvas=i(245).Canvas,x.window=T,DOMParser=x.window.DOMParser}function I(e,t){var i=e.canvas,r=t.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function E(e,t){var i=t.targetCanvas.getContext("2d"),r=t.destinationWidth,n=t.destinationHeight,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);e.readPixels(0,0,r,n,e.RGBA,e.UNSIGNED_BYTE,o);var h=new ImageData(a,r,n);i.putImageData(h,0,0)}x.isTouchSupported="ontouchstart"in x.window||"ontouchstart"in x.document||x.window&&x.window.navigator&&x.window.navigator.maxTouchPoints>0,x.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,x.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],x.DPI=96,x.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",x.commaWsp="(?:\\s+,?\\s*|,\\s*)",x.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,x.reNonWord=/[ \n\.,;!\?\-]/,x.fontPaths={},x.iMatrix=[1,0,0,1,0,0],x.svgNS="http://www.w3.org/2000/svg",x.perfLimitSizeTotal=2097152,x.maxCacheSideLimit=4096,x.minCacheSideLimit=256,x.charWidthsCache={},x.textureSize=2048,x.disableStyleCopyPaste=!1,x.enableGLFiltering=!0,x.devicePixelRatio=x.window.devicePixelRatio||x.window.webkitDevicePixelRatio||x.window.mozDevicePixelRatio||1,x.browserShadowBlurConstant=1,x.arcToSegmentsCache={},x.boundsOfCurveCache={},x.cachesBoundsOfCurve=!0,x.forceGLPutImageData=!1,x.initFilterBackend=function(){return x.enableGLFiltering&&x.isWebglSupported&&x.isWebglSupported(x.textureSize)?(console.log("max texture size: "+x.maxTextureSize),new x.WebglFilterBackend({tileSize:x.textureSize})):x.Canvas2dFilterBackend?new x.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=x),function(){function e(e,t){if(this.__eventListeners[e]){var i=this.__eventListeners[e];t?i[i.indexOf(t)]=!1:x.util.array.fill(i,!1)}}function t(e,t){var i=function(){t.apply(this,arguments),this.off(e,i)}.bind(this);this.on(e,i)}x.Observable={fire:function(e,t){if(!this.__eventListeners)return this;var i=this.__eventListeners[e];if(!i)return this;for(var r=0,n=i.length;r-1||!!t&&this._objects.some((function(t){return"function"==typeof t.contains&&t.contains(e,!0)}))},complexity:function(){return this._objects.reduce((function(e,t){return e+(t.complexity?t.complexity():0)}),0)}},x.CommonMethods={_setOptions:function(e){for(var t in e)this.set(t,e[t])},_initGradient:function(e,t){!e||!e.colorStops||e instanceof x.Gradient||this.set(t,new x.Gradient(e))},_initPattern:function(e,t,i){!e||!e.source||e instanceof x.Pattern?i&&i():this.set(t,new x.Pattern(e,i))},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return"object"==typeof e?this._setObject(e):this._set(e,t),this},_set:function(e,t){this[e]=t},toggle:function(e){var t=this.get(e);return"boolean"==typeof t&&this.set(e,!t),this},get:function(e){return this[e]}},r=t,n=Math.sqrt,s=Math.atan2,o=Math.pow,a=Math.PI/180,h=Math.PI/2,x.util={cos:function(e){if(0===e)return 1;switch(e<0&&(e=-e),e/h){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(0===e)return 0;var t=1;switch(e<0&&(t=-1),e/h){case 1:return t;case 2:return 0;case 3:return-t}return Math.sin(e)},removeFromArray:function(e,t){var i=e.indexOf(t);return-1!==i&&e.splice(i,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*a},radiansToDegrees:function(e){return e/a},rotatePoint:function(e,t,i){var r=new x.Point(e.x-t.x,e.y-t.y),n=x.util.rotateVector(r,i);return new x.Point(n.x,n.y).addEquals(t)},rotateVector:function(e,t){var i=x.util.sin(t),r=x.util.cos(t);return{x:e.x*r-e.y*i,y:e.x*i+e.y*r}},createVector:function(e,t){return new x.Point(t.x-e.x,t.y-e.y)},calcAngleBetweenVectors:function(e,t){return Math.acos((e.x*t.x+e.y*t.y)/(Math.hypot(e.x,e.y)*Math.hypot(t.x,t.y)))},getHatVector:function(e){return new x.Point(e.x,e.y).multiply(1/Math.hypot(e.x,e.y))},getBisector:function(e,t,i){var r=x.util.createVector(e,t),n=x.util.createVector(e,i),s=x.util.calcAngleBetweenVectors(r,n),o=s*(0===x.util.calcAngleBetweenVectors(x.util.rotateVector(r,s),n)?1:-1)/2;return{vector:x.util.getHatVector(x.util.rotateVector(r,o)),angle:s}},projectStrokeOnPoints:function(e,t,i){var r=[],n=t.strokeWidth/2,s=t.strokeUniform?new x.Point(1/t.scaleX,1/t.scaleY):new x.Point(1,1),o=function(e){var t=n/Math.hypot(e.x,e.y);return new x.Point(e.x*t*s.x,e.y*t*s.y)};return e.length<=1||e.forEach((function(a,h){var l,c,u=new x.Point(a.x,a.y);0===h?(c=e[h+1],l=i?o(x.util.createVector(c,u)).addEquals(u):e[e.length-1]):h===e.length-1?(l=e[h-1],c=i?o(x.util.createVector(l,u)).addEquals(u):e[0]):(l=e[h-1],c=e[h+1]);var d,f,g=x.util.getBisector(u,l,c),_=g.vector,p=g.angle;if("miter"===t.strokeLineJoin&&(d=-n/Math.sin(p/2),f=new x.Point(_.x*d*s.x,_.y*d*s.y),Math.hypot(f.x,f.y)/n<=t.strokeMiterLimit))return r.push(u.add(f)),void r.push(u.subtract(f));d=-n*Math.SQRT2,f=new x.Point(_.x*d*s.x,_.y*d*s.y),r.push(u.add(f)),r.push(u.subtract(f))})),r},transformPoint:function(e,t,i){return i?new x.Point(t[0]*e.x+t[2]*e.y,t[1]*e.x+t[3]*e.y):new x.Point(t[0]*e.x+t[2]*e.y+t[4],t[1]*e.x+t[3]*e.y+t[5])},makeBoundingBoxFromPoints:function(e,t){if(t)for(var i=0;i0&&(t>r?t-=r:t=0,i>r?i-=r:i=0);var n,s=!0,o=e.getImageData(t,i,2*r||1,2*r||1),a=o.data.length;for(n=3;n=n?s-n:2*Math.PI-(n-s)}function s(e,t,i){for(var s=i[1],o=i[2],a=i[3],h=i[4],l=i[5],c=function(e,t,i,s,o,a,h){var l=Math.PI,c=h*l/180,u=x.util.sin(c),d=x.util.cos(c),f=0,g=0,_=-d*e*.5-u*t*.5,p=-d*t*.5+u*e*.5,m=(i=Math.abs(i))*i,v=(s=Math.abs(s))*s,y=p*p,S=_*_,b=m*v-m*y-v*S,w=0;if(b<0){var C=Math.sqrt(1-b/(m*v));i*=C,s*=C}else w=(o===a?-1:1)*Math.sqrt(b/(m*y+v*S));var T=w*i*p/s,I=-w*s*_/i,E=d*T-u*I+.5*e,O=u*T+d*I+.5*t,A=n(1,0,(_-T)/i,(p-I)/s),R=n((_-T)/i,(p-I)/s,(-_-T)/i,(-p-I)/s);0===a&&R>0?R-=2*l:1===a&&R<0&&(R+=2*l);for(var D=Math.ceil(Math.abs(R/l*2)),M=[],L=R/D,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),P=A+L,k=0;kw)for(var T=1,I=_.length;T2;for(t=t||0,l&&(a=e[2].xe[i-2].x?1:n.x===e[i-2].x?0:-1,h=n.y>e[i-2].y?1:n.y===e[i-2].y?0:-1),r.push(["L",n.x+a*t,n.y+h*t]),r},x.util.getPathSegmentsInfo=d,x.util.getBoundsOfCurve=function(t,i,r,n,s,o,a,h){var l;if(x.cachesBoundsOfCurve&&(l=e.call(arguments),x.boundsOfCurveCache[l]))return x.boundsOfCurveCache[l];var c,u,d,f,g,_,p,m,v=Math.sqrt,y=Math.min,S=Math.max,b=Math.abs,w=[],C=[[],[]];u=6*t-12*r+6*s,c=-3*t+9*r-9*s+3*a,d=3*r-3*t;for(var T=0;T<2;++T)if(T>0&&(u=6*i-12*n+6*o,c=-3*i+9*n-9*o+3*h,d=3*n-3*i),b(c)<1e-12){if(b(u)<1e-12)continue;0<(f=-d/u)&&f<1&&w.push(f)}else(p=u*u-4*d*c)<0||(0<(g=(-u+(m=v(p)))/(2*c))&&g<1&&w.push(g),0<(_=(-u-m)/(2*c))&&_<1&&w.push(_));for(var I,E,O,A=w.length,R=A;A--;)I=(O=1-(f=w[A]))*O*O*t+3*O*O*f*r+3*O*f*f*s+f*f*f*a,C[0][A]=I,E=O*O*O*i+3*O*O*f*n+3*O*f*f*o+f*f*f*h,C[1][A]=E;C[0][R]=t,C[1][R]=i,C[0][R+1]=a,C[1][R+1]=h;var D=[{x:y.apply(null,C[0]),y:y.apply(null,C[1])},{x:S.apply(null,C[0]),y:S.apply(null,C[1])}];return x.cachesBoundsOfCurve&&(x.boundsOfCurveCache[l]=D),D},x.util.getPointOnPath=function(e,t,i){i||(i=d(e));for(var r=0;t-i[r].length>0&&r1e-4;)i=h(s),n=s,(r=o(l.x,l.y,i.x,i.y))+a>t?(s-=c,c/=2):(l=i,s+=c,a+=r);return i.angle=u(n),i}(s,t)}},x.util.transformPath=function(e,t,i){return i&&(t=x.util.multiplyTransformMatrices(t,[1,0,0,1,-i.x,-i.y])),e.map((function(e){for(var i=e.slice(0),r={},n=1;n=t}))}}}(),function(){function e(t,i,r){if(r)if(!x.isLikelyNode&&i instanceof Element)t=i;else if(i instanceof Array){t=[];for(var n=0,s=i.length;n57343)return e.charAt(t);if(55296<=i&&i<=56319){if(e.length<=t+1)throw"High surrogate without following low surrogate";var r=e.charCodeAt(t+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return e.charAt(t)+e.charAt(t+1)}if(0===t)throw"Low surrogate without preceding high surrogate";var n=e.charCodeAt(t-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}x.util.string={camelize:function(e){return e.replace(/-+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))},capitalize:function(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1).toLowerCase())},escapeXml:function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(t){var i,r=0,n=[];for(r=0;r-1?e.prototype[n]=function(e){return function(){var i=this.constructor.superclass;this.constructor.superclass=r;var n=t[e].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==e)return n}}(n):e.prototype[n]=t[n],i&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};function n(){}function s(t){for(var i=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[t];if(r[t]!==n){i=n;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,e.call(arguments,1)):i.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}x.util.createClass=function(){var i=null,o=e.call(arguments,0);function a(){this.initialize.apply(this,arguments)}"function"==typeof o[0]&&(i=o.shift()),a.superclass=i,a.subclasses=[],i&&(n.prototype=i.prototype,a.prototype=new n,i.subclasses.push(a));for(var h=0,l=o.length;h-1||"touch"===e.pointerType},d="string"==typeof(u=x.document.createElement("div")).style.opacity,f="string"==typeof u.style.filter,g=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,_=function(e){return e},d?_=function(e,t){return e.style.opacity=t,e}:f&&(_=function(e,t){var i=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(i.zoom=1),g.test(i.filter)?(t=t>=.9999?"":"alpha(opacity="+100*t+")",i.filter=i.filter.replace(g,t)):i.filter+=" alpha(opacity="+100*t+")",e}),x.util.setStyle=function(e,t){var i=e.style;if(!i)return e;if("string"==typeof t)return e.style.cssText+=";"+t,t.indexOf("opacity")>-1?_(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)"opacity"===r?_(e,t[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=t[r];return e},function(){var e,t,i,r,n=Array.prototype.slice,s=function(e){return n.call(e,0)};try{e=s(x.document.childNodes)instanceof Array}catch(e){}function o(e,t){var i=x.document.createElement(e);for(var r in t)"class"===r?i.className=t[r]:"for"===r?i.htmlFor=t[r]:i.setAttribute(r,t[r]);return i}function a(e){for(var t=0,i=0,r=x.document.documentElement,n=x.document.body||{scrollLeft:0,scrollTop:0};e&&(e.parentNode||e.host)&&((e=e.parentNode||e.host)===x.document?(t=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(t+=e.scrollLeft||0,i+=e.scrollTop||0),1!==e.nodeType||"fixed"!==e.style.position););return{left:t,top:i}}e||(s=function(e){for(var t=new Array(e.length),i=e.length;i--;)t[i]=e[i];return t}),t=x.document.defaultView&&x.document.defaultView.getComputedStyle?function(e,t){var i=x.document.defaultView.getComputedStyle(e,null);return i?i[t]:void 0}:function(e,t){var i=e.style[t];return!i&&e.currentStyle&&(i=e.currentStyle[t]),i},i=x.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"",x.util.makeElementUnselectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=x.util.falseFunction),r?e.style[r]="none":"string"==typeof e.unselectable&&(e.unselectable="on"),e},x.util.makeElementSelectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=null),r?e.style[r]="":"string"==typeof e.unselectable&&(e.unselectable=""),e},x.util.setImageSmoothing=function(e,t){e.imageSmoothingEnabled=e.imageSmoothingEnabled||e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled||e.oImageSmoothingEnabled,e.imageSmoothingEnabled=t},x.util.getById=function(e){return"string"==typeof e?x.document.getElementById(e):e},x.util.toArray=s,x.util.addClass=function(e,t){e&&-1===(" "+e.className+" ").indexOf(" "+t+" ")&&(e.className+=(e.className?" ":"")+t)},x.util.makeElement=o,x.util.wrapElement=function(e,t,i){return"string"==typeof t&&(t=o(t,i)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t},x.util.getScrollLeftTop=a,x.util.getElementOffset=function(e){var i,r,n=e&&e.ownerDocument,s={left:0,top:0},o={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var l in h)o[h[l]]+=parseInt(t(e,l),10)||0;return i=n.documentElement,void 0!==e.getBoundingClientRect&&(s=e.getBoundingClientRect()),r=a(e),{left:s.left+r.left-(i.clientLeft||0)+o.left,top:s.top+r.top-(i.clientTop||0)+o.top}},x.util.getNodeCanvas=function(e){var t=x.jsdomImplForWrapper(e);return t._canvas||t._image},x.util.cleanUpJsdomNode=function(e){if(x.isLikelyNode){var t=x.jsdomImplForWrapper(e);t&&(t._image=null,t._canvas=null,t._currentSrc=null,t._attributes=null,t._classList=null)}}}(),function(){function e(){}x.util.request=function(t,i){i||(i={});var r=i.method?i.method.toUpperCase():"GET",n=i.onComplete||function(){},s=new x.window.XMLHttpRequest,o=i.body||i.parameters;return s.onreadystatechange=function(){4===s.readyState&&(n(s),s.onreadystatechange=e)},"GET"===r&&(o=null,"string"==typeof i.parameters&&(t=function(e,t){return e+(/\?/.test(e)?"&":"?")+t}(t,i.parameters))),s.open(r,t,!0),"POST"!==r&&"PUT"!==r||s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(o),s}}(),x.log=console.log,x.warn=console.warn,function(){var e=x.util.object.extend,t=x.util.object.clone,i=[];function r(){return!1}function n(e,t,i,r){return-i*Math.cos(e/r*(Math.PI/2))+i+t}x.util.object.extend(i,{cancelAll:function(){var e=this.splice(0);return e.forEach((function(e){e.cancel()})),e},cancelByCanvas:function(e){if(!e)return[];var t=this.filter((function(t){return"object"==typeof t.target&&t.target.canvas===e}));return t.forEach((function(e){e.cancel()})),t},cancelByTarget:function(e){var t=this.findAnimationsByTarget(e);return t.forEach((function(e){e.cancel()})),t},findAnimationIndex:function(e){return this.indexOf(this.findAnimation(e))},findAnimation:function(e){return this.find((function(t){return t.cancel===e}))},findAnimationsByTarget:function(e){return e?this.filter((function(t){return t.target===e})):[]}});var s=x.window.requestAnimationFrame||x.window.webkitRequestAnimationFrame||x.window.mozRequestAnimationFrame||x.window.oRequestAnimationFrame||x.window.msRequestAnimationFrame||function(e){return x.window.setTimeout(e,1e3/60)},o=x.window.cancelAnimationFrame||x.window.clearTimeout;function a(){return s.apply(x.window,arguments)}x.util.animate=function(i){i||(i={});var s,o=!1,h=function(){var e=x.runningAnimations.indexOf(s);return e>-1&&x.runningAnimations.splice(e,1)[0]};return s=e(t(i),{cancel:function(){return o=!0,h()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),x.runningAnimations.push(s),a((function(e){var t,l=e||+new Date,c=i.duration||500,u=l+c,d=i.onChange||r,f=i.abort||r,g=i.onComplete||r,_=i.easing||n,p="startValue"in i&&i.startValue.length>0,m="startValue"in i?i.startValue:0,v="endValue"in i?i.endValue:100,y=i.byValue||(p?m.map((function(e,t){return v[t]-m[t]})):v-m);i.onStart&&i.onStart(),function e(i){var r=(t=i||+new Date)>u?c:t-l,n=r/c,S=p?m.map((function(e,t){return _(r,m[t],y[t],c)})):_(r,m,y,c),b=p?Math.abs((S[0]-m[0])/y[0]):Math.abs((S-m)/y);if(s.currentValue=p?S.slice():S,s.completionRate=b,s.durationRate=n,!o){if(!f(S,b,n))return t>u?(s.currentValue=p?v.slice():v,s.completionRate=1,s.durationRate=1,d(p?v.slice():v,1,1),g(v,1,1),void h()):(d(S,b,n),void a(e));h()}}(l)})),s.cancel},x.util.requestAnimFrame=a,x.util.cancelAnimFrame=function(){return o.apply(x.window,arguments)},x.runningAnimations=i}(),function(){function e(e,t,i){var r="rgba("+parseInt(e[0]+i*(t[0]-e[0]),10)+","+parseInt(e[1]+i*(t[1]-e[1]),10)+","+parseInt(e[2]+i*(t[2]-e[2]),10);return(r+=","+(e&&t?parseFloat(e[3]+i*(t[3]-e[3])):1))+")"}x.util.animateColor=function(t,i,r,n){var s=new x.Color(t).getSource(),o=new x.Color(i).getSource(),a=n.onComplete,h=n.onChange;return n=n||{},x.util.animate(x.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(t,i,r,s){return e(i,r,n.colorEasing?n.colorEasing(t,s):1-Math.cos(t/s*(Math.PI/2)))},onComplete:function(t,i,r){if(a)return a(e(o,o,0),i,r)},onChange:function(t,i,r){if(h){if(Array.isArray(t))return h(e(t,t,0),i,r);h(t,i,r)}}}))}}(),function(){function e(e,t,i,r){return e-1&&c>-1&&c-1)&&(i="stroke")}else{if("href"===e||"xlink:href"===e||"font"===e)return i;if("imageSmoothing"===e)return"optimizeQuality"===i;a=h?i.map(s):s(i,n)}}else i="";return!h&&isNaN(a)?i:a}function f(e){return new RegExp("^("+e.join("|")+")\\b","i")}function g(e,t){var i,r,n,s,o=[];for(n=0,s=t.length;n1;)h.shift(),l=t.util.multiplyTransformMatrices(l,h[0]);return l}}();var v=new RegExp("^\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*$");function y(e){if(!t.svgViewBoxElementsRegEx.test(e.nodeName))return{};var i,r,n,o,a,h,l=e.getAttribute("viewBox"),c=1,u=1,d=e.getAttribute("width"),f=e.getAttribute("height"),g=e.getAttribute("x")||0,_=e.getAttribute("y")||0,p=e.getAttribute("preserveAspectRatio")||"",m=!l||!(l=l.match(v)),y=!d||!f||"100%"===d||"100%"===f,S=m&&y,b={},w="",C=0,x=0;if(b.width=0,b.height=0,b.toBeParsed=S,m&&(g||_)&&e.parentNode&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") ",a=(e.getAttribute("transform")||"")+w,e.setAttribute("transform",a),e.removeAttribute("x"),e.removeAttribute("y")),S)return b;if(m)return b.width=s(d),b.height=s(f),b;if(i=-parseFloat(l[1]),r=-parseFloat(l[2]),n=parseFloat(l[3]),o=parseFloat(l[4]),b.minX=i,b.minY=r,b.viewBoxWidth=n,b.viewBoxHeight=o,y?(b.width=n,b.height=o):(b.width=s(d),b.height=s(f),c=b.width/n,u=b.height/o),"none"!==(p=t.util.parsePreserveAspectRatioAttribute(p)).alignX&&("meet"===p.meetOrSlice&&(u=c=c>u?u:c),"slice"===p.meetOrSlice&&(u=c=c>u?c:u),C=b.width-n*c,x=b.height-o*c,"Mid"===p.alignX&&(C/=2),"Mid"===p.alignY&&(x/=2),"Min"===p.alignX&&(C=0),"Min"===p.alignY&&(x=0)),1===c&&1===u&&0===i&&0===r&&0===g&&0===_)return b;if((g||_)&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") "),a=w+" matrix("+c+" 0 0 "+u+" "+(i*c+C)+" "+(r*u+x)+") ","svg"===e.nodeName){for(h=e.ownerDocument.createElementNS(t.svgNS,"g");e.firstChild;)h.appendChild(e.firstChild);e.appendChild(h)}else(h=e).removeAttribute("x"),h.removeAttribute("y"),a=h.getAttribute("transform")+a;return h.setAttribute("transform",a),b}function S(e,t){var i="xlink:href",r=m(e,t.getAttribute(i).slice(1));if(r&&r.getAttribute(i)&&S(e,r),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach((function(e){r&&!t.hasAttribute(e)&&r.hasAttribute(e)&&t.setAttribute(e,r.getAttribute(e))})),!t.children.length)for(var n=r.cloneNode(!0);n.firstChild;)t.appendChild(n.firstChild);t.removeAttribute(i)}t.parseSVGDocument=function(e,i,n,s){if(e){!function(e){for(var i=g(e,["use","svg:use"]),r=0;i.length&&re.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return void 0===t&&(t=.5),t=Math.max(Math.min(1,t),0),new i(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,i=this.y-e.y;return Math.sqrt(t*t+i*i)},midPointFrom:function(e){return this.lerp(e)},min:function(e){return new i(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new i(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){return this.x=e,this.y=t,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setFromPoint:function(e){return this.x=e.x,this.y=e.y,this},swap:function(e){var t=this.x,i=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=i},clone:function(){return new i(this.x,this.y)}})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){this.status=e,this.points=[]}t.Intersection?t.warn("fabric.Intersection is already defined"):(t.Intersection=i,t.Intersection.prototype={constructor:i,appendPoint:function(e){return this.points.push(e),this},appendPoints:function(e){return this.points=this.points.concat(e),this}},t.Intersection.intersectLineLine=function(e,r,n,s){var o,a=(s.x-n.x)*(e.y-n.y)-(s.y-n.y)*(e.x-n.x),h=(r.x-e.x)*(e.y-n.y)-(r.y-e.y)*(e.x-n.x),l=(s.y-n.y)*(r.x-e.x)-(s.x-n.x)*(r.y-e.y);if(0!==l){var c=a/l,u=h/l;0<=c&&c<=1&&0<=u&&u<=1?(o=new i("Intersection")).appendPoint(new t.Point(e.x+c*(r.x-e.x),e.y+c*(r.y-e.y))):o=new i}else o=new i(0===a||0===h?"Coincident":"Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var n,s,o,a,h=new i,l=r.length;for(a=0;a0&&(h.status="Intersection"),h},t.Intersection.intersectPolygonPolygon=function(e,t){var r,n=new i,s=e.length;for(r=0;r0&&(n.status="Intersection"),n},t.Intersection.intersectPolygonRectangle=function(e,r,n){var s=r.min(n),o=r.max(n),a=new t.Point(o.x,s.y),h=new t.Point(s.x,o.y),l=i.intersectLinePolygon(s,a,e),c=i.intersectLinePolygon(a,o,e),u=i.intersectLinePolygon(o,h,e),d=i.intersectLinePolygon(h,s,e),f=new i;return f.appendPoints(l.points),f.appendPoints(c.points),f.appendPoints(u.points),f.appendPoints(d.points),f.points.length>0&&(f.status="Intersection"),f})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}t.Color?t.warn("fabric.Color is already defined."):(t.Color=i,t.Color.prototype={_tryParsingColor:function(e){var t;e in i.colorNameMap&&(e=i.colorNameMap[e]),"transparent"===e&&(t=[255,255,255,0]),t||(t=i.sourceFromHex(e)),t||(t=i.sourceFromRgb(e)),t||(t=i.sourceFromHsl(e)),t||(t=[0,0,0,1]),t&&this.setSource(t)},_rgbToHsl:function(e,i,r){e/=255,i/=255,r/=255;var n,s,o,a=t.util.array.max([e,i,r]),h=t.util.array.min([e,i,r]);if(o=(a+h)/2,a===h)n=s=0;else{var l=a-h;switch(s=o>.5?l/(2-a-h):l/(a+h),a){case e:n=(i-r)/l+(i0)-(e<0)||+e};function f(e,t){var i=e.angle+u(Math.atan2(t.y,t.x))+360;return Math.round(i%360/45)}function g(e,i){var r=i.transform.target,n=r.canvas,s=t.util.object.clone(i);s.target=r,n&&n.fire("object:"+e,s),r.fire(e,i)}function _(e,t){var i=t.canvas,r=e[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function p(e){return e.originX===l&&e.originY===l}function m(e,t,i){var r=e.lockScalingX,n=e.lockScalingY;return!((!r||!n)&&(t||!r&&!n||!i)&&(!r||"x"!==t)&&(!n||"y"!==t))}function v(e,t,i,r){return{e,transform:t,pointer:{x:i,y:r}}}function y(e){return function(t,i,r,n){var s=i.target,o=s.getCenterPoint(),a=s.translateToOriginPoint(o,i.originX,i.originY),h=e(t,i,r,n);return s.setPositionByOrigin(a,i.originX,i.originY),h}}function S(e,t){return function(i,r,n,s){var o=t(i,r,n,s);return o&&g(e,v(i,r,n,s)),o}}function b(e,i,r,n,s){var o=e.target,a=o.controls[e.corner],h=o.canvas.getZoom(),l=o.padding/h,c=o.toLocalPoint(new t.Point(n,s),i,r);return c.x>=l&&(c.x-=l),c.x<=-l&&(c.x+=l),c.y>=l&&(c.y-=l),c.y<=l&&(c.y+=l),c.x-=a.offsetX,c.y-=a.offsetY,c}function w(e){return e.flipX!==e.flipY}function C(e,t,i,r,n){if(0!==e[t]){var s=n/e._getTransformedDimensions()[r]*e[i];e.set(i,s)}}function x(e,t,i,r){var n,l=t.target,c=l._getTransformedDimensions(0,l.skewY),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.x)-c.x,g=l.skewX;f<2?n=0:(n=u(Math.atan2(f/l.scaleX,c.y/l.scaleY)),t.originX===s&&t.originY===h&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(l)&&(n=-n));var _=g!==n;if(_){var p=l._getTransformedDimensions().y;l.set("skewX",n),C(l,"skewY","scaleY","y",p)}return _}function T(e,t,i,r){var n,l=t.target,c=l._getTransformedDimensions(l.skewX,0),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.y)-c.y,g=l.skewY;f<2?n=0:(n=u(Math.atan2(f/l.scaleY,c.x/l.scaleX)),t.originX===s&&t.originY===h&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(l)&&(n=-n));var _=g!==n;if(_){var p=l._getTransformedDimensions().x;l.set("skewY",n),C(l,"skewX","scaleX","x",p)}return _}function I(e,t,i,r,n){n=n||{};var s,o,a,h,l,u,f=t.target,g=f.lockScalingX,v=f.lockScalingY,y=n.by,S=_(e,f),w=m(f,y,S),C=t.gestureScale;if(w)return!1;if(C)o=t.scaleX*C,a=t.scaleY*C;else{if(s=b(t,t.originX,t.originY,i,r),l="y"!==y?d(s.x):1,u="x"!==y?d(s.y):1,t.signX||(t.signX=l),t.signY||(t.signY=u),f.lockScalingFlip&&(t.signX!==l||t.signY!==u))return!1;if(h=f._getTransformedDimensions(),S&&!y){var x=Math.abs(s.x)+Math.abs(s.y),T=t.original,I=x/(Math.abs(h.x*T.scaleX/f.scaleX)+Math.abs(h.y*T.scaleY/f.scaleY));o=T.scaleX*I,a=T.scaleY*I}else o=Math.abs(s.x*f.scaleX/h.x),a=Math.abs(s.y*f.scaleY/h.y);p(t)&&(o*=2,a*=2),t.signX!==l&&"y"!==y&&(t.originX=c[t.originX],o*=-1,t.signX=l),t.signY!==u&&"x"!==y&&(t.originY=c[t.originY],a*=-1,t.signY=u)}var E=f.scaleX,O=f.scaleY;return y?("x"===y&&f.set("scaleX",o),"y"===y&&f.set("scaleY",a)):(!g&&f.set("scaleX",o),!v&&f.set("scaleY",a)),E!==f.scaleX||O!==f.scaleY}n.scaleCursorStyleHandler=function(e,t,r){var n=_(e,r),s="";if(0!==t.x&&0===t.y?s="x":0===t.x&&0!==t.y&&(s="y"),m(r,s,n))return"not-allowed";var o=f(r,t);return i[o]+"-resize"},n.skewCursorStyleHandler=function(e,t,i){var n="not-allowed";if(0!==t.x&&i.lockSkewingY)return n;if(0!==t.y&&i.lockSkewingX)return n;var s=f(i,t)%4;return r[s]+"-resize"},n.scaleSkewCursorStyleHandler=function(e,t,i){return e[i.canvas.altActionKey]?n.skewCursorStyleHandler(e,t,i):n.scaleCursorStyleHandler(e,t,i)},n.rotationWithSnapping=S("rotating",y((function(e,t,i,r){var n=t,s=n.target,o=s.translateToOriginPoint(s.getCenterPoint(),n.originX,n.originY);if(s.lockRotation)return!1;var a,h=Math.atan2(n.ey-o.y,n.ex-o.x),l=Math.atan2(r-o.y,i-o.x),c=u(l-h+n.theta);if(s.snapAngle>0){var d=s.snapAngle,f=s.snapThreshold||d,g=Math.ceil(c/d)*d,_=Math.floor(c/d)*d;Math.abs(c-_)0?s:a:(c>0&&(n=u===o?s:a),c<0&&(n=u===o?a:s),w(h)&&(n=n===s?a:s)),t.originX=n,S("skewing",y(x))(e,t,i,r))},n.skewHandlerY=function(e,t,i,r){var n,a=t.target,c=a.skewY,u=t.originX;return!a.lockSkewingY&&(0===c?n=b(t,l,l,i,r).y>0?o:h:(c>0&&(n=u===s?o:h),c<0&&(n=u===s?h:o),w(a)&&(n=n===o?h:o)),t.originY=n,S("skewing",y(T))(e,t,i,r))},n.dragHandler=function(e,t,i,r){var n=t.target,s=i-t.offsetX,o=r-t.offsetY,a=!n.get("lockMovementX")&&n.left!==s,h=!n.get("lockMovementY")&&n.top!==o;return a&&n.set("left",s),h&&n.set("top",o),(a||h)&&g("moving",v(e,t,i,r)),a||h},n.scaleOrSkewActionName=function(e,t,i){var r=e[i.canvas.altActionKey];return 0===t.x?r?"skewX":"scaleY":0===t.y?r?"skewY":"scaleX":void 0},n.rotationStyleHandler=function(e,t,i){return i.lockRotation?"not-allowed":t.cursorStyle},n.fireEvent=g,n.wrapWithFixedAnchor=y,n.wrapWithFireEvent=S,n.getLocalPoint=b,t.controlsUtils=n}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians,r=t.controlsUtils;r.renderCircleControl=function(e,t,i,r,n){r=r||{};var s,o=this.sizeX||r.cornerSize||n.cornerSize,a=this.sizeY||r.cornerSize||n.cornerSize,h=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,l=h?"stroke":"fill",c=!h&&(r.cornerStrokeColor||n.cornerStrokeColor),u=t,d=i;e.save(),e.fillStyle=r.cornerColor||n.cornerColor,e.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,o>a?(s=o,e.scale(1,a/o),d=i*o/a):a>o?(s=a,e.scale(o/a,1),u=t*a/o):s=o,e.lineWidth=1,e.beginPath(),e.arc(u,d,s/2,0,2*Math.PI,!1),e[l](),c&&e.stroke(),e.restore()},r.renderSquareControl=function(e,t,r,n,s){n=n||{};var o=this.sizeX||n.cornerSize||s.cornerSize,a=this.sizeY||n.cornerSize||s.cornerSize,h=void 0!==n.transparentCorners?n.transparentCorners:s.transparentCorners,l=h?"stroke":"fill",c=!h&&(n.cornerStrokeColor||s.cornerStrokeColor),u=o/2,d=a/2;e.save(),e.fillStyle=n.cornerColor||s.cornerColor,e.strokeStyle=n.cornerStrokeColor||s.cornerStrokeColor,e.lineWidth=1,e.translate(t,r),e.rotate(i(s.angle)),e[l+"Rect"](-u,-d,o,a),c&&e.strokeRect(-u,-d,o,a),e.restore()}}(t),function(e){var t=e.fabric||(e.fabric={});t.Control=function(e){for(var t in e)this[t]=e[t]},t.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(e,t){return t.cursorStyle},getActionName:function(e,t){return t.actionName},getVisibility:function(e,t){var i=e._controlsVisibility;return i&&void 0!==i[t]?i[t]:this.visible},setVisibility:function(e){this.visible=e},positionHandler:function(e,i){return t.util.transformPoint({x:this.x*e.x+this.offsetX,y:this.y*e.y+this.offsetY},i)},calcCornerCoords:function(e,i,r,n,s){var o,a,h,l,c=s?this.touchSizeX:this.sizeX,u=s?this.touchSizeY:this.sizeY;if(c&&u&&c!==u){var d=Math.atan2(u,c),f=Math.sqrt(c*c+u*u)/2,g=d-t.util.degreesToRadians(e),_=Math.PI/2-d-t.util.degreesToRadians(e);o=f*t.util.cos(g),a=f*t.util.sin(g),h=f*t.util.cos(_),l=f*t.util.sin(_)}else f=.7071067812*(c&&u?c:i),g=t.util.degreesToRadians(45-e),o=h=f*t.util.cos(g),a=l=f*t.util.sin(g);return{tl:{x:r-l,y:n-h},tr:{x:r+o,y:n-a},bl:{x:r-o,y:n+a},br:{x:r+l,y:n+h}}},render:function(e,i,r,n,s){"circle"===((n=n||{}).cornerStyle||s.cornerStyle)?t.controlsUtils.renderCircleControl.call(this,e,i,r,n,s):t.controlsUtils.renderSquareControl.call(this,e,i,r,n,s)}}}(t),function(){function e(e,t){var i,r,n,s,o=e.getAttribute("style"),a=e.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,o){var h=o.split(/\s*;\s*/);for(""===h[h.length-1]&&h.pop(),s=h.length;s--;){var l=h[s].split(/\s*:\s*/),c=l[0].trim(),u=l[1].trim();"stop-color"===c?i=u:"stop-opacity"===c&&(n=u)}}return i||(i=e.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=e.getAttribute("stop-opacity")),r=(i=new x.Color(i)).getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*t,{offset:a,color:i.toRgb(),opacity:n}}var t=x.util.object.clone;x.Gradient=x.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(e){e||(e={}),e.coords||(e.coords={});var t,i=this;Object.keys(e).forEach((function(t){i[t]=e[t]})),this.id?this.id+="_"+x.Object.__uid++:this.id=x.Object.__uid++,t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},"radial"===this.type&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.colorStops=e.colorStops.slice()},addColorStop:function(e){for(var t in e){var i=new x.Color(e[t]);this.colorStops.push({offset:parseFloat(t),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(e){var t={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return x.util.populateWithProperties(this,t,e),t},toSVG:function(e,i){var r,n,s,o,a=t(this.coords,!0),h=(i=i||{},t(this.colorStops,!0)),l=a.r1>a.r2,c=this.gradientTransform?this.gradientTransform.concat():x.iMatrix.concat(),u=-this.offsetX,d=-this.offsetY,f=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(h.sort((function(e,t){return e.offset-t.offset})),"objectBoundingBox"===g?(u/=e.width,d/=e.height):(u+=e.width/2,d+=e.height/2),"path"===e.type&&"percentage"!==this.gradientUnits&&(u-=e.pathOffset.x,d-=e.pathOffset.y),c[4]-=u,c[5]-=d,o='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',o+=' gradientTransform="'+(f?i.additionalTransform+" ":"")+x.util.matrixToSVG(c)+'" ',"linear"===this.type?s=["\n']:"radial"===this.type&&(s=["\n']),"radial"===this.type){if(l)for((h=h.concat()).reverse(),r=0,n=h.length;r0){var p=_/Math.max(a.r1,a.r2);for(r=0,n=h.length;r\n')}return s.push("linear"===this.type?"\n":"\n"),s.join("")},toLive:function(e){var t,i,r,n=x.util.object.clone(this.coords);if(this.type){for("linear"===this.type?t=e.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(t=e.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i1?1:s,isNaN(s)&&(s=1);var o,a,h,l,c=t.getElementsByTagName("stop"),u="userSpaceOnUse"===t.getAttribute("gradientUnits")?"pixels":"percentage",d=t.getAttribute("gradientTransform")||"",f=[],g=0,_=0;for("linearGradient"===t.nodeName||"LINEARGRADIENT"===t.nodeName?(o="linear",a=function(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")||0,x2:e.getAttribute("x2")||"100%",y2:e.getAttribute("y2")||0}}(t)):(o="radial",a=function(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%",y1:e.getAttribute("fy")||e.getAttribute("cy")||"50%",r1:0,x2:e.getAttribute("cx")||"50%",y2:e.getAttribute("cy")||"50%",r2:e.getAttribute("r")||"50%"}}(t)),h=c.length;h--;)f.push(e(c[h],s));return l=x.parseTransformAttribute(d),function(e,t,i,r){var n,s;Object.keys(t).forEach((function(e){"Infinity"===(n=t[e])?s=1:"-Infinity"===n?s=0:(s=parseFloat(t[e],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(s*=.01,"pixels"===r&&("x1"!==e&&"x2"!==e&&"r2"!==e||(s*=i.viewBoxWidth||i.width),"y1"!==e&&"y2"!==e||(s*=i.viewBoxHeight||i.height)))),t[e]=s}))}(0,a,n,u),"pixels"===u&&(g=-i.left,_=-i.top),new x.Gradient({id:t.getAttribute("id"),type:o,coords:a,colorStops:f,gradientUnits:u,gradientTransform:l,offsetX:g,offsetY:_})}})}(),m=x.util.toFixed,x.Pattern=x.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(e,t){if(e||(e={}),this.id=x.Object.__uid++,this.setOptions(e),!e.source||e.source&&"string"!=typeof e.source)t&&t(this);else{var i=this;this.source=x.util.createImage(),x.util.loadImage(e.source,(function(e,r){i.source=e,t&&t(i,r)}),null,this.crossOrigin)}},toObject:function(e){var t,i,r=x.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?t=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(t=this.source.toDataURL()),i={type:"pattern",source:t,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:m(this.offsetX,r),offsetY:m(this.offsetY,r),patternTransform:this.patternTransform?this.patternTransform.concat():null},x.util.populateWithProperties(this,i,e),i},toSVG:function(e){var t="function"==typeof this.source?this.source():this.source,i=t.width/e.width,r=t.height/e.height,n=this.offsetX/e.width,s=this.offsetY/e.height,o="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(r=1,s&&(r+=Math.abs(s))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,n&&(i+=Math.abs(n))),t.src?o=t.src:t.toDataURL&&(o=t.toDataURL()),'\n\n\n'},setOptions:function(e){for(var t in e)this[t]=e[t]},toLive:function(e){var t=this.source;if(!t)return"";if(void 0!==t.src){if(!t.complete)return"";if(0===t.naturalWidth||0===t.naturalHeight)return""}return e.createPattern(t,this.repeat)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.toFixed;t.Shadow?t.warn("fabric.Shadow is already defined."):(t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(e){for(var i in"string"==typeof e&&(e=this._parseShadow(e)),e)this[i]=e[i];this.id=t.Object.__uid++},_parseShadow:function(e){var i=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var r=40,n=40,s=t.Object.NUM_FRACTION_DIGITS,o=t.util.rotateVector({x:this.offsetX,y:this.offsetY},t.util.degreesToRadians(-e.angle)),a=new t.Color(this.color);return e.width&&e.height&&(r=100*i((Math.abs(o.x)+this.blur)/e.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/e.height,s)+20),e.flipX&&(o.x*=-1),e.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var e={},i=t.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach((function(t){this[t]!==i[t]&&(e[t]=this[t])}),this),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(t),function(){if(x.StaticCanvas)x.warn("fabric.StaticCanvas is already defined.");else{var e=x.util.object.extend,t=x.util.getElementOffset,i=x.util.removeFromArray,r=x.util.toFixed,n=x.util.transformPoint,s=x.util.invertTransform,o=x.util.getNodeCanvas,a=x.util.createCanvasElement,h=new Error("Could not initialize `canvas` element");x.StaticCanvas=x.util.createClass(x.CommonMethods,{initialize:function(e,t){t||(t={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(e,t)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:x.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(e,t){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this.interactive||this._initRetinaScaling(),t.overlayImage&&this.setOverlayImage(t.overlayImage,i),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,i),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,i),t.overlayColor&&this.setOverlayColor(t.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return x.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,x.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var e=x.devicePixelRatio;this.__initRetinaScaling(e,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(e,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(e,t,i){t.setAttribute("width",this.width*e),t.setAttribute("height",this.height*e),i.scale(e,e)},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,i){return this.__setBgOverlayImage("overlayImage",e,t,i)},setBackgroundImage:function(e,t,i){return this.__setBgOverlayImage("backgroundImage",e,t,i)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,i,r){return"string"==typeof t?x.util.loadImage(t,(function(t,n){if(t){var s=new x.Image(t,r);this[e]=s,s.canvas=this}i&&i(t,n)}),this,r&&r.crossOrigin):(r&&t.setOptions(r),this[e]=t,t&&(t.canvas=this),i&&i(t,!1)),this},__setBgOverlayColor:function(e,t,i){return this[e]=t,this._initGradient(t,e),this._initPattern(t,e,i),this},_createCanvasElement:function(){var e=a();if(!e)throw h;if(e.style||(e.style={}),void 0===e.getContext)throw h;return e},_initOptions:function(e){var t=this.lowerCanvasEl;this._setOptions(e),this.width=this.width||parseInt(t.width,10)||0,this.height=this.height||parseInt(t.height,10)||0,this.lowerCanvasEl.style&&(t.width=this.width,t.height=this.height,t.style.width=this.width+"px",t.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(e){e&&e.getContext?this.lowerCanvasEl=e:this.lowerCanvasEl=x.util.getById(e)||this._createCanvasElement(),x.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var i;for(var r in t=t||{},e)i=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),i+="px",this.hasLostContext=!0),t.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),t.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(e){var t,i,r,n=this._activeObject,s=this.backgroundImage,o=this.overlayImage;for(this.viewportTransform=e,i=0,r=this._objects.length;i\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",t),this._setSVGObjects(i,t),this.clipPath&&i.push("\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",t),i.push(""),i.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('\n','\n')},_setSVGHeader:function(e,t){var i,n=t.width||this.width,s=t.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=x.Object.NUM_FRACTION_DIGITS;t.viewBox?o='viewBox="'+t.viewBox.x+" "+t.viewBox.y+" "+t.viewBox.width+" "+t.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),e.push("\n',"Created with Fabric.js ",x.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(t),"\n")},createSVGClipPathMarkup:function(e){var t=this.clipPath;return t?(t.clipPathId="CLIPPATH_"+x.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(e.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var e=this;return["background","overlay"].map((function(t){var i=e[t+"Color"];if(i&&i.toLive){var r=e[t+"Vpt"],n=e.viewportTransform,s={width:e.width/(r?n[0]:1),height:e.height/(r?n[3]:1)};return i.toSVG(s,{additionalTransform:r?x.util.matrixToSVG(n):""})}})).join("")},createSVGFontFacesMarkup:function(){var e,t,i,r,n,s,o,a,h="",l={},c=x.fontPaths,u=[];for(this._objects.forEach((function e(t){u.push(t),t._objects&&t._objects.forEach(e)})),o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_setSVGObjects:function(e,t){var i,r,n,s=this._objects;for(r=0,n=s.length;r\n")}else e.push('\n")},sendToBack:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(t=(n=s._objects).length;t--;)r=n[t],i(this._objects,r),this._objects.unshift(r);else i(this._objects,e),this._objects.unshift(e);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(n=s._objects,t=0;t0+l&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),l++;else 0!==(s=this._objects.indexOf(e))&&(o=this._findNewLowerIndex(e,s,t),i(this._objects,e),this._objects.splice(o,0,e));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(e,t,i){var r,n;if(i){for(r=t,n=t-1;n>=0;--n)if(e.intersectsWithObject(this._objects[n])||e.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(e)){r=n;break}}else r=t-1;return r},bringForward:function(e,t){if(!e)return this;var r,n,s,o,a,h=this._activeObject,l=0;if(e===h&&"activeSelection"===e.type)for(r=(a=h._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),e(x.StaticCanvas.prototype,x.Observable),e(x.StaticCanvas.prototype,x.Collection),e(x.StaticCanvas.prototype,x.DataURLExporter),e(x.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=a();if(!t||!t.getContext)return null;var i=t.getContext("2d");return i&&"setLineDash"===e?void 0!==i.setLineDash:null}}),x.StaticCanvas.prototype.toJSON=x.StaticCanvas.prototype.toObject,x.isLikelyNode&&(x.StaticCanvas.prototype.createPNGStream=function(){var e=o(this.lowerCanvasEl);return e&&e.createPNGStream()},x.StaticCanvas.prototype.createJPEGStream=function(e){var t=o(this.lowerCanvasEl);return t&&t.createJPEGStream(e)})}}(),x.BaseBrush=x.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(e){e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.miterLimit=this.strokeMiterLimit,e.lineJoin=this.strokeLineJoin,e.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(e){var t=this.canvas.viewportTransform;e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5])},_setShadow:function(){if(this.shadow){var e=this.canvas,t=this.shadow,i=e.contextTop,r=e.getZoom();e&&e._isRetinaScaling()&&(r*=x.devicePixelRatio),i.shadowColor=t.color,i.shadowBlur=t.blur*r,i.shadowOffsetX=t.offsetX*r,i.shadowOffsetY=t.offsetY*r}},needsFullRender:function(){return new x.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_isOutSideCanvas:function(e){return e.x<0||e.x>this.canvas.getWidth()||e.y<0||e.y>this.canvas.getHeight()}}),x.PencilBrush=x.util.createClass(x.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(e){this.canvas=e,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(e,t,i){var r=t.midPointFrom(i);return e.quadraticCurveTo(t.x,t.y,r.x,r.y),r},onMouseDown:function(e,t){this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],this._prepareForDrawing(e),this._captureDrawingPath(e),this._render())},onMouseMove:function(e,t){if(this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(e))&&this._captureDrawingPath(e)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(e){return!this.canvas._isMainEvent(e.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(e){var t=new x.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){return!(this._points.length>1&&e.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(e),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(e){var t=new x.Point(e.x,e.y);return this._addPoint(t)},_render:function(e){var t,i,r=this._points[0],n=this._points[1];if(e=e||this.canvas.contextTop,this._saveAndTransform(e),e.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new x.Point(r.x,r.y),n=new x.Point(n.x,n.y),r.x-=s,n.x+=s}for(e.moveTo(r.x,r.y),t=1,i=this._points.length;t=n&&(o=e[i],a.push(o));return a.push(e[s]),a},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var e=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(e))this.canvas.requestRenderAll();else{var t=this.createPath(e);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:t}),this.canvas.add(t),this.canvas.requestRenderAll(),t.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:t})}}}),x.CircleBrush=x.util.createClass(x.BaseBrush,{width:10,initialize:function(e){this.canvas=e,this.points=[]},drawDot:function(e){var t=this.addPoint(e),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,t),i.restore()},dot:function(e,t){e.fillStyle=t.fill,e.beginPath(),e.arc(t.x,t.y,t.radius,0,2*Math.PI,!1),e.closePath(),e.fill()},onMouseDown:function(e){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(e)},_render:function(){var e,t,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),e=0,t=r.length;e0&&!this.preserveObjectStacking){t=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),t.push.apply(t,i)}else t=this._objects;return t},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var e=this.contextContainer;return this.renderCanvas(e,this._chooseObjectsToRender()),this},renderTopLayer:function(e){e.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(e),this.contextTopDirty=!0),e.restore()},renderTop:function(){var e=this.contextTop;return this.clearContext(e),this.renderTopLayer(e),this.fire("after:render"),this},_normalizePointer:function(e,t){var i=e.calcTransformMatrix(),r=x.util.invertTransform(i),n=this.restorePointerVpt(t);return x.util.transformPoint(n,r)},isTargetTransparent:function(e,t,i){if(e.shouldCache()&&e._cacheCanvas&&e!==this._activeObject){var r=this._normalizePointer(e,{x:t,y:i}),n=Math.max(e.cacheTranslationX+r.x*e.zoomX,0),s=Math.max(e.cacheTranslationY+r.y*e.zoomY,0);return x.util.isTransparent(e._cacheContext,Math.round(n),Math.round(s),this.targetFindTolerance)}var o=this.contextCache,a=e.selectionBackgroundColor,h=this.viewportTransform;return e.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),e.render(o),o.restore(),e.selectionBackgroundColor=a,x.util.isTransparent(o,t,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(e){return Array.isArray(this.selectionKey)?!!this.selectionKey.find((function(t){return!0===e[t]})):e[this.selectionKey]},_shouldClearSelection:function(e,t){var i=this.getActiveObjects(),r=this._activeObject;return!t||t&&r&&i.length>1&&-1===i.indexOf(t)&&r!==t&&!this._isSelectionKeyPressed(e)||t&&!t.evented||t&&!t.selectable&&r&&r!==t},_shouldCenterTransform:function(e,t,i){var r;if(e)return"scale"===t||"scaleX"===t||"scaleY"===t||"resizing"===t?r=this.centeredScaling||e.centeredScaling:"rotate"===t&&(r=this.centeredRotation||e.centeredRotation),r?!i:i},_getOriginFromCorner:function(e,t){var i={x:e.originX,y:e.originY};return"ml"===t||"tl"===t||"bl"===t?i.x="right":"mr"!==t&&"tr"!==t&&"br"!==t||(i.x="left"),"tl"===t||"mt"===t||"tr"===t?i.y="bottom":"bl"!==t&&"mb"!==t&&"br"!==t||(i.y="top"),i},_getActionFromCorner:function(e,t,i,r){if(!t||!e)return"drag";var n=r.controls[t];return n.getActionName(i,n,r)},_setupCurrentTransform:function(e,i,r){if(i){var n=this.getPointer(e),s=i.__corner,o=i.controls[s],a=r&&s?o.getActionHandler(e,i,o):x.controlsUtils.dragHandler,h=this._getActionFromCorner(r,s,e,i),l=this._getOriginFromCorner(i,s),c=e[this.centeredKey],u={target:i,action:h,actionHandler:a,corner:s,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:l.x,originY:l.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:t(i.angle),width:i.width*i.scaleX,shiftKey:e.shiftKey,altKey:c,original:x.util.saveObjectTransform(i)};this._shouldCenterTransform(i,h,c)&&(u.originX="center",u.originY="center"),u.original.originX=l.x,u.original.originY=l.y,this._currentTransform=u,this._beforeTransform(e)}},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_drawSelection:function(e){var t=this._groupSelector,i=new x.Point(t.ex,t.ey),r=x.util.transformPoint(i,this.viewportTransform),n=new x.Point(t.ex+t.left,t.ey+t.top),s=x.util.transformPoint(n,this.viewportTransform),o=Math.min(r.x,s.x),a=Math.min(r.y,s.y),h=Math.max(r.x,s.x),l=Math.max(r.y,s.y),c=this.selectionLineWidth/2;this.selectionColor&&(e.fillStyle=this.selectionColor,e.fillRect(o,a,h-o,l-a)),this.selectionLineWidth&&this.selectionBorderColor&&(e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor,o+=c,a+=c,h-=c,l-=c,x.Object.prototype._setLineDash.call(this,e,this.selectionDashArray),e.strokeRect(o,a,h-o,l-a))},findTarget:function(e,t){if(!this.skipTargetFind){var r,n,s=this.getPointer(e,!0),o=this._activeObject,a=this.getActiveObjects(),h=i(e),l=a.length>1&&!t||1===a.length;if(this.targets=[],l&&o._findTargetCorner(s,h))return o;if(a.length>1&&!t&&o===this._searchPossibleTargets([o],s))return o;if(1===a.length&&o===this._searchPossibleTargets([o],s)){if(!this.preserveObjectStacking)return o;r=o,n=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,s);return e[this.altSelectionKey]&&c&&r&&c!==r&&(c=r,this.targets=n),c}},_checkTarget:function(e,t,i){if(t&&t.visible&&t.evented&&t.containsPoint(e)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||t.isEditing)return!0;if(!this.isTargetTransparent(t,i.x,i.y))return!0}},_searchPossibleTargets:function(e,t){for(var i,r,n=e.length;n--;){var s=e[n],o=s.group?this._normalizePointer(s.group,t):t;if(this._checkTarget(o,s,t)){(i=e[n]).subTargetCheck&&i instanceof x.Group&&(r=this._searchPossibleTargets(i._objects,t))&&this.targets.push(r);break}}return i},restorePointerVpt:function(e){return x.util.transformPoint(e,x.util.invertTransform(this.viewportTransform))},getPointer:function(t,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=e(t),s=this.upperCanvasEl,o=s.getBoundingClientRect(),a=o.width||0,h=o.height||0;a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var l=this.getRetinaScaling();return 1!==l&&(n.x/=l,n.y/=l),r=0===a||0===h?{width:1,height:1}:{width:s.width/a,height:s.height/h},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),t=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),x.util.addClass(i,"upper-canvas "+e),this.wrapperEl.appendChild(i),this._copyCanvasStyle(t,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=x.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),x.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),x.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.width||e.width,i=this.height||e.height;x.util.setStyle(e,{position:"absolute",width:t+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),e.width=t,e.height=i,x.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var e=this._activeObject;return e?"activeSelection"===e.type&&e._objects?e._objects.slice(0):[e]:[]},_onObjectRemoved:function(e){e===this._activeObject&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared",{target:e}),e.fire("deselected")),e===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",e)},_fireSelectionEvents:function(e,t){var i=!1,r=this.getActiveObjects(),n=[],s=[];e.forEach((function(e){-1===r.indexOf(e)&&(i=!0,e.fire("deselected",{e:t,target:e}),s.push(e))})),r.forEach((function(r){-1===e.indexOf(r)&&(i=!0,r.fire("selected",{e:t,target:r}),n.push(r))})),e.length>0&&r.length>0?i&&this.fire("selection:updated",{e:t,selected:n,deselected:s}):r.length>0?this.fire("selection:created",{e:t,selected:n}):e.length>0&&this.fire("selection:cleared",{e:t,deselected:s})},setActiveObject:function(e,t){var i=this.getActiveObjects();return this._setActiveObject(e,t),this._fireSelectionEvents(i,t),this},_setActiveObject:function(e,t){return this._activeObject!==e&&!!this._discardActiveObject(t,e)&&!e.onSelect({e:t})&&(this._activeObject=e,!0)},_discardActiveObject:function(e,t){var i=this._activeObject;if(i){if(i.onDeselect({e,object:t}))return!1;this._activeObject=null}return!0},discardActiveObject:function(e){var t=this.getActiveObjects(),i=this.getActiveObject();return t.length&&this.fire("before:selection:cleared",{target:i,e}),this._discardActiveObject(e),this._fireSelectionEvents(t,e),this},dispose:function(){var e=this.wrapperEl;return this.removeListeners(),e.removeChild(this.upperCanvasEl),e.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(e){x.util.cleanUpJsdomNode(this[e]),this[e]=void 0}.bind(this)),e.parentNode&&e.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,x.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(e){var t=this._activeObject;t&&t._renderControls(e)},_toObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(e),n=this.callSuper("_toObject",e,t,i);return this._unwindGroupTransformOnObject(e,r),n},_realizeGroupTransformOnObject:function(e){if(e.group&&"activeSelection"===e.group.type&&this._activeObject===e.group){var t={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach((function(i){t[i]=e[i]})),x.util.addTransformToObject(e,this._activeObject.calcOwnMatrix()),t}return null},_unwindGroupTransformOnObject:function(e,t){t&&e.set(t)},_setSVGObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(t);this.callSuper("_setSVGObject",e,t,i),this._unwindGroupTransformOnObject(t,r)},setViewportTransform:function(e){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),x.StaticCanvas.prototype.setViewportTransform.call(this,e)}}),x.StaticCanvas)"prototype"!==r&&(x.Canvas[r]=x.StaticCanvas[r])}(),function(){var e=x.util.addListener,t=x.util.removeListener,i={passive:!1};function r(e,t){return e.button&&e.button===t-1}x.util.object.extend(x.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(e,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(e,t){var r=this.upperCanvasEl,n=this._getEventPrefix();e(x.window,"resize",this._onResize),e(r,n+"down",this._onMouseDown),e(r,n+"move",this._onMouseMove,i),e(r,n+"out",this._onMouseOut),e(r,n+"enter",this._onMouseEnter),e(r,"wheel",this._onMouseWheel),e(r,"contextmenu",this._onContextMenu),e(r,"dblclick",this._onDoubleClick),e(r,"dragover",this._onDragOver),e(r,"dragenter",this._onDragEnter),e(r,"dragleave",this._onDragLeave),e(r,"drop",this._onDrop),this.enablePointerEvents||e(r,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&t in eventjs&&(eventjs[t](r,"gesture",this._onGesture),eventjs[t](r,"drag",this._onDrag),eventjs[t](r,"orientation",this._onOrientationChange),eventjs[t](r,"shake",this._onShake),eventjs[t](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(t,"remove");var e=this._getEventPrefix();t(x.document,e+"up",this._onMouseUp),t(x.document,"touchend",this._onTouchEnd,i),t(x.document,e+"move",this._onMouseMove,i),t(x.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(e,t){this.__onTransformGesture&&this.__onTransformGesture(e,t)},_onDrag:function(e,t){this.__onDrag&&this.__onDrag(e,t)},_onMouseWheel:function(e){this.__onMouseWheel(e)},_onMouseOut:function(e){var t=this._hoveredTarget;this.fire("mouse:out",{target:t,e}),this._hoveredTarget=null,t&&t.fire("mouseout",{e});var i=this;this._hoveredTargets.forEach((function(r){i.fire("mouse:out",{target:t,e}),r&&t.fire("mouseout",{e})})),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach((function(e){e.isEditing&&e.hiddenTextarea.focus()}))},_onMouseEnter:function(e){this._currentTransform||this.findTarget(e)||(this.fire("mouse:over",{target:null,e}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(e,t){this.__onOrientationChange&&this.__onOrientationChange(e,t)},_onShake:function(e,t){this.__onShake&&this.__onShake(e,t)},_onLongPress:function(e,t){this.__onLongPress&&this.__onLongPress(e,t)},_onDragOver:function(e){e.preventDefault();var t=this._simpleEventHandler("dragover",e);this._fireEnterLeaveEvents(t,e)},_onDrop:function(e){return this._simpleEventHandler("drop:before",e),this._simpleEventHandler("drop",e)},_onContextMenu:function(e){return this.stopContextMenu&&(e.stopPropagation(),e.preventDefault()),!1},_onDoubleClick:function(e){this._cacheTransformEventData(e),this._handleEvent(e,"dblclick"),this._resetTransformEventData(e)},getPointerId:function(e){var t=e.changedTouches;return t?t[0]&&t[0].identifier:this.enablePointerEvents?e.pointerId:-1},_isMainEvent:function(e){return!0===e.isPrimary||!1!==e.isPrimary&&("touchend"===e.type&&0===e.touches.length||!e.changedTouches||e.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();e(x.document,"touchend",this._onTouchEnd,i),e(x.document,"touchmove",this._onMouseMove,i),t(n,s+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();t(n,s+"move",this._onMouseMove,i),e(x.document,s+"up",this._onMouseUp),e(x.document,s+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var n=this._getEventPrefix();t(x.document,"touchend",this._onTouchEnd,i),t(x.document,"touchmove",this._onMouseMove,i);var s=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((function(){e(s.upperCanvasEl,n+"down",s._onMouseDown),s._willAddMouseDown=0}),400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();this._isMainEvent(r)&&(t(x.document,s+"up",this._onMouseUp),t(x.document,s+"move",this._onMouseMove,i),e(n,s+"move",this._onMouseMove,i))},_onMouseMove:function(e){!this.allowTouchScrolling&&e.preventDefault&&e.preventDefault(),this.__onMouseMove(e)},_onResize:function(){this.calcOffset()},_shouldRender:function(e){var t=this._activeObject;return!!(!!t!=!!e||t&&e&&t!==e)||(t&&t.isEditing,!1)},__onMouseUp:function(e){var t,i=this._currentTransform,n=this._groupSelector,s=!1,o=!n||0===n.left&&0===n.top;if(this._cacheTransformEventData(e),t=this._target,this._handleEvent(e,"up:before"),r(e,3))this.fireRightClick&&this._handleEvent(e,"up",3,o);else{if(r(e,2))return this.fireMiddleClick&&this._handleEvent(e,"up",2,o),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else if(this._isMainEvent(e)){if(i&&(this._finalizeCurrentTransform(e),s=i.actionPerformed),!o){var a=t===this._activeObject;this._maybeGroupObjects(e),s||(s=this._shouldRender(t)||!a&&t===this._activeObject)}var h,l;if(t){if(h=t._findTargetCorner(this.getPointer(e,!0),x.util.isTouchEvent(e)),t.selectable&&t!==this._activeObject&&"up"===t.activeOn)this.setActiveObject(t,e),s=!0;else{var c=t.controls[h],u=c&&c.getMouseUpHandler(e,t,c);u&&u(e,i,(l=this.getPointer(e)).x,l.y)}t.isMoving=!1}if(i&&(i.target!==t||i.corner!==h)){var d=i.target&&i.target.controls[i.corner],f=d&&d.getMouseUpHandler(e,t,c);l=l||this.getPointer(e),f&&f(e,i,l.x,l.y)}this._setCursorFromEvent(e,t),this._handleEvent(e,"up",1,o),this._groupSelector=null,this._currentTransform=null,t&&(t.__corner=0),s?this.requestRenderAll():o||this.renderTop()}}},_simpleEventHandler:function(e,t){var i=this.findTarget(t),r=this.targets,n={e:t,target:i,subTargets:r};if(this.fire(e,n),i&&i.fire(e,n),!r)return i;for(var s=0;s1&&(t=new x.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(t,e))},_collectObjects:function(e){for(var t,i=[],r=this._groupSelector.ex,n=this._groupSelector.ey,s=r+this._groupSelector.left,o=n+this._groupSelector.top,a=new x.Point(v(r,s),v(n,o)),h=new x.Point(y(r,s),y(n,o)),l=!this.selectionFullyContained,c=r===s&&n===o,u=this._objects.length;u--&&!((t=this._objects[u])&&t.selectable&&t.visible&&(l&&t.intersectsWithRect(a,h,!0)||t.isContainedWithinRect(a,h,!0)||l&&t.containsPoint(a,null,!0)||l&&t.containsPoint(h,null,!0))&&(i.push(t),c)););return i.length>1&&(i=i.filter((function(t){return!t.onSelect({e})}))),i},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e),this.setCursor(this.defaultCursor),this._groupSelector=null}}),x.util.object.extend(x.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",i=e.quality||1,r=(e.multiplier||1)*(e.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(r,e);return x.util.toDataURL(n,t,i)},toCanvasElement:function(e,t){e=e||1;var i=((t=t||{}).width||this.width)*e,r=(t.height||this.height)*e,n=this.getZoom(),s=this.width,o=this.height,a=n*e,h=this.viewportTransform,l=(h[4]-(t.left||0))*e,c=(h[5]-(t.top||0))*e,u=this.interactive,d=[a,0,0,a,l,c],f=this.enableRetinaScaling,g=x.util.createCanvasElement(),_=this.contextTop;return g.width=i,g.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=h,this.width=s,this.height=o,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=f,this.contextTop=_,g}}),x.util.object.extend(x.StaticCanvas.prototype,{loadFromJSON:function(e,t,i){if(e){var r="string"==typeof e?JSON.parse(e):x.util.object.clone(e),n=this,s=r.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,(function(e){n.clear(),n._setBgOverlay(r,(function(){s?n._enlivenObjects([s],(function(i){n.clipPath=i[0],n.__setupCanvas.call(n,r,e,o,t)})):n.__setupCanvas.call(n,r,e,o,t)}))}),i),this}},__setupCanvas:function(e,t,i,r){var n=this;t.forEach((function(e,t){n.insertAt(e,t)})),this.renderOnAddRemove=i,delete e.objects,delete e.backgroundImage,delete e.overlayImage,delete e.background,delete e.overlay,this._setOptions(e),this.renderAll(),r&&r()},_setBgOverlay:function(e,t){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(e.backgroundImage||e.overlayImage||e.background||e.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&t&&t()};this.__setBgOverlay("backgroundImage",e.backgroundImage,i,r),this.__setBgOverlay("overlayImage",e.overlayImage,i,r),this.__setBgOverlay("backgroundColor",e.background,i,r),this.__setBgOverlay("overlayColor",e.overlay,i,r)}else t&&t()},__setBgOverlay:function(e,t,i,r){var n=this;if(!t)return i[e]=!0,void(r&&r());"backgroundImage"===e||"overlayImage"===e?x.util.enlivenObjects([t],(function(t){n[e]=t[0],i[e]=!0,r&&r()})):this["set"+x.util.string.capitalize(e,!0)](t,(function(){i[e]=!0,r&&r()}))},_enlivenObjects:function(e,t,i){e&&0!==e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),null,i):t&&t([])},_toDataURL:function(e,t){this.clone((function(i){t(i.toDataURL(e))}))},_toDataURLWithMultiplier:function(e,t,i){this.clone((function(r){i(r.toDataURLWithMultiplier(e,t))}))},clone:function(e,t){var i=JSON.stringify(this.toJSON(t));this.cloneWithoutData((function(t){t.loadFromJSON(i,(function(){e&&e(t)}))}))},cloneWithoutData:function(e){var t=x.util.createCanvasElement();t.width=this.width,t.height=this.height;var i=new x.Canvas(t);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,(function(){i.renderAll(),e&&e(i)})),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):e&&e(i)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n=t.util.toFixed,s=t.util.string.capitalize,o=t.util.degreesToRadians,a=!t.isLikelyNode;t.Object||(t.Object=t.util.createClass(t.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(e){e&&this.setOptions(e)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=t.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(e){var i=t.perfLimitSizeTotal,r=e.width,n=e.height,s=t.maxCacheSideLimit,o=t.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rc&&(e.zoomX/=r/c,e.width=c,e.capped=!0),n>u&&(e.zoomY/=n/u,e.height=u,e.capped=!0),e},_getCacheCanvasDimensions:function(){var e=this.getTotalObjectScaling(),t=this._getTransformedDimensions(0,0),i=t.x*e.scaleX/this.scaleX,r=t.y*e.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:e.scaleX,zoomY:e.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var e=this.canvas;if(this.noScaleCache&&e&&e._currentTransform){var i=e._currentTransform.target,r=e._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,s,o=this._cacheCanvas,a=this._limitCacheSize(this._getCacheCanvasDimensions()),h=t.minCacheSideLimit,l=a.width,c=a.height,u=a.zoomX,d=a.zoomY,f=l!==this.cacheWidth||c!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==d,_=f||g,p=0,m=0,v=!1;if(f){var y=this._cacheCanvas.width,S=this._cacheCanvas.height,b=l>y||c>S;v=b||(l<.9*y||c<.9*S)&&y>h&&S>h,b&&!a.capped&&(l>h||c>h)&&(p=.1*l,m=.1*c)}return this instanceof t.Text&&this.path&&(_=!0,v=!0,p+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!_&&(v?(o.width=Math.ceil(l+p),o.height=Math.ceil(c+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,o.width,o.height)),n=a.x/2,s=a.y/2,this.cacheTranslationX=Math.round(o.width/2-n)+n,this.cacheTranslationY=Math.round(o.height/2-s)+s,this.cacheWidth=l,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,d),this.zoomX=u,this.zoomY=d,!0)},setOptions:function(e){this._setOptions(e),this._initGradient(e.fill,"fill"),this._initGradient(e.stroke,"stroke"),this._initPattern(e.fill,"fill"),this._initPattern(e.stroke,"stroke")},transform:function(e){var t=this.group&&!this.group._transformDone||this.group&&this.canvas&&e===this.canvas.contextTop,i=this.calcTransformMatrix(!t);e.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(e){var i=t.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:t.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(r.clipPath=this.clipPath.toObject(e),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),t.util.populateWithProperties(this,r,e),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var i=t.util.getKlass(e.type).prototype;return i.stateProperties.forEach((function(t){"left"!==t&&"top"!==t&&(e[t]===i[t]&&delete e[t],Array.isArray(e[t])&&Array.isArray(i[t])&&0===e[t].length&&0===i[t].length&&delete e[t])})),e},toString:function(){return"#"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var e=t.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(e.scaleX),scaleY:Math.abs(e.scaleY)}},getTotalObjectScaling:function(){var e=this.getObjectScaling(),t=e.scaleX,i=e.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();t*=r*n,i*=r*n}return{scaleX:t,scaleY:i}},getObjectOpacity:function(){var e=this.opacity;return this.group&&(e*=this.group.getObjectOpacity()),e},_set:function(e,i){var r="scaleX"===e||"scaleY"===e,n=this[e]!==i,s=!1;return r&&(i=this._constrainScale(i)),"scaleX"===e&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===e&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==e||!i||i instanceof t.Shadow?"dirty"===e&&this.group&&this.group.set("dirty",i):i=new t.Shadow(i),this[e]=i,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(e)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(e)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:t.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(e){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(e.save(),this._setupCompositeOperation(e),this.drawSelectionBackground(e),this.transform(e),this._setOpacity(e),this._setShadow(e,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(e)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(e),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),e.restore())},renderCache:function(e){e=e||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,e.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(e,i){if(e.save(),i.inverted?e.globalCompositeOperation="destination-out":e.globalCompositeOperation="destination-in",i.absolutePositioned){var r=t.util.invertTransform(this.calcTransformMatrix());e.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(e),e.scale(1/i.zoomX,1/i.zoomY),e.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),e.restore()},drawObject:function(e,t){var i=this.fill,r=this.stroke;t?(this.fill="black",this.stroke="",this._setClippingProperties(e)):this._renderBackground(e),this._render(e),this._drawClipPath(e,this.clipPath),this.fill=i,this.stroke=r},_drawClipPath:function(e,t){t&&(t.canvas=this.canvas,t.shouldCache(),t._transformDone=!0,t.renderCache({forClipping:!0}),this.drawClipPathOnCache(e,t))},drawCacheOnCanvas:function(e){e.scale(1/this.zoomX,1/this.zoomY),e.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(e){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!e&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!e){var t=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-t/2,-i/2,t,i)}return!0}return!1},_renderBackground:function(e){if(this.backgroundColor){var t=this._getNonTransformedDimensions();e.fillStyle=this.backgroundColor,e.fillRect(-t.x/2,-t.y/2,t.x,t.y),this._removeShadow(e)}},_setOpacity:function(e){this.group&&!this.group._transformDone?e.globalAlpha=this.getObjectOpacity():e.globalAlpha*=this.opacity},_setStrokeStyles:function(e,t){var i=t.stroke;i&&(e.lineWidth=t.strokeWidth,e.lineCap=t.strokeLineCap,e.lineDashOffset=t.strokeDashOffset,e.lineJoin=t.strokeLineJoin,e.miterLimit=t.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(e,i):(e.strokeStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,i)):e.strokeStyle=t.stroke)},_setFillStyles:function(e,t){var i=t.fill;i&&(i.toLive?(e.fillStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,t.fill)):e.fillStyle=i)},_setClippingProperties:function(e){e.globalAlpha=1,e.strokeStyle="transparent",e.fillStyle="#000000"},_setLineDash:function(e,t){t&&0!==t.length&&(1&t.length&&t.push.apply(t,t),e.setLineDash(t))},_renderControls:function(e,i){var r,n,s,a=this.getViewportTransform(),h=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==i.hasControls?i.hasControls:this.hasControls,h=t.util.multiplyTransformMatrices(a,h),r=t.util.qrDecompose(h),e.save(),e.translate(r.translateX,r.translateY),e.lineWidth=1*this.borderScaleFactor,this.group||(e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(r.angle-=180),e.rotate(o(this.group?r.angle:this.angle)),i.forActiveSelection||this.group?n&&this.drawBordersInGroup(e,r,i):n&&this.drawBorders(e,i),s&&this.drawControls(e,i),e.restore()},_setShadow:function(e){if(this.shadow){var i,r=this.shadow,n=this.canvas,s=n&&n.viewportTransform[0]||1,o=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(s*=t.devicePixelRatio,o*=t.devicePixelRatio),e.shadowColor=r.color,e.shadowBlur=r.blur*t.browserShadowBlurConstant*(s+o)*(i.scaleX+i.scaleY)/4,e.shadowOffsetX=r.offsetX*s*i.scaleX,e.shadowOffsetY=r.offsetY*o*i.scaleY}},_removeShadow:function(e){this.shadow&&(e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0)},_applyPatternGradientTransform:function(e,t){if(!t||!t.toLive)return{offsetX:0,offsetY:0};var i=t.gradientTransform||t.patternTransform,r=-this.width/2+t.offsetX||0,n=-this.height/2+t.offsetY||0;return"percentage"===t.gradientUnits?e.transform(this.width,0,0,this.height,r,n):e.transform(1,0,0,1,r,n),i&&e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(e){"stroke"===this.paintFirst?(this._renderStroke(e),this._renderFill(e)):(this._renderFill(e),this._renderStroke(e))},_render:function(){},_renderFill:function(e){this.fill&&(e.save(),this._setFillStyles(e,this),"evenodd"===this.fillRule?e.fill("evenodd"):e.fill(),e.restore())},_renderStroke:function(e){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e),e.save(),this.strokeUniform&&this.group){var t=this.getObjectScaling();e.scale(1/t.scaleX,1/t.scaleY)}else this.strokeUniform&&e.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(e,this.strokeDashArray),this._setStrokeStyles(e,this),e.stroke(),e.restore()}},_applyPatternForTransformedGradient:function(e,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),s=t.util.createCanvasElement(),o=this.canvas.getRetinaScaling(),a=n.x/this.scaleX/o,h=n.y/this.scaleY/o;s.width=a,s.height=h,(r=s.getContext("2d")).beginPath(),r.moveTo(0,0),r.lineTo(a,0),r.lineTo(a,h),r.lineTo(0,h),r.closePath(),r.translate(a/2,h/2),r.scale(n.zoomX/this.scaleX/o,n.zoomY/this.scaleY/o),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(e),r.fill(),e.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),e.scale(o*this.scaleX/n.zoomX,o*this.scaleY/n.zoomY),e.strokeStyle=r.createPattern(s,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var e=t.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",e.scaleX),this.set("scaleY",e.scaleY),this.angle=e.angle,this.skewX=e.skewX,this.skewY=0}},_removeTransformMatrix:function(e){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=t.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,e&&(this.scaleX*=e.scaleX,this.scaleY*=e.scaleY,this.cropX=e.cropX,this.cropY=e.cropY,i.x+=e.offsetLeft,i.y+=e.offsetTop,this.width=e.width,this.height=e.height),this.setPositionByOrigin(i,"center","center")},clone:function(e,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,e):t.Object._fromObject("Object",r,e)},cloneAsImage:function(e,i){var r=this.toCanvasElement(i);return e&&e(new t.Image(r)),this},toCanvasElement:function(e){e||(e={});var i=t.util,r=i.saveObjectTransform(this),n=this.group,s=this.shadow,o=Math.abs,a=(e.multiplier||1)*(e.enableRetinaScaling?t.devicePixelRatio:1);delete this.group,e.withoutTransform&&i.resetObjectTransform(this),e.withoutShadow&&(this.shadow=null);var h,l,c,u,d=t.util.createCanvasElement(),f=this.getBoundingRect(!0,!0),g=this.shadow,_={x:0,y:0};g&&(l=g.blur,h=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),_.x=2*Math.round(o(g.offsetX)+l)*o(h.scaleX),_.y=2*Math.round(o(g.offsetY)+l)*o(h.scaleY)),c=f.width+_.x,u=f.height+_.y,d.width=Math.ceil(c),d.height=Math.ceil(u);var p=new t.StaticCanvas(d,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===e.format&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new t.Point(p.width/2,p.height/2),"center","center");var m=this.canvas;p.add(this);var v=p.toCanvasElement(a||1,e);return this.shadow=s,this.set("canvas",m),n&&(this.group=n),this.set(r).setCoords(),p._objects=[],p.dispose(),p=null,v},toDataURL:function(e){return e||(e={}),t.util.toDataURL(this.toCanvasElement(e),e.format||"png",e.quality||1)},isType:function(e){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===e},complexity:function(){return 1},toJSON:function(e){return this.toObject(e)},rotate:function(e){var t=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(e,i){i=i||this.canvas.getPointer(e);var r=new t.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=t.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(e){this.globalCompositeOperation&&(e.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){t.runningAnimations&&t.runningAnimations.cancelByTarget(this)}}),t.util.createAccessors&&t.util.createAccessors(t.Object),i(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.ENLIVEN_PROPS=["clipPath"],t.Object._fromObject=function(e,i,n,s){var o=t[e];i=r(i,!0),t.util.enlivenPatterns([i.fill,i.stroke],(function(e){void 0!==e[0]&&(i.fill=e[0]),void 0!==e[1]&&(i.stroke=e[1]),t.util.enlivenObjectEnlivables(i,i,(function(){var e=s?new o(i[s],i):new o(i);n&&n(e)}))}))},t.Object.__uid=0)}(t),S=x.util.degreesToRadians,b={left:-.5,center:0,right:.5},w={top:-.5,center:0,bottom:.5},x.util.object.extend(x.Object.prototype,{translateToGivenOrigin:function(e,t,i,r,n){var s,o,a,h=e.x,l=e.y;return"string"==typeof t?t=b[t]:t-=.5,"string"==typeof r?r=b[r]:r-=.5,"string"==typeof i?i=w[i]:i-=.5,"string"==typeof n?n=w[n]:n-=.5,o=n-i,((s=r-t)||o)&&(a=this._getTransformedDimensions(),h=e.x+s*a.x,l=e.y+o*a.y),new x.Point(h,l)},translateToCenterPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,t,i,"center","center");return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},translateToOriginPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,"center","center",t,i);return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},getCenterPoint:function(){var e=new x.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var i=this.getCenterPoint();return this.translateToOriginPoint(i,e,t)},toLocalPoint:function(e,t,i){var r,n,s=this.getCenterPoint();return r=void 0!==t&&void 0!==i?this.translateToGivenOrigin(s,"center","center",t,i):new x.Point(this.left,this.top),n=new x.Point(e.x,e.y),this.angle&&(n=x.util.rotatePoint(n,s,-S(this.angle))),n.subtractEquals(r)},setPositionByOrigin:function(e,t,i){var r=this.translateToCenterPoint(e,t,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(e){var t,i,r=S(this.angle),n=this.getScaledWidth(),s=x.util.cos(r)*n,o=x.util.sin(r)*n;t="string"==typeof this.originX?b[this.originX]:this.originX-.5,i="string"==typeof e?b[e]:e-.5,this.left+=s*(i-t),this.top+=o*(i-t),this.setCoords(),this.originX=e},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),function(){var e=x.util,t=e.degreesToRadians,i=e.multiplyTransformMatrices,r=e.transformPoint;e.object.extend(x.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(e,t){return t?e?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),e?this.aCoords:this.lineCoords)},getCoords:function(e,t){return i=this._getCoords(e,t),[new x.Point(i.tl.x,i.tl.y),new x.Point(i.tr.x,i.tr.y),new x.Point(i.br.x,i.br.y),new x.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(e,t,i,r){var n=this.getCoords(i,r);return"Intersection"===x.Intersection.intersectPolygonRectangle(n,e,t).status},intersectsWithObject:function(e,t,i){return"Intersection"===x.Intersection.intersectPolygonPolygon(this.getCoords(t,i),e.getCoords(t,i)).status||e.isContainedWithinObject(this,t,i)||this.isContainedWithinObject(e,t,i)},isContainedWithinObject:function(e,t,i){for(var r=this.getCoords(t,i),n=t?e.aCoords:e.lineCoords,s=0,o=e._getImageLines(n);s<4;s++)if(!e.containsPoint(r[s],o))return!1;return!0},isContainedWithinRect:function(e,t,i,r){var n=this.getBoundingRect(i,r);return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e,t,i,r){var n=this._getCoords(i,r),s=(t=t||this._getImageLines(n),this._findCrossPoints(e,t));return 0!==s&&s%2==1},isOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,e).some((function(e){return e.x<=i.x&&e.x>=t.x&&e.y<=i.y&&e.y>=t.y}))||!!this.intersectsWithRect(t,i,!0,e)||this._containsCenterOfCanvas(t,i,e)},_containsCenterOfCanvas:function(e,t,i){var r={x:(e.x+t.x)/2,y:(e.y+t.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(t,i,!0,e)||this.getCoords(!0,e).every((function(e){return(e.x>=i.x||e.x<=t.x)&&(e.y>=i.y||e.y<=t.y)}))&&this._containsCenterOfCanvas(t,i,e)},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var i,r,n,s=0;for(var o in t)if(!((n=t[o]).o.y=e.y&&n.d.y>=e.y||(n.o.x===n.d.x&&n.o.x>=e.x?r=n.o.x:(i=(n.d.y-n.o.y)/(n.d.x-n.o.x),r=-(e.y-0*e.x-(n.o.y-i*n.o.x))/(0-i)),r>=e.x&&(s+=1),2!==s)))break;return s},getBoundingRect:function(t,i){var r=this.getCoords(t,i);return e.makeBoundingBoxFromPoints(r)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(e){return Math.abs(e)\n')}},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(e),{reviver:e})},toClipPathSVG:function(e){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(e),{reviver:e})},_createBaseClipPathSVGMarkup:function(e,t){var i=(t=t||{}).reviver,r=t.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=e.indexOf("COMMON_PARTS");return e[s]=n,i?i(e.join("")):e.join("")},_createBaseSVGMarkup:function(e,t){var i,r,n=(t=t||{}).noStyle,s=t.reviver,o=n?"":'style="'+this.getSvgStyles()+'" ',a=t.withShadow?'style="'+this.getSvgFilter()+'" ':"",h=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=h&&h.absolutePositioned,u=this.stroke,d=this.fill,f=this.shadow,g=[],_=e.indexOf("COMMON_PARTS"),p=t.additionalTransform;return h&&(h.clipPathId="CLIPPATH_"+x.Object.__uid++,r='\n'+h.toClipPathSVG(s)+"\n"),c&&g.push("\n"),g.push("\n"),i=[o,l,n?"":this.addPaintOrder()," ",p?'transform="'+p+'" ':""].join(""),e[_]=i,d&&d.toLive&&g.push(d.toSVG(this)),u&&u.toLive&&g.push(u.toSVG(this)),f&&g.push(f.toSVG(this)),h&&g.push(r),g.push(e.join("")),g.push("\n"),c&&g.push("\n"),s?s(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var e=x.util.object.extend,t="stateProperties";function i(t,i,r){var n={};r.forEach((function(e){n[e]=t[e]})),e(t[i],n,!0)}function r(e,t,i){if(e===t)return!0;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(var n=0,s=e.length;n=0;h--)if(n=a[h],this.isControlVisible(n)&&(r=this._getImageLines(t?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:s,y:o},r))&&i%2==1))return this.__corner=n,n;return!1},forEachControl:function(e){for(var t in this.controls)e(this.controls[t],t,this)},_setCornerCoords:function(){var e=this.oCoords;for(var t in e){var i=this.controls[t];e[t].corner=i.calcCornerCoords(this.angle,this.cornerSize,e[t].x,e[t].y,!1),e[t].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,e[t].x,e[t].y,!0)}},drawSelectionBackground:function(t){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;t.save();var i=this.getCenterPoint(),r=this._calculateCurrentDimensions(),n=this.canvas.viewportTransform;return t.translate(i.x,i.y),t.scale(1/n[0],1/n[3]),t.rotate(e(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-r.x/2,-r.y/2,r.x,r.y),t.restore(),this},drawBorders:function(e,t){t=t||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,n=i.x+r,s=i.y+r,o=void 0!==t.hasControls?t.hasControls:this.hasControls,a=!1;return e.save(),e.strokeStyle=t.borderColor||this.borderColor,this._setLineDash(e,t.borderDashArray||this.borderDashArray),e.strokeRect(-n/2,-s/2,n,s),o&&(e.beginPath(),this.forEachControl((function(t,i,r){t.withConnection&&t.getVisibility(r,i)&&(a=!0,e.moveTo(t.x*n,t.y*s),e.lineTo(t.x*n+t.offsetX,t.y*s+t.offsetY))})),a&&e.stroke()),e.restore(),this},drawBordersInGroup:function(e,t,i){i=i||{};var r=x.util.sizeAfterTransform(this.width,this.height,t),n=this.strokeWidth,s=this.strokeUniform,o=this.borderScaleFactor,a=r.x+n*(s?this.canvas.getZoom():t.scaleX)+o,h=r.y+n*(s?this.canvas.getZoom():t.scaleY)+o;return e.save(),this._setLineDash(e,i.borderDashArray||this.borderDashArray),e.strokeStyle=i.borderColor||this.borderColor,e.strokeRect(-a/2,-h/2,a,h),e.restore(),this},drawControls:function(e,t){t=t||{},e.save();var i,r,n=this.canvas.getRetinaScaling();return e.setTransform(n,0,0,n,0,0),e.strokeStyle=e.fillStyle=t.cornerColor||this.cornerColor,this.transparentCorners||(e.strokeStyle=t.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(e,t.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl((function(n,s,o){r=o.oCoords[s],n.getVisibility(o,s)&&(i&&(r=x.util.transformPoint(r,i)),n.render(e,r.x,r.y,t,o))})),e.restore(),this},isControlVisible:function(e){return this.controls[e]&&this.controls[e].getVisibility(this,e)},setControlVisible:function(e,t){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[e]=t,this},setControlsVisibility:function(e){for(var t in e||(e={}),e)this.setControlVisible(t,e[t]);return this},onDeselect:function(){},onSelect:function(){}})}(),x.util.object.extend(x.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxCenterObjectV:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxRemove:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(t){e.set("opacity",t),s.requestRenderAll(),n()},onComplete:function(){s.remove(e),r()}})}}),x.util.object.extend(x.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var e,t,i=[],r=[];for(e in arguments[0])i.push(e);for(var n=0,s=i.length;n-1||n&&s.colorProperties.indexOf(n[1])>-1,a=n?this.get(n[0])[n[1]]:this.get(e);"from"in i||(i.from=a),o||(t=~t.indexOf("=")?a+parseFloat(t.replace("=","")):parseFloat(t));var h={target:this,startValue:i.from,endValue:t,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(e,t,r){return i.abort.call(s,e,t,r)},onChange:function(t,o,a){n?s[n[0]][n[1]]=t:s.set(e,t),r||i.onChange&&i.onChange(t,o,a)},onComplete:function(e,t,n){r||(s.setCoords(),i.onComplete&&i.onComplete(e,t,n))}};return o?x.util.animateColor(h.startValue,h.endValue,h.duration,h):x.util.animate(h)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n={x1:1,x2:1,y1:1,y2:1};function s(e,t){var i=e.origin,r=e.axis1,n=e.axis2,s=e.dimension,o=t.nearest,a=t.center,h=t.farthest;return function(){switch(this.get(i)){case o:return Math.min(this.get(r),this.get(n));case a:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case h:return Math.max(this.get(r),this.get(n))}}}t.Line?t.warn("fabric.Line is already defined"):(t.Line=t.util.createClass(t.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:t.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(e,t){e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,t){return this.callSuper("_set",e,t),void 0!==n[e]&&this._setWidthHeight(),this},_getLeftToOriginX:s({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:s({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e){e.beginPath();var t=this.calcLinePoints();e.moveTo(t.x1,t.y1),e.lineTo(t.x2,t.y2),e.lineWidth=this.strokeWidth;var i=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(e){return i(this.callSuper("toObject",e),this.calcLinePoints())},_getNonTransformedDimensions:function(){var e=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(e.y-=this.strokeWidth),0===this.height&&(e.x-=this.strokeWidth)),e},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,t=this.y1<=this.y2?-1:1,i=e*this.width*.5,r=t*this.height*.5;return{x1:i,x2:e*this.width*-.5,y1:r,y2:t*this.height*-.5}},_toSVG:function(){var e=this.calcLinePoints();return["\n']}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r,n){n=n||{};var s=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];r(new t.Line(o,i(s,n)))},t.Line.fromObject=function(e,i){var n=r(e,!0);n.points=[e.x1,e.y1,e.x2,e.y2],t.Object._fromObject("Line",n,(function(e){delete e.points,i&&i(e)}),"points")})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians;t.Circle?t.warn("fabric.Circle is already defined."):(t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:t.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(e,t){return this.callSuper("_set",e,t),"radius"===e&&this.setRadius(t),this},toObject:function(e){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(e))},_toSVG:function(){var e,r=(this.endAngle-this.startAngle)%360;if(0===r)e=["\n'];else{var n=i(this.startAngle),s=i(this.endAngle),o=this.radius;e=['180?"1":"0")+" 1"," "+t.util.cos(s)*o+" "+t.util.sin(s)*o,'" ',"COMMON_PARTS"," />\n"]}return e},_render:function(e){e.beginPath(),e.arc(0,0,this.radius,i(this.startAngle),i(this.endAngle),!1),this._renderPaintInOrder(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){return this.radius=e,this.set("width",2*e).set("height",2*e)}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,i){var r,n=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!("radius"in(r=n)&&r.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,i(new t.Circle(n))},t.Circle.fromObject=function(e,i){t.Object._fromObject("Circle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={});t.Triangle?t.warn("fabric.Triangle is already defined"):(t.Triangle=t.util.createClass(t.Object,{type:"triangle",width:100,height:100,_render:function(e){var t=this.width/2,i=this.height/2;e.beginPath(),e.moveTo(-t,i),e.lineTo(0,-i),e.lineTo(t,i),e.closePath(),this._renderPaintInOrder(e)},_toSVG:function(){var e=this.width/2,t=this.height/2;return["']}}),t.Triangle.fromObject=function(e,i){return t.Object._fromObject("Triangle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=2*Math.PI;t.Ellipse?t.warn("fabric.Ellipse is already defined."):(t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this.set("rx",e&&e.rx||0),this.set("ry",e&&e.ry||0)},_set:function(e,t){switch(this.callSuper("_set",e,t),e){case"rx":this.rx=t,this.set("width",2*t);break;case"ry":this.ry=t,this.set("height",2*t)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']},_render:function(e){e.beginPath(),e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(0,0,this.rx,0,i,!1),e.restore(),this._renderPaintInOrder(e)}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,i){var r=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new t.Ellipse(r))},t.Ellipse.fromObject=function(e,i){t.Object._fromObject("Ellipse",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend;t.Rect?t.warn("fabric.Rect is already defined"):(t.Rect=t.util.createClass(t.Object,{stateProperties:t.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==t||0!==i,h=.4477152502;e.beginPath(),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-h*t,o,s+r,o+h*i,s+r,o+i),e.lineTo(s+r,o+n-i),a&&e.bezierCurveTo(s+r,o+n-h*i,s+r-h*t,o+n,s+r-t,o+n),e.lineTo(s+t,o+n),a&&e.bezierCurveTo(s+h*t,o+n,s,o+n-h*i,s,o+n-i),e.lineTo(s,o+i),a&&e.bezierCurveTo(s,o+h*i,s+h*t,o,s+t,o),e.closePath(),this._renderPaintInOrder(e)},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r,n){if(!e)return r(null);n=n||{};var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.height=s.height||0,s.width=s.width||0;var o=new t.Rect(i(n?t.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},t.Rect.fromObject=function(e,i){return t.Object._fromObject("Rect",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.array.min,n=t.util.array.max,s=t.util.toFixed,o=t.util.projectStrokeOnPoints;t.Polyline?t.warn("fabric.Polyline is already defined"):(t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:t.Object.prototype.cacheProperties.concat("points"),initialize:function(e,t){t=t||{},this.points=e||[],this.callSuper("initialize",t),this._setPositionDimensions(t)},_projectStrokeOnPoints:function(){return o(this.points,this,!0)},_setPositionDimensions:function(e){var t,i=this._calcDimensions(e),r=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-r,this.height=i.height-r,e.fromSVG||(t=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+r/2,y:i.top-this.strokeWidth/2+r/2},"left","top",this.originX,this.originY)),void 0===e.left&&(this.left=e.fromSVG?i.left:t.x),void 0===e.top&&(this.top=e.fromSVG?i.top:t.y),this.pathOffset={x:i.left+this.width/2+r/2,y:i.top+this.height/2+r/2}},_calcDimensions:function(){var e=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,t=r(e,"x")||0,i=r(e,"y")||0;return{left:t,top:i,width:(n(e,"x")||0)-t,height:(n(e,"y")||0)-i}},toObject:function(e){return i(this.callSuper("toObject",e),{points:this.points.concat()})},_toSVG:function(){for(var e=[],i=this.pathOffset.x,r=this.pathOffset.y,n=t.Object.NUM_FRACTION_DIGITS,o=0,a=this.points.length;o\n']},commonRender:function(e){var t,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;e.beginPath(),e.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(e){return n(this.callSuper("toObject",e),{path:this.path.map((function(e){return e.slice()}))})},toDatalessObject:function(e){var t=this.toObject(["sourcePath"].concat(e));return t.sourcePath&&delete t.path,t},_toSVG:function(){return["\n"]},_getOffsetTransform:function(){var e=t.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,e)+", "+o(-this.pathOffset.y,e)+")"},toClipPathSVG:function(e){var t=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},toSVG:function(e){var t=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var e,n,s=[],o=[],a=0,h=0,l=0,c=0,u=0,d=this.path.length;u"},addWithUpdate:function(e){var i=!!this.group;return this._restoreObjectsState(),t.util.resetObjectTransform(this),e&&(i&&t.util.removeTransformFromObject(e,this.group.calcTransformMatrix()),this._objects.push(e),e.group=this,e._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),t.util.resetObjectTransform(this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(e){this.dirty=!0,e.group=this,e._set("canvas",this.canvas)},_onObjectRemoved:function(e){this.dirty=!0,delete e.group},_set:function(e,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(e,i);if("canvas"===e)for(;r--;)this._objects[r]._set(e,i);t.Object.prototype._set.call(this,e,i)},toObject:function(e){var i=this.includeDefaultValues,r=this._objects.filter((function(e){return!e.excludeFromExport})).map((function(t){var r=t.includeDefaultValues;t.includeDefaultValues=i;var n=t.toObject(e);return t.includeDefaultValues=r,n})),n=t.Object.prototype.toObject.call(this,e);return n.objects=r,n},toDatalessObject:function(e){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map((function(t){var i=t.includeDefaultValues;t.includeDefaultValues=n;var r=t.toDatalessObject(e);return t.includeDefaultValues=i,r}))}var s=t.Object.prototype.toDatalessObject.call(this,e);return s.objects=i,s},render:function(e){this._transformDone=!0,this.callSuper("render",e),this._transformDone=!1},shouldCache:function(){var e=t.Object.prototype.shouldCache.call(this);if(e)for(var i=0,r=this._objects.length;i\n"],i=0,r=this._objects.length;i\n"),t},getSvgStyles:function(){var e=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",t=this.visible?"":" visibility: hidden;";return[e,this.getSvgFilter(),t].join("")},toClipPathSVG:function(e){for(var t=[],i=0,r=this._objects.length;i"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(e,t,i){e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",e,t),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;r\n','\t\n',"\n"),o=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(a='" image-rendering="optimizeSpeed'),i.push("\t\n"),this.stroke||this.strokeDashArray){var l=this.fill;this.fill=null,e=["\t\n'],this.fill=l}return"fill"!==this.paintFirst?t.concat(e,i):t.concat(i,e)},getSrc:function(e){var t=e?this._element:this._originalElement;return t?t.toDataURL?t.toDataURL():this.srcFromAttribute?t.getAttribute("src"):t.src:this.src||""},setSrc:function(e,t,i){return x.util.loadImage(e,(function(e,r){this.setElement(e,i),this._setWidthHeight(),t&&t(this,r)}),this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var e=this.resizeFilter,t=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!e||r>t&&n>t)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);x.filterBackend||(x.filterBackend=x.initFilterBackend());var o=x.util.createCanvasElement(),a=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,h=s.width,l=s.height;o.width=h,o.height=l,this._element=o,this._lastScaleX=e.scaleX=r,this._lastScaleY=e.scaleY=n,x.filterBackend.applyFilters([e],s,h,l,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(e){if(e=(e=e||this.filters||[]).filter((function(e){return e&&!e.isNeutralState()})),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===e.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var t=this._originalElement,i=t.naturalWidth||t.width,r=t.naturalHeight||t.height;if(this._element===this._originalElement){var n=x.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return x.filterBackend||(x.filterBackend=x.initFilterBackend()),x.filterBackend.applyFilters(e,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(e),this._renderPaintInOrder(e)},drawCacheOnCanvas:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),x.Object.prototype.drawCacheOnCanvas.call(this,e)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(e){var t=this._element;if(t){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,s=this.height,o=Math.min,a=Math.max,h=a(this.cropX,0),l=a(this.cropY,0),c=t.naturalWidth||t.width,u=t.naturalHeight||t.height,d=h*i,f=l*r,g=o(n*i,c-d),_=o(s*r,u-f),p=-n/2,m=-s/2,v=o(n,c/i-h),y=o(s,u/r-l);t&&e.drawImage(t,d,f,g,_,p,m,v,y)}},_needsResize:function(){var e=this.getTotalObjectScaling();return e.scaleX!==this._lastScaleX||e.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(e,t){this.setElement(x.util.getById(e),t),x.util.addClass(this.getElement(),x.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e,t){e&&e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){e||(e={});var t=this.getElement();this.width=e.width||t.naturalWidth||t.width||0,this.height=e.height||t.naturalHeight||t.height||0},parsePreserveAspectRatioAttribute:function(){var e,t=x.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,h=0,l=0,c=this.width,u=this.height,d={width:c,height:u};return!t||"none"===t.alignX&&"none"===t.alignY?(n=c/i,s=u/r):("meet"===t.meetOrSlice&&(e=(c-i*(n=s=x.util.findScaleToFit(this._element,d)))/2,"Min"===t.alignX&&(o=-e),"Max"===t.alignX&&(o=e),e=(u-r*s)/2,"Min"===t.alignY&&(a=-e),"Max"===t.alignY&&(a=e)),"slice"===t.meetOrSlice&&(e=i-c/(n=s=x.util.findScaleToCover(this._element,d)),"Mid"===t.alignX&&(h=e/2),"Max"===t.alignX&&(h=e),e=r-u/s,"Mid"===t.alignY&&(l=e/2),"Max"===t.alignY&&(l=e),i=c/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:h,cropY:l}}}),x.Image.CSS_CANVAS="canvas-img",x.Image.prototype.getSvgSrc=x.Image.prototype.getSrc,x.Image.fromObject=function(e,t){var i=x.util.object.clone(e);x.util.loadImage(i.src,(function(e,r){r?t&&t(null,!0):x.Image.prototype._initFilters.call(i,i.filters,(function(r){i.filters=r||[],x.Image.prototype._initFilters.call(i,[i.resizeFilter],(function(r){i.resizeFilter=r[0],x.util.enlivenObjectEnlivables(i,i,(function(){var r=new x.Image(e,i);t(r,!1)}))}))}))}),null,i.crossOrigin)},x.Image.fromURL=function(e,t,i){x.util.loadImage(e,(function(e,r){t&&t(new x.Image(e,i),r)}),null,i&&i.crossOrigin)},x.Image.ATTRIBUTE_NAMES=x.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),x.Image.fromElement=function(e,i,r){var n=x.parseAttributes(e,x.Image.ATTRIBUTE_NAMES);x.Image.fromURL(n["xlink:href"],i,t(r?x.util.object.clone(r):{},n))})}(t),x.util.object.extend(x.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.angle%360;return e>0?90*Math.round((e-1)/90):90*Math.round(e/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(e){var t=function(){},i=(e=e||{}).onComplete||t,r=e.onChange||t,n=this;return x.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){n.rotate(e),r()},onComplete:function(){n.setCoords(),i()}})}}),x.util.object.extend(x.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function e(e,t){var i="precision "+t+" float;\nvoid main(){}",r=e.createShader(e.FRAGMENT_SHADER);return e.shaderSource(r,i),e.compileShader(r),!!e.getShaderParameter(r,e.COMPILE_STATUS)}function t(e){e&&e.tileSize&&(this.tileSize=e.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}x.isWebglSupported=function(t){if(x.isLikelyNode)return!1;t=t||x.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){x.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=x.maxTextureSize>=t;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(e(r,s[o])){x.webGlPrecision=s[o];break}}return this.isSupported=n,n},x.WebglFilterBackend=t,t.prototype={tileSize:2048,resources:{},setupGLContext:function(e,t){this.dispose(),this.createWebGLCanvas(e,t),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(e,t)},chooseFastestCopyGLTo2DMethod:function(e,t){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(e){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o=x.util.createCanvasElement(),a=new ArrayBuffer(e*t*4);if(x.forceGLPutImageData)return this.imageBuffer=a,void(this.copyGLTo2D=E);var h,l,c={imageBuffer:a,destinationWidth:e,destinationHeight:t,targetCanvas:o};o.width=e,o.height=t,h=window.performance.now(),I.call(c,this.gl,c),l=window.performance.now()-h,h=window.performance.now(),E.call(c,this.gl,c),l>window.performance.now()-h?(this.imageBuffer=a,this.copyGLTo2D=E):this.copyGLTo2D=I}},createWebGLCanvas:function(e,t){var i=x.util.createCanvasElement();i.width=e,i.height=t;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(e,t,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,t));var h={originalWidth:t.width||t.originalWidth,originalHeight:t.height||t.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&t),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&t),passes:e.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},l=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,l),e.forEach((function(e){e&&e.applyTo(h)})),function(e){var t=e.targetCanvas,i=t.width,r=t.height,n=e.destinationWidth,s=e.destinationHeight;i===n&&r===s||(t.width=n,t.height=s)}(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(l),n.getContext("2d").setTransform(1,0,0,1,0,0),h},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(e,t,i,r){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),r?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,t,i,0,e.RGBA,e.UNSIGNED_BYTE,null),n},getCachedTexture:function(e,t){if(this.textureCache[e])return this.textureCache[e];var i=this.createTexture(this.gl,t.width,t.height,t);return this.textureCache[e]=i,i},evictCachesForKey:function(e){this.textureCache[e]&&(this.gl.deleteTexture(this.textureCache[e]),delete this.textureCache[e])},copyGLTo2D:I,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var e=this.gl,t={renderer:"",vendor:""};if(!e)return t;var i=e.getExtension("WEBGL_debug_renderer_info");if(i){var r=e.getParameter(i.UNMASKED_RENDERER_WEBGL),n=e.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(t.renderer=r.toLowerCase()),n&&(t.vendor=n.toLowerCase())}return this.gpuInfo=t,t}}}(),function(){var e=function(){};function t(){}x.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(e,t,i,r,n){var s=n.getContext("2d");s.drawImage(t,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:t,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return e.forEach((function(e){e.applyTo(o)})),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),x.Image=x.Image||{},x.Image.filters=x.Image.filters||{},x.Image.filters.BaseFilter=x.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(e){e&&this.setOptions(e)},setOptions:function(e){for(var t in e)this[t]=e[t]},createProgram:function(e,t,i){t=t||this.fragmentSource,i=i||this.vertexSource,"highp"!==x.webGlPrecision&&(t=t.replace(/precision highp float/g,"precision "+x.webGlPrecision+" float"));var r=e.createShader(e.VERTEX_SHADER);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+e.getShaderInfoLog(r));var n=e.createShader(e.FRAGMENT_SHADER);if(e.shaderSource(n,t),e.compileShader(n),!e.getShaderParameter(n,e.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+e.getShaderInfoLog(n));var s=e.createProgram();if(e.attachShader(s,r),e.attachShader(s,n),e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+e.getProgramInfoLog(s));var o=this.getAttributeLocations(e,s),a=this.getUniformLocations(e,s)||{};return a.uStepW=e.getUniformLocation(s,"uStepW"),a.uStepH=e.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(e,t){return{aPosition:e.getAttribLocation(t,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(e,t,i){var r=t.aPosition,n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,2,e.FLOAT,!1,0,0),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW)},_setupFrameBuffer:function(e){var t,i,r=e.context;e.passes>1?(t=e.destinationWidth,i=e.destinationHeight,e.sourceWidth===t&&e.sourceHeight===i||(r.deleteTexture(e.targetTexture),e.targetTexture=e.filterBackend.createTexture(r,t,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(e){e.passes--,e.pass++;var t=e.targetTexture;e.targetTexture=e.sourceTexture,e.sourceTexture=t},isNeutralState:function(){var e=this.mainParameter,t=x.Image.filters[this.type].prototype;if(e){if(Array.isArray(t[e])){for(var i=t[e].length;i--;)if(this[e][i]!==t[e][i])return!1;return!0}return t[e]===this[e]}return!1},applyTo:function(e){e.webgl?(this._setupFrameBuffer(e),this.applyToWebGL(e),this._swapTextures(e)):this.applyTo2d(e)},retrieveShader:function(e){return e.programCache.hasOwnProperty(this.type)||(e.programCache[this.type]=this.createProgram(e.context)),e.programCache[this.type]},applyToWebGL:function(e){var t=e.context,i=this.retrieveShader(e);0===e.pass&&e.originalTexture?t.bindTexture(t.TEXTURE_2D,e.originalTexture):t.bindTexture(t.TEXTURE_2D,e.sourceTexture),t.useProgram(i.program),this.sendAttributeData(t,i.attributeLocations,e.aPosition),t.uniform1f(i.uniformLocations.uStepW,1/e.sourceWidth),t.uniform1f(i.uniformLocations.uStepH,1/e.sourceHeight),this.sendUniformData(t,i.uniformLocations),t.viewport(0,0,e.destinationWidth,e.destinationHeight),t.drawArrays(t.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(e,t,i){e.activeTexture(i),e.bindTexture(e.TEXTURE_2D,t),e.activeTexture(e.TEXTURE0)},unbindAdditionalTexture:function(e,t){e.activeTexture(t),e.bindTexture(e.TEXTURE_2D,null),e.activeTexture(e.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(e){this[this.mainParameter]=e},sendUniformData:function(){},createHelpLayer:function(e){if(!e.helpLayer){var t=document.createElement("canvas");t.width=e.sourceWidth,t.height=e.sourceHeight,e.helpLayer=t}},toObject:function(){var e={type:this.type},t=this.mainParameter;return t&&(e[t]=this[t]),e},toJSON:function(){return this.toObject()}}),x.Image.filters.BaseFilter.fromObject=function(e,t){var i=new x.Image.filters[e.type](e);return t&&t(i),i},function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(e){this.callSuper("initialize",e),this.matrix=this.matrix.slice(0)},applyTo2d:function(e){var t,i,r,n,s,o=e.imageData.data,a=o.length,h=this.matrix,l=this.colorsOnly;for(s=0;s=S||o<0||o>=y||(h=4*(a*y+o),l=p[f*m+d],t+=_[h]*l,i+=_[h+1]*l,r+=_[h+2]*l,C||(n+=_[h+3]*l));w[s]=t,w[s+1]=i,w[s+2]=r,w[s+3]=C?_[s+3]:n}e.imageData=b},getUniformLocations:function(e,t){return{uMatrix:e.getUniformLocation(t,"uMatrix"),uOpaque:e.getUniformLocation(t,"uOpaque"),uHalfSize:e.getUniformLocation(t,"uHalfSize"),uSize:e.getUniformLocation(t,"uSize")}},sendUniformData:function(e,t){e.uniform1fv(t.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(e){var t,i,r=e.imageData.data,n=r.length,s=this.mode;for(t=0;tl[0]&&n>l[1]&&s>l[2]&&r 0.0) {\n"+this.fragmentSource[e]+"}\n}"},retrieveShader:function(e){var t,i=this.type+"_"+this.mode;return e.programCache.hasOwnProperty(i)||(t=this.buildSource(this.mode),e.programCache[i]=this.createProgram(e.context,t)),e.programCache[i]},applyTo2d:function(e){var i,r,n,s,o,a,h,l=e.imageData.data,c=l.length,u=1-this.alpha;i=(h=new t.Color(this.color).getSource())[0]*this.alpha,r=h[1]*this.alpha,n=h[2]*this.alpha;for(var d=0;d=e||t<=-e)return 0;if(t<1.1920929e-7&&t>-1.1920929e-7)return 1;var i=(t*=Math.PI)/e;return a(t)/t*a(i)/i}},applyTo2d:function(e){var t=e.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=t.width,a=t.height,h=o(s*i),l=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(e,s,a,h,l):"hermite"===this.resizeType?n=this.hermiteFastResize(e,s,a,h,l):"bilinear"===this.resizeType?n=this.bilinearFiltering(e,s,a,h,l):"lanczos"===this.resizeType&&(n=this.lanczosResize(e,s,a,h,l)),e.imageData=n},sliceByTwo:function(e,i,n,s,o){var a,h,l=e.imageData,c=.5,u=!1,d=!1,f=i*c,g=n*c,_=t.filterBackend.resources,p=0,m=0,v=i,y=0;for(_.sliceByTwo||(_.sliceByTwo=document.createElement("canvas")),((a=_.sliceByTwo).width<1.5*i||a.height=t)){M=r(1e3*s(x-b.x)),S[M]||(S[M]={});for(var F=w.y-y;F<=w.y+y;F++)F<0||F>=o||(L=r(1e3*s(F-b.y)),S[M][L]||(S[M][L]=f(n(i(M*p,2)+i(L*m,2))/1e3)),(T=S[M][L])>0&&(E+=T,O+=T*c[I=4*(F*t+x)],A+=T*c[I+1],R+=T*c[I+2],D+=T*c[I+3]))}d[I=4*(C*a+h)]=O/E,d[I+1]=A/E,d[I+2]=R/E,d[I+3]=D/E}return++h1&&L<-1||(y=2*L*L*L-3*L*L+1)>0&&(T+=y*f[3+(M=4*(D+E*t))],b+=y,f[M+3]<255&&(y=y*f[M+3]/250),w+=y*f[M],C+=y*f[M+1],x+=y*f[M+2],S+=y)}_[v]=w/S,_[v+1]=C/S,_[v+2]=x/S,_[v+3]=T/b}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),t.Image.filters.Resize.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(e){if(0!==this.contrast){var t,i=e.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));for(t=0;t1&&(t=1/this.aspectRatio):this.aspectRatio<1&&(t=this.aspectRatio),e=t*this.blur*.12,this.horizontal?i[0]=e:i[1]=e,i}}),i.Blur.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(e){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,e)},applyTo2d:function(e){var t,i=e.imageData.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),t=0,n=256;t'},_getCacheCanvasDimensions:function(){var e=this.callSuper("_getCacheCanvasDimensions"),t=this.fontSize;return e.width+=t*e.zoomX,e.height+=t*e.zoomY,e},_render:function(e){var t=this.path;t&&!t.isNotVisible()&&t._render(e),this._setTextStyles(e),this._renderTextLinesBackground(e),this._renderTextDecoration(e,"underline"),this._renderText(e),this._renderTextDecoration(e,"overline"),this._renderTextDecoration(e,"linethrough")},_renderText:function(e){"stroke"===this.paintFirst?(this._renderTextStroke(e),this._renderTextFill(e)):(this._renderTextFill(e),this._renderTextStroke(e))},_setTextStyles:function(e,t,i){if(e.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":e.textBaseline="middle";break;case"ascender":e.textBaseline="top";break;case"descender":e.textBaseline="bottom"}e.font=this._getFontDeclaration(t,i)},calcTextWidth:function(){for(var e=this.getLineWidth(0),t=1,i=this._textLines.length;te&&(e=r)}return e},_renderTextLine:function(e,t,i,r,n,s){this._renderChars(e,t,i,r,n,s)},_renderTextLinesBackground:function(e){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var t,i,r,n,s,o,a,h=e.fillStyle,l=this._getLeftOffset(),c=this._getTopOffset(),u=0,d=0,f=this.path,g=0,_=this._textLines.length;g<_;g++)if(t=this.getHeightOfLine(g),this.textBackgroundColor||this.styleHas("textBackgroundColor",g)){r=this._textLines[g],i=this._getLineLeftOffset(g),d=0,u=0,n=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var p=0,m=r.length;p=0:ia?u%=a:u<0&&(u+=a),this._setGraphemeOnPath(u,s,o),u+=s.kernedWidth}return{width:h,numOfSpaces:0}},_setGraphemeOnPath:function(e,i,r){var n=e+i.kernedWidth/2,s=this.path,o=t.util.getPointOnPath(s.path,n,s.segmentsInfo);i.renderLeft=o.x-r.x,i.renderTop=o.y-r.y,i.angle=o.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(e,t,i,r,n){var s,o=this.getCompleteStyleDeclaration(t,i),a=r?this.getCompleteStyleDeclaration(t,i-1):{},h=this._measureChar(e,o,r,a),l=h.kernedWidth,c=h.width;0!==this.charSpacing&&(c+=s=this._getWidthOfCharSpacing(),l+=s);var u={width:c,left:0,height:o.fontSize,kernedWidth:l,deltaY:o.deltaY};if(i>0&&!n){var d=this.__charBounds[t][i-1];u.left=d.left+d.width+h.kernedWidth-h.width}return u},getHeightOfLine:function(e){if(this.__lineHeights[e])return this.__lineHeights[e];for(var t=this._textLines[e],i=this.getHeightOfChar(e,0),r=1,n=t.length;r0){var E=v+s+u;"rtl"===this.direction&&(E=this.width-E-d),l&&m&&(e.fillStyle=m,e.fillRect(E,c+w*r+o,d,this.fontSize/15)),u=f.left,d=f.width,l=g,m=p,r=n,o=a}else d+=f.kernedWidth;E=v+s+u,"rtl"===this.direction&&(E=this.width-E-d),e.fillStyle=p,g&&p&&e.fillRect(E,c+w*r+o,d-b,this.fontSize/15),y+=i}else y+=i;this._removeShadow(e)}},_getFontDeclaration:function(e,i){var r=e||this,n=this.fontFamily,s=t.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||s?r.fontFamily:'"'+r.fontFamily+'"';return[t.isLikelyNode?r.fontWeight:r.fontStyle,t.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",e)))},_splitTextIntoLines:function(e){for(var i=e.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-1&&(e.underline=!0),e.textDecoration.indexOf("line-through")>-1&&(e.linethrough=!0),e.textDecoration.indexOf("overline")>-1&&(e.overline=!0),delete e.textDecoration)}x.IText=x.util.createClass(x.Text,x.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(e,t){this.callSuper("initialize",e,t),this.initBehavior()},setSelectionStart:function(e){e=Math.max(e,0),this._updateAndFire("selectionStart",e)},setSelectionEnd:function(e){e=Math.min(e,this.text.length),this._updateAndFire("selectionEnd",e)},_updateAndFire:function(e,t){this[e]!==t&&(this._fireSelectionChanged(),this[e]=t),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(e){this.clearContextTop(),this.callSuper("render",e),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(e){this.callSuper("_render",e)},clearContextTop:function(e){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this.canvas.contextTop,i=this.canvas.viewportTransform;t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(t),this._clearTextArea(t),e||t.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this._getCursorBoundaries(),t=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(e){var t=this.width+4,i=this.height+4;e.clearRect(-t/2,-i/2,t,i)},_getCursorBoundaries:function(e){void 0===e&&(e=this.selectionStart);var t=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(e);return{left:t,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(e){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var t,i,r,n,s=0,o=0,a=this.get2DCursorLocation(e);r=a.charIndex,i=a.lineIndex;for(var h=0;h0?o:0)},"rtl"===this.direction&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(e,t){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=e.topOffset,l=this.getValueOfPropertyAt(r,n,"deltaY");h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(e,t),t.fillStyle=this.cursorColor||this.getValueOfPropertyAt(r,n,"fill"),t.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,t.fillRect(e.left+e.leftOffset-a/2,h+e.top+l,a,s)},renderSelection:function(e,t){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,h=o.lineIndex,l=s.charIndex<0?0:s.charIndex,c=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var d,f=this._getLineLeftOffset(u)||0,g=this.getHeightOfLine(u),_=0,p=0;if(u===a&&(_=this.__charBounds[a][l].left),u>=a&&u1)&&(g/=this.lineHeight);var v=e.left+f+_,y=p-_,S=g,b=0;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",S=1,b=g):t.fillStyle=this.selectionColor,"rtl"===this.direction&&(v=this.width-v-y),t.fillRect(v,e.top+e.topOffset+b,y,S),e.topOffset+=d}},getCurrentCharFontSize:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fontSize")},getCurrentCharColor:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fill")},_getCurrentCharIndex:function(){var e=this.get2DCursorLocation(this.selectionStart,!0),t=e.charIndex>0?e.charIndex-1:0;return{l:e.lineIndex,c:t}}}),x.IText.fromObject=function(t,i){if(e(t),t.styles)for(var r in t.styles)for(var n in t.styles[r])e(t.styles[r][n]);x.Object._fromObject("IText",t,i,"text")}}(),C=x.util.object.clone,x.util.object.extend(x.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var e=this;this.on("added",(function(){var t=e.canvas;t&&(t._hasITextHandlers||(t._hasITextHandlers=!0,e._initCanvasHandlers(t)),t._iTextInstances=t._iTextInstances||[],t._iTextInstances.push(e))}))},initRemovedHandler:function(){var e=this;this.on("removed",(function(){var t=e.canvas;t&&(t._iTextInstances=t._iTextInstances||[],x.util.removeFromArray(t._iTextInstances,e),0===t._iTextInstances.length&&(t._hasITextHandlers=!1,e._removeCanvasHandlers(t)))}))},_initCanvasHandlers:function(e){e._mouseUpITextHandler=function(){e._iTextInstances&&e._iTextInstances.forEach((function(e){e.__isMousedown=!1}))},e.on("mouse:up",e._mouseUpITextHandler)},_removeCanvasHandlers:function(e){e.off("mouse:up",e._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(e,t,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},e.animate("_currentCursorOpacity",t,{duration:i,onComplete:function(){n.isAborted||e[r]()},onChange:function(){e.canvas&&e.selectionStart===e.selectionEnd&&e.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout((function(){e._currentTickCompleteState=e._animateCursor(e,0,this.cursorDuration/2,"_tick")}),100)},initDelayedCursor:function(e){var t=this,i=e?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout((function(){t._tick()}),i)},abortCursorAnimation:function(){var e=this._currentTickState||this._currentTickCompleteState,t=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,e&&t&&t.clearContext(t.contextTop||t.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(e){var t=0,i=e-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i--;for(;/\S/.test(this._text[i])&&i>-1;)t++,i--;return e-t},findWordBoundaryRight:function(e){var t=0,i=e;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i++;for(;/\S/.test(this._text[i])&&i-1;)t++,i--;return e-t},findLineBoundaryRight:function(e){for(var t=0,i=e;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=t):(this.selectionStart=t,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(e,t,i){var r=i.slice(0,e),n=x.util.string.graphemeSplit(r).length;if(e===t)return{selectionStart:n,selectionEnd:n};var s=i.slice(e,t);return{selectionStart:n,selectionEnd:n+x.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(e,t,i){var r=i.slice(0,e).join("").length;return e===t?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(e,t).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var e=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=e.selectionStart,this.hiddenTextarea.selectionEnd=e.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var e=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=e.selectionEnd,this.inCompositionMode||(this.selectionStart=e.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var e=this._calcTextareaPosition();this.hiddenTextarea.style.left=e.left,this.hiddenTextarea.style.top=e.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var e=this.inCompositionMode?this.compositionStart:this.selectionStart,t=this._getCursorBoundaries(e),i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=t.leftOffset,a=this.calcTransformMatrix(),h={x:t.left+o,y:t.top+t.topOffset+s},l=this.canvas.getRetinaScaling(),c=this.canvas.upperCanvasEl,u=c.width/l,d=c.height/l,f=u-s,g=d-s,_=c.clientWidth/u,p=c.clientHeight/d;return h=x.util.transformPoint(h,a),(h=x.util.transformPoint(h,this.canvas.viewportTransform)).x*=_,h.y*=p,h.x<0&&(h.x=0),h.x>f&&(h.x=f),h.y<0&&(h.y=0),h.y>g&&(h.y=g),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var e=this._textBeforeEdit!==this.text,t=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,t&&(t.blur&&t.blur(),t.parentNode&&t.parentNode.removeChild(t)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),e&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),e&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var e in this.styles)this._textLines[e]||delete this.styles[e]},removeStyleFromTo:function(e,t){var i,r,n=this.get2DCursorLocation(e,!0),s=this.get2DCursorLocation(t,!0),o=n.lineIndex,a=n.charIndex,h=s.lineIndex,l=s.charIndex;if(o!==h){if(this.styles[o])for(i=a;i=l&&(r[c-d]=r[u],delete r[u])}},shiftLineStyles:function(e,t){var i=C(this.styles);for(var r in this.styles){var n=parseInt(r,10);n>e&&(this.styles[n+t]=i[n],i[n-t]||delete this.styles[n])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,t,i,r){var n,s={},o=!1,a=this._unwrappedTextLines[e].length===t;for(var h in i||(i=1),this.shiftLineStyles(e,i),this.styles[e]&&(n=this.styles[e][0===t?t:t-1]),this.styles[e]){var l=parseInt(h,10);l>=t&&(o=!0,s[l-t]=this.styles[e][h],a&&0===t||delete this.styles[e][h])}var c=!1;for(o&&!a&&(this.styles[e+i]=s,c=!0),c&&i--;i>0;)r&&r[i-1]?this.styles[e+i]={0:C(r[i-1])}:n?this.styles[e+i]={0:C(n)}:delete this.styles[e+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(e,t,i,r){this.styles||(this.styles={});var n=this.styles[e],s=n?C(n):{};for(var o in i||(i=1),s){var a=parseInt(o,10);a>=t&&(n[a+i]=s[a],s[a-i]||delete n[a])}if(this._forceClearCache=!0,r)for(;i--;)Object.keys(r[i]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][t+i]=C(r[i]));else if(n)for(var h=n[t?t-1:1];h&&i--;)this.styles[e][t+i]=C(h)},insertNewStyleBlock:function(e,t,i){for(var r=this.get2DCursorLocation(t,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s),o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&this.styles[r.lineIndex+o]&&i[0]&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(e,t,i){i<=e?(t===e?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=e),this.selectionStart=i):i>e&&ie?this.selectionStart=e:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>e?this.selectionEnd=e:this.selectionEnd<0&&(this.selectionEnd=0)}}),x.util.object.extend(x.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(e){if(this.canvas){this.__newClickTime=+new Date;var t=e.pointer;this.isTripleClick(t)&&(this.fire("tripleclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(e){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(e.e))},tripleClickHandler:function(e){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(e.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(e.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(e){if(this.__isMousedown=!1,!(!this.editable||this.group||e.transform&&e.transform.actionPerformed||e.e.button&&1!==e.e.button)){if(this.canvas){var t=this.canvas._activeObject;if(t&&t!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(e.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e),i=this.selectionStart,r=this.selectionEnd;e.shiftKey?this.setSelectionStartEndWithShift(i,r,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(e){for(var t,i=this.getLocalPointer(e),r=0,n=0,s=0,o=0,a=0,h=0,l=this._textLines.length;h0&&(o+=this._textLines[h-1].length+this.missingNewlineOffset(h-1));n=this._getLineLeftOffset(a)*this.scaleX,t=this._textLines[a],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+n);for(var c=0,u=t.length;cs||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),x.util.object.extend(x.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=x.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var e=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+e.top+"; left: "+e.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+e.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):x.document.body.appendChild(this.hiddenTextarea),x.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),x.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),x.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),x.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(x.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(this.isEditing){var t="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(e.keyCode in t)this[t[e.keyCode]](e);else{if(!(e.keyCode in this.ctrlKeysMapDown)||!e.ctrlKey&&!e.metaKey)return;this[this.ctrlKeysMapDown[e.keyCode]](e)}e.stopImmediatePropagation(),e.preventDefault(),e.keyCode>=33&&e.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(e){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:e.keyCode in this.ctrlKeysMapUp&&(e.ctrlKey||e.metaKey)&&(this[this.ctrlKeysMapUp[e.keyCode]](e),e.stopImmediatePropagation(),e.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(e){var t=this.fromPaste;if(this.fromPaste=!1,e&&e.stopPropagation(),this.isEditing){var i,r,n,s,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,l=a.length,c=l-h,u=this.selectionStart,d=this.selectionEnd,f=u!==d;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),_=u>g.selectionStart;f?(i=this._text.slice(u,d),c+=d-u):l0&&(r+=(i=this.__charBounds[e][t-1]).left+i.width),r},getDownCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||e.metaKey||34===e.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o);return this._textLines[n].slice(s).length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(e,t){return e.shiftKey&&this.selectionStart!==this.selectionEnd&&t?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||e.metaKey||33===e.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s),l=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-h.length+(1-l)},_getIndexOnLine:function(e,t){for(var i,r,n=this._textLines[e],s=this._getLineLeftOffset(e),o=0,a=0,h=n.length;at){r=!0;var l=s-i,c=s,u=Math.abs(l-t);o=Math.abs(c-t)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",e)},moveCursorUp:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",e)},_moveCursorUpOrDown:function(e,t){var i=this["get"+e+"CursorOffset"](t,"right"===this._selectionDirection);t.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(e){var t="left"===this._selectionDirection?this.selectionStart+e:this.selectionEnd+e;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,t),0!==e},moveCursorWithoutShift:function(e){return e<0?(this.selectionStart+=e,this.selectionEnd=this.selectionStart):(this.selectionEnd+=e,this.selectionStart=this.selectionEnd),0!==e},moveCursorLeft:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",e)},_move:function(e,t,i){var r;if(e.altKey)r=this["findWordBoundary"+i](this[t]);else{if(!e.metaKey&&35!==e.keyCode&&36!==e.keyCode)return this[t]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[t])}if(void 0!==typeof r&&this[t]!==r)return this[t]=r,!0},_moveLeft:function(e,t){return this._move(e,t,"Left")},_moveRight:function(e,t){return this._move(e,t,"Right")},moveCursorLeftWithoutShift:function(e){var t=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(t=this._moveLeft(e,"selectionStart")),this.selectionEnd=this.selectionStart,t},moveCursorLeftWithShift:function(e){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(e,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(e,"selectionStart")):void 0},moveCursorRight:function(e){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",e)},_moveCursorLeftOrRight:function(e,t){var i="moveCursor"+e+"With";this._currentCursorOpacity=1,t.shiftKey?i+="Shift":i+="outShift",this[i](t)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(e){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(e,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(e){var t=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(t=this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t},removeChars:function(e,t){void 0===t&&(t=e+1),this.removeStyleFromTo(e,t),this._text.splice(e,t-e),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(e,t,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=x.util.string.graphemeSplit(e);this.insertNewStyleBlock(n,i,t),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var e=x.util.toFixed,t=/ +/g;x.util.object.extend(x.Text.prototype,{_toSVG:function(){var e=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(e.textTop,e.textLeft);return this._wrapSVGTextAndBg(t)},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(e){var t=this.getSvgTextDecoration(this);return[e.textBgRects.join(""),'\t\t",e.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(e,t){var i,r=[],n=[],s=e;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",x.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(e,t,i,r){var n,s,o,a,h,l=this.getHeightOfLine(t),c=-1!==this.textAlign.indexOf("justify"),u="",d=0,f=this._textLines[t];r+=l*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,_=f.length-1;g<=_;g++)h=g===_||this.charSpacing,u+=f[g],o=this.__charBounds[t][g],0===d?(i+=o.kernedWidth-o.width,d+=o.width):d+=o.kernedWidth,c&&!h&&this._reSpaceAndTab.test(f[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(t,g),s=this.getCompleteStyleDeclaration(t,g+1),h=this._hasStyleChangedForSvg(n,s)),h&&(a=this._getStyleDeclaration(t,g)||{},e.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=d,d=0)},_pushTextBgRect:function(t,i,r,n,s,o){var a=x.Object.NUM_FRACTION_DIGITS;t.push("\t\t\n')},_setSVGTextLineBg:function(e,t,i,r){for(var n,s,o=this._textLines[t],a=this.getHeightOfLine(t)/this.lineHeight,h=0,l=0,c=this.getValueOfPropertyAt(t,0,"textBackgroundColor"),u=0,d=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(e){for(var t=0,i=0,r=0,n={},s=0;s0?(i=0,r++,t++):!this.splitByGrapheme&&this._reSpaceAndTab.test(e.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:t,offset:i},r+=e.graphemeLines[s].length,i+=e.graphemeLines[s].length;return n},styleHas:function(e,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return t.Text.prototype.styleHas.call(this,e,i)},isEmptyStyles:function(e){if(!this.styles)return!0;var t,i,r=0,n=!1,s=this._styleMap[e],o=this._styleMap[e+1];for(var a in s&&(e=s.line,r=s.offset),o&&(n=o.line===e,t=o.offset),i=void 0===e?this.styles:{line:this.styles[e]})for(var h in i[a])if(h>=r&&(!n||hr&&!p?(a.push(h),h=[],s=f,p=!0):s+=m,p||o||h.push(d),h=h.concat(c),g=o?0:this._measureWord([d],i,u),u++,p=!1,f>_&&(_=f);return v&&a.push(h),_+n>this.dynamicMinWidth&&(this.dynamicMinWidth=_-m+n),a},isEndOfWrapping:function(e){return!this._styleMap[e+1]||this._styleMap[e+1].line!==this._styleMap[e].line},missingNewlineOffset:function(e){return this.splitByGrapheme?this.isEndOfWrapping(e)?1:0:1},_splitTextIntoLines:function(e){for(var i=t.Text.prototype._splitTextIntoLines.call(this,e),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s{},898:()=>{},245:()=>{}},k={};function B(e){var t=k[e];if(void 0!==t)return t.exports;var i=k[e]={exports:{}};return P[e](i,i.exports,B),i.exports}B.d=(e,t)=>{for(var i in t)B.o(t,i)&&!B.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},B.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var N={};(()=>{let e;B.d(N,{R:()=>e}),e="undefined"!=typeof document&&"undefined"!=typeof window?B(653).fabric:{version:"5.2.1"}})();var j=N.R; +const e="undefined"==typeof self,t=e?{}:self;let i,r,n,s,o;if("undefined"!=typeof navigator&&(i=navigator,r=i.userAgent,n=i.platform,s=i.mediaDevices),!e){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:i.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:n,search:"Win"},Mac:{str:n},Linux:{str:n}};let s="unknownBrowser",a=0,h="unknownOS";for(let t in e){const i=e[t]||{};let n=i.str||r,o=i.search||t,h=i.verStr||r,l=i.verSearch||t;if(l instanceof Array||(l=[l]),-1!=n.indexOf(o)){s=t;for(let e of l){let t=h.indexOf(e);if(-1!=t){a=parseFloat(h.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let n=i.str||r,s=i.search||e;if(-1!=n.indexOf(s)){h=e;break}}"Linux"==h&&-1!=r.indexOf("Windows NT")&&(h="HarmonyOS"),o={browser:s,version:a,OS:h}}e&&(o={browser:"ssr",version:0,OS:"ssr"});const a="undefined"!=typeof WebAssembly&&r&&!(/Safari/.test(r)&&!/Chrome/.test(r)&&/\(.+\s11_2_([2-6]).*\)/.test(r)),h=!("undefined"==typeof Worker),l=!(!s||!s.getUserMedia),c=async()=>{let e=!1;if(l)try{(await s.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===o.browser&&o.version>66||"Safari"===o.browser&&o.version>13||"OPR"===o.browser&&o.version>43||"Edge"===o.browser&&o.version;const u=(()=>{if(!e&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),d=" is not allowed to change after `createInstance` or `loadWasm` is called.",f=!e&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",g=!e&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",_=t=>{if(null==t)t=[];else{t=t instanceof Array?[...t]:[t];for(let i=0;ie&&"object"==typeof e&&"function"==typeof e.then;class w extends Promise{constructor(e){let t,i;super(((e,r)=>{t=e,i=r})),this._s="pending",this.resolve=e=>{this.isPending&&(b(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",i(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,b(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const i=await t;e===this._task&&this.resolve(i)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}var C=function(){this.init()};C.prototype={init:function(){var e=this||x;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var t=this||x;if(e=parseFloat(e),t.ctx||M(),void 0!==e&&e>=0&&e<=1){if(t._volume=e,t._muted)return t;t.usingWebAudio&&t.masterGain.gain.setValueAtTime(e,x.ctx.currentTime);for(var i=0;i=0;t--)e._howls[t].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,M()),e},codecs:function(e){return(this||x)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||x;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||x,t=null;try{t="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!t||"function"!=typeof t.canPlayType)return e;var i=t.canPlayType("audio/mpeg;").replace(/^no$/,""),r=e._navigator?e._navigator.userAgent:"",n=r.match(/OPR\/([0-6].)/g),s=n&&parseInt(n[0].split("/")[1],10)<33,o=-1!==r.indexOf("Safari")&&-1===r.indexOf("Chrome"),a=r.match(/Version\/(.*?) /),h=o&&a&&parseInt(a[1],10)<15;return e._codecs={mp3:!(s||!i&&!t.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!i,opus:!!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(t.canPlayType('audio/wav; codecs="1"')||t.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!t.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!t.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(t.canPlayType("audio/x-m4a;")||t.canPlayType("audio/m4a;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(t.canPlayType("audio/x-m4b;")||t.canPlayType("audio/m4b;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(t.canPlayType("audio/x-mp4;")||t.canPlayType("audio/mp4;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(h||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(h||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(t.canPlayType("audio/x-flac;")||t.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||x;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var t=function(i){for(;e._html5AudioPool.length0?o._seek:i._sprite[e][0]/1e3),l=Math.max(0,(i._sprite[e][0]+i._sprite[e][1])/1e3-h),c=1e3*l/Math.abs(o._rate),u=i._sprite[e][0]/1e3,d=(i._sprite[e][0]+i._sprite[e][1])/1e3;o._sprite=e,o._ended=!1;var f=function(){o._paused=!1,o._seek=h,o._start=u,o._stop=d,o._loop=!(!o._loop&&!i._sprite[e][2])};if(!(h>=d)){var g=o._node;if(i._webAudio){var _=function(){i._playLock=!1,f(),i._refreshBuffer(o);var e=o._muted||i._muted?0:o._volume;g.gain.setValueAtTime(e,x.ctx.currentTime),o._playStart=x.ctx.currentTime,void 0===g.bufferSource.start?o._loop?g.bufferSource.noteGrainOn(0,h,86400):g.bufferSource.noteGrainOn(0,h,l):o._loop?g.bufferSource.start(0,h,86400):g.bufferSource.start(0,h,l),c!==1/0&&(i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c)),t||setTimeout((function(){i._emit("play",o._id),i._loadQueue()}),0)};"running"===x.state&&"interrupted"!==x.ctx.state?_():(i._playLock=!0,i.once("resume",_),i._clearTimer(o._id))}else{var p=function(){g.currentTime=h,g.muted=o._muted||i._muted||x._muted||g.muted,g.volume=o._volume*x.volume(),g.playbackRate=o._rate;try{var r=g.play();if(r&&"undefined"!=typeof Promise&&(r instanceof Promise||"function"==typeof r.then)?(i._playLock=!0,f(),r.then((function(){i._playLock=!1,g._unlocked=!0,t?i._loadQueue():i._emit("play",o._id)})).catch((function(){i._playLock=!1,i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),o._ended=!0,o._paused=!0}))):t||(i._playLock=!1,f(),i._emit("play",o._id)),g.playbackRate=o._rate,g.paused)return void i._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||o._loop?i._endTimers[o._id]=setTimeout(i._ended.bind(i,o),c):(i._endTimers[o._id]=function(){i._ended(o),g.removeEventListener("ended",i._endTimers[o._id],!1)},g.addEventListener("ended",i._endTimers[o._id],!1))}catch(e){i._emit("playerror",o._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===g.src&&(g.src=i._src,g.load());var m=window&&window.ejecta||!g.readyState&&x._navigator.isCocoonJS;if(g.readyState>=3||m)p();else{i._playLock=!0,i._state="loading";var v=function(){i._state="loaded",p(),g.removeEventListener(x._canPlayEvent,v,!1)};g.addEventListener(x._canPlayEvent,v,!1),i._clearTimer(o._id)}}return o._id}i._ended(o)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var i=t._getSoundIds(e),r=0;r=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else n.length>=2&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(i=t?r._soundById(t):r._sounds[0])?i._volume:0;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"volume",action:function(){r.volume.apply(r,n)}}),r;void 0===t&&(r._volume=e),t=r._getSoundIds(t);for(var a=0;a0?r/l:r),u=Date.now();e._fadeTo=i,e._interval=setInterval((function(){var n=(Date.now()-u)/r;u=Date.now(),a+=h*n,a=Math.round(100*a)/100,a=h<0?Math.max(i,a):Math.min(i,a),o._webAudio?e._volume=a:o.volume(a,e._id,!0),s&&(o._volume=a),(it&&a>=i)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,o.volume(i,e._id),o._emit("fade",e._id))}),c)},_stopFade:function(e){var t=this,i=t._soundById(e);return i&&i._interval&&(t._webAudio&&i._node.gain.cancelScheduledValues(x.ctx.currentTime),clearInterval(i._interval),i._interval=null,t.volume(i._fadeTo,e),i._fadeTo=null,t._emit("fade",e)),t},loop:function(){var e,t,i,r=this,n=arguments;if(0===n.length)return r._loop;if(1===n.length){if("boolean"!=typeof n[0])return!!(i=r._soundById(parseInt(n[0],10)))&&i._loop;e=n[0],r._loop=e}else 2===n.length&&(e=n[0],t=parseInt(n[1],10));for(var s=r._getSoundIds(t),o=0;o=0?t=parseInt(n[0],10):e=parseFloat(n[0])}else 2===n.length&&(e=parseFloat(n[0]),t=parseInt(n[1],10));if("number"!=typeof e)return(i=r._soundById(t))?i._rate:r._rate;if("loaded"!==r._state||r._playLock)return r._queue.push({event:"rate",action:function(){r.rate.apply(r,n)}}),r;void 0===t&&(r._rate=e),t=r._getSoundIds(t);for(var a=0;a=0?t=parseInt(r[0],10):i._sounds.length&&(t=i._sounds[0]._id,e=parseFloat(r[0]))}else 2===r.length&&(e=parseFloat(r[0]),t=parseInt(r[1],10));if(void 0===t)return 0;if("number"==typeof e&&("loaded"!==i._state||i._playLock))return i._queue.push({event:"seek",action:function(){i.seek.apply(i,r)}}),i;var o=i._soundById(t);if(o){if(!("number"==typeof e&&e>=0)){if(i._webAudio){var a=i.playing(t)?x.ctx.currentTime-o._playStart:0,h=o._rateSeek?o._rateSeek-o._seek:0;return o._seek+(h+a*Math.abs(o._rate))}return o._node.currentTime}var l=i.playing(t);l&&i.pause(t,!0),o._seek=e,o._ended=!1,i._clearTimer(t),i._webAudio||!o._node||isNaN(o._node.duration)||(o._node.currentTime=e);var c=function(){l&&i.play(t,!0),i._emit("seek",t)};if(l&&!i._webAudio){var u=function(){i._playLock?setTimeout(u,0):c()};setTimeout(u,0)}else c()}return i},playing:function(e){var t=this;if("number"==typeof e){var i=t._soundById(e);return!!i&&!i._paused}for(var r=0;r=0&&x._howls.splice(r,1);var n=!0;for(i=0;i=0){n=!1;break}return E&&n&&delete E[e._src],x.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,i,r){var n=this["_on"+e];return"function"==typeof t&&n.push(r?{id:i,fn:t,once:r}:{id:i,fn:t}),this},off:function(e,t,i){var r=this,n=r["_on"+e],s=0;if("number"==typeof t&&(i=t,t=null),t||i)for(s=0;s=0;s--)n[s].id&&n[s].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,i)}.bind(r,n[s].fn),0),n[s].once&&r.off(e,n[s].fn,n[s].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var i=t._queue[0];i.event===e&&(t._queue.shift(),t._loadQueue()),e||i.action()}return t},_ended:function(e){var t=this,i=e._sprite;if(!t._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(i<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),i--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],i=0;i=0;if(!e.bufferSource)return this;if(x._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{e.bufferSource.buffer=x._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(x._navigator&&x._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var I=function(e){this._parent=e,this.init()};I.prototype={init:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++x._counter,t._sounds.push(e),e.create(),e},create:function(){var e=this,t=e._parent,i=x._muted||e._muted||e._parent._muted?0:e._volume;return t._webAudio?(e._node=void 0===x.ctx.createGain?x.ctx.createGainNode():x.ctx.createGain(),e._node.gain.setValueAtTime(i,x.ctx.currentTime),e._node.paused=!0,e._node.connect(x.masterGain)):x.noAudio||(e._node=x._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(x._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=t._src,e._node.preload=!0===t._preload?"auto":t._preload,e._node.volume=i*x.volume(),e._node.load()),e},reset:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++x._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,t=e._parent;t._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(t._sprite).length&&(t._sprite={__default:[0,1e3*t._duration]}),"loaded"!==t._state&&(t._state="loaded",t._emit("load"),t._loadQueue()),e._node.removeEventListener(x._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var E={},O=function(e){var t=e._src;if(E[t])return e._duration=E[t].duration,void R(e);if(/^data:[^;]+;base64,/.test(t)){for(var i=atob(t.split(",")[1]),r=new Uint8Array(i.length),n=0;n0?(E[t._src]=e,R(t,e)):i()};"undefined"!=typeof Promise&&1===x.ctx.decodeAudioData.length?x.ctx.decodeAudioData(e).then(r).catch(i):x.ctx.decodeAudioData(e,r,i)},R=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},M=function(){if(x.usingWebAudio){try{"undefined"!=typeof AudioContext?x.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?x.ctx=new webkitAudioContext:x.usingWebAudio=!1}catch(e){x.usingWebAudio=!1}x.ctx||(x.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(x._navigator&&x._navigator.platform),t=x._navigator&&x._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),i=t?parseInt(t[1],10):null;if(e&&i&&i<9){var r=/safari/.test(x._navigator&&x._navigator.userAgent.toLowerCase());x._navigator&&!r&&(x.usingWebAudio=!1)}x.usingWebAudio&&(x.masterGain=void 0===x.ctx.createGain?x.ctx.createGainNode():x.ctx.createGain(),x.masterGain.gain.setValueAtTime(x._muted?0:x._volume,x.ctx.currentTime),x.masterGain.connect(x.ctx.destination)),x._setup()}};!function(e,t,i,r){var n;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var i=t._howls.length-1;i>=0;i--)t._howls[i].stereo(e);return t},e.prototype.pos=function(e,i,r){var n=this;return n.ctx&&n.ctx.listener?(i="number"!=typeof i?n._pos[1]:i,r="number"!=typeof r?n._pos[2]:r,"number"!=typeof e?n._pos:(n._pos=[e,i,r],void 0!==n.ctx.listener.positionX?(n.ctx.listener.positionX.setTargetAtTime(n._pos[0],t.ctx.currentTime,.1),n.ctx.listener.positionY.setTargetAtTime(n._pos[1],t.ctx.currentTime,.1),n.ctx.listener.positionZ.setTargetAtTime(n._pos[2],t.ctx.currentTime,.1)):n.ctx.listener.setPosition(n._pos[0],n._pos[1],n._pos[2]),n)):n},e.prototype.orientation=function(e,i,r,n,s,o){var a=this;if(!a.ctx||!a.ctx.listener)return a;var h=a._orientation;return i="number"!=typeof i?h[1]:i,r="number"!=typeof r?h[2]:r,n="number"!=typeof n?h[3]:n,s="number"!=typeof s?h[4]:s,o="number"!=typeof o?h[5]:o,"number"!=typeof e?h:(a._orientation=[e,i,r,n,s,o],void 0!==a.ctx.listener.forwardX?(a.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),a.ctx.listener.forwardY.setTargetAtTime(i,t.ctx.currentTime,.1),a.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),a.ctx.listener.upX.setTargetAtTime(n,t.ctx.currentTime,.1),a.ctx.listener.upY.setTargetAtTime(s,t.ctx.currentTime,.1),a.ctx.listener.upZ.setTargetAtTime(o,t.ctx.currentTime,.1)):a.ctx.listener.setOrientation(e,i,r,n,s,o),a)},i.prototype.init=(n=i.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],n.call(this,e)}),i.prototype.stereo=function(e,i){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,i)}}),r;var n=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===i){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var o=r._getSoundIds(i),a=0;a{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`license`"+d);i._license=t})(F,e)}static get productKeys(){return this._license}static set productKeys(e){F.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){F.license=e}static get organizationID(){return this._license}static set organizationID(e){F.license=e}static set sessionPassword(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`sessionPassword`"+d);i._sessionPassword=t})(F,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:a,worker:h,getUserMedia:l,camera:await c(),browser:o.browser,version:o.version,OS:o.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(t){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");F._engineResourcePath=(t=>{if(null==t&&(t="./"),!e){let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(t)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`licenseServer`"+d);i._licenseServer=_(t)})(F,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const i=e;if(!i._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+d);i._deviceFriendlyName=t||""})(F,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");F.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=F._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",F.engineResourcePath)}static set defaultUIElementURL(e){F._defaultUIElementURL=e}static _fireHTTPSWarnning(){F.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{F.onWarning&&F.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new T({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;F._onLog&&F._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const i=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{i?i===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else i||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),i=null;if(t&&t.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:h}=e;i=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),F.recalculateResultLocation(i,r,n,a,h,s,o)}if(this._drawResults(i,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(F._onLog&&F._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!F.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:i,ls:r,sp:n,rmk:s}=(e=>{const i=e;if(i._pLoad.isEmpty){let e,r,n=i._license||"",s=JSON.parse(JSON.stringify(i._licenseServer)),o=i._sessionPassword,a=0;if(n.startsWith("t")||n.startsWith("f"))a=0;else if(0===n.length||n.startsWith("P")||n.startsWith("L")||n.startsWith("Y")||n.startsWith("A"))a=1;else{a=2;const t=n.indexOf(":");if(-1!=t&&(n=n.substring(t+1)),n.startsWith("DLS2")){let t;try{let e=n.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(n=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof n&&(n=JSON.stringify(n)),0===s.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),s=_(e)}!o&&t.sessionPassword&&(o=t.sessionPassword),e=t.remark}("200001"===n||n.startsWith("200001-"))&&(s&&s.length||(n="")),n||(a=1)}if(a&&(t.crypto||(r="Please upgrade your browser to support online key."),t.crypto.subtle||(r="Require https to use online key in this browser.")),r){if(1!==a)throw new Error(r);a=0,console.warn(r),i._lastErrorCode=-1,i._lastErrorString=r}return 1===a&&(n="",console.warn("Applying for a public trial license ...")),{lt:a,l:n,ls:s,sp:o,rmk:e}}throw new Error("Can't preprocess license again"+d)})(F);this._pLoad.task=async(t,a)=>{let h=F.engineResourcePath+F._workerName;F.engineResourcePath.startsWith(location.origin)||(h=await fetch(h).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),F._dbrWorker=new Worker(h),F._dbrWorker.onerror=e=>{let t=new Error(e.message);a(t)},F._dbrWorker.onmessage=async i=>{let r=i.data?i.data:i;switch(r.type){case"log":F._onLog&&F._onLog(r.message);break;case"load":{r.message&&(r.message=r.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let i,n=!1;1===e&&(n=!0,r.message||(r.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),r.success?(F._dbrWorker.onerror=null,F._version=r.version+"(JS "+F._jsVersion+"."+F._jsEditVersion+")",F._onLog&&F._onLog("load dbr worker success"),r.message&&console.warn(r.message)):(i=new Error(r.message),i.stack=r.stack+"\n"+i.stack,i.ltsErrorCode=r.ltsErrorCode,n||111==r.ltsErrorCode&&-1!=r.message.toLowerCase().indexOf("trial license")&&(n=!0)),n&&F.showDialog(r.success?"warn":"error",r.message),r.success?t():a(i);break}case"task":{let e=r.id,t=r.body;try{F._taskCallbackMap.get(e)(t),F._taskCallbackMap.delete(e)}catch(t){throw F._taskCallbackMap.delete(e),t}break}default:F._onLog&&F._onLog(i)}},F._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:F.engineResourcePath,bUseFullFeature:F._bUseFullFeature,bd:F._bWasmDebug,v:F._jsVersion,brtk:!!e,bptk:1===e,l:i,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:o,cv:F.authCacheVersion,fn:F.deviceFriendlyName,ls:r,sp:n,rmk:s})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,i)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let n=await r.text();if(!n.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let s=document.createElement("div");s.innerHTML=n;let o=[];for(let e=0;e{if(e==t.target){a.remove();for(let e of o)e.remove()}}));else if(!l&&e.classList.contains("dls-license-icon-close"))l=e,e.addEventListener("click",(()=>{a.remove();for(let e of o)e.remove()}));else if(!c&&e.classList.contains("dls-license-icon-error"))c=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!d&&e.classList.contains("dls-license-msg-content")){d=e;let t=i;for(;t;){let i=t.indexOf("["),r=t.indexOf("]",i),n=t.indexOf("(",r),s=t.indexOf(")",n);if(-1==i||-1==r||-1==n||-1==s){e.appendChild(new Text(t));break}i>0&&e.appendChild(new Text(t.substring(0,i)));let o=document.createElement("a"),a=t.substring(i+1,r);o.innerText=a;let h=t.substring(n+1,s);o.setAttribute("href",h),o.setAttribute("target","_blank"),e.appendChild(o),t=t.substring(s+1)}}document.body.appendChild(a)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await F.loadWasm(),await new Promise(((t,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),F._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new F;return e._instanceID=await F.createInstanceInWorker(),F._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:i,instanceID:this._instanceID})}))}async decode(e){F._onLog&&F._onLog("decode(source: any)"),F._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):F.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):F.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,i,r,n,s,o){return await new Promise(((a,h)=>{let l=F._nextTaskID++;F._taskCallbackMap.set(l,(e=>{if(e.success){let t,i=F._onLog?Date.now():0;F._onLog&&F._onLog("worker return result: "+i),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return h(e)}if(F._onLog){let e=Date.now();F._onLog("DBR getting message from worker timestamp: "+i),F._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),F._onLog("From DBR entering worker to returning message from worker costs: "+(i-this._timeEnterInnerDBR)),F._onLog("Handling results from DBR worker costs: "+(e-i)),F._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return a(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,h(t)}})),this._timeEnterInnerDBR=Date.now(),F._onLog&&F._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),F._dbrWorker.postMessage({type:"decodeBuffer",id:l,instanceID:this._instanceID,body:{buffer:e,width:t,height:i,stride:r,format:n,orientation:s,config:o}},[e.buffer]),F._onLog&&o&&o.timeStamp&&F._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-o.timeStamp))}))}async _decodeBuffer_Blob(e,t,i,r,n,s,o){F._onLog&&F._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const a=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,i)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{i(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(a),t,i,r,n,s,o)}async decodeBuffer(e,t,i,r,n,s,o){let a;return F._onLog&&F._onLog("decodeBuffer(buffer,width,height,stride,format)"),F._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?a=await this._decodeBuffer_Uint8Array(e,t,i,r,n,s,o):e instanceof ArrayBuffer?a=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,i,r,n,s,o):e instanceof Blob&&(a=await this._decodeBuffer_Blob(e,t,i,r,n,s,o)),a}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return i(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),F._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success){let t=JSON.parse(i.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"getRuntimeSettings",id:i,instanceID:this._instanceID})}))}async updateRuntimeSettings(e){let t;if("string"==typeof e)if("speed"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=5,t.expectedBarcodesCount=512,t.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region}else if("dense"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=9,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else t=JSON.parse(e);else{if("object"!=typeof e)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(t=JSON.parse(JSON.stringify(e)),t.region instanceof Array){let e=t.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(t.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!F._bUseFullFeature){if(0!=(t.barcodeFormatIds&~(y.BF_ONED|y.BF_QR_CODE|y.BF_PDF417|y.BF_DATAMATRIX))||0!=t.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=t.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=t.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,t.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(t.intermediateResultTypes|=S.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.updateReturn)}catch(e){i(e)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),F._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(t)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"resetRuntimeSettings",id:i,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=L,await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e();{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:i,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!F._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:i,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!F._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){i(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),F._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){F._onLog&&F._onLog("_decode_Blob(blob: Blob)");let i=null,r=null;if("undefined"!=typeof createImageBitmap)try{i=await createImageBitmap(e)}catch(e){}i||(r=await function(e){return new Promise(((t,i)=>{let r=URL.createObjectURL(e),n=new Image;n.dbrObjUrl=r,n.src=r,n.onload=()=>{t(n)},n.onerror=e=>{i(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let n=await this._decode_Image(i||r,t);return i&&i.close(),n}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){F._onLog&&F._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let i,r,n=e instanceof HTMLImageElement?e.naturalWidth:e.width,s=e instanceof HTMLImageElement?e.naturalHeight:e.height,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let h=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return F.recalculateResultLocation(h,0,0,n,s,i,r),h}async _decode_Canvas(e,t){if(F._onLog&&F._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";if(0===e.width||0===e.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=e,this.oriCanvasData=null);let i=(e.ctx2d||e.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,e.width,e.height).data;return await this._decodeBuffer_Uint8Array(i,e.width,e.height,4*e.width,p.IPF_ABGR_8888,0,t)}async _decode_Video(e,t){if(F._onLog&&F._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let i,r,n=e.videoWidth,s=e.videoHeight,o=Math.max(n,s);if(o>this._maxCvsSideLength){let e=this._maxCvsSideLength/o;i=Math.round(n*e),r=Math.round(s*e)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(e,0,0,n,s,0,0,i,r);let h=await this._decode_Canvas(a,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return F.recalculateResultLocation(h,0,0,n,s,i,r),h}async _decode_DCEFrame(e,t){if(F._onLog&&F._onLog("_decode_DCEFrame(dceFrame)"),!F.isDCEFrame(e))return[];let i=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,colorMode:e.colorMode,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{width:r,height:n,colorMode:s,pixelFormat:o,stride:a,timeStamp:h}=e;let l;l=t&&t.bCopyData?new Uint8Array(e.data):e.data;let c=null;if(t?(c=JSON.parse(JSON.stringify(t)),c.timeStamp=h):c={timeStamp:h},o&&a)if("grey"===o)i=await this._decodeBuffer_Uint8Array(l,r,n,a,p.IPF_GrayScaled,0,c);else if("rgba"===o)i=await this._decodeBuffer_Uint8Array(l,r,n,a,p.IPF_ABGR_8888,0,c);else{if("bgra"!==o)throw new Error(`Pixel format '${o}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,n,a,p.IPF_ARGB_8888,0,c)}else if("grey"===s)i=await this._decodeBuffer_Uint8Array(l,r,n,r,p.IPF_GrayScaled,0,c);else if("rgba"===s)i=await this._decodeBuffer_Uint8Array(l,r,n,4*r,p.IPF_ABGR_8888,0,c);else{if("bgra"!==s)throw new Error(`Color mode '${s}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,n,4*r,p.IPF_ARGB_8888,0,c)}return i}async _decode_DSImage(e,t){if(F._onLog&&F._onLog("_decode_DSImage(dsImage)"),!F.isDSImage(e))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat.toLowerCase(),data:new Uint8Array(e.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{i(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(i,t)}}async _decode_FilePath(e,t){throw F._onLog&&F._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,i,r,n,s,o){if(e.length>0)for(let a of e){let e=a.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*s,e.x2*=.01*s,e.x3*=.01*s,e.x4*=.01*s,e.y1*=.01*o,e.y2*=.01*o,e.y3*=.01*o,e.y4*=.01*o);let h=s/r,l=o/n;e.x1=e.x1/h+t,e.x2=e.x2/h+t,e.x3=e.x3/h+t,e.x4=e.x4/h+t,e.y1=e.y1/l+i,e.y2=e.y2/l+i,e.y3=e.y3/l+i,e.y4=e.y4/l+i,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/n,e.y2*=100/n,e.y3*=100/n,e.y4*=100/n),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(e,t){let i,r=m.DBR_UNKNOWN;return"number"==typeof e?(r=e,i=new Error(t)):i=new Error(e),i.code=r,i}_handleRetJsonString(e){let t=m;if(e.textResults){for(let t=0;t{let i=t.indexOf(":");e[t.substring(0,i)]=t.substring(i+1)})),i.exception=e}}return e.decodeRecords?this.decodeRecords=e.decodeRecords:this.decodeRecords={},this._lastErrorCode=e.exception,this._lastErrorString=e.description,e.exception&&!F._setWarnnedEx.has(e.description)&&(F._setWarnnedEx.add(e.description),console.warn(e.description)),e.textResults}if(e.exception==t.DBR_SUCCESS)return e.data;throw F.BarcodeReaderException(e.exception,e.description)}async setModeArgument(e,t,i,r){return await new Promise(((n,s)=>{let o=F._nextTaskID++;F._taskCallbackMap.set(o,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return s(e)}return n()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),F._dbrWorker.postMessage({type:"setModeArgument",id:o,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i,argumentValue:r}})}))}async getModeArgument(e,t,i){return await new Promise(((r,n)=>{let s=F._nextTaskID++;F._taskCallbackMap.set(s,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return n(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),F._dbrWorker.postMessage({type:"getModeArgument",id:s,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:i}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let e=await this.getIntermediateResults(),t=[];for(let i of e)if(i.dataType==v.IMRDT_IMAGE)for(let e of i.results){const i=e.bytes;let r;switch(F._onLog&&F._onLog(" "+i.length+" "+i.byteLength+" "+e.width+" "+e.height+" "+e.stride+" "+e.format),e.format){case p.IPF_ABGR_8888:r=new Uint8ClampedArray(i);break;case p.IPF_RGB_888:{const e=i.length/3;r=new Uint8ClampedArray(4*e);for(let t=0;t=n)break;r[o]=r[o+1]=r[o+2]=(128&t)/128*255,r[o+3]=255,t<<=1}}break}default:console.warn("unknow intermediate image",e)}if(!r)continue;let n=new ImageData(r,e.width,e.height),s=document.createElement("canvas");s.width=e.width,s.height=e.height,s.getContext("2d").putImageData(n,0,0),t.push(s)}return t}async getScanSettings(){return await new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success){let t=i.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(i.message);return e.stack+="\n"+i.stack,t(e)}})),F._dbrWorker.postMessage({type:"getScanSettings",id:i,instanceID:this._instanceID})}))}async updateScanSettings(e){if(!e)return;const t=JSON.parse(JSON.stringify(e));if(t.autoZoom||t.autoFocus||t.autoSuggestTip){if(!F._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const e=await this.getRuntimeSettings();e.intermediateResultTypes|=S.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(e)}return t.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(t.intervalTime,0),delete t.intervalTime),t.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=t.whenToPlaySoundforSuccessfulRead,delete t.whenToPlaySoundforSuccessfulRead),t.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=t.soundOnSuccessfullRead,delete t.soundOnSuccessfullRead),t.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=t.whenToVibrateforSuccessfulRead,delete t.whenToVibrateforSuccessfulRead),t.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=t.vibrateDuration,delete t.vibrateDuration),t.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=t.captureAndDecodeInParallel,delete t.captureAndDecodeInParallel),t.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=t.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=t.autoZoom,delete t.autoZoom),t.hasOwnProperty("autoFocus")&&(this.autoFocus=t.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete t.autoFocus),t.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=t.autoSuggestTip,delete t.autoFocus),await new Promise(((e,i)=>{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(t=>{if(t.success)return e();{let e=new Error(t.message);return e.stack+="\n"+t.stack,i(e)}})),F._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:t}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let i of e)t.push(this._cloneDecodeResults(i));return t}{let t=e,i=JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)));return i}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return F._onLog&&F._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));F._onLog&&F._onLog("======= once read ======="),F._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!F.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return F._onLog&&F._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let i=[];if(e){i=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(i&&i.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:h}=e;t=i.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),F.recalculateResultLocation(t,r,n,a,h,s,o)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(i=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return i})().then((e=>{if(F._onLog&&F._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const i=()=>{let i=0;if(t&&t.length){let r=Math.min(...e),n=Math.max(...t);r&&n&&(i=r-n)}else i=0;return i>0?i:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=i()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),F._onLog&&F._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(F._onLog&&F._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};t(e)}else F._onLog&&F._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const i=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let n=0;n{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(F._onLog&&F._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=F._nextTaskID++;F._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),F._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}F._jsVersion="9.6.32",F._jsEditVersion="20231027",F._version=`loading...(JS ${F._jsVersion}.${F._jsEditVersion})`,F._license=f,F._sessionPassword=g,F.browserInfo=o,F._workerName=`dbr-${F._jsVersion}.browser.worker.js`,F._engineResourcePath=u,F._licenseServer=[],F._deviceFriendlyName="",F._isShowRelDecodeTimeInResults=!1,F._bWasmDebug=!1,F._bNeverShowDialog=!1,F.__bUseFullFeature=!0,F._nextTaskID=0,F._taskCallbackMap=new Map,F._pLoad=new w,F._lastErrorCode=0,F._lastErrorString="",F._setWarnnedEx=new Set,F._defaultUIElementURL="@engineResourcePath/dbr.ui.html";var P={653:(e,t,i)=>{var r,n,s,o,a,h,l,c,u,d,f,g,_,p,m,v,y,S,b,w,C,x=x||{version:"5.2.1"};if(t.fabric=x,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?x.document=document:x.document=document.implementation.createHTMLDocument(""),x.window=window;else{var T=new(i(192).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;x.document=T.document,x.jsdomImplForWrapper=i(898).implForWrapper,x.nodeCanvas=i(245).Canvas,x.window=T,DOMParser=x.window.DOMParser}function I(e,t){var i=e.canvas,r=t.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function E(e,t){var i=t.targetCanvas.getContext("2d"),r=t.destinationWidth,n=t.destinationHeight,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);e.readPixels(0,0,r,n,e.RGBA,e.UNSIGNED_BYTE,o);var h=new ImageData(a,r,n);i.putImageData(h,0,0)}x.isTouchSupported="ontouchstart"in x.window||"ontouchstart"in x.document||x.window&&x.window.navigator&&x.window.navigator.maxTouchPoints>0,x.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,x.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],x.DPI=96,x.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",x.commaWsp="(?:\\s+,?\\s*|,\\s*)",x.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,x.reNonWord=/[ \n\.,;!\?\-]/,x.fontPaths={},x.iMatrix=[1,0,0,1,0,0],x.svgNS="http://www.w3.org/2000/svg",x.perfLimitSizeTotal=2097152,x.maxCacheSideLimit=4096,x.minCacheSideLimit=256,x.charWidthsCache={},x.textureSize=2048,x.disableStyleCopyPaste=!1,x.enableGLFiltering=!0,x.devicePixelRatio=x.window.devicePixelRatio||x.window.webkitDevicePixelRatio||x.window.mozDevicePixelRatio||1,x.browserShadowBlurConstant=1,x.arcToSegmentsCache={},x.boundsOfCurveCache={},x.cachesBoundsOfCurve=!0,x.forceGLPutImageData=!1,x.initFilterBackend=function(){return x.enableGLFiltering&&x.isWebglSupported&&x.isWebglSupported(x.textureSize)?(console.log("max texture size: "+x.maxTextureSize),new x.WebglFilterBackend({tileSize:x.textureSize})):x.Canvas2dFilterBackend?new x.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=x),function(){function e(e,t){if(this.__eventListeners[e]){var i=this.__eventListeners[e];t?i[i.indexOf(t)]=!1:x.util.array.fill(i,!1)}}function t(e,t){var i=function(){t.apply(this,arguments),this.off(e,i)}.bind(this);this.on(e,i)}x.Observable={fire:function(e,t){if(!this.__eventListeners)return this;var i=this.__eventListeners[e];if(!i)return this;for(var r=0,n=i.length;r-1||!!t&&this._objects.some((function(t){return"function"==typeof t.contains&&t.contains(e,!0)}))},complexity:function(){return this._objects.reduce((function(e,t){return e+(t.complexity?t.complexity():0)}),0)}},x.CommonMethods={_setOptions:function(e){for(var t in e)this.set(t,e[t])},_initGradient:function(e,t){!e||!e.colorStops||e instanceof x.Gradient||this.set(t,new x.Gradient(e))},_initPattern:function(e,t,i){!e||!e.source||e instanceof x.Pattern?i&&i():this.set(t,new x.Pattern(e,i))},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return"object"==typeof e?this._setObject(e):this._set(e,t),this},_set:function(e,t){this[e]=t},toggle:function(e){var t=this.get(e);return"boolean"==typeof t&&this.set(e,!t),this},get:function(e){return this[e]}},r=t,n=Math.sqrt,s=Math.atan2,o=Math.pow,a=Math.PI/180,h=Math.PI/2,x.util={cos:function(e){if(0===e)return 1;switch(e<0&&(e=-e),e/h){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(0===e)return 0;var t=1;switch(e<0&&(t=-1),e/h){case 1:return t;case 2:return 0;case 3:return-t}return Math.sin(e)},removeFromArray:function(e,t){var i=e.indexOf(t);return-1!==i&&e.splice(i,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*a},radiansToDegrees:function(e){return e/a},rotatePoint:function(e,t,i){var r=new x.Point(e.x-t.x,e.y-t.y),n=x.util.rotateVector(r,i);return new x.Point(n.x,n.y).addEquals(t)},rotateVector:function(e,t){var i=x.util.sin(t),r=x.util.cos(t);return{x:e.x*r-e.y*i,y:e.x*i+e.y*r}},createVector:function(e,t){return new x.Point(t.x-e.x,t.y-e.y)},calcAngleBetweenVectors:function(e,t){return Math.acos((e.x*t.x+e.y*t.y)/(Math.hypot(e.x,e.y)*Math.hypot(t.x,t.y)))},getHatVector:function(e){return new x.Point(e.x,e.y).multiply(1/Math.hypot(e.x,e.y))},getBisector:function(e,t,i){var r=x.util.createVector(e,t),n=x.util.createVector(e,i),s=x.util.calcAngleBetweenVectors(r,n),o=s*(0===x.util.calcAngleBetweenVectors(x.util.rotateVector(r,s),n)?1:-1)/2;return{vector:x.util.getHatVector(x.util.rotateVector(r,o)),angle:s}},projectStrokeOnPoints:function(e,t,i){var r=[],n=t.strokeWidth/2,s=t.strokeUniform?new x.Point(1/t.scaleX,1/t.scaleY):new x.Point(1,1),o=function(e){var t=n/Math.hypot(e.x,e.y);return new x.Point(e.x*t*s.x,e.y*t*s.y)};return e.length<=1||e.forEach((function(a,h){var l,c,u=new x.Point(a.x,a.y);0===h?(c=e[h+1],l=i?o(x.util.createVector(c,u)).addEquals(u):e[e.length-1]):h===e.length-1?(l=e[h-1],c=i?o(x.util.createVector(l,u)).addEquals(u):e[0]):(l=e[h-1],c=e[h+1]);var d,f,g=x.util.getBisector(u,l,c),_=g.vector,p=g.angle;if("miter"===t.strokeLineJoin&&(d=-n/Math.sin(p/2),f=new x.Point(_.x*d*s.x,_.y*d*s.y),Math.hypot(f.x,f.y)/n<=t.strokeMiterLimit))return r.push(u.add(f)),void r.push(u.subtract(f));d=-n*Math.SQRT2,f=new x.Point(_.x*d*s.x,_.y*d*s.y),r.push(u.add(f)),r.push(u.subtract(f))})),r},transformPoint:function(e,t,i){return i?new x.Point(t[0]*e.x+t[2]*e.y,t[1]*e.x+t[3]*e.y):new x.Point(t[0]*e.x+t[2]*e.y+t[4],t[1]*e.x+t[3]*e.y+t[5])},makeBoundingBoxFromPoints:function(e,t){if(t)for(var i=0;i0&&(t>r?t-=r:t=0,i>r?i-=r:i=0);var n,s=!0,o=e.getImageData(t,i,2*r||1,2*r||1),a=o.data.length;for(n=3;n=n?s-n:2*Math.PI-(n-s)}function s(e,t,i){for(var s=i[1],o=i[2],a=i[3],h=i[4],l=i[5],c=function(e,t,i,s,o,a,h){var l=Math.PI,c=h*l/180,u=x.util.sin(c),d=x.util.cos(c),f=0,g=0,_=-d*e*.5-u*t*.5,p=-d*t*.5+u*e*.5,m=(i=Math.abs(i))*i,v=(s=Math.abs(s))*s,y=p*p,S=_*_,b=m*v-m*y-v*S,w=0;if(b<0){var C=Math.sqrt(1-b/(m*v));i*=C,s*=C}else w=(o===a?-1:1)*Math.sqrt(b/(m*y+v*S));var T=w*i*p/s,I=-w*s*_/i,E=d*T-u*I+.5*e,O=u*T+d*I+.5*t,A=n(1,0,(_-T)/i,(p-I)/s),D=n((_-T)/i,(p-I)/s,(-_-T)/i,(-p-I)/s);0===a&&D>0?D-=2*l:1===a&&D<0&&(D+=2*l);for(var R=Math.ceil(Math.abs(D/l*2)),M=[],L=D/R,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),P=A+L,k=0;kw)for(var T=1,I=_.length;T2;for(t=t||0,l&&(a=e[2].xe[i-2].x?1:n.x===e[i-2].x?0:-1,h=n.y>e[i-2].y?1:n.y===e[i-2].y?0:-1),r.push(["L",n.x+a*t,n.y+h*t]),r},x.util.getPathSegmentsInfo=d,x.util.getBoundsOfCurve=function(t,i,r,n,s,o,a,h){var l;if(x.cachesBoundsOfCurve&&(l=e.call(arguments),x.boundsOfCurveCache[l]))return x.boundsOfCurveCache[l];var c,u,d,f,g,_,p,m,v=Math.sqrt,y=Math.min,S=Math.max,b=Math.abs,w=[],C=[[],[]];u=6*t-12*r+6*s,c=-3*t+9*r-9*s+3*a,d=3*r-3*t;for(var T=0;T<2;++T)if(T>0&&(u=6*i-12*n+6*o,c=-3*i+9*n-9*o+3*h,d=3*n-3*i),b(c)<1e-12){if(b(u)<1e-12)continue;0<(f=-d/u)&&f<1&&w.push(f)}else(p=u*u-4*d*c)<0||(0<(g=(-u+(m=v(p)))/(2*c))&&g<1&&w.push(g),0<(_=(-u-m)/(2*c))&&_<1&&w.push(_));for(var I,E,O,A=w.length,D=A;A--;)I=(O=1-(f=w[A]))*O*O*t+3*O*O*f*r+3*O*f*f*s+f*f*f*a,C[0][A]=I,E=O*O*O*i+3*O*O*f*n+3*O*f*f*o+f*f*f*h,C[1][A]=E;C[0][D]=t,C[1][D]=i,C[0][D+1]=a,C[1][D+1]=h;var R=[{x:y.apply(null,C[0]),y:y.apply(null,C[1])},{x:S.apply(null,C[0]),y:S.apply(null,C[1])}];return x.cachesBoundsOfCurve&&(x.boundsOfCurveCache[l]=R),R},x.util.getPointOnPath=function(e,t,i){i||(i=d(e));for(var r=0;t-i[r].length>0&&r1e-4;)i=h(s),n=s,(r=o(l.x,l.y,i.x,i.y))+a>t?(s-=c,c/=2):(l=i,s+=c,a+=r);return i.angle=u(n),i}(s,t)}},x.util.transformPath=function(e,t,i){return i&&(t=x.util.multiplyTransformMatrices(t,[1,0,0,1,-i.x,-i.y])),e.map((function(e){for(var i=e.slice(0),r={},n=1;n=t}))}}}(),function(){function e(t,i,r){if(r)if(!x.isLikelyNode&&i instanceof Element)t=i;else if(i instanceof Array){t=[];for(var n=0,s=i.length;n57343)return e.charAt(t);if(55296<=i&&i<=56319){if(e.length<=t+1)throw"High surrogate without following low surrogate";var r=e.charCodeAt(t+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return e.charAt(t)+e.charAt(t+1)}if(0===t)throw"Low surrogate without preceding high surrogate";var n=e.charCodeAt(t-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}x.util.string={camelize:function(e){return e.replace(/-+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))},capitalize:function(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1).toLowerCase())},escapeXml:function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(t){var i,r=0,n=[];for(r=0;r-1?e.prototype[n]=function(e){return function(){var i=this.constructor.superclass;this.constructor.superclass=r;var n=t[e].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==e)return n}}(n):e.prototype[n]=t[n],i&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};function n(){}function s(t){for(var i=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[t];if(r[t]!==n){i=n;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,e.call(arguments,1)):i.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}x.util.createClass=function(){var i=null,o=e.call(arguments,0);function a(){this.initialize.apply(this,arguments)}"function"==typeof o[0]&&(i=o.shift()),a.superclass=i,a.subclasses=[],i&&(n.prototype=i.prototype,a.prototype=new n,i.subclasses.push(a));for(var h=0,l=o.length;h-1||"touch"===e.pointerType},d="string"==typeof(u=x.document.createElement("div")).style.opacity,f="string"==typeof u.style.filter,g=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,_=function(e){return e},d?_=function(e,t){return e.style.opacity=t,e}:f&&(_=function(e,t){var i=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(i.zoom=1),g.test(i.filter)?(t=t>=.9999?"":"alpha(opacity="+100*t+")",i.filter=i.filter.replace(g,t)):i.filter+=" alpha(opacity="+100*t+")",e}),x.util.setStyle=function(e,t){var i=e.style;if(!i)return e;if("string"==typeof t)return e.style.cssText+=";"+t,t.indexOf("opacity")>-1?_(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)"opacity"===r?_(e,t[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=t[r];return e},function(){var e,t,i,r,n=Array.prototype.slice,s=function(e){return n.call(e,0)};try{e=s(x.document.childNodes)instanceof Array}catch(e){}function o(e,t){var i=x.document.createElement(e);for(var r in t)"class"===r?i.className=t[r]:"for"===r?i.htmlFor=t[r]:i.setAttribute(r,t[r]);return i}function a(e){for(var t=0,i=0,r=x.document.documentElement,n=x.document.body||{scrollLeft:0,scrollTop:0};e&&(e.parentNode||e.host)&&((e=e.parentNode||e.host)===x.document?(t=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(t+=e.scrollLeft||0,i+=e.scrollTop||0),1!==e.nodeType||"fixed"!==e.style.position););return{left:t,top:i}}e||(s=function(e){for(var t=new Array(e.length),i=e.length;i--;)t[i]=e[i];return t}),t=x.document.defaultView&&x.document.defaultView.getComputedStyle?function(e,t){var i=x.document.defaultView.getComputedStyle(e,null);return i?i[t]:void 0}:function(e,t){var i=e.style[t];return!i&&e.currentStyle&&(i=e.currentStyle[t]),i},i=x.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"",x.util.makeElementUnselectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=x.util.falseFunction),r?e.style[r]="none":"string"==typeof e.unselectable&&(e.unselectable="on"),e},x.util.makeElementSelectable=function(e){return void 0!==e.onselectstart&&(e.onselectstart=null),r?e.style[r]="":"string"==typeof e.unselectable&&(e.unselectable=""),e},x.util.setImageSmoothing=function(e,t){e.imageSmoothingEnabled=e.imageSmoothingEnabled||e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled||e.oImageSmoothingEnabled,e.imageSmoothingEnabled=t},x.util.getById=function(e){return"string"==typeof e?x.document.getElementById(e):e},x.util.toArray=s,x.util.addClass=function(e,t){e&&-1===(" "+e.className+" ").indexOf(" "+t+" ")&&(e.className+=(e.className?" ":"")+t)},x.util.makeElement=o,x.util.wrapElement=function(e,t,i){return"string"==typeof t&&(t=o(t,i)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t},x.util.getScrollLeftTop=a,x.util.getElementOffset=function(e){var i,r,n=e&&e.ownerDocument,s={left:0,top:0},o={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var l in h)o[h[l]]+=parseInt(t(e,l),10)||0;return i=n.documentElement,void 0!==e.getBoundingClientRect&&(s=e.getBoundingClientRect()),r=a(e),{left:s.left+r.left-(i.clientLeft||0)+o.left,top:s.top+r.top-(i.clientTop||0)+o.top}},x.util.getNodeCanvas=function(e){var t=x.jsdomImplForWrapper(e);return t._canvas||t._image},x.util.cleanUpJsdomNode=function(e){if(x.isLikelyNode){var t=x.jsdomImplForWrapper(e);t&&(t._image=null,t._canvas=null,t._currentSrc=null,t._attributes=null,t._classList=null)}}}(),function(){function e(){}x.util.request=function(t,i){i||(i={});var r=i.method?i.method.toUpperCase():"GET",n=i.onComplete||function(){},s=new x.window.XMLHttpRequest,o=i.body||i.parameters;return s.onreadystatechange=function(){4===s.readyState&&(n(s),s.onreadystatechange=e)},"GET"===r&&(o=null,"string"==typeof i.parameters&&(t=function(e,t){return e+(/\?/.test(e)?"&":"?")+t}(t,i.parameters))),s.open(r,t,!0),"POST"!==r&&"PUT"!==r||s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(o),s}}(),x.log=console.log,x.warn=console.warn,function(){var e=x.util.object.extend,t=x.util.object.clone,i=[];function r(){return!1}function n(e,t,i,r){return-i*Math.cos(e/r*(Math.PI/2))+i+t}x.util.object.extend(i,{cancelAll:function(){var e=this.splice(0);return e.forEach((function(e){e.cancel()})),e},cancelByCanvas:function(e){if(!e)return[];var t=this.filter((function(t){return"object"==typeof t.target&&t.target.canvas===e}));return t.forEach((function(e){e.cancel()})),t},cancelByTarget:function(e){var t=this.findAnimationsByTarget(e);return t.forEach((function(e){e.cancel()})),t},findAnimationIndex:function(e){return this.indexOf(this.findAnimation(e))},findAnimation:function(e){return this.find((function(t){return t.cancel===e}))},findAnimationsByTarget:function(e){return e?this.filter((function(t){return t.target===e})):[]}});var s=x.window.requestAnimationFrame||x.window.webkitRequestAnimationFrame||x.window.mozRequestAnimationFrame||x.window.oRequestAnimationFrame||x.window.msRequestAnimationFrame||function(e){return x.window.setTimeout(e,1e3/60)},o=x.window.cancelAnimationFrame||x.window.clearTimeout;function a(){return s.apply(x.window,arguments)}x.util.animate=function(i){i||(i={});var s,o=!1,h=function(){var e=x.runningAnimations.indexOf(s);return e>-1&&x.runningAnimations.splice(e,1)[0]};return s=e(t(i),{cancel:function(){return o=!0,h()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),x.runningAnimations.push(s),a((function(e){var t,l=e||+new Date,c=i.duration||500,u=l+c,d=i.onChange||r,f=i.abort||r,g=i.onComplete||r,_=i.easing||n,p="startValue"in i&&i.startValue.length>0,m="startValue"in i?i.startValue:0,v="endValue"in i?i.endValue:100,y=i.byValue||(p?m.map((function(e,t){return v[t]-m[t]})):v-m);i.onStart&&i.onStart(),function e(i){var r=(t=i||+new Date)>u?c:t-l,n=r/c,S=p?m.map((function(e,t){return _(r,m[t],y[t],c)})):_(r,m,y,c),b=p?Math.abs((S[0]-m[0])/y[0]):Math.abs((S-m)/y);if(s.currentValue=p?S.slice():S,s.completionRate=b,s.durationRate=n,!o){if(!f(S,b,n))return t>u?(s.currentValue=p?v.slice():v,s.completionRate=1,s.durationRate=1,d(p?v.slice():v,1,1),g(v,1,1),void h()):(d(S,b,n),void a(e));h()}}(l)})),s.cancel},x.util.requestAnimFrame=a,x.util.cancelAnimFrame=function(){return o.apply(x.window,arguments)},x.runningAnimations=i}(),function(){function e(e,t,i){var r="rgba("+parseInt(e[0]+i*(t[0]-e[0]),10)+","+parseInt(e[1]+i*(t[1]-e[1]),10)+","+parseInt(e[2]+i*(t[2]-e[2]),10);return(r+=","+(e&&t?parseFloat(e[3]+i*(t[3]-e[3])):1))+")"}x.util.animateColor=function(t,i,r,n){var s=new x.Color(t).getSource(),o=new x.Color(i).getSource(),a=n.onComplete,h=n.onChange;return n=n||{},x.util.animate(x.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(t,i,r,s){return e(i,r,n.colorEasing?n.colorEasing(t,s):1-Math.cos(t/s*(Math.PI/2)))},onComplete:function(t,i,r){if(a)return a(e(o,o,0),i,r)},onChange:function(t,i,r){if(h){if(Array.isArray(t))return h(e(t,t,0),i,r);h(t,i,r)}}}))}}(),function(){function e(e,t,i,r){return e-1&&c>-1&&c-1)&&(i="stroke")}else{if("href"===e||"xlink:href"===e||"font"===e)return i;if("imageSmoothing"===e)return"optimizeQuality"===i;a=h?i.map(s):s(i,n)}}else i="";return!h&&isNaN(a)?i:a}function f(e){return new RegExp("^("+e.join("|")+")\\b","i")}function g(e,t){var i,r,n,s,o=[];for(n=0,s=t.length;n1;)h.shift(),l=t.util.multiplyTransformMatrices(l,h[0]);return l}}();var v=new RegExp("^\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*,?\\s*("+t.reNum+"+)\\s*$");function y(e){if(!t.svgViewBoxElementsRegEx.test(e.nodeName))return{};var i,r,n,o,a,h,l=e.getAttribute("viewBox"),c=1,u=1,d=e.getAttribute("width"),f=e.getAttribute("height"),g=e.getAttribute("x")||0,_=e.getAttribute("y")||0,p=e.getAttribute("preserveAspectRatio")||"",m=!l||!(l=l.match(v)),y=!d||!f||"100%"===d||"100%"===f,S=m&&y,b={},w="",C=0,x=0;if(b.width=0,b.height=0,b.toBeParsed=S,m&&(g||_)&&e.parentNode&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") ",a=(e.getAttribute("transform")||"")+w,e.setAttribute("transform",a),e.removeAttribute("x"),e.removeAttribute("y")),S)return b;if(m)return b.width=s(d),b.height=s(f),b;if(i=-parseFloat(l[1]),r=-parseFloat(l[2]),n=parseFloat(l[3]),o=parseFloat(l[4]),b.minX=i,b.minY=r,b.viewBoxWidth=n,b.viewBoxHeight=o,y?(b.width=n,b.height=o):(b.width=s(d),b.height=s(f),c=b.width/n,u=b.height/o),"none"!==(p=t.util.parsePreserveAspectRatioAttribute(p)).alignX&&("meet"===p.meetOrSlice&&(u=c=c>u?u:c),"slice"===p.meetOrSlice&&(u=c=c>u?c:u),C=b.width-n*c,x=b.height-o*c,"Mid"===p.alignX&&(C/=2),"Mid"===p.alignY&&(x/=2),"Min"===p.alignX&&(C=0),"Min"===p.alignY&&(x=0)),1===c&&1===u&&0===i&&0===r&&0===g&&0===_)return b;if((g||_)&&"#document"!==e.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") "),a=w+" matrix("+c+" 0 0 "+u+" "+(i*c+C)+" "+(r*u+x)+") ","svg"===e.nodeName){for(h=e.ownerDocument.createElementNS(t.svgNS,"g");e.firstChild;)h.appendChild(e.firstChild);e.appendChild(h)}else(h=e).removeAttribute("x"),h.removeAttribute("y"),a=h.getAttribute("transform")+a;return h.setAttribute("transform",a),b}function S(e,t){var i="xlink:href",r=m(e,t.getAttribute(i).slice(1));if(r&&r.getAttribute(i)&&S(e,r),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach((function(e){r&&!t.hasAttribute(e)&&r.hasAttribute(e)&&t.setAttribute(e,r.getAttribute(e))})),!t.children.length)for(var n=r.cloneNode(!0);n.firstChild;)t.appendChild(n.firstChild);t.removeAttribute(i)}t.parseSVGDocument=function(e,i,n,s){if(e){!function(e){for(var i=g(e,["use","svg:use"]),r=0;i.length&&re.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return void 0===t&&(t=.5),t=Math.max(Math.min(1,t),0),new i(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,i=this.y-e.y;return Math.sqrt(t*t+i*i)},midPointFrom:function(e){return this.lerp(e)},min:function(e){return new i(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new i(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){return this.x=e,this.y=t,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setFromPoint:function(e){return this.x=e.x,this.y=e.y,this},swap:function(e){var t=this.x,i=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=i},clone:function(){return new i(this.x,this.y)}})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){this.status=e,this.points=[]}t.Intersection?t.warn("fabric.Intersection is already defined"):(t.Intersection=i,t.Intersection.prototype={constructor:i,appendPoint:function(e){return this.points.push(e),this},appendPoints:function(e){return this.points=this.points.concat(e),this}},t.Intersection.intersectLineLine=function(e,r,n,s){var o,a=(s.x-n.x)*(e.y-n.y)-(s.y-n.y)*(e.x-n.x),h=(r.x-e.x)*(e.y-n.y)-(r.y-e.y)*(e.x-n.x),l=(s.y-n.y)*(r.x-e.x)-(s.x-n.x)*(r.y-e.y);if(0!==l){var c=a/l,u=h/l;0<=c&&c<=1&&0<=u&&u<=1?(o=new i("Intersection")).appendPoint(new t.Point(e.x+c*(r.x-e.x),e.y+c*(r.y-e.y))):o=new i}else o=new i(0===a||0===h?"Coincident":"Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var n,s,o,a,h=new i,l=r.length;for(a=0;a0&&(h.status="Intersection"),h},t.Intersection.intersectPolygonPolygon=function(e,t){var r,n=new i,s=e.length;for(r=0;r0&&(n.status="Intersection"),n},t.Intersection.intersectPolygonRectangle=function(e,r,n){var s=r.min(n),o=r.max(n),a=new t.Point(o.x,s.y),h=new t.Point(s.x,o.y),l=i.intersectLinePolygon(s,a,e),c=i.intersectLinePolygon(a,o,e),u=i.intersectLinePolygon(o,h,e),d=i.intersectLinePolygon(h,s,e),f=new i;return f.appendPoints(l.points),f.appendPoints(c.points),f.appendPoints(u.points),f.appendPoints(d.points),f.points.length>0&&(f.status="Intersection"),f})}(t),function(e){var t=e.fabric||(e.fabric={});function i(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}t.Color?t.warn("fabric.Color is already defined."):(t.Color=i,t.Color.prototype={_tryParsingColor:function(e){var t;e in i.colorNameMap&&(e=i.colorNameMap[e]),"transparent"===e&&(t=[255,255,255,0]),t||(t=i.sourceFromHex(e)),t||(t=i.sourceFromRgb(e)),t||(t=i.sourceFromHsl(e)),t||(t=[0,0,0,1]),t&&this.setSource(t)},_rgbToHsl:function(e,i,r){e/=255,i/=255,r/=255;var n,s,o,a=t.util.array.max([e,i,r]),h=t.util.array.min([e,i,r]);if(o=(a+h)/2,a===h)n=s=0;else{var l=a-h;switch(s=o>.5?l/(2-a-h):l/(a+h),a){case e:n=(i-r)/l+(i0)-(e<0)||+e};function f(e,t){var i=e.angle+u(Math.atan2(t.y,t.x))+360;return Math.round(i%360/45)}function g(e,i){var r=i.transform.target,n=r.canvas,s=t.util.object.clone(i);s.target=r,n&&n.fire("object:"+e,s),r.fire(e,i)}function _(e,t){var i=t.canvas,r=e[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function p(e){return e.originX===l&&e.originY===l}function m(e,t,i){var r=e.lockScalingX,n=e.lockScalingY;return!((!r||!n)&&(t||!r&&!n||!i)&&(!r||"x"!==t)&&(!n||"y"!==t))}function v(e,t,i,r){return{e,transform:t,pointer:{x:i,y:r}}}function y(e){return function(t,i,r,n){var s=i.target,o=s.getCenterPoint(),a=s.translateToOriginPoint(o,i.originX,i.originY),h=e(t,i,r,n);return s.setPositionByOrigin(a,i.originX,i.originY),h}}function S(e,t){return function(i,r,n,s){var o=t(i,r,n,s);return o&&g(e,v(i,r,n,s)),o}}function b(e,i,r,n,s){var o=e.target,a=o.controls[e.corner],h=o.canvas.getZoom(),l=o.padding/h,c=o.toLocalPoint(new t.Point(n,s),i,r);return c.x>=l&&(c.x-=l),c.x<=-l&&(c.x+=l),c.y>=l&&(c.y-=l),c.y<=l&&(c.y+=l),c.x-=a.offsetX,c.y-=a.offsetY,c}function w(e){return e.flipX!==e.flipY}function C(e,t,i,r,n){if(0!==e[t]){var s=n/e._getTransformedDimensions()[r]*e[i];e.set(i,s)}}function x(e,t,i,r){var n,l=t.target,c=l._getTransformedDimensions(0,l.skewY),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.x)-c.x,g=l.skewX;f<2?n=0:(n=u(Math.atan2(f/l.scaleX,c.y/l.scaleY)),t.originX===s&&t.originY===h&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(l)&&(n=-n));var _=g!==n;if(_){var p=l._getTransformedDimensions().y;l.set("skewX",n),C(l,"skewY","scaleY","y",p)}return _}function T(e,t,i,r){var n,l=t.target,c=l._getTransformedDimensions(l.skewX,0),d=b(t,t.originX,t.originY,i,r),f=Math.abs(2*d.y)-c.y,g=l.skewY;f<2?n=0:(n=u(Math.atan2(f/l.scaleY,c.x/l.scaleX)),t.originX===s&&t.originY===h&&(n=-n),t.originX===a&&t.originY===o&&(n=-n),w(l)&&(n=-n));var _=g!==n;if(_){var p=l._getTransformedDimensions().x;l.set("skewY",n),C(l,"skewX","scaleX","x",p)}return _}function I(e,t,i,r,n){n=n||{};var s,o,a,h,l,u,f=t.target,g=f.lockScalingX,v=f.lockScalingY,y=n.by,S=_(e,f),w=m(f,y,S),C=t.gestureScale;if(w)return!1;if(C)o=t.scaleX*C,a=t.scaleY*C;else{if(s=b(t,t.originX,t.originY,i,r),l="y"!==y?d(s.x):1,u="x"!==y?d(s.y):1,t.signX||(t.signX=l),t.signY||(t.signY=u),f.lockScalingFlip&&(t.signX!==l||t.signY!==u))return!1;if(h=f._getTransformedDimensions(),S&&!y){var x=Math.abs(s.x)+Math.abs(s.y),T=t.original,I=x/(Math.abs(h.x*T.scaleX/f.scaleX)+Math.abs(h.y*T.scaleY/f.scaleY));o=T.scaleX*I,a=T.scaleY*I}else o=Math.abs(s.x*f.scaleX/h.x),a=Math.abs(s.y*f.scaleY/h.y);p(t)&&(o*=2,a*=2),t.signX!==l&&"y"!==y&&(t.originX=c[t.originX],o*=-1,t.signX=l),t.signY!==u&&"x"!==y&&(t.originY=c[t.originY],a*=-1,t.signY=u)}var E=f.scaleX,O=f.scaleY;return y?("x"===y&&f.set("scaleX",o),"y"===y&&f.set("scaleY",a)):(!g&&f.set("scaleX",o),!v&&f.set("scaleY",a)),E!==f.scaleX||O!==f.scaleY}n.scaleCursorStyleHandler=function(e,t,r){var n=_(e,r),s="";if(0!==t.x&&0===t.y?s="x":0===t.x&&0!==t.y&&(s="y"),m(r,s,n))return"not-allowed";var o=f(r,t);return i[o]+"-resize"},n.skewCursorStyleHandler=function(e,t,i){var n="not-allowed";if(0!==t.x&&i.lockSkewingY)return n;if(0!==t.y&&i.lockSkewingX)return n;var s=f(i,t)%4;return r[s]+"-resize"},n.scaleSkewCursorStyleHandler=function(e,t,i){return e[i.canvas.altActionKey]?n.skewCursorStyleHandler(e,t,i):n.scaleCursorStyleHandler(e,t,i)},n.rotationWithSnapping=S("rotating",y((function(e,t,i,r){var n=t,s=n.target,o=s.translateToOriginPoint(s.getCenterPoint(),n.originX,n.originY);if(s.lockRotation)return!1;var a,h=Math.atan2(n.ey-o.y,n.ex-o.x),l=Math.atan2(r-o.y,i-o.x),c=u(l-h+n.theta);if(s.snapAngle>0){var d=s.snapAngle,f=s.snapThreshold||d,g=Math.ceil(c/d)*d,_=Math.floor(c/d)*d;Math.abs(c-_)0?s:a:(c>0&&(n=u===o?s:a),c<0&&(n=u===o?a:s),w(h)&&(n=n===s?a:s)),t.originX=n,S("skewing",y(x))(e,t,i,r))},n.skewHandlerY=function(e,t,i,r){var n,a=t.target,c=a.skewY,u=t.originX;return!a.lockSkewingY&&(0===c?n=b(t,l,l,i,r).y>0?o:h:(c>0&&(n=u===s?o:h),c<0&&(n=u===s?h:o),w(a)&&(n=n===o?h:o)),t.originY=n,S("skewing",y(T))(e,t,i,r))},n.dragHandler=function(e,t,i,r){var n=t.target,s=i-t.offsetX,o=r-t.offsetY,a=!n.get("lockMovementX")&&n.left!==s,h=!n.get("lockMovementY")&&n.top!==o;return a&&n.set("left",s),h&&n.set("top",o),(a||h)&&g("moving",v(e,t,i,r)),a||h},n.scaleOrSkewActionName=function(e,t,i){var r=e[i.canvas.altActionKey];return 0===t.x?r?"skewX":"scaleY":0===t.y?r?"skewY":"scaleX":void 0},n.rotationStyleHandler=function(e,t,i){return i.lockRotation?"not-allowed":t.cursorStyle},n.fireEvent=g,n.wrapWithFixedAnchor=y,n.wrapWithFireEvent=S,n.getLocalPoint=b,t.controlsUtils=n}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians,r=t.controlsUtils;r.renderCircleControl=function(e,t,i,r,n){r=r||{};var s,o=this.sizeX||r.cornerSize||n.cornerSize,a=this.sizeY||r.cornerSize||n.cornerSize,h=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,l=h?"stroke":"fill",c=!h&&(r.cornerStrokeColor||n.cornerStrokeColor),u=t,d=i;e.save(),e.fillStyle=r.cornerColor||n.cornerColor,e.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,o>a?(s=o,e.scale(1,a/o),d=i*o/a):a>o?(s=a,e.scale(o/a,1),u=t*a/o):s=o,e.lineWidth=1,e.beginPath(),e.arc(u,d,s/2,0,2*Math.PI,!1),e[l](),c&&e.stroke(),e.restore()},r.renderSquareControl=function(e,t,r,n,s){n=n||{};var o=this.sizeX||n.cornerSize||s.cornerSize,a=this.sizeY||n.cornerSize||s.cornerSize,h=void 0!==n.transparentCorners?n.transparentCorners:s.transparentCorners,l=h?"stroke":"fill",c=!h&&(n.cornerStrokeColor||s.cornerStrokeColor),u=o/2,d=a/2;e.save(),e.fillStyle=n.cornerColor||s.cornerColor,e.strokeStyle=n.cornerStrokeColor||s.cornerStrokeColor,e.lineWidth=1,e.translate(t,r),e.rotate(i(s.angle)),e[l+"Rect"](-u,-d,o,a),c&&e.strokeRect(-u,-d,o,a),e.restore()}}(t),function(e){var t=e.fabric||(e.fabric={});t.Control=function(e){for(var t in e)this[t]=e[t]},t.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(e,t){return t.cursorStyle},getActionName:function(e,t){return t.actionName},getVisibility:function(e,t){var i=e._controlsVisibility;return i&&void 0!==i[t]?i[t]:this.visible},setVisibility:function(e){this.visible=e},positionHandler:function(e,i){return t.util.transformPoint({x:this.x*e.x+this.offsetX,y:this.y*e.y+this.offsetY},i)},calcCornerCoords:function(e,i,r,n,s){var o,a,h,l,c=s?this.touchSizeX:this.sizeX,u=s?this.touchSizeY:this.sizeY;if(c&&u&&c!==u){var d=Math.atan2(u,c),f=Math.sqrt(c*c+u*u)/2,g=d-t.util.degreesToRadians(e),_=Math.PI/2-d-t.util.degreesToRadians(e);o=f*t.util.cos(g),a=f*t.util.sin(g),h=f*t.util.cos(_),l=f*t.util.sin(_)}else f=.7071067812*(c&&u?c:i),g=t.util.degreesToRadians(45-e),o=h=f*t.util.cos(g),a=l=f*t.util.sin(g);return{tl:{x:r-l,y:n-h},tr:{x:r+o,y:n-a},bl:{x:r-o,y:n+a},br:{x:r+l,y:n+h}}},render:function(e,i,r,n,s){"circle"===((n=n||{}).cornerStyle||s.cornerStyle)?t.controlsUtils.renderCircleControl.call(this,e,i,r,n,s):t.controlsUtils.renderSquareControl.call(this,e,i,r,n,s)}}}(t),function(){function e(e,t){var i,r,n,s,o=e.getAttribute("style"),a=e.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,o){var h=o.split(/\s*;\s*/);for(""===h[h.length-1]&&h.pop(),s=h.length;s--;){var l=h[s].split(/\s*:\s*/),c=l[0].trim(),u=l[1].trim();"stop-color"===c?i=u:"stop-opacity"===c&&(n=u)}}return i||(i=e.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=e.getAttribute("stop-opacity")),r=(i=new x.Color(i)).getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*t,{offset:a,color:i.toRgb(),opacity:n}}var t=x.util.object.clone;x.Gradient=x.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(e){e||(e={}),e.coords||(e.coords={});var t,i=this;Object.keys(e).forEach((function(t){i[t]=e[t]})),this.id?this.id+="_"+x.Object.__uid++:this.id=x.Object.__uid++,t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},"radial"===this.type&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.colorStops=e.colorStops.slice()},addColorStop:function(e){for(var t in e){var i=new x.Color(e[t]);this.colorStops.push({offset:parseFloat(t),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(e){var t={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return x.util.populateWithProperties(this,t,e),t},toSVG:function(e,i){var r,n,s,o,a=t(this.coords,!0),h=(i=i||{},t(this.colorStops,!0)),l=a.r1>a.r2,c=this.gradientTransform?this.gradientTransform.concat():x.iMatrix.concat(),u=-this.offsetX,d=-this.offsetY,f=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(h.sort((function(e,t){return e.offset-t.offset})),"objectBoundingBox"===g?(u/=e.width,d/=e.height):(u+=e.width/2,d+=e.height/2),"path"===e.type&&"percentage"!==this.gradientUnits&&(u-=e.pathOffset.x,d-=e.pathOffset.y),c[4]-=u,c[5]-=d,o='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',o+=' gradientTransform="'+(f?i.additionalTransform+" ":"")+x.util.matrixToSVG(c)+'" ',"linear"===this.type?s=["\n']:"radial"===this.type&&(s=["\n']),"radial"===this.type){if(l)for((h=h.concat()).reverse(),r=0,n=h.length;r0){var p=_/Math.max(a.r1,a.r2);for(r=0,n=h.length;r\n')}return s.push("linear"===this.type?"\n":"\n"),s.join("")},toLive:function(e){var t,i,r,n=x.util.object.clone(this.coords);if(this.type){for("linear"===this.type?t=e.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(t=e.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i1?1:s,isNaN(s)&&(s=1);var o,a,h,l,c=t.getElementsByTagName("stop"),u="userSpaceOnUse"===t.getAttribute("gradientUnits")?"pixels":"percentage",d=t.getAttribute("gradientTransform")||"",f=[],g=0,_=0;for("linearGradient"===t.nodeName||"LINEARGRADIENT"===t.nodeName?(o="linear",a=function(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")||0,x2:e.getAttribute("x2")||"100%",y2:e.getAttribute("y2")||0}}(t)):(o="radial",a=function(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%",y1:e.getAttribute("fy")||e.getAttribute("cy")||"50%",r1:0,x2:e.getAttribute("cx")||"50%",y2:e.getAttribute("cy")||"50%",r2:e.getAttribute("r")||"50%"}}(t)),h=c.length;h--;)f.push(e(c[h],s));return l=x.parseTransformAttribute(d),function(e,t,i,r){var n,s;Object.keys(t).forEach((function(e){"Infinity"===(n=t[e])?s=1:"-Infinity"===n?s=0:(s=parseFloat(t[e],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(s*=.01,"pixels"===r&&("x1"!==e&&"x2"!==e&&"r2"!==e||(s*=i.viewBoxWidth||i.width),"y1"!==e&&"y2"!==e||(s*=i.viewBoxHeight||i.height)))),t[e]=s}))}(0,a,n,u),"pixels"===u&&(g=-i.left,_=-i.top),new x.Gradient({id:t.getAttribute("id"),type:o,coords:a,colorStops:f,gradientUnits:u,gradientTransform:l,offsetX:g,offsetY:_})}})}(),m=x.util.toFixed,x.Pattern=x.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(e,t){if(e||(e={}),this.id=x.Object.__uid++,this.setOptions(e),!e.source||e.source&&"string"!=typeof e.source)t&&t(this);else{var i=this;this.source=x.util.createImage(),x.util.loadImage(e.source,(function(e,r){i.source=e,t&&t(i,r)}),null,this.crossOrigin)}},toObject:function(e){var t,i,r=x.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?t=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(t=this.source.toDataURL()),i={type:"pattern",source:t,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:m(this.offsetX,r),offsetY:m(this.offsetY,r),patternTransform:this.patternTransform?this.patternTransform.concat():null},x.util.populateWithProperties(this,i,e),i},toSVG:function(e){var t="function"==typeof this.source?this.source():this.source,i=t.width/e.width,r=t.height/e.height,n=this.offsetX/e.width,s=this.offsetY/e.height,o="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(r=1,s&&(r+=Math.abs(s))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,n&&(i+=Math.abs(n))),t.src?o=t.src:t.toDataURL&&(o=t.toDataURL()),'\n\n\n'},setOptions:function(e){for(var t in e)this[t]=e[t]},toLive:function(e){var t=this.source;if(!t)return"";if(void 0!==t.src){if(!t.complete)return"";if(0===t.naturalWidth||0===t.naturalHeight)return""}return e.createPattern(t,this.repeat)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.toFixed;t.Shadow?t.warn("fabric.Shadow is already defined."):(t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(e){for(var i in"string"==typeof e&&(e=this._parseShadow(e)),e)this[i]=e[i];this.id=t.Object.__uid++},_parseShadow:function(e){var i=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var r=40,n=40,s=t.Object.NUM_FRACTION_DIGITS,o=t.util.rotateVector({x:this.offsetX,y:this.offsetY},t.util.degreesToRadians(-e.angle)),a=new t.Color(this.color);return e.width&&e.height&&(r=100*i((Math.abs(o.x)+this.blur)/e.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/e.height,s)+20),e.flipX&&(o.x*=-1),e.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var e={},i=t.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach((function(t){this[t]!==i[t]&&(e[t]=this[t])}),this),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(t),function(){if(x.StaticCanvas)x.warn("fabric.StaticCanvas is already defined.");else{var e=x.util.object.extend,t=x.util.getElementOffset,i=x.util.removeFromArray,r=x.util.toFixed,n=x.util.transformPoint,s=x.util.invertTransform,o=x.util.getNodeCanvas,a=x.util.createCanvasElement,h=new Error("Could not initialize `canvas` element");x.StaticCanvas=x.util.createClass(x.CommonMethods,{initialize:function(e,t){t||(t={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(e,t)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:x.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(e,t){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this.interactive||this._initRetinaScaling(),t.overlayImage&&this.setOverlayImage(t.overlayImage,i),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,i),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,i),t.overlayColor&&this.setOverlayColor(t.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return x.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,x.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var e=x.devicePixelRatio;this.__initRetinaScaling(e,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(e,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(e,t,i){t.setAttribute("width",this.width*e),t.setAttribute("height",this.height*e),i.scale(e,e)},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,i){return this.__setBgOverlayImage("overlayImage",e,t,i)},setBackgroundImage:function(e,t,i){return this.__setBgOverlayImage("backgroundImage",e,t,i)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,i,r){return"string"==typeof t?x.util.loadImage(t,(function(t,n){if(t){var s=new x.Image(t,r);this[e]=s,s.canvas=this}i&&i(t,n)}),this,r&&r.crossOrigin):(r&&t.setOptions(r),this[e]=t,t&&(t.canvas=this),i&&i(t,!1)),this},__setBgOverlayColor:function(e,t,i){return this[e]=t,this._initGradient(t,e),this._initPattern(t,e,i),this},_createCanvasElement:function(){var e=a();if(!e)throw h;if(e.style||(e.style={}),void 0===e.getContext)throw h;return e},_initOptions:function(e){var t=this.lowerCanvasEl;this._setOptions(e),this.width=this.width||parseInt(t.width,10)||0,this.height=this.height||parseInt(t.height,10)||0,this.lowerCanvasEl.style&&(t.width=this.width,t.height=this.height,t.style.width=this.width+"px",t.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(e){e&&e.getContext?this.lowerCanvasEl=e:this.lowerCanvasEl=x.util.getById(e)||this._createCanvasElement(),x.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var i;for(var r in t=t||{},e)i=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),i+="px",this.hasLostContext=!0),t.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),t.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(e){var t,i,r,n=this._activeObject,s=this.backgroundImage,o=this.overlayImage;for(this.viewportTransform=e,i=0,r=this._objects.length;i\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",t),this._setSVGObjects(i,t),this.clipPath&&i.push("\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",t),i.push(""),i.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('\n','\n')},_setSVGHeader:function(e,t){var i,n=t.width||this.width,s=t.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=x.Object.NUM_FRACTION_DIGITS;t.viewBox?o='viewBox="'+t.viewBox.x+" "+t.viewBox.y+" "+t.viewBox.width+" "+t.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),e.push("\n',"Created with Fabric.js ",x.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(t),"\n")},createSVGClipPathMarkup:function(e){var t=this.clipPath;return t?(t.clipPathId="CLIPPATH_"+x.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(e.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var e=this;return["background","overlay"].map((function(t){var i=e[t+"Color"];if(i&&i.toLive){var r=e[t+"Vpt"],n=e.viewportTransform,s={width:e.width/(r?n[0]:1),height:e.height/(r?n[3]:1)};return i.toSVG(s,{additionalTransform:r?x.util.matrixToSVG(n):""})}})).join("")},createSVGFontFacesMarkup:function(){var e,t,i,r,n,s,o,a,h="",l={},c=x.fontPaths,u=[];for(this._objects.forEach((function e(t){u.push(t),t._objects&&t._objects.forEach(e)})),o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_setSVGObjects:function(e,t){var i,r,n,s=this._objects;for(r=0,n=s.length;r\n")}else e.push('\n")},sendToBack:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(t=(n=s._objects).length;t--;)r=n[t],i(this._objects,r),this._objects.unshift(r);else i(this._objects,e),this._objects.unshift(e);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(e){if(!e)return this;var t,r,n,s=this._activeObject;if(e===s&&"activeSelection"===e.type)for(n=s._objects,t=0;t0+l&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),l++;else 0!==(s=this._objects.indexOf(e))&&(o=this._findNewLowerIndex(e,s,t),i(this._objects,e),this._objects.splice(o,0,e));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(e,t,i){var r,n;if(i){for(r=t,n=t-1;n>=0;--n)if(e.intersectsWithObject(this._objects[n])||e.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(e)){r=n;break}}else r=t-1;return r},bringForward:function(e,t){if(!e)return this;var r,n,s,o,a,h=this._activeObject,l=0;if(e===h&&"activeSelection"===e.type)for(r=(a=h._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),e(x.StaticCanvas.prototype,x.Observable),e(x.StaticCanvas.prototype,x.Collection),e(x.StaticCanvas.prototype,x.DataURLExporter),e(x.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=a();if(!t||!t.getContext)return null;var i=t.getContext("2d");return i&&"setLineDash"===e?void 0!==i.setLineDash:null}}),x.StaticCanvas.prototype.toJSON=x.StaticCanvas.prototype.toObject,x.isLikelyNode&&(x.StaticCanvas.prototype.createPNGStream=function(){var e=o(this.lowerCanvasEl);return e&&e.createPNGStream()},x.StaticCanvas.prototype.createJPEGStream=function(e){var t=o(this.lowerCanvasEl);return t&&t.createJPEGStream(e)})}}(),x.BaseBrush=x.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(e){e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.miterLimit=this.strokeMiterLimit,e.lineJoin=this.strokeLineJoin,e.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(e){var t=this.canvas.viewportTransform;e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5])},_setShadow:function(){if(this.shadow){var e=this.canvas,t=this.shadow,i=e.contextTop,r=e.getZoom();e&&e._isRetinaScaling()&&(r*=x.devicePixelRatio),i.shadowColor=t.color,i.shadowBlur=t.blur*r,i.shadowOffsetX=t.offsetX*r,i.shadowOffsetY=t.offsetY*r}},needsFullRender:function(){return new x.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_isOutSideCanvas:function(e){return e.x<0||e.x>this.canvas.getWidth()||e.y<0||e.y>this.canvas.getHeight()}}),x.PencilBrush=x.util.createClass(x.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(e){this.canvas=e,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(e,t,i){var r=t.midPointFrom(i);return e.quadraticCurveTo(t.x,t.y,r.x,r.y),r},onMouseDown:function(e,t){this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],this._prepareForDrawing(e),this._captureDrawingPath(e),this._render())},onMouseMove:function(e,t){if(this.canvas._isMainEvent(t.e)&&(this.drawStraightLine=t.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(e))&&this._captureDrawingPath(e)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(e){return!this.canvas._isMainEvent(e.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(e){var t=new x.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){return!(this._points.length>1&&e.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(e),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(e){var t=new x.Point(e.x,e.y);return this._addPoint(t)},_render:function(e){var t,i,r=this._points[0],n=this._points[1];if(e=e||this.canvas.contextTop,this._saveAndTransform(e),e.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new x.Point(r.x,r.y),n=new x.Point(n.x,n.y),r.x-=s,n.x+=s}for(e.moveTo(r.x,r.y),t=1,i=this._points.length;t=n&&(o=e[i],a.push(o));return a.push(e[s]),a},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var e=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(e))this.canvas.requestRenderAll();else{var t=this.createPath(e);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:t}),this.canvas.add(t),this.canvas.requestRenderAll(),t.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:t})}}}),x.CircleBrush=x.util.createClass(x.BaseBrush,{width:10,initialize:function(e){this.canvas=e,this.points=[]},drawDot:function(e){var t=this.addPoint(e),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,t),i.restore()},dot:function(e,t){e.fillStyle=t.fill,e.beginPath(),e.arc(t.x,t.y,t.radius,0,2*Math.PI,!1),e.closePath(),e.fill()},onMouseDown:function(e){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(e)},_render:function(){var e,t,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),e=0,t=r.length;e0&&!this.preserveObjectStacking){t=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),t.push.apply(t,i)}else t=this._objects;return t},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var e=this.contextContainer;return this.renderCanvas(e,this._chooseObjectsToRender()),this},renderTopLayer:function(e){e.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(e),this.contextTopDirty=!0),e.restore()},renderTop:function(){var e=this.contextTop;return this.clearContext(e),this.renderTopLayer(e),this.fire("after:render"),this},_normalizePointer:function(e,t){var i=e.calcTransformMatrix(),r=x.util.invertTransform(i),n=this.restorePointerVpt(t);return x.util.transformPoint(n,r)},isTargetTransparent:function(e,t,i){if(e.shouldCache()&&e._cacheCanvas&&e!==this._activeObject){var r=this._normalizePointer(e,{x:t,y:i}),n=Math.max(e.cacheTranslationX+r.x*e.zoomX,0),s=Math.max(e.cacheTranslationY+r.y*e.zoomY,0);return x.util.isTransparent(e._cacheContext,Math.round(n),Math.round(s),this.targetFindTolerance)}var o=this.contextCache,a=e.selectionBackgroundColor,h=this.viewportTransform;return e.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),e.render(o),o.restore(),e.selectionBackgroundColor=a,x.util.isTransparent(o,t,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(e){return Array.isArray(this.selectionKey)?!!this.selectionKey.find((function(t){return!0===e[t]})):e[this.selectionKey]},_shouldClearSelection:function(e,t){var i=this.getActiveObjects(),r=this._activeObject;return!t||t&&r&&i.length>1&&-1===i.indexOf(t)&&r!==t&&!this._isSelectionKeyPressed(e)||t&&!t.evented||t&&!t.selectable&&r&&r!==t},_shouldCenterTransform:function(e,t,i){var r;if(e)return"scale"===t||"scaleX"===t||"scaleY"===t||"resizing"===t?r=this.centeredScaling||e.centeredScaling:"rotate"===t&&(r=this.centeredRotation||e.centeredRotation),r?!i:i},_getOriginFromCorner:function(e,t){var i={x:e.originX,y:e.originY};return"ml"===t||"tl"===t||"bl"===t?i.x="right":"mr"!==t&&"tr"!==t&&"br"!==t||(i.x="left"),"tl"===t||"mt"===t||"tr"===t?i.y="bottom":"bl"!==t&&"mb"!==t&&"br"!==t||(i.y="top"),i},_getActionFromCorner:function(e,t,i,r){if(!t||!e)return"drag";var n=r.controls[t];return n.getActionName(i,n,r)},_setupCurrentTransform:function(e,i,r){if(i){var n=this.getPointer(e),s=i.__corner,o=i.controls[s],a=r&&s?o.getActionHandler(e,i,o):x.controlsUtils.dragHandler,h=this._getActionFromCorner(r,s,e,i),l=this._getOriginFromCorner(i,s),c=e[this.centeredKey],u={target:i,action:h,actionHandler:a,corner:s,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:l.x,originY:l.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:t(i.angle),width:i.width*i.scaleX,shiftKey:e.shiftKey,altKey:c,original:x.util.saveObjectTransform(i)};this._shouldCenterTransform(i,h,c)&&(u.originX="center",u.originY="center"),u.original.originX=l.x,u.original.originY=l.y,this._currentTransform=u,this._beforeTransform(e)}},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_drawSelection:function(e){var t=this._groupSelector,i=new x.Point(t.ex,t.ey),r=x.util.transformPoint(i,this.viewportTransform),n=new x.Point(t.ex+t.left,t.ey+t.top),s=x.util.transformPoint(n,this.viewportTransform),o=Math.min(r.x,s.x),a=Math.min(r.y,s.y),h=Math.max(r.x,s.x),l=Math.max(r.y,s.y),c=this.selectionLineWidth/2;this.selectionColor&&(e.fillStyle=this.selectionColor,e.fillRect(o,a,h-o,l-a)),this.selectionLineWidth&&this.selectionBorderColor&&(e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor,o+=c,a+=c,h-=c,l-=c,x.Object.prototype._setLineDash.call(this,e,this.selectionDashArray),e.strokeRect(o,a,h-o,l-a))},findTarget:function(e,t){if(!this.skipTargetFind){var r,n,s=this.getPointer(e,!0),o=this._activeObject,a=this.getActiveObjects(),h=i(e),l=a.length>1&&!t||1===a.length;if(this.targets=[],l&&o._findTargetCorner(s,h))return o;if(a.length>1&&!t&&o===this._searchPossibleTargets([o],s))return o;if(1===a.length&&o===this._searchPossibleTargets([o],s)){if(!this.preserveObjectStacking)return o;r=o,n=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,s);return e[this.altSelectionKey]&&c&&r&&c!==r&&(c=r,this.targets=n),c}},_checkTarget:function(e,t,i){if(t&&t.visible&&t.evented&&t.containsPoint(e)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||t.isEditing)return!0;if(!this.isTargetTransparent(t,i.x,i.y))return!0}},_searchPossibleTargets:function(e,t){for(var i,r,n=e.length;n--;){var s=e[n],o=s.group?this._normalizePointer(s.group,t):t;if(this._checkTarget(o,s,t)){(i=e[n]).subTargetCheck&&i instanceof x.Group&&(r=this._searchPossibleTargets(i._objects,t))&&this.targets.push(r);break}}return i},restorePointerVpt:function(e){return x.util.transformPoint(e,x.util.invertTransform(this.viewportTransform))},getPointer:function(t,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=e(t),s=this.upperCanvasEl,o=s.getBoundingClientRect(),a=o.width||0,h=o.height||0;a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var l=this.getRetinaScaling();return 1!==l&&(n.x/=l,n.y/=l),r=0===a||0===h?{width:1,height:1}:{width:s.width/a,height:s.height/h},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),t=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),x.util.addClass(i,"upper-canvas "+e),this.wrapperEl.appendChild(i),this._copyCanvasStyle(t,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=x.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),x.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),x.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.width||e.width,i=this.height||e.height;x.util.setStyle(e,{position:"absolute",width:t+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),e.width=t,e.height=i,x.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var e=this._activeObject;return e?"activeSelection"===e.type&&e._objects?e._objects.slice(0):[e]:[]},_onObjectRemoved:function(e){e===this._activeObject&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared",{target:e}),e.fire("deselected")),e===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",e)},_fireSelectionEvents:function(e,t){var i=!1,r=this.getActiveObjects(),n=[],s=[];e.forEach((function(e){-1===r.indexOf(e)&&(i=!0,e.fire("deselected",{e:t,target:e}),s.push(e))})),r.forEach((function(r){-1===e.indexOf(r)&&(i=!0,r.fire("selected",{e:t,target:r}),n.push(r))})),e.length>0&&r.length>0?i&&this.fire("selection:updated",{e:t,selected:n,deselected:s}):r.length>0?this.fire("selection:created",{e:t,selected:n}):e.length>0&&this.fire("selection:cleared",{e:t,deselected:s})},setActiveObject:function(e,t){var i=this.getActiveObjects();return this._setActiveObject(e,t),this._fireSelectionEvents(i,t),this},_setActiveObject:function(e,t){return this._activeObject!==e&&!!this._discardActiveObject(t,e)&&!e.onSelect({e:t})&&(this._activeObject=e,!0)},_discardActiveObject:function(e,t){var i=this._activeObject;if(i){if(i.onDeselect({e,object:t}))return!1;this._activeObject=null}return!0},discardActiveObject:function(e){var t=this.getActiveObjects(),i=this.getActiveObject();return t.length&&this.fire("before:selection:cleared",{target:i,e}),this._discardActiveObject(e),this._fireSelectionEvents(t,e),this},dispose:function(){var e=this.wrapperEl;return this.removeListeners(),e.removeChild(this.upperCanvasEl),e.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(e){x.util.cleanUpJsdomNode(this[e]),this[e]=void 0}.bind(this)),e.parentNode&&e.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,x.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(e){var t=this._activeObject;t&&t._renderControls(e)},_toObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(e),n=this.callSuper("_toObject",e,t,i);return this._unwindGroupTransformOnObject(e,r),n},_realizeGroupTransformOnObject:function(e){if(e.group&&"activeSelection"===e.group.type&&this._activeObject===e.group){var t={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach((function(i){t[i]=e[i]})),x.util.addTransformToObject(e,this._activeObject.calcOwnMatrix()),t}return null},_unwindGroupTransformOnObject:function(e,t){t&&e.set(t)},_setSVGObject:function(e,t,i){var r=this._realizeGroupTransformOnObject(t);this.callSuper("_setSVGObject",e,t,i),this._unwindGroupTransformOnObject(t,r)},setViewportTransform:function(e){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),x.StaticCanvas.prototype.setViewportTransform.call(this,e)}}),x.StaticCanvas)"prototype"!==r&&(x.Canvas[r]=x.StaticCanvas[r])}(),function(){var e=x.util.addListener,t=x.util.removeListener,i={passive:!1};function r(e,t){return e.button&&e.button===t-1}x.util.object.extend(x.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(e,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(e,t){var r=this.upperCanvasEl,n=this._getEventPrefix();e(x.window,"resize",this._onResize),e(r,n+"down",this._onMouseDown),e(r,n+"move",this._onMouseMove,i),e(r,n+"out",this._onMouseOut),e(r,n+"enter",this._onMouseEnter),e(r,"wheel",this._onMouseWheel),e(r,"contextmenu",this._onContextMenu),e(r,"dblclick",this._onDoubleClick),e(r,"dragover",this._onDragOver),e(r,"dragenter",this._onDragEnter),e(r,"dragleave",this._onDragLeave),e(r,"drop",this._onDrop),this.enablePointerEvents||e(r,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&t in eventjs&&(eventjs[t](r,"gesture",this._onGesture),eventjs[t](r,"drag",this._onDrag),eventjs[t](r,"orientation",this._onOrientationChange),eventjs[t](r,"shake",this._onShake),eventjs[t](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(t,"remove");var e=this._getEventPrefix();t(x.document,e+"up",this._onMouseUp),t(x.document,"touchend",this._onTouchEnd,i),t(x.document,e+"move",this._onMouseMove,i),t(x.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(e,t){this.__onTransformGesture&&this.__onTransformGesture(e,t)},_onDrag:function(e,t){this.__onDrag&&this.__onDrag(e,t)},_onMouseWheel:function(e){this.__onMouseWheel(e)},_onMouseOut:function(e){var t=this._hoveredTarget;this.fire("mouse:out",{target:t,e}),this._hoveredTarget=null,t&&t.fire("mouseout",{e});var i=this;this._hoveredTargets.forEach((function(r){i.fire("mouse:out",{target:t,e}),r&&t.fire("mouseout",{e})})),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach((function(e){e.isEditing&&e.hiddenTextarea.focus()}))},_onMouseEnter:function(e){this._currentTransform||this.findTarget(e)||(this.fire("mouse:over",{target:null,e}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(e,t){this.__onOrientationChange&&this.__onOrientationChange(e,t)},_onShake:function(e,t){this.__onShake&&this.__onShake(e,t)},_onLongPress:function(e,t){this.__onLongPress&&this.__onLongPress(e,t)},_onDragOver:function(e){e.preventDefault();var t=this._simpleEventHandler("dragover",e);this._fireEnterLeaveEvents(t,e)},_onDrop:function(e){return this._simpleEventHandler("drop:before",e),this._simpleEventHandler("drop",e)},_onContextMenu:function(e){return this.stopContextMenu&&(e.stopPropagation(),e.preventDefault()),!1},_onDoubleClick:function(e){this._cacheTransformEventData(e),this._handleEvent(e,"dblclick"),this._resetTransformEventData(e)},getPointerId:function(e){var t=e.changedTouches;return t?t[0]&&t[0].identifier:this.enablePointerEvents?e.pointerId:-1},_isMainEvent:function(e){return!0===e.isPrimary||!1!==e.isPrimary&&("touchend"===e.type&&0===e.touches.length||!e.changedTouches||e.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();e(x.document,"touchend",this._onTouchEnd,i),e(x.document,"touchmove",this._onMouseMove,i),t(n,s+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();t(n,s+"move",this._onMouseMove,i),e(x.document,s+"up",this._onMouseUp),e(x.document,s+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var n=this._getEventPrefix();t(x.document,"touchend",this._onTouchEnd,i),t(x.document,"touchmove",this._onMouseMove,i);var s=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((function(){e(s.upperCanvasEl,n+"down",s._onMouseDown),s._willAddMouseDown=0}),400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();this._isMainEvent(r)&&(t(x.document,s+"up",this._onMouseUp),t(x.document,s+"move",this._onMouseMove,i),e(n,s+"move",this._onMouseMove,i))},_onMouseMove:function(e){!this.allowTouchScrolling&&e.preventDefault&&e.preventDefault(),this.__onMouseMove(e)},_onResize:function(){this.calcOffset()},_shouldRender:function(e){var t=this._activeObject;return!!(!!t!=!!e||t&&e&&t!==e)||(t&&t.isEditing,!1)},__onMouseUp:function(e){var t,i=this._currentTransform,n=this._groupSelector,s=!1,o=!n||0===n.left&&0===n.top;if(this._cacheTransformEventData(e),t=this._target,this._handleEvent(e,"up:before"),r(e,3))this.fireRightClick&&this._handleEvent(e,"up",3,o);else{if(r(e,2))return this.fireMiddleClick&&this._handleEvent(e,"up",2,o),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else if(this._isMainEvent(e)){if(i&&(this._finalizeCurrentTransform(e),s=i.actionPerformed),!o){var a=t===this._activeObject;this._maybeGroupObjects(e),s||(s=this._shouldRender(t)||!a&&t===this._activeObject)}var h,l;if(t){if(h=t._findTargetCorner(this.getPointer(e,!0),x.util.isTouchEvent(e)),t.selectable&&t!==this._activeObject&&"up"===t.activeOn)this.setActiveObject(t,e),s=!0;else{var c=t.controls[h],u=c&&c.getMouseUpHandler(e,t,c);u&&u(e,i,(l=this.getPointer(e)).x,l.y)}t.isMoving=!1}if(i&&(i.target!==t||i.corner!==h)){var d=i.target&&i.target.controls[i.corner],f=d&&d.getMouseUpHandler(e,t,c);l=l||this.getPointer(e),f&&f(e,i,l.x,l.y)}this._setCursorFromEvent(e,t),this._handleEvent(e,"up",1,o),this._groupSelector=null,this._currentTransform=null,t&&(t.__corner=0),s?this.requestRenderAll():o||this.renderTop()}}},_simpleEventHandler:function(e,t){var i=this.findTarget(t),r=this.targets,n={e:t,target:i,subTargets:r};if(this.fire(e,n),i&&i.fire(e,n),!r)return i;for(var s=0;s1&&(t=new x.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(t,e))},_collectObjects:function(e){for(var t,i=[],r=this._groupSelector.ex,n=this._groupSelector.ey,s=r+this._groupSelector.left,o=n+this._groupSelector.top,a=new x.Point(v(r,s),v(n,o)),h=new x.Point(y(r,s),y(n,o)),l=!this.selectionFullyContained,c=r===s&&n===o,u=this._objects.length;u--&&!((t=this._objects[u])&&t.selectable&&t.visible&&(l&&t.intersectsWithRect(a,h,!0)||t.isContainedWithinRect(a,h,!0)||l&&t.containsPoint(a,null,!0)||l&&t.containsPoint(h,null,!0))&&(i.push(t),c)););return i.length>1&&(i=i.filter((function(t){return!t.onSelect({e})}))),i},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e),this.setCursor(this.defaultCursor),this._groupSelector=null}}),x.util.object.extend(x.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",i=e.quality||1,r=(e.multiplier||1)*(e.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(r,e);return x.util.toDataURL(n,t,i)},toCanvasElement:function(e,t){e=e||1;var i=((t=t||{}).width||this.width)*e,r=(t.height||this.height)*e,n=this.getZoom(),s=this.width,o=this.height,a=n*e,h=this.viewportTransform,l=(h[4]-(t.left||0))*e,c=(h[5]-(t.top||0))*e,u=this.interactive,d=[a,0,0,a,l,c],f=this.enableRetinaScaling,g=x.util.createCanvasElement(),_=this.contextTop;return g.width=i,g.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=h,this.width=s,this.height=o,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=f,this.contextTop=_,g}}),x.util.object.extend(x.StaticCanvas.prototype,{loadFromJSON:function(e,t,i){if(e){var r="string"==typeof e?JSON.parse(e):x.util.object.clone(e),n=this,s=r.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,(function(e){n.clear(),n._setBgOverlay(r,(function(){s?n._enlivenObjects([s],(function(i){n.clipPath=i[0],n.__setupCanvas.call(n,r,e,o,t)})):n.__setupCanvas.call(n,r,e,o,t)}))}),i),this}},__setupCanvas:function(e,t,i,r){var n=this;t.forEach((function(e,t){n.insertAt(e,t)})),this.renderOnAddRemove=i,delete e.objects,delete e.backgroundImage,delete e.overlayImage,delete e.background,delete e.overlay,this._setOptions(e),this.renderAll(),r&&r()},_setBgOverlay:function(e,t){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(e.backgroundImage||e.overlayImage||e.background||e.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&t&&t()};this.__setBgOverlay("backgroundImage",e.backgroundImage,i,r),this.__setBgOverlay("overlayImage",e.overlayImage,i,r),this.__setBgOverlay("backgroundColor",e.background,i,r),this.__setBgOverlay("overlayColor",e.overlay,i,r)}else t&&t()},__setBgOverlay:function(e,t,i,r){var n=this;if(!t)return i[e]=!0,void(r&&r());"backgroundImage"===e||"overlayImage"===e?x.util.enlivenObjects([t],(function(t){n[e]=t[0],i[e]=!0,r&&r()})):this["set"+x.util.string.capitalize(e,!0)](t,(function(){i[e]=!0,r&&r()}))},_enlivenObjects:function(e,t,i){e&&0!==e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),null,i):t&&t([])},_toDataURL:function(e,t){this.clone((function(i){t(i.toDataURL(e))}))},_toDataURLWithMultiplier:function(e,t,i){this.clone((function(r){i(r.toDataURLWithMultiplier(e,t))}))},clone:function(e,t){var i=JSON.stringify(this.toJSON(t));this.cloneWithoutData((function(t){t.loadFromJSON(i,(function(){e&&e(t)}))}))},cloneWithoutData:function(e){var t=x.util.createCanvasElement();t.width=this.width,t.height=this.height;var i=new x.Canvas(t);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,(function(){i.renderAll(),e&&e(i)})),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):e&&e(i)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n=t.util.toFixed,s=t.util.string.capitalize,o=t.util.degreesToRadians,a=!t.isLikelyNode;t.Object||(t.Object=t.util.createClass(t.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(e){e&&this.setOptions(e)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=t.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(e){var i=t.perfLimitSizeTotal,r=e.width,n=e.height,s=t.maxCacheSideLimit,o=t.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rc&&(e.zoomX/=r/c,e.width=c,e.capped=!0),n>u&&(e.zoomY/=n/u,e.height=u,e.capped=!0),e},_getCacheCanvasDimensions:function(){var e=this.getTotalObjectScaling(),t=this._getTransformedDimensions(0,0),i=t.x*e.scaleX/this.scaleX,r=t.y*e.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:e.scaleX,zoomY:e.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var e=this.canvas;if(this.noScaleCache&&e&&e._currentTransform){var i=e._currentTransform.target,r=e._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,s,o=this._cacheCanvas,a=this._limitCacheSize(this._getCacheCanvasDimensions()),h=t.minCacheSideLimit,l=a.width,c=a.height,u=a.zoomX,d=a.zoomY,f=l!==this.cacheWidth||c!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==d,_=f||g,p=0,m=0,v=!1;if(f){var y=this._cacheCanvas.width,S=this._cacheCanvas.height,b=l>y||c>S;v=b||(l<.9*y||c<.9*S)&&y>h&&S>h,b&&!a.capped&&(l>h||c>h)&&(p=.1*l,m=.1*c)}return this instanceof t.Text&&this.path&&(_=!0,v=!0,p+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!_&&(v?(o.width=Math.ceil(l+p),o.height=Math.ceil(c+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,o.width,o.height)),n=a.x/2,s=a.y/2,this.cacheTranslationX=Math.round(o.width/2-n)+n,this.cacheTranslationY=Math.round(o.height/2-s)+s,this.cacheWidth=l,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,d),this.zoomX=u,this.zoomY=d,!0)},setOptions:function(e){this._setOptions(e),this._initGradient(e.fill,"fill"),this._initGradient(e.stroke,"stroke"),this._initPattern(e.fill,"fill"),this._initPattern(e.stroke,"stroke")},transform:function(e){var t=this.group&&!this.group._transformDone||this.group&&this.canvas&&e===this.canvas.contextTop,i=this.calcTransformMatrix(!t);e.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(e){var i=t.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:t.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(r.clipPath=this.clipPath.toObject(e),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),t.util.populateWithProperties(this,r,e),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var i=t.util.getKlass(e.type).prototype;return i.stateProperties.forEach((function(t){"left"!==t&&"top"!==t&&(e[t]===i[t]&&delete e[t],Array.isArray(e[t])&&Array.isArray(i[t])&&0===e[t].length&&0===i[t].length&&delete e[t])})),e},toString:function(){return"#"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var e=t.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(e.scaleX),scaleY:Math.abs(e.scaleY)}},getTotalObjectScaling:function(){var e=this.getObjectScaling(),t=e.scaleX,i=e.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();t*=r*n,i*=r*n}return{scaleX:t,scaleY:i}},getObjectOpacity:function(){var e=this.opacity;return this.group&&(e*=this.group.getObjectOpacity()),e},_set:function(e,i){var r="scaleX"===e||"scaleY"===e,n=this[e]!==i,s=!1;return r&&(i=this._constrainScale(i)),"scaleX"===e&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===e&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==e||!i||i instanceof t.Shadow?"dirty"===e&&this.group&&this.group.set("dirty",i):i=new t.Shadow(i),this[e]=i,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(e)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(e)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:t.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(e){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(e.save(),this._setupCompositeOperation(e),this.drawSelectionBackground(e),this.transform(e),this._setOpacity(e),this._setShadow(e,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(e)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(e),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),e.restore())},renderCache:function(e){e=e||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,e.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(e,i){if(e.save(),i.inverted?e.globalCompositeOperation="destination-out":e.globalCompositeOperation="destination-in",i.absolutePositioned){var r=t.util.invertTransform(this.calcTransformMatrix());e.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(e),e.scale(1/i.zoomX,1/i.zoomY),e.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),e.restore()},drawObject:function(e,t){var i=this.fill,r=this.stroke;t?(this.fill="black",this.stroke="",this._setClippingProperties(e)):this._renderBackground(e),this._render(e),this._drawClipPath(e,this.clipPath),this.fill=i,this.stroke=r},_drawClipPath:function(e,t){t&&(t.canvas=this.canvas,t.shouldCache(),t._transformDone=!0,t.renderCache({forClipping:!0}),this.drawClipPathOnCache(e,t))},drawCacheOnCanvas:function(e){e.scale(1/this.zoomX,1/this.zoomY),e.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(e){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!e&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!e){var t=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-t/2,-i/2,t,i)}return!0}return!1},_renderBackground:function(e){if(this.backgroundColor){var t=this._getNonTransformedDimensions();e.fillStyle=this.backgroundColor,e.fillRect(-t.x/2,-t.y/2,t.x,t.y),this._removeShadow(e)}},_setOpacity:function(e){this.group&&!this.group._transformDone?e.globalAlpha=this.getObjectOpacity():e.globalAlpha*=this.opacity},_setStrokeStyles:function(e,t){var i=t.stroke;i&&(e.lineWidth=t.strokeWidth,e.lineCap=t.strokeLineCap,e.lineDashOffset=t.strokeDashOffset,e.lineJoin=t.strokeLineJoin,e.miterLimit=t.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(e,i):(e.strokeStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,i)):e.strokeStyle=t.stroke)},_setFillStyles:function(e,t){var i=t.fill;i&&(i.toLive?(e.fillStyle=i.toLive(e,this),this._applyPatternGradientTransform(e,t.fill)):e.fillStyle=i)},_setClippingProperties:function(e){e.globalAlpha=1,e.strokeStyle="transparent",e.fillStyle="#000000"},_setLineDash:function(e,t){t&&0!==t.length&&(1&t.length&&t.push.apply(t,t),e.setLineDash(t))},_renderControls:function(e,i){var r,n,s,a=this.getViewportTransform(),h=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==i.hasControls?i.hasControls:this.hasControls,h=t.util.multiplyTransformMatrices(a,h),r=t.util.qrDecompose(h),e.save(),e.translate(r.translateX,r.translateY),e.lineWidth=1*this.borderScaleFactor,this.group||(e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(r.angle-=180),e.rotate(o(this.group?r.angle:this.angle)),i.forActiveSelection||this.group?n&&this.drawBordersInGroup(e,r,i):n&&this.drawBorders(e,i),s&&this.drawControls(e,i),e.restore()},_setShadow:function(e){if(this.shadow){var i,r=this.shadow,n=this.canvas,s=n&&n.viewportTransform[0]||1,o=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(s*=t.devicePixelRatio,o*=t.devicePixelRatio),e.shadowColor=r.color,e.shadowBlur=r.blur*t.browserShadowBlurConstant*(s+o)*(i.scaleX+i.scaleY)/4,e.shadowOffsetX=r.offsetX*s*i.scaleX,e.shadowOffsetY=r.offsetY*o*i.scaleY}},_removeShadow:function(e){this.shadow&&(e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0)},_applyPatternGradientTransform:function(e,t){if(!t||!t.toLive)return{offsetX:0,offsetY:0};var i=t.gradientTransform||t.patternTransform,r=-this.width/2+t.offsetX||0,n=-this.height/2+t.offsetY||0;return"percentage"===t.gradientUnits?e.transform(this.width,0,0,this.height,r,n):e.transform(1,0,0,1,r,n),i&&e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(e){"stroke"===this.paintFirst?(this._renderStroke(e),this._renderFill(e)):(this._renderFill(e),this._renderStroke(e))},_render:function(){},_renderFill:function(e){this.fill&&(e.save(),this._setFillStyles(e,this),"evenodd"===this.fillRule?e.fill("evenodd"):e.fill(),e.restore())},_renderStroke:function(e){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e),e.save(),this.strokeUniform&&this.group){var t=this.getObjectScaling();e.scale(1/t.scaleX,1/t.scaleY)}else this.strokeUniform&&e.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(e,this.strokeDashArray),this._setStrokeStyles(e,this),e.stroke(),e.restore()}},_applyPatternForTransformedGradient:function(e,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),s=t.util.createCanvasElement(),o=this.canvas.getRetinaScaling(),a=n.x/this.scaleX/o,h=n.y/this.scaleY/o;s.width=a,s.height=h,(r=s.getContext("2d")).beginPath(),r.moveTo(0,0),r.lineTo(a,0),r.lineTo(a,h),r.lineTo(0,h),r.closePath(),r.translate(a/2,h/2),r.scale(n.zoomX/this.scaleX/o,n.zoomY/this.scaleY/o),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(e),r.fill(),e.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),e.scale(o*this.scaleX/n.zoomX,o*this.scaleY/n.zoomY),e.strokeStyle=r.createPattern(s,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var e=t.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",e.scaleX),this.set("scaleY",e.scaleY),this.angle=e.angle,this.skewX=e.skewX,this.skewY=0}},_removeTransformMatrix:function(e){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=t.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,e&&(this.scaleX*=e.scaleX,this.scaleY*=e.scaleY,this.cropX=e.cropX,this.cropY=e.cropY,i.x+=e.offsetLeft,i.y+=e.offsetTop,this.width=e.width,this.height=e.height),this.setPositionByOrigin(i,"center","center")},clone:function(e,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,e):t.Object._fromObject("Object",r,e)},cloneAsImage:function(e,i){var r=this.toCanvasElement(i);return e&&e(new t.Image(r)),this},toCanvasElement:function(e){e||(e={});var i=t.util,r=i.saveObjectTransform(this),n=this.group,s=this.shadow,o=Math.abs,a=(e.multiplier||1)*(e.enableRetinaScaling?t.devicePixelRatio:1);delete this.group,e.withoutTransform&&i.resetObjectTransform(this),e.withoutShadow&&(this.shadow=null);var h,l,c,u,d=t.util.createCanvasElement(),f=this.getBoundingRect(!0,!0),g=this.shadow,_={x:0,y:0};g&&(l=g.blur,h=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),_.x=2*Math.round(o(g.offsetX)+l)*o(h.scaleX),_.y=2*Math.round(o(g.offsetY)+l)*o(h.scaleY)),c=f.width+_.x,u=f.height+_.y,d.width=Math.ceil(c),d.height=Math.ceil(u);var p=new t.StaticCanvas(d,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===e.format&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new t.Point(p.width/2,p.height/2),"center","center");var m=this.canvas;p.add(this);var v=p.toCanvasElement(a||1,e);return this.shadow=s,this.set("canvas",m),n&&(this.group=n),this.set(r).setCoords(),p._objects=[],p.dispose(),p=null,v},toDataURL:function(e){return e||(e={}),t.util.toDataURL(this.toCanvasElement(e),e.format||"png",e.quality||1)},isType:function(e){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===e},complexity:function(){return 1},toJSON:function(e){return this.toObject(e)},rotate:function(e){var t=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(e,i){i=i||this.canvas.getPointer(e);var r=new t.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=t.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(e){this.globalCompositeOperation&&(e.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){t.runningAnimations&&t.runningAnimations.cancelByTarget(this)}}),t.util.createAccessors&&t.util.createAccessors(t.Object),i(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.ENLIVEN_PROPS=["clipPath"],t.Object._fromObject=function(e,i,n,s){var o=t[e];i=r(i,!0),t.util.enlivenPatterns([i.fill,i.stroke],(function(e){void 0!==e[0]&&(i.fill=e[0]),void 0!==e[1]&&(i.stroke=e[1]),t.util.enlivenObjectEnlivables(i,i,(function(){var e=s?new o(i[s],i):new o(i);n&&n(e)}))}))},t.Object.__uid=0)}(t),S=x.util.degreesToRadians,b={left:-.5,center:0,right:.5},w={top:-.5,center:0,bottom:.5},x.util.object.extend(x.Object.prototype,{translateToGivenOrigin:function(e,t,i,r,n){var s,o,a,h=e.x,l=e.y;return"string"==typeof t?t=b[t]:t-=.5,"string"==typeof r?r=b[r]:r-=.5,"string"==typeof i?i=w[i]:i-=.5,"string"==typeof n?n=w[n]:n-=.5,o=n-i,((s=r-t)||o)&&(a=this._getTransformedDimensions(),h=e.x+s*a.x,l=e.y+o*a.y),new x.Point(h,l)},translateToCenterPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,t,i,"center","center");return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},translateToOriginPoint:function(e,t,i){var r=this.translateToGivenOrigin(e,"center","center",t,i);return this.angle?x.util.rotatePoint(r,e,S(this.angle)):r},getCenterPoint:function(){var e=new x.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var i=this.getCenterPoint();return this.translateToOriginPoint(i,e,t)},toLocalPoint:function(e,t,i){var r,n,s=this.getCenterPoint();return r=void 0!==t&&void 0!==i?this.translateToGivenOrigin(s,"center","center",t,i):new x.Point(this.left,this.top),n=new x.Point(e.x,e.y),this.angle&&(n=x.util.rotatePoint(n,s,-S(this.angle))),n.subtractEquals(r)},setPositionByOrigin:function(e,t,i){var r=this.translateToCenterPoint(e,t,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(e){var t,i,r=S(this.angle),n=this.getScaledWidth(),s=x.util.cos(r)*n,o=x.util.sin(r)*n;t="string"==typeof this.originX?b[this.originX]:this.originX-.5,i="string"==typeof e?b[e]:e-.5,this.left+=s*(i-t),this.top+=o*(i-t),this.setCoords(),this.originX=e},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),function(){var e=x.util,t=e.degreesToRadians,i=e.multiplyTransformMatrices,r=e.transformPoint;e.object.extend(x.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(e,t){return t?e?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),e?this.aCoords:this.lineCoords)},getCoords:function(e,t){return i=this._getCoords(e,t),[new x.Point(i.tl.x,i.tl.y),new x.Point(i.tr.x,i.tr.y),new x.Point(i.br.x,i.br.y),new x.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(e,t,i,r){var n=this.getCoords(i,r);return"Intersection"===x.Intersection.intersectPolygonRectangle(n,e,t).status},intersectsWithObject:function(e,t,i){return"Intersection"===x.Intersection.intersectPolygonPolygon(this.getCoords(t,i),e.getCoords(t,i)).status||e.isContainedWithinObject(this,t,i)||this.isContainedWithinObject(e,t,i)},isContainedWithinObject:function(e,t,i){for(var r=this.getCoords(t,i),n=t?e.aCoords:e.lineCoords,s=0,o=e._getImageLines(n);s<4;s++)if(!e.containsPoint(r[s],o))return!1;return!0},isContainedWithinRect:function(e,t,i,r){var n=this.getBoundingRect(i,r);return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e,t,i,r){var n=this._getCoords(i,r),s=(t=t||this._getImageLines(n),this._findCrossPoints(e,t));return 0!==s&&s%2==1},isOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,e).some((function(e){return e.x<=i.x&&e.x>=t.x&&e.y<=i.y&&e.y>=t.y}))||!!this.intersectsWithRect(t,i,!0,e)||this._containsCenterOfCanvas(t,i,e)},_containsCenterOfCanvas:function(e,t,i){var r={x:(e.x+t.x)/2,y:(e.y+t.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(e){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(t,i,!0,e)||this.getCoords(!0,e).every((function(e){return(e.x>=i.x||e.x<=t.x)&&(e.y>=i.y||e.y<=t.y)}))&&this._containsCenterOfCanvas(t,i,e)},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var i,r,n,s=0;for(var o in t)if(!((n=t[o]).o.y=e.y&&n.d.y>=e.y||(n.o.x===n.d.x&&n.o.x>=e.x?r=n.o.x:(i=(n.d.y-n.o.y)/(n.d.x-n.o.x),r=-(e.y-0*e.x-(n.o.y-i*n.o.x))/(0-i)),r>=e.x&&(s+=1),2!==s)))break;return s},getBoundingRect:function(t,i){var r=this.getCoords(t,i);return e.makeBoundingBoxFromPoints(r)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(e){return Math.abs(e)\n')}},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(e),{reviver:e})},toClipPathSVG:function(e){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(e),{reviver:e})},_createBaseClipPathSVGMarkup:function(e,t){var i=(t=t||{}).reviver,r=t.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=e.indexOf("COMMON_PARTS");return e[s]=n,i?i(e.join("")):e.join("")},_createBaseSVGMarkup:function(e,t){var i,r,n=(t=t||{}).noStyle,s=t.reviver,o=n?"":'style="'+this.getSvgStyles()+'" ',a=t.withShadow?'style="'+this.getSvgFilter()+'" ':"",h=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=h&&h.absolutePositioned,u=this.stroke,d=this.fill,f=this.shadow,g=[],_=e.indexOf("COMMON_PARTS"),p=t.additionalTransform;return h&&(h.clipPathId="CLIPPATH_"+x.Object.__uid++,r='\n'+h.toClipPathSVG(s)+"\n"),c&&g.push("\n"),g.push("\n"),i=[o,l,n?"":this.addPaintOrder()," ",p?'transform="'+p+'" ':""].join(""),e[_]=i,d&&d.toLive&&g.push(d.toSVG(this)),u&&u.toLive&&g.push(u.toSVG(this)),f&&g.push(f.toSVG(this)),h&&g.push(r),g.push(e.join("")),g.push("\n"),c&&g.push("\n"),s?s(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var e=x.util.object.extend,t="stateProperties";function i(t,i,r){var n={};r.forEach((function(e){n[e]=t[e]})),e(t[i],n,!0)}function r(e,t,i){if(e===t)return!0;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(var n=0,s=e.length;n=0;h--)if(n=a[h],this.isControlVisible(n)&&(r=this._getImageLines(t?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:s,y:o},r))&&i%2==1))return this.__corner=n,n;return!1},forEachControl:function(e){for(var t in this.controls)e(this.controls[t],t,this)},_setCornerCoords:function(){var e=this.oCoords;for(var t in e){var i=this.controls[t];e[t].corner=i.calcCornerCoords(this.angle,this.cornerSize,e[t].x,e[t].y,!1),e[t].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,e[t].x,e[t].y,!0)}},drawSelectionBackground:function(t){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;t.save();var i=this.getCenterPoint(),r=this._calculateCurrentDimensions(),n=this.canvas.viewportTransform;return t.translate(i.x,i.y),t.scale(1/n[0],1/n[3]),t.rotate(e(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-r.x/2,-r.y/2,r.x,r.y),t.restore(),this},drawBorders:function(e,t){t=t||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,n=i.x+r,s=i.y+r,o=void 0!==t.hasControls?t.hasControls:this.hasControls,a=!1;return e.save(),e.strokeStyle=t.borderColor||this.borderColor,this._setLineDash(e,t.borderDashArray||this.borderDashArray),e.strokeRect(-n/2,-s/2,n,s),o&&(e.beginPath(),this.forEachControl((function(t,i,r){t.withConnection&&t.getVisibility(r,i)&&(a=!0,e.moveTo(t.x*n,t.y*s),e.lineTo(t.x*n+t.offsetX,t.y*s+t.offsetY))})),a&&e.stroke()),e.restore(),this},drawBordersInGroup:function(e,t,i){i=i||{};var r=x.util.sizeAfterTransform(this.width,this.height,t),n=this.strokeWidth,s=this.strokeUniform,o=this.borderScaleFactor,a=r.x+n*(s?this.canvas.getZoom():t.scaleX)+o,h=r.y+n*(s?this.canvas.getZoom():t.scaleY)+o;return e.save(),this._setLineDash(e,i.borderDashArray||this.borderDashArray),e.strokeStyle=i.borderColor||this.borderColor,e.strokeRect(-a/2,-h/2,a,h),e.restore(),this},drawControls:function(e,t){t=t||{},e.save();var i,r,n=this.canvas.getRetinaScaling();return e.setTransform(n,0,0,n,0,0),e.strokeStyle=e.fillStyle=t.cornerColor||this.cornerColor,this.transparentCorners||(e.strokeStyle=t.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(e,t.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl((function(n,s,o){r=o.oCoords[s],n.getVisibility(o,s)&&(i&&(r=x.util.transformPoint(r,i)),n.render(e,r.x,r.y,t,o))})),e.restore(),this},isControlVisible:function(e){return this.controls[e]&&this.controls[e].getVisibility(this,e)},setControlVisible:function(e,t){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[e]=t,this},setControlsVisibility:function(e){for(var t in e||(e={}),e)this.setControlVisible(t,e[t]);return this},onDeselect:function(){},onSelect:function(){}})}(),x.util.object.extend(x.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxCenterObjectV:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.requestRenderAll(),n()},onComplete:function(){e.setCoords(),r()}})},fxRemove:function(e,t){var i=function(){},r=(t=t||{}).onComplete||i,n=t.onChange||i,s=this;return x.util.animate({target:this,startValue:e.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(t){e.set("opacity",t),s.requestRenderAll(),n()},onComplete:function(){s.remove(e),r()}})}}),x.util.object.extend(x.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var e,t,i=[],r=[];for(e in arguments[0])i.push(e);for(var n=0,s=i.length;n-1||n&&s.colorProperties.indexOf(n[1])>-1,a=n?this.get(n[0])[n[1]]:this.get(e);"from"in i||(i.from=a),o||(t=~t.indexOf("=")?a+parseFloat(t.replace("=","")):parseFloat(t));var h={target:this,startValue:i.from,endValue:t,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(e,t,r){return i.abort.call(s,e,t,r)},onChange:function(t,o,a){n?s[n[0]][n[1]]=t:s.set(e,t),r||i.onChange&&i.onChange(t,o,a)},onComplete:function(e,t,n){r||(s.setCoords(),i.onComplete&&i.onComplete(e,t,n))}};return o?x.util.animateColor(h.startValue,h.endValue,h.duration,h):x.util.animate(h)}}),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.object.clone,n={x1:1,x2:1,y1:1,y2:1};function s(e,t){var i=e.origin,r=e.axis1,n=e.axis2,s=e.dimension,o=t.nearest,a=t.center,h=t.farthest;return function(){switch(this.get(i)){case o:return Math.min(this.get(r),this.get(n));case a:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case h:return Math.max(this.get(r),this.get(n))}}}t.Line?t.warn("fabric.Line is already defined"):(t.Line=t.util.createClass(t.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:t.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(e,t){e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,t){return this.callSuper("_set",e,t),void 0!==n[e]&&this._setWidthHeight(),this},_getLeftToOriginX:s({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:s({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e){e.beginPath();var t=this.calcLinePoints();e.moveTo(t.x1,t.y1),e.lineTo(t.x2,t.y2),e.lineWidth=this.strokeWidth;var i=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(e){return i(this.callSuper("toObject",e),this.calcLinePoints())},_getNonTransformedDimensions:function(){var e=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(e.y-=this.strokeWidth),0===this.height&&(e.x-=this.strokeWidth)),e},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,t=this.y1<=this.y2?-1:1,i=e*this.width*.5,r=t*this.height*.5;return{x1:i,x2:e*this.width*-.5,y1:r,y2:t*this.height*-.5}},_toSVG:function(){var e=this.calcLinePoints();return["\n']}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r,n){n=n||{};var s=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];r(new t.Line(o,i(s,n)))},t.Line.fromObject=function(e,i){var n=r(e,!0);n.points=[e.x1,e.y1,e.x2,e.y2],t.Object._fromObject("Line",n,(function(e){delete e.points,i&&i(e)}),"points")})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.degreesToRadians;t.Circle?t.warn("fabric.Circle is already defined."):(t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:t.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(e,t){return this.callSuper("_set",e,t),"radius"===e&&this.setRadius(t),this},toObject:function(e){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(e))},_toSVG:function(){var e,r=(this.endAngle-this.startAngle)%360;if(0===r)e=["\n'];else{var n=i(this.startAngle),s=i(this.endAngle),o=this.radius;e=['180?"1":"0")+" 1"," "+t.util.cos(s)*o+" "+t.util.sin(s)*o,'" ',"COMMON_PARTS"," />\n"]}return e},_render:function(e){e.beginPath(),e.arc(0,0,this.radius,i(this.startAngle),i(this.endAngle),!1),this._renderPaintInOrder(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){return this.radius=e,this.set("width",2*e).set("height",2*e)}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,i){var r,n=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!("radius"in(r=n)&&r.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,i(new t.Circle(n))},t.Circle.fromObject=function(e,i){t.Object._fromObject("Circle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={});t.Triangle?t.warn("fabric.Triangle is already defined"):(t.Triangle=t.util.createClass(t.Object,{type:"triangle",width:100,height:100,_render:function(e){var t=this.width/2,i=this.height/2;e.beginPath(),e.moveTo(-t,i),e.lineTo(0,-i),e.lineTo(t,i),e.closePath(),this._renderPaintInOrder(e)},_toSVG:function(){var e=this.width/2,t=this.height/2;return["']}}),t.Triangle.fromObject=function(e,i){return t.Object._fromObject("Triangle",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=2*Math.PI;t.Ellipse?t.warn("fabric.Ellipse is already defined."):(t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this.set("rx",e&&e.rx||0),this.set("ry",e&&e.ry||0)},_set:function(e,t){switch(this.callSuper("_set",e,t),e){case"rx":this.rx=t,this.set("width",2*t);break;case"ry":this.ry=t,this.set("height",2*t)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']},_render:function(e){e.beginPath(),e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(0,0,this.rx,0,i,!1),e.restore(),this._renderPaintInOrder(e)}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,i){var r=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new t.Ellipse(r))},t.Ellipse.fromObject=function(e,i){t.Object._fromObject("Ellipse",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend;t.Rect?t.warn("fabric.Rect is already defined"):(t.Rect=t.util.createClass(t.Object,{stateProperties:t.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:t.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(e){this.callSuper("initialize",e),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==t||0!==i,h=.4477152502;e.beginPath(),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-h*t,o,s+r,o+h*i,s+r,o+i),e.lineTo(s+r,o+n-i),a&&e.bezierCurveTo(s+r,o+n-h*i,s+r-h*t,o+n,s+r-t,o+n),e.lineTo(s+t,o+n),a&&e.bezierCurveTo(s+h*t,o+n,s,o+n-h*i,s,o+n-i),e.lineTo(s,o+i),a&&e.bezierCurveTo(s,o+h*i,s+h*t,o,s+t,o),e.closePath(),this._renderPaintInOrder(e)},toObject:function(e){return this.callSuper("toObject",["rx","ry"].concat(e))},_toSVG:function(){return["\n']}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r,n){if(!e)return r(null);n=n||{};var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.height=s.height||0,s.width=s.width||0;var o=new t.Rect(i(n?t.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},t.Rect.fromObject=function(e,i){return t.Object._fromObject("Rect",e,i)})}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.util.object.extend,r=t.util.array.min,n=t.util.array.max,s=t.util.toFixed,o=t.util.projectStrokeOnPoints;t.Polyline?t.warn("fabric.Polyline is already defined"):(t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:t.Object.prototype.cacheProperties.concat("points"),initialize:function(e,t){t=t||{},this.points=e||[],this.callSuper("initialize",t),this._setPositionDimensions(t)},_projectStrokeOnPoints:function(){return o(this.points,this,!0)},_setPositionDimensions:function(e){var t,i=this._calcDimensions(e),r=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-r,this.height=i.height-r,e.fromSVG||(t=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+r/2,y:i.top-this.strokeWidth/2+r/2},"left","top",this.originX,this.originY)),void 0===e.left&&(this.left=e.fromSVG?i.left:t.x),void 0===e.top&&(this.top=e.fromSVG?i.top:t.y),this.pathOffset={x:i.left+this.width/2+r/2,y:i.top+this.height/2+r/2}},_calcDimensions:function(){var e=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,t=r(e,"x")||0,i=r(e,"y")||0;return{left:t,top:i,width:(n(e,"x")||0)-t,height:(n(e,"y")||0)-i}},toObject:function(e){return i(this.callSuper("toObject",e),{points:this.points.concat()})},_toSVG:function(){for(var e=[],i=this.pathOffset.x,r=this.pathOffset.y,n=t.Object.NUM_FRACTION_DIGITS,o=0,a=this.points.length;o\n']},commonRender:function(e){var t,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;e.beginPath(),e.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(e){return n(this.callSuper("toObject",e),{path:this.path.map((function(e){return e.slice()}))})},toDatalessObject:function(e){var t=this.toObject(["sourcePath"].concat(e));return t.sourcePath&&delete t.path,t},_toSVG:function(){return["\n"]},_getOffsetTransform:function(){var e=t.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,e)+", "+o(-this.pathOffset.y,e)+")"},toClipPathSVG:function(e){var t=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},toSVG:function(e){var t=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,additionalTransform:t})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var e,n,s=[],o=[],a=0,h=0,l=0,c=0,u=0,d=this.path.length;u"},addWithUpdate:function(e){var i=!!this.group;return this._restoreObjectsState(),t.util.resetObjectTransform(this),e&&(i&&t.util.removeTransformFromObject(e,this.group.calcTransformMatrix()),this._objects.push(e),e.group=this,e._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),t.util.resetObjectTransform(this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(e){this.dirty=!0,e.group=this,e._set("canvas",this.canvas)},_onObjectRemoved:function(e){this.dirty=!0,delete e.group},_set:function(e,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(e,i);if("canvas"===e)for(;r--;)this._objects[r]._set(e,i);t.Object.prototype._set.call(this,e,i)},toObject:function(e){var i=this.includeDefaultValues,r=this._objects.filter((function(e){return!e.excludeFromExport})).map((function(t){var r=t.includeDefaultValues;t.includeDefaultValues=i;var n=t.toObject(e);return t.includeDefaultValues=r,n})),n=t.Object.prototype.toObject.call(this,e);return n.objects=r,n},toDatalessObject:function(e){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map((function(t){var i=t.includeDefaultValues;t.includeDefaultValues=n;var r=t.toDatalessObject(e);return t.includeDefaultValues=i,r}))}var s=t.Object.prototype.toDatalessObject.call(this,e);return s.objects=i,s},render:function(e){this._transformDone=!0,this.callSuper("render",e),this._transformDone=!1},shouldCache:function(){var e=t.Object.prototype.shouldCache.call(this);if(e)for(var i=0,r=this._objects.length;i\n"],i=0,r=this._objects.length;i\n"),t},getSvgStyles:function(){var e=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",t=this.visible?"":" visibility: hidden;";return[e,this.getSvgFilter(),t].join("")},toClipPathSVG:function(e){for(var t=[],i=0,r=this._objects.length;i"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(e,t,i){e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",e,t),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;r\n','\t\n',"\n"),o=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(a='" image-rendering="optimizeSpeed'),i.push("\t\n"),this.stroke||this.strokeDashArray){var l=this.fill;this.fill=null,e=["\t\n'],this.fill=l}return"fill"!==this.paintFirst?t.concat(e,i):t.concat(i,e)},getSrc:function(e){var t=e?this._element:this._originalElement;return t?t.toDataURL?t.toDataURL():this.srcFromAttribute?t.getAttribute("src"):t.src:this.src||""},setSrc:function(e,t,i){return x.util.loadImage(e,(function(e,r){this.setElement(e,i),this._setWidthHeight(),t&&t(this,r)}),this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var e=this.resizeFilter,t=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!e||r>t&&n>t)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);x.filterBackend||(x.filterBackend=x.initFilterBackend());var o=x.util.createCanvasElement(),a=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,h=s.width,l=s.height;o.width=h,o.height=l,this._element=o,this._lastScaleX=e.scaleX=r,this._lastScaleY=e.scaleY=n,x.filterBackend.applyFilters([e],s,h,l,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(e){if(e=(e=e||this.filters||[]).filter((function(e){return e&&!e.isNeutralState()})),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===e.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var t=this._originalElement,i=t.naturalWidth||t.width,r=t.naturalHeight||t.height;if(this._element===this._originalElement){var n=x.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return x.filterBackend||(x.filterBackend=x.initFilterBackend()),x.filterBackend.applyFilters(e,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(e),this._renderPaintInOrder(e)},drawCacheOnCanvas:function(e){x.util.setImageSmoothing(e,this.imageSmoothing),x.Object.prototype.drawCacheOnCanvas.call(this,e)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(e){var t=this._element;if(t){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,s=this.height,o=Math.min,a=Math.max,h=a(this.cropX,0),l=a(this.cropY,0),c=t.naturalWidth||t.width,u=t.naturalHeight||t.height,d=h*i,f=l*r,g=o(n*i,c-d),_=o(s*r,u-f),p=-n/2,m=-s/2,v=o(n,c/i-h),y=o(s,u/r-l);t&&e.drawImage(t,d,f,g,_,p,m,v,y)}},_needsResize:function(){var e=this.getTotalObjectScaling();return e.scaleX!==this._lastScaleX||e.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(e,t){this.setElement(x.util.getById(e),t),x.util.addClass(this.getElement(),x.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e,t){e&&e.length?x.util.enlivenObjects(e,(function(e){t&&t(e)}),"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){e||(e={});var t=this.getElement();this.width=e.width||t.naturalWidth||t.width||0,this.height=e.height||t.naturalHeight||t.height||0},parsePreserveAspectRatioAttribute:function(){var e,t=x.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,h=0,l=0,c=this.width,u=this.height,d={width:c,height:u};return!t||"none"===t.alignX&&"none"===t.alignY?(n=c/i,s=u/r):("meet"===t.meetOrSlice&&(e=(c-i*(n=s=x.util.findScaleToFit(this._element,d)))/2,"Min"===t.alignX&&(o=-e),"Max"===t.alignX&&(o=e),e=(u-r*s)/2,"Min"===t.alignY&&(a=-e),"Max"===t.alignY&&(a=e)),"slice"===t.meetOrSlice&&(e=i-c/(n=s=x.util.findScaleToCover(this._element,d)),"Mid"===t.alignX&&(h=e/2),"Max"===t.alignX&&(h=e),e=r-u/s,"Mid"===t.alignY&&(l=e/2),"Max"===t.alignY&&(l=e),i=c/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:h,cropY:l}}}),x.Image.CSS_CANVAS="canvas-img",x.Image.prototype.getSvgSrc=x.Image.prototype.getSrc,x.Image.fromObject=function(e,t){var i=x.util.object.clone(e);x.util.loadImage(i.src,(function(e,r){r?t&&t(null,!0):x.Image.prototype._initFilters.call(i,i.filters,(function(r){i.filters=r||[],x.Image.prototype._initFilters.call(i,[i.resizeFilter],(function(r){i.resizeFilter=r[0],x.util.enlivenObjectEnlivables(i,i,(function(){var r=new x.Image(e,i);t(r,!1)}))}))}))}),null,i.crossOrigin)},x.Image.fromURL=function(e,t,i){x.util.loadImage(e,(function(e,r){t&&t(new x.Image(e,i),r)}),null,i&&i.crossOrigin)},x.Image.ATTRIBUTE_NAMES=x.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),x.Image.fromElement=function(e,i,r){var n=x.parseAttributes(e,x.Image.ATTRIBUTE_NAMES);x.Image.fromURL(n["xlink:href"],i,t(r?x.util.object.clone(r):{},n))})}(t),x.util.object.extend(x.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.angle%360;return e>0?90*Math.round((e-1)/90):90*Math.round(e/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(e){var t=function(){},i=(e=e||{}).onComplete||t,r=e.onChange||t,n=this;return x.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){n.rotate(e),r()},onComplete:function(){n.setCoords(),i()}})}}),x.util.object.extend(x.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function e(e,t){var i="precision "+t+" float;\nvoid main(){}",r=e.createShader(e.FRAGMENT_SHADER);return e.shaderSource(r,i),e.compileShader(r),!!e.getShaderParameter(r,e.COMPILE_STATUS)}function t(e){e&&e.tileSize&&(this.tileSize=e.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}x.isWebglSupported=function(t){if(x.isLikelyNode)return!1;t=t||x.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){x.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=x.maxTextureSize>=t;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(e(r,s[o])){x.webGlPrecision=s[o];break}}return this.isSupported=n,n},x.WebglFilterBackend=t,t.prototype={tileSize:2048,resources:{},setupGLContext:function(e,t){this.dispose(),this.createWebGLCanvas(e,t),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(e,t)},chooseFastestCopyGLTo2DMethod:function(e,t){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(e){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o=x.util.createCanvasElement(),a=new ArrayBuffer(e*t*4);if(x.forceGLPutImageData)return this.imageBuffer=a,void(this.copyGLTo2D=E);var h,l,c={imageBuffer:a,destinationWidth:e,destinationHeight:t,targetCanvas:o};o.width=e,o.height=t,h=window.performance.now(),I.call(c,this.gl,c),l=window.performance.now()-h,h=window.performance.now(),E.call(c,this.gl,c),l>window.performance.now()-h?(this.imageBuffer=a,this.copyGLTo2D=E):this.copyGLTo2D=I}},createWebGLCanvas:function(e,t){var i=x.util.createCanvasElement();i.width=e,i.height=t;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(e,t,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,t));var h={originalWidth:t.width||t.originalWidth,originalHeight:t.height||t.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&t),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&t),passes:e.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},l=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,l),e.forEach((function(e){e&&e.applyTo(h)})),function(e){var t=e.targetCanvas,i=t.width,r=t.height,n=e.destinationWidth,s=e.destinationHeight;i===n&&r===s||(t.width=n,t.height=s)}(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(l),n.getContext("2d").setTransform(1,0,0,1,0,0),h},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(e,t,i,r){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),r?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,t,i,0,e.RGBA,e.UNSIGNED_BYTE,null),n},getCachedTexture:function(e,t){if(this.textureCache[e])return this.textureCache[e];var i=this.createTexture(this.gl,t.width,t.height,t);return this.textureCache[e]=i,i},evictCachesForKey:function(e){this.textureCache[e]&&(this.gl.deleteTexture(this.textureCache[e]),delete this.textureCache[e])},copyGLTo2D:I,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var e=this.gl,t={renderer:"",vendor:""};if(!e)return t;var i=e.getExtension("WEBGL_debug_renderer_info");if(i){var r=e.getParameter(i.UNMASKED_RENDERER_WEBGL),n=e.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(t.renderer=r.toLowerCase()),n&&(t.vendor=n.toLowerCase())}return this.gpuInfo=t,t}}}(),function(){var e=function(){};function t(){}x.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(e,t,i,r,n){var s=n.getContext("2d");s.drawImage(t,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:t,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return e.forEach((function(e){e.applyTo(o)})),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),x.Image=x.Image||{},x.Image.filters=x.Image.filters||{},x.Image.filters.BaseFilter=x.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(e){e&&this.setOptions(e)},setOptions:function(e){for(var t in e)this[t]=e[t]},createProgram:function(e,t,i){t=t||this.fragmentSource,i=i||this.vertexSource,"highp"!==x.webGlPrecision&&(t=t.replace(/precision highp float/g,"precision "+x.webGlPrecision+" float"));var r=e.createShader(e.VERTEX_SHADER);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+e.getShaderInfoLog(r));var n=e.createShader(e.FRAGMENT_SHADER);if(e.shaderSource(n,t),e.compileShader(n),!e.getShaderParameter(n,e.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+e.getShaderInfoLog(n));var s=e.createProgram();if(e.attachShader(s,r),e.attachShader(s,n),e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+e.getProgramInfoLog(s));var o=this.getAttributeLocations(e,s),a=this.getUniformLocations(e,s)||{};return a.uStepW=e.getUniformLocation(s,"uStepW"),a.uStepH=e.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(e,t){return{aPosition:e.getAttribLocation(t,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(e,t,i){var r=t.aPosition,n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,2,e.FLOAT,!1,0,0),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW)},_setupFrameBuffer:function(e){var t,i,r=e.context;e.passes>1?(t=e.destinationWidth,i=e.destinationHeight,e.sourceWidth===t&&e.sourceHeight===i||(r.deleteTexture(e.targetTexture),e.targetTexture=e.filterBackend.createTexture(r,t,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(e){e.passes--,e.pass++;var t=e.targetTexture;e.targetTexture=e.sourceTexture,e.sourceTexture=t},isNeutralState:function(){var e=this.mainParameter,t=x.Image.filters[this.type].prototype;if(e){if(Array.isArray(t[e])){for(var i=t[e].length;i--;)if(this[e][i]!==t[e][i])return!1;return!0}return t[e]===this[e]}return!1},applyTo:function(e){e.webgl?(this._setupFrameBuffer(e),this.applyToWebGL(e),this._swapTextures(e)):this.applyTo2d(e)},retrieveShader:function(e){return e.programCache.hasOwnProperty(this.type)||(e.programCache[this.type]=this.createProgram(e.context)),e.programCache[this.type]},applyToWebGL:function(e){var t=e.context,i=this.retrieveShader(e);0===e.pass&&e.originalTexture?t.bindTexture(t.TEXTURE_2D,e.originalTexture):t.bindTexture(t.TEXTURE_2D,e.sourceTexture),t.useProgram(i.program),this.sendAttributeData(t,i.attributeLocations,e.aPosition),t.uniform1f(i.uniformLocations.uStepW,1/e.sourceWidth),t.uniform1f(i.uniformLocations.uStepH,1/e.sourceHeight),this.sendUniformData(t,i.uniformLocations),t.viewport(0,0,e.destinationWidth,e.destinationHeight),t.drawArrays(t.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(e,t,i){e.activeTexture(i),e.bindTexture(e.TEXTURE_2D,t),e.activeTexture(e.TEXTURE0)},unbindAdditionalTexture:function(e,t){e.activeTexture(t),e.bindTexture(e.TEXTURE_2D,null),e.activeTexture(e.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(e){this[this.mainParameter]=e},sendUniformData:function(){},createHelpLayer:function(e){if(!e.helpLayer){var t=document.createElement("canvas");t.width=e.sourceWidth,t.height=e.sourceHeight,e.helpLayer=t}},toObject:function(){var e={type:this.type},t=this.mainParameter;return t&&(e[t]=this[t]),e},toJSON:function(){return this.toObject()}}),x.Image.filters.BaseFilter.fromObject=function(e,t){var i=new x.Image.filters[e.type](e);return t&&t(i),i},function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(e){this.callSuper("initialize",e),this.matrix=this.matrix.slice(0)},applyTo2d:function(e){var t,i,r,n,s,o=e.imageData.data,a=o.length,h=this.matrix,l=this.colorsOnly;for(s=0;s=S||o<0||o>=y||(h=4*(a*y+o),l=p[f*m+d],t+=_[h]*l,i+=_[h+1]*l,r+=_[h+2]*l,C||(n+=_[h+3]*l));w[s]=t,w[s+1]=i,w[s+2]=r,w[s+3]=C?_[s+3]:n}e.imageData=b},getUniformLocations:function(e,t){return{uMatrix:e.getUniformLocation(t,"uMatrix"),uOpaque:e.getUniformLocation(t,"uOpaque"),uHalfSize:e.getUniformLocation(t,"uHalfSize"),uSize:e.getUniformLocation(t,"uSize")}},sendUniformData:function(e,t){e.uniform1fv(t.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(e){var t,i,r=e.imageData.data,n=r.length,s=this.mode;for(t=0;tl[0]&&n>l[1]&&s>l[2]&&r 0.0) {\n"+this.fragmentSource[e]+"}\n}"},retrieveShader:function(e){var t,i=this.type+"_"+this.mode;return e.programCache.hasOwnProperty(i)||(t=this.buildSource(this.mode),e.programCache[i]=this.createProgram(e.context,t)),e.programCache[i]},applyTo2d:function(e){var i,r,n,s,o,a,h,l=e.imageData.data,c=l.length,u=1-this.alpha;i=(h=new t.Color(this.color).getSource())[0]*this.alpha,r=h[1]*this.alpha,n=h[2]*this.alpha;for(var d=0;d=e||t<=-e)return 0;if(t<1.1920929e-7&&t>-1.1920929e-7)return 1;var i=(t*=Math.PI)/e;return a(t)/t*a(i)/i}},applyTo2d:function(e){var t=e.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=t.width,a=t.height,h=o(s*i),l=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(e,s,a,h,l):"hermite"===this.resizeType?n=this.hermiteFastResize(e,s,a,h,l):"bilinear"===this.resizeType?n=this.bilinearFiltering(e,s,a,h,l):"lanczos"===this.resizeType&&(n=this.lanczosResize(e,s,a,h,l)),e.imageData=n},sliceByTwo:function(e,i,n,s,o){var a,h,l=e.imageData,c=.5,u=!1,d=!1,f=i*c,g=n*c,_=t.filterBackend.resources,p=0,m=0,v=i,y=0;for(_.sliceByTwo||(_.sliceByTwo=document.createElement("canvas")),((a=_.sliceByTwo).width<1.5*i||a.height=t)){M=r(1e3*s(x-b.x)),S[M]||(S[M]={});for(var F=w.y-y;F<=w.y+y;F++)F<0||F>=o||(L=r(1e3*s(F-b.y)),S[M][L]||(S[M][L]=f(n(i(M*p,2)+i(L*m,2))/1e3)),(T=S[M][L])>0&&(E+=T,O+=T*c[I=4*(F*t+x)],A+=T*c[I+1],D+=T*c[I+2],R+=T*c[I+3]))}d[I=4*(C*a+h)]=O/E,d[I+1]=A/E,d[I+2]=D/E,d[I+3]=R/E}return++h1&&L<-1||(y=2*L*L*L-3*L*L+1)>0&&(T+=y*f[3+(M=4*(R+E*t))],b+=y,f[M+3]<255&&(y=y*f[M+3]/250),w+=y*f[M],C+=y*f[M+1],x+=y*f[M+2],S+=y)}_[v]=w/S,_[v+1]=C/S,_[v+2]=x/S,_[v+3]=T/b}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),t.Image.filters.Resize.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(e){if(0!==this.contrast){var t,i=e.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));for(t=0;t1&&(t=1/this.aspectRatio):this.aspectRatio<1&&(t=this.aspectRatio),e=t*this.blur*.12,this.horizontal?i[0]=e:i[1]=e,i}}),i.Blur.fromObject=t.Image.filters.BaseFilter.fromObject}(t),function(e){var t=e.fabric||(e.fabric={}),i=t.Image.filters,r=t.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(e){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,e)},applyTo2d:function(e){var t,i=e.imageData.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),t=0,n=256;t'},_getCacheCanvasDimensions:function(){var e=this.callSuper("_getCacheCanvasDimensions"),t=this.fontSize;return e.width+=t*e.zoomX,e.height+=t*e.zoomY,e},_render:function(e){var t=this.path;t&&!t.isNotVisible()&&t._render(e),this._setTextStyles(e),this._renderTextLinesBackground(e),this._renderTextDecoration(e,"underline"),this._renderText(e),this._renderTextDecoration(e,"overline"),this._renderTextDecoration(e,"linethrough")},_renderText:function(e){"stroke"===this.paintFirst?(this._renderTextStroke(e),this._renderTextFill(e)):(this._renderTextFill(e),this._renderTextStroke(e))},_setTextStyles:function(e,t,i){if(e.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":e.textBaseline="middle";break;case"ascender":e.textBaseline="top";break;case"descender":e.textBaseline="bottom"}e.font=this._getFontDeclaration(t,i)},calcTextWidth:function(){for(var e=this.getLineWidth(0),t=1,i=this._textLines.length;te&&(e=r)}return e},_renderTextLine:function(e,t,i,r,n,s){this._renderChars(e,t,i,r,n,s)},_renderTextLinesBackground:function(e){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var t,i,r,n,s,o,a,h=e.fillStyle,l=this._getLeftOffset(),c=this._getTopOffset(),u=0,d=0,f=this.path,g=0,_=this._textLines.length;g<_;g++)if(t=this.getHeightOfLine(g),this.textBackgroundColor||this.styleHas("textBackgroundColor",g)){r=this._textLines[g],i=this._getLineLeftOffset(g),d=0,u=0,n=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var p=0,m=r.length;p=0:ia?u%=a:u<0&&(u+=a),this._setGraphemeOnPath(u,s,o),u+=s.kernedWidth}return{width:h,numOfSpaces:0}},_setGraphemeOnPath:function(e,i,r){var n=e+i.kernedWidth/2,s=this.path,o=t.util.getPointOnPath(s.path,n,s.segmentsInfo);i.renderLeft=o.x-r.x,i.renderTop=o.y-r.y,i.angle=o.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(e,t,i,r,n){var s,o=this.getCompleteStyleDeclaration(t,i),a=r?this.getCompleteStyleDeclaration(t,i-1):{},h=this._measureChar(e,o,r,a),l=h.kernedWidth,c=h.width;0!==this.charSpacing&&(c+=s=this._getWidthOfCharSpacing(),l+=s);var u={width:c,left:0,height:o.fontSize,kernedWidth:l,deltaY:o.deltaY};if(i>0&&!n){var d=this.__charBounds[t][i-1];u.left=d.left+d.width+h.kernedWidth-h.width}return u},getHeightOfLine:function(e){if(this.__lineHeights[e])return this.__lineHeights[e];for(var t=this._textLines[e],i=this.getHeightOfChar(e,0),r=1,n=t.length;r0){var E=v+s+u;"rtl"===this.direction&&(E=this.width-E-d),l&&m&&(e.fillStyle=m,e.fillRect(E,c+w*r+o,d,this.fontSize/15)),u=f.left,d=f.width,l=g,m=p,r=n,o=a}else d+=f.kernedWidth;E=v+s+u,"rtl"===this.direction&&(E=this.width-E-d),e.fillStyle=p,g&&p&&e.fillRect(E,c+w*r+o,d-b,this.fontSize/15),y+=i}else y+=i;this._removeShadow(e)}},_getFontDeclaration:function(e,i){var r=e||this,n=this.fontFamily,s=t.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||s?r.fontFamily:'"'+r.fontFamily+'"';return[t.isLikelyNode?r.fontWeight:r.fontStyle,t.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",e)))},_splitTextIntoLines:function(e){for(var i=e.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-1&&(e.underline=!0),e.textDecoration.indexOf("line-through")>-1&&(e.linethrough=!0),e.textDecoration.indexOf("overline")>-1&&(e.overline=!0),delete e.textDecoration)}x.IText=x.util.createClass(x.Text,x.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(e,t){this.callSuper("initialize",e,t),this.initBehavior()},setSelectionStart:function(e){e=Math.max(e,0),this._updateAndFire("selectionStart",e)},setSelectionEnd:function(e){e=Math.min(e,this.text.length),this._updateAndFire("selectionEnd",e)},_updateAndFire:function(e,t){this[e]!==t&&(this._fireSelectionChanged(),this[e]=t),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(e){this.clearContextTop(),this.callSuper("render",e),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(e){this.callSuper("_render",e)},clearContextTop:function(e){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this.canvas.contextTop,i=this.canvas.viewportTransform;t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(t),this._clearTextArea(t),e||t.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this._getCursorBoundaries(),t=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(e){var t=this.width+4,i=this.height+4;e.clearRect(-t/2,-i/2,t,i)},_getCursorBoundaries:function(e){void 0===e&&(e=this.selectionStart);var t=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(e);return{left:t,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(e){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var t,i,r,n,s=0,o=0,a=this.get2DCursorLocation(e);r=a.charIndex,i=a.lineIndex;for(var h=0;h0?o:0)},"rtl"===this.direction&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(e,t){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=e.topOffset,l=this.getValueOfPropertyAt(r,n,"deltaY");h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(e,t),t.fillStyle=this.cursorColor||this.getValueOfPropertyAt(r,n,"fill"),t.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,t.fillRect(e.left+e.leftOffset-a/2,h+e.top+l,a,s)},renderSelection:function(e,t){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,h=o.lineIndex,l=s.charIndex<0?0:s.charIndex,c=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var d,f=this._getLineLeftOffset(u)||0,g=this.getHeightOfLine(u),_=0,p=0;if(u===a&&(_=this.__charBounds[a][l].left),u>=a&&u1)&&(g/=this.lineHeight);var v=e.left+f+_,y=p-_,S=g,b=0;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",S=1,b=g):t.fillStyle=this.selectionColor,"rtl"===this.direction&&(v=this.width-v-y),t.fillRect(v,e.top+e.topOffset+b,y,S),e.topOffset+=d}},getCurrentCharFontSize:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fontSize")},getCurrentCharColor:function(){var e=this._getCurrentCharIndex();return this.getValueOfPropertyAt(e.l,e.c,"fill")},_getCurrentCharIndex:function(){var e=this.get2DCursorLocation(this.selectionStart,!0),t=e.charIndex>0?e.charIndex-1:0;return{l:e.lineIndex,c:t}}}),x.IText.fromObject=function(t,i){if(e(t),t.styles)for(var r in t.styles)for(var n in t.styles[r])e(t.styles[r][n]);x.Object._fromObject("IText",t,i,"text")}}(),C=x.util.object.clone,x.util.object.extend(x.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var e=this;this.on("added",(function(){var t=e.canvas;t&&(t._hasITextHandlers||(t._hasITextHandlers=!0,e._initCanvasHandlers(t)),t._iTextInstances=t._iTextInstances||[],t._iTextInstances.push(e))}))},initRemovedHandler:function(){var e=this;this.on("removed",(function(){var t=e.canvas;t&&(t._iTextInstances=t._iTextInstances||[],x.util.removeFromArray(t._iTextInstances,e),0===t._iTextInstances.length&&(t._hasITextHandlers=!1,e._removeCanvasHandlers(t)))}))},_initCanvasHandlers:function(e){e._mouseUpITextHandler=function(){e._iTextInstances&&e._iTextInstances.forEach((function(e){e.__isMousedown=!1}))},e.on("mouse:up",e._mouseUpITextHandler)},_removeCanvasHandlers:function(e){e.off("mouse:up",e._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(e,t,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},e.animate("_currentCursorOpacity",t,{duration:i,onComplete:function(){n.isAborted||e[r]()},onChange:function(){e.canvas&&e.selectionStart===e.selectionEnd&&e.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout((function(){e._currentTickCompleteState=e._animateCursor(e,0,this.cursorDuration/2,"_tick")}),100)},initDelayedCursor:function(e){var t=this,i=e?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout((function(){t._tick()}),i)},abortCursorAnimation:function(){var e=this._currentTickState||this._currentTickCompleteState,t=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,e&&t&&t.clearContext(t.contextTop||t.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(e){var t=0,i=e-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i--;for(;/\S/.test(this._text[i])&&i>-1;)t++,i--;return e-t},findWordBoundaryRight:function(e){var t=0,i=e;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)t++,i++;for(;/\S/.test(this._text[i])&&i-1;)t++,i--;return e-t},findLineBoundaryRight:function(e){for(var t=0,i=e;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=t):(this.selectionStart=t,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(e,t,i){var r=i.slice(0,e),n=x.util.string.graphemeSplit(r).length;if(e===t)return{selectionStart:n,selectionEnd:n};var s=i.slice(e,t);return{selectionStart:n,selectionEnd:n+x.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(e,t,i){var r=i.slice(0,e).join("").length;return e===t?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(e,t).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var e=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=e.selectionStart,this.hiddenTextarea.selectionEnd=e.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var e=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=e.selectionEnd,this.inCompositionMode||(this.selectionStart=e.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var e=this._calcTextareaPosition();this.hiddenTextarea.style.left=e.left,this.hiddenTextarea.style.top=e.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var e=this.inCompositionMode?this.compositionStart:this.selectionStart,t=this._getCursorBoundaries(e),i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=t.leftOffset,a=this.calcTransformMatrix(),h={x:t.left+o,y:t.top+t.topOffset+s},l=this.canvas.getRetinaScaling(),c=this.canvas.upperCanvasEl,u=c.width/l,d=c.height/l,f=u-s,g=d-s,_=c.clientWidth/u,p=c.clientHeight/d;return h=x.util.transformPoint(h,a),(h=x.util.transformPoint(h,this.canvas.viewportTransform)).x*=_,h.y*=p,h.x<0&&(h.x=0),h.x>f&&(h.x=f),h.y<0&&(h.y=0),h.y>g&&(h.y=g),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var e=this._textBeforeEdit!==this.text,t=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,t&&(t.blur&&t.blur(),t.parentNode&&t.parentNode.removeChild(t)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),e&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),e&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var e in this.styles)this._textLines[e]||delete this.styles[e]},removeStyleFromTo:function(e,t){var i,r,n=this.get2DCursorLocation(e,!0),s=this.get2DCursorLocation(t,!0),o=n.lineIndex,a=n.charIndex,h=s.lineIndex,l=s.charIndex;if(o!==h){if(this.styles[o])for(i=a;i=l&&(r[c-d]=r[u],delete r[u])}},shiftLineStyles:function(e,t){var i=C(this.styles);for(var r in this.styles){var n=parseInt(r,10);n>e&&(this.styles[n+t]=i[n],i[n-t]||delete this.styles[n])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,t,i,r){var n,s={},o=!1,a=this._unwrappedTextLines[e].length===t;for(var h in i||(i=1),this.shiftLineStyles(e,i),this.styles[e]&&(n=this.styles[e][0===t?t:t-1]),this.styles[e]){var l=parseInt(h,10);l>=t&&(o=!0,s[l-t]=this.styles[e][h],a&&0===t||delete this.styles[e][h])}var c=!1;for(o&&!a&&(this.styles[e+i]=s,c=!0),c&&i--;i>0;)r&&r[i-1]?this.styles[e+i]={0:C(r[i-1])}:n?this.styles[e+i]={0:C(n)}:delete this.styles[e+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(e,t,i,r){this.styles||(this.styles={});var n=this.styles[e],s=n?C(n):{};for(var o in i||(i=1),s){var a=parseInt(o,10);a>=t&&(n[a+i]=s[a],s[a-i]||delete n[a])}if(this._forceClearCache=!0,r)for(;i--;)Object.keys(r[i]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][t+i]=C(r[i]));else if(n)for(var h=n[t?t-1:1];h&&i--;)this.styles[e][t+i]=C(h)},insertNewStyleBlock:function(e,t,i){for(var r=this.get2DCursorLocation(t,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s),o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&this.styles[r.lineIndex+o]&&i[0]&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(e,t,i){i<=e?(t===e?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=e),this.selectionStart=i):i>e&&ie?this.selectionStart=e:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>e?this.selectionEnd=e:this.selectionEnd<0&&(this.selectionEnd=0)}}),x.util.object.extend(x.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(e){if(this.canvas){this.__newClickTime=+new Date;var t=e.pointer;this.isTripleClick(t)&&(this.fire("tripleclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(e){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(e.e))},tripleClickHandler:function(e){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(e.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(e.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(e){!this.canvas||!this.editable||e.e.button&&1!==e.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(e){if(this.__isMousedown=!1,!(!this.editable||this.group||e.transform&&e.transform.actionPerformed||e.e.button&&1!==e.e.button)){if(this.canvas){var t=this.canvas._activeObject;if(t&&t!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(e.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e),i=this.selectionStart,r=this.selectionEnd;e.shiftKey?this.setSelectionStartEndWithShift(i,r,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(e){for(var t,i=this.getLocalPointer(e),r=0,n=0,s=0,o=0,a=0,h=0,l=this._textLines.length;h0&&(o+=this._textLines[h-1].length+this.missingNewlineOffset(h-1));n=this._getLineLeftOffset(a)*this.scaleX,t=this._textLines[a],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+n);for(var c=0,u=t.length;cs||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),x.util.object.extend(x.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=x.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var e=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+e.top+"; left: "+e.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+e.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):x.document.body.appendChild(this.hiddenTextarea),x.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),x.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),x.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),x.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(x.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(this.isEditing){var t="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(e.keyCode in t)this[t[e.keyCode]](e);else{if(!(e.keyCode in this.ctrlKeysMapDown)||!e.ctrlKey&&!e.metaKey)return;this[this.ctrlKeysMapDown[e.keyCode]](e)}e.stopImmediatePropagation(),e.preventDefault(),e.keyCode>=33&&e.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(e){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:e.keyCode in this.ctrlKeysMapUp&&(e.ctrlKey||e.metaKey)&&(this[this.ctrlKeysMapUp[e.keyCode]](e),e.stopImmediatePropagation(),e.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(e){var t=this.fromPaste;if(this.fromPaste=!1,e&&e.stopPropagation(),this.isEditing){var i,r,n,s,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,l=a.length,c=l-h,u=this.selectionStart,d=this.selectionEnd,f=u!==d;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),_=u>g.selectionStart;f?(i=this._text.slice(u,d),c+=d-u):l0&&(r+=(i=this.__charBounds[e][t-1]).left+i.width),r},getDownCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||e.metaKey||34===e.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o);return this._textLines[n].slice(s).length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(e,t){return e.shiftKey&&this.selectionStart!==this.selectionEnd&&t?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(e,t){var i=this._getSelectionForOffset(e,t),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||e.metaKey||33===e.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s),l=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-h.length+(1-l)},_getIndexOnLine:function(e,t){for(var i,r,n=this._textLines[e],s=this._getLineLeftOffset(e),o=0,a=0,h=n.length;at){r=!0;var l=s-i,c=s,u=Math.abs(l-t);o=Math.abs(c-t)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",e)},moveCursorUp:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",e)},_moveCursorUpOrDown:function(e,t){var i=this["get"+e+"CursorOffset"](t,"right"===this._selectionDirection);t.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(e){var t="left"===this._selectionDirection?this.selectionStart+e:this.selectionEnd+e;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,t),0!==e},moveCursorWithoutShift:function(e){return e<0?(this.selectionStart+=e,this.selectionEnd=this.selectionStart):(this.selectionEnd+=e,this.selectionStart=this.selectionEnd),0!==e},moveCursorLeft:function(e){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",e)},_move:function(e,t,i){var r;if(e.altKey)r=this["findWordBoundary"+i](this[t]);else{if(!e.metaKey&&35!==e.keyCode&&36!==e.keyCode)return this[t]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[t])}if(void 0!==typeof r&&this[t]!==r)return this[t]=r,!0},_moveLeft:function(e,t){return this._move(e,t,"Left")},_moveRight:function(e,t){return this._move(e,t,"Right")},moveCursorLeftWithoutShift:function(e){var t=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(t=this._moveLeft(e,"selectionStart")),this.selectionEnd=this.selectionStart,t},moveCursorLeftWithShift:function(e){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(e,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(e,"selectionStart")):void 0},moveCursorRight:function(e){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",e)},_moveCursorLeftOrRight:function(e,t){var i="moveCursor"+e+"With";this._currentCursorOpacity=1,t.shiftKey?i+="Shift":i+="outShift",this[i](t)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(e){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(e,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(e){var t=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(t=this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t},removeChars:function(e,t){void 0===t&&(t=e+1),this.removeStyleFromTo(e,t),this._text.splice(e,t-e),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(e,t,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=x.util.string.graphemeSplit(e);this.insertNewStyleBlock(n,i,t),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var e=x.util.toFixed,t=/ +/g;x.util.object.extend(x.Text.prototype,{_toSVG:function(){var e=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(e.textTop,e.textLeft);return this._wrapSVGTextAndBg(t)},toSVG:function(e){return this._createBaseSVGMarkup(this._toSVG(),{reviver:e,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(e){var t=this.getSvgTextDecoration(this);return[e.textBgRects.join(""),'\t\t",e.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(e,t){var i,r=[],n=[],s=e;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",x.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(e,t,i,r){var n,s,o,a,h,l=this.getHeightOfLine(t),c=-1!==this.textAlign.indexOf("justify"),u="",d=0,f=this._textLines[t];r+=l*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,_=f.length-1;g<=_;g++)h=g===_||this.charSpacing,u+=f[g],o=this.__charBounds[t][g],0===d?(i+=o.kernedWidth-o.width,d+=o.width):d+=o.kernedWidth,c&&!h&&this._reSpaceAndTab.test(f[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(t,g),s=this.getCompleteStyleDeclaration(t,g+1),h=this._hasStyleChangedForSvg(n,s)),h&&(a=this._getStyleDeclaration(t,g)||{},e.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=d,d=0)},_pushTextBgRect:function(t,i,r,n,s,o){var a=x.Object.NUM_FRACTION_DIGITS;t.push("\t\t\n')},_setSVGTextLineBg:function(e,t,i,r){for(var n,s,o=this._textLines[t],a=this.getHeightOfLine(t)/this.lineHeight,h=0,l=0,c=this.getValueOfPropertyAt(t,0,"textBackgroundColor"),u=0,d=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(e){for(var t=0,i=0,r=0,n={},s=0;s0?(i=0,r++,t++):!this.splitByGrapheme&&this._reSpaceAndTab.test(e.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:t,offset:i},r+=e.graphemeLines[s].length,i+=e.graphemeLines[s].length;return n},styleHas:function(e,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return t.Text.prototype.styleHas.call(this,e,i)},isEmptyStyles:function(e){if(!this.styles)return!0;var t,i,r=0,n=!1,s=this._styleMap[e],o=this._styleMap[e+1];for(var a in s&&(e=s.line,r=s.offset),o&&(n=o.line===e,t=o.offset),i=void 0===e?this.styles:{line:this.styles[e]})for(var h in i[a])if(h>=r&&(!n||hr&&!p?(a.push(h),h=[],s=f,p=!0):s+=m,p||o||h.push(d),h=h.concat(c),g=o?0:this._measureWord([d],i,u),u++,p=!1,f>_&&(_=f);return v&&a.push(h),_+n>this.dynamicMinWidth&&(this.dynamicMinWidth=_-m+n),a},isEndOfWrapping:function(e){return!this._styleMap[e+1]||this._styleMap[e+1].line!==this._styleMap[e].line},missingNewlineOffset:function(e){return this.splitByGrapheme?this.isEndOfWrapping(e)?1:0:1},_splitTextIntoLines:function(e){for(var i=t.Text.prototype._splitTextIntoLines.call(this,e),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s{},898:()=>{},245:()=>{}},k={};function B(e){var t=k[e];if(void 0!==t)return t.exports;var i=k[e]={exports:{}};return P[e](i,i.exports,B),i.exports}B.d=(e,t)=>{for(var i in t)B.o(t,i)&&!B.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},B.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var N={};(()=>{let e;B.d(N,{R:()=>e}),e="undefined"!=typeof document&&"undefined"!=typeof window?B(653).fabric:{version:"5.2.1"}})();var j=N.R; /*! * Dynamsoft JavaScript Library * @product Dynamsoft Camera Enhancer JS Edition * @website https://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 3.3.8 (js 20231011) + * @version 3.3.9 (js 20231205) * @fileoverview Dynamsoft JavaScript Library for Camera Enhancer * More info on DCE JS: https://www.dynamsoft.com/camera-enhancer/docs/programming/javascript/?ver=latest - */const V="undefined"==typeof self;let U,G,W,H,Y;if("undefined"!=typeof navigator&&(U=navigator,G=U.userAgent,W=U.platform,H=U.mediaDevices),!V){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:U.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:W,search:"Win"},Mac:{str:W},Linux:{str:W}};let i="unknownBrowser",r=0,n="unknownOS";for(let t in e){const n=e[t]||{};let s=n.str||G,o=n.search||t,a=n.verStr||G,h=n.verSearch||t;if(h instanceof Array||(h=[h]),-1!=s.indexOf(o)){i=t;for(let e of h){let t=a.indexOf(e);if(-1!=t){r=parseFloat(a.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let r=i.str||G,s=i.search||e;if(-1!=r.indexOf(s)){n=e;break}}"Linux"==n&&-1!=G.indexOf("Windows NT")&&(n="HarmonyOS"),Y={browser:i,version:r,OS:n}}V&&(Y={browser:"ssr",version:0,OS:"ssr"});const X="undefined"!=typeof WebAssembly&&G&&!(/Safari/.test(G)&&!/Chrome/.test(G)&&/\(.+\s11_2_([2-6]).*\)/.test(G)),z=!("undefined"==typeof Worker),Z=!(!H||!H.getUserMedia),J=async()=>{let e=!1;if(Z)try{(await H.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===Y.browser&&Y.version>66||"Safari"===Y.browser&&Y.version>13||"OPR"===Y.browser&&Y.version>43||"Edge"===Y.browser&&Y.version;const K=(()=>{if(!V&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})();class q{constructor(e,t){this._zIndex=null,this._drawingLayer=null,this._drawingLayerId=null,this._mapStyle=new Map,this.mapEvent_Callbacks=new Map([["selected",new Map],["deselected",new Map],["mousedown",new Map],["mouseup",new Map],["dblclick",new Map],["mouseover",new Map],["mouseout",new Map]]),this.mapNoteName_Content=new Map([]),this.isDrawingItem=!0,this._setFabricObject(e),this._mediaType=e.type,this.styleSelector="default",this.styleId=t}get mediaType(){return this._mediaType}get drawingLayerId(){return this._drawingLayerId}_setFabricObject(e){this._fabricObject=e,this._fabricObject.on("selected",(()=>{this.styleSelector="selected"})),this._fabricObject.on("deselected",(()=>{this._fabricObject.canvas&&this._fabricObject.canvas.getActiveObjects().includes(this._fabricObject)?this.styleSelector="selected":this.styleSelector="default","textbox"===this._fabricObject.type&&(this._fabricObject.isEditing&&this._fabricObject.exitEditing(),this._fabricObject.selected=!1)})),e.getDrawingItem=()=>this}_getFabricObject(){return this._fabricObject}_on(e,t){if(!t)return;const i=e.toLowerCase(),r=this.mapEvent_Callbacks.get(i);if(!r)throw new Error(`Event '${e}' does not exist.`);let n=r.get(t);n||(n=e=>{const i=e.e;if(!i)return void(t&&t.apply(this,[{targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null}]));const r={targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null};if(this._drawingLayer){let e,t,n,s;const o=i.target.getBoundingClientRect();e=o.left,t=o.top,n=e+window.scrollX,s=t+window.scrollY;const a=this._drawingLayer.fabricCanvas.lowerCanvasEl.width,h=this._drawingLayer.fabricCanvas.lowerCanvasEl.height,l=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).width),c=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).height),u=l/c,d=a/h,f=this._drawingLayer._getObjectFit();let g,_,p,m,v=1;if("contain"===f)u0?i-1:r,ee),actionName:"modifyPolygon",pointIndex:i}),e}),{})}_extendSet(e,t){if("vertices"===e){const e=this._fabricObject;if(e.group){const i=e.group;e.points=t.map((e=>({x:e.x-i.left-i.width/2,y:e.y-i.top-i.height/2}))),i.addWithUpdate()}else e.points=t;const i=e.points.length-1;return e.controls=e.points.reduce((function(e,t,r){return e["p"+r]=new j.Control({positionHandler:Q,actionHandler:te(r>0?r-1:i,ee),actionName:"modifyPolygon",pointIndex:r}),e}),{}),e._setPositionDimensions({}),!0}}_extendGet(e){if("vertices"===e){const e=[],t=this._fabricObject;if(t.selectable&&!t.group)for(let i in t.oCoords)e.push({x:t.oCoords[i].x,y:t.oCoords[i].y});else for(let i of t.points){let r=i.x-t.pathOffset.x,n=i.y-t.pathOffset.y;const s=j.util.transformPoint({x:r,y:n},t.calcTransformMatrix());e.push({x:s.x,y:s.y})}return e}}}const re=e=>{let t=(e=>e.split("\n").map((e=>e.split("\t"))))(e);return(e=>{for(let t=0;;t++){let i=-1;for(let r=0;ri&&(i=n.length)}if(-1===i)break;for(let r=0;r=e[r].length-1)continue;let n=" ".repeat(i+2-e[r][t].length);e[r][t]=e[r][t].concat(n)}}})(t),(e=>{let t="";for(let i=0;im?(g=d,_=d/p,{x:n.x*i.width,y:(n.y-(f-_)/2)*i.width}):(g=f*p,_=f,{x:(n.x-(d-g)/2)*i.height,y:n.y*i.height}):"cover"===l?p>m?{x:(c-i.height*d)/2+n.x*i.height,y:n.y*i.height}:{x:n.x*i.width,y:(u-i.width*f)/2+n.y*i.width}:{x:n.x*i.width,y:n.y*i.height}}return i={width:1,height:1},{x:n.x*i.width,y:n.y*i.height}},j.Canvas.prototype._onTouchStart=function(e){var t=this.findTarget(e);!this.allowTouchScrolling&&e.cancelable&&e.preventDefault&&e.preventDefault(),t&&e.cancelable&&e.preventDefault&&e.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(e)),this.__onMouseDown(e),this._resetTransformEventData();var i=this.upperCanvasEl,r=this._getEventPrefix();j.util.addListener(j.document,"touchend",this._onTouchEnd,{passive:!1}),j.util.addListener(j.document,"touchmove",this._onMouseMove,{passive:!1}),j.util.removeListener(i,r+"down",this._onMouseDown)},j.Textbox.prototype._wrapLine=function(e,t,i,r){const n=e.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/g),s=!(!n||!n.length);var o=0,a=this.splitByGrapheme||s,h=[],l=[],c=a?j.util.string.graphemeSplit(e):e.split(this._wordJoiners),u="",d=0,f=a?"":" ",g=0,_=0,p=0,m=!0,v=this._getWidthOfCharSpacing();r=r||0,0===c.length&&c.push([]),i-=r;for(var y=0;yi&&!m?(h.push(l),l=[],o=g,m=!0):o+=v,m||a||l.push(f),l=l.concat(u),_=a?0:this._measureWord([f],t,d),d++,m=!1,g>p&&(p=g);return y&&h.push(l),p+r>this.dynamicMinWidth&&(this.dynamicMinWidth=p-v+r),h});class se{constructor(e,t,i,r){let n,s;switch(this.mapMediaType_Style=new Map,this.mode="viewer",this.onSelectionChange=null,this._arrDrwaingItem=[],this._arrFabricObject=[],this._visible=!0,e.hasOwnProperty("getFabricCanvas")?this.fabricCanvas=e.getFabricCanvas():(this.fabricCanvas=new j.Canvas(e,Object.assign(r,{allowTouchScrolling:!0})),this.fabricCanvas.setDimensions({width:"100%",height:"100%"},{cssOnly:!0}),this.fabricCanvas.lowerCanvasEl.className="",this.fabricCanvas.upperCanvasEl.className="",this.fabricCanvas.on("selection:created",(function(e){const t=e.selected,i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(i,[])}),0)}})),this.fabricCanvas.on("before:selection:cleared",(function(e){const t=this.getActiveObjects(),i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{const t=[];for(let r of i)e.hasDrawingItem(r)&&t.push(r);t.length>0&&e.onSelectionChange&&e.onSelectionChange([],t)}),0)}})),this.fabricCanvas.on("selection:updated",(function(e){const t=e.selected,i=e.deselected,r=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of i){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of r){const r=[],n=[];for(let i of t){const t=i.getDrawingItem();t._drawingLayer===e&&r.push(t)}for(let t of i){const i=t.getDrawingItem();i._drawingLayer===e&&n.push(i)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(r,n)}),0)}})),this.fabricCanvas.wrapperEl.style.position="absolute",e.getFabricCanvas=()=>this.fabricCanvas),this.id=t,this._mapDrawingStyles=i,t){case 1:n=i.get(1),s=i.get(5);break;case 2:n=i.get(2),s=i.get(6);break;case 3:n=i.get(3),s=i.get(7);break;default:n=i.get(4),s=i.get(8)}for(let e of q.arrMediaTypes)this.mapMediaType_Style.set(e,{default:n,selected:s})}getId(){return this.id}_getDrawingStyle(e,t){if("number"!=typeof e)throw new Error("Invalid style id.");const i=this._mapDrawingStyles.get(e);return i?t?JSON.parse(JSON.stringify(i)):i:null}setVisible(e){if(e){for(let e of this._arrFabricObject)e.visible=!0;this._visible=!0}else{for(let e of this._arrFabricObject)e.visible=!1;this._visible=!1}this.fabricCanvas.renderAll()}isVisible(){return this._visible}_getItemCurrentStyleId(e){return e.styleId?e.styleId:this.mapMediaType_Style.get(e._mediaType)[e.styleSelector].styleId}_getItemCurrentStyle(e){if(e.styleId)return this._getDrawingStyle(e.styleId);return e._mapStyle.get(e.styleSelector)||null}_changeMediaTypeCurStyleInStyleSelector(e,t,i,r){let n;switch(e){case"rect":n=this.fabricCanvas.getObjects("rect");break;case"arc":n=this.fabricCanvas.getObjects("circle");break;case"polygon":n=this.fabricCanvas.getObjects("polygon");break;case"image":n=this.fabricCanvas.getObjects("image");break;case"text":n=this.fabricCanvas.getObjects("textbox");break;case"line":n=this.fabricCanvas.getObjects("line");break;case"path":n=this.fabricCanvas.getObjects("path")}for(let e of n){if(!this._arrFabricObject.includes(e))continue;const r=e.getDrawingItem();r.styleSelector===t&&this._changeItemStyle(r,i,!0)}r||this.fabricCanvas.renderAll()}_changeItemStyle(e,t,i){if(!e||!t)return;const r=e._getFabricObject();"number"==typeof e.styleId&&(t=this._getDrawingStyle(e.styleId)),r.strokeWidth=t.lineWidth,"fill"===t.paintMode?(r.fill=t.fillStyle,r.stroke=t.fillStyle):"stroke"===t.paintMode?(r.fill="transparent",r.stroke=t.strokeStyle):"strokeAndFill"===t.paintMode&&(r.fill=t.fillStyle,r.stroke=t.strokeStyle),r.fontFamily&&(r.fontFamily=t.fontFamily),r.fontSize&&(r.fontSize=t.fontSize),r.group||(r.dirty=!0),i||this.fabricCanvas.renderAll()}_updateGroupItem(e,t,i){if(!e||!t)return;const r=e.getChildItems();if("add"===i){if(r.includes(t))return;const i=t._getFabricObject();if(this.fabricCanvas.getObjects().includes(i)){if(!this._arrFabricObject.includes(i))throw new Error("Existed in other drawing layers.");t._zIndex=null}else{let i;if(t.styleId)i=this._getDrawingStyle(t.styleId);else{i=this.mapMediaType_Style.get(t._mediaType)[e.styleSelector];const r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected,!0)},n=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default,!0)};t._on("selected",r),t._on("deselected",n),t._funcChangeStyleToSelected=r,t._funcChangeStyleToDefault=n}t._drawingLayer=this,t._drawingLayerId=this.id,this._changeItemStyle(t,i,!0)}e._fabricObject.addWithUpdate(t._getFabricObject())}else{if("remove"!==i)return;if(!r.includes(t))return;t._zIndex=null,t._drawingLayer=null,t._drawingLayerId=null,t._off("selected",t._funcChangeStyleToSelected),t._off("deselected",t._funcChangeStyleToDefault),t._funcChangeStyleToSelected=null,t._funcChangeStyleToDefault=null,e._fabricObject.removeWithUpdate(t._getFabricObject())}this.fabricCanvas.renderAll()}_addDrawingItem(e,t){let i=e._getFabricObject();const r=this.fabricCanvas.getObjects();let n,s;if(r.includes(i)){if(this._arrFabricObject.includes(i))return;throw new Error("Existed in other drawing layers.")}if("group"===e._mediaType){n=e.getChildItems();for(let e of n)if(e._drawingLayer&&e._drawingLayer!==this)throw new Error("The childItems of DT_Group have existed in other drawing layers.")}if(t&&"object"==typeof t&&!Array.isArray(t))for(let e in t)i.set(e,t[e]);if(n){for(let e of n){const t=this.mapMediaType_Style.get(e._mediaType);for(let i of q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected,!0)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default,!0)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}e._drawingLayer=this,e._drawingLayerId=this.id,this._changeItemStyle(e,s,!0)}i.dirty=!0,this.fabricCanvas.renderAll()}else{const t=this.mapMediaType_Style.get(e._mediaType);for(let i of q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}this._changeItemStyle(e,s)}e._zIndex=this.id,e._drawingLayer=this,e._drawingLayerId=this.id;const o=this._arrFabricObject.length;let a=r.length;if(o)a=r.indexOf(this._arrFabricObject[o-1])+1;else for(let t=0;t{for(let t of this._arrDrawingLayer)if(t.getId()===e)return!0;return!1};if(void 0===t){for(let e=100;;e++)if(!i(e)){t=e;break}}else if(i(t))throw new Error("Existed drawing layer id.");const r=new se(e,t,this._mapDrawingStyles,{enableRetinaScaling:!1});return r._manager=this,this._arrDrawingLayer.push(r),this._switchPointerEvent(),r}deleteDrawingLayer(e){const t=this.getDrawingLayer(e);if(!t)return;const i=this._arrDrawingLayer;t.dispose(),i.splice(i.indexOf(t),1),this._switchPointerEvent()}clearDrawingLayers(){for(let e of this._arrDrawingLayer)e.dispose();this._arrDrawingLayer.length=0}getDrawingLayer(e){for(let t of this._arrDrawingLayer)if(t.getId()===e)return t;return null}getDrawingLayers(){return Array.from(this._arrDrawingLayer)}getSelectedDrawingItems(){if(!this._arrDrawingLayer.length)return;const e=this._arrDrawingLayer[0].fabricCanvas.getActiveObjects(),t=[];for(let i of e)t.push(i.getDrawingItem());return t}setDimensions(e,t){this._arrDrawingLayer.length&&this._arrDrawingLayer[0]._setDimensions(e,t)}setObjectFit(e){for(let t of this._arrDrawingLayer)t&&t._setObjectFit(e)}getObjectFit(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0]._getObjectFit():null}setVisible(e){this._arrDrawingLayer.length&&(this._arrDrawingLayer[0].fabricCanvas.wrapperEl.style.display=e?"block":"none")}_switchPointerEvent(){if(this._arrDrawingLayer.length)for(let e of this._arrDrawingLayer)e.getMode()}}class ae{constructor(e){this._controlTarget=null,this._arrUsers=[],this._mapAction_UserArgs=new Map,this._mapProperty_UserValue=new Map,this._mapAction_Callbacks=new Map,this._controlTarget=e}setControlTarget(e){this._controlTarget=e}getControlTarget(){return this._controlTarget}register(e){this._arrUsers.includes(e)||this._arrUsers.push(e)}logout(e){const t=this._arrUsers.indexOf(e);-1!==t&&(this.clearUserDisiredAction({user:e}),this.clearUserDisiredValue({user:e}),this._arrUsers.splice(t,1))}getRegisteredUsers(){return this._arrUsers}ifUserExisted(e){return this._arrUsers.includes(e)}setDisiredValue(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");r&&(this._controlTarget[t]=i),this._mapProperty_UserValue.get(t)?this._mapProperty_UserValue.get(t).set(e,i):this._mapProperty_UserValue.set(t,new Map([[e,i]]))}clearUserDisiredValue(e){if(e&&(e.user||e.property)){if(e.property&&e.user){const t=this._mapProperty_UserValue.get(e.property);if(!t)return;t.delete(e.user)}else if(e.property)this._mapProperty_UserValue.delete(e.property);else if(e.user)for(let t of this._mapProperty_UserValue.values())t.delete(e.user)}else this._mapProperty_UserValue=new Map}getValue(e){if(!this._controlTarget)throw new Error("Control target is not set.");return this._controlTarget[e]}getPropertyDisiredValue(e){if(this._mapProperty_UserValue.get(e)){const t=[],i=this._mapProperty_UserValue.get(e);for(let e of i.values())t.push(e);return t}return null}setDisiredAction(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");return i||(i=[]),r?this._controlTarget[t](...i):(this._mapAction_UserArgs.get(t)?this._mapAction_UserArgs.get(t).set(e,i):this._mapAction_UserArgs.set(t,new Map([[e,i]])),this._render(t))}clearUserDisiredAction(e){if(e&&(e.user||e.actionName)){if(e.actionName&&e.user){const t=this._mapAction_UserArgs.get(e.actionName);if(!t)return;t.delete(e.user)}else if(e.actionName)this._mapAction_UserArgs.delete(e.actionName);else if(e.user)for(let t of this._mapAction_UserArgs.values())t.delete(e.user);this.render()}else this._mapAction_UserArgs=new Map}addCallback(e,t){const i=this._mapAction_Callbacks.get(e);i?i.push(t):this._mapAction_Callbacks.set(e,[t])}removeCallback(e,t){const i=this._mapAction_Callbacks.get(e);if(!i)return;const r=i.indexOf(t);-1!==r&&i.splice(r,1)}clearCallback(e){e?this._mapAction_Callbacks.delete(e):this._mapAction_Callbacks.clear()}_fireCallback(e){const t=this._mapAction_Callbacks.get(e);if(t)for(let e of t){if(!e)return;setTimeout(e.bind(this._controlTarget),0)}}_render(e){const t=this._mapAction_UserArgs.get(e);if(!t)throw new Error("Unrecorded action.");if(t.size===this._arrUsers.length){let i=[];for(let e of t.values())e.length>0&&(i=e);if(this._controlTarget[e]){const t=this._controlTarget[e](...i);return this._mapAction_UserArgs.delete(e),this._fireCallback(e),t}}}render(e){if(e)return this._render(e);for(let e of this._mapAction_UserArgs.keys())this._render(e)}}class he{static multiply(e,t){const i=[];for(let r=0;r<3;r++){const n=t.slice(3*r,3*r+3);for(let t=0;t<3;t++){const r=[e[t],e[t+3],e[t+6]].reduce(((e,t,i)=>e+t*n[i]),0);i.push(r)}}return i}static identity(){return[1,0,0,0,1,0,0,0,1]}static translate(e,t,i){return he.multiply(e,[1,0,0,0,1,0,t,i,1])}static rotate(e,t){var i=Math.cos(t),r=Math.sin(t);return he.multiply(e,[i,-r,0,r,i,0,0,0,1])}static scale(e,t,i){return he.multiply(e,[t,0,0,0,i,0,0,0,1])}}var le;!function(e){e.GREY="grey",e.GREY32="grey32",e.RGBA="rgba",e.RBGA="rbga",e.GRBA="grba",e.GBRA="gbra",e.BRGA="brga",e.BGRA="bgra"}(le||(le={}));const ce=(e,t,i,r)=>{let n=t+Math.round((e-t)/i)*i;return r&&(n=Math.min(n,r)),n};class ue{constructor(){this._maxCvsSideLength=void 0,this._defaultMaxCvsSideLength=null,this._predefinedResolutions=[{width:160,height:120},{width:320,height:240},{width:480,height:360},{width:640,height:480},{width:800,height:600},{width:960,height:720},{width:1280,height:720},{width:1920,height:1080},{width:2560,height:1440},{width:3840,height:2160}],this._mapCameraResolutions=new Map,this._bWebGLSupported=!0,this.extraBindings=[],this._cvsSingleFrameMode=null,this._cvsOriginalImage=null,this._imgWidth=0,this._imgHeight=0,this._singleFrameInputContainer=null,this._clickIptSingleFrameMode=()=>{if(!this._isSingleFrameModeEnabled())return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;let e;if(this._singleFrameInputContainer)e=this._singleFrameInputContainer.firstElementChild;else{e=document.createElement("input"),e.setAttribute("type","file"),"camera"===this.singleFrameMode?(e.setAttribute("capture",""),e.setAttribute("accept","image/*")):1!=this.singleFrameMode&&"image"!==this.singleFrameMode||(e.removeAttribute("capture"),e.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp")),e.addEventListener("change",(async()=>{const t=e.files[0];e.value="";const i=await(async e=>{let t=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(t=await createImageBitmap(e),t)return t}catch(e){}var r;return t||(i=await(r=e,new Promise(((e,t)=>{let i=URL.createObjectURL(r),n=new Image;n.dbrObjUrl=i,n.src=i,n.onload=()=>{e(n)},n.onerror=e=>{t(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}})))),i})(t),r=i instanceof HTMLImageElement?i.naturalWidth:i.width,n=i instanceof HTMLImageElement?i.naturalHeight:i.height;this._imgWidth=r,this._imgHeight=n;const s=e=>{const t=Date.now();if(0===r||0===n)return null;if(e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");const i=this._scanRegion,s=this.getFrameSize(r,n,i,this.maxCvsSideLength);if(!s)return null;let o=!0;r===s.sWidth&&n===s.sHeight&&(o=!1);const a=this.mapPixelFormatString_Enum.get(this.framePixelFormat.toLowerCase()),h={data:null,region:i?JSON.parse(JSON.stringify(i)):null,sx:s.sx,sy:s.sy,width:s.dWidth,height:s.dHeight,colorMode:null,pixelFormat:null,timeSpent:null,timeStamp:null,isCropped:o,toCanvas:this._toCanvas,_sWidth:s.sWidth,_sHeight:s.sHeight,_bUseWebGL:null},l=this._getImageData(e,r,n,s,null,{pixelFormat:a});if(!l)return null;const c=Date.now();return h.data=l.data,h.pixelFormat=h.colorMode=l.pixelFormat,h._bUseWebGL=l._bUseWebGL,h.timeSpent=c-t,h.timeStamp=c,l.pixelFormat===le.GREY?h.stride=h.width:h.stride=4*h.width,h};(e=>{let t=this._cvsSingleFrameMode;if(!t){if(t=document.createElement("canvas"),!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t),t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit="contain",t.style.pointerEvents="none",this._cvsSingleFrameMode=t}t.width==r&&t.height==n||(t.width=r,t.height=n);const i=t.getContext("2d");i.clearRect(0,0,t.width,t.height),i.drawImage(e,0,0)})(i),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);let o;this._updateDrawingLayersSize();try{o=s(i)}catch(e){throw e}const a=this.mapCameraEvents.get("singleframeacquired");for(let e of a)if(e)try{const t={data:new Uint8Array(o.data),region:JSON.parse(JSON.stringify(o.region)),sx:o.sx,sy:o.sy,width:o.width,height:o.height,stride:o.stride,colorMode:o.colorMode,pixelFormat:o.pixelFormat,timeSpent:o.timeSpent,timeStamp:o.timeStamp,isCropped:o.isCropped,toCanvas:o.toCanvas,_sWidth:o._sWidth,_sHeight:o._sHeight,_bUseWebGL:o._bUseWebGL};await e.apply(this,[t])}catch(e){console.error(e)}})),e.style.position="absolute",e.style.top="-9999px",e.style.backgroundColor="transparent",e.style.color="transparent";const t=document.createElement("div");t.append(e),t.style.position="absolute",t.style.width="1px",t.style.height="1px",t.style.overflow="hidden",t.style.pointerEvents="none",this._elContainer.prepend(t),this._singleFrameInputContainer=t}null==e||e.click()},this.styleEls=[],this._framePixelFormat=void 0,this._defaultFramePixelFormat="rgba",this.mapPixelFormatString_Enum=new Map([["grey",le.GREY],["grey32",le.GREY32],["rgba",le.RGBA],["rbga",le.RBGA],["grba",le.GRBA],["gbra",le.GBRA],["brga",le.BRGA],["bgra",le.BGRA]]),this.shaderPixelFormat=le.RGBA,this.maxVideoCvsLength=3,this._reusedCvs=null,this._reusedWebGLCvs=null,this._tempDataContainer=null,this._webGLTexture=null,this._webGLProgramInfo=null,this._webGLBuffers=null,this._softwareScale=1,this._scaleCenter={x:0,y:0},this._focusParameters={maxTimeout:400,minTimeout:300,kTimeout:void 0,oldDistance:null,fds:null,isDoingFocus:0,taskBackToContinous:null,curFocusTaskId:0,focusCancelableTime:1500,defaultFocusAreaSizeRatio:6,focusBackToContinousTime:5e3,tapFocusMinDistance:null,tapFocusMaxDistance:null,_focusArea:null},this._tapFocusEnabled=!0,this._focusSupported=!0,this._tapDoFocus=async e=>{if(this._touchMoved)return void(this._touchMoved=!1);if(!this._tapFocusEnabled)return;if(!this._bOpen)return;if(this._isSingleFrameModeEnabled())return;if(!this._video||this._video.paused)return;if(!this._videoTrack)return;if(!this._focusSupported)return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))return void(this._focusSupported=!1);if(null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),1==this._focusParameters.isDoingFocus)return;let t,i,r,n;if(this._focusParameters.taskBackToContinous&&(clearTimeout(this._focusParameters.taskBackToContinous),this._focusParameters.taskBackToContinous=null),e instanceof MouseEvent)t=e.clientX,i=e.clientY;else{if(!(e instanceof TouchEvent))throw new Error("Unknown event type.");if(!e.changedTouches.length)return;t=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY}const s=this.getVideoFit(),o=this._video.videoWidth,a=this._video.videoHeight,h=this._elContainer.getBoundingClientRect(),l=h.left,c=h.top,u=window.getComputedStyle(this._elContainer),d=parseFloat(u.width),f=parseFloat(u.height),g=d/f,_=o/a;let p=1;if("contain"===s)_>g?(p=d/o,r=(t-l)/p,n=(i-c-(f-d/_)/2)/p):(p=f/a,n=(i-c)/p,r=(t-l-(d-f*_)/2)/p);else{if("cover"!==s)throw new Error("Unsupported object-fit.");_>g?(p=f/a,n=(i-c)/p,r=(t-l+(f*_-d)/2)/p):(p=d/o,r=(t-l)/p,n=(i-c+(d/_-f)/2)/p)}const m={x:r+"px",y:n+"px"},v=2*Math.round(Math.min(o,a)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px",y=v;await this._setLocalFocus(m,v,y,this._focusParameters.tapFocusMinDistance,this._focusParameters.tapFocusMaxDistance),this._focusParameters.taskBackToContinous=setTimeout((()=>{this._videoTrack&&this._videoTrack.applyConstraints({advanced:[{focusMode:"continuous"}]}).catch((()=>{}))}),this._focusParameters.focusBackToContinousTime)},this._touchMoved=!1,this._touchMoveEvent=()=>{this._touchMoved=!0},this._recordedStates={},this.playCallbackInfo=null,this._toCanvas=function(){const e=document.createElement("canvas");let t;if(e.width=this.width,e.height=this.height,"grey"===(this.pixelFormat||this.colorMode)){t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{await this.selectCamera(this._selCam.value),this._bOpen||this.stop()},this._onResolutionSelChange=async()=>{let e,t;if(this._selRsl&&-1!=this._selRsl.selectedIndex){let i=this._selRsl.options[this._selRsl.selectedIndex];e=i.getAttribute("data-width"),t=i.getAttribute("data-height")}await this.setResolution(e,t),this._bOpen||this.stop()},this._onCloseBtnClick=()=>{this.close(!0)},this._bOpen=!1,this.isCameraEnhancer=!0,this.isDisposed=!1,this.disposed=!1,this.videoSrc=null,this.videoSettings={video:{width:{ideal:1280},height:{ideal:720},facingMode:{ideal:"environment"}}},this.iPlayRound=0,this.promisePlay=null,this._ifSaveLastUsedCamera=!1,this.ifSkipCameraInspection=!1,this._allCameras=[],this._currentCamera=null,this._videoTrack=null,this._lastDeviceId=void 0,this._vc_bPlayingVideoBeforeHide=!1,this._ev_documentHideEvent=()=>{if(!this._isSingleFrameModeEnabled())if("visible"===document.visibilityState){if(ue._onLog&&ue._onLog("DCE: document visible."),this._bOpen&&this._vc_bPlayingVideoBeforeHide)if(this.videoSrc)this._video.play();else if(this._video.srcObject){const e=this._video.srcObject.getTracks()[0];this._video.srcObject.active&&e&&!e.muted?this._video.play():this.play()}}else"hidden"===document.visibilityState&&(ue._onLog&&ue._onLog("DCE: document hidden."),["iPhone","iPad","Mac"].includes(Y.OS)?(this._vc_bPlayingVideoBeforeHide=!0,this._video&&this._video.pause()):this._video&&!this._video.paused?(this._vc_bPlayingVideoBeforeHide=!0,this._video.pause()):this._vc_bPlayingVideoBeforeHide=!1)},this.containerClassName="dce-video-container",this._elContainer=null,this._videoContainer=null,this._video=null,this.videoFit="contain",this._cvsScanRegion=null,this._divScanArea=null,this._divScanLight=null,this._bgLoading=null,this._selCam=null,this._bgCamera=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this.regionMaskFillStyle="rgba(0,0,0,0.5)",this.regionMaskStrokeStyle="rgb(254,142,20)",this.regionMaskLineWidth=2,this._bShowScanRegionMask=!0,this._bShowScanRegionLaser=void 0,this._defaultBShowScanRegionLaser=!1,this._scanRegion=null,this._arrScanRegionOverlays=[],this._layerBaseCvs=null,this._drawingLayerOfTip=null,this._tipArgs={x:void 0,y:void 0,width:void 0,duration:void 0,autoShowSuggestedTip:void 0},this._hideTipTimeoutId=null,this.onTipSuggested=null,this._cvsViewDecorator=null,this._decoratorType=[],this._decoratorArea=null,this._viewDecoratorInfo={rectangle:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},focus:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},crossline:{lineWidth:2,strokeStyle:"rgb(254,142,20)"},crosshair:{lineWidth:4,strokeStyle:"rgb(254,142,20)"}},this._croppingRegions=void 0,this._defaultCroppingRegions=[null],this.bIncreaseRegionIndexAuto=!0,this._croppingRegionIndex=0,this._loopInterval=void 0,this._defaultLoopInterval=0,this._maxNumberOfFramesInBuffer=void 0,this._defaultMaxNumberOfFramesInBuffer=1,this._frameQueue=[],this._bFetchingLoopStarted=!1,this._refreshInterval=void 0,this._defaultRefreshInterval=-1,this._updateLayersTimeout=500,this._updateLayers=()=>{this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none");for(let e of this._arrScanRegionOverlays)e&&(e.style.display="none");this._resizeTimeoutId&&clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout((()=>{if(!this.isDisposed||!this.disposed){this.ifShowScanRegionMask&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this.showScanRegionLaser(),this._cvsViewDecorator&&this.showViewDecorator(),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&(e.style.display="",this._updateScanRegionOverlay(e));this._updateDrawingLayersSize(),this._updateVideoContainerStyle()}}),this._updateLayersTimeout)},this._windowResizeListener=()=>{this._windowWidth!==document.documentElement.clientWidth&&(this._windowWidth=document.documentElement.clientWidth,this._updateLayers())},this.mapCameraEvents=new Map([["cameraopen",[]],["cameraclose",[]],["camerachange",[]],["resolutionchange",[]],["played",[]],["singleframeacquired",[]],["frameaddedtobuffer",[]]]),this._controler=null,navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia?this._singleFrameMode=!1:this._singleFrameMode=!0}static getVersion(){return this._version}static async detectEnvironment(){return await(async()=>({wasm:X,worker:z,getUserMedia:Z,camera:await J(),browser:Y.browser,version:Y.version,OS:Y.OS}))()}static set engineResourcePath(e){if(this._hasEngineResourceLoaded)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` is called.");ue._engineResourcePath=(e=>{if(null==e&&(e="./"),!V){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get engineResourcePath(){return this._engineResourcePath}static isStorageAvailable(e){let t;try{t=window[e];const i="__storage_test__";return t.setItem(i,i),t.removeItem(i),!0}catch(e){return e instanceof DOMException&&(22===e.code||1014===e.code||"QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name)&&t&&0!==t.length}}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"data"in e&&"region"in e&&"sx"in e&&"sy"in e&&"width"in e&&"height"in e&&("colorMode"in e||"pixelFormat"in e)&&"timeSpent"in e&&"timeStamp"in e&&"isCropped"in e&&"toCanvas"in e&&"_sWidth"in e&&"_sHeight"in e&&"_bUseWebGL"in e}static async testCameraAccess(){try{if(!navigator||!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return{ok:!1,message:"Insecure context."};(await navigator.mediaDevices.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()}))}catch(e){if("OverconstrainedError"===e.name||"NotFoundError"===e.name)return{ok:!1,message:"No camera detected."};if("NotAllowedError"===e.name)return{ok:!1,message:"No permission to access camera."};if("AbortError"===e.name)return{ok:!1,message:"Some problem occurred which prevented the device from being used."};if("NotReadableError"===e.name)return{ok:!1,message:"A hardware error occurred."};if("SecurityError"===e.name)return{ok:!1,message:"User media support is disabled."};throw e}return{ok:!0,message:"Successfully accessed the camera."}}set maxCvsSideLength(e){if(e<=0)throw new Error("Invalid value.");this._maxCvsSideLength=e}get maxCvsSideLength(){if(void 0!==this._maxCvsSideLength)return this._maxCvsSideLength;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxCvsSideLength");if(e&&1===e.length)return e[0]}return this._defaultMaxCvsSideLength}static set defaultUIElementURL(e){ue._defaultUIElementURL=e}static get defaultUIElementURL(){var e;return null===(e=ue._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",ue.engineResourcePath)}getUIElement(){return this.UIElement}async setUIElement(e){if(this._bOpen)throw new Error("It is not allowed to change the UIElement when the camera is open.");if("string"==typeof e||e instanceof String){if(!e.trim().startsWith("<")){let t=await fetch(e);if(!t.ok)throw Error("setUIElement(elementOrUrl): Network Error: "+t.statusText);e=await t.text()}if(!e.trim().startsWith("<"))throw Error("setUIElement(elementOrUrl): Can't get valid HTMLElement.");let t=document.createElement("div");t.innerHTML=e;for(let e=0;e100||e.regionTop>100||e.regionRight>100||e.regionBottom>100)))}set scanRegion(e){if(!this._checkValidRegion(e))throw new Error("Invalid region.");this._scanRegion=JSON.parse(JSON.stringify(e)),this._updateScanRegionCanvas(),this._updateScanAreaDiv();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e)}setScanRegion(e){this.scanRegion=e}getScanRegion(){return JSON.parse(JSON.stringify(this._scanRegion))}_calculateCvsSize(){var e,t;let i,r,n;if(this._isSingleFrameModeEnabled()?(i=this._imgWidth,r=this._imgHeight,n="contain"):(i=null===(e=this._video)||void 0===e?void 0:e.videoWidth,r=null===(t=this._video)||void 0===t?void 0:t.videoHeight,n=this.getVideoFit()),!i||!r)throw new Error("Invalid content dimensions.");return{width:i,height:r,objectFit:n}}addScanRegionOverlayCanvas(){this._assertOpen();const e=document.createElement("canvas");if(this._updateScanRegionOverlay(e),!this._scanRegionOverlayContainer){const e=document.createElement("div");if(this._scanRegionOverlayContainer=e,e.style.position="absolute",e.style.left="0",e.style.top="0",e.style.width="100%",e.style.height="100%",e.style.overflow="hidden",e.style.pointerEvents="none",this._layerBaseCvs)this._layerBaseCvs.parentElement.after(e);else if(this._cvsScanRegion)this._cvsScanRegion.after(e);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(e);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._recordedStates.overlayShow=!0}return this._scanRegionOverlayContainer.append(e),this._arrScanRegionOverlays.push(e),e}removeScanRegionOverlayCanvas(e){const t=this._arrScanRegionOverlays.indexOf(e);-1!==t&&(e.remove(),this._arrScanRegionOverlays.splice(t,1))}_updateScanRegionOverlay(e){if(!e)return;let t;try{t=this._calculateCvsSize()}catch(e){if("Invalid content dimensions."===(e.message||e))return;throw e}const{width:i,height:r,objectFit:n}=t;if(i<=0||r<=0)return e.width=0,void(e.height=0);const s=this._getRegionInPixels(i,r,this._scanRegion),o=this.getFrameSize(i,r,this._scanRegion,this.maxCvsSideLength),a=o.dWidth,h=o.dHeight;e.width==a&&e.height==h||(e.width=a,e.height=h);const l=window.getComputedStyle(this._elContainer),c=parseFloat(l.width),u=parseFloat(l.height),d=c/u,f=i/r;let g,_,p,m,v=1;"contain"===n?(f>d?(v=c/i,g=0,_=(u-r*v)/2):(v=u/r,g=(c-i*v)/2,_=0),g+=s.regionLeft*v,_+=s.regionTop*v,p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):"cover"===n?(f>d?(v=u/r,g=s.regionLeft*v-(i*v-c)/2,_=s.regionTop*v):(v=c/i,g=s.regionLeft*v,_=s.regionTop*v-(r*v-u)/2),p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):(g=0,_=0,p=0,m=0),e.style.position="absolute",e.style.left=g+"px",e.style.top=_+"px",e.style.width=p+"px",e.style.height=m+"px"}showScanRegionOverlays(){this._scanRegionOverlayContainer&&("none"==this._scanRegionOverlayContainer.style.display&&(this._scanRegionOverlayContainer.style.display=""),this._recordedStates.overlayShow=!0)}hideScanRegionOverlays(){this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none",this._recordedStates.overlayShow=!1)}setViewDecorator(e,t){if(!e)return void(this._cvsViewDecorator&&(this._cvsViewDecorator.remove(),this._cvsViewDecorator=null));if(!t)throw new Error("Invalid area.");this._assertOpen();let i=[];if("string"==typeof e?i.push(e):Array.isArray(e)&&(i=JSON.parse(JSON.stringify(e))),!this._cvsViewDecorator){if(this._cvsViewDecorator=document.createElement("canvas"),this._scanRegionOverlayContainer)this._scanRegionOverlayContainer.after(this._cvsViewDecorator);else if(this._layerBaseCvs)this._layerBaseCvs.parentElement.after(this._cvsViewDecorator);else if(this._cvsScanRegion)this._cvsScanRegion.after(this._cvsViewDecorator);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(this._cvsViewDecorator);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(this._cvsViewDecorator);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(this._cvsViewDecorator)}this._recordedStates.decoratorShow=!0}this._decoratorArea=JSON.parse(JSON.stringify(t)),this._decoratorType.length=0;const r=["rectangle","focus"],n=["crossline","crosshair"];let s=!1,o=!1;for(let e of i)e=e.toLowerCase(),r.includes(e)&&!s&&(s=!0,this._decoratorType.push(e)),n.includes(e)&&!o&&(o=!0,!this._decoratorType.includes(e)&&this._decoratorType.push(e));this._updateViewDecorator()}getViewDecorator(){return{type:JSON.parse(JSON.stringify(this._decoratorType)),area:JSON.parse(JSON.stringify(this._decoratorArea)),canvas:this._cvsViewDecorator}}showViewDecorator(){this._cvsViewDecorator&&("none"==this._cvsViewDecorator.style.display&&(this._cvsViewDecorator.style.display=""),this._recordedStates.decoratorShow=!0)}hideViewDecorator(){this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none",this._recordedStates.decoratorShow=!1)}setViewDecoratorLineWidth(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("lineWidth"))throw new Error(`It is not allowed to change the property 'lineWidth' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].lineWidth=t,this._updateViewDecorator()}setViewDecoratorStrokeStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("strokeStyle"))throw new Error(`It is not allowed to change the property 'strokeStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].strokeStyle=t,this._updateViewDecorator()}setViewDecoratorFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("fillStyle"))throw new Error(`It is not allowed to change the property 'fillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].fillStyle=t,this._updateViewDecorator()}setViewDecoratorMaskFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("maskFillStyle"))throw new Error(`It is not allowed to change the property 'maskFillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].maskFillStyle=t,this._updateViewDecorator()}_updateViewDecorator(){if(!this._bOpen)return;if(!this._cvsViewDecorator||!this._decoratorArea)return;let e;if(this._isSingleFrameModeEnabled())e="contain";else{if(!this._video)return;e=this.getVideoFit()}const t=this._cvsViewDecorator;t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit=e,t.style.pointerEvents="none";const i=this.getVisibleRegion(!0);if(!i)return;const r=i.regionRight-i.regionLeft,n=i.regionBottom-i.regionTop;if(t.width==r&&t.height==n||(t.width=r,t.height=n),r<=0||n<=0)return;const s=t.getContext("2d");s.clearRect(0,0,t.width,t.height);const o=this._decoratorArea.x/100*r,a=this._decoratorArea.y/100*n,h=this._decoratorArea.width/100*r,l=this._decoratorArea.height/100*n;for(let e of this._decoratorType){if("rectangle"===e){s.fillStyle=this._viewDecoratorInfo.rectangle.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.fillStyle=this._viewDecoratorInfo.rectangle.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.lineWidth=this._viewDecoratorInfo.rectangle.lineWidth,s.strokeStyle=this._viewDecoratorInfo.rectangle.strokeStyle;const e=s.lineWidth/2;s.strokeRect(Math.round(o-e),Math.round(a-e),Math.round(h+s.lineWidth),Math.round(l+s.lineWidth))}if("focus"===e){s.fillStyle=this._viewDecoratorInfo.focus.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.fillStyle=this._viewDecoratorInfo.focus.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.lineWidth=this._viewDecoratorInfo.focus.lineWidth,s.strokeStyle=this._viewDecoratorInfo.focus.strokeStyle;const e=s.lineWidth/2,i=[0,.25,.75,1],r=[0,.25,.75,1];s.beginPath();for(let e=0;e{const e=parseFloat(window.getComputedStyle(this._elContainer).width),t=parseFloat(window.getComputedStyle(this._elContainer).height);let s,o={regionBottom:r,regionRight:i,regionLeft:0,regionTop:0,regionMeasuredByPercentage:!1};return"cover"===n?e/tthis.maxNumberOfFramesInBuffer;)this._frameQueue.shift()}get maxNumberOfFramesInBuffer(){if(void 0!==this._maxNumberOfFramesInBuffer)return this._maxNumberOfFramesInBuffer;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxNumberOfFramesInBuffer");if(e&&1===e.length)return e[0]}return this._defaultMaxNumberOfFramesInBuffer}get numberOfFramesInBuffer(){return this._frameQueue.length}set refreshInterval(e){this._refreshInterval=e}get refreshInterval(){if(void 0!==this._refreshInterval)return this._refreshInterval;if(this._controler){const e=this._controler.getPropertyDisiredValue("refreshInterval");if(e&&1===e.length)return e[0]}return this._defaultRefreshInterval}static async createInstance(e){let t=new ue;("string"==typeof e||e instanceof String)&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return this._hasEngineResourceLoaded=!0,ue.onWarning&&(location&&"file:"===location.protocol?setTimeout((()=>{ue.onWarning&&ue.onWarning({id:1,message:"The page is opened over file:// and Dynamsoft Camera Enhancer may not work properly. Please open the page via https://."})}),0):!1!==window.isSecureContext&&navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia||setTimeout((()=>{ue.onWarning&&ue.onWarning({id:2,message:"Dynamsoft Camera Enhancer may not work properly in a non-secure context. Please open the page via https://."})}),0)),t._drawingLayersManager=new oe,t}static async playVideo(e,t,i){return new Promise(((r,n)=>{e||n(new Error("Invalid video element.")),t||n(new Error("Invalid source.")),e.onloadedmetadata=async()=>{e.onloadedmetadata=null,await e.play(),r(e)},"string"==typeof t||t instanceof String?e.src=t:e.srcObject=t,void 0!==i&&setTimeout((()=>n(new Error("Failed to play video. Timeout."))),i)}))}static findBestRearCameraInIOS(e){if(!e||!e.length)return null;const t=["back","baksidan","bakre","bak","後置","后置","背面","خلفية","задна","posteriore","posterior","zadní","bagside","rück","πίσω","trasera","taka","arrière","אחורית","बैक","stražnja","hátsó","belakang","aртқы","후면","achterzijde","tylny","traseira","spate","задняя","задней","zadná","านหลัง","arka","sau"],i=["triple","三镜头","三鏡頭","トリプル","ثلاثية","тройна","trojný","τριπλή","kolmois","משולשת","ट्रिपल","trostruka","tiga","tripla","үштік","트리플","trippelt","trippel","trójobiektywowy","triplă","тройная","trojitá","สาม","üçlü","потроєна","ba camera"],r=["dual wide","dual-weitwinkel","dual con gran angular","dual","doble","double","双广角","雙廣角","デュアル広角","مزدوجة عريضة","двойна широкоъгълна","duální širokoúhlý","διπλή ευρεία","laajakulmainen kaksois","כפולה רחבה","ड्युअल वाइड","dvostruka široka","kettős, széles látószögű","ganda","doppia con grandangolo","қос кең бұрышты","듀얼 와이드","dwikamera","dobbelt vidvinkelkamera","dwuobiektywowy","dupla grande-angular","grande angular dupla","dublă","двойная широкоугольная","duálna širokouhlá","dubbel vidvinkel","คู่ด้านหลังมุมกว้าง","çift geniş","здвоєна ширококутна","kép rộng mặt sau"],n=e.filter((e=>{const i=e.label.toLowerCase();return t.some((e=>i.includes(e)))}));if(!n.length)return null;const s=n.find((e=>{const t=e.label.toLowerCase();return i.some((e=>t.includes(e)))}));if(s)return s.deviceId;const o=n.find((e=>{const t=e.label.toLowerCase();return r.some((e=>t.includes(e)))}));return o?o.deviceId:n[0].deviceId}static findBestRearCamera(e){if(!e||!e.length)return null;if(["iPhone","iPad","Mac"].includes(Y.OS))return ue.findBestRearCameraInIOS(e);const t=["rear","back","rück","arrière","trasera","trás","traseira","posteriore","posterior","后面","後面","背面","后置","後置","背置","задней","خلفية","후","arka","achterzijde","หลัง","baksidan","bagside","sau","bak","tylny","taka","אחורית","πίσω","spate","hátsó","zadní","darrere","zadná","задня","stražnja","belakang","बैक","задна","aртқы","задняя","bakre","านหลัง"];for(let i of e){const e=i.label.toLowerCase();if(e&&t.some((t=>e.includes(t)))&&/\b0(\b)?/.test(e))return i.deviceId}return["Android","HarmonyOS"].includes(Y.OS)?e[e.length-1].deviceId:null}_isSingleFrameModeEnabled(){return 0!=this.singleFrameMode}async play(e,t,i,r){let n;if(this._video&&this.videoSrc){ue._onLog&&(n=Date.now(),ue._onLog("DCE: start loading static video: "+n));const e=await ue.playVideo(this._video,this.videoSrc,4e3);if(ue._onLog&&ue._onLog("DCE: finish loading static video. Costs: "+(Date.now()-n)),!this._video)return e.pause(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};const t={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};this.playCallbackInfo=JSON.parse(JSON.stringify(t));const i=this.mapCameraEvents.get("played");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return this._recordedStates.videoPlaying=!0,t}if(this._isSingleFrameModeEnabled())return r&&r.notTriggerSingleFrameClick||this._clickIptSingleFrameMode(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};if(!this._video)throw new Error("'video' is null or undefined.");const s=++this.iPlayRound;if(this.promisePlay&&(await this.promisePlay,s{var n;try{this._video&&this._video.srcObject&&this.stop(),ue._onLog&&ue._onLog("DCE: ======before video========");const s=()=>{if(!this._video)throw h&&h.getTracks().forEach((e=>{e.stop()})),this._videoTrack=null,this._currentCamera=null,new Error("'video' is null or undefined.")},o=this.getVideoSettings();let a,h;if("boolean"==typeof o.video&&(o.video={}),e)delete o.video.facingMode,o.video.deviceId={exact:e};else if(o.video.deviceId);else if(this._lastDeviceId)delete o.video.facingMode,o.video.deviceId={exact:this._lastDeviceId};else if(this.ifSaveLastUsedCamera&&ue.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")){delete o.video.facingMode,o.video.deviceId={ideal:window.localStorage.getItem("dce_last_camera_id")};const e=JSON.parse(window.localStorage.getItem("dce_last_apply_width")),t=JSON.parse(window.localStorage.getItem("dce_last_apply_height"));e&&t&&(o.video.width=e,o.video.height=t)}else if(this.ifSkipCameraInspection);else if(o.video.facingMode){if(await this.getAllCameras(!1),!this._video)throw new Error("'video' is null or undefined.");let e=o.video.facingMode;if(e instanceof Array&&e.length&&(e=e[0]),e=e.exact||e.ideal||e,"environment"===e){a=!0;const e=ue.findBestRearCamera(this._allCameras);e&&(delete o.video.facingMode,o.video.deviceId={exact:e})}}t&&(o.video.width={ideal:t}),i&&(o.video.height={ideal:i}),ue._onLog&&ue._onLog("DCE: ======try getUserMedia========");let l=[0,500],c=null;const u=async e=>{for(let t of l){t&&await new Promise((e=>setTimeout(e,t))),s();try{ue._onLog&&ue._onLog("DCE: ask "+JSON.stringify(e)),h=await navigator.mediaDevices.getUserMedia(e);break}catch(e){if(s(),"NotFoundError"===e.name||"NotAllowedError"===e.name)throw e;c=e,ue._onLog&&ue._onLog("DCE: "+e.message||e)}}s()};let d;if(await u(o),h||(ue._onLog&&ue._onLog("DCE: ======try getUserMedia again========"),d=JSON.parse(JSON.stringify(o)),"object"==typeof d.video&&(["iPhone","iPad"].includes(Y.OS)?(t>=1280||i>=1280?d.video.width=1280:t>=640||i>=640?d.video.width=640:(t<640||i<640)&&(d.video.width=320),delete d.video.height):a&&!o.video.deviceId?(delete d.video.facingMode,this._allCameras.length&&(d.video.deviceId={ideal:this._allCameras[this._allCameras.length-1].deviceId})):d.video=!0),ue._onLog&&ue._onLog("DCE: "+d),await u(d)),h||(l=[1e3,2e3],await u(o)),h||await u(d),!h)throw c;const f=()=>{const e=h.getVideoTracks();let t,i;if(e.length&&(t=this._videoTrack=e[0]),this._video&&t){const e=t.getSettings();if(e)for(let r of this._allCameras)if(e.deviceId===r.deviceId){r._checked=!0,r.label=t.label,i=r;break}}this._currentCamera=i};if(await this.getAllCameras(!1),s(),a&&!this.ifSkipCameraInspection){f();const e=ue.findBestRearCamera(this._allCameras),t=null===(n=this._currentCamera)||void 0===n?void 0:n.deviceId;e&&e!=t&&(h.getTracks().forEach((e=>{e.stop()})),l=[0,500,1e3,2e3],o.video.deviceId={exact:e},await u(o))}ue._onLog&&ue._onLog("DCE: ======play video========"),s(),await ue.playVideo(this._video,h,4e3),s(),ue._onLog&&ue._onLog("DCE: ======played video========"),this._bgLoading&&(this._bgLoading.style.animationPlayState="paused");const g=this._video.videoWidth+"x"+this._video.videoHeight;this._optGotRsl&&(this._optGotRsl.setAttribute("data-width",this._video.videoWidth),this._optGotRsl.setAttribute("data-height",this._video.videoHeight),this._optGotRsl.innerText=g,this._selRsl&&this._optGotRsl.parentNode==this._selRsl&&(this._selRsl.value="got")),ue._onLog&&ue._onLog("DCE: got "+g),f(),this._renderSelCameraInfo();const _={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};if(_.deviceId&&(this._lastDeviceId=_.deviceId,this.ifSaveLastUsedCamera&&ue.isStorageAvailable&&(window.localStorage.setItem("dce_last_camera_id",this._lastDeviceId),o.video.width&&o.video.height&&(window.localStorage.setItem("dce_last_apply_width",JSON.stringify(o.video.width)),window.localStorage.setItem("dce_last_apply_height",JSON.stringify(o.video.height))))),!r||!r.notTriggerPlayedEvent){const e=this.mapCameraEvents.get("played");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(_));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return this.promisePlay=null,_}catch(e){throw this.promisePlay=null,this._bgLoading&&(this._bgLoading.style.display="none"),"NotFoundError"===e.name&&(DOMException?e=new DOMException("No camera available, please use a device with an accessible camera.",e.name):(e=new Error("No camera available, please use a device with an accessible camera.")).name="NotFoundError"),e}})(),ue._onLog&&(n=Date.now(),ue._onLog("DCE: start opening camera: "+n));const o=await this.promisePlay;return ue._onLog&&ue._onLog("DCE: finish opening camera. Costs: "+(Date.now()-n)),this.playCallbackInfo=JSON.parse(JSON.stringify(o)),this._recordedStates.videoPlaying=!0,o}async resume(){this._assertOpen(),this._video&&(await this._video.play(),this._recordedStates.videoPlaying=!0),this.ifShowScanRegionLaser&&this.showScanRegionLaser()}pause(){this._assertOpen(),this._video&&(this._video.pause(),this._recordedStates.videoPlaying=!1),this.ifShowScanRegionLaser&&this.hideScanRegionLaser()}isPaused(){var e;return!this._isSingleFrameModeEnabled()&&!0===(null===(e=this._video)||void 0===e?void 0:e.paused)}_bindUI(){if(!this.UIElement)throw new Error("Need to define `UIElement` before opening.");const e=[this.UIElement];for(let t=0;t','','',''].join(""),this._optGotRsl=this._optGotRsl||this._selRsl.options[0])):!this._optGotRsl&&t.classList.contains("dce-opt-gotResolution")?this._optGotRsl=t:!this._btnClose&&t.classList.contains("dce-btn-close")?this._btnClose=t:!this._selMinLtr&&t.classList.contains("dlr-sel-minletter")?(this._selMinLtr=t,this._selMinLtr.options.length||(this._selMinLtr.innerHTML=[this._optGotMinLtr?"":'','','','','','','','','','',''].join(""),this._optGotMinLtr=this._optGotMinLtr||this._selMinLtr.options[0])):!this._optGotMinLtr&&t.classList.contains("dlr-opt-gotMinLtr")&&(this._optGotMinLtr=t);if(this.extraBindings&&this.extraBindings.length)for(let i of this.extraBindings)try{i(t)}catch(e){}}if(!this._video)throw this._unbindUI(),Error(`Can not find the video container element with class '${this.containerClassName}'`);this._isSingleFrameModeEnabled()||this.videoSrc?(this._isSingleFrameModeEnabled()&&(this._elContainer&&(this._elContainer.addEventListener("click",this._clickIptSingleFrameMode),this._elContainer.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block")),this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._elContainer&&(["Android","HarmonyOS"].includes(Y.OS)?(this._elContainer.addEventListener("touchend",this._tapDoFocus),this._elContainer.addEventListener("touchmove",this._touchMoveEvent)):this._elContainer.addEventListener("click",this._tapDoFocus)),this._selCam&&(this._selCam.style.display="block",this._selCam.addEventListener("change",this._onCameraSelChange)),this._selRsl&&(this._selRsl.style.display="block",this._selRsl.addEventListener("change",this._onResolutionSelChange)),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._bgLoading&&(this._bgLoading.style.display="block")),this._btnClose&&this._btnClose.addEventListener("click",this._onCloseBtnClick),document.addEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&(this._resizeObserver||(this._resizeObserver=new ResizeObserver((e=>{for(let t of e)t.target===this._elContainer&&this._updateLayers()}))),this._elContainer&&this._resizeObserver.observe(this._elContainer)),this._windowWidth=document.documentElement.clientWidth,window.addEventListener("resize",this._windowResizeListener)}_unbindUI(){this._isSingleFrameModeEnabled()?(this._elContainer&&(this._elContainer.removeEventListener("click",this._clickIptSingleFrameMode),this._elContainer.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none")):this._bgLoading&&(this._bgLoading.style.display="none"),this._elContainer&&(this._elContainer.removeEventListener("click",this._tapDoFocus),this._elContainer.removeEventListener("touchend",this._tapDoFocus),this._elContainer.removeEventListener("touchmove",this._touchMoveEvent)),this._selCam&&this._selCam.removeEventListener("change",this._onCameraSelChange),this._selRsl&&this._selRsl.removeEventListener("change",this._onResolutionSelChange),this._btnClose&&this._btnClose.removeEventListener("click",this._onCloseBtnClick),this.hideScanRegionLaser(),this.hideViewDecorator(),this.hideScanRegionOverlays(),this._drawingLayersManager.setVisible(!1),this._hideOriginalImageCvs(),this._videoContainer&&this._videoContainer.remove(),this._video=null,this._videoContainer=null,this._elContainer=null,this._selCam=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._divScanArea=null,this._divScanLight=null,this._cvsScanRegion&&(this._cvsScanRegion.remove(),this._cvsScanRegion=null),this._singleFrameInputContainer&&(this._singleFrameInputContainer.remove(),this._singleFrameInputContainer=null),this._cvsSingleFrameMode&&(this._cvsSingleFrameMode.remove(),this._cvsSingleFrameMode=null),document.removeEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&this._resizeObserver&&this._resizeObserver.disconnect(),window.removeEventListener("resize",this._windowResizeListener)}_assertOpen(){if(!this._bOpen)throw Error("The camera is not open.")}async open(e){this.UIElement||await this.setUIElement(ue.defaultUIElementURL),this._bindUI(),e&&this.appendAndShowUI();let t=await this.play();this.bOpen=!0,this._focusParameters.fds=null,this._focusParameters.kTimeout=void 0,this._focusSupported=!0,this._tapFocusEnabled&&!this._isSingleFrameModeEnabled()&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,this._focusParameters.fds||(this._focusSupported=!1,this._tapFocusEnabled=!1));const i=this.mapCameraEvents.get("cameraopen");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return t}close(e){if(!this._video)return;this.stop(),this._hideOriginalImage(!1),this.hideTip(),this._unbindUI(),e&&this.hideUI(),this.stopFetchingLoop(),this.bOpen=!1;const t=this.mapCameraEvents.get("cameraclose");for(let e of t){if(!e)continue;const t={width:0,height:0,deviceId:null};setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}stop(){this._video&&this._video.srcObject&&(ue._onLog&&ue._onLog("DCE: ======stop video========"),this._video.srcObject.getTracks().forEach((e=>{e.stop()})),this._video.srcObject=null,this._videoTrack=null,this._currentCamera=null),this._video&&this.videoSrc&&(ue._onLog&&ue._onLog("DCE: ======stop existing video========"),this._video.pause(),this._video.currentTime=0),this._bgLoading&&(this._bgLoading.style.animationPlayState=""),this._frameQueue.length=0,this._reusedCvs&&this._reusedCvs.ctx2d&&this._reusedCvs.ctx2d.clearRect(0,0,this._reusedCvs.width,this._reusedCvs.height),this.forceLoseContext()}async getAllCameras(e=!0){let t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind));if(e&&t&&t.length&&!t[0].deviceId){let e=await navigator.mediaDevices.getUserMedia({video:!0});t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind)),e.getTracks().forEach((e=>{e.stop()}))}const i=[],r=[];if(this._allCameras)for(let e of this._allCameras)e._checked&&r.push(e);for(let e=0;e{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}if(r!==s.width||n!==s.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(s));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return s}getResolution(){if(this._bOpen)return[this._video.videoWidth,this._video.videoHeight];{let e=0,t=0;const i=this.videoSettings.video.width,r=this.videoSettings.video.height;return i&&(e=i.exact||i.ideal||i),r&&(t=r.exact||r.ideal||r),[e,t]}}async setResolution(e,t){let i,r;if(e instanceof Array?(i=e[0],r=e[1]):(i=e,r=t),this.videoSettings.video.width={ideal:i},this.videoSettings.video.height={ideal:r},!this._bOpen||this._video.paused)return null;const n=this._video.videoWidth,s=this._video.videoHeight,o=await this.play(null,i,r);if(n!==o.width||s!==o.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(o));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return o}async getResolutions(e){var t,i;let r="";const n=(e,t)=>{const i=this._mapCameraResolutions.get(e);if(!i||!i.length)return!1;for(let e of i)if(e[0]===t.width&&e[1]===t.height)return!0;return!1},s=async(e,t,i)=>{const r={video:{deviceId:{exact:e},width:{ideal:t},height:{ideal:i}}};let n=null;try{n=await navigator.mediaDevices.getUserMedia(r)}catch(e){return null}if(!n)return null;const s=n.getVideoTracks();let o=null;try{const e=s[0].getSettings();o={width:e.width,height:e.height}}catch(e){const t=document.createElement("video");t.srcObject=n,o={width:t.videoWidth,height:t.videoHeight},t.srcObject=null}return s.forEach((e=>{e.stop()})),o};if(!this._bOpen){const o=null===(i=null===(t=this.videoSettings)||void 0===t?void 0:t.video)||void 0===i?void 0:i.deviceId;if(!o)return null;if(r=o.hasOwnProperty("exact")?this.videoSettings.video.deviceId.exact:o.hasOwnProperty("ideal")?this.videoSettings.video.deviceId.ideal:this.videoSettings.video.deviceId,!r)return null;let a=this._mapCameraResolutions.get(r);if(a&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),a=this._mapCameraResolutions.get(r);for(let e of this._predefinedResolutions){const t=await s(r,e.width,e.height);t&&!n(r,t)&&a.push([t.width,t.height])}return a}if(this._currentCamera){r=this._currentCamera.deviceId;let t=this._mapCameraResolutions.get(r);if(t&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),t=this._mapCameraResolutions.get(r);let i=this._videoTrack;for(let e of this._predefinedResolutions){await i.applyConstraints({width:{ideal:e.width},height:{ideal:e.height}});const s=i.getSettings(),o={width:s.width,height:s.height};n(r,o)||t.push([o.width,o.height])}return this._video.srcObject.getTracks().forEach((e=>{e.stop()})),await this.play(r,null,null,{notTriggerPlayedEvent:!0}),t}return null}on(e,t){if(!t)return;const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);i.includes(t)||i.push(t)}off(e,t){const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);const r=i.indexOf(t);-1!==r&&i.splice(r,1)}offAll(e){if(e){if("string"==typeof e){const t=this.mapCameraEvents.get(e);t&&(t.length=0)}}else for(let e of this.mapCameraEvents.values())e&&(e.length=0)}getVideoSettings(){return JSON.parse(JSON.stringify(this.videoSettings))}updateVideoSettings(e){if(this.videoSettings=JSON.parse(JSON.stringify(e)),this._lastDeviceId=null,this._bOpen)return this.play()}isOpen(){return this._bOpen}getCapabilities(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCapabilities()' is unavailable in singleFrameMode.");return this._videoTrack&&this._videoTrack.getCapabilities?this._videoTrack.getCapabilities():{}}getCameraSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCameraSettings()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings():null}getConstraints(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getConstraints()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getConstraints():null}async applyConstraints(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'applyConstraints()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error('"_videoTrack" is null.');if(!this._videoTrack.applyConstraints)throw Error("Not supported.");return await this._videoTrack.applyConstraints(e)}async turnOnTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOnTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!0}]});throw Error("Not supported.")}async turnOffTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOffTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!1}]});throw Error("Not supported.")}async setColorTemperature(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setColorTemperature()' is unavailable in singleFrameMode.");let t=this.getCapabilities().colorTemperature;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{colorTemperature:e,whiteBalanceMode:"manual"}]})}getColorTemperature(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getColorTemperature()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().colorTemperature||0:null}async setExposureCompensation(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setExposureCompensation()' is unavailable in singleFrameMode.");let t=this.getCapabilities().exposureCompensation;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{exposureCompensation:e}]})}getExposureCompensation(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getExposureCompensation()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().exposureCompensation||0:null}async _setHardwareScale(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setHardwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");if(!this._videoTrack)return;const t=this.getCapabilities().zoom;if(!t)throw new Error("Not supported.");return et.max&&(e=t.max),e=ce(e,t.min,t.step,t.max),await this._videoTrack.applyConstraints({advanced:[{zoom:e}]}),e}_getHardwareScale(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().zoom||1:null}_setSoftwareScale(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setSoftwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");t&&this._setScaleCenter(t),this._softwareScale=e,this._scaleVideo(e,t)}_getSoftwareScale(){return this._softwareScale}_setScaleCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setScaleCenter()' is unavailable in singleFrameMode.");if(!e||"string"!=typeof e.x||"string"!=typeof e.y)throw new Error("Invalid center.");const t=this._video.videoWidth,i=this._video.videoHeight;let r=0,n=0;if(e.x.endsWith("px"))r=parseFloat(e.x);else{if(!e.x.endsWith("%"))throw new Error("Invalid scale center.");r=parseFloat(e.x)/100*t}if(e.y.endsWith("px"))n=parseFloat(e.y);else{if(!e.y.endsWith("%"))throw new Error("Invalid scale center.");n=parseFloat(e.y)/100*i}if(NaN==r||NaN==n)throw new Error("Invalid scale center.");this._scaleCenter={x:r,y:n}}_resetScaleCenter(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_resetScaleCenter()' is unavailable in singleFrameMode.");const e=this._video.videoWidth,t=this._video.videoHeight;this._scaleCenter={x:e/2,y:t/2}}_isVideoCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_isVideoCenter()' is unavailable in singleFrameMode.");return e&&e.x==this._video.videoWidth/2&&e.y==this._video.videoHeight/2}async _setZoom(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e>i?this._setSoftwareScale(e/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e)}}async setZoom(e){if("number"!=typeof e&&"object"!=typeof e)throw new TypeError("Illegal type of argument.");if("number"==typeof e)return this._setZoom(e);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e){if("number"!=typeof e.factor)throw new TypeError("Illegal type of 'factor'.");if(e.factor<1)throw new RangeError("Invalid value.");e.centerPoint?this._setScaleCenter(e.centerPoint):this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e.factor);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e.factor>i?this._setSoftwareScale(e.factor/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e.factor)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e.factor)}}}getZoom(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?this._getHardwareScale()*this._softwareScale:null}getZoomSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?{factor:this._getHardwareScale()*this._softwareScale}:null}async resetZoom(){await this.setZoom({factor:1})}async setFrameRate(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFrameRate()' is unavailable in singleFrameMode.");let t=this.getCapabilities().frameRate;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({width:{ideal:Math.max(this._video.videoWidth,this._video.videoHeight)},frameRate:e})}getFrameRate(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrameRate()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().frameRate:null}async _setFocus(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if("string"!=typeof e)throw Error("Invalid focus mode.");e=e.toLowerCase();const i=this.getCapabilities().focusMode,r=this.getCapabilities().focusDistance;if(!i)throw Error("Not supported.");if(!i.includes(e))throw Error("Unsupported mode.");if(t>=0){if(!r)throw Error("Manual focus unsupported.");return tr.max&&(t=r.max),t=ce(t,r.min,r.step,r.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:e,focusDistance:t}]})}return await this._videoTrack.applyConstraints({advanced:[{focusMode:e}]})}async setFocus(e,t){if("string"==typeof e)return this._setFocus(e,t);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if(!e)return;const i=this.getCapabilities(),r=i.focusMode,n=i.focusDistance;if(!r)throw Error("Not supported.");if("string"!=typeof e.mode)throw Error("Invalid focus mode.");const s=e.mode.toLowerCase();if(!r.includes(s))throw Error("Unsupported focus mode.");if("manual"!==s)return this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s}]});if(!n)throw Error("Manual focus unsupported.");if(e.hasOwnProperty("distance")){let t=e.distance;return tn.max&&(t=n.max),t=ce(t,n.min,n.step,n.max),this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s,focusDistance:t}]})}if(!e.area)throw new Error("'distance' or 'area' should be specified in 'manual' mode.");{const t=e.area.centerPoint;let i=e.area.width,r=e.area.height;if(!i||!r){const e=this._video.videoWidth,t=this._video.videoHeight;i||(i=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px"),r||(r=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px")}this._focusParameters._focusArea={centerPoint:{x:t.x,y:t.y},width:i,height:r},await this._setLocalFocus(t,i,r)}}getFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings().focusMode;return e?"continuous"===e?{mode:e}:{mode:e,distance:this._videoTrack.getSettings().focusDistance}:null}getFocusSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings(),t=e.focusMode;return t?"manual"===t?this._focusParameters._focusArea?{mode:"manual",area:JSON.parse(JSON.stringify(this._focusParameters._focusArea))}:{mode:"manual",distance:e.focusDistance}:{mode:t}:null}async _setFocusAndGetContract(e,t){const i=e=>{if(!this._bOpen||!this._videoTrack||this.video.paused||e.focusTaskId!=this._focusParameters.curFocusTaskId){this._bOpen&&this._videoTrack&&!this.video.paused||(this._focusParameters.isDoingFocus=0);const t=new Error(`Focus task ${e.focusTaskId} canceled.`);throw t.name="DeprecatedTaskError",t}1===this._focusParameters.isDoingFocus&&Date.now()-e.timeStart>this._focusParameters.focusCancelableTime&&(this._focusParameters.isDoingFocus=-1)};let r;t=ce(t,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:"manual",focusDistance:t}]}),i(e),r=null==this._focusParameters.oldDistance?this._focusParameters.kTimeout*Math.max(Math.abs(1/this._focusParameters.fds.min-1/t),Math.abs(1/this._focusParameters.fds.max-1/t))+this._focusParameters.minTimeout:this._focusParameters.kTimeout*Math.abs(1/this._focusParameters.oldDistance-1/t)+this._focusParameters.minTimeout,this._focusParameters.oldDistance=t,await new Promise((e=>{setTimeout(e,r)})),i(e);let n=e.focusL-e.focusW/2,s=e.focusT-e.focusH/2,o=e.focusW,a=e.focusH;if(n>=this.video.videoWidth||s>=this.video.videoHeight)throw new Error("Invalid area.");n+o>this.video.videoWidth&&(o=this.video.videoWidth-n),s+a>this.video.videoHeight&&(a=this.video.videoHeight-s);const h=this._getImageData(this.video,this.video.videoWidth,this.video.videoHeight,{sx:n,sy:s,sWidth:o,sHeight:a,dWidth:o,dHeight:a},null,{pixelFormat:le.RGBA});if(!h)return this._setFocusAndGetContract(e,t);const l=h.data;let c=0;for(let e=0,t=l.length-8;eo&&oc)return await this._doFocusDetail(e,s,o,r,n,l,c)}else{let a=await this._setFocusAndGetContract(e,l);if(o>a)return await this._doFocusDetail(e,s,o,r,n,l,a);if(o==a)return await this._doFocusDetail(e,s,o,l,a);let c=await this._setFocusAndGetContract(e,h);if(c>o&&o{try{(null==t||tthis._focusParameters.fds.max)&&(i=this._focusParameters.fds.max),this._focusParameters.oldDistance=null;let r=ce(Math.sqrt(i*(t||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),n=ce(Math.sqrt((t||this._focusParameters.fds.step)*r),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=ce(Math.sqrt(r*i),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),o=await this._setFocusAndGetContract(e,s),a=await this._setFocusAndGetContract(e,n),h=await this._setFocusAndGetContract(e,r);if(a>h&&ho&&a>o){let t=await this._setFocusAndGetContract(e,i);const n=await this._doFocusDetail(e,r,h,i,t,s,o);return this._focusParameters.isDoingFocus=0,n}if(a==h&&hh){const t=await this._doFocusDetail(e,r,h,s,o);return this._focusParameters.isDoingFocus=0,t}return d(e,t,i)}catch(e){if("DeprecatedTaskError"!==e.name)throw e}};return d(u,r,n)}async enableTapToFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'enableTapToFocus()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error("Video is not playing.");if(!this._focusSupported)throw new Error("Tapping to focus unsupported.");if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))throw this._focusSupported=!1,this._tapFocusEnabled=!1,new Error("Tapping to focus unsupported.");this._tapFocusEnabled=!0}disableTapToFocus(){this._tapFocusEnabled=!1}isTapToFocusEnabled(){return this._tapFocusEnabled}_updateVideoContainerStyle(){if(!this._video)return;if(this._isSingleFrameModeEnabled())return;const e=this._getSoftwareScale(),t=this._videoContainer;if("contain"===this.videoFit&&e>1){const e=this._video.videoWidth,i=this._video.videoHeight,r=window.getComputedStyle(this._elContainer),n=parseFloat(r.width),s=parseFloat(r.height),o=e/i;if(n/sa?o/(i/e):s/(r/e));const c=l*(1-1/e)*(i/2-this._scaleCenter.x),u=l*(1-1/e)*(r/2-this._scaleCenter.y);this._video.style.transform=`translate(${c}px, ${u}px) scale(${e})`}this._updateVideoContainerStyle()}}getFrameSize(e,t,i,r){if(!e||!t)return null;let n,s,o,a,h=e,l=t;const c={regionLeft:0,regionTop:0,regionRight:h,regionBottom:l,regionMeasuredByPercentage:!1};i?(i.regionMeasuredByPercentage?(c.regionLeft=i.regionLeft*h/100,c.regionTop=i.regionTop*l/100,c.regionRight=i.regionRight*h/100,c.regionBottom=i.regionBottom*l/100):(c.regionLeft=i.regionLeft,c.regionTop=i.regionTop,c.regionRight=i.regionRight,c.regionBottom=i.regionBottom),n=Math.round(c.regionLeft),s=Math.round(c.regionTop),h=Math.round(c.regionRight-c.regionLeft),l=Math.round(c.regionBottom-c.regionTop)):(n=0,s=0,h=Math.round(h),l=Math.round(l));const u=Math.max(h,l);if(r&&r>0&&u>r){const e=r/u;h>l?(o=r,a=Math.round(l*e)):(o=Math.round(h*e),a=r)}else o=h,a=l;return o<=0||a<=0?null:{sx:n,sy:s,sWidth:h,sHeight:l,dWidth:o,dHeight:a}}getFrame(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrame()' is unavailable in singleFrameMode.");return this._getVideoData()}getImage(){return this.getFrame()}_drawImage(e,t,i,r,n,s,o){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(!i||!r)return null;if(t instanceof HTMLVideoElement&&4!==t.readyState||t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");let a;ue._onLog&&(a=Date.now(),ue._onLog("DCE: _drawImage(), START: "+a));let h=0,l=0,c=i,u=r,d=0,f=0,g=i,_=r;n&&(n.sx&&(h=Math.round(n.sx)),n.sy&&(l=Math.round(n.sy)),n.sWidth&&(c=Math.round(n.sWidth)),n.sHeight&&(u=Math.round(n.sHeight)),n.dx&&(d=Math.round(n.dx)),n.dy&&(f=Math.round(n.dy)),n.dWidth&&(g=Math.round(n.dWidth)),n.dHeight&&(_=Math.round(n.dHeight)));let p=le.RGBA;o&&o.pixelFormat&&(p=o.pixelFormat);const m=e;if(!o||!o.bUseWebGL){ue._onLog&&ue._onLog("DCE: _drawImage() in context2d."),m.ctx2d||(m.ctx2d=m.getContext("2d",{willReadFrequently:!0}));const e=m.ctx2d;if(!e)throw new Error("Unable to get 'CanvasRenderingContext2D' from canvas.");return(m.width{const t=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW);const i=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,i),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW),{positions:t,texCoords:i}},i=e=>{const t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),t},r=(e,t)=>{const i=e.createProgram();if(t.forEach((t=>e.attachShader(i,t))),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS)){const t=new Error(`An error occured linking the program: ${e.getProgramInfoLog(i)}.`);throw t.name="WebGLError",t}return e.useProgram(i),i},n=(e,t,i)=>{const r=e.createShader(t);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){const t=new Error(`An error occured compiling the shader: ${e.getShaderInfoLog(r)}.`);throw t.name="WebGLError",t}return r},s="\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n \n uniform mat3 u_matrix;\n uniform mat3 u_textureMatrix;\n \n varying vec2 v_texCoord;\n void main(void) {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1.0);\n v_texCoord = vec4((u_textureMatrix * vec3(a_texCoord, 1)).xy, 0, 1.0).xy;\n }\n ";let o="rgb";["rgba","rbga","grba","gbra","brga","bgra"].includes(p)&&(o=p.slice(0,3));const a=`\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_image;\n uniform float uColorFactor;\n \n void main() {\n vec4 sample = texture2D(u_image, v_texCoord);\n float grey = 0.21 * sample.r + 0.71 * sample.g + 0.07 * sample.b;\n gl_FragColor = vec4(sample.${o} * (1.0 - uColorFactor) + (grey * uColorFactor), sample.a);\n }\n `,h=r(e,[n(e,e.VERTEX_SHADER,s),n(e,e.FRAGMENT_SHADER,a)]);this._webGLProgramInfo={program:h,attribLocations:{vertexPosition:e.getAttribLocation(h,"a_position"),texPosition:e.getAttribLocation(h,"a_texCoord")},uniformLocations:{uSampler:e.getUniformLocation(h,"u_image"),uColorFactor:e.getUniformLocation(h,"uColorFactor"),uMatrix:e.getUniformLocation(h,"u_matrix"),uTextureMatrix:e.getUniformLocation(h,"u_textureMatrix")}},this._webGLBuffers=t(e),this._webGLTexture=i(e),this.shaderPixelFormat=p}const n=(e,t,i)=>{e.bindBuffer(e.ARRAY_BUFFER,t),e.enableVertexAttribArray(i),e.vertexAttribPointer(i,2,e.FLOAT,!1,0,0)},o=(e,t,i)=>{const r=e.RGBA,n=e.RGBA,s=e.UNSIGNED_BYTE;e.bindTexture(e.TEXTURE_2D,t),e.texImage2D(e.TEXTURE_2D,0,r,n,s,i)},v=(e,t,s,o)=>{e.clearColor(0,0,0,1),e.clearDepth(1),e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),n(e,s.positions,t.attribLocations.vertexPosition),n(e,s.texCoords,t.attribLocations.texPosition),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,o),e.uniform1i(t.uniformLocations.uSampler,0),e.uniform1f(t.uniformLocations.uColorFactor,[le.GREY,le.GREY32].includes(p)?1:0);let a,m,v=he.translate(he.identity(),-1,-1);v=he.scale(v,2,2),v=he.scale(v,1/e.canvas.width,1/e.canvas.height),a=he.translate(v,d,f),a=he.scale(a,g,_),e.uniformMatrix3fv(t.uniformLocations.uMatrix,!1,a),m=he.translate(he.identity(),h/i,l/r),m=he.scale(m,c/i,u/r),e.uniformMatrix3fv(t.uniformLocations.uTextureMatrix,!1,m),e.drawArrays(e.TRIANGLES,0,6)};let y;if(o(e,this._webGLTexture,t),v(e,this._webGLProgramInfo,this._webGLBuffers,this._webGLTexture),s){if(s.lengtht||r.sy>i||r.sx+r.sWidth>t||r.sy+r.sHeight>i)throw new Error("Invalid position.");if(e instanceof HTMLVideoElement&&4!==e.readyState||e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");let o;ue._onLog&&(o=Date.now(),ue._onLog("DCE: _getImageData(), START: "+o));const a=Math.round(r.sx),h=Math.round(r.sy),l=Math.round(r.sWidth),c=Math.round(r.sHeight),u=Math.round(r.dWidth),d=Math.round(r.dHeight);let f=le.RGBA;s&&s.pixelFormat&&(f=s.pixelFormat);let g,_,p,m=this._bWebGLSupported;s&&0==s.bUseWebGL&&(m=!1),m?(this._reusedWebGLCvs||(this._reusedWebGLCvs=document.createElement("canvas")),g=this._reusedWebGLCvs):(this._reusedCvs||(this._reusedCvs=document.createElement("canvas")),g=this._reusedCvs);try{if(m)if(ue._onLog&&ue._onLog("DCE: _getImageData() in WebGL."),n)if(f===le.GREY){if(p=new Uint8Array(u*d*4),_=this._drawImage(g,e,t,i,{sx:a,sy:h,sWidth:l,sHeight:c,dWidth:u,dHeight:d},p,{pixelFormat:f,bUseWebGL:m}),p=this._transformPixelFormat(p,_.pixelFormat,f),n){if(n.length=this.croppingRegions.length||this._croppingRegionIndex<0)throw new Error("The 'croppingRegionIndex' is out of bounds.");e=this.croppingRegions[this._croppingRegionIndex],this.bIncreaseRegionIndexAuto&&++this._croppingRegionIndex>=this.croppingRegions.length&&(this._croppingRegionIndex=0)}return e}_fetchingLoop(e){if(this.isDisposed&&this.disposed)return;if(!this._bOpen||!this.isFetchingLoopStarted())return void this.stopFetchingLoop();const t=()=>{ue._onLog&&ue._onLog("DCE: start fetching a frame into buffer: "+Date.now());const e=this.getCurrentRegion();let t=this._getVideoData(null,{region:e});if(!t)return void ue._onLog;for(;this._frameQueue&&this._frameQueue.length>=this.maxNumberOfFramesInBuffer;)this._frameQueue.shift();this._frameQueue.push(t);const i=this.mapCameraEvents.get("frameaddedtobuffer");for(let e of i)e&&setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this)}),0)},i=()=>{this.isDisposed&&this.disposed||(this._frameLoopTimeoutId2&&clearTimeout(this._frameLoopTimeoutId2),this.refreshInterval<=0||(this._frameLoopTimeoutId2=setTimeout((()=>{this.isDisposed&&this.disposed||(this._bOpen&&this.isFetchingLoopStarted()?(t(),i()):this.stopFetchingLoop())}),this.refreshInterval)))};e&&(this._frameQueue.length0&&i()):this.refreshInterval>0?(t(),i()):0===this.refreshInterval?t():this.refreshInterval),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameLoopTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._fetchingLoop(!0)}),this.loopInterval)}startFetchingLoop(){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(this._assertOpen(),this._isSingleFrameModeEnabled())throw Error("'startFetchingLoop()' is unavailable in singleFrameMode.");this.isFetchingLoopStarted()||(this._bFetchingLoopStarted=!0,this._recordedStates.fetchingLoopStart=!0,ue._onLog&&ue._onLog("DCE: start fetching loop: "+Date.now()),this._fetchingLoop(!0))}isFetchingLoopStarted(){return this._bFetchingLoopStarted}stopFetchingLoop(){this._bFetchingLoopStarted&&(ue._onLog&&ue._onLog("DCE: stop fetching loop: "+Date.now()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameQueue.length=0,this._bFetchingLoopStarted=!1,this._recordedStates.fetchingLoopStart=!1)}getFrameFromBuffer(e){return this._frameQueue&&this._frameQueue.length?e?ee.getId()>=0))}getSelectedDrawingItems(){return this._drawingLayersManager.getSelectedDrawingItems()}createDrawingStyle(e){return this._drawingLayersManager.createDrawingStyle(e)}getDrawingStyle(e){return this._drawingLayersManager.getDrawingStyle(e)}getDrawingStyles(){return this._drawingLayersManager.getDrawingStyles()}updateDrawingStyle(e,t){return this._drawingLayersManager.updateDrawingStyle(e,t)}clearDrawingLayers(){const e=this.getDrawingLayers();for(let t of e)this.deleteDrawingLayer(t.getId())}showTip(e,t,i,r,n=3e3,s=!0){this._assertOpen(),this._tipArgs.x=e,this._tipArgs.y=t,this._tipArgs.width=i,this._tipArgs.autoShowSuggestedTip=!!s,this._drawingLayerOfTip||(this._drawingLayerOfTip=this._createDrawingLayer(-1)),this._tipStyleId||(this._tipStyleId=this.createDrawingStyle({fillStyle:"#FFFFFF",paintMode:"fill",fontFamily:"Open Sans",fontSize:40})),this._drawingLayerOfTip.clearDrawingItems();const o=new ne(r||"",e,t,i,this._tipStyleId);o._fabricObject.paddingTop=15,o._fabricObject.calcTextHeight=function(){for(var e=0,t=0,i=this._textLines.length;t0&&(this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}_hideTip(){this._drawingLayerOfTip&&(this.deleteDrawingLayer(this._drawingLayerOfTip.getId()),this._drawingLayerOfTip=null,this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId))}hideTip(){this._hideTip(),this._tipArgs.x=null,this._tipArgs.y=null,this._tipArgs.width=null,this._tipArgs.autoShowSuggestedTip=null}updateTipMessage(e){if(!this._drawingLayerOfTip)throw new Error("The Tip is not showing.");this._drawingLayerOfTip.getDrawingItems()[0].setAttribute("text",e),this._drawingLayerOfTip.renderAll(),this._tipArgs.duration>0&&(this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId),this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}suggestTip(e,t){this._tipArgs.autoShowSuggestedTip&&(this._drawingLayerOfTip?this.updateTipMessage(t):void 0!==this._tipArgs.x&&this.showTip(this._tipArgs.x,this._tipArgs.y,this._tipArgs.width,t,this._tipArgs.duration)),this.onTipSuggested&&setTimeout((()=>{this.isDisposed&&this.disposed||this.onTipSuggested.apply(this,[e,t])}),0)}_createControler(){if(this._controler||(this._controler=new ae(this)),this._controler)return this._controler}_destroyControler(){this._controler=null}setOriginalImage(e,t,i){if(!e||!t||!i)throw new Error("Invalid arguments");this._originalImageData={imageData:e,width:t,height:i};let r=this._cvsOriginalImage;r||(r=document.createElement("canvas"),r.style.position="absolute",r.style.width="100%",r.style.height="100%",r.style.left="0",r.style.top="0",r.style.backgroundColor="white",r.style.objectFit="contain",this._cvsOriginalImage=r),r.width===t&&r.height===i||(r.width=t,r.height=i);const n=r.getContext("2d");n.clearRect(0,0,r.width,r.height),e instanceof Uint8Array||e instanceof Uint8ClampedArray?(e instanceof Uint8Array&&(e=new Uint8ClampedArray(e.buffer)),n.putImageData(new ImageData(e,t,i),0,0)):e instanceof HTMLCanvasElement&&n.drawImage(e,0,0),document.body.contains(r)&&""===r.style.display&&this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"})}getOriginalImage(){return this._originalImageData?Object.assign({},this._originalImageData):null}async deleteOriginalImage(){await this.hideOriginalImage(),this._cvsOriginalImage&&(this._cvsOriginalImage.remove(),this._cvsOriginalImage=null),this._originalImageData=null}_showOriginalImageCvs(){this._cvsOriginalImage&&"none"==this._cvsOriginalImage.style.display&&(this._cvsOriginalImage.style.display="")}_hideOriginalImageCvs(){this._cvsOriginalImage&&(this._cvsOriginalImage.style.display="none")}showOriginalImage(){if(!this._originalImageData)throw new Error("No original image is set.");const e=this._cvsOriginalImage;if(""===e.style.display&&document.body.contains(e))return;const{width:t,height:i}=this._originalImageData;if(this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"}),this._bOpen&&(this._video&&!this._video.paused&&this._video.pause(),this._bFetchingLoopStarted&&(this.stopFetchingLoop(),this._recordedStates.fetchingLoopStart=!0),this.ifShowScanRegionMask&&this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this.ifShowScanRegionLaser&&this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none"),this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none"),this._selCam&&(this._selCam.parentElement.style.display="none")),!document.body.contains(e))if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._showOriginalImageCvs()}async _hideOriginalImage(e){this._originalImageData&&this._cvsOriginalImage&&"none"!==this._cvsOriginalImage.style.display&&(this._updateDrawingLayersSize(),this._bOpen&&e&&(this._video&&this._recordedStates.videoPlaying&&await this.play(null,null,null,{notTriggerSingleFrameClick:!0}),this._recordedStates.fetchingLoopStart&&!this._isSingleFrameModeEnabled()&&this.startFetchingLoop(),this.ifShowScanRegionMask&&this._cvsScanRegion&&this._recordedStates.maskShow&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this._divScanLight&&this._recordedStates.laserShow&&this.showScanRegionLaser(),this._cvsViewDecorator&&this._recordedStates.decoratorShow&&this.showViewDecorator(),this._scanRegionOverlayContainer&&this._recordedStates.overlayShow&&this.showScanRegionOverlays()),this._selCam&&(this._selCam.parentElement.style.display=""),this._hideOriginalImageCvs())}async hideOriginalImage(){return this._hideOriginalImage(!0)}transformCoord(e){if(!this.isOpen())throw new Error("Unavailable when the camera is not open.");if(this._isSingleFrameModeEnabled()&&!this._cvsSingleFrameMode)throw new Error("No image is selected. ");const t=this._elContainer.getBoundingClientRect();let i,r,n,s,o,a=t.left,h=t.top,l=a+window.scrollX,c=h+window.scrollY;this._isSingleFrameModeEnabled()?(i=this._cvsSingleFrameMode.width,r=this._cvsSingleFrameMode.height,n=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).width),s=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).height),o="contain"):(i=this.video.videoWidth,r=this.video.videoHeight,n=parseFloat(window.getComputedStyle(this._elContainer).width),s=parseFloat(window.getComputedStyle(this._elContainer).height),o=this.videoFit);const u=n/s,d=i/r;let f,g,_,p,m=1;if("contain"===o)u({x:t.x-e.left-e.width/2,y:t.y-e.top-e.height/2}))),e.addWithUpdate()}else i.points=t;const r=i.points.length-1;return i.controls=i.points.reduce((function(e,t,i){return e["p"+i]=new j.Control({positionHandler:Q,actionHandler:te(i>0?i-1:r,ee),actionName:"modifyPolygon",pointIndex:i}),e}),{}),i._setPositionDimensions({}),!0}}_extendGet(e){if("startPoint"===e||"endPoint"===e){const t=[],i=this._fabricObject;if(i.selectable&&!i.group)for(let e in i.oCoords)t.push({x:i.oCoords[e].x,y:i.oCoords[e].y});else for(let e of i.points){let r=e.x-i.pathOffset.x,n=e.y-i.pathOffset.y;const s=j.util.transformPoint({x:r,y:n},i.calcTransformMatrix());t.push({x:s.x,y:s.y})}return"startPoint"===e?t[0]:t[1]}}},DT_Group:class extends q{constructor(e){super(new j.Group(e.map((e=>e._getFabricObject())))),this._fabricObject.on("selected",(()=>{this.styleSelector="selected";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("selected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)})),this._fabricObject.on("deselected",(()=>{this.styleSelector="default";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("deselected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)}))}getChildItems(){return this._fabricObject._objects.map((e=>e.getDrawingItem()))}addChildItem(e){if(!e||!e.isDrawingItem)throw TypeError("Illegal drawing item.");this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"add"):this._fabricObject.addWithUpdate(e._getFabricObject())}removeChildItem(e){e&&e.isDrawingItem&&(this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"remove"):this._fabricObject.removeWithUpdate(e._getFabricObject()))}}};function fe(e,t,i){return(i.x-e.x)*(t.y-e.y)==(t.x-e.x)*(i.y-e.y)&&Math.min(e.x,t.x)<=i.x&&i.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=i.y&&i.y<=Math.max(e.y,t.y)}function ge(e){return Math.abs(e)<1e-6?0:e<0?-1:1}function _e(e,t,i,r){let n=e[0]*(i[1]-t[1])+t[0]*(e[1]-i[1])+i[0]*(t[1]-e[1]),s=e[0]*(r[1]-t[1])+t[0]*(e[1]-r[1])+r[0]*(t[1]-e[1]);return!((n^s)>=0&&0!==n&&0!==s)&&(n=i[0]*(e[1]-r[1])+r[0]*(i[1]-e[1])+e[0]*(r[1]-i[1]),s=i[0]*(t[1]-r[1])+r[0]*(i[1]-t[1])+t[0]*(r[1]-i[1]),!((n^s)>=0&&0!==n&&0!==s))}class pe extends F{constructor(){super(),this._barcodeFillStyle="rgba(254,180,32,0.3)",this._barcodeStrokeStyle="rgba(254,180,32,0.9)",this._barcodeLineWidth=1,this._barcodeFillStyleBeforeVerification="rgba(248,252,0,0.2)",this._barcodeStrokeStyleBeforeVerification="transparent",this._barcodeLineWidthBeforeVerification=2,this.bFilterRegionInJs=!0,this._onPlayed=null}static get version(){return this._version+`(DCE ${ue.getVersion()})`}static _fireHTTPSWarnning(){pe.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{pe.onWarning&&pe.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}static async testCameraAccess(){return ue.testCameraAccess()}_fireResolutionWarning(){if(!this.singleFrameMode&&this.onWarning&&this.dce.isOpen()){const e=this.dce.getConstraints();e&&e.width<1280&&e.height<720&&setTimeout((()=>{this.onWarning&&this.onWarning({id:3,message:"Camera resolution too low, please use a higher resolution (720P or better)."})}),0)}}getUIElement(){return this.dce.getUIElement()}async setUIElement(e){await this.dce.setUIElement(e)}get singleFrameMode(){return this.dce.singleFrameMode}set singleFrameMode(e){if("boolean"!=typeof e&&!["image","camera"].includes(e))throw new Error("Invalid value.");this.dce.singleFrameMode=e,e&&(this.dce.ifShowScanRegionLaser=!1,(async()=>{let e=await this.getScanSettings();e.oneDTrustFrameCount=1,await this.updateScanSettings(e)})())}get onUnduplicatedRead(){return this.onUniqueRead}set onUnduplicatedRead(e){this.onUniqueRead=e}get video(){return this.dce&&this.dce.video}set videoSrc(e){this.dce&&(this.dce.videoSrc=e)}get videoSrc(){return this.dce&&this.dce.videoSrc}set onTipSuggested(e){this.dce&&(this.dce.onTipSuggested=e)}get onTipSuggested(){return this.dce&&this.dce.onTipSuggested}_assertOpen(){if(!this.dce.isOpen())throw Error("The scanner is not open.")}set barcodeFillStyle(e){this._barcodeFillStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{fillStyle:e})}get barcodeFillStyle(){return this._barcodeFillStyle}set barcodeStrokeStyle(e){this._barcodeStrokeStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{strokeStyle:e})}get barcodeStrokeStyle(){return this._barcodeStrokeStyle}set barcodeLineWidth(e){this._barcodeLineWidth=e,this.dce&&this.dce.updateDrawingStyle(3,{lineWidth:e})}get barcodeLineWidth(){return this._barcodeLineWidth}set barcodeFillStyleBeforeVerification(e){this._barcodeFillStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{fillStyle:e})}get barcodeFillStyleBeforeVerification(){return this._barcodeFillStyleBeforeVerification}set barcodeStrokeStyleBeforeVerification(e){this._barcodeStrokeStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{strokeStyle:e})}get barcodeStrokeStyleBeforeVerification(){return this._barcodeStrokeStyleBeforeVerification}set barcodeLineWidthBeforeVerification(e){this._barcodeLineWidthBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{lineWidth:e})}get barcodeLineWidthBeforeVerification(){return this._barcodeLineWidthBeforeVerification}set regionMaskFillStyle(e){this.dce.setScanRegionMaskStyle({fillStyle:e})}get regionMaskFillStyle(){return this.dce.regionMaskFillStyle}set regionMaskStrokeStyle(e){this.dce.setScanRegionMaskStyle({strokeStyle:e})}get regionMaskStrokeStyle(){return this.dce.regionMaskStrokeStyle}set regionMaskLineWidth(e){this.dce.setScanRegionMaskStyle({lineWidth:e})}get regionMaskLineWidth(){return this.dce.regionMaskLineWidth}set region(e){this._region=e,this.dce&&(e?e instanceof Array||this.dce.setScanRegion(e):this.dce.setScanRegion(null)),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e,this.dce.framePixelFormat=e?"rgba":"grey"}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}async createDCEInstance(){this.dce||(F._onLog&&F._onLog("createDCEInstance()"),ue.defaultUIElementURL=null,this.dce=await ue.createInstance(),this.dce.refreshInterval=200,this.dce.framePixelFormat="grey",this.dce.maxCvsSideLength=this.maxCvsSideLength,this._drawingItemNamespace=de,["iPhone","iPad","Android","HarmonyOS"].includes(F.browserInfo.OS)||this.dce.setResolution(1920,1080),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"}),this.barcodeLineWidth=this._barcodeLineWidth,this.dce.on("cameraChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("resolutionChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("cameraClose",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1})),this.dce.on("singleFrameAcquired",(async e=>{if(!e)return;if(!e.data)return;let t;this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{data:i,sx:r,sy:n,width:s,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=e,d={timeStamp:l};if("grey"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_GrayScaled,0,d);else if("rgba"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ARGB_8888,0,d)}if(await this.clearMapDecodeRecord(),F.recalculateResultLocation(t,r,n,c,u,s,o),this._drawResults(t),this.onFrameRead&&this.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onFrameRead(e)}if(this.onUniqueRead&&this.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))})))}set maxCvsSideLength(e){this._maxCvsSideLength=e,this.dce.maxCvsSideLength=e}get maxCvsSideLength(){return this._maxCvsSideLength}static async createInstance(e){const t=new pe;t._instanceID=await pe.createInstanceInWorker(!0),await t.createDCEInstance(),"string"==typeof e&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return await t.dce.setUIElement(pe.defaultUIElementURL),t.singleFrameMode&&console.warn("The `navigator.mediaDevices.getUserMedia` is unavailable. automatically change to `singleFrameMode`."),pe._fireHTTPSWarnning(),t.singleFrameMode||await t.updateRuntimeSettings("single"),t}async decodeCurrentFrame(e){this._assertOpen();let t=null;e&&e.region&&(t=e.region);const i=this.dce._getVideoData(null,{region:t});return this._decode_DCEFrame(i)}async updateRuntimeSettings(e){let t;if("string"==typeof e)if("speed"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=0,t.localizationModes=[2,0,0,0,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9}else if("balance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=512,t.deblurLevel=3,t.localizationModes=[2,16,0,0,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else if("coverage"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=512,t.deblurLevel=5,t.scaleDownThreshold=1e5,t.localizationModes=[2,16,4,8,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else if("single"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region)}else if("dense"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=0,t.deblurLevel=7,t.scaleDownThreshold=1e5,t.localizationModes=[2,8,0,0,0,0,0,0],t.minResultConfidence=0,t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else if("distance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=0,t.scaleDownThreshold=1e5,t.localizationModes=[2,8,0,0,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else t=JSON.parse(e);else{if("object"!=typeof e)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(t=JSON.parse(JSON.stringify(e)),t.region instanceof Array){let i=e.region;[i.regionLeft,i.regionTop,i.regionLeft,i.regionBottom,i.regionMeasuredByPercentage].some((e=>void 0!==e))&&(t.region={regionLeft:i.regionLeft||0,regionTop:i.regionTop||0,regionRight:i.regionRight||0,regionBottom:i.regionBottom||0,regionMeasuredByPercentage:i.regionMeasuredByPercentage||0})}}if(!F._bUseFullFeature){if(0!=(t.barcodeFormatIds&~(y.BF_ONED|y.BF_QR_CODE|y.BF_PDF417|y.BF_DATAMATRIX))||0!=t.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=t.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}{let e=t.region;if(this.bFilterRegionInJs?this.userDefinedRegion=JSON.parse(JSON.stringify(e)):this.userDefinedRegion=null,e instanceof Array)if(e.length){for(let t=0;t{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.updateReturn)}catch(e){i(e)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),F._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(t)}})})),"string"==typeof e&&["speed","balance","coverage","dense","distance"].includes(e)&&(await this.setModeArgument("BinarizationModes",0,"EnableFillBinaryVacancy","1"),await this.setModeArgument("BinarizationModes",0,"BlockSizeX","0"),await this.setModeArgument("BinarizationModes",0,"BlockSizeY","0"))}_bindUI(){if(!this.getUIElement())throw new Error("Need to define `UIElement` before opening.");if(this.dce._bindUI(),!this.dce.video)throw this._unbindUI(),Error("Can not find the video container element with class 'dce-video-container'")}_unbindUI(){this.dce._unbindUI()}set onPlayed(e){this.dce.off("played",this._onPlayed),this._onPlayed=e,this.dce.on("played",this._onPlayed)}get onPlayed(){return this._onPlayed}async getAllCameras(){return this.dce.getAllCameras()}async getCurrentCamera(){return this.dce.getSelectedCamera()}async setCurrentCamera(e){const t=await this.dce.selectCamera(e);return this._fireResolutionWarning(),t}getResolution(){return this.dce.getResolution()}async setResolution(e,t){const i=await this.dce.setResolution(e,t);return this._fireResolutionWarning(),i}getVideoSettings(){return this.dce.getVideoSettings()}updateVideoSettings(e){return this.dce.updateVideoSettings(e)}isOpen(){return this.dce&&this.dce.isOpen()}setVideoFit(e){return this.dce&&this.dce.setVideoFit(e)}getVideoFit(){return this.dce&&this.dce.getVideoFit()}set ifShowScanRegionMask(e){this.dce&&(this.dce.ifShowScanRegionMask=e)}get ifShowScanRegionMask(){return this.dce&&this.dce.ifShowScanRegionMask}set ifSaveLastUsedCamera(e){this.dce&&(this.dce.ifSaveLastUsedCamera=e)}get ifSaveLastUsedCamera(){return this.dce&&this.dce.ifSaveLastUsedCamera}set ifSkipCameraInspection(e){this.dce&&(this.dce.ifSkipCameraInspection=e)}get ifSkipCameraInspection(){return this.dce&&this.dce.ifSkipCameraInspection}stop(){this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.dce.stop(),this.dce.ifShowScanRegionLaser=!1,this.dce.hideViewDecorator(),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}pause(){this.dce.pause()}async play(e,t,i){this.dce.ifShowScanRegionLaser=!0;const r=await this.dce.play(e,t,i);return this._fireResolutionWarning(),r}pauseScan(e){this._assertOpen(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce.ifShowScanRegionLaser=!1,this.dce.stopFetchingLoop()}resumeScan(){this._assertOpen(),this._bPauseScan=!1,this.dce.ifShowScanRegionLaser=!0}getCapabilities(){return this.dce.getCapabilities()}getCameraSettings(){return this.dce.getCameraSettings()}getConstraints(){return this.dce.getConstraints()}async applyConstraints(e){return this.dce.applyConstraints(e)}async turnOnTorch(){return this.dce.turnOnTorch()}async turnOffTorch(){return this.dce.turnOffTorch()}async setColorTemperature(e){return this.dce.setColorTemperature(e)}getColorTemperature(){return this.dce.getColorTemperature()}async setExposureCompensation(e){return this.dce.setExposureCompensation(e)}getExposureCompensation(){return this.dce.getExposureCompensation()}async setZoom(e){return this.dce.setZoom(e)}getZoomSettings(){return this.dce.getZoomSettings()}resetZoom(){return this.dce.resetZoom()}async setFrameRate(e){return this.dce.setFrameRate(e)}getFrameRate(){return this.dce.getFrameRate()}async setFocus(e,t){return this.dce.setFocus(e,t)}getFocus(){return this.dce.getFocus()}getFocusSettings(){return this.dce.getFocusSettings()}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this.dce.stopFetchingLoop(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(!this.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce.video||this.dce.video.paused||this._bPauseScan)return F._onLog&&F._onLog("Video or scan is paused. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));F._onLog&&F._onLog("======= once read ======="),F._onLog&&(this._timeStartDecode=Date.now());const e=this._getVideoFrame();if(!e)return F._onLog&&F._onLog("Get invalid frame."),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{e._bUseWebGL||"grey"!==e.pixelFormat||(this.dce.framePixelFormat="rgba");let t=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{data:i,sx:r,sy:n,width:s,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=e,d={timeStamp:l};if("grey"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_GrayScaled,0,d);else if("rgba"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ARGB_8888,0,d)}if(F.recalculateResultLocation(t,r,n,c,u,s,o),0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration)),this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan&&(this.autoZoom||this.autoFocus||this.autoSuggestTip))if(t.length)this.autoZoomInFrameArray.length=0,this.autoZoomOutFrameCount=0,this.frameArrayInIdealZoom.length=0,this.suggestTipFrameArray.length=0,this.autoZoom&&this.autoFocus&&(this.nextActionInIdealZoom="focus"),this.autoFocusFrameArray.length=0,this.noIntermediateResultsCount=0;else{const e=async()=>new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!1}})})),t=await e(),i=(e,t,i,r,n,s,o)=>{let a=s/r,h=o/n;e.x1=e.x1/a+t,e.x2=e.x2/a+t,e.x3=e.x3/a+t,e.x4=e.x4/a+t,e.y1=e.y1/h+i,e.y2=e.y2/h+i,e.y3=e.y3/h+i,e.y4=e.y4/h+i},a=e=>{if(!e)return null;const t={};let a,h,l,d,f;{const e=this.video.videoWidth*(1-this.autoZoomDetectionArea)/2,t=this.video.videoWidth*(1+this.autoZoomDetectionArea)/2,i=t,r=e,n=this.video.videoHeight*(1-this.autoZoomDetectionArea)/2,s=n,o=this.video.videoHeight*(1+this.autoZoomDetectionArea)/2;f={x1:e,x2:t,x3:i,x4:r,y1:n,y2:s,y3:o,y4:o}}const g=(e,t)=>{const i=(e,t)=>{if(!e&&!t)throw new Error("Invalid arguments.");return function(e,t,i){let r=!1;const n=e.length;if(n<=2)return!1;for(let s=0;s0!=ge(a.y-i)>0&&ge(t-(i-o.y)*(o.x-a.x)/(o.y-a.y)-o.x)<0&&(r=!r)}return r}([{x:t.x1,y:t.y1},{x:t.x2,y:t.y2},{x:t.x3,y:t.y3},{x:t.x4,y:t.y4}],e.x,e.y)},r=(e,t)=>!!(_e([e[0],e[1]],[e[2],e[3]],[t.x1,t.y1],[t.x2,t.y2])||_e([e[0],e[1]],[e[2],e[3]],[t.x2,t.y2],[t.x3,t.y3])||_e([e[0],e[1]],[e[2],e[3]],[t.x3,t.y3],[t.x4,t.y4])||_e([e[0],e[1]],[e[2],e[3]],[t.x4,t.y4],[t.x1,t.y1]));return!!(i({x:e.x1,y:e.y1},t)||i({x:e.x2,y:e.y2},t)||i({x:e.x3,y:e.y3},t)||i({x:e.x4,y:e.y4},t))||(!!(i({x:t.x1,y:t.y1},e)||i({x:t.x2,y:t.y2},e)||i({x:t.x3,y:t.y3},e)||i({x:t.x4,y:t.y4},e))||!!(r([t.x1,t.y1,t.x2,t.y2],e)||r([t.x2,t.y2,t.x3,t.y3],e)||r([t.x3,t.y3,t.x4,t.y4],e)||r([t.x4,t.y4,t.x1,t.y1],e)))},_=[];for(let t of e){if(t.resultType!==S.IRT_TYPED_BARCODE_ZONE)continue;const e=t.scaleDownRatio;for(let a of t.results){if(!a)continue;const t={x1:a.x1=a.x1*e,x2:a.x2=a.x2*e,x3:a.x3=a.x3*e,x4:a.x4=a.x4*e,y1:a.y1=a.y1*e,y2:a.y2=a.y2*e,y3:a.y4=a.y3*e,y4:a.y4=a.y4*e};i(t,r,n,c,u,s,o),g(f,t)&&_.push(a)}}const p=(e=>{if(!e||!e.length)return null;const t=e=>{const t=(e.x1+e.x2+e.x3+e.x4)/4,i=(e.y1+e.y2+e.y3+e.y4)/4;return(t-s/2)*(t-s/2)+(i-o/2)*(i-o/2)};let i,r=e.filter((e=>e.barcodeFormat==y.BF_QR_CODE||e.barcodeFormat==y.BF_DATAMATRIX));if(r.length||(r=e.filter((e=>e.barcodeFormat==y.BF_ONED)),r.length||(r=e)),!r.length)return null;i=r[0];let n=t(i);if(1!=r.length)for(let e=1;e1.1*i.confidence?(i=r[e],n=s):r[e].confidence>.9*i.confidence&&s!0===e)).length>=this.suggestTipFrameLimit[1]){this.suggestTipFrameArray.length=0;const e=h.x3-h.x1,t=h.y3-h.y1;h.result.moduleSizet?e>s*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):e>.6*s&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."):e<=t&&(t>o*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):t>.6*o&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."))}if(this.autoZoom){const e=this.autoZoomIdealArea[1];let t=(1-this.autoZoomTargetBorder)/2;const a=h.x1/c,l=(c-h.x3)/c,d=h.y1/u,f=(u-h.y3)/u;if(a>e&&l>e&&d>e&&f>e&&h.result.moduleSize{}))),this.autoZoomInFrameArray.filter((e=>!0===e)).length>=this.autoZoomInFrameLimit[1]){this.autoZoomInFrameArray.length=0;const e=[(.5-t)/(.5-a),(.5-t)/(.5-l),(.5-t)/(.5-d),(.5-t)/(.5-f)].filter((e=>e>0)),i=Math.min(...e,this.autoZoomInIdealModuleSize/h.result.moduleSize),r=this.dce.getZoomSettings().factor;let n=Math.max(Math.pow(r*i,1/this.autoZoomInMaxTimes),this.autoZoomInMinStep);n=Math.min(n,i);const s=r*n;await this.setZoom({factor:s}),this.dce.clearFrameBuffer()}}else if(this.autoZoomInFrameArray.length=0,this.frameArrayInIdealZoom.push(!0),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.frameArrayInIdealZoom.filter((e=>!0===e)).length>=this.frameLimitInIdealZoom[1])if(this.frameArrayInIdealZoom.length=0,"focus"===this.nextActionInIdealZoom&&this.autoFocus){i(h,r,n,c,u,s,o);try{await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer(),this.nextActionInIdealZoom="zoomOut"}else{if("zoomOut"!==this.nextActionInIdealZoom&&this.autoFocus)throw new Error("Invalid action.");if(this.enableZoomOutInIdealZoom){t=this.autoZoomIdealArea[1]+this.autoZoomOutStepRate_2;const e=[(.5-t)/(.5-a),(.5-t)/(.5-l),(.5-t)/(.5-d),(.5-t)/(.5-f)].filter((e=>e>0));let i=Math.min(...e)*this.dce.getZoomSettings().factor;await this.setZoom({factor:i}),this.dce.clearFrameBuffer(),this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}}}else if(this.autoFocus&&(this.autoFocusFrameArray.push(!0),this.autoFocusFrameArray.splice(0,this.autoFocusFrameArray.length-this.autoFocusFrameLimit[0]),this.autoFocusFrameArray.filter((e=>!0===e)).length>=this.autoFocusFrameLimit[1])){this.autoFocusFrameArray.length=0;try{i(h,r,n,c,u,s,o),await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer()}}else if(this.noIntermediateResultsCount++,this.suggestTipFrameArray.push(!1),this.autoZoom){if(this.autoZoomInFrameArray.push(!1),this.autoZoomInFrameArray.splice(0,this.autoZoomInFrameArray.length-this.autoZoomInFrameLimit[0]),this.autoZoomOutFrameCount++,this.frameArrayInIdealZoom.push(!1),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.autoZoomOutFrameCount>=this.autoZoomOutFrameLimit){this.autoZoomOutFrameCount=0;const e=this.getZoomSettings().factor;if(e>this.autoZoomOutMinValue){const t=Math.max((e-1)*this.autoZoomOutStepRate,this.autoZoomOutMinStep),i=Math.max(e-t,this.autoZoomOutMinValue);await this.setZoom({factor:i}),this.dce.clearFrameBuffer()}}this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}else this.autoFocus&&(this.autoFocusFrameArray.length=0,this.setFocus({mode:"continuous"}).catch((e=>{})))}return t})().then((e=>{if(F._onLog&&F._onLog(e),this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost,i=this._indexCurrentDecodingFrame;const r=()=>{let r=0;if(this.region instanceof Array){let n=0,s=0;n=i+1>=this.region.length?0:i+1,s=n+1>=this.region.length?0:n+1,r=e[n]&&e[n].length&&t[s]&&t[s].length?Math.min(...e[n])-Math.max(...t[s]):0}else if(t&&t.length){let i=Math.min(...e),n=Math.max(...t);i&&n&&(r=i-n)}else r=0;return r>0?r:0};(()=>{if(this.region instanceof Array){for(e[i]&&e[i]instanceof Array||(e[i]=[]);e[i].length>=5;)e[i].shift();e[i].push(this._lastInnerDecodeDuration)}else{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)}})(),this._intervalGetVideoFrame=r()+this.intervalTime,F._onLog&&F._onLog("Next fetching frame loop interval: "+this._intervalGetVideoFrame)}if(this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onFrameRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onFrameRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){F._onLog&&F._onLog("Get frame in parallel.");let t=this.dce.isFetchingLoopStarted();if(this.dce.loopInterval=this._intervalGetVideoFrame,t||this.dce.startFetchingLoop(),!this.dce.numberOfFramesInBuffer)return this.dce.loopInterval=0,null;e=this.dce.getFrameFromBuffer();const i=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};i(e)}else F._onLog&&F._onLog("Get frame in serial."),this.dce.stopFetchingLoop(),e=this.dce.getFrame();return e}async open(){this._bindUI();const e=await this.dce.open();return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async openVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open();return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}close(){this._drawResults(null),this.dce.close(),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}async show(){this._bindUI();const e=await this.dce.open(!0);return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async showVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open(!0);return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}hide(){this.dce.close(!0),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}showTip(e,t,i,r,n=3e3,s=!0){this.dce&&this.dce.showTip(e,t,i,r,n,s)}hideTip(){this.dce&&this.dce.hideTip()}updateTipMessage(e){this.dce&&this.dce.updateTipMessage(e)}async enableTapToFocus(){this.dce&&this.dce.enableTapToFocus()}disableTapToFocus(){this.dce&&this.dce.disableTapToFocus()}isTapToFocusEnabled(){return this.dce.isTapToFocusEnabled()}convertToPageCoordinates(e){return this.dce.convertToPageCoordinates(e)}convertToClientCoordinates(e){return this.dce.convertToClientCoordinates(e)}destroyContext(){this.close(),this.dce&&this.dce.dispose(!1),this.bDestroyed||super.destroyContext()}}var me,ve,ye,Se,be,we,Ce,xe,Te,Ie,Ee,Oe,Ae,Re,De,Me,Le,Fe,Pe,ke,Be,Ne,je,Ve,Ue,Ge;!function(e){e[e.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",e[e.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",e[e.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",e[e.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",e[e.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",e[e.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",e[e.BICM_SKIP=0]="BICM_SKIP",e[e.BICM_REV=2147483648]="BICM_REV"}(me||(me={})),function(e){e[e.BCM_AUTO=1]="BCM_AUTO",e[e.BCM_GENERAL=2]="BCM_GENERAL",e[e.BCM_SKIP=0]="BCM_SKIP",e[e.BCM_REV=2147483648]="BCM_REV"}(ve||(ve={})),function(e){e[e.BF2_NULL=0]="BF2_NULL",e[e.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",e[e.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",e[e.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",e[e.BF2_POSTNET=2097152]="BF2_POSTNET",e[e.BF2_PLANET=4194304]="BF2_PLANET",e[e.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",e[e.BF2_RM4SCC=16777216]="BF2_RM4SCC",e[e.BF2_DOTCODE=2]="BF2_DOTCODE",e[e.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",e[e.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",e[e.BF2_PHARMACODE=12]="BF2_PHARMACODE",e[e.BF2_ALL=-1]="BF2_ALL"}(ye||(ye={})),function(e){e[e.BM_AUTO=1]="BM_AUTO",e[e.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",e[e.BM_SKIP=0]="BM_SKIP",e[e.BM_THRESHOLD=4]="BM_THRESHOLD",e[e.BM_REV=2147483648]="BM_REV"}(Se||(Se={})),function(e){e[e.ECCM_CONTRAST=1]="ECCM_CONTRAST"}(be||(be={})),function(e){e[e.CFM_GENERAL=1]="CFM_GENERAL"}(we||(we={})),function(e){e[e.CCM_AUTO=1]="CCM_AUTO",e[e.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",e[e.CCM_SKIP=0]="CCM_SKIP",e[e.CCM_REV=2147483648]="CCM_REV"}(Ce||(Ce={})),function(e){e[e.CICM_GENERAL=1]="CICM_GENERAL",e[e.CICM_SKIP=0]="CICM_SKIP",e[e.CICM_REV=2147483648]="CICM_REV"}(xe||(xe={})),function(e){e[e.CM_IGNORE=1]="CM_IGNORE",e[e.CM_OVERWRITE=2]="CM_OVERWRITE"}(Te||(Te={})),function(e){e[e.DM_SKIP=0]="DM_SKIP",e[e.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",e[e.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",e[e.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",e[e.DM_SMOOTHING=8]="DM_SMOOTHING",e[e.DM_MORPHING=16]="DM_MORPHING",e[e.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",e[e.DM_SHARPENING=64]="DM_SHARPENING",e[e.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",e[e.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING"}(Ie||(Ie={})),function(e){e[e.DRM_AUTO=1]="DRM_AUTO",e[e.DRM_GENERAL=2]="DRM_GENERAL",e[e.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",e[e.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",e[e.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",e[e.DRM_SKIP=0]="DRM_SKIP",e[e.DRM_REV=2147483648]="DRM_REV"}(Ee||(Ee={})),function(e){e[e.DPMCRM_AUTO=1]="DPMCRM_AUTO",e[e.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",e[e.DPMCRM_SKIP=0]="DPMCRM_SKIP",e[e.DPMCRM_REV=2147483648]="DPMCRM_REV"}(Oe||(Oe={})),function(e){e[e.GTM_INVERTED=1]="GTM_INVERTED",e[e.GTM_ORIGINAL=2]="GTM_ORIGINAL",e[e.GTM_SKIP=0]="GTM_SKIP",e[e.GTM_REV=2147483648]="GTM_REV"}(Ae||(Ae={})),function(e){e[e.IPM_AUTO=1]="IPM_AUTO",e[e.IPM_GENERAL=2]="IPM_GENERAL",e[e.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",e[e.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",e[e.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",e[e.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",e[e.IPM_SKIP=0]="IPM_SKIP",e[e.IPM_REV=2147483648]="IPM_REV"}(Re||(Re={})),function(e){e[e.IRSM_MEMORY=1]="IRSM_MEMORY",e[e.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",e[e.IRSM_BOTH=4]="IRSM_BOTH"}(De||(De={})),function(e){e[e.LM_SKIP=0]="LM_SKIP",e[e.LM_AUTO=1]="LM_AUTO",e[e.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",e[e.LM_LINES=8]="LM_LINES",e[e.LM_STATISTICS=4]="LM_STATISTICS",e[e.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",e[e.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",e[e.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",e[e.LM_CENTRE=128]="LM_CENTRE",e[e.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",e[e.LM_REV=2147483648]="LM_REV"}(Me||(Me={})),function(e){e[e.PDFRM_RASTER=1]="PDFRM_RASTER",e[e.PDFRM_AUTO=2]="PDFRM_AUTO",e[e.PDFRM_VECTOR=4]="PDFRM_VECTOR",e[e.PDFRM_REV=2147483648]="PDFRM_REV"}(Le||(Le={})),function(e){e[e.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",e[e.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",e[e.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",e[e.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}(Fe||(Fe={})),function(e){e[e.RPM_AUTO=1]="RPM_AUTO",e[e.RPM_GENERAL=2]="RPM_GENERAL",e[e.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",e[e.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",e[e.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",e[e.RPM_SKIP=0]="RPM_SKIP",e[e.RPM_REV=2147483648]="RPM_REV"}(Pe||(Pe={})),function(e){e[e.RCT_PIXEL=1]="RCT_PIXEL",e[e.RCT_PERCENTAGE=2]="RCT_PERCENTAGE"}(ke||(ke={})),function(e){e[e.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",e[e.RT_RAW_TEXT=1]="RT_RAW_TEXT",e[e.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",e[e.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT"}(Be||(Be={})),function(e){e[e.SUM_AUTO=1]="SUM_AUTO",e[e.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",e[e.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",e[e.SUM_SKIP=0]="SUM_SKIP",e[e.SUM_REV=2147483648]="SUM_REV"}(Ne||(Ne={})),function(e){e[e.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",e[e.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",e[e.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",e[e.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",e[e.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",e[e.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED"}(je||(je={})),function(e){e[e.TFM_AUTO=1]="TFM_AUTO",e[e.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",e[e.TFM_SKIP=0]="TFM_SKIP",e[e.TFM_REV=2147483648]="TFM_REV"}(Ve||(Ve={})),function(e){e[e.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",e[e.TROM_POSITION=2]="TROM_POSITION",e[e.TROM_FORMAT=4]="TROM_FORMAT",e[e.TROM_SKIP=0]="TROM_SKIP",e[e.TROM_REV=2147483648]="TROM_REV"}(Ue||(Ue={})),function(e){e[e.TDM_AUTO=1]="TDM_AUTO",e[e.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",e[e.TDM_SKIP=0]="TDM_SKIP",e[e.TDM_REV=2147483648]="TDM_REV"}(Ge||(Ge={}));export{F as BarcodeReader,pe as BarcodeScanner,me as EnumBarcodeColourMode,ve as EnumBarcodeComplementMode,y as EnumBarcodeFormat,ye as EnumBarcodeFormat_2,Se as EnumBinarizationMode,be as EnumClarityCalculationMethod,we as EnumClarityFilterMode,Ce as EnumColourClusteringMode,xe as EnumColourConversionMode,Te as EnumConflictMode,Oe as EnumDPMCodeReadingMode,Ie as EnumDeblurMode,Ee as EnumDeformationResistingMode,m as EnumErrorCode,Ae as EnumGrayscaleTransformationMode,v as EnumIMResultDataType,p as EnumImagePixelFormat,Re as EnumImagePreprocessingMode,De as EnumIntermediateResultSavingMode,S as EnumIntermediateResultType,Me as EnumLocalizationMode,Le as EnumPDFReadingMode,Fe as EnumQRCodeErrorCorrectionLevel,Pe as EnumRegionPredetectionMode,ke as EnumResultCoordinateType,Be as EnumResultType,Ne as EnumScaleUpMode,je as EnumTerminatePhase,Ve as EnumTextFilterMode,Ue as EnumTextResultOrderMode,Ge as EnumTextureDetectionMode}; + */const V="undefined"==typeof self;let U,G,W,H,Y;if("undefined"!=typeof navigator&&(U=navigator,G=U.userAgent,W=U.platform,H=U.mediaDevices),!V){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:U.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:W,search:"Win"},Mac:{str:W},Linux:{str:W}};let i="unknownBrowser",r=0,n="unknownOS";for(let t in e){const n=e[t]||{};let s=n.str||G,o=n.search||t,a=n.verStr||G,h=n.verSearch||t;if(h instanceof Array||(h=[h]),-1!=s.indexOf(o)){i=t;for(let e of h){let t=a.indexOf(e);if(-1!=t){r=parseFloat(a.substring(t+e.length+1));break}}break}}for(let e in t){const i=t[e]||{};let r=i.str||G,s=i.search||e;if(-1!=r.indexOf(s)){n=e;break}}"Linux"==n&&-1!=G.indexOf("Windows NT")&&(n="HarmonyOS"),Y={browser:i,version:r,OS:n}}V&&(Y={browser:"ssr",version:0,OS:"ssr"});const X="undefined"!=typeof WebAssembly&&G&&!(/Safari/.test(G)&&!/Chrome/.test(G)&&/\(.+\s11_2_([2-6]).*\)/.test(G)),z=!("undefined"==typeof Worker),Z=!(!H||!H.getUserMedia),J=async()=>{let e=!1;if(Z)try{(await H.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===Y.browser&&Y.version>66||"Safari"===Y.browser&&Y.version>13||"OPR"===Y.browser&&Y.version>43||"Edge"===Y.browser&&Y.version;const K=(()=>{if(!V&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})();class q{constructor(e,t){this._zIndex=null,this._drawingLayer=null,this._drawingLayerId=null,this._mapStyle=new Map,this.mapEvent_Callbacks=new Map([["selected",new Map],["deselected",new Map],["mousedown",new Map],["mouseup",new Map],["dblclick",new Map],["mouseover",new Map],["mouseout",new Map]]),this.mapNoteName_Content=new Map([]),this.isDrawingItem=!0,this._setFabricObject(e),this._mediaType=e.type,this.styleSelector="default",this.styleId=t}get mediaType(){return this._mediaType}get drawingLayerId(){return this._drawingLayerId}_setFabricObject(e){this._fabricObject=e,this._fabricObject.on("selected",(()=>{this.styleSelector="selected"})),this._fabricObject.on("deselected",(()=>{this._fabricObject.canvas&&this._fabricObject.canvas.getActiveObjects().includes(this._fabricObject)?this.styleSelector="selected":this.styleSelector="default","textbox"===this._fabricObject.type&&(this._fabricObject.isEditing&&this._fabricObject.exitEditing(),this._fabricObject.selected=!1)})),e.getDrawingItem=()=>this}_getFabricObject(){return this._fabricObject}_on(e,t){if(!t)return;const i=e.toLowerCase(),r=this.mapEvent_Callbacks.get(i);if(!r)throw new Error(`Event '${e}' does not exist.`);let n=r.get(t);n||(n=e=>{const i=e.e;if(!i)return void(t&&t.apply(this,[{targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null}]));const r={targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null};if(this._drawingLayer){let e,t,n,s;const o=i.target.getBoundingClientRect();e=o.left,t=o.top,n=e+window.scrollX,s=t+window.scrollY;const a=this._drawingLayer.fabricCanvas.lowerCanvasEl.width,h=this._drawingLayer.fabricCanvas.lowerCanvasEl.height,l=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).width),c=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).height),u=l/c,d=a/h,f=this._drawingLayer._getObjectFit();let g,_,p,m,v=1;if("contain"===f)u0?i-1:r,ee),actionName:"modifyPolygon",pointIndex:i}),e}),{})}_extendSet(e,t){if("vertices"===e){const e=this._fabricObject;if(e.group){const i=e.group;e.points=t.map((e=>({x:e.x-i.left-i.width/2,y:e.y-i.top-i.height/2}))),i.addWithUpdate()}else e.points=t;const i=e.points.length-1;return e.controls=e.points.reduce((function(e,t,r){return e["p"+r]=new j.Control({positionHandler:Q,actionHandler:te(r>0?r-1:i,ee),actionName:"modifyPolygon",pointIndex:r}),e}),{}),e._setPositionDimensions({}),!0}}_extendGet(e){if("vertices"===e){const e=[],t=this._fabricObject;if(t.selectable&&!t.group)for(let i in t.oCoords)e.push({x:t.oCoords[i].x,y:t.oCoords[i].y});else for(let i of t.points){let r=i.x-t.pathOffset.x,n=i.y-t.pathOffset.y;const s=j.util.transformPoint({x:r,y:n},t.calcTransformMatrix());e.push({x:s.x,y:s.y})}return e}}}const re=e=>{let t=(e=>e.split("\n").map((e=>e.split("\t"))))(e);return(e=>{for(let t=0;;t++){let i=-1;for(let r=0;ri&&(i=n.length)}if(-1===i)break;for(let r=0;r=e[r].length-1)continue;let n=" ".repeat(i+2-e[r][t].length);e[r][t]=e[r][t].concat(n)}}})(t),(e=>{let t="";for(let i=0;im?(g=d,_=d/p,{x:n.x*i.width,y:(n.y-(f-_)/2)*i.width}):(g=f*p,_=f,{x:(n.x-(d-g)/2)*i.height,y:n.y*i.height}):"cover"===l?p>m?{x:(c-i.height*d)/2+n.x*i.height,y:n.y*i.height}:{x:n.x*i.width,y:(u-i.width*f)/2+n.y*i.width}:{x:n.x*i.width,y:n.y*i.height}}return i={width:1,height:1},{x:n.x*i.width,y:n.y*i.height}},j.Canvas.prototype._onTouchStart=function(e){var t=this.findTarget(e);!this.allowTouchScrolling&&e.cancelable&&e.preventDefault&&e.preventDefault(),t&&e.cancelable&&e.preventDefault&&e.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(e)),this.__onMouseDown(e),this._resetTransformEventData();var i=this.upperCanvasEl,r=this._getEventPrefix();j.util.addListener(j.document,"touchend",this._onTouchEnd,{passive:!1}),j.util.addListener(j.document,"touchmove",this._onMouseMove,{passive:!1}),j.util.removeListener(i,r+"down",this._onMouseDown)},j.Textbox.prototype._wrapLine=function(e,t,i,r){const n=e.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/g),s=!(!n||!n.length);var o=0,a=this.splitByGrapheme||s,h=[],l=[],c=a?j.util.string.graphemeSplit(e):e.split(this._wordJoiners),u="",d=0,f=a?"":" ",g=0,_=0,p=0,m=!0,v=this._getWidthOfCharSpacing();r=r||0,0===c.length&&c.push([]),i-=r;for(var y=0;yi&&!m?(h.push(l),l=[],o=g,m=!0):o+=v,m||a||l.push(f),l=l.concat(u),_=a?0:this._measureWord([f],t,d),d++,m=!1,g>p&&(p=g);return y&&h.push(l),p+r>this.dynamicMinWidth&&(this.dynamicMinWidth=p-v+r),h});class se{constructor(e,t,i,r){let n,s;switch(this.mapMediaType_Style=new Map,this.mode="viewer",this.onSelectionChange=null,this._arrDrwaingItem=[],this._arrFabricObject=[],this._visible=!0,e.hasOwnProperty("getFabricCanvas")?this.fabricCanvas=e.getFabricCanvas():(this.fabricCanvas=new j.Canvas(e,Object.assign(r,{allowTouchScrolling:!0})),this.fabricCanvas.setDimensions({width:"100%",height:"100%"},{cssOnly:!0}),this.fabricCanvas.lowerCanvasEl.className="",this.fabricCanvas.upperCanvasEl.className="",this.fabricCanvas.on("selection:created",(function(e){const t=e.selected,i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(i,[])}),0)}})),this.fabricCanvas.on("before:selection:cleared",(function(e){const t=this.getActiveObjects(),i=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!i.includes(t)&&i.push(t)}for(let e of i){const i=[];for(let r of t){const t=r.getDrawingItem();t._drawingLayer===e&&i.push(t)}setTimeout((()=>{const t=[];for(let r of i)e.hasDrawingItem(r)&&t.push(r);t.length>0&&e.onSelectionChange&&e.onSelectionChange([],t)}),0)}})),this.fabricCanvas.on("selection:updated",(function(e){const t=e.selected,i=e.deselected,r=[];for(let e of t){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of i){const t=e.getDrawingItem()._drawingLayer;t&&!r.includes(t)&&r.push(t)}for(let e of r){const r=[],n=[];for(let i of t){const t=i.getDrawingItem();t._drawingLayer===e&&r.push(t)}for(let t of i){const i=t.getDrawingItem();i._drawingLayer===e&&n.push(i)}setTimeout((()=>{e.onSelectionChange&&e.onSelectionChange(r,n)}),0)}})),this.fabricCanvas.wrapperEl.style.position="absolute",e.getFabricCanvas=()=>this.fabricCanvas),this.id=t,this._mapDrawingStyles=i,t){case 1:n=i.get(1),s=i.get(5);break;case 2:n=i.get(2),s=i.get(6);break;case 3:n=i.get(3),s=i.get(7);break;default:n=i.get(4),s=i.get(8)}for(let e of q.arrMediaTypes)this.mapMediaType_Style.set(e,{default:n,selected:s})}getId(){return this.id}_getDrawingStyle(e,t){if("number"!=typeof e)throw new Error("Invalid style id.");const i=this._mapDrawingStyles.get(e);return i?t?JSON.parse(JSON.stringify(i)):i:null}setVisible(e){if(e){for(let e of this._arrFabricObject)e.visible=!0;this._visible=!0}else{for(let e of this._arrFabricObject)e.visible=!1;this._visible=!1}this.fabricCanvas.renderAll()}isVisible(){return this._visible}_getItemCurrentStyleId(e){return e.styleId?e.styleId:this.mapMediaType_Style.get(e._mediaType)[e.styleSelector].styleId}_getItemCurrentStyle(e){if(e.styleId)return this._getDrawingStyle(e.styleId);return e._mapStyle.get(e.styleSelector)||null}_changeMediaTypeCurStyleInStyleSelector(e,t,i,r){let n;switch(e){case"rect":n=this.fabricCanvas.getObjects("rect");break;case"arc":n=this.fabricCanvas.getObjects("circle");break;case"polygon":n=this.fabricCanvas.getObjects("polygon");break;case"image":n=this.fabricCanvas.getObjects("image");break;case"text":n=this.fabricCanvas.getObjects("textbox");break;case"line":n=this.fabricCanvas.getObjects("line");break;case"path":n=this.fabricCanvas.getObjects("path")}for(let e of n){if(!this._arrFabricObject.includes(e))continue;const r=e.getDrawingItem();r.styleSelector===t&&this._changeItemStyle(r,i,!0)}r||this.fabricCanvas.renderAll()}_changeItemStyle(e,t,i){if(!e||!t)return;const r=e._getFabricObject();"number"==typeof e.styleId&&(t=this._getDrawingStyle(e.styleId)),r.strokeWidth=t.lineWidth,"fill"===t.paintMode?(r.fill=t.fillStyle,r.stroke=t.fillStyle):"stroke"===t.paintMode?(r.fill="transparent",r.stroke=t.strokeStyle):"strokeAndFill"===t.paintMode&&(r.fill=t.fillStyle,r.stroke=t.strokeStyle),r.fontFamily&&(r.fontFamily=t.fontFamily),r.fontSize&&(r.fontSize=t.fontSize),r.group||(r.dirty=!0),i||this.fabricCanvas.renderAll()}_updateGroupItem(e,t,i){if(!e||!t)return;const r=e.getChildItems();if("add"===i){if(r.includes(t))return;const i=t._getFabricObject();if(this.fabricCanvas.getObjects().includes(i)){if(!this._arrFabricObject.includes(i))throw new Error("Existed in other drawing layers.");t._zIndex=null}else{let i;if(t.styleId)i=this._getDrawingStyle(t.styleId);else{i=this.mapMediaType_Style.get(t._mediaType)[e.styleSelector];const r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected,!0)},n=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default,!0)};t._on("selected",r),t._on("deselected",n),t._funcChangeStyleToSelected=r,t._funcChangeStyleToDefault=n}t._drawingLayer=this,t._drawingLayerId=this.id,this._changeItemStyle(t,i,!0)}e._fabricObject.addWithUpdate(t._getFabricObject())}else{if("remove"!==i)return;if(!r.includes(t))return;t._zIndex=null,t._drawingLayer=null,t._drawingLayerId=null,t._off("selected",t._funcChangeStyleToSelected),t._off("deselected",t._funcChangeStyleToDefault),t._funcChangeStyleToSelected=null,t._funcChangeStyleToDefault=null,e._fabricObject.removeWithUpdate(t._getFabricObject())}this.fabricCanvas.renderAll()}_addDrawingItem(e,t){let i=e._getFabricObject();const r=this.fabricCanvas.getObjects();let n,s;if(r.includes(i)){if(this._arrFabricObject.includes(i))return;throw new Error("Existed in other drawing layers.")}if("group"===e._mediaType){n=e.getChildItems();for(let e of n)if(e._drawingLayer&&e._drawingLayer!==this)throw new Error("The childItems of DT_Group have existed in other drawing layers.")}if(t&&"object"==typeof t&&!Array.isArray(t))for(let e in t)i.set(e,t[e]);if(n){for(let e of n){const t=this.mapMediaType_Style.get(e._mediaType);for(let i of q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected,!0)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default,!0)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}e._drawingLayer=this,e._drawingLayerId=this.id,this._changeItemStyle(e,s,!0)}i.dirty=!0,this.fabricCanvas.renderAll()}else{const t=this.mapMediaType_Style.get(e._mediaType);for(let i of q.arrStyleSelectors)e._mapStyle.set(i,t[i]);if(e.styleId)s=this._getDrawingStyle(e.styleId);else{s=t.default;const i=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected)},r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default)};e._on("selected",i),e._on("deselected",r),e._funcChangeStyleToSelected=i,e._funcChangeStyleToDefault=r}this._changeItemStyle(e,s)}e._zIndex=this.id,e._drawingLayer=this,e._drawingLayerId=this.id;const o=this._arrFabricObject.length;let a=r.length;if(o)a=r.indexOf(this._arrFabricObject[o-1])+1;else for(let t=0;t{for(let t of this._arrDrawingLayer)if(t.getId()===e)return!0;return!1};if(void 0===t){for(let e=100;;e++)if(!i(e)){t=e;break}}else if(i(t))throw new Error("Existed drawing layer id.");const r=new se(e,t,this._mapDrawingStyles,{enableRetinaScaling:!1});return r._manager=this,this._arrDrawingLayer.push(r),this._switchPointerEvent(),r}deleteDrawingLayer(e){const t=this.getDrawingLayer(e);if(!t)return;const i=this._arrDrawingLayer;t.dispose(),i.splice(i.indexOf(t),1),this._switchPointerEvent()}clearDrawingLayers(){for(let e of this._arrDrawingLayer)e.dispose();this._arrDrawingLayer.length=0}getDrawingLayer(e){for(let t of this._arrDrawingLayer)if(t.getId()===e)return t;return null}getDrawingLayers(){return Array.from(this._arrDrawingLayer)}getSelectedDrawingItems(){if(!this._arrDrawingLayer.length)return;const e=this._arrDrawingLayer[0].fabricCanvas.getActiveObjects(),t=[];for(let i of e)t.push(i.getDrawingItem());return t}setDimensions(e,t){this._arrDrawingLayer.length&&this._arrDrawingLayer[0]._setDimensions(e,t)}setObjectFit(e){for(let t of this._arrDrawingLayer)t&&t._setObjectFit(e)}getObjectFit(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0]._getObjectFit():null}setVisible(e){this._arrDrawingLayer.length&&(this._arrDrawingLayer[0].fabricCanvas.wrapperEl.style.display=e?"block":"none")}_switchPointerEvent(){if(this._arrDrawingLayer.length)for(let e of this._arrDrawingLayer)e.getMode()}}class ae{constructor(e){this._controlTarget=null,this._arrUsers=[],this._mapAction_UserArgs=new Map,this._mapProperty_UserValue=new Map,this._mapAction_Callbacks=new Map,this._controlTarget=e}setControlTarget(e){this._controlTarget=e}getControlTarget(){return this._controlTarget}register(e){this._arrUsers.includes(e)||this._arrUsers.push(e)}logout(e){const t=this._arrUsers.indexOf(e);-1!==t&&(this.clearUserDisiredAction({user:e}),this.clearUserDisiredValue({user:e}),this._arrUsers.splice(t,1))}getRegisteredUsers(){return this._arrUsers}ifUserExisted(e){return this._arrUsers.includes(e)}setDisiredValue(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");r&&(this._controlTarget[t]=i),this._mapProperty_UserValue.get(t)?this._mapProperty_UserValue.get(t).set(e,i):this._mapProperty_UserValue.set(t,new Map([[e,i]]))}clearUserDisiredValue(e){if(e&&(e.user||e.property)){if(e.property&&e.user){const t=this._mapProperty_UserValue.get(e.property);if(!t)return;t.delete(e.user)}else if(e.property)this._mapProperty_UserValue.delete(e.property);else if(e.user)for(let t of this._mapProperty_UserValue.values())t.delete(e.user)}else this._mapProperty_UserValue=new Map}getValue(e){if(!this._controlTarget)throw new Error("Control target is not set.");return this._controlTarget[e]}getPropertyDisiredValue(e){if(this._mapProperty_UserValue.get(e)){const t=[],i=this._mapProperty_UserValue.get(e);for(let e of i.values())t.push(e);return t}return null}setDisiredAction(e,t,i,r){if(!this._arrUsers.includes(e))throw new Error("Unregistered user.");return i||(i=[]),r?this._controlTarget[t](...i):(this._mapAction_UserArgs.get(t)?this._mapAction_UserArgs.get(t).set(e,i):this._mapAction_UserArgs.set(t,new Map([[e,i]])),this._render(t))}clearUserDisiredAction(e){if(e&&(e.user||e.actionName)){if(e.actionName&&e.user){const t=this._mapAction_UserArgs.get(e.actionName);if(!t)return;t.delete(e.user)}else if(e.actionName)this._mapAction_UserArgs.delete(e.actionName);else if(e.user)for(let t of this._mapAction_UserArgs.values())t.delete(e.user);this.render()}else this._mapAction_UserArgs=new Map}addCallback(e,t){const i=this._mapAction_Callbacks.get(e);i?i.push(t):this._mapAction_Callbacks.set(e,[t])}removeCallback(e,t){const i=this._mapAction_Callbacks.get(e);if(!i)return;const r=i.indexOf(t);-1!==r&&i.splice(r,1)}clearCallback(e){e?this._mapAction_Callbacks.delete(e):this._mapAction_Callbacks.clear()}_fireCallback(e){const t=this._mapAction_Callbacks.get(e);if(t)for(let e of t){if(!e)return;setTimeout(e.bind(this._controlTarget),0)}}_render(e){const t=this._mapAction_UserArgs.get(e);if(!t)throw new Error("Unrecorded action.");if(t.size===this._arrUsers.length){let i=[];for(let e of t.values())e.length>0&&(i=e);if(this._controlTarget[e]){const t=this._controlTarget[e](...i);return this._mapAction_UserArgs.delete(e),this._fireCallback(e),t}}}render(e){if(e)return this._render(e);for(let e of this._mapAction_UserArgs.keys())this._render(e)}}class he{static multiply(e,t){const i=[];for(let r=0;r<3;r++){const n=t.slice(3*r,3*r+3);for(let t=0;t<3;t++){const r=[e[t],e[t+3],e[t+6]].reduce(((e,t,i)=>e+t*n[i]),0);i.push(r)}}return i}static identity(){return[1,0,0,0,1,0,0,0,1]}static translate(e,t,i){return he.multiply(e,[1,0,0,0,1,0,t,i,1])}static rotate(e,t){var i=Math.cos(t),r=Math.sin(t);return he.multiply(e,[i,-r,0,r,i,0,0,0,1])}static scale(e,t,i){return he.multiply(e,[t,0,0,0,i,0,0,0,1])}}var le;!function(e){e.GREY="grey",e.GREY32="grey32",e.RGBA="rgba",e.RBGA="rbga",e.GRBA="grba",e.GBRA="gbra",e.BRGA="brga",e.BGRA="bgra"}(le||(le={}));const ce=(e,t,i,r)=>{if(!i)return e;let n=t+Math.round((e-t)/i)*i;return r&&(n=Math.min(n,r)),n};class ue{constructor(){this._maxCvsSideLength=void 0,this._defaultMaxCvsSideLength=null,this._predefinedResolutions=[{width:160,height:120},{width:320,height:240},{width:480,height:360},{width:640,height:480},{width:800,height:600},{width:960,height:720},{width:1280,height:720},{width:1920,height:1080},{width:2560,height:1440},{width:3840,height:2160}],this._mapCameraResolutions=new Map,this._bWebGLSupported=!0,this.extraBindings=[],this._cvsSingleFrameMode=null,this._cvsOriginalImage=null,this._imgWidth=0,this._imgHeight=0,this._singleFrameInputContainer=null,this._clickIptSingleFrameMode=()=>{if(!this._isSingleFrameModeEnabled())return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;let e;if(this._singleFrameInputContainer)e=this._singleFrameInputContainer.firstElementChild;else{e=document.createElement("input"),e.setAttribute("type","file"),"camera"===this.singleFrameMode?(e.setAttribute("capture",""),e.setAttribute("accept","image/*")):1!=this.singleFrameMode&&"image"!==this.singleFrameMode||(e.removeAttribute("capture"),e.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp")),e.addEventListener("change",(async()=>{const t=e.files[0];e.value="";const i=await(async e=>{let t=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(t=await createImageBitmap(e),t)return t}catch(e){}var r;return t||(i=await(r=e,new Promise(((e,t)=>{let i=URL.createObjectURL(r),n=new Image;n.dbrObjUrl=i,n.src=i,n.onload=()=>{e(n)},n.onerror=e=>{t(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}})))),i})(t),r=i instanceof HTMLImageElement?i.naturalWidth:i.width,n=i instanceof HTMLImageElement?i.naturalHeight:i.height;this._imgWidth=r,this._imgHeight=n;const s=e=>{const t=Date.now();if(0===r||0===n)return null;if(e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");const i=this._scanRegion,s=this.getFrameSize(r,n,i,this.maxCvsSideLength);if(!s)return null;let o=!0;r===s.sWidth&&n===s.sHeight&&(o=!1);const a=this.mapPixelFormatString_Enum.get(this.framePixelFormat.toLowerCase()),h={data:null,region:i?JSON.parse(JSON.stringify(i)):null,sx:s.sx,sy:s.sy,width:s.dWidth,height:s.dHeight,colorMode:null,pixelFormat:null,timeSpent:null,timeStamp:null,isCropped:o,toCanvas:this._toCanvas,_sWidth:s.sWidth,_sHeight:s.sHeight,_bUseWebGL:null},l=this._getImageData(e,r,n,s,null,{pixelFormat:a});if(!l)return null;const c=Date.now();return ue._onLog&&ue._onLog("DCE: _getVideoData(region?) END: "+c),h.data=l.data,h.pixelFormat=h.colorMode=l.pixelFormat,h._bUseWebGL=l._bUseWebGL,h.timeSpent=c-t,h.timeStamp=c,l.pixelFormat===le.GREY?h.stride=h.width:h.stride=4*h.width,h};(e=>{let t=this._cvsSingleFrameMode;if(!t){if(t=document.createElement("canvas"),!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t),t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit="contain",t.style.pointerEvents="none",this._cvsSingleFrameMode=t}t.width==r&&t.height==n||(t.width=r,t.height=n);const i=t.getContext("2d");i.clearRect(0,0,t.width,t.height),i.drawImage(e,0,0)})(i),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);let o;this._updateDrawingLayersSize();try{o=s(i)}catch(e){throw e}const a=this.mapCameraEvents.get("singleframeacquired");for(let e of a)if(e)try{const t={data:new Uint8Array(o.data),region:JSON.parse(JSON.stringify(o.region)),sx:o.sx,sy:o.sy,width:o.width,height:o.height,stride:o.stride,colorMode:o.colorMode,pixelFormat:o.pixelFormat,timeSpent:o.timeSpent,timeStamp:o.timeStamp,isCropped:o.isCropped,toCanvas:o.toCanvas,_sWidth:o._sWidth,_sHeight:o._sHeight,_bUseWebGL:o._bUseWebGL};await e.apply(this,[t])}catch(e){console.error(e)}})),e.style.position="absolute",e.style.top="-9999px",e.style.backgroundColor="transparent",e.style.color="transparent";const t=document.createElement("div");t.append(e),t.style.position="absolute",t.style.width="1px",t.style.height="1px",t.style.overflow="hidden",t.style.pointerEvents="none",this._elContainer.prepend(t),this._singleFrameInputContainer=t}null==e||e.click()},this.styleEls=[],this._framePixelFormat=void 0,this._defaultFramePixelFormat="rgba",this.mapPixelFormatString_Enum=new Map([["grey",le.GREY],["grey32",le.GREY32],["rgba",le.RGBA],["rbga",le.RBGA],["grba",le.GRBA],["gbra",le.GBRA],["brga",le.BRGA],["bgra",le.BGRA]]),this.shaderPixelFormat=le.RGBA,this.maxVideoCvsLength=3,this._reusedCvs=null,this._reusedWebGLCvs=null,this._tempDataContainer=null,this._webGLTexture=null,this._webGLProgramInfo=null,this._webGLBuffers=null,this._softwareScale=1,this._scaleCenter={x:0,y:0},this._focusParameters={maxTimeout:400,minTimeout:300,kTimeout:void 0,oldDistance:null,fds:null,isDoingFocus:0,taskBackToContinous:null,curFocusTaskId:0,focusCancelableTime:1500,defaultFocusAreaSizeRatio:6,focusBackToContinousTime:5e3,tapFocusMinDistance:null,tapFocusMaxDistance:null,_focusArea:null},this._tapFocusEnabled=!0,this._focusSupported=!0,this._tapDoFocus=async e=>{if(this._touchMoved)return void(this._touchMoved=!1);if(!this._tapFocusEnabled)return;if(!this._bOpen)return;if(this._isSingleFrameModeEnabled())return;if(!this._video||this._video.paused)return;if(!this._videoTrack)return;if(!this._focusSupported)return;if(this.getDrawingLayers().some((e=>"editor"==e.getMode())))return;if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))return void(this._focusSupported=!1);if(null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),1==this._focusParameters.isDoingFocus)return;let t,i,r,n;if(this._focusParameters.taskBackToContinous&&(clearTimeout(this._focusParameters.taskBackToContinous),this._focusParameters.taskBackToContinous=null),e instanceof MouseEvent)t=e.clientX,i=e.clientY;else{if(!(e instanceof TouchEvent))throw new Error("Unknown event type.");if(!e.changedTouches.length)return;t=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY}const s=this.getVideoFit(),o=this._video.videoWidth,a=this._video.videoHeight,h=this._elContainer.getBoundingClientRect(),l=h.left,c=h.top,u=window.getComputedStyle(this._elContainer),d=parseFloat(u.width),f=parseFloat(u.height),g=d/f,_=o/a;let p=1;if("contain"===s)_>g?(p=d/o,r=(t-l)/p,n=(i-c-(f-d/_)/2)/p):(p=f/a,n=(i-c)/p,r=(t-l-(d-f*_)/2)/p);else{if("cover"!==s)throw new Error("Unsupported object-fit.");_>g?(p=f/a,n=(i-c)/p,r=(t-l+(f*_-d)/2)/p):(p=d/o,r=(t-l)/p,n=(i-c+(d/_-f)/2)/p)}const m={x:r+"px",y:n+"px"},v=2*Math.round(Math.min(o,a)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px",y=v;await this._setLocalFocus(m,v,y,this._focusParameters.tapFocusMinDistance,this._focusParameters.tapFocusMaxDistance),this._focusParameters.taskBackToContinous=setTimeout((()=>{this._videoTrack&&this._videoTrack.applyConstraints({advanced:[{focusMode:"continuous"}]}).catch((()=>{}))}),this._focusParameters.focusBackToContinousTime)},this._touchMoved=!1,this._touchMoveEvent=()=>{this._touchMoved=!0},this._recordedStates={},this.playCallbackInfo=null,this._toCanvas=function(){const e=document.createElement("canvas");let t;if(e.width=this.width,e.height=this.height,"grey"===(this.pixelFormat||this.colorMode)){t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{await this.selectCamera(this._selCam.value),this._bOpen||this.stop()},this._onResolutionSelChange=async()=>{let e,t;if(this._selRsl&&-1!=this._selRsl.selectedIndex){let i=this._selRsl.options[this._selRsl.selectedIndex];e=i.getAttribute("data-width"),t=i.getAttribute("data-height")}await this.setResolution(e,t),this._bOpen||this.stop()},this._onCloseBtnClick=()=>{this.close(!0)},this._bOpen=!1,this.isCameraEnhancer=!0,this.isDisposed=!1,this.disposed=!1,this.videoSrc=null,this.cameraOpenTimeout=4e3,this.videoSettings={video:{width:{ideal:1280},height:{ideal:720},facingMode:{ideal:"environment"}}},this.iPlayRound=0,this.promisePlay=null,this._ifSaveLastUsedCamera=!1,this.ifSkipCameraInspection=!1,this._allCameras=[],this._currentCamera=null,this._videoTrack=null,this._lastDeviceId=void 0,this._vc_bPlayingVideoBeforeHide=!1,this._ev_documentHideEvent=()=>{if(!this._isSingleFrameModeEnabled())if("visible"===document.visibilityState){if(ue._onLog&&ue._onLog("DCE: document visible."),this._bOpen&&this._vc_bPlayingVideoBeforeHide)if(this.videoSrc)this._video.play();else if(this._video.srcObject){const e=this._video.srcObject.getTracks()[0];if(this._video.srcObject.active&&e)if(e.muted&&["iPhone","iPad","Mac"].includes(Y.OS)){if(Y.version>=17)return;this.play()}else this._video.play();else this.play()}}else if("hidden"===document.visibilityState)if(ue._onLog&&ue._onLog("DCE: document hidden."),["iPhone","iPad","Mac"].includes(Y.OS)){if(this._vc_bPlayingVideoBeforeHide=!0,Y.version>=17)return;this._video&&this._video.pause()}else this._video&&!this._video.paused?(this._vc_bPlayingVideoBeforeHide=!0,this._video.pause()):this._vc_bPlayingVideoBeforeHide=!1},this.containerClassName="dce-video-container",this._elContainer=null,this._videoContainer=null,this._video=null,this.videoFit="contain",this._cvsScanRegion=null,this._divScanArea=null,this._divScanLight=null,this._bgLoading=null,this._selCam=null,this._bgCamera=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this.regionMaskFillStyle="rgba(0,0,0,0.5)",this.regionMaskStrokeStyle="rgb(254,142,20)",this.regionMaskLineWidth=2,this._bShowScanRegionMask=!0,this._bShowScanRegionLaser=void 0,this._defaultBShowScanRegionLaser=!1,this._scanRegion=null,this._arrScanRegionOverlays=[],this._layerBaseCvs=null,this._drawingLayerOfTip=null,this._tipArgs={x:void 0,y:void 0,width:void 0,duration:void 0,autoShowSuggestedTip:void 0},this._hideTipTimeoutId=null,this.onTipSuggested=null,this._cvsViewDecorator=null,this._decoratorType=[],this._decoratorArea=null,this._viewDecoratorInfo={rectangle:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},focus:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},crossline:{lineWidth:2,strokeStyle:"rgb(254,142,20)"},crosshair:{lineWidth:4,strokeStyle:"rgb(254,142,20)"}},this._croppingRegions=void 0,this._defaultCroppingRegions=[null],this.bIncreaseRegionIndexAuto=!0,this._croppingRegionIndex=0,this._loopInterval=void 0,this._defaultLoopInterval=0,this._maxNumberOfFramesInBuffer=void 0,this._defaultMaxNumberOfFramesInBuffer=1,this._frameQueue=[],this._bFetchingLoopStarted=!1,this._refreshInterval=void 0,this._defaultRefreshInterval=-1,this._updateLayersTimeout=500,this._updateLayers=()=>{this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none");for(let e of this._arrScanRegionOverlays)e&&(e.style.display="none");this._resizeTimeoutId&&clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout((()=>{if(!this.isDisposed||!this.disposed){this.ifShowScanRegionMask&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this.showScanRegionLaser(),this._cvsViewDecorator&&this.showViewDecorator(),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&(e.style.display="",this._updateScanRegionOverlay(e));this._updateDrawingLayersSize(),this._updateVideoContainerStyle()}}),this._updateLayersTimeout)},this._windowResizeListener=()=>{this._windowWidth!==document.documentElement.clientWidth&&(this._windowWidth=document.documentElement.clientWidth,this._updateLayers())},this.mapCameraEvents=new Map([["cameraopen",[]],["cameraclose",[]],["camerachange",[]],["resolutionchange",[]],["played",[]],["singleframeacquired",[]],["frameaddedtobuffer",[]]]),this._controler=null,navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia?this._singleFrameMode=!1:this._singleFrameMode=!0}static getVersion(){return this._version}static async detectEnvironment(){return await(async()=>({wasm:X,worker:z,getUserMedia:Z,camera:await J(),browser:Y.browser,version:Y.version,OS:Y.OS}))()}static set engineResourcePath(e){if(this._hasEngineResourceLoaded)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` is called.");ue._engineResourcePath=(e=>{if(null==e&&(e="./"),!V){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get engineResourcePath(){return this._engineResourcePath}static isStorageAvailable(e){let t;try{t=window[e];const i="__storage_test__";return t.setItem(i,i),t.removeItem(i),!0}catch(e){return e instanceof DOMException&&(22===e.code||1014===e.code||"QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name)&&t&&0!==t.length}}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"data"in e&&"region"in e&&"sx"in e&&"sy"in e&&"width"in e&&"height"in e&&("colorMode"in e||"pixelFormat"in e)&&"timeSpent"in e&&"timeStamp"in e&&"isCropped"in e&&"toCanvas"in e&&"_sWidth"in e&&"_sHeight"in e&&"_bUseWebGL"in e}static async testCameraAccess(){try{if(!navigator||!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return{ok:!1,message:"Insecure context."};(await navigator.mediaDevices.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()}))}catch(e){if("OverconstrainedError"===e.name||"NotFoundError"===e.name)return{ok:!1,message:"No camera detected."};if("NotAllowedError"===e.name)return{ok:!1,message:"No permission to access camera."};if("AbortError"===e.name)return{ok:!1,message:"Some problem occurred which prevented the device from being used."};if("NotReadableError"===e.name)return{ok:!1,message:"A hardware error occurred."};if("SecurityError"===e.name)return{ok:!1,message:"User media support is disabled."};throw e}return{ok:!0,message:"Successfully accessed the camera."}}set maxCvsSideLength(e){if(e<=0)throw new Error("Invalid value.");this._maxCvsSideLength=e}get maxCvsSideLength(){if(void 0!==this._maxCvsSideLength)return this._maxCvsSideLength;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxCvsSideLength");if(e&&1===e.length)return e[0]}return this._defaultMaxCvsSideLength}static set defaultUIElementURL(e){ue._defaultUIElementURL=e}static get defaultUIElementURL(){var e;return null===(e=ue._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",ue.engineResourcePath)}getUIElement(){return this.UIElement}async setUIElement(e){if(this._bOpen)throw new Error("It is not allowed to change the UIElement when the camera is open.");if("string"==typeof e||e instanceof String){if(!e.trim().startsWith("<")){let t=await fetch(e);if(!t.ok)throw Error("setUIElement(elementOrUrl): Network Error: "+t.statusText);e=await t.text()}if(!e.trim().startsWith("<"))throw Error("setUIElement(elementOrUrl): Can't get valid HTMLElement.");let t=document.createElement("div");t.innerHTML=e;for(let e=0;e100||e.regionTop>100||e.regionRight>100||e.regionBottom>100)))}set scanRegion(e){if(!this._checkValidRegion(e))throw new Error("Invalid region.");this._scanRegion=JSON.parse(JSON.stringify(e)),this._updateScanRegionCanvas(),this._updateScanAreaDiv();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e)}setScanRegion(e){this.scanRegion=e}getScanRegion(){return JSON.parse(JSON.stringify(this._scanRegion))}_calculateCvsSize(){var e,t;let i,r,n;if(this._isSingleFrameModeEnabled()?(i=this._imgWidth,r=this._imgHeight,n="contain"):(i=null===(e=this._video)||void 0===e?void 0:e.videoWidth,r=null===(t=this._video)||void 0===t?void 0:t.videoHeight,n=this.getVideoFit()),!i||!r)throw new Error("Invalid content dimensions.");return{width:i,height:r,objectFit:n}}addScanRegionOverlayCanvas(){this._assertOpen();const e=document.createElement("canvas");if(this._updateScanRegionOverlay(e),!this._scanRegionOverlayContainer){const e=document.createElement("div");if(this._scanRegionOverlayContainer=e,e.style.position="absolute",e.style.left="0",e.style.top="0",e.style.width="100%",e.style.height="100%",e.style.overflow="hidden",e.style.pointerEvents="none",this._layerBaseCvs)this._layerBaseCvs.parentElement.after(e);else if(this._cvsScanRegion)this._cvsScanRegion.after(e);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(e);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._recordedStates.overlayShow=!0}return this._scanRegionOverlayContainer.append(e),this._arrScanRegionOverlays.push(e),e}removeScanRegionOverlayCanvas(e){const t=this._arrScanRegionOverlays.indexOf(e);-1!==t&&(e.remove(),this._arrScanRegionOverlays.splice(t,1))}_updateScanRegionOverlay(e){if(!e)return;let t;try{t=this._calculateCvsSize()}catch(e){if("Invalid content dimensions."===(e.message||e))return;throw e}const{width:i,height:r,objectFit:n}=t;if(i<=0||r<=0)return e.width=0,void(e.height=0);const s=this._getRegionInPixels(i,r,this._scanRegion),o=this.getFrameSize(i,r,this._scanRegion,this.maxCvsSideLength),a=o.dWidth,h=o.dHeight;e.width==a&&e.height==h||(e.width=a,e.height=h);const l=window.getComputedStyle(this._elContainer),c=parseFloat(l.width),u=parseFloat(l.height),d=c/u,f=i/r;let g,_,p,m,v=1;"contain"===n?(f>d?(v=c/i,g=0,_=(u-r*v)/2):(v=u/r,g=(c-i*v)/2,_=0),g+=s.regionLeft*v,_+=s.regionTop*v,p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):"cover"===n?(f>d?(v=u/r,g=s.regionLeft*v-(i*v-c)/2,_=s.regionTop*v):(v=c/i,g=s.regionLeft*v,_=s.regionTop*v-(r*v-u)/2),p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):(g=0,_=0,p=0,m=0),e.style.position="absolute",e.style.left=g+"px",e.style.top=_+"px",e.style.width=p+"px",e.style.height=m+"px"}showScanRegionOverlays(){this._scanRegionOverlayContainer&&("none"==this._scanRegionOverlayContainer.style.display&&(this._scanRegionOverlayContainer.style.display=""),this._recordedStates.overlayShow=!0)}hideScanRegionOverlays(){this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none",this._recordedStates.overlayShow=!1)}setViewDecorator(e,t){if(!e)return void(this._cvsViewDecorator&&(this._cvsViewDecorator.remove(),this._cvsViewDecorator=null));if(!t)throw new Error("Invalid area.");this._assertOpen();let i=[];if("string"==typeof e?i.push(e):Array.isArray(e)&&(i=JSON.parse(JSON.stringify(e))),!this._cvsViewDecorator){if(this._cvsViewDecorator=document.createElement("canvas"),this._scanRegionOverlayContainer)this._scanRegionOverlayContainer.after(this._cvsViewDecorator);else if(this._layerBaseCvs)this._layerBaseCvs.parentElement.after(this._cvsViewDecorator);else if(this._cvsScanRegion)this._cvsScanRegion.after(this._cvsViewDecorator);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(this._cvsViewDecorator);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(this._cvsViewDecorator);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(this._cvsViewDecorator)}this._recordedStates.decoratorShow=!0}this._decoratorArea=JSON.parse(JSON.stringify(t)),this._decoratorType.length=0;const r=["rectangle","focus"],n=["crossline","crosshair"];let s=!1,o=!1;for(let e of i)e=e.toLowerCase(),r.includes(e)&&!s&&(s=!0,this._decoratorType.push(e)),n.includes(e)&&!o&&(o=!0,!this._decoratorType.includes(e)&&this._decoratorType.push(e));this._updateViewDecorator()}getViewDecorator(){return{type:JSON.parse(JSON.stringify(this._decoratorType)),area:JSON.parse(JSON.stringify(this._decoratorArea)),canvas:this._cvsViewDecorator}}showViewDecorator(){this._cvsViewDecorator&&("none"==this._cvsViewDecorator.style.display&&(this._cvsViewDecorator.style.display=""),this._recordedStates.decoratorShow=!0)}hideViewDecorator(){this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none",this._recordedStates.decoratorShow=!1)}setViewDecoratorLineWidth(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("lineWidth"))throw new Error(`It is not allowed to change the property 'lineWidth' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].lineWidth=t,this._updateViewDecorator()}setViewDecoratorStrokeStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("strokeStyle"))throw new Error(`It is not allowed to change the property 'strokeStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].strokeStyle=t,this._updateViewDecorator()}setViewDecoratorFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("fillStyle"))throw new Error(`It is not allowed to change the property 'fillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].fillStyle=t,this._updateViewDecorator()}setViewDecoratorMaskFillStyle(e,t){if("string"!=typeof e)throw new Error("The 'type' should be a string.");if(e=e.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(e))throw new Error(`The type of '${e}' doesn't exist.`);if(!this._viewDecoratorInfo[e].hasOwnProperty("maskFillStyle"))throw new Error(`It is not allowed to change the property 'maskFillStyle' when the decorator type is '${e}'.`);this._viewDecoratorInfo[e].maskFillStyle=t,this._updateViewDecorator()}_updateViewDecorator(){if(!this._bOpen)return;if(!this._cvsViewDecorator||!this._decoratorArea)return;let e;if(this._isSingleFrameModeEnabled())e="contain";else{if(!this._video)return;e=this.getVideoFit()}const t=this._cvsViewDecorator;t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.left="0",t.style.top="0",t.style.objectFit=e,t.style.pointerEvents="none";const i=this.getVisibleRegion(!0);if(!i)return;const r=i.regionRight-i.regionLeft,n=i.regionBottom-i.regionTop;if(t.width==r&&t.height==n||(t.width=r,t.height=n),r<=0||n<=0)return;const s=t.getContext("2d");s.clearRect(0,0,t.width,t.height);const o=this._decoratorArea.x/100*r,a=this._decoratorArea.y/100*n,h=this._decoratorArea.width/100*r,l=this._decoratorArea.height/100*n;for(let e of this._decoratorType){if("rectangle"===e){s.fillStyle=this._viewDecoratorInfo.rectangle.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.fillStyle=this._viewDecoratorInfo.rectangle.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.lineWidth=this._viewDecoratorInfo.rectangle.lineWidth,s.strokeStyle=this._viewDecoratorInfo.rectangle.strokeStyle;const e=s.lineWidth/2;s.strokeRect(Math.round(o-e),Math.round(a-e),Math.round(h+s.lineWidth),Math.round(l+s.lineWidth))}if("focus"===e){s.fillStyle=this._viewDecoratorInfo.focus.maskFillStyle,s.fillRect(0,0,t.width,t.height),s.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.fillStyle=this._viewDecoratorInfo.focus.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.lineWidth=this._viewDecoratorInfo.focus.lineWidth,s.strokeStyle=this._viewDecoratorInfo.focus.strokeStyle;const e=s.lineWidth/2,i=[0,.25,.75,1],r=[0,.25,.75,1];s.beginPath();for(let e=0;e{const e=parseFloat(window.getComputedStyle(this._elContainer).width),t=parseFloat(window.getComputedStyle(this._elContainer).height);let s,o={regionBottom:r,regionRight:i,regionLeft:0,regionTop:0,regionMeasuredByPercentage:!1};return"cover"===n?e/tthis.maxNumberOfFramesInBuffer;)this._frameQueue.shift()}get maxNumberOfFramesInBuffer(){if(void 0!==this._maxNumberOfFramesInBuffer)return this._maxNumberOfFramesInBuffer;if(this._controler){const e=this._controler.getPropertyDisiredValue("maxNumberOfFramesInBuffer");if(e&&1===e.length)return e[0]}return this._defaultMaxNumberOfFramesInBuffer}get numberOfFramesInBuffer(){return this._frameQueue.length}set refreshInterval(e){this._refreshInterval=e}get refreshInterval(){if(void 0!==this._refreshInterval)return this._refreshInterval;if(this._controler){const e=this._controler.getPropertyDisiredValue("refreshInterval");if(e&&1===e.length)return e[0]}return this._defaultRefreshInterval}static async createInstance(e){let t=new ue;("string"==typeof e||e instanceof String)&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return this._hasEngineResourceLoaded=!0,ue.onWarning&&(location&&"file:"===location.protocol?setTimeout((()=>{ue.onWarning&&ue.onWarning({id:1,message:"The page is opened over file:// and Dynamsoft Camera Enhancer may not work properly. Please open the page via https://."})}),0):!1!==window.isSecureContext&&navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia||setTimeout((()=>{ue.onWarning&&ue.onWarning({id:2,message:"Dynamsoft Camera Enhancer may not work properly in a non-secure context. Please open the page via https://."})}),0)),t._drawingLayersManager=new oe,t}static async playVideo(e,t,i){if(!e)throw new Error("Invalid 'videoEl'.");if(!t)throw new Error("Invalid 'source'.");return"string"==typeof t||t instanceof String?e.src=t:e.srcObject=t,new Promise(((t,r)=>{let n;const s=()=>{e.removeEventListener("loadstart",h),e.removeEventListener("abort",l),e.removeEventListener("play",c),e.removeEventListener("error",u)},o=()=>{n&&clearTimeout(n),s(),t(e)},a=e=>{n&&clearTimeout(n),s(),r(e)},h=()=>{e.addEventListener("abort",l,{once:!0})},l=()=>{const e=new Error("Video playing was interrupted.");e.name="AbortError",a(e)},c=()=>{o()},u=()=>{a(new Error(`Video error ${e.error.code}: ${e.error.message}.`))};e.addEventListener("loadstart",h,{once:!0}),e.autoplay?(e.addEventListener("play",c,{once:!0}),e.addEventListener("error",u,{once:!0})):(e.load(),e.play().then((()=>{o()})).catch((e=>{a(e)}))),i&&(n=setTimeout((()=>{s(),r(new Error("Failed to play video. Timeout."))}),i))}))}static findBestRearCameraInIOS(e){if(!e||!e.length)return null;const t=["back","baksidan","bakre","bak","後置","后置","背面","خلفية","задна","posteriore","posterior","zadní","bagside","rück","πίσω","trasera","taka","arrière","אחורית","बैक","stražnja","hátsó","belakang","aртқы","후면","achterzijde","tylny","traseira","spate","задняя","задней","zadná","านหลัง","arka","sau"],i=["triple","三镜头","三鏡頭","トリプル","ثلاثية","тройна","trojný","τριπλή","kolmois","משולשת","ट्रिपल","trostruka","tiga","tripla","үштік","트리플","trippelt","trippel","trójobiektywowy","triplă","тройная","trojitá","สาม","üçlü","потроєна","ba camera"],r=["dual wide","dual-weitwinkel","dual con gran angular","dual","doble","double","双广角","雙廣角","デュアル広角","مزدوجة عريضة","двойна широкоъгълна","duální širokoúhlý","διπλή ευρεία","laajakulmainen kaksois","כפולה רחבה","ड्युअल वाइड","dvostruka široka","kettős, széles látószögű","ganda","doppia con grandangolo","қос кең бұрышты","듀얼 와이드","dwikamera","dobbelt vidvinkelkamera","dwuobiektywowy","dupla grande-angular","grande angular dupla","dublă","двойная широкоугольная","duálna širokouhlá","dubbel vidvinkel","คู่ด้านหลังมุมกว้าง","çift geniş","здвоєна ширококутна","kép rộng mặt sau"],n=e.filter((e=>{const i=e.label.toLowerCase();return t.some((e=>i.includes(e)))}));if(!n.length)return null;const s=n.find((e=>{const t=e.label.toLowerCase();return i.some((e=>t.includes(e)))}));if(s)return s.deviceId;const o=n.find((e=>{const t=e.label.toLowerCase();return r.some((e=>t.includes(e)))}));return o?o.deviceId:n[0].deviceId}static findBestRearCamera(e){if(!e||!e.length)return null;if(["iPhone","iPad","Mac"].includes(Y.OS))return ue.findBestRearCameraInIOS(e);const t=["rear","back","rück","arrière","trasera","trás","traseira","posteriore","posterior","后面","後面","背面","后置","後置","背置","задней","خلفية","후","arka","achterzijde","หลัง","baksidan","bagside","sau","bak","tylny","taka","אחורית","πίσω","spate","hátsó","zadní","darrere","zadná","задня","stražnja","belakang","बैक","задна","aртқы","задняя","bakre","านหลัง"];for(let i of e){const e=i.label.toLowerCase();if(e&&t.some((t=>e.includes(t)))&&/\b0(\b)?/.test(e))return i.deviceId}return["Android","HarmonyOS"].includes(Y.OS)?e[e.length-1].deviceId:null}_isSingleFrameModeEnabled(){return 0!=this.singleFrameMode}async play(e,t,i,r){let n;if(this._video&&this.videoSrc){ue._onLog&&(n=Date.now(),ue._onLog("DCE: start loading static video: "+n));const e=await ue.playVideo(this._video,this.videoSrc,this.cameraOpenTimeout);if(ue._onLog&&ue._onLog("DCE: finish loading static video. Costs: "+(Date.now()-n)),!this._video)return e.pause(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};const t={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};this.playCallbackInfo=JSON.parse(JSON.stringify(t));const i=this.mapCameraEvents.get("played");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return this._recordedStates.videoPlaying=!0,t}if(this._isSingleFrameModeEnabled())return r&&r.notTriggerSingleFrameClick||this._clickIptSingleFrameMode(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};if(!this._video)throw new Error("'video' is null or undefined.");const s=++this.iPlayRound;if(this.promisePlay&&(await this.promisePlay,s{var n;try{this._video&&this._video.srcObject&&this.stop(),ue._onLog&&ue._onLog("DCE: ======before video========");const s=()=>{if(!this._video)throw h&&h.getTracks().forEach((e=>{e.stop()})),this._videoTrack=null,this._currentCamera=null,new Error("'video' is null or undefined.")},o=this.getVideoSettings();let a,h;if("boolean"==typeof o.video&&(o.video={}),e)delete o.video.facingMode,o.video.deviceId={exact:e};else if(o.video.deviceId);else if(this._lastDeviceId)delete o.video.facingMode,o.video.deviceId={exact:this._lastDeviceId};else if(this.ifSaveLastUsedCamera&&ue.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")){delete o.video.facingMode,o.video.deviceId={ideal:window.localStorage.getItem("dce_last_camera_id")};const e=JSON.parse(window.localStorage.getItem("dce_last_apply_width")),t=JSON.parse(window.localStorage.getItem("dce_last_apply_height"));e&&t&&(o.video.width=e,o.video.height=t)}else if(this.ifSkipCameraInspection);else if(o.video.facingMode){if(await this.getAllCameras(!1),!this._video)throw new Error("'video' is null or undefined.");let e=o.video.facingMode;if(e instanceof Array&&e.length&&(e=e[0]),e=e.exact||e.ideal||e,"environment"===e){a=!0;const e=ue.findBestRearCamera(this._allCameras);e&&(delete o.video.facingMode,o.video.deviceId={exact:e})}}t&&(o.video.width={ideal:t}),i&&(o.video.height={ideal:i}),ue._onLog&&ue._onLog("DCE: ======try getUserMedia========");let l=[0,500],c=null;const u=async e=>{for(let t of l){t&&await new Promise((e=>setTimeout(e,t))),s();try{ue._onLog&&ue._onLog("DCE: ask "+JSON.stringify(e)),h=await navigator.mediaDevices.getUserMedia(e);break}catch(e){if(s(),"NotFoundError"===e.name||"NotAllowedError"===e.name)throw e;c=e,ue._onLog&&ue._onLog("DCE: "+e.message||e)}}s()};let d;if(await u(o),h||(ue._onLog&&ue._onLog("DCE: ======try getUserMedia again========"),d=JSON.parse(JSON.stringify(o)),"object"==typeof d.video&&(["iPhone","iPad"].includes(Y.OS)?(t>=1280||i>=1280?d.video.width=1280:t>=640||i>=640?d.video.width=640:(t<640||i<640)&&(d.video.width=320),delete d.video.height):a&&!o.video.deviceId?(delete d.video.facingMode,this._allCameras.length&&(d.video.deviceId={ideal:this._allCameras[this._allCameras.length-1].deviceId})):d.video=!0),ue._onLog&&ue._onLog("DCE: "+d),await u(d)),h||(l=[1e3,2e3],await u(o)),h||await u(d),!h)throw c;const f=()=>{const e=h.getVideoTracks();let t,i;if(e.length&&(t=this._videoTrack=e[0]),this._video&&t){const e=t.getSettings();if(e)for(let r of this._allCameras)if(e.deviceId===r.deviceId){r._checked=!0,r.label=t.label,i=r;break}}this._currentCamera=i};if(await this.getAllCameras(!1),s(),a&&!this.ifSkipCameraInspection){f();const e=ue.findBestRearCamera(this._allCameras),t=null===(n=this._currentCamera)||void 0===n?void 0:n.deviceId;e&&e!=t&&(h.getTracks().forEach((e=>{e.stop()})),l=[0,500,1e3,2e3],o.video.deviceId={exact:e},await u(o))}ue._onLog&&ue._onLog("DCE: ======play video========"),s(),await ue.playVideo(this._video,h,this.cameraOpenTimeout),s(),ue._onLog&&ue._onLog("DCE: ======played video========"),this._bgLoading&&(this._bgLoading.style.animationPlayState="paused");const g="got "+this._video.videoWidth+"x"+this._video.videoHeight;this._optGotRsl&&(this._optGotRsl.setAttribute("data-width",this._video.videoWidth),this._optGotRsl.setAttribute("data-height",this._video.videoHeight),this._optGotRsl.innerText=g,this._selRsl&&this._optGotRsl.parentNode==this._selRsl&&(this._selRsl.value="got")),ue._onLog&&ue._onLog("DCE: got "+g),f(),this._renderSelCameraInfo();const _={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};if(_.deviceId&&(this._lastDeviceId=_.deviceId,this.ifSaveLastUsedCamera&&ue.isStorageAvailable&&(window.localStorage.setItem("dce_last_camera_id",this._lastDeviceId),o.video.width&&o.video.height&&(window.localStorage.setItem("dce_last_apply_width",JSON.stringify(o.video.width)),window.localStorage.setItem("dce_last_apply_height",JSON.stringify(o.video.height))))),!r||!r.notTriggerPlayedEvent){const e=this.mapCameraEvents.get("played");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(_));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return this.promisePlay=null,_}catch(e){throw this.promisePlay=null,this._bgLoading&&(this._bgLoading.style.display="none"),"NotFoundError"===e.name&&(DOMException?e=new DOMException("No camera available, please use a device with an accessible camera.",e.name):(e=new Error("No camera available, please use a device with an accessible camera.")).name="NotFoundError"),e}})(),ue._onLog&&(n=Date.now(),ue._onLog("DCE: start opening camera: "+n));const o=await this.promisePlay;return ue._onLog&&ue._onLog("DCE: finish opening camera. Costs: "+(Date.now()-n)),this.playCallbackInfo=JSON.parse(JSON.stringify(o)),this._recordedStates.videoPlaying=!0,o}async resume(){this._assertOpen(),this._video&&(await this._video.play(),this._recordedStates.videoPlaying=!0),this.ifShowScanRegionLaser&&this.showScanRegionLaser()}pause(){this._assertOpen(),this._video&&(this._video.pause(),this._recordedStates.videoPlaying=!1),this.ifShowScanRegionLaser&&this.hideScanRegionLaser()}isPaused(){var e;return!this._isSingleFrameModeEnabled()&&!0===(null===(e=this._video)||void 0===e?void 0:e.paused)}_bindUI(){if(!this.UIElement)throw new Error("Need to define `UIElement` before opening.");const e=[this.UIElement];for(let t=0;t=17&&e.setAttribute("poster","data:image/gif;base64,R0lGODlhAQABAIEAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAgEAAEEBAA7"),this._video=e;const i=document.createElement("div");i.append(e),i.style.position="absolute",i.style.left="0",i.style.top="0",i.style.width="100%",i.style.height="100%",i.style.overflow="hidden",this._videoContainer=i,t.prepend(i)}else!this._divScanArea&&t.classList.contains("dce-scanarea")?this._divScanArea=t:!this._divScanLight&&t.classList.contains("dce-scanlight")?this._divScanLight=t:!this._bgLoading&&t.classList.contains("dce-bg-loading")?this._bgLoading=t:!this._bgCamera&&t.classList.contains("dce-bg-camera")?this._bgCamera=t:!this._selCam&&t.classList.contains("dce-sel-camera")?this._selCam=t:!this._selRsl&&t.classList.contains("dce-sel-resolution")?(this._selRsl=t,this.videoSrc||this._isSingleFrameModeEnabled()||this._selRsl.options.length||(this._selRsl.innerHTML=[this._optGotRsl?"":'','','',''].join(""),this._optGotRsl=this._optGotRsl||this._selRsl.options[0])):!this._optGotRsl&&t.classList.contains("dce-opt-gotResolution")?this._optGotRsl=t:!this._btnClose&&t.classList.contains("dce-btn-close")?this._btnClose=t:!this._selMinLtr&&t.classList.contains("dlr-sel-minletter")?(this._selMinLtr=t,this._selMinLtr.options.length||(this._selMinLtr.innerHTML=[this._optGotMinLtr?"":'','','','','','','','','','',''].join(""),this._optGotMinLtr=this._optGotMinLtr||this._selMinLtr.options[0])):!this._optGotMinLtr&&t.classList.contains("dlr-opt-gotMinLtr")&&(this._optGotMinLtr=t);if(this.extraBindings&&this.extraBindings.length)for(let i of this.extraBindings)try{i(t)}catch(e){}}if(!this._video)throw this._unbindUI(),Error(`Can not find the video container element with class '${this.containerClassName}'`);this._isSingleFrameModeEnabled()||this.videoSrc?(this._isSingleFrameModeEnabled()&&(this._elContainer&&(this._elContainer.addEventListener("click",this._clickIptSingleFrameMode),this._elContainer.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block")),this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._elContainer&&(["Android","HarmonyOS"].includes(Y.OS)?(this._elContainer.addEventListener("touchend",this._tapDoFocus),this._elContainer.addEventListener("touchmove",this._touchMoveEvent)):this._elContainer.addEventListener("click",this._tapDoFocus)),this._selCam&&(this._selCam.style.display="block",this._selCam.addEventListener("change",this._onCameraSelChange)),this._selRsl&&(this._selRsl.style.display="block",this._selRsl.addEventListener("change",this._onResolutionSelChange)),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._bgLoading&&(this._bgLoading.style.display="block")),this._btnClose&&this._btnClose.addEventListener("click",this._onCloseBtnClick),document.addEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&(this._resizeObserver||(this._resizeObserver=new ResizeObserver((e=>{for(let t of e)t.target===this._elContainer&&this._updateLayers()}))),this._elContainer&&this._resizeObserver.observe(this._elContainer)),this._windowWidth=document.documentElement.clientWidth,window.addEventListener("resize",this._windowResizeListener)}_unbindUI(){this._isSingleFrameModeEnabled()?(this._elContainer&&(this._elContainer.removeEventListener("click",this._clickIptSingleFrameMode),this._elContainer.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none")):this._bgLoading&&(this._bgLoading.style.display="none"),this._elContainer&&(this._elContainer.removeEventListener("click",this._tapDoFocus),this._elContainer.removeEventListener("touchend",this._tapDoFocus),this._elContainer.removeEventListener("touchmove",this._touchMoveEvent)),this._selCam&&this._selCam.removeEventListener("change",this._onCameraSelChange),this._selRsl&&this._selRsl.removeEventListener("change",this._onResolutionSelChange),this._btnClose&&this._btnClose.removeEventListener("click",this._onCloseBtnClick),this.hideScanRegionLaser(),this.hideViewDecorator(),this.hideScanRegionOverlays(),this._drawingLayersManager.setVisible(!1),this._hideOriginalImageCvs(),this._videoContainer&&this._videoContainer.remove(),this._video=null,this._videoContainer=null,this._elContainer=null,this._selCam=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._divScanArea=null,this._divScanLight=null,this._cvsScanRegion&&(this._cvsScanRegion.remove(),this._cvsScanRegion=null),this._singleFrameInputContainer&&(this._singleFrameInputContainer.remove(),this._singleFrameInputContainer=null),this._cvsSingleFrameMode&&(this._cvsSingleFrameMode.remove(),this._cvsSingleFrameMode=null),document.removeEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&this._resizeObserver&&this._resizeObserver.disconnect(),window.removeEventListener("resize",this._windowResizeListener)}_assertOpen(){if(!this._bOpen)throw Error("The camera is not open.")}async open(e){this.UIElement||await this.setUIElement(ue.defaultUIElementURL),this._bindUI(),e&&this.appendAndShowUI();let t=await this.play();this.bOpen=!0,this._focusParameters.fds=null,this._focusParameters.kTimeout=void 0,this._focusSupported=!0,this._tapFocusEnabled&&!this._isSingleFrameModeEnabled()&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,this._focusParameters.fds||(this._focusSupported=!1,this._tapFocusEnabled=!1));const i=this.mapCameraEvents.get("cameraopen");for(let e of i){if(!e)continue;const i=JSON.parse(JSON.stringify(t));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[i])}),0)}return t}close(e){if(!this._video)return;this.stop(),this._hideOriginalImage(!1),this.hideTip(),this._unbindUI(),e&&this.hideUI(),this.stopFetchingLoop(),this.bOpen=!1;const t=this.mapCameraEvents.get("cameraclose");for(let e of t){if(!e)continue;const t={width:0,height:0,deviceId:null};setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}stop(){this._video&&this._video.srcObject&&(ue._onLog&&ue._onLog("DCE: ======stop video========"),this._video.srcObject.getTracks().forEach((e=>{e.stop()})),this._video.srcObject=null,this._videoTrack=null,this._currentCamera=null),this._video&&this.videoSrc&&(ue._onLog&&ue._onLog("DCE: ======stop existing video========"),this._video.pause(),this._video.currentTime=0),this._bgLoading&&(this._bgLoading.style.animationPlayState=""),this._frameQueue.length=0,this._reusedCvs&&this._reusedCvs.ctx2d&&this._reusedCvs.ctx2d.clearRect(0,0,this._reusedCvs.width,this._reusedCvs.height),this.forceLoseContext()}async getAllCameras(e=!0){let t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind));if(e&&t&&t.length&&!t[0].deviceId){let e=await navigator.mediaDevices.getUserMedia({video:!0});t=(await navigator.mediaDevices.enumerateDevices()).filter((e=>"videoinput"===e.kind)),e.getTracks().forEach((e=>{e.stop()}))}const i=[],r=[];if(this._allCameras)for(let e of this._allCameras)e._checked&&r.push(e);for(let e=0;e{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}if(r!==s.width||n!==s.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(s));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return s}getResolution(){if(this._bOpen)return[this._video.videoWidth,this._video.videoHeight];{let e=0,t=0;const i=this.videoSettings.video.width,r=this.videoSettings.video.height;return i&&(e=i.exact||i.ideal||i),r&&(t=r.exact||r.ideal||r),[e,t]}}async setResolution(e,t){let i,r;if(e instanceof Array?(i=e[0],r=e[1]):(i=e,r=t),this.videoSettings.video.width={ideal:i},this.videoSettings.video.height={ideal:r},!this._bOpen||this._video.paused)return null;const n=this._video.videoWidth,s=this._video.videoHeight,o=await this.play(null,i,r);if(n!==o.width||s!==o.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let e of this._arrScanRegionOverlays)e&&this._updateScanRegionOverlay(e);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const e=this.mapCameraEvents.get("resolutionchange");for(let t of e){if(!t)continue;const e=JSON.parse(JSON.stringify(o));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}return o}async getResolutions(e){var t,i;let r="";const n=(e,t)=>{const i=this._mapCameraResolutions.get(e);if(!i||!i.length)return!1;for(let e of i)if(e[0]===t.width&&e[1]===t.height)return!0;return!1},s=async(e,t,i)=>{const r={video:{deviceId:{exact:e},width:{ideal:t},height:{ideal:i}}};let n=null;try{n=await navigator.mediaDevices.getUserMedia(r)}catch(e){return null}if(!n)return null;const s=n.getVideoTracks();let o=null;try{const e=s[0].getSettings();o={width:e.width,height:e.height}}catch(e){const t=document.createElement("video");t.srcObject=n,o={width:t.videoWidth,height:t.videoHeight},t.srcObject=null}return s.forEach((e=>{e.stop()})),o};if(!this._bOpen){const o=null===(i=null===(t=this.videoSettings)||void 0===t?void 0:t.video)||void 0===i?void 0:i.deviceId;if(!o)return null;if(r=o.hasOwnProperty("exact")?this.videoSettings.video.deviceId.exact:o.hasOwnProperty("ideal")?this.videoSettings.video.deviceId.ideal:this.videoSettings.video.deviceId,!r)return null;let a=this._mapCameraResolutions.get(r);if(a&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),a=this._mapCameraResolutions.get(r);for(let e of this._predefinedResolutions){const t=await s(r,e.width,e.height);t&&!n(r,t)&&a.push([t.width,t.height])}return a}if(this._currentCamera){r=this._currentCamera.deviceId;let t=this._mapCameraResolutions.get(r);if(t&&!e)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),t=this._mapCameraResolutions.get(r);let i=this._videoTrack;for(let e of this._predefinedResolutions){await i.applyConstraints({width:{ideal:e.width},height:{ideal:e.height}});const s=i.getSettings(),o={width:s.width,height:s.height};n(r,o)||t.push([o.width,o.height])}return this._video.srcObject.getTracks().forEach((e=>{e.stop()})),await this.play(r,null,null,{notTriggerPlayedEvent:!0}),t}return null}on(e,t){if(!t)return;const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);i.includes(t)||i.push(t)}off(e,t){const i=this.mapCameraEvents.get(e.toLowerCase());if(!i)throw new Error(`Event '${e}' does not exist.`);const r=i.indexOf(t);-1!==r&&i.splice(r,1)}offAll(e){if(e){if("string"==typeof e){const t=this.mapCameraEvents.get(e);t&&(t.length=0)}}else for(let e of this.mapCameraEvents.values())e&&(e.length=0)}getVideoSettings(){return JSON.parse(JSON.stringify(this.videoSettings))}updateVideoSettings(e){if(this.videoSettings=JSON.parse(JSON.stringify(e)),this._lastDeviceId=null,this._bOpen)return this.play()}isOpen(){return this._bOpen}getCapabilities(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCapabilities()' is unavailable in singleFrameMode.");return this._videoTrack&&this._videoTrack.getCapabilities?this._videoTrack.getCapabilities():{}}getCameraSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCameraSettings()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings():null}getConstraints(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getConstraints()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getConstraints():null}async applyConstraints(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'applyConstraints()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error('"_videoTrack" is null.');if(!this._videoTrack.applyConstraints)throw Error("Not supported.");return await this._videoTrack.applyConstraints(e)}async turnOnTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOnTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!0}]});throw Error("Not supported.")}async turnOffTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOffTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!1}]});throw Error("Not supported.")}async setColorTemperature(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setColorTemperature()' is unavailable in singleFrameMode.");let t=this.getCapabilities().colorTemperature;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{colorTemperature:e,whiteBalanceMode:"manual"}]})}getColorTemperature(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getColorTemperature()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().colorTemperature||0:null}async setExposureCompensation(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setExposureCompensation()' is unavailable in singleFrameMode.");let t=this.getCapabilities().exposureCompensation;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({advanced:[{exposureCompensation:e}]})}getExposureCompensation(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getExposureCompensation()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().exposureCompensation||0:null}async _setHardwareScale(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setHardwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");if(!this._videoTrack)return;const t=this.getCapabilities().zoom;if(!t)throw new Error("Not supported.");return et.max&&(e=t.max),e=ce(e,t.min,t.step,t.max),await this._videoTrack.applyConstraints({advanced:[{zoom:e}]}),e}_getHardwareScale(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().zoom||1:null}_setSoftwareScale(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setSoftwareScale()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");t&&this._setScaleCenter(t),this._softwareScale=e,this._scaleVideo(e,t)}_getSoftwareScale(){return this._softwareScale}_setScaleCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setScaleCenter()' is unavailable in singleFrameMode.");if(!e||"string"!=typeof e.x||"string"!=typeof e.y)throw new Error("Invalid center.");const t=this._video.videoWidth,i=this._video.videoHeight;let r=0,n=0;if(e.x.endsWith("px"))r=parseFloat(e.x);else{if(!e.x.endsWith("%"))throw new Error("Invalid scale center.");r=parseFloat(e.x)/100*t}if(e.y.endsWith("px"))n=parseFloat(e.y);else{if(!e.y.endsWith("%"))throw new Error("Invalid scale center.");n=parseFloat(e.y)/100*i}if(NaN==r||NaN==n)throw new Error("Invalid scale center.");this._scaleCenter={x:r,y:n}}_resetScaleCenter(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_resetScaleCenter()' is unavailable in singleFrameMode.");const e=this._video.videoWidth,t=this._video.videoHeight;this._scaleCenter={x:e/2,y:t/2}}_isVideoCenter(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_isVideoCenter()' is unavailable in singleFrameMode.");return e&&e.x==this._video.videoWidth/2&&e.y==this._video.videoHeight/2}async _setZoom(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e<1)throw new RangeError("Invalid value.");this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e>i?this._setSoftwareScale(e/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e)}}async setZoom(e){if("number"!=typeof e&&"object"!=typeof e)throw new TypeError("Illegal type of argument.");if("number"==typeof e)return this._setZoom(e);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(e){if("number"!=typeof e.factor)throw new TypeError("Illegal type of 'factor'.");if(e.factor<1)throw new RangeError("Invalid value.");e.centerPoint?this._setScaleCenter(e.centerPoint):this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const t=await this._setHardwareScale(e.factor);let i=this._getHardwareScale();1==i&&1!=t&&(i=t),e.factor>i?this._setSoftwareScale(e.factor/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(e.factor)}catch(t){if("Not supported."!==(t.message||t))throw t;this._setSoftwareScale(e.factor)}}}getZoom(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?this._getHardwareScale()*this._softwareScale:null}getZoomSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?{factor:this._getHardwareScale()*this._softwareScale}:null}async resetZoom(){await this.setZoom({factor:1})}async setFrameRate(e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFrameRate()' is unavailable in singleFrameMode.");let t=this.getCapabilities().frameRate;if(!t)throw Error("Not supported.");return et.max&&(e=t.max),await this._videoTrack.applyConstraints({width:{ideal:Math.max(this._video.videoWidth,this._video.videoHeight)},frameRate:e})}getFrameRate(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrameRate()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().frameRate:null}async _setFocus(e,t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if("string"!=typeof e)throw Error("Invalid focus mode.");e=e.toLowerCase();const i=this.getCapabilities().focusMode,r=this.getCapabilities().focusDistance;if(!i)throw Error("Not supported.");if(!i.includes(e))throw Error("Unsupported mode.");if(t>=0){if(!r)throw Error("Manual focus unsupported.");return tr.max&&(t=r.max),t=ce(t,r.min,r.step,r.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:e,focusDistance:t}]})}return await this._videoTrack.applyConstraints({advanced:[{focusMode:e}]})}async setFocus(e,t){if("string"==typeof e)return this._setFocus(e,t);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if(!e)return;const i=this.getCapabilities(),r=i.focusMode,n=i.focusDistance;if(!r)throw Error("Not supported.");if("string"!=typeof e.mode)throw Error("Invalid focus mode.");const s=e.mode.toLowerCase();if(!r.includes(s))throw Error("Unsupported focus mode.");if("manual"!==s)return this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s}]});if(!n)throw Error("Manual focus unsupported.");if(e.hasOwnProperty("distance")){let t=e.distance;return tn.max&&(t=n.max),t=ce(t,n.min,n.step,n.max),this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s,focusDistance:t}]})}if(!e.area)throw new Error("'distance' or 'area' should be specified in 'manual' mode.");{const t=e.area.centerPoint;let i=e.area.width,r=e.area.height;if(!i||!r){const e=this._video.videoWidth,t=this._video.videoHeight;i||(i=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px"),r||(r=2*Math.round(Math.min(e,t)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px")}this._focusParameters._focusArea={centerPoint:{x:t.x,y:t.y},width:i,height:r},await this._setLocalFocus(t,i,r)}}getFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings().focusMode;return e?"continuous"===e?{mode:e}:{mode:e,distance:this._videoTrack.getSettings().focusDistance}:null}getFocusSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const e=this._videoTrack.getSettings(),t=e.focusMode;return t?"manual"===t?this._focusParameters._focusArea?{mode:"manual",area:JSON.parse(JSON.stringify(this._focusParameters._focusArea))}:{mode:"manual",distance:e.focusDistance}:{mode:t}:null}async _setFocusAndGetContract(e,t){const i=e=>{if(!this._bOpen||!this._videoTrack||this.video.paused||e.focusTaskId!=this._focusParameters.curFocusTaskId){this._bOpen&&this._videoTrack&&!this.video.paused||(this._focusParameters.isDoingFocus=0);const t=new Error(`Focus task ${e.focusTaskId} canceled.`);throw t.name="DeprecatedTaskError",t}1===this._focusParameters.isDoingFocus&&Date.now()-e.timeStart>this._focusParameters.focusCancelableTime&&(this._focusParameters.isDoingFocus=-1)};let r;t=ce(t,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:"manual",focusDistance:t}]}),i(e),r=null==this._focusParameters.oldDistance?this._focusParameters.kTimeout*Math.max(Math.abs(1/this._focusParameters.fds.min-1/t),Math.abs(1/this._focusParameters.fds.max-1/t))+this._focusParameters.minTimeout:this._focusParameters.kTimeout*Math.abs(1/this._focusParameters.oldDistance-1/t)+this._focusParameters.minTimeout,this._focusParameters.oldDistance=t,await new Promise((e=>{setTimeout(e,r)})),i(e);let n=e.focusL-e.focusW/2,s=e.focusT-e.focusH/2,o=e.focusW,a=e.focusH;if(n>=this.video.videoWidth||s>=this.video.videoHeight)throw new Error("Invalid area.");n+o>this.video.videoWidth&&(o=this.video.videoWidth-n),s+a>this.video.videoHeight&&(a=this.video.videoHeight-s);const h=this._getImageData(this.video,this.video.videoWidth,this.video.videoHeight,{sx:n,sy:s,sWidth:o,sHeight:a,dWidth:o,dHeight:a},null,{pixelFormat:le.RGBA});if(!h)return this._setFocusAndGetContract(e,t);const l=h.data;let c=0;for(let e=0,t=l.length-8;eo&&oc)return await this._doFocusDetail(e,s,o,r,n,l,c)}else{let a=await this._setFocusAndGetContract(e,l);if(o>a)return await this._doFocusDetail(e,s,o,r,n,l,a);if(o==a)return await this._doFocusDetail(e,s,o,l,a);let c=await this._setFocusAndGetContract(e,h);if(c>o&&o{try{(null==t||tthis._focusParameters.fds.max)&&(i=this._focusParameters.fds.max),this._focusParameters.oldDistance=null;let r=ce(Math.sqrt(i*(t||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),n=ce(Math.sqrt((t||this._focusParameters.fds.step)*r),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=ce(Math.sqrt(r*i),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),o=await this._setFocusAndGetContract(e,s),a=await this._setFocusAndGetContract(e,n),h=await this._setFocusAndGetContract(e,r);if(a>h&&ho&&a>o){let t=await this._setFocusAndGetContract(e,i);const n=await this._doFocusDetail(e,r,h,i,t,s,o);return this._focusParameters.isDoingFocus=0,n}if(a==h&&hh){const t=await this._doFocusDetail(e,r,h,s,o);return this._focusParameters.isDoingFocus=0,t}return d(e,t,i)}catch(e){if("DeprecatedTaskError"!==e.name)throw e}};return d(u,r,n)}async enableTapToFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'enableTapToFocus()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error("Video is not playing.");if(!this._focusSupported)throw new Error("Tapping to focus unsupported.");if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))throw this._focusSupported=!1,this._tapFocusEnabled=!1,new Error("Tapping to focus unsupported.");this._tapFocusEnabled=!0}disableTapToFocus(){this._tapFocusEnabled=!1}isTapToFocusEnabled(){return this._tapFocusEnabled}_updateVideoContainerStyle(){if(!this._video)return;if(this._isSingleFrameModeEnabled())return;const e=this._getSoftwareScale(),t=this._videoContainer;if("contain"===this.videoFit&&e>1){const e=this._video.videoWidth,i=this._video.videoHeight,r=window.getComputedStyle(this._elContainer),n=parseFloat(r.width),s=parseFloat(r.height),o=e/i;if(n/sa?o/(i/e):s/(r/e));const c=l*(1-1/e)*(i/2-this._scaleCenter.x),u=l*(1-1/e)*(r/2-this._scaleCenter.y);this._video.style.transform=`translate(${c}px, ${u}px) scale(${e})`}this._updateVideoContainerStyle()}}getFrameSize(e,t,i,r){if(!e||!t)return null;let n,s,o,a,h=e,l=t;const c={regionLeft:0,regionTop:0,regionRight:h,regionBottom:l,regionMeasuredByPercentage:!1};i?(i.regionMeasuredByPercentage?(c.regionLeft=i.regionLeft*h/100,c.regionTop=i.regionTop*l/100,c.regionRight=i.regionRight*h/100,c.regionBottom=i.regionBottom*l/100):(c.regionLeft=i.regionLeft,c.regionTop=i.regionTop,c.regionRight=i.regionRight,c.regionBottom=i.regionBottom),n=Math.round(c.regionLeft),s=Math.round(c.regionTop),h=Math.round(c.regionRight-c.regionLeft),l=Math.round(c.regionBottom-c.regionTop)):(n=0,s=0,h=Math.round(h),l=Math.round(l));const u=Math.max(h,l);if(r&&r>0&&u>r){const e=r/u;h>l?(o=r,a=Math.round(l*e)):(o=Math.round(h*e),a=r)}else o=h,a=l;return o<=0||a<=0?null:{sx:n,sy:s,sWidth:h,sHeight:l,dWidth:o,dHeight:a}}getFrame(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrame()' is unavailable in singleFrameMode.");return this._getVideoData()}getImage(){return this.getFrame()}_drawImage(e,t,i,r,n,s,o){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(!i||!r)return null;if(t instanceof HTMLVideoElement&&4!==t.readyState||t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");let a;ue._onLog&&(a=Date.now(),ue._onLog("DCE: _drawImage(), START: "+a));let h=0,l=0,c=i,u=r,d=0,f=0,g=i,_=r;n&&(n.sx&&(h=Math.round(n.sx)),n.sy&&(l=Math.round(n.sy)),n.sWidth&&(c=Math.round(n.sWidth)),n.sHeight&&(u=Math.round(n.sHeight)),n.dx&&(d=Math.round(n.dx)),n.dy&&(f=Math.round(n.dy)),n.dWidth&&(g=Math.round(n.dWidth)),n.dHeight&&(_=Math.round(n.dHeight)));let p=le.RGBA;o&&o.pixelFormat&&(p=o.pixelFormat);const m=e;if(!o||!o.bUseWebGL){ue._onLog&&ue._onLog("DCE: _drawImage() in context2d."),m.ctx2d||(m.ctx2d=m.getContext("2d",{willReadFrequently:!0}));const e=m.ctx2d;if(!e)throw new Error("Unable to get 'CanvasRenderingContext2D' from canvas.");return(m.width{const t=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW);const i=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,i),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),e.STATIC_DRAW),{positions:t,texCoords:i}},i=e=>{const t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),t},r=(e,t)=>{const i=e.createProgram();if(t.forEach((t=>e.attachShader(i,t))),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS)){const t=new Error(`An error occured linking the program: ${e.getProgramInfoLog(i)}.`);throw t.name="WebGLError",t}return e.useProgram(i),i},n=(e,t,i)=>{const r=e.createShader(t);if(e.shaderSource(r,i),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){const t=new Error(`An error occured compiling the shader: ${e.getShaderInfoLog(r)}.`);throw t.name="WebGLError",t}return r},s="\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n \n uniform mat3 u_matrix;\n uniform mat3 u_textureMatrix;\n \n varying vec2 v_texCoord;\n void main(void) {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1.0);\n v_texCoord = vec4((u_textureMatrix * vec3(a_texCoord, 1)).xy, 0, 1.0).xy;\n }\n ";let o="rgb";["rgba","rbga","grba","gbra","brga","bgra"].includes(p)&&(o=p.slice(0,3));const a=`\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_image;\n uniform float uColorFactor;\n \n void main() {\n vec4 sample = texture2D(u_image, v_texCoord);\n float grey = 0.21 * sample.r + 0.71 * sample.g + 0.07 * sample.b;\n gl_FragColor = vec4(sample.${o} * (1.0 - uColorFactor) + (grey * uColorFactor), sample.a);\n }\n `,h=r(e,[n(e,e.VERTEX_SHADER,s),n(e,e.FRAGMENT_SHADER,a)]);this._webGLProgramInfo={program:h,attribLocations:{vertexPosition:e.getAttribLocation(h,"a_position"),texPosition:e.getAttribLocation(h,"a_texCoord")},uniformLocations:{uSampler:e.getUniformLocation(h,"u_image"),uColorFactor:e.getUniformLocation(h,"uColorFactor"),uMatrix:e.getUniformLocation(h,"u_matrix"),uTextureMatrix:e.getUniformLocation(h,"u_textureMatrix")}},this._webGLBuffers=t(e),this._webGLTexture=i(e),this.shaderPixelFormat=p}const n=(e,t,i)=>{e.bindBuffer(e.ARRAY_BUFFER,t),e.enableVertexAttribArray(i),e.vertexAttribPointer(i,2,e.FLOAT,!1,0,0)},o=(e,t,i)=>{const r=e.RGBA,n=e.RGBA,s=e.UNSIGNED_BYTE;e.bindTexture(e.TEXTURE_2D,t),e.texImage2D(e.TEXTURE_2D,0,r,n,s,i)},v=(e,t,s,o)=>{e.clearColor(0,0,0,1),e.clearDepth(1),e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),n(e,s.positions,t.attribLocations.vertexPosition),n(e,s.texCoords,t.attribLocations.texPosition),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,o),e.uniform1i(t.uniformLocations.uSampler,0),e.uniform1f(t.uniformLocations.uColorFactor,[le.GREY,le.GREY32].includes(p)?1:0);let a,m,v=he.translate(he.identity(),-1,-1);v=he.scale(v,2,2),v=he.scale(v,1/e.canvas.width,1/e.canvas.height),a=he.translate(v,d,f),a=he.scale(a,g,_),e.uniformMatrix3fv(t.uniformLocations.uMatrix,!1,a),m=he.translate(he.identity(),h/i,l/r),m=he.scale(m,c/i,u/r),e.uniformMatrix3fv(t.uniformLocations.uTextureMatrix,!1,m),e.drawArrays(e.TRIANGLES,0,6)};let y;if(o(e,this._webGLTexture,t),v(e,this._webGLProgramInfo,this._webGLBuffers,this._webGLTexture),s){if(s.lengtht||r.sy>i||r.sx+r.sWidth>t||r.sy+r.sHeight>i)throw new Error("Invalid position.");if(e instanceof HTMLVideoElement&&4!==e.readyState||e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");let o;ue._onLog&&(o=Date.now(),ue._onLog("DCE: _getImageData(), START: "+o));const a=Math.round(r.sx),h=Math.round(r.sy),l=Math.round(r.sWidth),c=Math.round(r.sHeight),u=Math.round(r.dWidth),d=Math.round(r.dHeight);let f=le.RGBA;s&&s.pixelFormat&&(f=s.pixelFormat);let g,_,p,m=this._bWebGLSupported;s&&0==s.bUseWebGL&&(m=!1),m?(this._reusedWebGLCvs||(this._reusedWebGLCvs=document.createElement("canvas")),g=this._reusedWebGLCvs):(this._reusedCvs||(this._reusedCvs=document.createElement("canvas")),g=this._reusedCvs);try{if(m)if(ue._onLog&&ue._onLog("DCE: _getImageData() in WebGL."),n)if(f===le.GREY){if(p=new Uint8Array(u*d*4),_=this._drawImage(g,e,t,i,{sx:a,sy:h,sWidth:l,sHeight:c,dWidth:u,dHeight:d},p,{pixelFormat:f,bUseWebGL:m}),p=this._transformPixelFormat(p,_.pixelFormat,f),n){if(n.length=this.croppingRegions.length||this._croppingRegionIndex<0)throw new Error("The 'croppingRegionIndex' is out of bounds.");e=this.croppingRegions[this._croppingRegionIndex],this.bIncreaseRegionIndexAuto&&++this._croppingRegionIndex>=this.croppingRegions.length&&(this._croppingRegionIndex=0)}return e}_fetchingLoop(e){if(this.isDisposed&&this.disposed)return;if(!this._bOpen||!this.isFetchingLoopStarted())return void this.stopFetchingLoop();const t=()=>{ue._onLog&&ue._onLog("DCE: start fetching a frame into buffer: "+Date.now());const e=this.getCurrentRegion();let t=this._getVideoData(null,{region:e});if(!t)return void(ue._onLog&&ue._onLog("DCE: get a invalid frame, abandon it: "+Date.now()));for(;this._frameQueue&&this._frameQueue.length>=this.maxNumberOfFramesInBuffer;)this._frameQueue.shift();this._frameQueue.push(t),ue._onLog&&ue._onLog("DCE: finish fetching a frame into buffer: "+Date.now());const i=this.mapCameraEvents.get("frameaddedtobuffer");for(let e of i)e&&setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this)}),0)},i=()=>{this.isDisposed&&this.disposed||(this._frameLoopTimeoutId2&&clearTimeout(this._frameLoopTimeoutId2),this.refreshInterval<=0||(this._frameLoopTimeoutId2=setTimeout((()=>{this.isDisposed&&this.disposed||(this._bOpen&&this.isFetchingLoopStarted()?(ue._onLog&&ue._onLog("DCE: second timeout executes: "+Date.now()),t(),i()):this.stopFetchingLoop())}),this.refreshInterval)))};e&&(this._frameQueue.length0&&i()):0===this.refreshInterval&&t()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameLoopTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._fetchingLoop(!0)}),this.loopInterval)}startFetchingLoop(){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(this._assertOpen(),this._isSingleFrameModeEnabled())throw Error("'startFetchingLoop()' is unavailable in singleFrameMode.");this.isFetchingLoopStarted()||(this._bFetchingLoopStarted=!0,this._recordedStates.fetchingLoopStart=!0,ue._onLog&&ue._onLog("DCE: start fetching loop: "+Date.now()),this._fetchingLoop(!0))}isFetchingLoopStarted(){return this._bFetchingLoopStarted}stopFetchingLoop(){this._bFetchingLoopStarted&&(ue._onLog&&ue._onLog("DCE: stop fetching loop: "+Date.now()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameQueue.length=0,this._bFetchingLoopStarted=!1,this._recordedStates.fetchingLoopStart=!1)}getFrameFromBuffer(e){return this._frameQueue&&this._frameQueue.length?e?ee.getId()>=0))}getSelectedDrawingItems(){return this._drawingLayersManager.getSelectedDrawingItems()}createDrawingStyle(e){return this._drawingLayersManager.createDrawingStyle(e)}getDrawingStyle(e){return this._drawingLayersManager.getDrawingStyle(e)}getDrawingStyles(){return this._drawingLayersManager.getDrawingStyles()}updateDrawingStyle(e,t){return this._drawingLayersManager.updateDrawingStyle(e,t)}clearDrawingLayers(){const e=this.getDrawingLayers();for(let t of e)this.deleteDrawingLayer(t.getId())}showTip(e,t,i,r,n=3e3,s=!0){this._assertOpen(),this._tipArgs.x=e,this._tipArgs.y=t,this._tipArgs.width=i,this._tipArgs.autoShowSuggestedTip=!!s,this._drawingLayerOfTip||(this._drawingLayerOfTip=this._createDrawingLayer(-1)),this._tipStyleId||(this._tipStyleId=this.createDrawingStyle({fillStyle:"#FFFFFF",paintMode:"fill",fontFamily:"Open Sans",fontSize:40})),this._drawingLayerOfTip.clearDrawingItems();const o=new ne(r||"",e,t,i,this._tipStyleId);o._fabricObject.paddingTop=15,o._fabricObject.calcTextHeight=function(){for(var e=0,t=0,i=this._textLines.length;t0&&(this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}_hideTip(){this._drawingLayerOfTip&&(this.deleteDrawingLayer(this._drawingLayerOfTip.getId()),this._drawingLayerOfTip=null,this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId))}hideTip(){this._hideTip(),this._tipArgs.x=null,this._tipArgs.y=null,this._tipArgs.width=null,this._tipArgs.autoShowSuggestedTip=null}updateTipMessage(e){if(!this._drawingLayerOfTip)throw new Error("The Tip is not showing.");this._drawingLayerOfTip.getDrawingItems()[0].setAttribute("text",e),this._drawingLayerOfTip.renderAll(),this._tipArgs.duration>0&&(this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId),this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}suggestTip(e,t){this._tipArgs.autoShowSuggestedTip&&(this._drawingLayerOfTip?this.updateTipMessage(t):void 0!==this._tipArgs.x&&this.showTip(this._tipArgs.x,this._tipArgs.y,this._tipArgs.width,t,this._tipArgs.duration)),this.onTipSuggested&&setTimeout((()=>{this.isDisposed&&this.disposed||this.onTipSuggested.apply(this,[e,t])}),0)}_createControler(){if(this._controler||(this._controler=new ae(this)),this._controler)return this._controler}_destroyControler(){this._controler=null}setOriginalImage(e,t,i){if(!e||!t||!i)throw new Error("Invalid arguments");this._originalImageData={imageData:e,width:t,height:i};let r=this._cvsOriginalImage;r||(r=document.createElement("canvas"),r.style.position="absolute",r.style.width="100%",r.style.height="100%",r.style.left="0",r.style.top="0",r.style.backgroundColor="white",r.style.objectFit="contain",this._cvsOriginalImage=r),r.width===t&&r.height===i||(r.width=t,r.height=i);const n=r.getContext("2d");n.clearRect(0,0,r.width,r.height),e instanceof Uint8Array||e instanceof Uint8ClampedArray?(e instanceof Uint8Array&&(e=new Uint8ClampedArray(e.buffer)),n.putImageData(new ImageData(e,t,i),0,0)):e instanceof HTMLCanvasElement&&n.drawImage(e,0,0),document.body.contains(r)&&""===r.style.display&&this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"})}getOriginalImage(){return this._originalImageData?Object.assign({},this._originalImageData):null}async deleteOriginalImage(){await this.hideOriginalImage(),this._cvsOriginalImage&&(this._cvsOriginalImage.remove(),this._cvsOriginalImage=null),this._originalImageData=null}_showOriginalImageCvs(){this._cvsOriginalImage&&"none"==this._cvsOriginalImage.style.display&&(this._cvsOriginalImage.style.display="")}_hideOriginalImageCvs(){this._cvsOriginalImage&&(this._cvsOriginalImage.style.display="none")}showOriginalImage(){if(!this._originalImageData)throw new Error("No original image is set.");const e=this._cvsOriginalImage;if(""===e.style.display&&document.body.contains(e))return;const{width:t,height:i}=this._originalImageData;if(this._updateDrawingLayersSize({width:t,height:i,objectFit:"contain"}),this._bOpen&&(this._video&&!this._video.paused&&this._video.pause(),this._bFetchingLoopStarted&&(this.stopFetchingLoop(),this._recordedStates.fetchingLoopStart=!0),this.ifShowScanRegionMask&&this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this.ifShowScanRegionLaser&&this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none"),this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none"),this._selCam&&(this._selCam.parentElement.style.display="none")),!document.body.contains(e))if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(e);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e)}this._showOriginalImageCvs()}async _hideOriginalImage(e){this._originalImageData&&this._cvsOriginalImage&&"none"!==this._cvsOriginalImage.style.display&&(this._updateDrawingLayersSize(),this._bOpen&&e&&(this._video&&this._recordedStates.videoPlaying&&await this.play(null,null,null,{notTriggerSingleFrameClick:!0}),this._recordedStates.fetchingLoopStart&&!this._isSingleFrameModeEnabled()&&this.startFetchingLoop(),this.ifShowScanRegionMask&&this._cvsScanRegion&&this._recordedStates.maskShow&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this._divScanLight&&this._recordedStates.laserShow&&this.showScanRegionLaser(),this._cvsViewDecorator&&this._recordedStates.decoratorShow&&this.showViewDecorator(),this._scanRegionOverlayContainer&&this._recordedStates.overlayShow&&this.showScanRegionOverlays()),this._selCam&&(this._selCam.parentElement.style.display=""),this._hideOriginalImageCvs())}async hideOriginalImage(){return this._hideOriginalImage(!0)}transformCoord(e){if(!this.isOpen())throw new Error("Unavailable when the camera is not open.");if(this._isSingleFrameModeEnabled()&&!this._cvsSingleFrameMode)throw new Error("No image is selected. ");const t=this._elContainer.getBoundingClientRect();let i,r,n,s,o,a=t.left,h=t.top,l=a+window.scrollX,c=h+window.scrollY;this._isSingleFrameModeEnabled()?(i=this._cvsSingleFrameMode.width,r=this._cvsSingleFrameMode.height,n=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).width),s=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).height),o="contain"):(i=this.video.videoWidth,r=this.video.videoHeight,n=parseFloat(window.getComputedStyle(this._elContainer).width),s=parseFloat(window.getComputedStyle(this._elContainer).height),o=this.videoFit);const u=n/s,d=i/r;let f,g,_,p,m=1;if("contain"===o)u({x:t.x-e.left-e.width/2,y:t.y-e.top-e.height/2}))),e.addWithUpdate()}else i.points=t;const r=i.points.length-1;return i.controls=i.points.reduce((function(e,t,i){return e["p"+i]=new j.Control({positionHandler:Q,actionHandler:te(i>0?i-1:r,ee),actionName:"modifyPolygon",pointIndex:i}),e}),{}),i._setPositionDimensions({}),!0}}_extendGet(e){if("startPoint"===e||"endPoint"===e){const t=[],i=this._fabricObject;if(i.selectable&&!i.group)for(let e in i.oCoords)t.push({x:i.oCoords[e].x,y:i.oCoords[e].y});else for(let e of i.points){let r=e.x-i.pathOffset.x,n=e.y-i.pathOffset.y;const s=j.util.transformPoint({x:r,y:n},i.calcTransformMatrix());t.push({x:s.x,y:s.y})}return"startPoint"===e?t[0]:t[1]}}},DT_Group:class extends q{constructor(e){super(new j.Group(e.map((e=>e._getFabricObject())))),this._fabricObject.on("selected",(()=>{this.styleSelector="selected";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("selected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)})),this._fabricObject.on("deselected",(()=>{this.styleSelector="default";const e=this._fabricObject._objects;for(let t of e)setTimeout((()=>{t&&t.fire("deselected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)}))}getChildItems(){return this._fabricObject._objects.map((e=>e.getDrawingItem()))}addChildItem(e){if(!e||!e.isDrawingItem)throw TypeError("Illegal drawing item.");this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"add"):this._fabricObject.addWithUpdate(e._getFabricObject())}removeChildItem(e){e&&e.isDrawingItem&&(this._drawingLayer?this._drawingLayer._updateGroupItem(this,e,"remove"):this._fabricObject.removeWithUpdate(e._getFabricObject()))}}};function fe(e,t,i){return(i.x-e.x)*(t.y-e.y)==(t.x-e.x)*(i.y-e.y)&&Math.min(e.x,t.x)<=i.x&&i.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=i.y&&i.y<=Math.max(e.y,t.y)}function ge(e){return Math.abs(e)<1e-6?0:e<0?-1:1}function _e(e,t,i,r){let n=e[0]*(i[1]-t[1])+t[0]*(e[1]-i[1])+i[0]*(t[1]-e[1]),s=e[0]*(r[1]-t[1])+t[0]*(e[1]-r[1])+r[0]*(t[1]-e[1]);return!((n^s)>=0&&0!==n&&0!==s)&&(n=i[0]*(e[1]-r[1])+r[0]*(i[1]-e[1])+e[0]*(r[1]-i[1]),s=i[0]*(t[1]-r[1])+r[0]*(i[1]-t[1])+t[0]*(r[1]-i[1]),!((n^s)>=0&&0!==n&&0!==s))}var pe,me,ve,ye,Se,be,we,Ce,xe,Te,Ie,Ee,Oe,Ae,De,Re,Me,Le,Fe,Pe,ke,Be,Ne,je,Ve,Ue,Ge,We;class He extends F{constructor(){super(),this._barcodeFillStyle="rgba(254,180,32,0.3)",this._barcodeStrokeStyle="rgba(254,180,32,0.9)",this._barcodeLineWidth=1,this._barcodeFillStyleBeforeVerification="rgba(248,252,0,0.2)",this._barcodeStrokeStyleBeforeVerification="transparent",this._barcodeLineWidthBeforeVerification=2,this.bFilterRegionInJs=!0,this._onPlayed=null}static set _onLog(e){!function(e,t,i,r,n){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===r?n.call(e,i):n?n.value=i:t.set(e,i)}(He,pe,e,"f",me),ue._onLog=e}static get _onLog(){return function(e,t,i,r){if("a"===i&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?r:"a"===i?r.call(e):r?r.value:t.get(e)}(He,pe,"f",me)}static get version(){return this._version+`(DCE ${ue.getVersion()})`}static _fireHTTPSWarnning(){He.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{He.onWarning&&He.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}static async testCameraAccess(){return ue.testCameraAccess()}_fireResolutionWarning(){if(!this.singleFrameMode&&this.onWarning&&this.dce.isOpen()){const e=this.dce.getConstraints();e&&e.width<1280&&e.height<720&&setTimeout((()=>{this.onWarning&&this.onWarning({id:3,message:"Camera resolution too low, please use a higher resolution (720P or better)."})}),0)}}getUIElement(){return this.dce.getUIElement()}async setUIElement(e){await this.dce.setUIElement(e)}get singleFrameMode(){return this.dce.singleFrameMode}set singleFrameMode(e){if("boolean"!=typeof e&&!["image","camera"].includes(e))throw new Error("Invalid value.");this.dce.singleFrameMode=e,e&&(this.dce.ifShowScanRegionLaser=!1,(async()=>{let e=await this.getScanSettings();e.oneDTrustFrameCount=1,await this.updateScanSettings(e)})())}get onUnduplicatedRead(){return this.onUniqueRead}set onUnduplicatedRead(e){this.onUniqueRead=e}get video(){return this.dce&&this.dce.video}set videoSrc(e){this.dce&&(this.dce.videoSrc=e)}get videoSrc(){return this.dce&&this.dce.videoSrc}set onTipSuggested(e){this.dce&&(this.dce.onTipSuggested=e)}get onTipSuggested(){return this.dce&&this.dce.onTipSuggested}_assertOpen(){if(!this.dce.isOpen())throw Error("The scanner is not open.")}set barcodeFillStyle(e){this._barcodeFillStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{fillStyle:e})}get barcodeFillStyle(){return this._barcodeFillStyle}set barcodeStrokeStyle(e){this._barcodeStrokeStyle=e,this.dce&&this.dce.updateDrawingStyle(3,{strokeStyle:e})}get barcodeStrokeStyle(){return this._barcodeStrokeStyle}set barcodeLineWidth(e){this._barcodeLineWidth=e,this.dce&&this.dce.updateDrawingStyle(3,{lineWidth:e})}get barcodeLineWidth(){return this._barcodeLineWidth}set barcodeFillStyleBeforeVerification(e){this._barcodeFillStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{fillStyle:e})}get barcodeFillStyleBeforeVerification(){return this._barcodeFillStyleBeforeVerification}set barcodeStrokeStyleBeforeVerification(e){this._barcodeStrokeStyleBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{strokeStyle:e})}get barcodeStrokeStyleBeforeVerification(){return this._barcodeStrokeStyleBeforeVerification}set barcodeLineWidthBeforeVerification(e){this._barcodeLineWidthBeforeVerification=e,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{lineWidth:e})}get barcodeLineWidthBeforeVerification(){return this._barcodeLineWidthBeforeVerification}set regionMaskFillStyle(e){this.dce.setScanRegionMaskStyle({fillStyle:e})}get regionMaskFillStyle(){return this.dce.regionMaskFillStyle}set regionMaskStrokeStyle(e){this.dce.setScanRegionMaskStyle({strokeStyle:e})}get regionMaskStrokeStyle(){return this.dce.regionMaskStrokeStyle}set regionMaskLineWidth(e){this.dce.setScanRegionMaskStyle({lineWidth:e})}get regionMaskLineWidth(){return this.dce.regionMaskLineWidth}set region(e){this._region=e,this.dce&&(e?e instanceof Array||this.dce.setScanRegion(e):this.dce.setScanRegion(null)),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e,this.dce.framePixelFormat=e?"rgba":"grey"}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}async createDCEInstance(){this.dce||(F._onLog&&F._onLog("createDCEInstance()"),ue.defaultUIElementURL=null,this.dce=await ue.createInstance(),this.dce.refreshInterval=200,this.dce.framePixelFormat="grey",this.dce.maxCvsSideLength=this.maxCvsSideLength,this._drawingItemNamespace=de,["iPhone","iPad","Android","HarmonyOS"].includes(F.browserInfo.OS)||this.dce.setResolution(1920,1080),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"}),this.barcodeLineWidth=this._barcodeLineWidth,this.dce.on("cameraChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("resolutionChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("cameraClose",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1})),this.dce.on("singleFrameAcquired",(async e=>{if(!e)return;if(!e.data)return;let t;this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{data:i,sx:r,sy:n,width:s,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=e,d={timeStamp:l};if("grey"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_GrayScaled,0,d);else if("rgba"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ARGB_8888,0,d)}if(await this.clearMapDecodeRecord(),F.recalculateResultLocation(t,r,n,c,u,s,o),this._drawResults(t),this.onFrameRead&&this.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onFrameRead(e)}if(this.onUniqueRead&&this.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))})))}set maxCvsSideLength(e){this._maxCvsSideLength=e,this.dce.maxCvsSideLength=e}get maxCvsSideLength(){return this._maxCvsSideLength}static async createInstance(e){const t=new He;t._instanceID=await He.createInstanceInWorker(!0),await t.createDCEInstance(),"string"==typeof e&&(e=JSON.parse(e));for(let i in e)t[i]=e[i];return await t.dce.setUIElement(He.defaultUIElementURL),t.singleFrameMode&&console.warn("The `navigator.mediaDevices.getUserMedia` is unavailable. automatically change to `singleFrameMode`."),He._fireHTTPSWarnning(),t.singleFrameMode||await t.updateRuntimeSettings("single"),t}async decodeCurrentFrame(e){this._assertOpen();let t=null;e&&e.region&&(t=e.region);const i=this.dce._getVideoData(null,{region:t});return this._decode_DCEFrame(i)}async updateRuntimeSettings(e){let t;if("string"==typeof e)if("speed"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=0,t.localizationModes=[2,0,0,0,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9}else if("balance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=512,t.deblurLevel=3,t.localizationModes=[2,16,0,0,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else if("coverage"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=512,t.deblurLevel=5,t.scaleDownThreshold=1e5,t.localizationModes=[2,16,4,8,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else if("single"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region)}else if("dense"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=0,t.deblurLevel=7,t.scaleDownThreshold=1e5,t.localizationModes=[2,8,0,0,0,0,0,0],t.minResultConfidence=0,t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else if("distance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,e.region&&(t.region=e.region),t.expectedBarcodesCount=0,t.scaleDownThreshold=1e5,t.localizationModes=[2,8,0,0,0,0,0,0],t.barcodeZoneMinDistanceToImageBorders=9,t.timeout=1e5}else t=JSON.parse(e);else{if("object"!=typeof e)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(t=JSON.parse(JSON.stringify(e)),t.region instanceof Array){let i=e.region;[i.regionLeft,i.regionTop,i.regionLeft,i.regionBottom,i.regionMeasuredByPercentage].some((e=>void 0!==e))&&(t.region={regionLeft:i.regionLeft||0,regionTop:i.regionTop||0,regionRight:i.regionRight||0,regionBottom:i.regionBottom||0,regionMeasuredByPercentage:i.regionMeasuredByPercentage||0})}}if(!F._bUseFullFeature){if(0!=(t.barcodeFormatIds&~(y.BF_ONED|y.BF_QR_CODE|y.BF_PDF417|y.BF_DATAMATRIX))||0!=t.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=t.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}{let e=t.region;if(this.bFilterRegionInJs?this.userDefinedRegion=JSON.parse(JSON.stringify(e)):this.userDefinedRegion=null,e instanceof Array)if(e.length){for(let t=0;t{let r=F._nextTaskID++;F._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.updateReturn)}catch(e){i(e)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),F._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(t)}})})),"string"==typeof e&&["speed","balance","coverage","dense","distance"].includes(e)&&(await this.setModeArgument("BinarizationModes",0,"EnableFillBinaryVacancy","1"),await this.setModeArgument("BinarizationModes",0,"BlockSizeX","0"),await this.setModeArgument("BinarizationModes",0,"BlockSizeY","0"))}_bindUI(){if(!this.getUIElement())throw new Error("Need to define `UIElement` before opening.");if(this.dce._bindUI(),!this.dce.video)throw this._unbindUI(),Error("Can not find the video container element with class 'dce-video-container'")}_unbindUI(){this.dce._unbindUI()}set onPlayed(e){this.dce.off("played",this._onPlayed),this._onPlayed=e,this.dce.on("played",this._onPlayed)}get onPlayed(){return this._onPlayed}async getAllCameras(){return this.dce.getAllCameras()}async getCurrentCamera(){return this.dce.getSelectedCamera()}async setCurrentCamera(e){const t=await this.dce.selectCamera(e);return this._fireResolutionWarning(),t}getResolution(){return this.dce.getResolution()}async setResolution(e,t){const i=await this.dce.setResolution(e,t);return this._fireResolutionWarning(),i}getVideoSettings(){return this.dce.getVideoSettings()}updateVideoSettings(e){return this.dce.updateVideoSettings(e)}isOpen(){return this.dce&&this.dce.isOpen()}setVideoFit(e){return this.dce&&this.dce.setVideoFit(e)}getVideoFit(){return this.dce&&this.dce.getVideoFit()}set ifShowScanRegionMask(e){this.dce&&(this.dce.ifShowScanRegionMask=e)}get ifShowScanRegionMask(){return this.dce&&this.dce.ifShowScanRegionMask}set ifSaveLastUsedCamera(e){this.dce&&(this.dce.ifSaveLastUsedCamera=e)}get ifSaveLastUsedCamera(){return this.dce&&this.dce.ifSaveLastUsedCamera}set ifSkipCameraInspection(e){this.dce&&(this.dce.ifSkipCameraInspection=e)}get ifSkipCameraInspection(){return this.dce&&this.dce.ifSkipCameraInspection}stop(){this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.dce.stop(),this.dce.ifShowScanRegionLaser=!1,this.dce.hideViewDecorator(),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}pause(){this.dce.pause()}async play(e,t,i){this.dce.ifShowScanRegionLaser=!0;const r=await this.dce.play(e,t,i);return this._fireResolutionWarning(),r}pauseScan(e){this._assertOpen(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce.ifShowScanRegionLaser=!1,this.dce.stopFetchingLoop()}resumeScan(){this._assertOpen(),this._bPauseScan=!1,this.dce.ifShowScanRegionLaser=!0}getCapabilities(){return this.dce.getCapabilities()}getCameraSettings(){return this.dce.getCameraSettings()}getConstraints(){return this.dce.getConstraints()}async applyConstraints(e){return this.dce.applyConstraints(e)}async turnOnTorch(){return this.dce.turnOnTorch()}async turnOffTorch(){return this.dce.turnOffTorch()}async setColorTemperature(e){return this.dce.setColorTemperature(e)}getColorTemperature(){return this.dce.getColorTemperature()}async setExposureCompensation(e){return this.dce.setExposureCompensation(e)}getExposureCompensation(){return this.dce.getExposureCompensation()}async setZoom(e){return this.dce.setZoom(e)}getZoomSettings(){return this.dce.getZoomSettings()}resetZoom(){return this.dce.resetZoom()}async setFrameRate(e){return this.dce.setFrameRate(e)}getFrameRate(){return this.dce.getFrameRate()}async setFocus(e,t){return this.dce.setFocus(e,t)}getFocus(){return this.dce.getFocus()}getFocusSettings(){return this.dce.getFocusSettings()}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this.dce.stopFetchingLoop(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(!this.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce.video||this.dce.video.paused||this._bPauseScan)return F._onLog&&F._onLog("Video or scan is paused. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));F._onLog&&F._onLog("======= once read ======="),F._onLog&&(this._timeStartDecode=Date.now());const e=this._getVideoFrame();if(!e)return F._onLog&&F._onLog("Get invalid frame."),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{e._bUseWebGL||"grey"!==e.pixelFormat||(this.dce.framePixelFormat="rgba");let t=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{data:i,sx:r,sy:n,width:s,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=e,d={timeStamp:l};if("grey"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_GrayScaled,0,d);else if("rgba"===h)t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);t=await this._decodeBuffer_Uint8Array(i,s,o,a,p.IPF_ARGB_8888,0,d)}if(F.recalculateResultLocation(t,r,n,c,u,s,o),0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration)),this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan&&(this.autoZoom||this.autoFocus||this.autoSuggestTip))if(t.length)this.autoZoomInFrameArray.length=0,this.autoZoomOutFrameCount=0,this.frameArrayInIdealZoom.length=0,this.suggestTipFrameArray.length=0,this.autoZoom&&this.autoFocus&&(this.nextActionInIdealZoom="focus"),this.autoFocusFrameArray.length=0,this.noIntermediateResultsCount=0;else{const e=async()=>new Promise(((e,t)=>{let i=F._nextTaskID++;F._taskCallbackMap.set(i,(i=>{if(i.success)return e(i.results);{let e=new Error(i.message);return e.stack=i.stack+"\n"+e.stack,t(e)}})),F._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!1}})})),t=await e(),i=(e,t,i,r,n,s,o)=>{let a=s/r,h=o/n;e.x1=e.x1/a+t,e.x2=e.x2/a+t,e.x3=e.x3/a+t,e.x4=e.x4/a+t,e.y1=e.y1/h+i,e.y2=e.y2/h+i,e.y3=e.y3/h+i,e.y4=e.y4/h+i},a=e=>{if(!e)return null;const t={};let a,h,l,d,f;{const e=this.video.videoWidth*(1-this.autoZoomDetectionArea)/2,t=this.video.videoWidth*(1+this.autoZoomDetectionArea)/2,i=t,r=e,n=this.video.videoHeight*(1-this.autoZoomDetectionArea)/2,s=n,o=this.video.videoHeight*(1+this.autoZoomDetectionArea)/2;f={x1:e,x2:t,x3:i,x4:r,y1:n,y2:s,y3:o,y4:o}}const g=(e,t)=>{const i=(e,t)=>{if(!e&&!t)throw new Error("Invalid arguments.");return function(e,t,i){let r=!1;const n=e.length;if(n<=2)return!1;for(let s=0;s0!=ge(a.y-i)>0&&ge(t-(i-o.y)*(o.x-a.x)/(o.y-a.y)-o.x)<0&&(r=!r)}return r}([{x:t.x1,y:t.y1},{x:t.x2,y:t.y2},{x:t.x3,y:t.y3},{x:t.x4,y:t.y4}],e.x,e.y)},r=(e,t)=>!!(_e([e[0],e[1]],[e[2],e[3]],[t.x1,t.y1],[t.x2,t.y2])||_e([e[0],e[1]],[e[2],e[3]],[t.x2,t.y2],[t.x3,t.y3])||_e([e[0],e[1]],[e[2],e[3]],[t.x3,t.y3],[t.x4,t.y4])||_e([e[0],e[1]],[e[2],e[3]],[t.x4,t.y4],[t.x1,t.y1]));return!!(i({x:e.x1,y:e.y1},t)||i({x:e.x2,y:e.y2},t)||i({x:e.x3,y:e.y3},t)||i({x:e.x4,y:e.y4},t))||(!!(i({x:t.x1,y:t.y1},e)||i({x:t.x2,y:t.y2},e)||i({x:t.x3,y:t.y3},e)||i({x:t.x4,y:t.y4},e))||!!(r([t.x1,t.y1,t.x2,t.y2],e)||r([t.x2,t.y2,t.x3,t.y3],e)||r([t.x3,t.y3,t.x4,t.y4],e)||r([t.x4,t.y4,t.x1,t.y1],e)))},_=[];for(let t of e){if(t.resultType!==S.IRT_TYPED_BARCODE_ZONE)continue;const e=t.scaleDownRatio;for(let a of t.results){if(!a)continue;const t={x1:a.x1=a.x1*e,x2:a.x2=a.x2*e,x3:a.x3=a.x3*e,x4:a.x4=a.x4*e,y1:a.y1=a.y1*e,y2:a.y2=a.y2*e,y3:a.y4=a.y3*e,y4:a.y4=a.y4*e};i(t,r,n,c,u,s,o),g(f,t)&&_.push(a)}}const p=(e=>{if(!e||!e.length)return null;const t=e=>{const t=(e.x1+e.x2+e.x3+e.x4)/4,i=(e.y1+e.y2+e.y3+e.y4)/4;return(t-s/2)*(t-s/2)+(i-o/2)*(i-o/2)};let i,r=e.filter((e=>e.barcodeFormat==y.BF_QR_CODE||e.barcodeFormat==y.BF_DATAMATRIX));if(r.length||(r=e.filter((e=>e.barcodeFormat==y.BF_ONED)),r.length||(r=e)),!r.length)return null;i=r[0];let n=t(i);if(1!=r.length)for(let e=1;e1.1*i.confidence?(i=r[e],n=s):r[e].confidence>.9*i.confidence&&s!0===e)).length>=this.suggestTipFrameLimit[1]){this.suggestTipFrameArray.length=0;const e=h.x3-h.x1,t=h.y3-h.y1;h.result.moduleSizet?e>s*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):e>.6*s&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."):e<=t&&(t>o*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):t>.6*o&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."))}if(this.autoZoom){const e=this.autoZoomIdealArea[1];let t=(1-this.autoZoomTargetBorder)/2;const a=h.x1/c,l=(c-h.x3)/c,d=h.y1/u,f=(u-h.y3)/u;if(a>e&&l>e&&d>e&&f>e&&h.result.moduleSize{}))),this.autoZoomInFrameArray.filter((e=>!0===e)).length>=this.autoZoomInFrameLimit[1]){this.autoZoomInFrameArray.length=0;const e=[(.5-t)/(.5-a),(.5-t)/(.5-l),(.5-t)/(.5-d),(.5-t)/(.5-f)].filter((e=>e>0)),i=Math.min(...e,this.autoZoomInIdealModuleSize/h.result.moduleSize),r=this.dce.getZoomSettings().factor;let n=Math.max(Math.pow(r*i,1/this.autoZoomInMaxTimes),this.autoZoomInMinStep);n=Math.min(n,i);const s=r*n;await this.setZoom({factor:s}),this.dce.clearFrameBuffer()}}else if(this.autoZoomInFrameArray.length=0,this.frameArrayInIdealZoom.push(!0),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.frameArrayInIdealZoom.filter((e=>!0===e)).length>=this.frameLimitInIdealZoom[1])if(this.frameArrayInIdealZoom.length=0,"focus"===this.nextActionInIdealZoom&&this.autoFocus){i(h,r,n,c,u,s,o);try{await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer(),this.nextActionInIdealZoom="zoomOut"}else{if("zoomOut"!==this.nextActionInIdealZoom&&this.autoFocus)throw new Error("Invalid action.");if(this.enableZoomOutInIdealZoom){t=this.autoZoomIdealArea[1]+this.autoZoomOutStepRate_2;const e=[(.5-t)/(.5-a),(.5-t)/(.5-l),(.5-t)/(.5-d),(.5-t)/(.5-f)].filter((e=>e>0));let i=Math.min(...e)*this.dce.getZoomSettings().factor;await this.setZoom({factor:i}),this.dce.clearFrameBuffer(),this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}}}else if(this.autoFocus&&(this.autoFocusFrameArray.push(!0),this.autoFocusFrameArray.splice(0,this.autoFocusFrameArray.length-this.autoFocusFrameLimit[0]),this.autoFocusFrameArray.filter((e=>!0===e)).length>=this.autoFocusFrameLimit[1])){this.autoFocusFrameArray.length=0;try{i(h,r,n,c,u,s,o),await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(e){}this.dce.clearFrameBuffer()}}else if(this.noIntermediateResultsCount++,this.suggestTipFrameArray.push(!1),this.autoZoom){if(this.autoZoomInFrameArray.push(!1),this.autoZoomInFrameArray.splice(0,this.autoZoomInFrameArray.length-this.autoZoomInFrameLimit[0]),this.autoZoomOutFrameCount++,this.frameArrayInIdealZoom.push(!1),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.autoZoomOutFrameCount>=this.autoZoomOutFrameLimit){this.autoZoomOutFrameCount=0;const e=this.getZoomSettings().factor;if(e>this.autoZoomOutMinValue){const t=Math.max((e-1)*this.autoZoomOutStepRate,this.autoZoomOutMinStep),i=Math.max(e-t,this.autoZoomOutMinValue);await this.setZoom({factor:i}),this.dce.clearFrameBuffer()}}this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((e=>{})))}else this.autoFocus&&(this.autoFocusFrameArray.length=0,this.setFocus({mode:"continuous"}).catch((e=>{})))}return t})().then((e=>{if(F._onLog&&F._onLog(e),this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost,i=this._indexCurrentDecodingFrame;const r=()=>{let r=0;if(this.region instanceof Array){let n=0,s=0;n=i+1>=this.region.length?0:i+1,s=n+1>=this.region.length?0:n+1,r=e[n]&&e[n].length&&t[s]&&t[s].length?Math.min(...e[n])-Math.max(...t[s]):0}else if(t&&t.length){let i=Math.min(...e),n=Math.max(...t);i&&n&&(r=i-n)}else r=0;return r>0?r:0};(()=>{if(this.region instanceof Array){for(e[i]&&e[i]instanceof Array||(e[i]=[]);e[i].length>=5;)e[i].shift();e[i].push(this._lastInnerDecodeDuration)}else{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)}})(),this._intervalGetVideoFrame=r()+this.intervalTime,F._onLog&&F._onLog("Next fetching frame loop interval: "+this._intervalGetVideoFrame)}if(this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onFrameRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onFrameRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){F._onLog&&F._onLog("Get frame in parallel.");let t=this.dce.isFetchingLoopStarted();if(this.dce.loopInterval=this._intervalGetVideoFrame,t||this.dce.startFetchingLoop(),!this.dce.numberOfFramesInBuffer)return this.dce.loopInterval=0,null;e=this.dce.getFrameFromBuffer();const i=e=>{if(!e)return;let t=e.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(t)};i(e)}else F._onLog&&F._onLog("Get frame in serial."),this.dce.stopFetchingLoop(),e=this.dce.getFrame();return e}async open(){this._bindUI();const e=await this.dce.open();return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async openVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open();return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}close(){this._drawResults(null),this.dce.close(),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}async show(){this._bindUI();const e=await this.dce.open(!0);return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}async showVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const e=await this.dce.open(!0);return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),e}hide(){this.dce.close(!0),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}showTip(e,t,i,r,n=3e3,s=!0){this.dce&&this.dce.showTip(e,t,i,r,n,s)}hideTip(){this.dce&&this.dce.hideTip()}updateTipMessage(e){this.dce&&this.dce.updateTipMessage(e)}async enableTapToFocus(){this.dce&&this.dce.enableTapToFocus()}disableTapToFocus(){this.dce&&this.dce.disableTapToFocus()}isTapToFocusEnabled(){return this.dce.isTapToFocusEnabled()}convertToPageCoordinates(e){return this.dce.convertToPageCoordinates(e)}convertToClientCoordinates(e){return this.dce.convertToClientCoordinates(e)}destroyContext(){this.close(),this.dce&&this.dce.dispose(!1),this.bDestroyed||super.destroyContext()}}pe=He,me={value:void 0},function(e){e[e.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",e[e.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",e[e.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",e[e.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",e[e.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",e[e.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",e[e.BICM_SKIP=0]="BICM_SKIP",e[e.BICM_REV=2147483648]="BICM_REV"}(ve||(ve={})),function(e){e[e.BCM_AUTO=1]="BCM_AUTO",e[e.BCM_GENERAL=2]="BCM_GENERAL",e[e.BCM_SKIP=0]="BCM_SKIP",e[e.BCM_REV=2147483648]="BCM_REV"}(ye||(ye={})),function(e){e[e.BF2_NULL=0]="BF2_NULL",e[e.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",e[e.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",e[e.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",e[e.BF2_POSTNET=2097152]="BF2_POSTNET",e[e.BF2_PLANET=4194304]="BF2_PLANET",e[e.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",e[e.BF2_RM4SCC=16777216]="BF2_RM4SCC",e[e.BF2_DOTCODE=2]="BF2_DOTCODE",e[e.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",e[e.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",e[e.BF2_PHARMACODE=12]="BF2_PHARMACODE",e[e.BF2_ALL=-1]="BF2_ALL"}(Se||(Se={})),function(e){e[e.BM_AUTO=1]="BM_AUTO",e[e.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",e[e.BM_SKIP=0]="BM_SKIP",e[e.BM_THRESHOLD=4]="BM_THRESHOLD",e[e.BM_REV=2147483648]="BM_REV"}(be||(be={})),function(e){e[e.ECCM_CONTRAST=1]="ECCM_CONTRAST"}(we||(we={})),function(e){e[e.CFM_GENERAL=1]="CFM_GENERAL"}(Ce||(Ce={})),function(e){e[e.CCM_AUTO=1]="CCM_AUTO",e[e.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",e[e.CCM_SKIP=0]="CCM_SKIP",e[e.CCM_REV=2147483648]="CCM_REV"}(xe||(xe={})),function(e){e[e.CICM_GENERAL=1]="CICM_GENERAL",e[e.CICM_SKIP=0]="CICM_SKIP",e[e.CICM_REV=2147483648]="CICM_REV"}(Te||(Te={})),function(e){e[e.CM_IGNORE=1]="CM_IGNORE",e[e.CM_OVERWRITE=2]="CM_OVERWRITE"}(Ie||(Ie={})),function(e){e[e.DM_SKIP=0]="DM_SKIP",e[e.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",e[e.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",e[e.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",e[e.DM_SMOOTHING=8]="DM_SMOOTHING",e[e.DM_MORPHING=16]="DM_MORPHING",e[e.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",e[e.DM_SHARPENING=64]="DM_SHARPENING",e[e.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",e[e.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING"}(Ee||(Ee={})),function(e){e[e.DRM_AUTO=1]="DRM_AUTO",e[e.DRM_GENERAL=2]="DRM_GENERAL",e[e.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",e[e.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",e[e.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",e[e.DRM_SKIP=0]="DRM_SKIP",e[e.DRM_REV=2147483648]="DRM_REV"}(Oe||(Oe={})),function(e){e[e.DPMCRM_AUTO=1]="DPMCRM_AUTO",e[e.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",e[e.DPMCRM_SKIP=0]="DPMCRM_SKIP",e[e.DPMCRM_REV=2147483648]="DPMCRM_REV"}(Ae||(Ae={})),function(e){e[e.GTM_INVERTED=1]="GTM_INVERTED",e[e.GTM_ORIGINAL=2]="GTM_ORIGINAL",e[e.GTM_SKIP=0]="GTM_SKIP",e[e.GTM_REV=2147483648]="GTM_REV"}(De||(De={})),function(e){e[e.IPM_AUTO=1]="IPM_AUTO",e[e.IPM_GENERAL=2]="IPM_GENERAL",e[e.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",e[e.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",e[e.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",e[e.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",e[e.IPM_SKIP=0]="IPM_SKIP",e[e.IPM_REV=2147483648]="IPM_REV"}(Re||(Re={})),function(e){e[e.IRSM_MEMORY=1]="IRSM_MEMORY",e[e.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",e[e.IRSM_BOTH=4]="IRSM_BOTH"}(Me||(Me={})),function(e){e[e.LM_SKIP=0]="LM_SKIP",e[e.LM_AUTO=1]="LM_AUTO",e[e.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",e[e.LM_LINES=8]="LM_LINES",e[e.LM_STATISTICS=4]="LM_STATISTICS",e[e.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",e[e.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",e[e.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",e[e.LM_CENTRE=128]="LM_CENTRE",e[e.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",e[e.LM_REV=2147483648]="LM_REV"}(Le||(Le={})),function(e){e[e.PDFRM_RASTER=1]="PDFRM_RASTER",e[e.PDFRM_AUTO=2]="PDFRM_AUTO",e[e.PDFRM_VECTOR=4]="PDFRM_VECTOR",e[e.PDFRM_REV=2147483648]="PDFRM_REV"}(Fe||(Fe={})),function(e){e[e.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",e[e.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",e[e.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",e[e.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}(Pe||(Pe={})),function(e){e[e.RPM_AUTO=1]="RPM_AUTO",e[e.RPM_GENERAL=2]="RPM_GENERAL",e[e.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",e[e.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",e[e.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",e[e.RPM_SKIP=0]="RPM_SKIP",e[e.RPM_REV=2147483648]="RPM_REV"}(ke||(ke={})),function(e){e[e.RCT_PIXEL=1]="RCT_PIXEL",e[e.RCT_PERCENTAGE=2]="RCT_PERCENTAGE"}(Be||(Be={})),function(e){e[e.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",e[e.RT_RAW_TEXT=1]="RT_RAW_TEXT",e[e.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",e[e.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT"}(Ne||(Ne={})),function(e){e[e.SUM_AUTO=1]="SUM_AUTO",e[e.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",e[e.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",e[e.SUM_SKIP=0]="SUM_SKIP",e[e.SUM_REV=2147483648]="SUM_REV"}(je||(je={})),function(e){e[e.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",e[e.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",e[e.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",e[e.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",e[e.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",e[e.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED"}(Ve||(Ve={})),function(e){e[e.TFM_AUTO=1]="TFM_AUTO",e[e.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",e[e.TFM_SKIP=0]="TFM_SKIP",e[e.TFM_REV=2147483648]="TFM_REV"}(Ue||(Ue={})),function(e){e[e.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",e[e.TROM_POSITION=2]="TROM_POSITION",e[e.TROM_FORMAT=4]="TROM_FORMAT",e[e.TROM_SKIP=0]="TROM_SKIP",e[e.TROM_REV=2147483648]="TROM_REV"}(Ge||(Ge={})),function(e){e[e.TDM_AUTO=1]="TDM_AUTO",e[e.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",e[e.TDM_SKIP=0]="TDM_SKIP",e[e.TDM_REV=2147483648]="TDM_REV"}(We||(We={}));export{F as BarcodeReader,He as BarcodeScanner,ve as EnumBarcodeColourMode,ye as EnumBarcodeComplementMode,y as EnumBarcodeFormat,Se as EnumBarcodeFormat_2,be as EnumBinarizationMode,we as EnumClarityCalculationMethod,Ce as EnumClarityFilterMode,xe as EnumColourClusteringMode,Te as EnumColourConversionMode,Ie as EnumConflictMode,Ae as EnumDPMCodeReadingMode,Ee as EnumDeblurMode,Oe as EnumDeformationResistingMode,m as EnumErrorCode,De as EnumGrayscaleTransformationMode,v as EnumIMResultDataType,p as EnumImagePixelFormat,Re as EnumImagePreprocessingMode,Me as EnumIntermediateResultSavingMode,S as EnumIntermediateResultType,Le as EnumLocalizationMode,Fe as EnumPDFReadingMode,Pe as EnumQRCodeErrorCorrectionLevel,ke as EnumRegionPredetectionMode,Be as EnumResultCoordinateType,Ne as EnumResultType,je as EnumScaleUpMode,Ve as EnumTerminatePhase,Ue as EnumTextFilterMode,Ge as EnumTextResultOrderMode,We as EnumTextureDetectionMode}; diff --git a/dist/dbr.pure.esm.js b/dist/dbr.pure.esm.js index 1dbc229..25ebb65 100644 --- a/dist/dbr.pure.esm.js +++ b/dist/dbr.pure.esm.js @@ -4,18 +4,18 @@ * @website http://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 9.6.31 (js 20230908) + * @version 9.6.32 (js 20231027) * @fileoverview Dynamsoft JavaScript Library for Barcode Reader * More info on DBR JS: https://www.dynamsoft.com/barcode-reader/sdk-javascript/ */ -import{Howl as t}from"dm-howler";const e="undefined"==typeof self,i=e?{}:self;let r,s,n,o,a;if("undefined"!=typeof navigator&&(r=navigator,s=r.userAgent,n=r.platform,o=r.mediaDevices),!e){const t={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:r.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},e={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:n,search:"Win"},Mac:{str:n},Linux:{str:n}};let i="unknownBrowser",o=0,h="unknownOS";for(let e in t){const r=t[e]||{};let n=r.str||s,a=r.search||e,h=r.verStr||s,l=r.verSearch||e;if(l instanceof Array||(l=[l]),-1!=n.indexOf(a)){i=e;for(let t of l){let e=h.indexOf(t);if(-1!=e){o=parseFloat(h.substring(e+t.length+1));break}}break}}for(let t in e){const i=e[t]||{};let r=i.str||s,n=i.search||t;if(-1!=r.indexOf(n)){h=t;break}}"Linux"==h&&-1!=s.indexOf("Windows NT")&&(h="HarmonyOS"),a={browser:i,version:o,OS:h}}e&&(a={browser:"ssr",version:0,OS:"ssr"});const h="undefined"!=typeof WebAssembly&&s&&!(/Safari/.test(s)&&!/Chrome/.test(s)&&/\(.+\s11_2_([2-6]).*\)/.test(s)),l=!("undefined"==typeof Worker),c=!(!o||!o.getUserMedia),u=async()=>{let t=!1;if(c)try{(await o.getUserMedia({video:!0})).getTracks().forEach((t=>{t.stop()})),t=!0}catch(t){}return t};"Chrome"===a.browser&&a.version>66||"Safari"===a.browser&&a.version>13||"OPR"===a.browser&&a.version>43||"Edge"===a.browser&&a.version;const d=(()=>{if(!e&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"})(),f=" is not allowed to change after `createInstance` or `loadWasm` is called.",g=!e&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",_=!e&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",p=t=>{if(null==t)t=[];else{t=t instanceof Array?[...t]:[t];for(let i=0;it&&"object"==typeof t&&"function"==typeof t.then;class w extends Promise{constructor(t){let e,i;super(((t,r)=>{e=t,i=r})),this._s="pending",this.resolve=t=>{this.isPending&&(b(t)?this.task=t:(this._s="fulfilled",e(t)))},this.reject=t=>{this.isPending&&(this._s="rejected",i(t))},this.task=t}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(t){let e;this._task=t,b(t)?e=t:"function"==typeof t&&(e=new Promise(t)),e&&(async()=>{try{const i=await e;t===this._task&&this.resolve(i)}catch(e){t===this._task&&this.reject(e)}})()}get isEmpty(){return null==this._task}}const x=["iPhone","iPad","Android","HarmonyOS"].includes(a.OS)?2048:4096;class T{constructor(){this._instanceID=void 0,this._ifSaveOriginalImageInACanvas=!1,this.oriCanvas=null,this.oriCanvasData=null,this.canvas=null,this.bFilterRegionInJs=!1,this._region=null,this._timeStartDecode=null,this._timeEnterInnerDBR=null,this._timeGetMessage=null,this.decodeRecords={},this.bDestroyed=!1,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._indexCurrentDecodingFrame=0,this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.captureAndDecodeInParallel=!0,this.autoSuggestTip=!1,this.suggestTipFrameArray=[],this.suggestTipFrameLimit=[5,3],this.noIntermediateResultsCount=0,this.noIntermediateResultsTipLimit=100,this.tinyBarcodeTipModuleSizeLimit=3,this.hugeBarcodeTipLimit=.9,this.autoZoomInFrameArray=[],this.autoZoomInFrameLimit=[5,3],this.autoZoomInStepRate=1/3,this.autoZoomInMaxStep=1.5,this.autoZoomInMaxTimes=5,this.autoZoomInMinStep=Math.pow(10,1/this.autoZoomInMaxTimes),this.autoZoomInIdealModuleSize=6,this.autoZoomOutFrameCount=0,this.autoZoomOutFrameLimit=3,this.autoZoomOutStepRate=1/3,this.autoZoomOutMinValue=1,this.autoZoomOutMinStep=2,this.autoZoomOutStepRate_2=.05,this.autoZoomOutMinValue_2=2,this.frameArrayInIdealZoom=[],this.frameLimitInIdealZoom=[5,3],this.enableZoomOutInIdealZoom=!1,this.nextActionInIdealZoom="focus",this.autoFocusFrameArray=[],this.autoFocusFrameLimit=[5,3],this.autoZoomIdealArea=[0,.05],this.autoZoomTargetBorder=.9,this.autoZoomDetectionArea=.5,this.autoZoom=!1,this.autoFocus=!1,this._resultHighlightingDuration=-1,this._dce=null,this._imgSource=null,this._maxCvsSideLength=x,this._promiseStartScan=null,this.beepSound=new t({src:[this._soundSource],onplayerror:(t,e)=>{console.warn(`Sound '${t}' playback failure: ${e}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`license`"+f);i._license=e})(T,t)}static get productKeys(){return this._license}static set productKeys(t){T.license=t}static get handshakeCode(){return this._license}static set handshakeCode(t){T.license=t}static get organizationID(){return this._license}static set organizationID(t){T.license=t}static set sessionPassword(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`sessionPassword`"+f);i._sessionPassword=e})(T,t)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:h,worker:l,getUserMedia:c,camera:await u(),browser:a.browser,version:a.version,OS:a.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(t){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");T._engineResourcePath=(t=>{if(null==t&&(t="./"),!e){let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(t)}static get licenseServer(){return this._licenseServer}static set licenseServer(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`licenseServer`"+f);i._licenseServer=p(e)})(T,t)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+f);i._deviceFriendlyName=e||""})(T,t)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(t){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");T.__bUseFullFeature=t}static isImageSource(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&"getImage"in t}static isDSImage(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&("data"in t&&("width"in t&&("height"in t&&"pixelFormat"in t)))}static isDCEFrame(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&("data"in t&&("region"in t&&("sx"in t&&("sy"in t&&("width"in t&&("height"in t&&(("colorMode"in t||"pixelFormat"in t)&&("timeSpent"in t&&("timeStamp"in t&&("isCropped"in t&&("toCanvas"in t&&("_sWidth"in t&&("_sHeight"in t&&"_bUseWebGL"in t)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(t){this._ifSaveOriginalImageInACanvas=t}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(t){this._region=t,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var t;return null===(t=T._defaultUIElementURL)||void 0===t?void 0:t.replace("@engineResourcePath/",T.engineResourcePath)}static set defaultUIElementURL(t){T._defaultUIElementURL=t}static _fireHTTPSWarnning(){T.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{T.onWarning&&T.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new t({src:[this._soundSource],onplayerror:(t,e)=>{console.warn(`Sound '${t}' playback failure: ${e}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(t){this.bPlaySoundOnSuccessfulRead="never"!==t&&t}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(t){this.bVibrateOnSuccessfulRead="never"!==t&&t}set dce(t){this._dce=t}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(t){this._maxCvsSideLength=t,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",t)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;T._onLog&&T._onLog("_registerDCEControler()");const t=this.dce;this._dceControler=t._createControler();const e=this._dceControler;e.register(this),e.setDisiredValue(this,"refreshInterval",200),e.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(t){"ReferenceError"===t.name&&window&&(window.ResizeObserver=void 0)}const i=t.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{i?i===e._innerSetUI&&(await t.setUIElement(`${r.engineResourcePath}dce.ui.html`),e._innerSetUI=t.getUIElement()):(await t.setUIElement(`${r.engineResourcePath}dbr.ui.html`),e._innerSetUI=t.getUIElement())}catch(e){await t.setUIElement(r.defaultUIElementURL)}else i||await t.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async t=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let e=await this._decode_DCEFrame(t,{bCopyData:!1}),i=null;if(e&&e.length){const{sx:r,sy:s,width:n,height:o,_sWidth:a,_sHeight:h}=t;i=e.map((t=>({localizationResult:JSON.parse(JSON.stringify(t.localizationResult))}))),T.recalculateResultLocation(i,r,s,a,h,n,o)}if(this._drawResults(i,e),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let t of e)this.onUniqueRead(t.barcodeText,this._cloneDecodeResults(t))},t.on("cameraChange",this.callbackCameraChange),t.on("resolutionChange",this.callbackResolutionChange),t.on("cameraClose",this.callbackCameraClose),t.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(T._onLog&&T._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(t,e){if(null==t)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(t&&t.isCameraEnhancer)this.dce=t,await this._registerDCEControler(),this._imgSource=null;else{if(!T.isImageSource(t))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=t}e&&e.resultsHighlightBaseShapes&&(this._drawingItemNamespace=e.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:t,l:e,ls:r,sp:s,rmk:n}=(t=>{const e=t;if(e._pLoad.isEmpty){let t,r,s=e._license||"",n=JSON.parse(JSON.stringify(e._licenseServer)),o=e._sessionPassword,a=0;if(s.startsWith("t")||s.startsWith("f"))a=0;else if(0===s.length||s.startsWith("P")||s.startsWith("L")||s.startsWith("Y")||s.startsWith("A"))a=1;else{a=2;const e=s.indexOf(":");if(-1!=e&&(s=s.substring(e+1)),s.startsWith("DLS2")){let e;try{let t=s.substring(4);t=atob(t),e=JSON.parse(t)}catch(t){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(s=e.handshakeCode?e.handshakeCode:e.organizationID?e.organizationID:"","number"==typeof s&&(s=JSON.stringify(s)),0===n.length){let t=[];e.mainServerURL&&(t[0]=e.mainServerURL),e.standbyServerURL&&(t[1]=e.standbyServerURL),n=p(t)}!o&&e.sessionPassword&&(o=e.sessionPassword),t=e.remark}("200001"===s||s.startsWith("200001-"))&&(n&&n.length||(s="")),s||(a=1)}if(a&&(i.crypto||(r="Please upgrade your browser to support online key."),i.crypto.subtle||(r="Require https to use online key in this browser.")),r){if(1!==a)throw new Error(r);a=0,console.warn(r),e._lastErrorCode=-1,e._lastErrorString=r}return 1===a&&(s="",console.warn("Applying for a public trial license ...")),{lt:a,l:s,ls:n,sp:o,rmk:t}}throw new Error("Can't preprocess license again"+f)})(T);this._pLoad.task=async(i,o)=>{let h=T.engineResourcePath+T._workerName;T.engineResourcePath.startsWith(location.origin)||(h=await fetch(h).then((t=>t.blob())).then((t=>URL.createObjectURL(t)))),T._dbrWorker=new Worker(h),T._dbrWorker.onerror=t=>{let e=new Error(t.message);o(e)},T._dbrWorker.onmessage=async e=>{let r=e.data?e.data:e;switch(r.type){case"log":T._onLog&&T._onLog(r.message);break;case"load":{r.message&&(r.message=r.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let e,s=!1;1===t&&(s=!0,r.message||(r.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),r.success?(T._dbrWorker.onerror=null,T._version=r.version+"(JS "+T._jsVersion+"."+T._jsEditVersion+")",T._onLog&&T._onLog("load dbr worker success"),r.message&&console.warn(r.message)):(e=new Error(r.message),e.stack=r.stack+"\n"+e.stack,e.ltsErrorCode=r.ltsErrorCode,s||111==r.ltsErrorCode&&-1!=r.message.toLowerCase().indexOf("trial license")&&(s=!0)),s&&T.showDialog(r.success?"warn":"error",r.message),r.success?i():o(e);break}case"task":{let t=r.id,e=r.body;try{T._taskCallbackMap.get(t)(e),T._taskCallbackMap.delete(t)}catch(e){throw T._taskCallbackMap.delete(t),e}break}default:T._onLog&&T._onLog(e)}},T._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:T.engineResourcePath,bUseFullFeature:T._bUseFullFeature,bd:T._bWasmDebug,v:T._jsVersion,brtk:!!t,bptk:1===t,l:e,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:a,cv:T.authCacheVersion,fn:T.deviceFriendlyName,ls:r,sp:s,rmk:n})}}await this._pLoad}static async showDialog(t,e){await(async(t,e,i)=>{if(!t._bNeverShowDialog)try{let r=await fetch(t.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let s=await r.text();if(!s.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let n=document.createElement("div");n.innerHTML=s;let o=[];for(let t=0;t{if(t==e.target){a.remove();for(let t of o)t.remove()}}));else if(!l&&t.classList.contains("dls-license-icon-close"))l=t,t.addEventListener("click",(()=>{a.remove();for(let t of o)t.remove()}));else if(!c&&t.classList.contains("dls-license-icon-error"))c=t,"error"!=e&&t.remove();else if(!u&&t.classList.contains("dls-license-icon-warn"))u=t,"warn"!=e&&t.remove();else if(!d&&t.classList.contains("dls-license-msg-content")){d=t;let e=i;for(;e;){let i=e.indexOf("["),r=e.indexOf("]",i),s=e.indexOf("(",r),n=e.indexOf(")",s);if(-1==i||-1==r||-1==s||-1==n){t.appendChild(new Text(e));break}i>0&&t.appendChild(new Text(e.substring(0,i)));let o=document.createElement("a"),a=e.substring(i+1,r);o.innerText=a;let h=e.substring(s+1,n);o.setAttribute("href",h),o.setAttribute("target","_blank"),t.appendChild(o),e=e.substring(n+1)}}document.body.appendChild(a)}catch(e){t._onLog&&t._onLog(e.message||e)}})(this,t,e)}static async createInstanceInWorker(t=!1){return await T.loadWasm(),await new Promise(((e,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(t=>{if(t.success)return e(t.instanceID);{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),T._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:t})}))}static async createInstance(){const t=new T;return t._instanceID=await T.createInstanceInWorker(),T._fireHTTPSWarnning(),t}async clearMapDecodeRecord(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:i,instanceID:this._instanceID})}))}async decode(t){T._onLog&&T._onLog("decode(source: any)"),T._onLog&&(this._timeStartDecode=Date.now());{let e={};return!this.region||this.region instanceof Array||(e.region=JSON.parse(JSON.stringify(this.region))),t instanceof Blob?await this._decode_Blob(t,e):t instanceof ArrayBuffer?await this._decode_ArrayBuffer(t,e):t instanceof Uint8Array||t instanceof Uint8ClampedArray?await this._decode_Uint8Array(t,e):t instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?await this._decode_Image(t,e):t instanceof HTMLCanvasElement?await this._decode_Canvas(t,e):t instanceof HTMLVideoElement?await this._decode_Video(t,e):"string"==typeof t?"data:image/"==t.substring(0,11)?await this._decode_Base64(t,e):await this._decode_Url(t,e):T.isDCEFrame(t)?(e.bCopyData=!0,await this._decode_DCEFrame(t,e)):T.isDSImage(t)?(e.bCopyData=!0,await this._decode_DSImage(t,e)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(t){let e={};return!this.region||this.region instanceof Array||(e.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(t,e)}async decodeUrl(t){let e={};return!this.region||this.region instanceof Array||(e.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(t,e)}async _decodeBuffer_Uint8Array(t,e,i,r,s,n,o){return await new Promise(((a,h)=>{let l=T._nextTaskID++;T._taskCallbackMap.set(l,(t=>{if(t.success){let e,i=T._onLog?Date.now():0;T._onLog&&T._onLog("worker return result: "+i),this._lastInnerDecodeDuration=t.duration;try{e=this._handleRetJsonString(t.decodeReturn)}catch(t){return h(t)}if(T._onLog){let t=Date.now();T._onLog("DBR getting message from worker timestamp: "+i),T._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),T._onLog("From DBR entering worker to returning message from worker costs: "+(i-this._timeEnterInnerDBR)),T._onLog("Handling results from DBR worker costs: "+(t-i)),T._onLog("Total decoding image costs: "+(t-this._timeStartDecode))}return a(e)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,h(e)}})),this._timeEnterInnerDBR=Date.now(),T._onLog&&T._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),T._dbrWorker.postMessage({type:"decodeBuffer",id:l,instanceID:this._instanceID,body:{buffer:t,width:e,height:i,stride:r,format:s,orientation:n,config:o}},[t.buffer]),T._onLog&&o&&o.timeStamp&&T._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-o.timeStamp))}))}async _decodeBuffer_Blob(t,e,i,r,s,n,o){T._onLog&&T._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const a=t.arrayBuffer?await t.arrayBuffer():await new Promise(((e,i)=>{let r=new FileReader;r.readAsArrayBuffer(t),r.onload=()=>{e(r.result)},r.onerror=()=>{i(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(a),e,i,r,s,n,o)}async decodeBuffer(t,e,i,r,s,n,o){let a;return T._onLog&&T._onLog("decodeBuffer(buffer,width,height,stride,format)"),T._onLog&&(this._timeStartDecode=Date.now()),t instanceof Uint8Array||t instanceof Uint8ClampedArray?a=await this._decodeBuffer_Uint8Array(t,e,i,r,s,n,o):t instanceof ArrayBuffer?a=await this._decodeBuffer_Uint8Array(new Uint8Array(t),e,i,r,s,n,o):t instanceof Blob&&(a=await this._decodeBuffer_Blob(t,e,i,r,s,n,o)),a}async _decodeFileInMemory_Uint8Array(t){return await new Promise(((e,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(t=>{if(t.success){let r;this._lastInnerDecodeDuration=t.duration;try{r=this._handleRetJsonString(t.decodeReturn)}catch(t){return i(t)}return e(r)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),T._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:t}})}))}async getRuntimeSettings(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success){let e=JSON.parse(i.results);return null!=this.userDefinedRegion&&(e.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),t(e)}{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"getRuntimeSettings",id:i,instanceID:this._instanceID})}))}async updateRuntimeSettings(t){let e;if("string"==typeof t)if("speed"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=3,e.expectedBarcodesCount=0,e.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=5,e.expectedBarcodesCount=512,e.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region}else if("dense"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=9,e.expectedBarcodesCount=0,e.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=3,e.expectedBarcodesCount=0,e.localizationModes=[2,8,0,0,0,0,0,0]}else e=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(e=JSON.parse(JSON.stringify(t)),e.region instanceof Array){let t=e.region;[t.regionLeft,t.regionTop,t.regionLeft,t.regionBottom,t.regionMeasuredByPercentage].some((t=>void 0!==t))&&(e.region={regionLeft:t.regionLeft||0,regionTop:t.regionTop||0,regionRight:t.regionRight||0,regionBottom:t.regionBottom||0,regionMeasuredByPercentage:t.regionMeasuredByPercentage||0})}}if(!T._bUseFullFeature){if(0!=(e.barcodeFormatIds&~(S.BF_ONED|S.BF_QR_CODE|S.BF_PDF417|S.BF_DATAMATRIX))||0!=e.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=e.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let t=e.region;if(t instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(t)),(t.regionLeft||t.regionTop||t.regionRight||t.regionBottom||t.regionMeasuredByPercentage)&&(t.regionLeft||t.regionTop||100!=t.regionRight||100!=t.regionBottom||!t.regionMeasuredByPercentage)?this.region=t:this.region=null,e.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(e.intermediateResultTypes|=C.IRT_TYPED_BARCODE_ZONE),await new Promise(((t,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.updateReturn)}catch(t){i(t)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),T._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(e)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=x,await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"resetRuntimeSettings",id:i,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=x,await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:i,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!T._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t(i.results);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:i,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(t){if(!T._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof t)t=t;else{if("object"!=typeof t)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");t=JSON.stringify(t)}return await new Promise(((e,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.initReturn)}catch(t){i(t)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),T._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:t}})}))}async _decode_Blob(t,e){T._onLog&&T._onLog("_decode_Blob(blob: Blob)");let i=null,r=null;if("undefined"!=typeof createImageBitmap)try{i=await createImageBitmap(t)}catch(t){}i||(r=await function(t){return new Promise(((e,i)=>{let r=URL.createObjectURL(t),s=new Image;s.dbrObjUrl=r,s.src=r,s.onload=()=>{e(s)},s.onerror=t=>{i(new Error("Can't convert blob to image : "+(t instanceof Event?t.type:t)))}}))}(t));let s=await this._decode_Image(i||r,e);return i&&i.close(),s}async _decode_ArrayBuffer(t,e){return await this._decode_Blob(new Blob([t]),e)}async _decode_Uint8Array(t,e){return await this._decode_Blob(new Blob([t]),e)}async _decode_Image(t,e){T._onLog&&T._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),e=e||{};let i,r,s=t instanceof HTMLImageElement?t.naturalWidth:t.width,n=t instanceof HTMLImageElement?t.naturalHeight:t.height,o=Math.max(s,n);if(o>this._maxCvsSideLength){let t=this._maxCvsSideLength/o;i=Math.round(s*t),r=Math.round(n*t)}else i=s,r=n;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(t,0,0,s,n,0,0,i,r),t.dbrObjUrl&&URL.revokeObjectURL(t.dbrObjUrl);let h=await this._decode_Canvas(a,e);if(this.ifSaveOriginalImageInACanvas){const e=document.createElement("canvas");e.width=t.width,e.height=t.height;e.getContext("2d").drawImage(t,0,0),this.oriCanvas=e,this.oriCanvasData=null}return T.recalculateResultLocation(h,0,0,s,n,i,r),h}async _decode_Canvas(t,e){if(T._onLog&&T._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";if(0===t.width||0===t.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=t,this.oriCanvasData=null);let i=(t.ctx2d||t.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,t.width,t.height).data;return await this._decodeBuffer_Uint8Array(i,t.width,t.height,4*t.width,m.IPF_ABGR_8888,0,e)}async _decode_Video(t,e){if(T._onLog&&T._onLog("_decode_Video(video)"),!(t instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";e=e||{};let i,r,s=t.videoWidth,n=t.videoHeight,o=Math.max(s,n);if(o>this._maxCvsSideLength){let t=this._maxCvsSideLength/o;i=Math.round(s*t),r=Math.round(n*t)}else i=s,r=n;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(t,0,0,s,n,0,0,i,r);let h=await this._decode_Canvas(a,e);if(this.ifSaveOriginalImageInACanvas){const e=document.createElement("canvas");e.width=t.videoWidth,e.height=t.videoHeight;e.getContext("2d").drawImage(t,0,0),this.oriCanvas=e,this.oriCanvasData=null}return T.recalculateResultLocation(h,0,0,s,n,i,r),h}async _decode_DCEFrame(t,e){if(T._onLog&&T._onLog("_decode_DCEFrame(dceFrame)"),!T.isDCEFrame(t))return[];let i=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,colorMode:t.colorMode,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{width:r,height:s,colorMode:n,pixelFormat:o,stride:a,timeStamp:h}=t;let l;l=e&&e.bCopyData?new Uint8Array(t.data):t.data;let c=null;if(e?(c=JSON.parse(JSON.stringify(e)),c.timeStamp=h):c={timeStamp:h},o&&a)if("grey"===o)i=await this._decodeBuffer_Uint8Array(l,r,s,a,m.IPF_GrayScaled,0,c);else if("rgba"===o)i=await this._decodeBuffer_Uint8Array(l,r,s,a,m.IPF_ABGR_8888,0,c);else{if("bgra"!==o)throw new Error(`Pixel format '${o}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,s,a,m.IPF_ARGB_8888,0,c)}else if("grey"===n)i=await this._decodeBuffer_Uint8Array(l,r,s,r,m.IPF_GrayScaled,0,c);else if("rgba"===n)i=await this._decodeBuffer_Uint8Array(l,r,s,4*r,m.IPF_ABGR_8888,0,c);else{if("bgra"!==n)throw new Error(`Color mode '${n}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,s,4*r,m.IPF_ARGB_8888,0,c)}return i}async _decode_DSImage(t,e){if(T._onLog&&T._onLog("_decode_DSImage(dsImage)"),!T.isDSImage(t))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat.toLowerCase(),data:new Uint8Array(t.data),toCanvas:function(){const t=document.createElement("canvas");let e;switch(t.width=this.width,t.height=this.height,this.pixelFormat){case"grey":e=new Uint8ClampedArray(this.width*this.height*4);for(let t=0;t{let r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{e(r.response)},r.onerror=()=>{i(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(i,e)}}async _decode_FilePath(t,e){throw T._onLog&&T._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(t,e,i,r,s,n,o){if(t.length>0)for(let a of t){let t=a.localizationResult;2==t.resultCoordinateType&&(t.x1*=.01*n,t.x2*=.01*n,t.x3*=.01*n,t.x4*=.01*n,t.y1*=.01*o,t.y2*=.01*o,t.y3*=.01*o,t.y4*=.01*o);let h=n/r,l=o/s;t.x1=t.x1/h+e,t.x2=t.x2/h+e,t.x3=t.x3/h+e,t.x4=t.x4/h+e,t.y1=t.y1/l+i,t.y2=t.y2/l+i,t.y3=t.y3/l+i,t.y4=t.y4/l+i,2==t.resultCoordinateType&&(t.x1*=100/r,t.x2*=100/r,t.x3*=100/r,t.x4*=100/r,t.y1*=100/s,t.y2*=100/s,t.y3*=100/s,t.y4*=100/s),t.x1=Math.round(t.x1),t.x2=Math.round(t.x2),t.x3=Math.round(t.x3),t.x4=Math.round(t.x4),t.y1=Math.round(t.y1),t.y2=Math.round(t.y2),t.y3=Math.round(t.y3),t.y4=Math.round(t.y4)}}static BarcodeReaderException(t,e){let i,r=v.DBR_UNKNOWN;return"number"==typeof t?(r=t,i=new Error(e)):i=new Error(t),i.code=r,i}_handleRetJsonString(t){let e=v;if(t.textResults){for(let e=0;e{let i=e.indexOf(":");t[e.substring(0,i)]=e.substring(i+1)})),i.exception=t}}return t.decodeRecords?this.decodeRecords=t.decodeRecords:this.decodeRecords={},this._lastErrorCode=t.exception,this._lastErrorString=t.description,t.exception&&!T._setWarnnedEx.has(t.description)&&(T._setWarnnedEx.add(t.description),console.warn(t.description)),t.textResults}if(t.exception==e.DBR_SUCCESS)return t.data;throw T.BarcodeReaderException(t.exception,t.description)}async setModeArgument(t,e,i,r){return await new Promise(((s,n)=>{let o=T._nextTaskID++;T._taskCallbackMap.set(o,(t=>{if(t.success){try{this._handleRetJsonString(t.setReturn)}catch(t){return n(t)}return s()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,n(e)}})),T._dbrWorker.postMessage({type:"setModeArgument",id:o,instanceID:this._instanceID,body:{modeName:t,index:e,argumentName:i,argumentValue:r}})}))}async getModeArgument(t,e,i){return await new Promise(((r,s)=>{let n=T._nextTaskID++;T._taskCallbackMap.set(n,(t=>{if(t.success){let e;try{e=this._handleRetJsonString(t.getReturn)}catch(t){return s(t)}return r(e)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,s(e)}})),T._dbrWorker.postMessage({type:"getModeArgument",id:n,instanceID:this._instanceID,body:{modeName:t,index:e,argumentName:i}})}))}async getIntermediateResults(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t(i.results);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let t=await this.getIntermediateResults(),e=[];for(let i of t)if(i.dataType==y.IMRDT_IMAGE)for(let t of i.results){const i=t.bytes;let r;switch(T._onLog&&T._onLog(" "+i.length+" "+i.byteLength+" "+t.width+" "+t.height+" "+t.stride+" "+t.format),t.format){case m.IPF_ABGR_8888:r=new Uint8ClampedArray(i);break;case m.IPF_RGB_888:{const t=i.length/3;r=new Uint8ClampedArray(4*t);for(let e=0;e=s)break;r[o]=r[o+1]=r[o+2]=(128&e)/128*255,r[o+3]=255,e<<=1}}break}default:console.warn("unknow intermediate image",t)}if(!r)continue;let s=new ImageData(r,t.width,t.height),n=document.createElement("canvas");n.width=t.width,n.height=t.height,n.getContext("2d").putImageData(s,0,0),e.push(n)}return e}async getScanSettings(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success){let e=i.results;return e.intervalTime=this.intervalTime,e.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,e.soundOnSuccessfullRead=this.soundSource,e.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,e.vibrateDuration=this.vibrateDuration,e.captureAndDecodeInParallel=this.captureAndDecodeInParallel,e.autoZoom=this.autoZoom,e.autoFocus=this.autoFocus,e.autoSuggestTip=this.autoSuggestTip,t(e)}{let t=new Error(i.message);return t.stack+="\n"+i.stack,e(t)}})),T._dbrWorker.postMessage({type:"getScanSettings",id:i,instanceID:this._instanceID})}))}async updateScanSettings(t){if(!t)return;const e=JSON.parse(JSON.stringify(t));if(e.autoZoom||e.autoFocus||e.autoSuggestTip){if(!T._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const t=await this.getRuntimeSettings();t.intermediateResultTypes|=C.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(t)}return e.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(e.intervalTime,0),delete e.intervalTime),e.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=e.whenToPlaySoundforSuccessfulRead,delete e.whenToPlaySoundforSuccessfulRead),e.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=e.soundOnSuccessfullRead,delete e.soundOnSuccessfullRead),e.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=e.whenToVibrateforSuccessfulRead,delete e.whenToVibrateforSuccessfulRead),e.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=e.vibrateDuration,delete e.vibrateDuration),e.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=e.captureAndDecodeInParallel,delete e.captureAndDecodeInParallel),e.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=e.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=e.autoZoom,delete e.autoZoom),e.hasOwnProperty("autoFocus")&&(this.autoFocus=e.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete e.autoFocus),e.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=e.autoSuggestTip,delete e.autoFocus),await new Promise(((t,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack+="\n"+e.stack,i(t)}})),T._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:e}})}))}_cloneDecodeResults(t){if(t instanceof Array){let e=[];for(let i of t)e.push(this._cloneDecodeResults(i));return e}{let e=t,i=JSON.parse(JSON.stringify(e,((t,e)=>"oriVideoCanvas"==t||"searchRegionCanvas"==t?void 0:e)));return i}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return T._onLog&&T._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));T._onLog&&T._onLog("======= once read ======="),T._onLog&&(this._timeStartDecode=Date.now());let t=null,e=null;if(this.dce)t=this._getVideoFrame();else if(this._imgSource&&(e=await this._imgSource.getImage(),!T.isDSImage(e)))throw new Error("Invalid DSImage.");if(!t&&!e)return T._onLog&&T._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let i=[];if(t){i=await this._decode_DCEFrame(t,{bScanner:!0,bCopyData:!1});let e=null;if(i&&i.length){const{sx:r,sy:s,width:n,height:o,_sWidth:a,_sHeight:h}=t;e=i.map((t=>({resultState:t.resultState,localizationResult:JSON.parse(JSON.stringify(t.localizationResult))}))),T.recalculateResultLocation(e,r,s,a,h,n,o)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(e,i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else e&&(i=await this._decode_DSImage(e,{bScanner:!0,bCopyData:!1}));return i})().then((t=>{if(T._onLog&&T._onLog(t),this.dce&&this.captureAndDecodeInParallel){let t=this.array_decodeFrameTimeCost,e=this.array_getFrameTimeCost;const i=()=>{let i=0;if(e&&e.length){let r=Math.min(...t),s=Math.max(...e);r&&s&&(i=r-s)}else i=0;return i>0?i:0};(()=>{for(;t.length>=5;)t.shift();t.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=i()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&t.length){let e=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&t.length){let e=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e)try{navigator.vibrate(this.vibrateDuration)}catch(t){console.warn("Vibration not allowed. User interaction required: "+(t.message||t))}}if(this.onImageRead){t=t.filter((t=>t.resultState>=0));const e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead){t=t.filter((t=>0==t.resultState));const e=this._cloneDecodeResults(t);for(let t of e)this.onUniqueRead(t.barcodeText,t)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((t=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),T._onLog&&T._onLog(t.message||t),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==t.message||console.warn(t.message)}))}_getVideoFrame(){if(!this.dce)return null;let t;if(this.captureAndDecodeInParallel){if(T._onLog&&T._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;t=this.dce.getFrameFromBuffer();const e=t=>{if(!t)return;let e=t.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(e)};e(t)}else T._onLog&&T._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),t=this.dce.getFrame();return t}_drawResults(t,e){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const i=this._dbrDrawingLayer;t||(t=[]);let r=this._arrPolygons;for(let s=0;s{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(e),e}stopScanning(t){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[t]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(t){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),t&&t.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(T._onLog&&T._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let t=T._nextTaskID++;T._taskCallbackMap.set(t,(t=>{if(!t.success){let e=new Error(t.message);throw e.stack=t.stack+"\n"+e.stack,e}})),T._dbrWorker.postMessage({type:"destroyContext",id:t,instanceID:this._instanceID})}}T._jsVersion="9.6.31",T._jsEditVersion="20230908",T._version=`loading...(JS ${T._jsVersion}.${T._jsEditVersion})`,T._license=g,T._sessionPassword=_,T.browserInfo=a,T._workerName=`dbr-${T._jsVersion}.browser.worker.js`,T._engineResourcePath=d,T._licenseServer=[],T._deviceFriendlyName="",T._isShowRelDecodeTimeInResults=!1,T._bWasmDebug=!1,T._bNeverShowDialog=!1,T.__bUseFullFeature=!0,T._nextTaskID=0,T._taskCallbackMap=new Map,T._pLoad=new w,T._lastErrorCode=0,T._lastErrorString="",T._setWarnnedEx=new Set,T._defaultUIElementURL="@engineResourcePath/dbr.ui.html";var I={653:(t,e,i)=>{var r,s,n,o,a,h,l,c,u,d,f,g,_,p,m,v,y,S,C,b,w,x=x||{version:"5.2.1"};if(e.fabric=x,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?x.document=document:x.document=document.implementation.createHTMLDocument(""),x.window=window;else{var T=new(i(192).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;x.document=T.document,x.jsdomImplForWrapper=i(898).implForWrapper,x.nodeCanvas=i(245).Canvas,x.window=T,DOMParser=x.window.DOMParser}function I(t,e){var i=t.canvas,r=e.targetCanvas,s=r.getContext("2d");s.translate(0,r.height),s.scale(1,-1);var n=i.height-r.height;s.drawImage(i,0,n,r.width,r.height,0,0,r.width,r.height)}function E(t,e){var i=e.targetCanvas.getContext("2d"),r=e.destinationWidth,s=e.destinationHeight,n=r*s*4,o=new Uint8Array(this.imageBuffer,0,n),a=new Uint8ClampedArray(this.imageBuffer,0,n);t.readPixels(0,0,r,s,t.RGBA,t.UNSIGNED_BYTE,o);var h=new ImageData(a,r,s);i.putImageData(h,0,0)}x.isTouchSupported="ontouchstart"in x.window||"ontouchstart"in x.document||x.window&&x.window.navigator&&x.window.navigator.maxTouchPoints>0,x.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,x.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],x.DPI=96,x.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",x.commaWsp="(?:\\s+,?\\s*|,\\s*)",x.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,x.reNonWord=/[ \n\.,;!\?\-]/,x.fontPaths={},x.iMatrix=[1,0,0,1,0,0],x.svgNS="http://www.w3.org/2000/svg",x.perfLimitSizeTotal=2097152,x.maxCacheSideLimit=4096,x.minCacheSideLimit=256,x.charWidthsCache={},x.textureSize=2048,x.disableStyleCopyPaste=!1,x.enableGLFiltering=!0,x.devicePixelRatio=x.window.devicePixelRatio||x.window.webkitDevicePixelRatio||x.window.mozDevicePixelRatio||1,x.browserShadowBlurConstant=1,x.arcToSegmentsCache={},x.boundsOfCurveCache={},x.cachesBoundsOfCurve=!0,x.forceGLPutImageData=!1,x.initFilterBackend=function(){return x.enableGLFiltering&&x.isWebglSupported&&x.isWebglSupported(x.textureSize)?(console.log("max texture size: "+x.maxTextureSize),new x.WebglFilterBackend({tileSize:x.textureSize})):x.Canvas2dFilterBackend?new x.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=x),function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:x.util.array.fill(i,!1)}}function e(t,e){var i=function(){e.apply(this,arguments),this.off(t,i)}.bind(this);this.on(t,i)}x.Observable={fire:function(t,e){if(!this.__eventListeners)return this;var i=this.__eventListeners[t];if(!i)return this;for(var r=0,s=i.length;r-1||!!e&&this._objects.some((function(e){return"function"==typeof e.contains&&e.contains(t,!0)}))},complexity:function(){return this._objects.reduce((function(t,e){return t+(e.complexity?e.complexity():0)}),0)}},x.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof x.Gradient||this.set(e,new x.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof x.Pattern?i&&i():this.set(e,new x.Pattern(t,i))},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},r=e,s=Math.sqrt,n=Math.atan2,o=Math.pow,a=Math.PI/180,h=Math.PI/2,x.util={cos:function(t){if(0===t)return 1;switch(t<0&&(t=-t),t/h){case 1:case 3:return 0;case 2:return-1}return Math.cos(t)},sin:function(t){if(0===t)return 0;var e=1;switch(t<0&&(e=-1),t/h){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(t)},removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*a},radiansToDegrees:function(t){return t/a},rotatePoint:function(t,e,i){var r=new x.Point(t.x-e.x,t.y-e.y),s=x.util.rotateVector(r,i);return new x.Point(s.x,s.y).addEquals(e)},rotateVector:function(t,e){var i=x.util.sin(e),r=x.util.cos(e);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},createVector:function(t,e){return new x.Point(e.x-t.x,e.y-t.y)},calcAngleBetweenVectors:function(t,e){return Math.acos((t.x*e.x+t.y*e.y)/(Math.hypot(t.x,t.y)*Math.hypot(e.x,e.y)))},getHatVector:function(t){return new x.Point(t.x,t.y).multiply(1/Math.hypot(t.x,t.y))},getBisector:function(t,e,i){var r=x.util.createVector(t,e),s=x.util.createVector(t,i),n=x.util.calcAngleBetweenVectors(r,s),o=n*(0===x.util.calcAngleBetweenVectors(x.util.rotateVector(r,n),s)?1:-1)/2;return{vector:x.util.getHatVector(x.util.rotateVector(r,o)),angle:n}},projectStrokeOnPoints:function(t,e,i){var r=[],s=e.strokeWidth/2,n=e.strokeUniform?new x.Point(1/e.scaleX,1/e.scaleY):new x.Point(1,1),o=function(t){var e=s/Math.hypot(t.x,t.y);return new x.Point(t.x*e*n.x,t.y*e*n.y)};return t.length<=1||t.forEach((function(a,h){var l,c,u=new x.Point(a.x,a.y);0===h?(c=t[h+1],l=i?o(x.util.createVector(c,u)).addEquals(u):t[t.length-1]):h===t.length-1?(l=t[h-1],c=i?o(x.util.createVector(l,u)).addEquals(u):t[0]):(l=t[h-1],c=t[h+1]);var d,f,g=x.util.getBisector(u,l,c),_=g.vector,p=g.angle;if("miter"===e.strokeLineJoin&&(d=-s/Math.sin(p/2),f=new x.Point(_.x*d*n.x,_.y*d*n.y),Math.hypot(f.x,f.y)/s<=e.strokeMiterLimit))return r.push(u.add(f)),void r.push(u.subtract(f));d=-s*Math.SQRT2,f=new x.Point(_.x*d*n.x,_.y*d*n.y),r.push(u.add(f)),r.push(u.subtract(f))})),r},transformPoint:function(t,e,i){return i?new x.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new x.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t,e){if(e)for(var i=0;i0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var s,n=!0,o=t.getImageData(e,i,2*r||1,2*r||1),a=o.data.length;for(s=3;s=s?n-s:2*Math.PI-(s-n)}function n(t,e,i){for(var n=i[1],o=i[2],a=i[3],h=i[4],l=i[5],c=function(t,e,i,n,o,a,h){var l=Math.PI,c=h*l/180,u=x.util.sin(c),d=x.util.cos(c),f=0,g=0,_=-d*t*.5-u*e*.5,p=-d*e*.5+u*t*.5,m=(i=Math.abs(i))*i,v=(n=Math.abs(n))*n,y=p*p,S=_*_,C=m*v-m*y-v*S,b=0;if(C<0){var w=Math.sqrt(1-C/(m*v));i*=w,n*=w}else b=(o===a?-1:1)*Math.sqrt(C/(m*y+v*S));var T=b*i*p/n,I=-b*n*_/i,E=d*T-u*I+.5*t,O=u*T+d*I+.5*e,R=s(1,0,(_-T)/i,(p-I)/n),D=s((_-T)/i,(p-I)/n,(-_-T)/i,(-p-I)/n);0===a&&D>0?D-=2*l:1===a&&D<0&&(D+=2*l);for(var A=Math.ceil(Math.abs(D/l*2)),M=[],F=D/A,L=8/3*Math.sin(F/4)*Math.sin(F/4)/Math.sin(F/2),P=R+F,k=0;kb)for(var T=1,I=_.length;T2;for(e=e||0,l&&(a=t[2].xt[i-2].x?1:s.x===t[i-2].x?0:-1,h=s.y>t[i-2].y?1:s.y===t[i-2].y?0:-1),r.push(["L",s.x+a*e,s.y+h*e]),r},x.util.getPathSegmentsInfo=d,x.util.getBoundsOfCurve=function(e,i,r,s,n,o,a,h){var l;if(x.cachesBoundsOfCurve&&(l=t.call(arguments),x.boundsOfCurveCache[l]))return x.boundsOfCurveCache[l];var c,u,d,f,g,_,p,m,v=Math.sqrt,y=Math.min,S=Math.max,C=Math.abs,b=[],w=[[],[]];u=6*e-12*r+6*n,c=-3*e+9*r-9*n+3*a,d=3*r-3*e;for(var T=0;T<2;++T)if(T>0&&(u=6*i-12*s+6*o,c=-3*i+9*s-9*o+3*h,d=3*s-3*i),C(c)<1e-12){if(C(u)<1e-12)continue;0<(f=-d/u)&&f<1&&b.push(f)}else(p=u*u-4*d*c)<0||(0<(g=(-u+(m=v(p)))/(2*c))&&g<1&&b.push(g),0<(_=(-u-m)/(2*c))&&_<1&&b.push(_));for(var I,E,O,R=b.length,D=R;R--;)I=(O=1-(f=b[R]))*O*O*e+3*O*O*f*r+3*O*f*f*n+f*f*f*a,w[0][R]=I,E=O*O*O*i+3*O*O*f*s+3*O*f*f*o+f*f*f*h,w[1][R]=E;w[0][D]=e,w[1][D]=i,w[0][D+1]=a,w[1][D+1]=h;var A=[{x:y.apply(null,w[0]),y:y.apply(null,w[1])},{x:S.apply(null,w[0]),y:S.apply(null,w[1])}];return x.cachesBoundsOfCurve&&(x.boundsOfCurveCache[l]=A),A},x.util.getPointOnPath=function(t,e,i){i||(i=d(t));for(var r=0;e-i[r].length>0&&r1e-4;)i=h(n),s=n,(r=o(l.x,l.y,i.x,i.y))+a>e?(n-=c,c/=2):(l=i,n+=c,a+=r);return i.angle=u(s),i}(n,e)}},x.util.transformPath=function(t,e,i){return i&&(e=x.util.multiplyTransformMatrices(e,[1,0,0,1,-i.x,-i.y])),t.map((function(t){for(var i=t.slice(0),r={},s=1;s=e}))}}}(),function(){function t(e,i,r){if(r)if(!x.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var s=0,n=i.length;s57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var s=t.charCodeAt(e-1);if(55296>s||s>56319)throw"Low surrogate without preceding high surrogate";return!1}x.util.string={camelize:function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},capitalize:function(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())},escapeXml:function(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(e){var i,r=0,s=[];for(r=0;r-1?t.prototype[s]=function(t){return function(){var i=this.constructor.superclass;this.constructor.superclass=r;var s=e[t].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==t)return s}}(s):t.prototype[s]=e[s],i&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};function s(){}function n(e){for(var i=null,r=this;r.constructor.superclass;){var s=r.constructor.superclass.prototype[e];if(r[e]!==s){i=s;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,t.call(arguments,1)):i.call(this):console.log("tried to callSuper "+e+", method not found in prototype chain",this)}x.util.createClass=function(){var i=null,o=t.call(arguments,0);function a(){this.initialize.apply(this,arguments)}"function"==typeof o[0]&&(i=o.shift()),a.superclass=i,a.subclasses=[],i&&(s.prototype=i.prototype,a.prototype=new s,i.subclasses.push(a));for(var h=0,l=o.length;h-1||"touch"===t.pointerType},d="string"==typeof(u=x.document.createElement("div")).style.opacity,f="string"==typeof u.style.filter,g=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,_=function(t){return t},d?_=function(t,e){return t.style.opacity=e,t}:f&&(_=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),g.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(g,e)):i.filter+=" alpha(opacity="+100*e+")",t}),x.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?_(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)"opacity"===r?_(t,e[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=e[r];return t},function(){var t,e,i,r,s=Array.prototype.slice,n=function(t){return s.call(t,0)};try{t=n(x.document.childNodes)instanceof Array}catch(t){}function o(t,e){var i=x.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function a(t){for(var e=0,i=0,r=x.document.documentElement,s=x.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===x.document?(e=s.scrollLeft||r.scrollLeft||0,i=s.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:i}}t||(n=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e}),e=x.document.defaultView&&x.document.defaultView.getComputedStyle?function(t,e){var i=x.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},i=x.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"",x.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=x.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},x.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t},x.util.setImageSmoothing=function(t,e){t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=e},x.util.getById=function(t){return"string"==typeof t?x.document.getElementById(t):t},x.util.toArray=n,x.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},x.util.makeElement=o,x.util.wrapElement=function(t,e,i){return"string"==typeof e&&(e=o(e,i)),t.parentNode&&t.parentNode.replaceChild(e,t),e.appendChild(t),e},x.util.getScrollLeftTop=a,x.util.getElementOffset=function(t){var i,r,s=t&&t.ownerDocument,n={left:0,top:0},o={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!s)return o;for(var l in h)o[h[l]]+=parseInt(e(t,l),10)||0;return i=s.documentElement,void 0!==t.getBoundingClientRect&&(n=t.getBoundingClientRect()),r=a(t),{left:n.left+r.left-(i.clientLeft||0)+o.left,top:n.top+r.top-(i.clientTop||0)+o.top}},x.util.getNodeCanvas=function(t){var e=x.jsdomImplForWrapper(t);return e._canvas||e._image},x.util.cleanUpJsdomNode=function(t){if(x.isLikelyNode){var e=x.jsdomImplForWrapper(t);e&&(e._image=null,e._canvas=null,e._currentSrc=null,e._attributes=null,e._classList=null)}}}(),function(){function t(){}x.util.request=function(e,i){i||(i={});var r=i.method?i.method.toUpperCase():"GET",s=i.onComplete||function(){},n=new x.window.XMLHttpRequest,o=i.body||i.parameters;return n.onreadystatechange=function(){4===n.readyState&&(s(n),n.onreadystatechange=t)},"GET"===r&&(o=null,"string"==typeof i.parameters&&(e=function(t,e){return t+(/\?/.test(t)?"&":"?")+e}(e,i.parameters))),n.open(r,e,!0),"POST"!==r&&"PUT"!==r||n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.send(o),n}}(),x.log=console.log,x.warn=console.warn,function(){var t=x.util.object.extend,e=x.util.object.clone,i=[];function r(){return!1}function s(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e}x.util.object.extend(i,{cancelAll:function(){var t=this.splice(0);return t.forEach((function(t){t.cancel()})),t},cancelByCanvas:function(t){if(!t)return[];var e=this.filter((function(e){return"object"==typeof e.target&&e.target.canvas===t}));return e.forEach((function(t){t.cancel()})),e},cancelByTarget:function(t){var e=this.findAnimationsByTarget(t);return e.forEach((function(t){t.cancel()})),e},findAnimationIndex:function(t){return this.indexOf(this.findAnimation(t))},findAnimation:function(t){return this.find((function(e){return e.cancel===t}))},findAnimationsByTarget:function(t){return t?this.filter((function(e){return e.target===t})):[]}});var n=x.window.requestAnimationFrame||x.window.webkitRequestAnimationFrame||x.window.mozRequestAnimationFrame||x.window.oRequestAnimationFrame||x.window.msRequestAnimationFrame||function(t){return x.window.setTimeout(t,1e3/60)},o=x.window.cancelAnimationFrame||x.window.clearTimeout;function a(){return n.apply(x.window,arguments)}x.util.animate=function(i){i||(i={});var n,o=!1,h=function(){var t=x.runningAnimations.indexOf(n);return t>-1&&x.runningAnimations.splice(t,1)[0]};return n=t(e(i),{cancel:function(){return o=!0,h()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),x.runningAnimations.push(n),a((function(t){var e,l=t||+new Date,c=i.duration||500,u=l+c,d=i.onChange||r,f=i.abort||r,g=i.onComplete||r,_=i.easing||s,p="startValue"in i&&i.startValue.length>0,m="startValue"in i?i.startValue:0,v="endValue"in i?i.endValue:100,y=i.byValue||(p?m.map((function(t,e){return v[e]-m[e]})):v-m);i.onStart&&i.onStart(),function t(i){var r=(e=i||+new Date)>u?c:e-l,s=r/c,S=p?m.map((function(t,e){return _(r,m[e],y[e],c)})):_(r,m,y,c),C=p?Math.abs((S[0]-m[0])/y[0]):Math.abs((S-m)/y);if(n.currentValue=p?S.slice():S,n.completionRate=C,n.durationRate=s,!o){if(!f(S,C,s))return e>u?(n.currentValue=p?v.slice():v,n.completionRate=1,n.durationRate=1,d(p?v.slice():v,1,1),g(v,1,1),void h()):(d(S,C,s),void a(t));h()}}(l)})),n.cancel},x.util.requestAnimFrame=a,x.util.cancelAnimFrame=function(){return o.apply(x.window,arguments)},x.runningAnimations=i}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return(r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1))+")"}x.util.animateColor=function(e,i,r,s){var n=new x.Color(e).getSource(),o=new x.Color(i).getSource(),a=s.onComplete,h=s.onChange;return s=s||{},x.util.animate(x.util.object.extend(s,{duration:r||500,startValue:n,endValue:o,byValue:o,easing:function(e,i,r,n){return t(i,r,s.colorEasing?s.colorEasing(e,n):1-Math.cos(e/n*(Math.PI/2)))},onComplete:function(e,i,r){if(a)return a(t(o,o,0),i,r)},onChange:function(e,i,r){if(h){if(Array.isArray(e))return h(t(e,e,0),i,r);h(e,i,r)}}}))}}(),function(){function t(t,e,i,r){return t-1&&c>-1&&c-1)&&(i="stroke")}else{if("href"===t||"xlink:href"===t||"font"===t)return i;if("imageSmoothing"===t)return"optimizeQuality"===i;a=h?i.map(n):n(i,s)}}else i="";return!h&&isNaN(a)?i:a}function f(t){return new RegExp("^("+t.join("|")+")\\b","i")}function g(t,e){var i,r,s,n,o=[];for(s=0,n=e.length;s1;)h.shift(),l=e.util.multiplyTransformMatrices(l,h[0]);return l}}();var v=new RegExp("^\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*$");function y(t){if(!e.svgViewBoxElementsRegEx.test(t.nodeName))return{};var i,r,s,o,a,h,l=t.getAttribute("viewBox"),c=1,u=1,d=t.getAttribute("width"),f=t.getAttribute("height"),g=t.getAttribute("x")||0,_=t.getAttribute("y")||0,p=t.getAttribute("preserveAspectRatio")||"",m=!l||!(l=l.match(v)),y=!d||!f||"100%"===d||"100%"===f,S=m&&y,C={},b="",w=0,x=0;if(C.width=0,C.height=0,C.toBeParsed=S,m&&(g||_)&&t.parentNode&&"#document"!==t.parentNode.nodeName&&(b=" translate("+n(g)+" "+n(_)+") ",a=(t.getAttribute("transform")||"")+b,t.setAttribute("transform",a),t.removeAttribute("x"),t.removeAttribute("y")),S)return C;if(m)return C.width=n(d),C.height=n(f),C;if(i=-parseFloat(l[1]),r=-parseFloat(l[2]),s=parseFloat(l[3]),o=parseFloat(l[4]),C.minX=i,C.minY=r,C.viewBoxWidth=s,C.viewBoxHeight=o,y?(C.width=s,C.height=o):(C.width=n(d),C.height=n(f),c=C.width/s,u=C.height/o),"none"!==(p=e.util.parsePreserveAspectRatioAttribute(p)).alignX&&("meet"===p.meetOrSlice&&(u=c=c>u?u:c),"slice"===p.meetOrSlice&&(u=c=c>u?c:u),w=C.width-s*c,x=C.height-o*c,"Mid"===p.alignX&&(w/=2),"Mid"===p.alignY&&(x/=2),"Min"===p.alignX&&(w=0),"Min"===p.alignY&&(x=0)),1===c&&1===u&&0===i&&0===r&&0===g&&0===_)return C;if((g||_)&&"#document"!==t.parentNode.nodeName&&(b=" translate("+n(g)+" "+n(_)+") "),a=b+" matrix("+c+" 0 0 "+u+" "+(i*c+w)+" "+(r*u+x)+") ","svg"===t.nodeName){for(h=t.ownerDocument.createElementNS(e.svgNS,"g");t.firstChild;)h.appendChild(t.firstChild);t.appendChild(h)}else(h=t).removeAttribute("x"),h.removeAttribute("y"),a=h.getAttribute("transform")+a;return h.setAttribute("transform",a),C}function S(t,e){var i="xlink:href",r=m(t,e.getAttribute(i).slice(1));if(r&&r.getAttribute(i)&&S(t,r),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach((function(t){r&&!e.hasAttribute(t)&&r.hasAttribute(t)&&e.setAttribute(t,r.getAttribute(t))})),!e.children.length)for(var s=r.cloneNode(!0);s.firstChild;)e.appendChild(s.firstChild);e.removeAttribute(i)}e.parseSVGDocument=function(t,i,s,n){if(t){!function(t){for(var i=g(t,["use","svg:use"]),r=0;i.length&&rt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,e){return void 0===e&&(e=.5),e=Math.max(Math.min(1,e),0),new i(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new i(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new i(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new i(this.x,this.y)}})}(e),function(t){var e=t.fabric||(t.fabric={});function i(t){this.status=t,this.points=[]}e.Intersection?e.warn("fabric.Intersection is already defined"):(e.Intersection=i,e.Intersection.prototype={constructor:i,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},e.Intersection.intersectLineLine=function(t,r,s,n){var o,a=(n.x-s.x)*(t.y-s.y)-(n.y-s.y)*(t.x-s.x),h=(r.x-t.x)*(t.y-s.y)-(r.y-t.y)*(t.x-s.x),l=(n.y-s.y)*(r.x-t.x)-(n.x-s.x)*(r.y-t.y);if(0!==l){var c=a/l,u=h/l;0<=c&&c<=1&&0<=u&&u<=1?(o=new i("Intersection")).appendPoint(new e.Point(t.x+c*(r.x-t.x),t.y+c*(r.y-t.y))):o=new i}else o=new i(0===a||0===h?"Coincident":"Parallel");return o},e.Intersection.intersectLinePolygon=function(t,e,r){var s,n,o,a,h=new i,l=r.length;for(a=0;a0&&(h.status="Intersection"),h},e.Intersection.intersectPolygonPolygon=function(t,e){var r,s=new i,n=t.length;for(r=0;r0&&(s.status="Intersection"),s},e.Intersection.intersectPolygonRectangle=function(t,r,s){var n=r.min(s),o=r.max(s),a=new e.Point(o.x,n.y),h=new e.Point(n.x,o.y),l=i.intersectLinePolygon(n,a,t),c=i.intersectLinePolygon(a,o,t),u=i.intersectLinePolygon(o,h,t),d=i.intersectLinePolygon(h,n,t),f=new i;return f.appendPoints(l.points),f.appendPoints(c.points),f.appendPoints(u.points),f.appendPoints(d.points),f.points.length>0&&(f.status="Intersection"),f})}(e),function(t){var e=t.fabric||(t.fabric={});function i(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function r(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}e.Color?e.warn("fabric.Color is already defined."):(e.Color=i,e.Color.prototype={_tryParsingColor:function(t){var e;t in i.colorNameMap&&(t=i.colorNameMap[t]),"transparent"===t&&(e=[255,255,255,0]),e||(e=i.sourceFromHex(t)),e||(e=i.sourceFromRgb(t)),e||(e=i.sourceFromHsl(t)),e||(e=[0,0,0,1]),e&&this.setSource(e)},_rgbToHsl:function(t,i,r){t/=255,i/=255,r/=255;var s,n,o,a=e.util.array.max([t,i,r]),h=e.util.array.min([t,i,r]);if(o=(a+h)/2,a===h)s=n=0;else{var l=a-h;switch(n=o>.5?l/(2-a-h):l/(a+h),a){case t:s=(i-r)/l+(i0)-(t<0)||+t};function f(t,e){var i=t.angle+u(Math.atan2(e.y,e.x))+360;return Math.round(i%360/45)}function g(t,i){var r=i.transform.target,s=r.canvas,n=e.util.object.clone(i);n.target=r,s&&s.fire("object:"+t,n),r.fire(t,i)}function _(t,e){var i=e.canvas,r=t[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function p(t){return t.originX===l&&t.originY===l}function m(t,e,i){var r=t.lockScalingX,s=t.lockScalingY;return!((!r||!s)&&(e||!r&&!s||!i)&&(!r||"x"!==e)&&(!s||"y"!==e))}function v(t,e,i,r){return{e:t,transform:e,pointer:{x:i,y:r}}}function y(t){return function(e,i,r,s){var n=i.target,o=n.getCenterPoint(),a=n.translateToOriginPoint(o,i.originX,i.originY),h=t(e,i,r,s);return n.setPositionByOrigin(a,i.originX,i.originY),h}}function S(t,e){return function(i,r,s,n){var o=e(i,r,s,n);return o&&g(t,v(i,r,s,n)),o}}function C(t,i,r,s,n){var o=t.target,a=o.controls[t.corner],h=o.canvas.getZoom(),l=o.padding/h,c=o.toLocalPoint(new e.Point(s,n),i,r);return c.x>=l&&(c.x-=l),c.x<=-l&&(c.x+=l),c.y>=l&&(c.y-=l),c.y<=l&&(c.y+=l),c.x-=a.offsetX,c.y-=a.offsetY,c}function b(t){return t.flipX!==t.flipY}function w(t,e,i,r,s){if(0!==t[e]){var n=s/t._getTransformedDimensions()[r]*t[i];t.set(i,n)}}function x(t,e,i,r){var s,l=e.target,c=l._getTransformedDimensions(0,l.skewY),d=C(e,e.originX,e.originY,i,r),f=Math.abs(2*d.x)-c.x,g=l.skewX;f<2?s=0:(s=u(Math.atan2(f/l.scaleX,c.y/l.scaleY)),e.originX===n&&e.originY===h&&(s=-s),e.originX===a&&e.originY===o&&(s=-s),b(l)&&(s=-s));var _=g!==s;if(_){var p=l._getTransformedDimensions().y;l.set("skewX",s),w(l,"skewY","scaleY","y",p)}return _}function T(t,e,i,r){var s,l=e.target,c=l._getTransformedDimensions(l.skewX,0),d=C(e,e.originX,e.originY,i,r),f=Math.abs(2*d.y)-c.y,g=l.skewY;f<2?s=0:(s=u(Math.atan2(f/l.scaleY,c.x/l.scaleX)),e.originX===n&&e.originY===h&&(s=-s),e.originX===a&&e.originY===o&&(s=-s),b(l)&&(s=-s));var _=g!==s;if(_){var p=l._getTransformedDimensions().x;l.set("skewY",s),w(l,"skewX","scaleX","x",p)}return _}function I(t,e,i,r,s){s=s||{};var n,o,a,h,l,u,f=e.target,g=f.lockScalingX,v=f.lockScalingY,y=s.by,S=_(t,f),b=m(f,y,S),w=e.gestureScale;if(b)return!1;if(w)o=e.scaleX*w,a=e.scaleY*w;else{if(n=C(e,e.originX,e.originY,i,r),l="y"!==y?d(n.x):1,u="x"!==y?d(n.y):1,e.signX||(e.signX=l),e.signY||(e.signY=u),f.lockScalingFlip&&(e.signX!==l||e.signY!==u))return!1;if(h=f._getTransformedDimensions(),S&&!y){var x=Math.abs(n.x)+Math.abs(n.y),T=e.original,I=x/(Math.abs(h.x*T.scaleX/f.scaleX)+Math.abs(h.y*T.scaleY/f.scaleY));o=T.scaleX*I,a=T.scaleY*I}else o=Math.abs(n.x*f.scaleX/h.x),a=Math.abs(n.y*f.scaleY/h.y);p(e)&&(o*=2,a*=2),e.signX!==l&&"y"!==y&&(e.originX=c[e.originX],o*=-1,e.signX=l),e.signY!==u&&"x"!==y&&(e.originY=c[e.originY],a*=-1,e.signY=u)}var E=f.scaleX,O=f.scaleY;return y?("x"===y&&f.set("scaleX",o),"y"===y&&f.set("scaleY",a)):(!g&&f.set("scaleX",o),!v&&f.set("scaleY",a)),E!==f.scaleX||O!==f.scaleY}s.scaleCursorStyleHandler=function(t,e,r){var s=_(t,r),n="";if(0!==e.x&&0===e.y?n="x":0===e.x&&0!==e.y&&(n="y"),m(r,n,s))return"not-allowed";var o=f(r,e);return i[o]+"-resize"},s.skewCursorStyleHandler=function(t,e,i){var s="not-allowed";if(0!==e.x&&i.lockSkewingY)return s;if(0!==e.y&&i.lockSkewingX)return s;var n=f(i,e)%4;return r[n]+"-resize"},s.scaleSkewCursorStyleHandler=function(t,e,i){return t[i.canvas.altActionKey]?s.skewCursorStyleHandler(t,e,i):s.scaleCursorStyleHandler(t,e,i)},s.rotationWithSnapping=S("rotating",y((function(t,e,i,r){var s=e,n=s.target,o=n.translateToOriginPoint(n.getCenterPoint(),s.originX,s.originY);if(n.lockRotation)return!1;var a,h=Math.atan2(s.ey-o.y,s.ex-o.x),l=Math.atan2(r-o.y,i-o.x),c=u(l-h+s.theta);if(n.snapAngle>0){var d=n.snapAngle,f=n.snapThreshold||d,g=Math.ceil(c/d)*d,_=Math.floor(c/d)*d;Math.abs(c-_)0?n:a:(c>0&&(s=u===o?n:a),c<0&&(s=u===o?a:n),b(h)&&(s=s===n?a:n)),e.originX=s,S("skewing",y(x))(t,e,i,r))},s.skewHandlerY=function(t,e,i,r){var s,a=e.target,c=a.skewY,u=e.originX;return!a.lockSkewingY&&(0===c?s=C(e,l,l,i,r).y>0?o:h:(c>0&&(s=u===n?o:h),c<0&&(s=u===n?h:o),b(a)&&(s=s===o?h:o)),e.originY=s,S("skewing",y(T))(t,e,i,r))},s.dragHandler=function(t,e,i,r){var s=e.target,n=i-e.offsetX,o=r-e.offsetY,a=!s.get("lockMovementX")&&s.left!==n,h=!s.get("lockMovementY")&&s.top!==o;return a&&s.set("left",n),h&&s.set("top",o),(a||h)&&g("moving",v(t,e,i,r)),a||h},s.scaleOrSkewActionName=function(t,e,i){var r=t[i.canvas.altActionKey];return 0===e.x?r?"skewX":"scaleY":0===e.y?r?"skewY":"scaleX":void 0},s.rotationStyleHandler=function(t,e,i){return i.lockRotation?"not-allowed":e.cursorStyle},s.fireEvent=g,s.wrapWithFixedAnchor=y,s.wrapWithFireEvent=S,s.getLocalPoint=C,e.controlsUtils=s}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.degreesToRadians,r=e.controlsUtils;r.renderCircleControl=function(t,e,i,r,s){r=r||{};var n,o=this.sizeX||r.cornerSize||s.cornerSize,a=this.sizeY||r.cornerSize||s.cornerSize,h=void 0!==r.transparentCorners?r.transparentCorners:s.transparentCorners,l=h?"stroke":"fill",c=!h&&(r.cornerStrokeColor||s.cornerStrokeColor),u=e,d=i;t.save(),t.fillStyle=r.cornerColor||s.cornerColor,t.strokeStyle=r.cornerStrokeColor||s.cornerStrokeColor,o>a?(n=o,t.scale(1,a/o),d=i*o/a):a>o?(n=a,t.scale(o/a,1),u=e*a/o):n=o,t.lineWidth=1,t.beginPath(),t.arc(u,d,n/2,0,2*Math.PI,!1),t[l](),c&&t.stroke(),t.restore()},r.renderSquareControl=function(t,e,r,s,n){s=s||{};var o=this.sizeX||s.cornerSize||n.cornerSize,a=this.sizeY||s.cornerSize||n.cornerSize,h=void 0!==s.transparentCorners?s.transparentCorners:n.transparentCorners,l=h?"stroke":"fill",c=!h&&(s.cornerStrokeColor||n.cornerStrokeColor),u=o/2,d=a/2;t.save(),t.fillStyle=s.cornerColor||n.cornerColor,t.strokeStyle=s.cornerStrokeColor||n.cornerStrokeColor,t.lineWidth=1,t.translate(e,r),t.rotate(i(n.angle)),t[l+"Rect"](-u,-d,o,a),c&&t.strokeRect(-u,-d,o,a),t.restore()}}(e),function(t){var e=t.fabric||(t.fabric={});e.Control=function(t){for(var e in t)this[e]=t[e]},e.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(t,e){return e.cursorStyle},getActionName:function(t,e){return e.actionName},getVisibility:function(t,e){var i=t._controlsVisibility;return i&&void 0!==i[e]?i[e]:this.visible},setVisibility:function(t){this.visible=t},positionHandler:function(t,i){return e.util.transformPoint({x:this.x*t.x+this.offsetX,y:this.y*t.y+this.offsetY},i)},calcCornerCoords:function(t,i,r,s,n){var o,a,h,l,c=n?this.touchSizeX:this.sizeX,u=n?this.touchSizeY:this.sizeY;if(c&&u&&c!==u){var d=Math.atan2(u,c),f=Math.sqrt(c*c+u*u)/2,g=d-e.util.degreesToRadians(t),_=Math.PI/2-d-e.util.degreesToRadians(t);o=f*e.util.cos(g),a=f*e.util.sin(g),h=f*e.util.cos(_),l=f*e.util.sin(_)}else f=.7071067812*(c&&u?c:i),g=e.util.degreesToRadians(45-t),o=h=f*e.util.cos(g),a=l=f*e.util.sin(g);return{tl:{x:r-l,y:s-h},tr:{x:r+o,y:s-a},bl:{x:r-o,y:s+a},br:{x:r+l,y:s+h}}},render:function(t,i,r,s,n){"circle"===((s=s||{}).cornerStyle||n.cornerStyle)?e.controlsUtils.renderCircleControl.call(this,t,i,r,s,n):e.controlsUtils.renderSquareControl.call(this,t,i,r,s,n)}}}(e),function(){function t(t,e){var i,r,s,n,o=t.getAttribute("style"),a=t.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,o){var h=o.split(/\s*;\s*/);for(""===h[h.length-1]&&h.pop(),n=h.length;n--;){var l=h[n].split(/\s*:\s*/),c=l[0].trim(),u=l[1].trim();"stop-color"===c?i=u:"stop-opacity"===c&&(s=u)}}return i||(i=t.getAttribute("stop-color")||"rgb(0,0,0)"),s||(s=t.getAttribute("stop-opacity")),r=(i=new x.Color(i)).getAlpha(),s=isNaN(parseFloat(s))?1:parseFloat(s),s*=r*e,{offset:a,color:i.toRgb(),opacity:s}}var e=x.util.object.clone;x.Gradient=x.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(t){t||(t={}),t.coords||(t.coords={});var e,i=this;Object.keys(t).forEach((function(e){i[e]=t[e]})),this.id?this.id+="_"+x.Object.__uid++:this.id=x.Object.__uid++,e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice()},addColorStop:function(t){for(var e in t){var i=new x.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return x.util.populateWithProperties(this,e,t),e},toSVG:function(t,i){var r,s,n,o,a=e(this.coords,!0),h=(i=i||{},e(this.colorStops,!0)),l=a.r1>a.r2,c=this.gradientTransform?this.gradientTransform.concat():x.iMatrix.concat(),u=-this.offsetX,d=-this.offsetY,f=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(h.sort((function(t,e){return t.offset-e.offset})),"objectBoundingBox"===g?(u/=t.width,d/=t.height):(u+=t.width/2,d+=t.height/2),"path"===t.type&&"percentage"!==this.gradientUnits&&(u-=t.pathOffset.x,d-=t.pathOffset.y),c[4]-=u,c[5]-=d,o='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',o+=' gradientTransform="'+(f?i.additionalTransform+" ":"")+x.util.matrixToSVG(c)+'" ',"linear"===this.type?n=["\n']:"radial"===this.type&&(n=["\n']),"radial"===this.type){if(l)for((h=h.concat()).reverse(),r=0,s=h.length;r0){var p=_/Math.max(a.r1,a.r2);for(r=0,s=h.length;r\n')}return n.push("linear"===this.type?"\n":"\n"),n.join("")},toLive:function(t){var e,i,r,s=x.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(s.x1,s.y1,s.x2,s.y2):"radial"===this.type&&(e=t.createRadialGradient(s.x1,s.y1,s.r1,s.x2,s.y2,s.r2)),i=0,r=this.colorStops.length;i1?1:n,isNaN(n)&&(n=1);var o,a,h,l,c=e.getElementsByTagName("stop"),u="userSpaceOnUse"===e.getAttribute("gradientUnits")?"pixels":"percentage",d=e.getAttribute("gradientTransform")||"",f=[],g=0,_=0;for("linearGradient"===e.nodeName||"LINEARGRADIENT"===e.nodeName?(o="linear",a=function(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}(e)):(o="radial",a=function(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}(e)),h=c.length;h--;)f.push(t(c[h],n));return l=x.parseTransformAttribute(d),function(t,e,i,r){var s,n;Object.keys(e).forEach((function(t){"Infinity"===(s=e[t])?n=1:"-Infinity"===s?n=0:(n=parseFloat(e[t],10),"string"==typeof s&&/^(\d+\.\d+)%|(\d+)%$/.test(s)&&(n*=.01,"pixels"===r&&("x1"!==t&&"x2"!==t&&"r2"!==t||(n*=i.viewBoxWidth||i.width),"y1"!==t&&"y2"!==t||(n*=i.viewBoxHeight||i.height)))),e[t]=n}))}(0,a,s,u),"pixels"===u&&(g=-i.left,_=-i.top),new x.Gradient({id:e.getAttribute("id"),type:o,coords:a,colorStops:f,gradientUnits:u,gradientTransform:l,offsetX:g,offsetY:_})}})}(),m=x.util.toFixed,x.Pattern=x.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(t,e){if(t||(t={}),this.id=x.Object.__uid++,this.setOptions(t),!t.source||t.source&&"string"!=typeof t.source)e&&e(this);else{var i=this;this.source=x.util.createImage(),x.util.loadImage(t.source,(function(t,r){i.source=t,e&&e(i,r)}),null,this.crossOrigin)}},toObject:function(t){var e,i,r=x.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?e=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(e=this.source.toDataURL()),i={type:"pattern",source:e,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:m(this.offsetX,r),offsetY:m(this.offsetY,r),patternTransform:this.patternTransform?this.patternTransform.concat():null},x.util.populateWithProperties(this,i,t),i},toSVG:function(t){var e="function"==typeof this.source?this.source():this.source,i=e.width/t.width,r=e.height/t.height,s=this.offsetX/t.width,n=this.offsetY/t.height,o="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(r=1,n&&(r+=Math.abs(n))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,s&&(i+=Math.abs(s))),e.src?o=e.src:e.toDataURL&&(o=e.toDataURL()),'\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e=this.source;if(!e)return"";if(void 0!==e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.toFixed;e.Shadow?e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(t){for(var i in"string"==typeof t&&(t=this._parseShadow(t)),t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,s=40,n=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=new e.Color(this.color);return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,n)+20,s=100*i((Math.abs(o.y)+this.blur)/t.height,n)+20),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach((function(e){this[e]!==i[e]&&(t[e]=this[e])}),this),t}}),e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(e),function(){if(x.StaticCanvas)x.warn("fabric.StaticCanvas is already defined.");else{var t=x.util.object.extend,e=x.util.getElementOffset,i=x.util.removeFromArray,r=x.util.toFixed,s=x.util.transformPoint,n=x.util.invertTransform,o=x.util.getNodeCanvas,a=x.util.createCanvasElement,h=new Error("Could not initialize `canvas` element");x.StaticCanvas=x.util.createClass(x.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:x.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(t,e){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return x.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,x.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var t=x.devicePixelRatio;this.__initRetinaScaling(t,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(t,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(t,e,i){e.setAttribute("width",this.width*t),e.setAttribute("height",this.height*t),i.scale(t,t)},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?x.util.loadImage(e,(function(e,s){if(e){var n=new x.Image(e,r);this[t]=n,n.canvas=this}i&&i(e,s)}),this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,e&&(e.canvas=this),i&&i(e,!1)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(){var t=a();if(!t)throw h;if(t.style||(t.style={}),void 0===t.getContext)throw h;return t},_initOptions:function(t){var e=this.lowerCanvasEl;this._setOptions(t),this.width=this.width||parseInt(e.width,10)||0,this.height=this.height||parseInt(e.height,10)||0,this.lowerCanvasEl.style&&(e.width=this.width,e.height=this.height,e.style.width=this.width+"px",e.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=x.util.getById(t)||this._createCanvasElement(),x.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;for(var r in e=e||{},t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px",this.hasLostContext=!0),e.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i,r,s=this._activeObject,n=this.backgroundImage,o=this.overlayImage;for(this.viewportTransform=t,i=0,r=this._objects.length;i\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this.clipPath&&i.push("\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push(""),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,s=e.width||this.width,n=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=x.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",x.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),"\n")},createSVGClipPathMarkup:function(t){var e=this.clipPath;return e?(e.clipPathId="CLIPPATH_"+x.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(t.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var t=this;return["background","overlay"].map((function(e){var i=t[e+"Color"];if(i&&i.toLive){var r=t[e+"Vpt"],s=t.viewportTransform,n={width:t.width/(r?s[0]:1),height:t.height/(r?s[3]:1)};return i.toSVG(n,{additionalTransform:r?x.util.matrixToSVG(s):""})}})).join("")},createSVGFontFacesMarkup:function(){var t,e,i,r,s,n,o,a,h="",l={},c=x.fontPaths,u=[];for(this._objects.forEach((function t(e){u.push(e),e._objects&&e._objects.forEach(t)})),o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_setSVGObjects:function(t,e){var i,r,s,n=this._objects;for(r=0,s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,s,n=this._activeObject;if(t===n&&"activeSelection"===t.type)for(e=(s=n._objects).length;e--;)r=s[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,s,n=this._activeObject;if(t===n&&"activeSelection"===t.type)for(s=n._objects,e=0;e0+l&&(o=n-1,i(this._objects,s),this._objects.splice(o,0,s)),l++;else 0!==(n=this._objects.indexOf(t))&&(o=this._findNewLowerIndex(t,n,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,s;if(i){for(r=e,s=e-1;s>=0;--s)if(t.intersectsWithObject(this._objects[s])||t.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(t)){r=s;break}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,s,n,o,a,h=this._activeObject,l=0;if(t===h&&"activeSelection"===t.type)for(r=(a=h._objects).length;r--;)s=a[r],(n=this._objects.indexOf(s))"}}),t(x.StaticCanvas.prototype,x.Observable),t(x.StaticCanvas.prototype,x.Collection),t(x.StaticCanvas.prototype,x.DataURLExporter),t(x.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=a();if(!e||!e.getContext)return null;var i=e.getContext("2d");return i&&"setLineDash"===t?void 0!==i.setLineDash:null}}),x.StaticCanvas.prototype.toJSON=x.StaticCanvas.prototype.toObject,x.isLikelyNode&&(x.StaticCanvas.prototype.createPNGStream=function(){var t=o(this.lowerCanvasEl);return t&&t.createPNGStream()},x.StaticCanvas.prototype.createJPEGStream=function(t){var e=o(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),x.BaseBrush=x.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(t){t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,t.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas,e=this.shadow,i=t.contextTop,r=t.getZoom();t&&t._isRetinaScaling()&&(r*=x.devicePixelRatio),i.shadowColor=e.color,i.shadowBlur=e.blur*r,i.shadowOffsetX=e.offsetX*r,i.shadowOffsetY=e.offsetY*r}},needsFullRender:function(){return new x.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0},_isOutSideCanvas:function(t){return t.x<0||t.x>this.canvas.getWidth()||t.y<0||t.y>this.canvas.getHeight()}}),x.PencilBrush=x.util.createClass(x.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(t){this.canvas=t,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(t,e,i){var r=e.midPointFrom(i);return t.quadraticCurveTo(e.x,e.y,r.x,r.y),r},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],this._prepareForDrawing(t),this._captureDrawingPath(t),this._render())},onMouseMove:function(t,e){if(this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(t))&&this._captureDrawingPath(t)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,s=this.canvas.contextTop;this._saveAndTransform(s),this.oldEnd&&(s.beginPath(),s.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(s,i[r-2],i[r-1],!0),s.stroke(),s.restore()}},onMouseUp:function(t){return!this.canvas._isMainEvent(t.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(t){var e=new x.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){return!(this._points.length>1&&t.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(t),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(t){var e=new x.Point(t.x,t.y);return this._addPoint(e)},_render:function(t){var e,i,r=this._points[0],s=this._points[1];if(t=t||this.canvas.contextTop,this._saveAndTransform(t),t.beginPath(),2===this._points.length&&r.x===s.x&&r.y===s.y){var n=this.width/1e3;r=new x.Point(r.x,r.y),s=new x.Point(s.x,s.y),r.x-=n,s.x+=n}for(t.moveTo(r.x,r.y),e=1,i=this._points.length;e=s&&(o=t[i],a.push(o));return a.push(t[n]),a},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var t=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(t))this.canvas.requestRenderAll();else{var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.requestRenderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}}}),x.CircleBrush=x.util.createClass(x.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,e),i.restore()},dot:function(t,e){t.fillStyle=e.fill,t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),t.closePath(),t.fill()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),t=0,e=r.length;t0&&!this.preserveObjectStacking){e=[],i=[];for(var s=0,n=this._objects.length;s1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=x.util.invertTransform(i),s=this.restorePointerVpt(e);return x.util.transformPoint(s,r)},isTargetTransparent:function(t,e,i){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var r=this._normalizePointer(t,{x:e,y:i}),s=Math.max(t.cacheTranslationX+r.x*t.zoomX,0),n=Math.max(t.cacheTranslationY+r.y*t.zoomY,0);return x.util.isTransparent(t._cacheContext,Math.round(s),Math.round(n),this.targetFindTolerance)}var o=this.contextCache,a=t.selectionBackgroundColor,h=this.viewportTransform;return t.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),t.render(o),o.restore(),t.selectionBackgroundColor=a,x.util.isTransparent(o,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return Array.isArray(this.selectionKey)?!!this.selectionKey.find((function(e){return!0===t[e]})):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t,e,i){var r;if(t)return"scale"===e||"scaleX"===e||"scaleY"===e||"resizing"===e?r=this.centeredScaling||t.centeredScaling:"rotate"===e&&(r=this.centeredRotation||t.centeredRotation),r?!i:i},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i,r){if(!e||!t)return"drag";var s=r.controls[e];return s.getActionName(i,s,r)},_setupCurrentTransform:function(t,i,r){if(i){var s=this.getPointer(t),n=i.__corner,o=i.controls[n],a=r&&n?o.getActionHandler(t,i,o):x.controlsUtils.dragHandler,h=this._getActionFromCorner(r,n,t,i),l=this._getOriginFromCorner(i,n),c=t[this.centeredKey],u={target:i,action:h,actionHandler:a,corner:n,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:s.x-i.left,offsetY:s.y-i.top,originX:l.x,originY:l.y,ex:s.x,ey:s.y,lastX:s.x,lastY:s.y,theta:e(i.angle),width:i.width*i.scaleX,shiftKey:t.shiftKey,altKey:c,original:x.util.saveObjectTransform(i)};this._shouldCenterTransform(i,h,c)&&(u.originX="center",u.originY="center"),u.original.originX=l.x,u.original.originY=l.y,this._currentTransform=u,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var e=this._groupSelector,i=new x.Point(e.ex,e.ey),r=x.util.transformPoint(i,this.viewportTransform),s=new x.Point(e.ex+e.left,e.ey+e.top),n=x.util.transformPoint(s,this.viewportTransform),o=Math.min(r.x,n.x),a=Math.min(r.y,n.y),h=Math.max(r.x,n.x),l=Math.max(r.y,n.y),c=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(o,a,h-o,l-a)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,o+=c,a+=c,h-=c,l-=c,x.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(o,a,h-o,l-a))},findTarget:function(t,e){if(!this.skipTargetFind){var r,s,n=this.getPointer(t,!0),o=this._activeObject,a=this.getActiveObjects(),h=i(t),l=a.length>1&&!e||1===a.length;if(this.targets=[],l&&o._findTargetCorner(n,h))return o;if(a.length>1&&!e&&o===this._searchPossibleTargets([o],n))return o;if(1===a.length&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return o;r=o,s=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&c&&r&&c!==r&&(c=r,this.targets=s),c}},_checkTarget:function(t,e,i){if(e&&e.visible&&e.evented&&e.containsPoint(t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,i.x,i.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,r,s=t.length;s--;){var n=t[s],o=n.group?this._normalizePointer(n.group,e):e;if(this._checkTarget(o,n,e)){(i=t[s]).subTargetCheck&&i instanceof x.Group&&(r=this._searchPossibleTargets(i._objects,e))&&this.targets.push(r);break}}return i},restorePointerVpt:function(t){return x.util.transformPoint(t,x.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,s=t(e),n=this.upperCanvasEl,o=n.getBoundingClientRect(),a=o.width||0,h=o.height||0;a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s));var l=this.getRetinaScaling();return 1!==l&&(s.x/=l,s.y/=l),r=0===a||0===h?{width:1,height:1}:{width:n.width/a,height:n.height/h},{x:s.x*r.width,y:s.y*r.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),e=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),x.util.addClass(i,"upper-canvas "+t),this.wrapperEl.appendChild(i),this._copyCanvasStyle(e,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=x.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),x.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),x.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;x.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=e,t.height=i,x.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),s=[],n=[];t.forEach((function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",{e,target:t}),n.push(t))})),r.forEach((function(r){-1===t.indexOf(r)&&(i=!0,r.fire("selected",{e,target:r}),s.push(r))})),t.length>0&&r.length>0?i&&this.fire("selection:updated",{e,selected:s,deselected:n}):r.length>0?this.fire("selection:created",{e,selected:s}):t.length>0&&this.fire("selection:cleared",{e,deselected:n})},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&!!this._discardActiveObject(e,t)&&!t.onSelect({e})&&(this._activeObject=t,!0)},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects(),i=this.getActiveObject();return e.length&&this.fire("before:selection:cleared",{target:i,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(t){x.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,x.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),s=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),s},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach((function(i){e[i]=t[i]})),x.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),x.StaticCanvas.prototype.setViewportTransform.call(this,t)}}),x.StaticCanvas)"prototype"!==r&&(x.Canvas[r]=x.StaticCanvas[r])}(),function(){var t=x.util.addListener,e=x.util.removeListener,i={passive:!1};function r(t,e){return t.button&&t.button===e-1}x.util.object.extend(x.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(t,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(t,e){var r=this.upperCanvasEl,s=this._getEventPrefix();t(x.window,"resize",this._onResize),t(r,s+"down",this._onMouseDown),t(r,s+"move",this._onMouseMove,i),t(r,s+"out",this._onMouseOut),t(r,s+"enter",this._onMouseEnter),t(r,"wheel",this._onMouseWheel),t(r,"contextmenu",this._onContextMenu),t(r,"dblclick",this._onDoubleClick),t(r,"dragover",this._onDragOver),t(r,"dragenter",this._onDragEnter),t(r,"dragleave",this._onDragLeave),t(r,"drop",this._onDrop),this.enablePointerEvents||t(r,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&e in eventjs&&(eventjs[e](r,"gesture",this._onGesture),eventjs[e](r,"drag",this._onDrag),eventjs[e](r,"orientation",this._onOrientationChange),eventjs[e](r,"shake",this._onShake),eventjs[e](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(e,"remove");var t=this._getEventPrefix();e(x.document,t+"up",this._onMouseUp),e(x.document,"touchend",this._onTouchEnd,i),e(x.document,t+"move",this._onMouseMove,i),e(x.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t});var i=this;this._hoveredTargets.forEach((function(r){i.fire("mouse:out",{target:e,e:t}),r&&e.fire("mouseout",{e:t})})),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach((function(t){t.isEditing&&t.hiddenTextarea.focus()}))},_onMouseEnter:function(t){this._currentTransform||this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onDragOver:function(t){t.preventDefault();var e=this._simpleEventHandler("dragover",t);this._fireEnterLeaveEvents(e,t)},_onDrop:function(t){return this._simpleEventHandler("drop:before",t),this._simpleEventHandler("drop",t)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"dblclick"),this._resetTransformEventData(t)},getPointerId:function(t){var e=t.changedTouches;return e?e[0]&&e[0].identifier:this.enablePointerEvents?t.pointerId:-1},_isMainEvent:function(t){return!0===t.isPrimary||!1!==t.isPrimary&&("touchend"===t.type&&0===t.touches.length||!t.changedTouches||t.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var s=this.upperCanvasEl,n=this._getEventPrefix();t(x.document,"touchend",this._onTouchEnd,i),t(x.document,"touchmove",this._onMouseMove,i),e(s,n+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var s=this.upperCanvasEl,n=this._getEventPrefix();e(s,n+"move",this._onMouseMove,i),t(x.document,n+"up",this._onMouseUp),t(x.document,n+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var s=this._getEventPrefix();e(x.document,"touchend",this._onTouchEnd,i),e(x.document,"touchmove",this._onMouseMove,i);var n=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((function(){t(n.upperCanvasEl,s+"down",n._onMouseDown),n._willAddMouseDown=0}),400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var s=this.upperCanvasEl,n=this._getEventPrefix();this._isMainEvent(r)&&(e(x.document,n+"up",this._onMouseUp),e(x.document,n+"move",this._onMouseMove,i),t(s,n+"move",this._onMouseMove,i))},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t){var e=this._activeObject;return!!(!!e!=!!t||e&&t&&e!==t)||(e&&e.isEditing,!1)},__onMouseUp:function(t){var e,i=this._currentTransform,s=this._groupSelector,n=!1,o=!s||0===s.left&&0===s.top;if(this._cacheTransformEventData(t),e=this._target,this._handleEvent(t,"up:before"),r(t,3))this.fireRightClick&&this._handleEvent(t,"up",3,o);else{if(r(t,2))return this.fireMiddleClick&&this._handleEvent(t,"up",2,o),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(t);else if(this._isMainEvent(t)){if(i&&(this._finalizeCurrentTransform(t),n=i.actionPerformed),!o){var a=e===this._activeObject;this._maybeGroupObjects(t),n||(n=this._shouldRender(e)||!a&&e===this._activeObject)}var h,l;if(e){if(h=e._findTargetCorner(this.getPointer(t,!0),x.util.isTouchEvent(t)),e.selectable&&e!==this._activeObject&&"up"===e.activeOn)this.setActiveObject(e,t),n=!0;else{var c=e.controls[h],u=c&&c.getMouseUpHandler(t,e,c);u&&u(t,i,(l=this.getPointer(t)).x,l.y)}e.isMoving=!1}if(i&&(i.target!==e||i.corner!==h)){var d=i.target&&i.target.controls[i.corner],f=d&&d.getMouseUpHandler(t,e,c);l=l||this.getPointer(t),f&&f(t,i,l.x,l.y)}this._setCursorFromEvent(t,e),this._handleEvent(t,"up",1,o),this._groupSelector=null,this._currentTransform=null,e&&(e.__corner=0),n?this.requestRenderAll():o||this.renderTop()}}},_simpleEventHandler:function(t,e){var i=this.findTarget(e),r=this.targets,s={e,target:i,subTargets:r};if(this.fire(t,s),i&&i.fire(t,s),!r)return i;for(var n=0;n1&&(e=new x.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(t){for(var e,i=[],r=this._groupSelector.ex,s=this._groupSelector.ey,n=r+this._groupSelector.left,o=s+this._groupSelector.top,a=new x.Point(v(r,n),v(s,o)),h=new x.Point(y(r,n),y(s,o)),l=!this.selectionFullyContained,c=r===n&&s===o,u=this._objects.length;u--&&!((e=this._objects[u])&&e.selectable&&e.visible&&(l&&e.intersectsWithRect(a,h,!0)||e.isContainedWithinRect(a,h,!0)||l&&e.containsPoint(a,null,!0)||l&&e.containsPoint(h,null,!0))&&(i.push(e),c)););return i.length>1&&(i=i.filter((function(e){return!e.onSelect({e:t})}))),i},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null}}),x.util.object.extend(x.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=(t.multiplier||1)*(t.enableRetinaScaling?this.getRetinaScaling():1),s=this.toCanvasElement(r,t);return x.util.toDataURL(s,e,i)},toCanvasElement:function(t,e){t=t||1;var i=((e=e||{}).width||this.width)*t,r=(e.height||this.height)*t,s=this.getZoom(),n=this.width,o=this.height,a=s*t,h=this.viewportTransform,l=(h[4]-(e.left||0))*t,c=(h[5]-(e.top||0))*t,u=this.interactive,d=[a,0,0,a,l,c],f=this.enableRetinaScaling,g=x.util.createCanvasElement(),_=this.contextTop;return g.width=i,g.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=h,this.width=n,this.height=o,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=f,this.contextTop=_,g}}),x.util.object.extend(x.StaticCanvas.prototype,{loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):x.util.object.clone(t),s=this,n=r.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,(function(t){s.clear(),s._setBgOverlay(r,(function(){n?s._enlivenObjects([n],(function(i){s.clipPath=i[0],s.__setupCanvas.call(s,r,t,o,e)})):s.__setupCanvas.call(s,r,t,o,e)}))}),i),this}},__setupCanvas:function(t,e,i,r){var s=this;e.forEach((function(t,e){s.insertAt(t,e)})),this.renderOnAddRemove=i,delete t.objects,delete t.backgroundImage,delete t.overlayImage,delete t.background,delete t.overlay,this._setOptions(t),this.renderAll(),r&&r()},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(t.backgroundImage||t.overlayImage||t.background||t.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)}else e&&e()},__setBgOverlay:function(t,e,i,r){var s=this;if(!e)return i[t]=!0,void(r&&r());"backgroundImage"===t||"overlayImage"===t?x.util.enlivenObjects([e],(function(e){s[t]=e[0],i[t]=!0,r&&r()})):this["set"+x.util.string.capitalize(t,!0)](e,(function(){i[t]=!0,r&&r()}))},_enlivenObjects:function(t,e,i){t&&0!==t.length?x.util.enlivenObjects(t,(function(t){e&&e(t)}),null,i):e&&e([])},_toDataURL:function(t,e){this.clone((function(i){e(i.toDataURL(t))}))},_toDataURLWithMultiplier:function(t,e,i){this.clone((function(r){i(r.toDataURLWithMultiplier(t,e))}))},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData((function(e){e.loadFromJSON(i,(function(){t&&t(e)}))}))},cloneWithoutData:function(t){var e=x.util.createCanvasElement();e.width=this.width,e.height=this.height;var i=new x.Canvas(e);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,(function(){i.renderAll(),t&&t(i)})),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,s=e.util.toFixed,n=e.util.string.capitalize,o=e.util.degreesToRadians,a=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=t.width,s=t.height,n=e.maxCacheSideLimit,o=e.minCacheSideLimit;if(r<=n&&s<=n&&r*s<=i)return rc&&(t.zoomX/=r/c,t.width=c,t.capped=!0),s>u&&(t.zoomY/=s/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.getTotalObjectScaling(),e=this._getTransformedDimensions(0,0),i=e.x*t.scaleX/this.scaleX,r=e.y*t.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:t.scaleX,zoomY:t.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){var i=t._currentTransform.target,r=t._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var s,n,o=this._cacheCanvas,a=this._limitCacheSize(this._getCacheCanvasDimensions()),h=e.minCacheSideLimit,l=a.width,c=a.height,u=a.zoomX,d=a.zoomY,f=l!==this.cacheWidth||c!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==d,_=f||g,p=0,m=0,v=!1;if(f){var y=this._cacheCanvas.width,S=this._cacheCanvas.height,C=l>y||c>S;v=C||(l<.9*y||c<.9*S)&&y>h&&S>h,C&&!a.capped&&(l>h||c>h)&&(p=.1*l,m=.1*c)}return this instanceof e.Text&&this.path&&(_=!0,v=!0,p+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!_&&(v?(o.width=Math.ceil(l+p),o.height=Math.ceil(c+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,o.width,o.height)),s=a.x/2,n=a.y/2,this.cacheTranslationX=Math.round(o.width/2-s)+s,this.cacheTranslationY=Math.round(o.height/2-n)+n,this.cacheWidth=l,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,d),this.zoomX=u,this.zoomY=d,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,i=this.calcTransformMatrix(!e);t.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:s(this.left,i),top:s(this.top,i),width:s(this.width,i),height:s(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:s(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:s(this.strokeMiterLimit,i),scaleX:s(this.scaleX,i),scaleY:s(this.scaleY,i),angle:s(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:s(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:s(this.skewX,i),skewY:s(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(r.clipPath=this.clipPath.toObject(t),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype;return i.stateProperties.forEach((function(e){"left"!==e&&"top"!==e&&(t[e]===i[e]&&delete t[e],Array.isArray(t[e])&&Array.isArray(i[e])&&0===t[e].length&&0===i[e].length&&delete t[e])})),t},toString:function(){return"#"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var t=e.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(t.scaleX),scaleY:Math.abs(t.scaleY)}},getTotalObjectScaling:function(){var t=this.getObjectScaling(),e=t.scaleX,i=t.scaleY;if(this.canvas){var r=this.canvas.getZoom(),s=this.canvas.getRetinaScaling();e*=r*s,i*=r*s}return{scaleX:e,scaleY:i}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t,s=this[t]!==i,n=!1;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,s&&(n=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,n&&this.group.set("dirty",!0)):n&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),t.restore())},renderCache:function(t){t=t||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,t.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(t,i){if(t.save(),i.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",i.absolutePositioned){var r=e.util.invertTransform(this.calcTransformMatrix());t.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},drawObject:function(t,e){var i=this.fill,r=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this._render(t),this._drawClipPath(t,this.clipPath),this.fill=i,this.stroke=r},_drawClipPath:function(t,e){e&&(e.canvas=this.canvas,e.shouldCache(),e._transformDone=!0,e.renderCache({forClipping:!0}),this.drawClipPathOnCache(t,e))},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){var i=e.stroke;i&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(t,i):(t.strokeStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,i)):t.strokeStyle=e.stroke)},_setFillStyles:function(t,e){var i=e.fill;i&&(i.toLive?(t.fillStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,e.fill)):t.fillStyle=i)},_setClippingProperties:function(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"},_setLineDash:function(t,e){e&&0!==e.length&&(1&e.length&&e.push.apply(e,e),t.setLineDash(e))},_renderControls:function(t,i){var r,s,n,a=this.getViewportTransform(),h=this.calcTransformMatrix();s=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,n=void 0!==i.hasControls?i.hasControls:this.hasControls,h=e.util.multiplyTransformMatrices(a,h),r=e.util.qrDecompose(h),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(r.angle-=180),t.rotate(o(this.group?r.angle:this.angle)),i.forActiveSelection||this.group?s&&this.drawBordersInGroup(t,r,i):s&&this.drawBorders(t,i),n&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i,r=this.shadow,s=this.canvas,n=s&&s.viewportTransform[0]||1,o=s&&s.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),s&&s._isRetinaScaling()&&(n*=e.devicePixelRatio,o*=e.devicePixelRatio),t.shadowColor=r.color,t.shadowBlur=r.blur*e.browserShadowBlurConstant*(n+o)*(i.scaleX+i.scaleY)/4,t.shadowOffsetX=r.offsetX*n*i.scaleX,t.shadowOffsetY=r.offsetY*o*i.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,s=-this.height/2+e.offsetY||0;return"percentage"===e.gradientUnits?t.transform(this.width,0,0,this.height,r,s):t.transform(1,0,0,1,r,s),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:s}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_render:function(){},_renderFill:function(t){this.fill&&(t.save(),this._setFillStyles(t,this),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform&&this.group){var e=this.getObjectScaling();t.scale(1/e.scaleX,1/e.scaleY)}else this.strokeUniform&&t.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}},_applyPatternForTransformedGradient:function(t,i){var r,s=this._limitCacheSize(this._getCacheCanvasDimensions()),n=e.util.createCanvasElement(),o=this.canvas.getRetinaScaling(),a=s.x/this.scaleX/o,h=s.y/this.scaleY/o;n.width=a,n.height=h,(r=n.getContext("2d")).beginPath(),r.moveTo(0,0),r.lineTo(a,0),r.lineTo(a,h),r.lineTo(0,h),r.closePath(),r.translate(a/2,h/2),r.scale(s.zoomX/this.scaleX/o,s.zoomY/this.scaleY/o),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(t),r.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(o*this.scaleX/s.zoomX,o*this.scaleY/s.zoomY),t.strokeStyle=r.createPattern(n,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},cloneAsImage:function(t,i){var r=this.toCanvasElement(i);return t&&t(new e.Image(r)),this},toCanvasElement:function(t){t||(t={});var i=e.util,r=i.saveObjectTransform(this),s=this.group,n=this.shadow,o=Math.abs,a=(t.multiplier||1)*(t.enableRetinaScaling?e.devicePixelRatio:1);delete this.group,t.withoutTransform&&i.resetObjectTransform(this),t.withoutShadow&&(this.shadow=null);var h,l,c,u,d=e.util.createCanvasElement(),f=this.getBoundingRect(!0,!0),g=this.shadow,_={x:0,y:0};g&&(l=g.blur,h=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),_.x=2*Math.round(o(g.offsetX)+l)*o(h.scaleX),_.y=2*Math.round(o(g.offsetY)+l)*o(h.scaleY)),c=f.width+_.x,u=f.height+_.y,d.width=Math.ceil(c),d.height=Math.ceil(u);var p=new e.StaticCanvas(d,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===t.format&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new e.Point(p.width/2,p.height/2),"center","center");var m=this.canvas;p.add(this);var v=p.toCanvasElement(a||1,t);return this.shadow=n,this.set("canvas",m),s&&(this.group=s),this.set(r).setCoords(),p._objects=[],p.dispose(),p=null,v},toDataURL:function(t){return t||(t={}),e.util.toDataURL(this.toCanvasElement(t),t.format||"png",t.quality||1)},isType:function(t){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),s=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,s,o(-this.angle))),{x:r.x-s.x,y:r.y-s.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){e.runningAnimations&&e.runningAnimations.cancelByTarget(this)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.ENLIVEN_PROPS=["clipPath"],e.Object._fromObject=function(t,i,s,n){var o=e[t];i=r(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],(function(t){void 0!==t[0]&&(i.fill=t[0]),void 0!==t[1]&&(i.stroke=t[1]),e.util.enlivenObjectEnlivables(i,i,(function(){var t=n?new o(i[n],i):new o(i);s&&s(t)}))}))},e.Object.__uid=0)}(e),S=x.util.degreesToRadians,C={left:-.5,center:0,right:.5},b={top:-.5,center:0,bottom:.5},x.util.object.extend(x.Object.prototype,{translateToGivenOrigin:function(t,e,i,r,s){var n,o,a,h=t.x,l=t.y;return"string"==typeof e?e=C[e]:e-=.5,"string"==typeof r?r=C[r]:r-=.5,"string"==typeof i?i=b[i]:i-=.5,"string"==typeof s?s=b[s]:s-=.5,o=s-i,((n=r-e)||o)&&(a=this._getTransformedDimensions(),h=t.x+n*a.x,l=t.y+o*a.y),new x.Point(h,l)},translateToCenterPoint:function(t,e,i){var r=this.translateToGivenOrigin(t,e,i,"center","center");return this.angle?x.util.rotatePoint(r,t,S(this.angle)):r},translateToOriginPoint:function(t,e,i){var r=this.translateToGivenOrigin(t,"center","center",e,i);return this.angle?x.util.rotatePoint(r,t,S(this.angle)):r},getCenterPoint:function(){var t=new x.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(t,e,i){var r,s,n=this.getCenterPoint();return r=void 0!==e&&void 0!==i?this.translateToGivenOrigin(n,"center","center",e,i):new x.Point(this.left,this.top),s=new x.Point(t.x,t.y),this.angle&&(s=x.util.rotatePoint(s,n,-S(this.angle))),s.subtractEquals(r)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),s=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",s.x),this.set("top",s.y)},adjustPosition:function(t){var e,i,r=S(this.angle),s=this.getScaledWidth(),n=x.util.cos(r)*s,o=x.util.sin(r)*s;e="string"==typeof this.originX?C[this.originX]:this.originX-.5,i="string"==typeof t?C[t]:t-.5,this.left+=n*(i-e),this.top+=o*(i-e),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),function(){var t=x.util,e=t.degreesToRadians,i=t.multiplyTransformMatrices,r=t.transformPoint;t.object.extend(x.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(t,e){return e?t?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),t?this.aCoords:this.lineCoords)},getCoords:function(t,e){return i=this._getCoords(t,e),[new x.Point(i.tl.x,i.tl.y),new x.Point(i.tr.x,i.tr.y),new x.Point(i.br.x,i.br.y),new x.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(t,e,i,r){var s=this.getCoords(i,r);return"Intersection"===x.Intersection.intersectPolygonRectangle(s,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===x.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),s=e?t.aCoords:t.lineCoords,n=0,o=t._getImageLines(s);n<4;n++)if(!t.containsPoint(r[n],o))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var s=this.getBoundingRect(i,r);return s.left>=t.x&&s.left+s.width<=e.x&&s.top>=t.y&&s.top+s.height<=e.y},containsPoint:function(t,e,i,r){var s=this._getCoords(i,r),n=(e=e||this._getImageLines(s),this._findCrossPoints(t,e));return 0!==n&&n%2==1},isOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,t).some((function(t){return t.x<=i.x&&t.x>=e.x&&t.y<=i.y&&t.y>=e.y}))||!!this.intersectsWithRect(e,i,!0,t)||this._containsCenterOfCanvas(e,i,t)},_containsCenterOfCanvas:function(t,e,i){var r={x:(t.x+e.x)/2,y:(t.y+e.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(e,i,!0,t)||this.getCoords(!0,t).every((function(t){return(t.x>=i.x||t.x<=e.x)&&(t.y>=i.y||t.y<=e.y)}))&&this._containsCenterOfCanvas(e,i,t)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,s,n=0;for(var o in e)if(!((s=e[o]).o.y=t.y&&s.d.y>=t.y||(s.o.x===s.d.x&&s.o.x>=t.x?r=s.o.x:(i=(s.d.y-s.o.y)/(s.d.x-s.o.x),r=-(t.y-0*t.x-(s.o.y-i*s.o.x))/(0-i)),r>=t.x&&(n+=1),2!==n)))break;return n},getBoundingRect:function(e,i){var r=this.getCoords(e,i);return t.makeBoundingBoxFromPoints(r)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)\n')}},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})},toClipPathSVG:function(t){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})},_createBaseClipPathSVGMarkup:function(t,e){var i=(e=e||{}).reviver,r=e.additionalTransform||"",s=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),n=t.indexOf("COMMON_PARTS");return t[n]=s,i?i(t.join("")):t.join("")},_createBaseSVGMarkup:function(t,e){var i,r,s=(e=e||{}).noStyle,n=e.reviver,o=s?"":'style="'+this.getSvgStyles()+'" ',a=e.withShadow?'style="'+this.getSvgFilter()+'" ':"",h=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=h&&h.absolutePositioned,u=this.stroke,d=this.fill,f=this.shadow,g=[],_=t.indexOf("COMMON_PARTS"),p=e.additionalTransform;return h&&(h.clipPathId="CLIPPATH_"+x.Object.__uid++,r='\n'+h.toClipPathSVG(n)+"\n"),c&&g.push("\n"),g.push("\n"),i=[o,l,s?"":this.addPaintOrder()," ",p?'transform="'+p+'" ':""].join(""),t[_]=i,d&&d.toLive&&g.push(d.toSVG(this)),u&&u.toLive&&g.push(u.toSVG(this)),f&&g.push(f.toSVG(this)),h&&g.push(r),g.push(t.join("")),g.push("\n"),c&&g.push("\n"),n?n(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var t=x.util.object.extend,e="stateProperties";function i(e,i,r){var s={};r.forEach((function(t){s[t]=e[t]})),t(e[i],s,!0)}function r(t,e,i){if(t===e)return!0;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var s=0,n=t.length;s=0;h--)if(s=a[h],this.isControlVisible(s)&&(r=this._getImageLines(e?this.oCoords[s].touchCorner:this.oCoords[s].corner),0!==(i=this._findCrossPoints({x:n,y:o},r))&&i%2==1))return this.__corner=s,s;return!1},forEachControl:function(t){for(var e in this.controls)t(this.controls[e],e,this)},_setCornerCoords:function(){var t=this.oCoords;for(var e in t){var i=this.controls[e];t[e].corner=i.calcCornerCoords(this.angle,this.cornerSize,t[e].x,t[e].y,!1),t[e].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,t[e].x,t[e].y,!0)}},drawSelectionBackground:function(e){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;e.save();var i=this.getCenterPoint(),r=this._calculateCurrentDimensions(),s=this.canvas.viewportTransform;return e.translate(i.x,i.y),e.scale(1/s[0],1/s[3]),e.rotate(t(this.angle)),e.fillStyle=this.selectionBackgroundColor,e.fillRect(-r.x/2,-r.y/2,r.x,r.y),e.restore(),this},drawBorders:function(t,e){e=e||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,s=i.x+r,n=i.y+r,o=void 0!==e.hasControls?e.hasControls:this.hasControls,a=!1;return t.save(),t.strokeStyle=e.borderColor||this.borderColor,this._setLineDash(t,e.borderDashArray||this.borderDashArray),t.strokeRect(-s/2,-n/2,s,n),o&&(t.beginPath(),this.forEachControl((function(e,i,r){e.withConnection&&e.getVisibility(r,i)&&(a=!0,t.moveTo(e.x*s,e.y*n),t.lineTo(e.x*s+e.offsetX,e.y*n+e.offsetY))})),a&&t.stroke()),t.restore(),this},drawBordersInGroup:function(t,e,i){i=i||{};var r=x.util.sizeAfterTransform(this.width,this.height,e),s=this.strokeWidth,n=this.strokeUniform,o=this.borderScaleFactor,a=r.x+s*(n?this.canvas.getZoom():e.scaleX)+o,h=r.y+s*(n?this.canvas.getZoom():e.scaleY)+o;return t.save(),this._setLineDash(t,i.borderDashArray||this.borderDashArray),t.strokeStyle=i.borderColor||this.borderColor,t.strokeRect(-a/2,-h/2,a,h),t.restore(),this},drawControls:function(t,e){e=e||{},t.save();var i,r,s=this.canvas.getRetinaScaling();return t.setTransform(s,0,0,s,0,0),t.strokeStyle=t.fillStyle=e.cornerColor||this.cornerColor,this.transparentCorners||(t.strokeStyle=e.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(t,e.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl((function(s,n,o){r=o.oCoords[n],s.getVisibility(o,n)&&(i&&(r=x.util.transformPoint(r,i)),s.render(t,r.x,r.y,e,o))})),t.restore(),this},isControlVisible:function(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)},setControlVisible:function(t,e){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e,this},setControlsVisibility:function(t){for(var e in t||(t={}),t)this.setControlVisible(e,t[e]);return this},onDeselect:function(){},onSelect:function(){}})}(),x.util.object.extend(x.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,s=e.onChange||i,n=this;return x.util.animate({target:this,startValue:t.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(e){t.set("left",e),n.requestRenderAll(),s()},onComplete:function(){t.setCoords(),r()}})},fxCenterObjectV:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,s=e.onChange||i,n=this;return x.util.animate({target:this,startValue:t.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(e){t.set("top",e),n.requestRenderAll(),s()},onComplete:function(){t.setCoords(),r()}})},fxRemove:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,s=e.onChange||i,n=this;return x.util.animate({target:this,startValue:t.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){t.set("opacity",e),n.requestRenderAll(),s()},onComplete:function(){n.remove(t),r()}})}}),x.util.object.extend(x.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var t,e,i=[],r=[];for(t in arguments[0])i.push(t);for(var s=0,n=i.length;s-1||s&&n.colorProperties.indexOf(s[1])>-1,a=s?this.get(s[0])[s[1]]:this.get(t);"from"in i||(i.from=a),o||(e=~e.indexOf("=")?a+parseFloat(e.replace("=","")):parseFloat(e));var h={target:this,startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(t,e,r){return i.abort.call(n,t,e,r)},onChange:function(e,o,a){s?n[s[0]][s[1]]=e:n.set(t,e),r||i.onChange&&i.onChange(e,o,a)},onComplete:function(t,e,s){r||(n.setCoords(),i.onComplete&&i.onComplete(t,e,s))}};return o?x.util.animateColor(h.startValue,h.endValue,h.duration,h):x.util.animate(h)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,s={x1:1,x2:1,y1:1,y2:1};function n(t,e){var i=t.origin,r=t.axis1,s=t.axis2,n=t.dimension,o=e.nearest,a=e.center,h=e.farthest;return function(){switch(this.get(i)){case o:return Math.min(this.get(r),this.get(s));case a:return Math.min(this.get(r),this.get(s))+.5*this.get(n);case h:return Math.max(this.get(r),this.get(s))}}}e.Line?e.warn("fabric.Line is already defined"):(e.Line=e.util.createClass(e.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:e.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,e){t||(t=[0,0,0,0]),this.callSuper("initialize",e),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(e)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,e){return this.callSuper("_set",t,e),void 0!==s[t]&&this._setWidthHeight(),this},_getLeftToOriginX:n({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:n({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){t.beginPath();var e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.lineWidth=this.strokeWidth;var i=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return i(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,e=this.y1<=this.y2?-1:1,i=t*this.width*.5,r=e*this.height*.5;return{x1:i,x2:t*this.width*-.5,y1:r,y2:e*this.height*-.5}},_toSVG:function(){var t=this.calcLinePoints();return["\n']}}),e.Line.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),e.Line.fromElement=function(t,r,s){s=s||{};var n=e.parseAttributes(t,e.Line.ATTRIBUTE_NAMES),o=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];r(new e.Line(o,i(n,s)))},e.Line.fromObject=function(t,i){var s=r(t,!0);s.points=[t.x1,t.y1,t.x2,t.y2],e.Object._fromObject("Line",s,(function(t){delete t.points,i&&i(t)}),"points")})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.degreesToRadians;e.Circle?e.warn("fabric.Circle is already defined."):(e.Circle=e.util.createClass(e.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:e.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,r=(this.endAngle-this.startAngle)%360;if(0===r)t=["\n'];else{var s=i(this.startAngle),n=i(this.endAngle),o=this.radius;t=['180?"1":"0")+" 1"," "+e.util.cos(n)*o+" "+e.util.sin(n)*o,'" ',"COMMON_PARTS"," />\n"]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,i(this.startAngle),i(this.endAngle),!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),e.Circle.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),e.Circle.fromElement=function(t,i){var r,s=e.parseAttributes(t,e.Circle.ATTRIBUTE_NAMES);if(!("radius"in(r=s)&&r.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");s.left=(s.left||0)-s.radius,s.top=(s.top||0)-s.radius,i(new e.Circle(s))},e.Circle.fromObject=function(t,i){e.Object._fromObject("Circle",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={});e.Triangle?e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_toSVG:function(){var t=this.width/2,e=this.height/2;return["']}}),e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=2*Math.PI;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){var r=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new e.Ellipse(r))},e.Ellipse.fromObject=function(t,i){e.Object._fromObject("Ellipse",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,s=this.height,n=-this.width/2,o=-this.height/2,a=0!==e||0!==i,h=.4477152502;t.beginPath(),t.moveTo(n+e,o),t.lineTo(n+r-e,o),a&&t.bezierCurveTo(n+r-h*e,o,n+r,o+h*i,n+r,o+i),t.lineTo(n+r,o+s-i),a&&t.bezierCurveTo(n+r,o+s-h*i,n+r-h*e,o+s,n+r-e,o+s),t.lineTo(n+e,o+s),a&&t.bezierCurveTo(n+h*e,o+s,n,o+s-h*i,n,o+s-i),t.lineTo(n,o+i),a&&t.bezierCurveTo(n,o+h*i,n+h*e,o,n+e,o),t.closePath(),this._renderPaintInOrder(t)},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r,s){if(!t)return r(null);s=s||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0,n.height=n.height||0,n.width=n.width||0;var o=new e.Rect(i(s?e.util.object.clone(s):{},n));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,s=e.util.array.max,n=e.util.toFixed,o=e.util.projectStrokeOnPoints;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._setPositionDimensions(e)},_projectStrokeOnPoints:function(){return o(this.points,this,!0)},_setPositionDimensions:function(t){var e,i=this._calcDimensions(t),r=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-r,this.height=i.height-r,t.fromSVG||(e=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+r/2,y:i.top-this.strokeWidth/2+r/2},"left","top",this.originX,this.originY)),void 0===t.left&&(this.left=t.fromSVG?i.left:e.x),void 0===t.top&&(this.top=t.fromSVG?i.top:e.y),this.pathOffset={x:i.left+this.width/2+r/2,y:i.top+this.height/2+r/2}},_calcDimensions:function(){var t=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,e=r(t,"x")||0,i=r(t,"y")||0;return{left:e,top:i,width:(s(t,"x")||0)-e,height:(s(t,"y")||0)-i}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},_toSVG:function(){for(var t=[],i=this.pathOffset.x,r=this.pathOffset.y,s=e.Object.NUM_FRACTION_DIGITS,o=0,a=this.points.length;o\n']},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,s=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-s);for(var n=0;n"},toObject:function(t){return s(this.callSuper("toObject",t),{path:this.path.map((function(t){return t.slice()}))})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},_toSVG:function(){return["\n"]},_getOffsetTransform:function(){var t=e.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,t)+", "+o(-this.pathOffset.y,t)+")"},toClipPathSVG:function(t){var e=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},toSVG:function(t){var e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var t,s,n=[],o=[],a=0,h=0,l=0,c=0,u=0,d=this.path.length;u"},addWithUpdate:function(t){var i=!!this.group;return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(i&&e.util.removeTransformFromObject(t,this.group.calcTransformMatrix()),this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);if("canvas"===t)for(;r--;)this._objects[r]._set(t,i);e.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,r=this._objects.filter((function(t){return!t.excludeFromExport})).map((function(e){var r=e.includeDefaultValues;e.includeDefaultValues=i;var s=e.toObject(t);return e.includeDefaultValues=r,s})),s=e.Object.prototype.toObject.call(this,t);return s.objects=r,s},toDatalessObject:function(t){var i,r=this.sourcePath;if(r)i=r;else{var s=this.includeDefaultValues;i=this._objects.map((function(e){var i=e.includeDefaultValues;e.includeDefaultValues=s;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r}))}var n=e.Object.prototype.toDatalessObject.call(this,t);return n.objects=i,n},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=e.Object.prototype.shouldCache.call(this);if(t)for(var i=0,r=this._objects.length;i\n"],i=0,r=this._objects.length;i\n"),e},getSvgStyles:function(){var t=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")},toClipPathSVG:function(t){for(var e=[],i=0,r=this._objects.length;i"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",t,e),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,s=this._objects.length;r\n','\t\n',"\n"),o=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(a='" image-rendering="optimizeSpeed'),i.push("\t\n"),this.stroke||this.strokeDashArray){var l=this.fill;this.fill=null,t=["\t\n'],this.fill=l}return"fill"!==this.paintFirst?e.concat(t,i):e.concat(i,t)},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src"):e.src:this.src||""},setSrc:function(t,e,i){return x.util.loadImage(t,(function(t,r){this.setElement(t,i),this._setWidthHeight(),e&&e(this,r)}),this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,s=i.scaleY,n=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||r>e&&s>e)return this._element=n,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=s);x.filterBackend||(x.filterBackend=x.initFilterBackend());var o=x.util.createCanvasElement(),a=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,h=n.width,l=n.height;o.width=h,o.height=l,this._element=o,this._lastScaleX=t.scaleX=r,this._lastScaleY=t.scaleY=s,x.filterBackend.applyFilters([t],n,h,l,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(t){if(t=(t=t||this.filters||[]).filter((function(t){return t&&!t.isNeutralState()})),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===t.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var s=x.util.createCanvasElement();s.width=i,s.height=r,this._element=s,this._filteredEl=s}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return x.filterBackend||(x.filterBackend=x.initFilterBackend()),x.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){x.util.setImageSmoothing(t,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)},drawCacheOnCanvas:function(t){x.util.setImageSmoothing(t,this.imageSmoothing),x.Object.prototype.drawCacheOnCanvas.call(this,t)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(t){var e=this._element;if(e){var i=this._filterScalingX,r=this._filterScalingY,s=this.width,n=this.height,o=Math.min,a=Math.max,h=a(this.cropX,0),l=a(this.cropY,0),c=e.naturalWidth||e.width,u=e.naturalHeight||e.height,d=h*i,f=l*r,g=o(s*i,c-d),_=o(n*r,u-f),p=-s/2,m=-n/2,v=o(s,c/i-h),y=o(n,u/r-l);e&&t.drawImage(e,d,f,g,_,p,m,v,y)}},_needsResize:function(){var t=this.getTotalObjectScaling();return t.scaleX!==this._lastScaleX||t.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(t,e){this.setElement(x.util.getById(t),e),x.util.addClass(this.getElement(),x.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t)},_initFilters:function(t,e){t&&t.length?x.util.enlivenObjects(t,(function(t){e&&e(t)}),"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){t||(t={});var e=this.getElement();this.width=t.width||e.naturalWidth||e.width||0,this.height=t.height||e.naturalHeight||e.height||0},parsePreserveAspectRatioAttribute:function(){var t,e=x.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,s=1,n=1,o=0,a=0,h=0,l=0,c=this.width,u=this.height,d={width:c,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(s=c/i,n=u/r):("meet"===e.meetOrSlice&&(t=(c-i*(s=n=x.util.findScaleToFit(this._element,d)))/2,"Min"===e.alignX&&(o=-t),"Max"===e.alignX&&(o=t),t=(u-r*n)/2,"Min"===e.alignY&&(a=-t),"Max"===e.alignY&&(a=t)),"slice"===e.meetOrSlice&&(t=i-c/(s=n=x.util.findScaleToCover(this._element,d)),"Mid"===e.alignX&&(h=t/2),"Max"===e.alignX&&(h=t),t=r-u/n,"Mid"===e.alignY&&(l=t/2),"Max"===e.alignY&&(l=t),i=c/s,r=u/n)),{width:i,height:r,scaleX:s,scaleY:n,offsetLeft:o,offsetTop:a,cropX:h,cropY:l}}}),x.Image.CSS_CANVAS="canvas-img",x.Image.prototype.getSvgSrc=x.Image.prototype.getSrc,x.Image.fromObject=function(t,e){var i=x.util.object.clone(t);x.util.loadImage(i.src,(function(t,r){r?e&&e(null,!0):x.Image.prototype._initFilters.call(i,i.filters,(function(r){i.filters=r||[],x.Image.prototype._initFilters.call(i,[i.resizeFilter],(function(r){i.resizeFilter=r[0],x.util.enlivenObjectEnlivables(i,i,(function(){var r=new x.Image(t,i);e(r,!1)}))}))}))}),null,i.crossOrigin)},x.Image.fromURL=function(t,e,i){x.util.loadImage(t,(function(t,r){e&&e(new x.Image(t,i),r)}),null,i&&i.crossOrigin)},x.Image.ATTRIBUTE_NAMES=x.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),x.Image.fromElement=function(t,i,r){var s=x.parseAttributes(t,x.Image.ATTRIBUTE_NAMES);x.Image.fromURL(s["xlink:href"],i,e(r?x.util.object.clone(r):{},s))})}(e),x.util.object.extend(x.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(t){var e=function(){},i=(t=t||{}).onComplete||e,r=t.onChange||e,s=this;return x.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){s.rotate(t),r()},onComplete:function(){s.setCoords(),i()}})}}),x.util.object.extend(x.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function t(t,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),!!t.getShaderParameter(r,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}x.isWebglSupported=function(e){if(x.isLikelyNode)return!1;e=e||x.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),s=!1;if(r){x.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),s=x.maxTextureSize>=e;for(var n=["highp","mediump","lowp"],o=0;o<3;o++)if(t(r,n[o])){x.webGlPrecision=n[o];break}}return this.isSupported=s,s},x.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var s="undefined"!=typeof ArrayBuffer,n="undefined"!=typeof Uint8ClampedArray;if(r&&i&&s&&n){var o=x.util.createCanvasElement(),a=new ArrayBuffer(t*e*4);if(x.forceGLPutImageData)return this.imageBuffer=a,void(this.copyGLTo2D=E);var h,l,c={imageBuffer:a,destinationWidth:t,destinationHeight:e,targetCanvas:o};o.width=t,o.height=e,h=window.performance.now(),I.call(c,this.gl,c),l=window.performance.now()-h,h=window.performance.now(),E.call(c,this.gl,c),l>window.performance.now()-h?(this.imageBuffer=a,this.copyGLTo2D=E):this.copyGLTo2D=I}},createWebGLCanvas:function(t,e){var i=x.util.createCanvasElement();i.width=t,i.height=e;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},s=i.getContext("webgl",r);s||(s=i.getContext("experimental-webgl",r)),s&&(s.clearColor(0,0,0,0),this.canvas=i,this.gl=s)},applyFilters:function(t,e,i,r,s,n){var o,a=this.gl;n&&(o=this.getCachedTexture(n,e));var h={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&e),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:s},l=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,l),t.forEach((function(t){t&&t.applyTo(h)})),function(t){var e=t.targetCanvas,i=e.width,r=e.height,s=t.destinationWidth,n=t.destinationHeight;i===s&&r===n||(e.width=s,e.height=n)}(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(l),s.getContext("2d").setTransform(1,0,0,1,0,0),h},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var s=t.createTexture();return t.bindTexture(t.TEXTURE_2D,s),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),s},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:I,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e={renderer:"",vendor:""};if(!t)return e;var i=t.getExtension("WEBGL_debug_renderer_info");if(i){var r=t.getParameter(i.UNMASKED_RENDERER_WEBGL),s=t.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(e.renderer=r.toLowerCase()),s&&(e.vendor=s.toLowerCase())}return this.gpuInfo=e,e}}}(),function(){var t=function(){};function e(){}x.Canvas2dFilterBackend=e,e.prototype={evictCachesForKey:t,dispose:t,clearWebGLCaches:t,resources:{},applyFilters:function(t,e,i,r,s){var n=s.getContext("2d");n.drawImage(e,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:n.getImageData(0,0,i,r),originalEl:e,originalImageData:n.getImageData(0,0,i,r),canvasEl:s,ctx:n,filterBackend:this};return t.forEach((function(t){t.applyTo(o)})),o.imageData.width===i&&o.imageData.height===r||(s.width=o.imageData.width,s.height=o.imageData.height),n.putImageData(o.imageData,0,0),o}}}(),x.Image=x.Image||{},x.Image.filters=x.Image.filters||{},x.Image.filters.BaseFilter=x.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==x.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+x.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var s=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(s,e),t.compileShader(s),!t.getShaderParameter(s,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(s));var n=t.createProgram();if(t.attachShader(n,r),t.attachShader(n,s),t.linkProgram(n),!t.getProgramParameter(n,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(n));var o=this.getAttributeLocations(t,n),a=this.getUniformLocations(t,n)||{};return a.uStepW=t.getUniformLocation(n,"uStepW"),a.uStepH=t.getUniformLocation(n,"uStepH"),{program:n,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPosition,s=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,s),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){var t=this.mainParameter,e=x.Image.filters[this.type].prototype;if(t){if(Array.isArray(e[t])){for(var i=e[t].length;i--;)if(this[t][i]!==e[t][i])return!1;return!0}return e[t]===this[t]}return!1},applyTo:function(t){t.webgl?(this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),x.Image.filters.BaseFilter.fromObject=function(t,e){var i=new x.Image.filters[t.type](t);return e&&e(i),i},function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,r,s,n,o=t.imageData.data,a=o.length,h=this.matrix,l=this.colorsOnly;for(n=0;n=S||o<0||o>=y||(h=4*(a*y+o),l=p[f*m+d],e+=_[h]*l,i+=_[h+1]*l,r+=_[h+2]*l,w||(s+=_[h+3]*l));b[n]=e,b[n+1]=i,b[n+2]=r,b[n+3]=w?_[n+3]:s}t.imageData=C},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData.data,s=r.length,n=this.mode;for(e=0;el[0]&&s>l[1]&&n>l[2]&&r 0.0) {\n"+this.fragmentSource[t]+"}\n}"},retrieveShader:function(t){var e,i=this.type+"_"+this.mode;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i,r,s,n,o,a,h,l=t.imageData.data,c=l.length,u=1-this.alpha;i=(h=new e.Color(this.color).getSource())[0]*this.alpha,r=h[1]*this.alpha,s=h[2]*this.alpha;for(var d=0;d=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var s,n=e.width,a=e.height,h=o(n*i),l=o(a*r);"sliceHack"===this.resizeType?s=this.sliceByTwo(t,n,a,h,l):"hermite"===this.resizeType?s=this.hermiteFastResize(t,n,a,h,l):"bilinear"===this.resizeType?s=this.bilinearFiltering(t,n,a,h,l):"lanczos"===this.resizeType&&(s=this.lanczosResize(t,n,a,h,l)),t.imageData=s},sliceByTwo:function(t,i,s,n,o){var a,h,l=t.imageData,c=.5,u=!1,d=!1,f=i*c,g=s*c,_=e.filterBackend.resources,p=0,m=0,v=i,y=0;for(_.sliceByTwo||(_.sliceByTwo=document.createElement("canvas")),((a=_.sliceByTwo).width<1.5*i||a.height=e)){M=r(1e3*n(x-C.x)),S[M]||(S[M]={});for(var L=b.y-y;L<=b.y+y;L++)L<0||L>=o||(F=r(1e3*n(L-C.y)),S[M][F]||(S[M][F]=f(s(i(M*p,2)+i(F*m,2))/1e3)),(T=S[M][F])>0&&(E+=T,O+=T*c[I=4*(L*e+x)],R+=T*c[I+1],D+=T*c[I+2],A+=T*c[I+3]))}d[I=4*(w*a+h)]=O/E,d[I+1]=R/E,d[I+2]=D/E,d[I+3]=A/E}return++h1&&F<-1||(y=2*F*F*F-3*F*F+1)>0&&(T+=y*f[3+(M=4*(A+E*e))],C+=y,f[M+3]<255&&(y=y*f[M+3]/250),b+=y*f[M],w+=y*f[M+1],x+=y*f[M+2],S+=y)}_[v]=b/S,_[v+1]=w/S,_[v+2]=x/S,_[v+3]=T/C}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i=t.imageData.data,r=i.length,s=Math.floor(255*this.contrast),n=259*(s+255)/(255*(259-s));for(e=0;e1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var e,i=t.imageData.data,r=this.gamma,s=i.length,n=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,s=256;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){var e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){if(t.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline="bottom"}t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,s,n){this._renderChars(t,e,i,r,s,n)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,s,n,o,a,h=t.fillStyle,l=this._getLeftOffset(),c=this._getTopOffset(),u=0,d=0,f=this.path,g=0,_=this._textLines.length;g<_;g++)if(e=this.getHeightOfLine(g),this.textBackgroundColor||this.styleHas("textBackgroundColor",g)){r=this._textLines[g],i=this._getLineLeftOffset(g),d=0,u=0,s=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var p=0,m=r.length;p=0:ia?u%=a:u<0&&(u+=a),this._setGraphemeOnPath(u,n,o),u+=n.kernedWidth}return{width:h,numOfSpaces:0}},_setGraphemeOnPath:function(t,i,r){var s=t+i.kernedWidth/2,n=this.path,o=e.util.getPointOnPath(n.path,s,n.segmentsInfo);i.renderLeft=o.x-r.x,i.renderTop=o.y-r.y,i.angle=o.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(t,e,i,r,s){var n,o=this.getCompleteStyleDeclaration(e,i),a=r?this.getCompleteStyleDeclaration(e,i-1):{},h=this._measureChar(t,o,r,a),l=h.kernedWidth,c=h.width;0!==this.charSpacing&&(c+=n=this._getWidthOfCharSpacing(),l+=n);var u={width:c,left:0,height:o.fontSize,kernedWidth:l,deltaY:o.deltaY};if(i>0&&!s){var d=this.__charBounds[e][i-1];u.left=d.left+d.width+h.kernedWidth-h.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,s=e.length;r0){var E=v+n+u;"rtl"===this.direction&&(E=this.width-E-d),l&&m&&(t.fillStyle=m,t.fillRect(E,c+b*r+o,d,this.fontSize/15)),u=f.left,d=f.width,l=g,m=p,r=s,o=a}else d+=f.kernedWidth;E=v+n+u,"rtl"===this.direction&&(E=this.width-E-d),t.fillStyle=p,g&&p&&t.fillRect(E,c+b*r+o,d-C,this.fontSize/15),y+=i}else y+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,s=this.fontFamily,n=e.Text.genericFonts.indexOf(s.toLowerCase())>-1,o=void 0===s||s.indexOf("'")>-1||s.indexOf(",")>-1||s.indexOf('"')>-1||n?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),s=["\n"],n=[],o=0;o-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}x.IText=x.util.createClass(x.Text,x.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this._getCursorBoundaries(),e=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(t,e):this.renderSelection(t,e),e.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var e,i,r,s,n=0,o=0,a=this.get2DCursorLocation(t);r=a.charIndex,i=a.lineIndex;for(var h=0;h0?o:0)},"rtl"===this.direction&&(s.left*=-1),this.cursorOffsetCache=s,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,s=i.charIndex>0?i.charIndex-1:0,n=this.getValueOfPropertyAt(r,s,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=t.topOffset,l=this.getValueOfPropertyAt(r,s,"deltaY");h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-n*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.cursorColor||this.getValueOfPropertyAt(r,s,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,h+t.top+l,a,n)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,s=-1!==this.textAlign.indexOf("justify"),n=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=n.lineIndex,h=o.lineIndex,l=n.charIndex<0?0:n.charIndex,c=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var d,f=this._getLineLeftOffset(u)||0,g=this.getHeightOfLine(u),_=0,p=0;if(u===a&&(_=this.__charBounds[a][l].left),u>=a&&u1)&&(g/=this.lineHeight);var v=t.left+f+_,y=p-_,S=g,C=0;this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",S=1,C=g):e.fillStyle=this.selectionColor,"rtl"===this.direction&&(v=this.width-v-y),e.fillRect(v,t.top+t.topOffset+C,y,S),t.topOffset+=d}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),x.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var s in e.styles[r])t(e.styles[r][s]);x.Object._fromObject("IText",e,i,"text")}}(),w=x.util.object.clone,x.util.object.extend(x.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var t=this;this.on("added",(function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))}))},initRemovedHandler:function(){var t=this;this.on("removed",(function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],x.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))}))},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach((function(t){t.__isMousedown=!1}))},t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var s;return s={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){s.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return s.isAborted}}),s},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout((function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")}),100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout((function(){e._tick()}),i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),s=x.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:s,selectionEnd:s};var n=i.slice(t,e);return{selectionStart:s,selectionEnd:s+x.util.string.graphemeSplit(n).length}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t).join("").length;return t===e?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(t,e).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,s=i.charIndex,n=this.getValueOfPropertyAt(r,s,"fontSize")*this.lineHeight,o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+n},l=this.canvas.getRetinaScaling(),c=this.canvas.upperCanvasEl,u=c.width/l,d=c.height/l,f=u-n,g=d-n,_=c.clientWidth/u,p=c.clientHeight/d;return h=x.util.transformPoint(h,a),(h=x.util.transformPoint(h,this.canvas.viewportTransform)).x*=_,h.y*=p,h.x<0&&(h.x=0),h.x>f&&(h.x=f),h.y<0&&(h.y=0),h.y>g&&(h.y=g),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:n+"px",charHeight:n}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text,e=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,e&&(e.blur&&e.blur(),e.parentNode&&e.parentNode.removeChild(e)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,r,s=this.get2DCursorLocation(t,!0),n=this.get2DCursorLocation(e,!0),o=s.lineIndex,a=s.charIndex,h=n.lineIndex,l=n.charIndex;if(o!==h){if(this.styles[o])for(i=a;i=l&&(r[c-d]=r[u],delete r[u])}},shiftLineStyles:function(t,e){var i=w(this.styles);for(var r in this.styles){var s=parseInt(r,10);s>t&&(this.styles[s+e]=i[s],i[s-e]||delete this.styles[s])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(t,e,i,r){var s,n={},o=!1,a=this._unwrappedTextLines[t].length===e;for(var h in i||(i=1),this.shiftLineStyles(t,i),this.styles[t]&&(s=this.styles[t][0===e?e:e-1]),this.styles[t]){var l=parseInt(h,10);l>=e&&(o=!0,n[l-e]=this.styles[t][h],a&&0===e||delete this.styles[t][h])}var c=!1;for(o&&!a&&(this.styles[t+i]=n,c=!0),c&&i--;i>0;)r&&r[i-1]?this.styles[t+i]={0:w(r[i-1])}:s?this.styles[t+i]={0:w(s)}:delete this.styles[t+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(t,e,i,r){this.styles||(this.styles={});var s=this.styles[t],n=s?w(s):{};for(var o in i||(i=1),n){var a=parseInt(o,10);a>=e&&(s[a+i]=n[a],n[a-i]||delete s[a])}if(this._forceClearCache=!0,r)for(;i--;)Object.keys(r[i]).length&&(this.styles[t]||(this.styles[t]={}),this.styles[t][e+i]=w(r[i]));else if(s)for(var h=s[e?e-1:1];h&&i--;)this.styles[t][e+i]=w(h)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),s=[0],n=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,s[0],i),i=i&&i.slice(s[0]+1)),n&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+s[0],n),o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,s[o],i):i&&this.styles[r.lineIndex+o]&&i[0]&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(s[o]+1);s[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,s[o],i)},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}}),x.util.object.extend(x.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(t){if(this.canvas){this.__newClickTime=+new Date;var e=t.pointer;this.isTripleClick(e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(t){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(t.e))},tripleClickHandler:function(t){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(t.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(t.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(t){if(this.__isMousedown=!1,!(!this.editable||this.group||t.transform&&t.transform.actionPerformed||t.e.button&&1!==t.e.button)){if(this.canvas){var e=this.canvas._activeObject;if(e&&e!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i=this.getLocalPointer(t),r=0,s=0,n=0,o=0,a=0,h=0,l=this._textLines.length;h0&&(o+=this._textLines[h-1].length+this.missingNewlineOffset(h-1));s=this._getLineLeftOffset(a)*this.scaleX,e=this._textLines[a],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+s);for(var c=0,u=e.length;cn||o<0?0:1);return this.flipX&&(a=s-a),a>this._text.length&&(a=this._text.length),a}}),x.util.object.extend(x.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=x.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+t.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):x.document.body.appendChild(this.hiddenTextarea),x.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),x.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),x.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),x.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(x.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){var e="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(t.keyCode in e)this[e[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown)||!t.ctrlKey&&!t.metaKey)return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,s,n,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,l=a.length,c=l-h,u=this.selectionStart,d=this.selectionEnd,f=u!==d;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),_=u>g.selectionStart;f?(i=this._text.slice(u,d),c+=d-u):l0&&(r+=(i=this.__charBounds[t][e-1]).left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),s=r.lineIndex;if(s===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var n=r.charIndex,o=this._getWidthBeforeCursor(s,n),a=this._getIndexOnLine(s+1,o);return this._textLines[s].slice(n).length+a+1+this.missingNewlineOffset(s)},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),s=r.lineIndex;if(0===s||t.metaKey||33===t.keyCode)return-i;var n=r.charIndex,o=this._getWidthBeforeCursor(s,n),a=this._getIndexOnLine(s-1,o),h=this._textLines[s].slice(0,n),l=this.missingNewlineOffset(s-1);return-this._textLines[s-1].length+a-h.length+(1-l)},_getIndexOnLine:function(t,e){for(var i,r,s=this._textLines[t],n=this._getLineLeftOffset(t),o=0,a=0,h=s.length;ae){r=!0;var l=n-i,c=n,u=Math.abs(l-e);o=Math.abs(c-e)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,e.shiftKey?i+="Shift":i+="outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var s=x.util.string.graphemeSplit(t);this.insertNewStyleBlock(s,i,e),this._text=[].concat(this._text.slice(0,i),s,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var t=x.util.toFixed,e=/ +/g;x.util.object.extend(x.Text.prototype,{_toSVG:function(){var t=this._getSVGLeftTopOffsets(),e=this._getSVGTextAndBg(t.textTop,t.textLeft);return this._wrapSVGTextAndBg(e)},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t){var e=this.getSvgTextDecoration(this);return[t.textBgRects.join(""),'\t\t",t.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(t,e){var i,r=[],s=[],n=t;this._setSVGBg(s);for(var o=0,a=this._textLines.length;o",x.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(t,e,i,r){var s,n,o,a,h,l=this.getHeightOfLine(e),c=-1!==this.textAlign.indexOf("justify"),u="",d=0,f=this._textLines[e];r+=l*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,_=f.length-1;g<=_;g++)h=g===_||this.charSpacing,u+=f[g],o=this.__charBounds[e][g],0===d?(i+=o.kernedWidth-o.width,d+=o.width):d+=o.kernedWidth,c&&!h&&this._reSpaceAndTab.test(f[g])&&(h=!0),h||(s=s||this.getCompleteStyleDeclaration(e,g),n=this.getCompleteStyleDeclaration(e,g+1),h=this._hasStyleChangedForSvg(s,n)),h&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",s=n,i+=d,d=0)},_pushTextBgRect:function(e,i,r,s,n,o){var a=x.Object.NUM_FRACTION_DIGITS;e.push("\t\t\n')},_setSVGTextLineBg:function(t,e,i,r){for(var s,n,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,h=0,l=0,c=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,d=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,r=0,s={},n=0;n0?(i=0,r++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[r])&&n>0&&(i++,r++),s[n]={line:e,offset:i},r+=t.graphemeLines[n].length,i+=t.graphemeLines[n].length;return s},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},isEmptyStyles:function(t){if(!this.styles)return!0;var e,i,r=0,s=!1,n=this._styleMap[t],o=this._styleMap[t+1];for(var a in n&&(t=n.line,r=n.offset),o&&(s=o.line===t,e=o.offset),i=void 0===t?this.styles:{line:this.styles[t]})for(var h in i[a])if(h>=r&&(!s||hr&&!p?(a.push(h),h=[],n=f,p=!0):n+=m,p||o||h.push(d),h=h.concat(c),g=o?0:this._measureWord([d],i,u),u++,p=!1,f>_&&(_=f);return v&&a.push(h),_+s>this.dynamicMinWidth&&(this.dynamicMinWidth=_-m+s),a},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},missingNewlineOffset:function(t){return this.splitByGrapheme?this.isEndOfWrapping(t)?1:0:1},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),s=new Array(r.length),n=0;n{},898:()=>{},245:()=>{}},E={};function O(t){var e=E[t];if(void 0!==e)return e.exports;var i=E[t]={exports:{}};return I[t](i,i.exports,O),i.exports}O.d=(t,e)=>{for(var i in e)O.o(e,i)&&!O.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},O.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var R={};(()=>{let t;O.d(R,{R:()=>t}),t="undefined"!=typeof document&&"undefined"!=typeof window?O(653).fabric:{version:"5.2.1"}})();var D=R.R; +import{Howl as t}from"dm-howler";const e="undefined"==typeof self,i=e?{}:self;let r,n,s,o,a;if("undefined"!=typeof navigator&&(r=navigator,n=r.userAgent,s=r.platform,o=r.mediaDevices),!e){const t={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:r.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},e={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:s,search:"Win"},Mac:{str:s},Linux:{str:s}};let i="unknownBrowser",o=0,h="unknownOS";for(let e in t){const r=t[e]||{};let s=r.str||n,a=r.search||e,h=r.verStr||n,l=r.verSearch||e;if(l instanceof Array||(l=[l]),-1!=s.indexOf(a)){i=e;for(let t of l){let e=h.indexOf(t);if(-1!=e){o=parseFloat(h.substring(e+t.length+1));break}}break}}for(let t in e){const i=e[t]||{};let r=i.str||n,s=i.search||t;if(-1!=r.indexOf(s)){h=t;break}}"Linux"==h&&-1!=n.indexOf("Windows NT")&&(h="HarmonyOS"),a={browser:i,version:o,OS:h}}e&&(a={browser:"ssr",version:0,OS:"ssr"});const h="undefined"!=typeof WebAssembly&&n&&!(/Safari/.test(n)&&!/Chrome/.test(n)&&/\(.+\s11_2_([2-6]).*\)/.test(n)),l=!("undefined"==typeof Worker),c=!(!o||!o.getUserMedia),u=async()=>{let t=!1;if(c)try{(await o.getUserMedia({video:!0})).getTracks().forEach((t=>{t.stop()})),t=!0}catch(t){}return t};"Chrome"===a.browser&&a.version>66||"Safari"===a.browser&&a.version>13||"OPR"===a.browser&&a.version>43||"Edge"===a.browser&&a.version;const d=(()=>{if(!e&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"})(),f=" is not allowed to change after `createInstance` or `loadWasm` is called.",g=!e&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",_=!e&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",p=t=>{if(null==t)t=[];else{t=t instanceof Array?[...t]:[t];for(let i=0;it&&"object"==typeof t&&"function"==typeof t.then;class b extends Promise{constructor(t){let e,i;super(((t,r)=>{e=t,i=r})),this._s="pending",this.resolve=t=>{this.isPending&&(w(t)?this.task=t:(this._s="fulfilled",e(t)))},this.reject=t=>{this.isPending&&(this._s="rejected",i(t))},this.task=t}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(t){let e;this._task=t,w(t)?e=t:"function"==typeof t&&(e=new Promise(t)),e&&(async()=>{try{const i=await e;t===this._task&&this.resolve(i)}catch(e){t===this._task&&this.reject(e)}})()}get isEmpty(){return null==this._task}}const x=["iPhone","iPad","Android","HarmonyOS"].includes(a.OS)?2048:4096;class T{constructor(){this._instanceID=void 0,this._ifSaveOriginalImageInACanvas=!1,this.oriCanvas=null,this.oriCanvasData=null,this.canvas=null,this.bFilterRegionInJs=!1,this._region=null,this._timeStartDecode=null,this._timeEnterInnerDBR=null,this._timeGetMessage=null,this.decodeRecords={},this.bDestroyed=!1,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._indexCurrentDecodingFrame=0,this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.captureAndDecodeInParallel=!0,this.autoSuggestTip=!1,this.suggestTipFrameArray=[],this.suggestTipFrameLimit=[5,3],this.noIntermediateResultsCount=0,this.noIntermediateResultsTipLimit=100,this.tinyBarcodeTipModuleSizeLimit=3,this.hugeBarcodeTipLimit=.9,this.autoZoomInFrameArray=[],this.autoZoomInFrameLimit=[5,3],this.autoZoomInStepRate=1/3,this.autoZoomInMaxStep=1.5,this.autoZoomInMaxTimes=5,this.autoZoomInMinStep=Math.pow(10,1/this.autoZoomInMaxTimes),this.autoZoomInIdealModuleSize=6,this.autoZoomOutFrameCount=0,this.autoZoomOutFrameLimit=3,this.autoZoomOutStepRate=1/3,this.autoZoomOutMinValue=1,this.autoZoomOutMinStep=2,this.autoZoomOutStepRate_2=.05,this.autoZoomOutMinValue_2=2,this.frameArrayInIdealZoom=[],this.frameLimitInIdealZoom=[5,3],this.enableZoomOutInIdealZoom=!1,this.nextActionInIdealZoom="focus",this.autoFocusFrameArray=[],this.autoFocusFrameLimit=[5,3],this.autoZoomIdealArea=[0,.05],this.autoZoomTargetBorder=.9,this.autoZoomDetectionArea=.5,this.autoZoom=!1,this.autoFocus=!1,this._resultHighlightingDuration=-1,this._dce=null,this._imgSource=null,this._maxCvsSideLength=x,this._promiseStartScan=null,this.beepSound=new t({src:[this._soundSource],onplayerror:(t,e)=>{console.warn(`Sound '${t}' playback failure: ${e}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`license`"+f);i._license=e})(T,t)}static get productKeys(){return this._license}static set productKeys(t){T.license=t}static get handshakeCode(){return this._license}static set handshakeCode(t){T.license=t}static get organizationID(){return this._license}static set organizationID(t){T.license=t}static set sessionPassword(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`sessionPassword`"+f);i._sessionPassword=e})(T,t)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:h,worker:l,getUserMedia:c,camera:await u(),browser:a.browser,version:a.version,OS:a.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(t){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");T._engineResourcePath=(t=>{if(null==t&&(t="./"),!e){let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(t)}static get licenseServer(){return this._licenseServer}static set licenseServer(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`licenseServer`"+f);i._licenseServer=p(e)})(T,t)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(t){((t,e)=>{const i=t;if(!i._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+f);i._deviceFriendlyName=e||""})(T,t)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(t){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");T.__bUseFullFeature=t}static isImageSource(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&"getImage"in t}static isDSImage(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&("data"in t&&("width"in t&&("height"in t&&"pixelFormat"in t)))}static isDCEFrame(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&("data"in t&&("region"in t&&("sx"in t&&("sy"in t&&("width"in t&&("height"in t&&(("colorMode"in t||"pixelFormat"in t)&&("timeSpent"in t&&("timeStamp"in t&&("isCropped"in t&&("toCanvas"in t&&("_sWidth"in t&&("_sHeight"in t&&"_bUseWebGL"in t)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(t){this._ifSaveOriginalImageInACanvas=t}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(t){this._region=t,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var t;return null===(t=T._defaultUIElementURL)||void 0===t?void 0:t.replace("@engineResourcePath/",T.engineResourcePath)}static set defaultUIElementURL(t){T._defaultUIElementURL=t}static _fireHTTPSWarnning(){T.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{T.onWarning&&T.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new t({src:[this._soundSource],onplayerror:(t,e)=>{console.warn(`Sound '${t}' playback failure: ${e}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(t){this.bPlaySoundOnSuccessfulRead="never"!==t&&t}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(t){this.bVibrateOnSuccessfulRead="never"!==t&&t}set dce(t){this._dce=t}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(t){this._maxCvsSideLength=t,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",t)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;T._onLog&&T._onLog("_registerDCEControler()");const t=this.dce;this._dceControler=t._createControler();const e=this._dceControler;e.register(this),e.setDisiredValue(this,"refreshInterval",200),e.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(t){"ReferenceError"===t.name&&window&&(window.ResizeObserver=void 0)}const i=t.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{i?i===e._innerSetUI&&(await t.setUIElement(`${r.engineResourcePath}dce.ui.html`),e._innerSetUI=t.getUIElement()):(await t.setUIElement(`${r.engineResourcePath}dbr.ui.html`),e._innerSetUI=t.getUIElement())}catch(e){await t.setUIElement(r.defaultUIElementURL)}else i||await t.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async t=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let e=await this._decode_DCEFrame(t,{bCopyData:!1}),i=null;if(e&&e.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:h}=t;i=e.map((t=>({localizationResult:JSON.parse(JSON.stringify(t.localizationResult))}))),T.recalculateResultLocation(i,r,n,a,h,s,o)}if(this._drawResults(i,e),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let t of e)this.onUniqueRead(t.barcodeText,this._cloneDecodeResults(t))},t.on("cameraChange",this.callbackCameraChange),t.on("resolutionChange",this.callbackResolutionChange),t.on("cameraClose",this.callbackCameraClose),t.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(T._onLog&&T._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(t,e){if(null==t)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(t&&t.isCameraEnhancer)this.dce=t,await this._registerDCEControler(),this._imgSource=null;else{if(!T.isImageSource(t))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=t}e&&e.resultsHighlightBaseShapes&&(this._drawingItemNamespace=e.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:t,l:e,ls:r,sp:n,rmk:s}=(t=>{const e=t;if(e._pLoad.isEmpty){let t,r,n=e._license||"",s=JSON.parse(JSON.stringify(e._licenseServer)),o=e._sessionPassword,a=0;if(n.startsWith("t")||n.startsWith("f"))a=0;else if(0===n.length||n.startsWith("P")||n.startsWith("L")||n.startsWith("Y")||n.startsWith("A"))a=1;else{a=2;const e=n.indexOf(":");if(-1!=e&&(n=n.substring(e+1)),n.startsWith("DLS2")){let e;try{let t=n.substring(4);t=atob(t),e=JSON.parse(t)}catch(t){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(n=e.handshakeCode?e.handshakeCode:e.organizationID?e.organizationID:"","number"==typeof n&&(n=JSON.stringify(n)),0===s.length){let t=[];e.mainServerURL&&(t[0]=e.mainServerURL),e.standbyServerURL&&(t[1]=e.standbyServerURL),s=p(t)}!o&&e.sessionPassword&&(o=e.sessionPassword),t=e.remark}("200001"===n||n.startsWith("200001-"))&&(s&&s.length||(n="")),n||(a=1)}if(a&&(i.crypto||(r="Please upgrade your browser to support online key."),i.crypto.subtle||(r="Require https to use online key in this browser.")),r){if(1!==a)throw new Error(r);a=0,console.warn(r),e._lastErrorCode=-1,e._lastErrorString=r}return 1===a&&(n="",console.warn("Applying for a public trial license ...")),{lt:a,l:n,ls:s,sp:o,rmk:t}}throw new Error("Can't preprocess license again"+f)})(T);this._pLoad.task=async(i,o)=>{let h=T.engineResourcePath+T._workerName;T.engineResourcePath.startsWith(location.origin)||(h=await fetch(h).then((t=>t.blob())).then((t=>URL.createObjectURL(t)))),T._dbrWorker=new Worker(h),T._dbrWorker.onerror=t=>{let e=new Error(t.message);o(e)},T._dbrWorker.onmessage=async e=>{let r=e.data?e.data:e;switch(r.type){case"log":T._onLog&&T._onLog(r.message);break;case"load":{r.message&&(r.message=r.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let e,n=!1;1===t&&(n=!0,r.message||(r.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),r.success?(T._dbrWorker.onerror=null,T._version=r.version+"(JS "+T._jsVersion+"."+T._jsEditVersion+")",T._onLog&&T._onLog("load dbr worker success"),r.message&&console.warn(r.message)):(e=new Error(r.message),e.stack=r.stack+"\n"+e.stack,e.ltsErrorCode=r.ltsErrorCode,n||111==r.ltsErrorCode&&-1!=r.message.toLowerCase().indexOf("trial license")&&(n=!0)),n&&T.showDialog(r.success?"warn":"error",r.message),r.success?i():o(e);break}case"task":{let t=r.id,e=r.body;try{T._taskCallbackMap.get(t)(e),T._taskCallbackMap.delete(t)}catch(e){throw T._taskCallbackMap.delete(t),e}break}default:T._onLog&&T._onLog(e)}},T._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:T.engineResourcePath,bUseFullFeature:T._bUseFullFeature,bd:T._bWasmDebug,v:T._jsVersion,brtk:!!t,bptk:1===t,l:e,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:a,cv:T.authCacheVersion,fn:T.deviceFriendlyName,ls:r,sp:n,rmk:s})}}await this._pLoad}static async showDialog(t,e){await(async(t,e,i)=>{if(!t._bNeverShowDialog)try{let r=await fetch(t.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let n=await r.text();if(!n.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let s=document.createElement("div");s.innerHTML=n;let o=[];for(let t=0;t{if(t==e.target){a.remove();for(let t of o)t.remove()}}));else if(!l&&t.classList.contains("dls-license-icon-close"))l=t,t.addEventListener("click",(()=>{a.remove();for(let t of o)t.remove()}));else if(!c&&t.classList.contains("dls-license-icon-error"))c=t,"error"!=e&&t.remove();else if(!u&&t.classList.contains("dls-license-icon-warn"))u=t,"warn"!=e&&t.remove();else if(!d&&t.classList.contains("dls-license-msg-content")){d=t;let e=i;for(;e;){let i=e.indexOf("["),r=e.indexOf("]",i),n=e.indexOf("(",r),s=e.indexOf(")",n);if(-1==i||-1==r||-1==n||-1==s){t.appendChild(new Text(e));break}i>0&&t.appendChild(new Text(e.substring(0,i)));let o=document.createElement("a"),a=e.substring(i+1,r);o.innerText=a;let h=e.substring(n+1,s);o.setAttribute("href",h),o.setAttribute("target","_blank"),t.appendChild(o),e=e.substring(s+1)}}document.body.appendChild(a)}catch(e){t._onLog&&t._onLog(e.message||e)}})(this,t,e)}static async createInstanceInWorker(t=!1){return await T.loadWasm(),await new Promise(((e,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(t=>{if(t.success)return e(t.instanceID);{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),T._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:t})}))}static async createInstance(){const t=new T;return t._instanceID=await T.createInstanceInWorker(),T._fireHTTPSWarnning(),t}async clearMapDecodeRecord(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:i,instanceID:this._instanceID})}))}async decode(t){T._onLog&&T._onLog("decode(source: any)"),T._onLog&&(this._timeStartDecode=Date.now());{let e={};return!this.region||this.region instanceof Array||(e.region=JSON.parse(JSON.stringify(this.region))),t instanceof Blob?await this._decode_Blob(t,e):t instanceof ArrayBuffer?await this._decode_ArrayBuffer(t,e):t instanceof Uint8Array||t instanceof Uint8ClampedArray?await this._decode_Uint8Array(t,e):t instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?await this._decode_Image(t,e):t instanceof HTMLCanvasElement?await this._decode_Canvas(t,e):t instanceof HTMLVideoElement?await this._decode_Video(t,e):"string"==typeof t?"data:image/"==t.substring(0,11)?await this._decode_Base64(t,e):await this._decode_Url(t,e):T.isDCEFrame(t)?(e.bCopyData=!0,await this._decode_DCEFrame(t,e)):T.isDSImage(t)?(e.bCopyData=!0,await this._decode_DSImage(t,e)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(t){let e={};return!this.region||this.region instanceof Array||(e.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(t,e)}async decodeUrl(t){let e={};return!this.region||this.region instanceof Array||(e.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(t,e)}async _decodeBuffer_Uint8Array(t,e,i,r,n,s,o){return await new Promise(((a,h)=>{let l=T._nextTaskID++;T._taskCallbackMap.set(l,(t=>{if(t.success){let e,i=T._onLog?Date.now():0;T._onLog&&T._onLog("worker return result: "+i),this._lastInnerDecodeDuration=t.duration;try{e=this._handleRetJsonString(t.decodeReturn)}catch(t){return h(t)}if(T._onLog){let t=Date.now();T._onLog("DBR getting message from worker timestamp: "+i),T._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),T._onLog("From DBR entering worker to returning message from worker costs: "+(i-this._timeEnterInnerDBR)),T._onLog("Handling results from DBR worker costs: "+(t-i)),T._onLog("Total decoding image costs: "+(t-this._timeStartDecode))}return a(e)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,h(e)}})),this._timeEnterInnerDBR=Date.now(),T._onLog&&T._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),T._dbrWorker.postMessage({type:"decodeBuffer",id:l,instanceID:this._instanceID,body:{buffer:t,width:e,height:i,stride:r,format:n,orientation:s,config:o}},[t.buffer]),T._onLog&&o&&o.timeStamp&&T._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-o.timeStamp))}))}async _decodeBuffer_Blob(t,e,i,r,n,s,o){T._onLog&&T._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const a=t.arrayBuffer?await t.arrayBuffer():await new Promise(((e,i)=>{let r=new FileReader;r.readAsArrayBuffer(t),r.onload=()=>{e(r.result)},r.onerror=()=>{i(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(a),e,i,r,n,s,o)}async decodeBuffer(t,e,i,r,n,s,o){let a;return T._onLog&&T._onLog("decodeBuffer(buffer,width,height,stride,format)"),T._onLog&&(this._timeStartDecode=Date.now()),t instanceof Uint8Array||t instanceof Uint8ClampedArray?a=await this._decodeBuffer_Uint8Array(t,e,i,r,n,s,o):t instanceof ArrayBuffer?a=await this._decodeBuffer_Uint8Array(new Uint8Array(t),e,i,r,n,s,o):t instanceof Blob&&(a=await this._decodeBuffer_Blob(t,e,i,r,n,s,o)),a}async _decodeFileInMemory_Uint8Array(t){return await new Promise(((e,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(t=>{if(t.success){let r;this._lastInnerDecodeDuration=t.duration;try{r=this._handleRetJsonString(t.decodeReturn)}catch(t){return i(t)}return e(r)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),T._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:t}})}))}async getRuntimeSettings(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success){let e=JSON.parse(i.results);return null!=this.userDefinedRegion&&(e.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),t(e)}{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"getRuntimeSettings",id:i,instanceID:this._instanceID})}))}async updateRuntimeSettings(t){let e;if("string"==typeof t)if("speed"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=3,e.expectedBarcodesCount=0,e.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=5,e.expectedBarcodesCount=512,e.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region}else if("dense"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=9,e.expectedBarcodesCount=0,e.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,e.region=t.region,e.deblurLevel=3,e.expectedBarcodesCount=0,e.localizationModes=[2,8,0,0,0,0,0,0]}else e=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(e=JSON.parse(JSON.stringify(t)),e.region instanceof Array){let t=e.region;[t.regionLeft,t.regionTop,t.regionLeft,t.regionBottom,t.regionMeasuredByPercentage].some((t=>void 0!==t))&&(e.region={regionLeft:t.regionLeft||0,regionTop:t.regionTop||0,regionRight:t.regionRight||0,regionBottom:t.regionBottom||0,regionMeasuredByPercentage:t.regionMeasuredByPercentage||0})}}if(!T._bUseFullFeature){if(0!=(e.barcodeFormatIds&~(S.BF_ONED|S.BF_QR_CODE|S.BF_PDF417|S.BF_DATAMATRIX))||0!=e.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=e.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let t=e.region;if(t instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(t)),(t.regionLeft||t.regionTop||t.regionRight||t.regionBottom||t.regionMeasuredByPercentage)&&(t.regionLeft||t.regionTop||100!=t.regionRight||100!=t.regionBottom||!t.regionMeasuredByPercentage)?this.region=t:this.region=null,e.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(e.intermediateResultTypes|=C.IRT_TYPED_BARCODE_ZONE),await new Promise(((t,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.updateReturn)}catch(t){i(t)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),T._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(e)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=x,await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"resetRuntimeSettings",id:i,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=x,await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t();{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:i,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!T._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t(i.results);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:i,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(t){if(!T._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof t)t=t;else{if("object"!=typeof t)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");t=JSON.stringify(t)}return await new Promise(((e,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.initReturn)}catch(t){i(t)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,i(e)}})),T._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:t}})}))}async _decode_Blob(t,e){T._onLog&&T._onLog("_decode_Blob(blob: Blob)");let i=null,r=null;if("undefined"!=typeof createImageBitmap)try{i=await createImageBitmap(t)}catch(t){}i||(r=await function(t){return new Promise(((e,i)=>{let r=URL.createObjectURL(t),n=new Image;n.dbrObjUrl=r,n.src=r,n.onload=()=>{e(n)},n.onerror=t=>{i(new Error("Can't convert blob to image : "+(t instanceof Event?t.type:t)))}}))}(t));let n=await this._decode_Image(i||r,e);return i&&i.close(),n}async _decode_ArrayBuffer(t,e){return await this._decode_Blob(new Blob([t]),e)}async _decode_Uint8Array(t,e){return await this._decode_Blob(new Blob([t]),e)}async _decode_Image(t,e){T._onLog&&T._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),e=e||{};let i,r,n=t instanceof HTMLImageElement?t.naturalWidth:t.width,s=t instanceof HTMLImageElement?t.naturalHeight:t.height,o=Math.max(n,s);if(o>this._maxCvsSideLength){let t=this._maxCvsSideLength/o;i=Math.round(n*t),r=Math.round(s*t)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(t,0,0,n,s,0,0,i,r),t.dbrObjUrl&&URL.revokeObjectURL(t.dbrObjUrl);let h=await this._decode_Canvas(a,e);if(this.ifSaveOriginalImageInACanvas){const e=document.createElement("canvas");e.width=t.width,e.height=t.height;e.getContext("2d").drawImage(t,0,0),this.oriCanvas=e,this.oriCanvasData=null}return T.recalculateResultLocation(h,0,0,n,s,i,r),h}async _decode_Canvas(t,e){if(T._onLog&&T._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";if(0===t.width||0===t.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=t,this.oriCanvasData=null);let i=(t.ctx2d||t.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,t.width,t.height).data;return await this._decodeBuffer_Uint8Array(i,t.width,t.height,4*t.width,m.IPF_ABGR_8888,0,e)}async _decode_Video(t,e){if(T._onLog&&T._onLog("_decode_Video(video)"),!(t instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";e=e||{};let i,r,n=t.videoWidth,s=t.videoHeight,o=Math.max(n,s);if(o>this._maxCvsSideLength){let t=this._maxCvsSideLength/o;i=Math.round(n*t),r=Math.round(s*t)}else i=n,r=s;this.canvas||(this.canvas=document.createElement("canvas"));const a=this.canvas;a.width===i&&a.height===r||(a.width=i,a.height=r),a.ctx2d||(a.ctx2d=a.getContext("2d",{willReadFrequently:!0}));a.ctx2d.drawImage(t,0,0,n,s,0,0,i,r);let h=await this._decode_Canvas(a,e);if(this.ifSaveOriginalImageInACanvas){const e=document.createElement("canvas");e.width=t.videoWidth,e.height=t.videoHeight;e.getContext("2d").drawImage(t,0,0),this.oriCanvas=e,this.oriCanvasData=null}return T.recalculateResultLocation(h,0,0,n,s,i,r),h}async _decode_DCEFrame(t,e){if(T._onLog&&T._onLog("_decode_DCEFrame(dceFrame)"),!T.isDCEFrame(t))return[];let i=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,colorMode:t.colorMode,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{width:r,height:n,colorMode:s,pixelFormat:o,stride:a,timeStamp:h}=t;let l;l=e&&e.bCopyData?new Uint8Array(t.data):t.data;let c=null;if(e?(c=JSON.parse(JSON.stringify(e)),c.timeStamp=h):c={timeStamp:h},o&&a)if("grey"===o)i=await this._decodeBuffer_Uint8Array(l,r,n,a,m.IPF_GrayScaled,0,c);else if("rgba"===o)i=await this._decodeBuffer_Uint8Array(l,r,n,a,m.IPF_ABGR_8888,0,c);else{if("bgra"!==o)throw new Error(`Pixel format '${o}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,n,a,m.IPF_ARGB_8888,0,c)}else if("grey"===s)i=await this._decodeBuffer_Uint8Array(l,r,n,r,m.IPF_GrayScaled,0,c);else if("rgba"===s)i=await this._decodeBuffer_Uint8Array(l,r,n,4*r,m.IPF_ABGR_8888,0,c);else{if("bgra"!==s)throw new Error(`Color mode '${s}' is not supported to decode.`);i=await this._decodeBuffer_Uint8Array(l,r,n,4*r,m.IPF_ARGB_8888,0,c)}return i}async _decode_DSImage(t,e){if(T._onLog&&T._onLog("_decode_DSImage(dsImage)"),!T.isDSImage(t))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat.toLowerCase(),data:new Uint8Array(t.data),toCanvas:function(){const t=document.createElement("canvas");let e;switch(t.width=this.width,t.height=this.height,this.pixelFormat){case"grey":e=new Uint8ClampedArray(this.width*this.height*4);for(let t=0;t{let r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{e(r.response)},r.onerror=()=>{i(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(i,e)}}async _decode_FilePath(t,e){throw T._onLog&&T._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(t,e,i,r,n,s,o){if(t.length>0)for(let a of t){let t=a.localizationResult;2==t.resultCoordinateType&&(t.x1*=.01*s,t.x2*=.01*s,t.x3*=.01*s,t.x4*=.01*s,t.y1*=.01*o,t.y2*=.01*o,t.y3*=.01*o,t.y4*=.01*o);let h=s/r,l=o/n;t.x1=t.x1/h+e,t.x2=t.x2/h+e,t.x3=t.x3/h+e,t.x4=t.x4/h+e,t.y1=t.y1/l+i,t.y2=t.y2/l+i,t.y3=t.y3/l+i,t.y4=t.y4/l+i,2==t.resultCoordinateType&&(t.x1*=100/r,t.x2*=100/r,t.x3*=100/r,t.x4*=100/r,t.y1*=100/n,t.y2*=100/n,t.y3*=100/n,t.y4*=100/n),t.x1=Math.round(t.x1),t.x2=Math.round(t.x2),t.x3=Math.round(t.x3),t.x4=Math.round(t.x4),t.y1=Math.round(t.y1),t.y2=Math.round(t.y2),t.y3=Math.round(t.y3),t.y4=Math.round(t.y4)}}static BarcodeReaderException(t,e){let i,r=v.DBR_UNKNOWN;return"number"==typeof t?(r=t,i=new Error(e)):i=new Error(t),i.code=r,i}_handleRetJsonString(t){let e=v;if(t.textResults){for(let e=0;e{let i=e.indexOf(":");t[e.substring(0,i)]=e.substring(i+1)})),i.exception=t}}return t.decodeRecords?this.decodeRecords=t.decodeRecords:this.decodeRecords={},this._lastErrorCode=t.exception,this._lastErrorString=t.description,t.exception&&!T._setWarnnedEx.has(t.description)&&(T._setWarnnedEx.add(t.description),console.warn(t.description)),t.textResults}if(t.exception==e.DBR_SUCCESS)return t.data;throw T.BarcodeReaderException(t.exception,t.description)}async setModeArgument(t,e,i,r){return await new Promise(((n,s)=>{let o=T._nextTaskID++;T._taskCallbackMap.set(o,(t=>{if(t.success){try{this._handleRetJsonString(t.setReturn)}catch(t){return s(t)}return n()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,s(e)}})),T._dbrWorker.postMessage({type:"setModeArgument",id:o,instanceID:this._instanceID,body:{modeName:t,index:e,argumentName:i,argumentValue:r}})}))}async getModeArgument(t,e,i){return await new Promise(((r,n)=>{let s=T._nextTaskID++;T._taskCallbackMap.set(s,(t=>{if(t.success){let e;try{e=this._handleRetJsonString(t.getReturn)}catch(t){return n(t)}return r(e)}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,n(e)}})),T._dbrWorker.postMessage({type:"getModeArgument",id:s,instanceID:this._instanceID,body:{modeName:t,index:e,argumentName:i}})}))}async getIntermediateResults(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t(i.results);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let t=await this.getIntermediateResults(),e=[];for(let i of t)if(i.dataType==y.IMRDT_IMAGE)for(let t of i.results){const i=t.bytes;let r;switch(T._onLog&&T._onLog(" "+i.length+" "+i.byteLength+" "+t.width+" "+t.height+" "+t.stride+" "+t.format),t.format){case m.IPF_ABGR_8888:r=new Uint8ClampedArray(i);break;case m.IPF_RGB_888:{const t=i.length/3;r=new Uint8ClampedArray(4*t);for(let e=0;e=n)break;r[o]=r[o+1]=r[o+2]=(128&e)/128*255,r[o+3]=255,e<<=1}}break}default:console.warn("unknow intermediate image",t)}if(!r)continue;let n=new ImageData(r,t.width,t.height),s=document.createElement("canvas");s.width=t.width,s.height=t.height,s.getContext("2d").putImageData(n,0,0),e.push(s)}return e}async getScanSettings(){return await new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success){let e=i.results;return e.intervalTime=this.intervalTime,e.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,e.soundOnSuccessfullRead=this.soundSource,e.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,e.vibrateDuration=this.vibrateDuration,e.captureAndDecodeInParallel=this.captureAndDecodeInParallel,e.autoZoom=this.autoZoom,e.autoFocus=this.autoFocus,e.autoSuggestTip=this.autoSuggestTip,t(e)}{let t=new Error(i.message);return t.stack+="\n"+i.stack,e(t)}})),T._dbrWorker.postMessage({type:"getScanSettings",id:i,instanceID:this._instanceID})}))}async updateScanSettings(t){if(!t)return;const e=JSON.parse(JSON.stringify(t));if(e.autoZoom||e.autoFocus||e.autoSuggestTip){if(!T._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const t=await this.getRuntimeSettings();t.intermediateResultTypes|=C.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(t)}return e.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(e.intervalTime,0),delete e.intervalTime),e.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=e.whenToPlaySoundforSuccessfulRead,delete e.whenToPlaySoundforSuccessfulRead),e.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=e.soundOnSuccessfullRead,delete e.soundOnSuccessfullRead),e.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=e.whenToVibrateforSuccessfulRead,delete e.whenToVibrateforSuccessfulRead),e.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=e.vibrateDuration,delete e.vibrateDuration),e.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=e.captureAndDecodeInParallel,delete e.captureAndDecodeInParallel),e.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=e.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=e.autoZoom,delete e.autoZoom),e.hasOwnProperty("autoFocus")&&(this.autoFocus=e.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete e.autoFocus),e.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=e.autoSuggestTip,delete e.autoFocus),await new Promise(((t,i)=>{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack+="\n"+e.stack,i(t)}})),T._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:e}})}))}_cloneDecodeResults(t){if(t instanceof Array){let e=[];for(let i of t)e.push(this._cloneDecodeResults(i));return e}{let e=t,i=JSON.parse(JSON.stringify(e,((t,e)=>"oriVideoCanvas"==t||"searchRegionCanvas"==t?void 0:e)));return i}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return T._onLog&&T._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));T._onLog&&T._onLog("======= once read ======="),T._onLog&&(this._timeStartDecode=Date.now());let t=null,e=null;if(this.dce)t=this._getVideoFrame();else if(this._imgSource&&(e=await this._imgSource.getImage(),!T.isDSImage(e)))throw new Error("Invalid DSImage.");if(!t&&!e)return T._onLog&&T._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let i=[];if(t){i=await this._decode_DCEFrame(t,{bScanner:!0,bCopyData:!1});let e=null;if(i&&i.length){const{sx:r,sy:n,width:s,height:o,_sWidth:a,_sHeight:h}=t;e=i.map((t=>({resultState:t.resultState,localizationResult:JSON.parse(JSON.stringify(t.localizationResult))}))),T.recalculateResultLocation(e,r,n,a,h,s,o)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(e,i),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else e&&(i=await this._decode_DSImage(e,{bScanner:!0,bCopyData:!1}));return i})().then((t=>{if(T._onLog&&T._onLog(t),this.dce&&this.captureAndDecodeInParallel){let t=this.array_decodeFrameTimeCost,e=this.array_getFrameTimeCost;const i=()=>{let i=0;if(e&&e.length){let r=Math.min(...t),n=Math.max(...e);r&&n&&(i=r-n)}else i=0;return i>0?i:0};(()=>{for(;t.length>=5;)t.shift();t.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=i()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&t.length){let e=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&t.length){let e=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e)try{navigator.vibrate(this.vibrateDuration)}catch(t){console.warn("Vibration not allowed. User interaction required: "+(t.message||t))}}if(this.onImageRead){t=t.filter((t=>t.resultState>=0));const e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead){t=t.filter((t=>0==t.resultState));const e=this._cloneDecodeResults(t);for(let t of e)this.onUniqueRead(t.barcodeText,t)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((t=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),T._onLog&&T._onLog(t.message||t),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==t.message||console.warn(t.message)}))}_getVideoFrame(){if(!this.dce)return null;let t;if(this.captureAndDecodeInParallel){if(T._onLog&&T._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;t=this.dce.getFrameFromBuffer();const e=t=>{if(!t)return;let e=t.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(e)};e(t)}else T._onLog&&T._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),t=this.dce.getFrame();return t}_drawResults(t,e){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const i=this._dbrDrawingLayer;t||(t=[]);let r=this._arrPolygons;for(let n=0;n{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(e),e}stopScanning(t){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[t]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(t){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),t&&t.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(T._onLog&&T._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let t=T._nextTaskID++;T._taskCallbackMap.set(t,(t=>{if(!t.success){let e=new Error(t.message);throw e.stack=t.stack+"\n"+e.stack,e}})),T._dbrWorker.postMessage({type:"destroyContext",id:t,instanceID:this._instanceID})}}T._jsVersion="9.6.32",T._jsEditVersion="20231027",T._version=`loading...(JS ${T._jsVersion}.${T._jsEditVersion})`,T._license=g,T._sessionPassword=_,T.browserInfo=a,T._workerName=`dbr-${T._jsVersion}.browser.worker.js`,T._engineResourcePath=d,T._licenseServer=[],T._deviceFriendlyName="",T._isShowRelDecodeTimeInResults=!1,T._bWasmDebug=!1,T._bNeverShowDialog=!1,T.__bUseFullFeature=!0,T._nextTaskID=0,T._taskCallbackMap=new Map,T._pLoad=new b,T._lastErrorCode=0,T._lastErrorString="",T._setWarnnedEx=new Set,T._defaultUIElementURL="@engineResourcePath/dbr.ui.html";var E={653:(t,e,i)=>{var r,n,s,o,a,h,l,c,u,d,f,g,_,p,m,v,y,S,C,w,b,x=x||{version:"5.2.1"};if(e.fabric=x,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?x.document=document:x.document=document.implementation.createHTMLDocument(""),x.window=window;else{var T=new(i(192).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;x.document=T.document,x.jsdomImplForWrapper=i(898).implForWrapper,x.nodeCanvas=i(245).Canvas,x.window=T,DOMParser=x.window.DOMParser}function E(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function I(t,e){var i=e.targetCanvas.getContext("2d"),r=e.destinationWidth,n=e.destinationHeight,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);t.readPixels(0,0,r,n,t.RGBA,t.UNSIGNED_BYTE,o);var h=new ImageData(a,r,n);i.putImageData(h,0,0)}x.isTouchSupported="ontouchstart"in x.window||"ontouchstart"in x.document||x.window&&x.window.navigator&&x.window.navigator.maxTouchPoints>0,x.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,x.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],x.DPI=96,x.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",x.commaWsp="(?:\\s+,?\\s*|,\\s*)",x.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,x.reNonWord=/[ \n\.,;!\?\-]/,x.fontPaths={},x.iMatrix=[1,0,0,1,0,0],x.svgNS="http://www.w3.org/2000/svg",x.perfLimitSizeTotal=2097152,x.maxCacheSideLimit=4096,x.minCacheSideLimit=256,x.charWidthsCache={},x.textureSize=2048,x.disableStyleCopyPaste=!1,x.enableGLFiltering=!0,x.devicePixelRatio=x.window.devicePixelRatio||x.window.webkitDevicePixelRatio||x.window.mozDevicePixelRatio||1,x.browserShadowBlurConstant=1,x.arcToSegmentsCache={},x.boundsOfCurveCache={},x.cachesBoundsOfCurve=!0,x.forceGLPutImageData=!1,x.initFilterBackend=function(){return x.enableGLFiltering&&x.isWebglSupported&&x.isWebglSupported(x.textureSize)?(console.log("max texture size: "+x.maxTextureSize),new x.WebglFilterBackend({tileSize:x.textureSize})):x.Canvas2dFilterBackend?new x.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=x),function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:x.util.array.fill(i,!1)}}function e(t,e){var i=function(){e.apply(this,arguments),this.off(t,i)}.bind(this);this.on(t,i)}x.Observable={fire:function(t,e){if(!this.__eventListeners)return this;var i=this.__eventListeners[t];if(!i)return this;for(var r=0,n=i.length;r-1||!!e&&this._objects.some((function(e){return"function"==typeof e.contains&&e.contains(t,!0)}))},complexity:function(){return this._objects.reduce((function(t,e){return t+(e.complexity?e.complexity():0)}),0)}},x.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof x.Gradient||this.set(e,new x.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof x.Pattern?i&&i():this.set(e,new x.Pattern(t,i))},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},r=e,n=Math.sqrt,s=Math.atan2,o=Math.pow,a=Math.PI/180,h=Math.PI/2,x.util={cos:function(t){if(0===t)return 1;switch(t<0&&(t=-t),t/h){case 1:case 3:return 0;case 2:return-1}return Math.cos(t)},sin:function(t){if(0===t)return 0;var e=1;switch(t<0&&(e=-1),t/h){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(t)},removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*a},radiansToDegrees:function(t){return t/a},rotatePoint:function(t,e,i){var r=new x.Point(t.x-e.x,t.y-e.y),n=x.util.rotateVector(r,i);return new x.Point(n.x,n.y).addEquals(e)},rotateVector:function(t,e){var i=x.util.sin(e),r=x.util.cos(e);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},createVector:function(t,e){return new x.Point(e.x-t.x,e.y-t.y)},calcAngleBetweenVectors:function(t,e){return Math.acos((t.x*e.x+t.y*e.y)/(Math.hypot(t.x,t.y)*Math.hypot(e.x,e.y)))},getHatVector:function(t){return new x.Point(t.x,t.y).multiply(1/Math.hypot(t.x,t.y))},getBisector:function(t,e,i){var r=x.util.createVector(t,e),n=x.util.createVector(t,i),s=x.util.calcAngleBetweenVectors(r,n),o=s*(0===x.util.calcAngleBetweenVectors(x.util.rotateVector(r,s),n)?1:-1)/2;return{vector:x.util.getHatVector(x.util.rotateVector(r,o)),angle:s}},projectStrokeOnPoints:function(t,e,i){var r=[],n=e.strokeWidth/2,s=e.strokeUniform?new x.Point(1/e.scaleX,1/e.scaleY):new x.Point(1,1),o=function(t){var e=n/Math.hypot(t.x,t.y);return new x.Point(t.x*e*s.x,t.y*e*s.y)};return t.length<=1||t.forEach((function(a,h){var l,c,u=new x.Point(a.x,a.y);0===h?(c=t[h+1],l=i?o(x.util.createVector(c,u)).addEquals(u):t[t.length-1]):h===t.length-1?(l=t[h-1],c=i?o(x.util.createVector(l,u)).addEquals(u):t[0]):(l=t[h-1],c=t[h+1]);var d,f,g=x.util.getBisector(u,l,c),_=g.vector,p=g.angle;if("miter"===e.strokeLineJoin&&(d=-n/Math.sin(p/2),f=new x.Point(_.x*d*s.x,_.y*d*s.y),Math.hypot(f.x,f.y)/n<=e.strokeMiterLimit))return r.push(u.add(f)),void r.push(u.subtract(f));d=-n*Math.SQRT2,f=new x.Point(_.x*d*s.x,_.y*d*s.y),r.push(u.add(f)),r.push(u.subtract(f))})),r},transformPoint:function(t,e,i){return i?new x.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new x.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t,e){if(e)for(var i=0;i0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s=!0,o=t.getImageData(e,i,2*r||1,2*r||1),a=o.data.length;for(n=3;n=n?s-n:2*Math.PI-(n-s)}function s(t,e,i){for(var s=i[1],o=i[2],a=i[3],h=i[4],l=i[5],c=function(t,e,i,s,o,a,h){var l=Math.PI,c=h*l/180,u=x.util.sin(c),d=x.util.cos(c),f=0,g=0,_=-d*t*.5-u*e*.5,p=-d*e*.5+u*t*.5,m=(i=Math.abs(i))*i,v=(s=Math.abs(s))*s,y=p*p,S=_*_,C=m*v-m*y-v*S,w=0;if(C<0){var b=Math.sqrt(1-C/(m*v));i*=b,s*=b}else w=(o===a?-1:1)*Math.sqrt(C/(m*y+v*S));var T=w*i*p/s,E=-w*s*_/i,I=d*T-u*E+.5*t,O=u*T+d*E+.5*e,R=n(1,0,(_-T)/i,(p-E)/s),D=n((_-T)/i,(p-E)/s,(-_-T)/i,(-p-E)/s);0===a&&D>0?D-=2*l:1===a&&D<0&&(D+=2*l);for(var A=Math.ceil(Math.abs(D/l*2)),M=[],L=D/A,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),P=R+L,k=0;kw)for(var T=1,E=_.length;T2;for(e=e||0,l&&(a=t[2].xt[i-2].x?1:n.x===t[i-2].x?0:-1,h=n.y>t[i-2].y?1:n.y===t[i-2].y?0:-1),r.push(["L",n.x+a*e,n.y+h*e]),r},x.util.getPathSegmentsInfo=d,x.util.getBoundsOfCurve=function(e,i,r,n,s,o,a,h){var l;if(x.cachesBoundsOfCurve&&(l=t.call(arguments),x.boundsOfCurveCache[l]))return x.boundsOfCurveCache[l];var c,u,d,f,g,_,p,m,v=Math.sqrt,y=Math.min,S=Math.max,C=Math.abs,w=[],b=[[],[]];u=6*e-12*r+6*s,c=-3*e+9*r-9*s+3*a,d=3*r-3*e;for(var T=0;T<2;++T)if(T>0&&(u=6*i-12*n+6*o,c=-3*i+9*n-9*o+3*h,d=3*n-3*i),C(c)<1e-12){if(C(u)<1e-12)continue;0<(f=-d/u)&&f<1&&w.push(f)}else(p=u*u-4*d*c)<0||(0<(g=(-u+(m=v(p)))/(2*c))&&g<1&&w.push(g),0<(_=(-u-m)/(2*c))&&_<1&&w.push(_));for(var E,I,O,R=w.length,D=R;R--;)E=(O=1-(f=w[R]))*O*O*e+3*O*O*f*r+3*O*f*f*s+f*f*f*a,b[0][R]=E,I=O*O*O*i+3*O*O*f*n+3*O*f*f*o+f*f*f*h,b[1][R]=I;b[0][D]=e,b[1][D]=i,b[0][D+1]=a,b[1][D+1]=h;var A=[{x:y.apply(null,b[0]),y:y.apply(null,b[1])},{x:S.apply(null,b[0]),y:S.apply(null,b[1])}];return x.cachesBoundsOfCurve&&(x.boundsOfCurveCache[l]=A),A},x.util.getPointOnPath=function(t,e,i){i||(i=d(t));for(var r=0;e-i[r].length>0&&r1e-4;)i=h(s),n=s,(r=o(l.x,l.y,i.x,i.y))+a>e?(s-=c,c/=2):(l=i,s+=c,a+=r);return i.angle=u(n),i}(s,e)}},x.util.transformPath=function(t,e,i){return i&&(e=x.util.multiplyTransformMatrices(e,[1,0,0,1,-i.x,-i.y])),t.map((function(t){for(var i=t.slice(0),r={},n=1;n=e}))}}}(),function(){function t(e,i,r){if(r)if(!x.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var n=0,s=i.length;n57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var n=t.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}x.util.string={camelize:function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},capitalize:function(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())},escapeXml:function(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(e){var i,r=0,n=[];for(r=0;r-1?t.prototype[n]=function(t){return function(){var i=this.constructor.superclass;this.constructor.superclass=r;var n=e[t].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==t)return n}}(n):t.prototype[n]=e[n],i&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};function n(){}function s(e){for(var i=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[e];if(r[e]!==n){i=n;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,t.call(arguments,1)):i.call(this):console.log("tried to callSuper "+e+", method not found in prototype chain",this)}x.util.createClass=function(){var i=null,o=t.call(arguments,0);function a(){this.initialize.apply(this,arguments)}"function"==typeof o[0]&&(i=o.shift()),a.superclass=i,a.subclasses=[],i&&(n.prototype=i.prototype,a.prototype=new n,i.subclasses.push(a));for(var h=0,l=o.length;h-1||"touch"===t.pointerType},d="string"==typeof(u=x.document.createElement("div")).style.opacity,f="string"==typeof u.style.filter,g=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,_=function(t){return t},d?_=function(t,e){return t.style.opacity=e,t}:f&&(_=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),g.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(g,e)):i.filter+=" alpha(opacity="+100*e+")",t}),x.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?_(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)"opacity"===r?_(t,e[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=e[r];return t},function(){var t,e,i,r,n=Array.prototype.slice,s=function(t){return n.call(t,0)};try{t=s(x.document.childNodes)instanceof Array}catch(t){}function o(t,e){var i=x.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function a(t){for(var e=0,i=0,r=x.document.documentElement,n=x.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===x.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:i}}t||(s=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e}),e=x.document.defaultView&&x.document.defaultView.getComputedStyle?function(t,e){var i=x.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},i=x.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"",x.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=x.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},x.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t},x.util.setImageSmoothing=function(t,e){t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=e},x.util.getById=function(t){return"string"==typeof t?x.document.getElementById(t):t},x.util.toArray=s,x.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},x.util.makeElement=o,x.util.wrapElement=function(t,e,i){return"string"==typeof e&&(e=o(e,i)),t.parentNode&&t.parentNode.replaceChild(e,t),e.appendChild(t),e},x.util.getScrollLeftTop=a,x.util.getElementOffset=function(t){var i,r,n=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var l in h)o[h[l]]+=parseInt(e(t,l),10)||0;return i=n.documentElement,void 0!==t.getBoundingClientRect&&(s=t.getBoundingClientRect()),r=a(t),{left:s.left+r.left-(i.clientLeft||0)+o.left,top:s.top+r.top-(i.clientTop||0)+o.top}},x.util.getNodeCanvas=function(t){var e=x.jsdomImplForWrapper(t);return e._canvas||e._image},x.util.cleanUpJsdomNode=function(t){if(x.isLikelyNode){var e=x.jsdomImplForWrapper(t);e&&(e._image=null,e._canvas=null,e._currentSrc=null,e._attributes=null,e._classList=null)}}}(),function(){function t(){}x.util.request=function(e,i){i||(i={});var r=i.method?i.method.toUpperCase():"GET",n=i.onComplete||function(){},s=new x.window.XMLHttpRequest,o=i.body||i.parameters;return s.onreadystatechange=function(){4===s.readyState&&(n(s),s.onreadystatechange=t)},"GET"===r&&(o=null,"string"==typeof i.parameters&&(e=function(t,e){return t+(/\?/.test(t)?"&":"?")+e}(e,i.parameters))),s.open(r,e,!0),"POST"!==r&&"PUT"!==r||s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(o),s}}(),x.log=console.log,x.warn=console.warn,function(){var t=x.util.object.extend,e=x.util.object.clone,i=[];function r(){return!1}function n(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e}x.util.object.extend(i,{cancelAll:function(){var t=this.splice(0);return t.forEach((function(t){t.cancel()})),t},cancelByCanvas:function(t){if(!t)return[];var e=this.filter((function(e){return"object"==typeof e.target&&e.target.canvas===t}));return e.forEach((function(t){t.cancel()})),e},cancelByTarget:function(t){var e=this.findAnimationsByTarget(t);return e.forEach((function(t){t.cancel()})),e},findAnimationIndex:function(t){return this.indexOf(this.findAnimation(t))},findAnimation:function(t){return this.find((function(e){return e.cancel===t}))},findAnimationsByTarget:function(t){return t?this.filter((function(e){return e.target===t})):[]}});var s=x.window.requestAnimationFrame||x.window.webkitRequestAnimationFrame||x.window.mozRequestAnimationFrame||x.window.oRequestAnimationFrame||x.window.msRequestAnimationFrame||function(t){return x.window.setTimeout(t,1e3/60)},o=x.window.cancelAnimationFrame||x.window.clearTimeout;function a(){return s.apply(x.window,arguments)}x.util.animate=function(i){i||(i={});var s,o=!1,h=function(){var t=x.runningAnimations.indexOf(s);return t>-1&&x.runningAnimations.splice(t,1)[0]};return s=t(e(i),{cancel:function(){return o=!0,h()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),x.runningAnimations.push(s),a((function(t){var e,l=t||+new Date,c=i.duration||500,u=l+c,d=i.onChange||r,f=i.abort||r,g=i.onComplete||r,_=i.easing||n,p="startValue"in i&&i.startValue.length>0,m="startValue"in i?i.startValue:0,v="endValue"in i?i.endValue:100,y=i.byValue||(p?m.map((function(t,e){return v[e]-m[e]})):v-m);i.onStart&&i.onStart(),function t(i){var r=(e=i||+new Date)>u?c:e-l,n=r/c,S=p?m.map((function(t,e){return _(r,m[e],y[e],c)})):_(r,m,y,c),C=p?Math.abs((S[0]-m[0])/y[0]):Math.abs((S-m)/y);if(s.currentValue=p?S.slice():S,s.completionRate=C,s.durationRate=n,!o){if(!f(S,C,n))return e>u?(s.currentValue=p?v.slice():v,s.completionRate=1,s.durationRate=1,d(p?v.slice():v,1,1),g(v,1,1),void h()):(d(S,C,n),void a(t));h()}}(l)})),s.cancel},x.util.requestAnimFrame=a,x.util.cancelAnimFrame=function(){return o.apply(x.window,arguments)},x.runningAnimations=i}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return(r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1))+")"}x.util.animateColor=function(e,i,r,n){var s=new x.Color(e).getSource(),o=new x.Color(i).getSource(),a=n.onComplete,h=n.onChange;return n=n||{},x.util.animate(x.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){return t(i,r,n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2)))},onComplete:function(e,i,r){if(a)return a(t(o,o,0),i,r)},onChange:function(e,i,r){if(h){if(Array.isArray(e))return h(t(e,e,0),i,r);h(e,i,r)}}}))}}(),function(){function t(t,e,i,r){return t-1&&c>-1&&c-1)&&(i="stroke")}else{if("href"===t||"xlink:href"===t||"font"===t)return i;if("imageSmoothing"===t)return"optimizeQuality"===i;a=h?i.map(s):s(i,n)}}else i="";return!h&&isNaN(a)?i:a}function f(t){return new RegExp("^("+t.join("|")+")\\b","i")}function g(t,e){var i,r,n,s,o=[];for(n=0,s=e.length;n1;)h.shift(),l=e.util.multiplyTransformMatrices(l,h[0]);return l}}();var v=new RegExp("^\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*$");function y(t){if(!e.svgViewBoxElementsRegEx.test(t.nodeName))return{};var i,r,n,o,a,h,l=t.getAttribute("viewBox"),c=1,u=1,d=t.getAttribute("width"),f=t.getAttribute("height"),g=t.getAttribute("x")||0,_=t.getAttribute("y")||0,p=t.getAttribute("preserveAspectRatio")||"",m=!l||!(l=l.match(v)),y=!d||!f||"100%"===d||"100%"===f,S=m&&y,C={},w="",b=0,x=0;if(C.width=0,C.height=0,C.toBeParsed=S,m&&(g||_)&&t.parentNode&&"#document"!==t.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") ",a=(t.getAttribute("transform")||"")+w,t.setAttribute("transform",a),t.removeAttribute("x"),t.removeAttribute("y")),S)return C;if(m)return C.width=s(d),C.height=s(f),C;if(i=-parseFloat(l[1]),r=-parseFloat(l[2]),n=parseFloat(l[3]),o=parseFloat(l[4]),C.minX=i,C.minY=r,C.viewBoxWidth=n,C.viewBoxHeight=o,y?(C.width=n,C.height=o):(C.width=s(d),C.height=s(f),c=C.width/n,u=C.height/o),"none"!==(p=e.util.parsePreserveAspectRatioAttribute(p)).alignX&&("meet"===p.meetOrSlice&&(u=c=c>u?u:c),"slice"===p.meetOrSlice&&(u=c=c>u?c:u),b=C.width-n*c,x=C.height-o*c,"Mid"===p.alignX&&(b/=2),"Mid"===p.alignY&&(x/=2),"Min"===p.alignX&&(b=0),"Min"===p.alignY&&(x=0)),1===c&&1===u&&0===i&&0===r&&0===g&&0===_)return C;if((g||_)&&"#document"!==t.parentNode.nodeName&&(w=" translate("+s(g)+" "+s(_)+") "),a=w+" matrix("+c+" 0 0 "+u+" "+(i*c+b)+" "+(r*u+x)+") ","svg"===t.nodeName){for(h=t.ownerDocument.createElementNS(e.svgNS,"g");t.firstChild;)h.appendChild(t.firstChild);t.appendChild(h)}else(h=t).removeAttribute("x"),h.removeAttribute("y"),a=h.getAttribute("transform")+a;return h.setAttribute("transform",a),C}function S(t,e){var i="xlink:href",r=m(t,e.getAttribute(i).slice(1));if(r&&r.getAttribute(i)&&S(t,r),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach((function(t){r&&!e.hasAttribute(t)&&r.hasAttribute(t)&&e.setAttribute(t,r.getAttribute(t))})),!e.children.length)for(var n=r.cloneNode(!0);n.firstChild;)e.appendChild(n.firstChild);e.removeAttribute(i)}e.parseSVGDocument=function(t,i,n,s){if(t){!function(t){for(var i=g(t,["use","svg:use"]),r=0;i.length&&rt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,e){return void 0===e&&(e=.5),e=Math.max(Math.min(1,e),0),new i(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new i(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new i(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new i(this.x,this.y)}})}(e),function(t){var e=t.fabric||(t.fabric={});function i(t){this.status=t,this.points=[]}e.Intersection?e.warn("fabric.Intersection is already defined"):(e.Intersection=i,e.Intersection.prototype={constructor:i,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},e.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),l=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==l){var c=a/l,u=h/l;0<=c&&c<=1&&0<=u&&u<=1?(o=new i("Intersection")).appendPoint(new e.Point(t.x+c*(r.x-t.x),t.y+c*(r.y-t.y))):o=new i}else o=new i(0===a||0===h?"Coincident":"Parallel");return o},e.Intersection.intersectLinePolygon=function(t,e,r){var n,s,o,a,h=new i,l=r.length;for(a=0;a0&&(h.status="Intersection"),h},e.Intersection.intersectPolygonPolygon=function(t,e){var r,n=new i,s=t.length;for(r=0;r0&&(n.status="Intersection"),n},e.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new e.Point(o.x,s.y),h=new e.Point(s.x,o.y),l=i.intersectLinePolygon(s,a,t),c=i.intersectLinePolygon(a,o,t),u=i.intersectLinePolygon(o,h,t),d=i.intersectLinePolygon(h,s,t),f=new i;return f.appendPoints(l.points),f.appendPoints(c.points),f.appendPoints(u.points),f.appendPoints(d.points),f.points.length>0&&(f.status="Intersection"),f})}(e),function(t){var e=t.fabric||(t.fabric={});function i(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function r(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}e.Color?e.warn("fabric.Color is already defined."):(e.Color=i,e.Color.prototype={_tryParsingColor:function(t){var e;t in i.colorNameMap&&(t=i.colorNameMap[t]),"transparent"===t&&(e=[255,255,255,0]),e||(e=i.sourceFromHex(t)),e||(e=i.sourceFromRgb(t)),e||(e=i.sourceFromHsl(t)),e||(e=[0,0,0,1]),e&&this.setSource(e)},_rgbToHsl:function(t,i,r){t/=255,i/=255,r/=255;var n,s,o,a=e.util.array.max([t,i,r]),h=e.util.array.min([t,i,r]);if(o=(a+h)/2,a===h)n=s=0;else{var l=a-h;switch(s=o>.5?l/(2-a-h):l/(a+h),a){case t:n=(i-r)/l+(i0)-(t<0)||+t};function f(t,e){var i=t.angle+u(Math.atan2(e.y,e.x))+360;return Math.round(i%360/45)}function g(t,i){var r=i.transform.target,n=r.canvas,s=e.util.object.clone(i);s.target=r,n&&n.fire("object:"+t,s),r.fire(t,i)}function _(t,e){var i=e.canvas,r=t[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function p(t){return t.originX===l&&t.originY===l}function m(t,e,i){var r=t.lockScalingX,n=t.lockScalingY;return!((!r||!n)&&(e||!r&&!n||!i)&&(!r||"x"!==e)&&(!n||"y"!==e))}function v(t,e,i,r){return{e:t,transform:e,pointer:{x:i,y:r}}}function y(t){return function(e,i,r,n){var s=i.target,o=s.getCenterPoint(),a=s.translateToOriginPoint(o,i.originX,i.originY),h=t(e,i,r,n);return s.setPositionByOrigin(a,i.originX,i.originY),h}}function S(t,e){return function(i,r,n,s){var o=e(i,r,n,s);return o&&g(t,v(i,r,n,s)),o}}function C(t,i,r,n,s){var o=t.target,a=o.controls[t.corner],h=o.canvas.getZoom(),l=o.padding/h,c=o.toLocalPoint(new e.Point(n,s),i,r);return c.x>=l&&(c.x-=l),c.x<=-l&&(c.x+=l),c.y>=l&&(c.y-=l),c.y<=l&&(c.y+=l),c.x-=a.offsetX,c.y-=a.offsetY,c}function w(t){return t.flipX!==t.flipY}function b(t,e,i,r,n){if(0!==t[e]){var s=n/t._getTransformedDimensions()[r]*t[i];t.set(i,s)}}function x(t,e,i,r){var n,l=e.target,c=l._getTransformedDimensions(0,l.skewY),d=C(e,e.originX,e.originY,i,r),f=Math.abs(2*d.x)-c.x,g=l.skewX;f<2?n=0:(n=u(Math.atan2(f/l.scaleX,c.y/l.scaleY)),e.originX===s&&e.originY===h&&(n=-n),e.originX===a&&e.originY===o&&(n=-n),w(l)&&(n=-n));var _=g!==n;if(_){var p=l._getTransformedDimensions().y;l.set("skewX",n),b(l,"skewY","scaleY","y",p)}return _}function T(t,e,i,r){var n,l=e.target,c=l._getTransformedDimensions(l.skewX,0),d=C(e,e.originX,e.originY,i,r),f=Math.abs(2*d.y)-c.y,g=l.skewY;f<2?n=0:(n=u(Math.atan2(f/l.scaleY,c.x/l.scaleX)),e.originX===s&&e.originY===h&&(n=-n),e.originX===a&&e.originY===o&&(n=-n),w(l)&&(n=-n));var _=g!==n;if(_){var p=l._getTransformedDimensions().x;l.set("skewY",n),b(l,"skewX","scaleX","x",p)}return _}function E(t,e,i,r,n){n=n||{};var s,o,a,h,l,u,f=e.target,g=f.lockScalingX,v=f.lockScalingY,y=n.by,S=_(t,f),w=m(f,y,S),b=e.gestureScale;if(w)return!1;if(b)o=e.scaleX*b,a=e.scaleY*b;else{if(s=C(e,e.originX,e.originY,i,r),l="y"!==y?d(s.x):1,u="x"!==y?d(s.y):1,e.signX||(e.signX=l),e.signY||(e.signY=u),f.lockScalingFlip&&(e.signX!==l||e.signY!==u))return!1;if(h=f._getTransformedDimensions(),S&&!y){var x=Math.abs(s.x)+Math.abs(s.y),T=e.original,E=x/(Math.abs(h.x*T.scaleX/f.scaleX)+Math.abs(h.y*T.scaleY/f.scaleY));o=T.scaleX*E,a=T.scaleY*E}else o=Math.abs(s.x*f.scaleX/h.x),a=Math.abs(s.y*f.scaleY/h.y);p(e)&&(o*=2,a*=2),e.signX!==l&&"y"!==y&&(e.originX=c[e.originX],o*=-1,e.signX=l),e.signY!==u&&"x"!==y&&(e.originY=c[e.originY],a*=-1,e.signY=u)}var I=f.scaleX,O=f.scaleY;return y?("x"===y&&f.set("scaleX",o),"y"===y&&f.set("scaleY",a)):(!g&&f.set("scaleX",o),!v&&f.set("scaleY",a)),I!==f.scaleX||O!==f.scaleY}n.scaleCursorStyleHandler=function(t,e,r){var n=_(t,r),s="";if(0!==e.x&&0===e.y?s="x":0===e.x&&0!==e.y&&(s="y"),m(r,s,n))return"not-allowed";var o=f(r,e);return i[o]+"-resize"},n.skewCursorStyleHandler=function(t,e,i){var n="not-allowed";if(0!==e.x&&i.lockSkewingY)return n;if(0!==e.y&&i.lockSkewingX)return n;var s=f(i,e)%4;return r[s]+"-resize"},n.scaleSkewCursorStyleHandler=function(t,e,i){return t[i.canvas.altActionKey]?n.skewCursorStyleHandler(t,e,i):n.scaleCursorStyleHandler(t,e,i)},n.rotationWithSnapping=S("rotating",y((function(t,e,i,r){var n=e,s=n.target,o=s.translateToOriginPoint(s.getCenterPoint(),n.originX,n.originY);if(s.lockRotation)return!1;var a,h=Math.atan2(n.ey-o.y,n.ex-o.x),l=Math.atan2(r-o.y,i-o.x),c=u(l-h+n.theta);if(s.snapAngle>0){var d=s.snapAngle,f=s.snapThreshold||d,g=Math.ceil(c/d)*d,_=Math.floor(c/d)*d;Math.abs(c-_)0?s:a:(c>0&&(n=u===o?s:a),c<0&&(n=u===o?a:s),w(h)&&(n=n===s?a:s)),e.originX=n,S("skewing",y(x))(t,e,i,r))},n.skewHandlerY=function(t,e,i,r){var n,a=e.target,c=a.skewY,u=e.originX;return!a.lockSkewingY&&(0===c?n=C(e,l,l,i,r).y>0?o:h:(c>0&&(n=u===s?o:h),c<0&&(n=u===s?h:o),w(a)&&(n=n===o?h:o)),e.originY=n,S("skewing",y(T))(t,e,i,r))},n.dragHandler=function(t,e,i,r){var n=e.target,s=i-e.offsetX,o=r-e.offsetY,a=!n.get("lockMovementX")&&n.left!==s,h=!n.get("lockMovementY")&&n.top!==o;return a&&n.set("left",s),h&&n.set("top",o),(a||h)&&g("moving",v(t,e,i,r)),a||h},n.scaleOrSkewActionName=function(t,e,i){var r=t[i.canvas.altActionKey];return 0===e.x?r?"skewX":"scaleY":0===e.y?r?"skewY":"scaleX":void 0},n.rotationStyleHandler=function(t,e,i){return i.lockRotation?"not-allowed":e.cursorStyle},n.fireEvent=g,n.wrapWithFixedAnchor=y,n.wrapWithFireEvent=S,n.getLocalPoint=C,e.controlsUtils=n}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.degreesToRadians,r=e.controlsUtils;r.renderCircleControl=function(t,e,i,r,n){r=r||{};var s,o=this.sizeX||r.cornerSize||n.cornerSize,a=this.sizeY||r.cornerSize||n.cornerSize,h=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,l=h?"stroke":"fill",c=!h&&(r.cornerStrokeColor||n.cornerStrokeColor),u=e,d=i;t.save(),t.fillStyle=r.cornerColor||n.cornerColor,t.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,o>a?(s=o,t.scale(1,a/o),d=i*o/a):a>o?(s=a,t.scale(o/a,1),u=e*a/o):s=o,t.lineWidth=1,t.beginPath(),t.arc(u,d,s/2,0,2*Math.PI,!1),t[l](),c&&t.stroke(),t.restore()},r.renderSquareControl=function(t,e,r,n,s){n=n||{};var o=this.sizeX||n.cornerSize||s.cornerSize,a=this.sizeY||n.cornerSize||s.cornerSize,h=void 0!==n.transparentCorners?n.transparentCorners:s.transparentCorners,l=h?"stroke":"fill",c=!h&&(n.cornerStrokeColor||s.cornerStrokeColor),u=o/2,d=a/2;t.save(),t.fillStyle=n.cornerColor||s.cornerColor,t.strokeStyle=n.cornerStrokeColor||s.cornerStrokeColor,t.lineWidth=1,t.translate(e,r),t.rotate(i(s.angle)),t[l+"Rect"](-u,-d,o,a),c&&t.strokeRect(-u,-d,o,a),t.restore()}}(e),function(t){var e=t.fabric||(t.fabric={});e.Control=function(t){for(var e in t)this[e]=t[e]},e.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(t,e){return e.cursorStyle},getActionName:function(t,e){return e.actionName},getVisibility:function(t,e){var i=t._controlsVisibility;return i&&void 0!==i[e]?i[e]:this.visible},setVisibility:function(t){this.visible=t},positionHandler:function(t,i){return e.util.transformPoint({x:this.x*t.x+this.offsetX,y:this.y*t.y+this.offsetY},i)},calcCornerCoords:function(t,i,r,n,s){var o,a,h,l,c=s?this.touchSizeX:this.sizeX,u=s?this.touchSizeY:this.sizeY;if(c&&u&&c!==u){var d=Math.atan2(u,c),f=Math.sqrt(c*c+u*u)/2,g=d-e.util.degreesToRadians(t),_=Math.PI/2-d-e.util.degreesToRadians(t);o=f*e.util.cos(g),a=f*e.util.sin(g),h=f*e.util.cos(_),l=f*e.util.sin(_)}else f=.7071067812*(c&&u?c:i),g=e.util.degreesToRadians(45-t),o=h=f*e.util.cos(g),a=l=f*e.util.sin(g);return{tl:{x:r-l,y:n-h},tr:{x:r+o,y:n-a},bl:{x:r-o,y:n+a},br:{x:r+l,y:n+h}}},render:function(t,i,r,n,s){"circle"===((n=n||{}).cornerStyle||s.cornerStyle)?e.controlsUtils.renderCircleControl.call(this,t,i,r,n,s):e.controlsUtils.renderSquareControl.call(this,t,i,r,n,s)}}}(e),function(){function t(t,e){var i,r,n,s,o=t.getAttribute("style"),a=t.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,o){var h=o.split(/\s*;\s*/);for(""===h[h.length-1]&&h.pop(),s=h.length;s--;){var l=h[s].split(/\s*:\s*/),c=l[0].trim(),u=l[1].trim();"stop-color"===c?i=u:"stop-opacity"===c&&(n=u)}}return i||(i=t.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=t.getAttribute("stop-opacity")),r=(i=new x.Color(i)).getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*e,{offset:a,color:i.toRgb(),opacity:n}}var e=x.util.object.clone;x.Gradient=x.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(t){t||(t={}),t.coords||(t.coords={});var e,i=this;Object.keys(t).forEach((function(e){i[e]=t[e]})),this.id?this.id+="_"+x.Object.__uid++:this.id=x.Object.__uid++,e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice()},addColorStop:function(t){for(var e in t){var i=new x.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return x.util.populateWithProperties(this,e,t),e},toSVG:function(t,i){var r,n,s,o,a=e(this.coords,!0),h=(i=i||{},e(this.colorStops,!0)),l=a.r1>a.r2,c=this.gradientTransform?this.gradientTransform.concat():x.iMatrix.concat(),u=-this.offsetX,d=-this.offsetY,f=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(h.sort((function(t,e){return t.offset-e.offset})),"objectBoundingBox"===g?(u/=t.width,d/=t.height):(u+=t.width/2,d+=t.height/2),"path"===t.type&&"percentage"!==this.gradientUnits&&(u-=t.pathOffset.x,d-=t.pathOffset.y),c[4]-=u,c[5]-=d,o='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',o+=' gradientTransform="'+(f?i.additionalTransform+" ":"")+x.util.matrixToSVG(c)+'" ',"linear"===this.type?s=["\n']:"radial"===this.type&&(s=["\n']),"radial"===this.type){if(l)for((h=h.concat()).reverse(),r=0,n=h.length;r0){var p=_/Math.max(a.r1,a.r2);for(r=0,n=h.length;r\n')}return s.push("linear"===this.type?"\n":"\n"),s.join("")},toLive:function(t){var e,i,r,n=x.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(e=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i1?1:s,isNaN(s)&&(s=1);var o,a,h,l,c=e.getElementsByTagName("stop"),u="userSpaceOnUse"===e.getAttribute("gradientUnits")?"pixels":"percentage",d=e.getAttribute("gradientTransform")||"",f=[],g=0,_=0;for("linearGradient"===e.nodeName||"LINEARGRADIENT"===e.nodeName?(o="linear",a=function(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}(e)):(o="radial",a=function(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}(e)),h=c.length;h--;)f.push(t(c[h],s));return l=x.parseTransformAttribute(d),function(t,e,i,r){var n,s;Object.keys(e).forEach((function(t){"Infinity"===(n=e[t])?s=1:"-Infinity"===n?s=0:(s=parseFloat(e[t],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(s*=.01,"pixels"===r&&("x1"!==t&&"x2"!==t&&"r2"!==t||(s*=i.viewBoxWidth||i.width),"y1"!==t&&"y2"!==t||(s*=i.viewBoxHeight||i.height)))),e[t]=s}))}(0,a,n,u),"pixels"===u&&(g=-i.left,_=-i.top),new x.Gradient({id:e.getAttribute("id"),type:o,coords:a,colorStops:f,gradientUnits:u,gradientTransform:l,offsetX:g,offsetY:_})}})}(),m=x.util.toFixed,x.Pattern=x.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(t,e){if(t||(t={}),this.id=x.Object.__uid++,this.setOptions(t),!t.source||t.source&&"string"!=typeof t.source)e&&e(this);else{var i=this;this.source=x.util.createImage(),x.util.loadImage(t.source,(function(t,r){i.source=t,e&&e(i,r)}),null,this.crossOrigin)}},toObject:function(t){var e,i,r=x.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?e=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(e=this.source.toDataURL()),i={type:"pattern",source:e,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:m(this.offsetX,r),offsetY:m(this.offsetY,r),patternTransform:this.patternTransform?this.patternTransform.concat():null},x.util.populateWithProperties(this,i,t),i},toSVG:function(t){var e="function"==typeof this.source?this.source():this.source,i=e.width/t.width,r=e.height/t.height,n=this.offsetX/t.width,s=this.offsetY/t.height,o="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(r=1,s&&(r+=Math.abs(s))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,n&&(i+=Math.abs(n))),e.src?o=e.src:e.toDataURL&&(o=e.toDataURL()),'\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e=this.source;if(!e)return"";if(void 0!==e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.toFixed;e.Shadow?e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(t){for(var i in"string"==typeof t&&(t=this._parseShadow(t)),t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=new e.Color(this.color);return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+20),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach((function(e){this[e]!==i[e]&&(t[e]=this[e])}),this),t}}),e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(e),function(){if(x.StaticCanvas)x.warn("fabric.StaticCanvas is already defined.");else{var t=x.util.object.extend,e=x.util.getElementOffset,i=x.util.removeFromArray,r=x.util.toFixed,n=x.util.transformPoint,s=x.util.invertTransform,o=x.util.getNodeCanvas,a=x.util.createCanvasElement,h=new Error("Could not initialize `canvas` element");x.StaticCanvas=x.util.createClass(x.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:x.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(t,e){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return x.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,x.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var t=x.devicePixelRatio;this.__initRetinaScaling(t,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(t,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(t,e,i){e.setAttribute("width",this.width*t),e.setAttribute("height",this.height*t),i.scale(t,t)},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?x.util.loadImage(e,(function(e,n){if(e){var s=new x.Image(e,r);this[t]=s,s.canvas=this}i&&i(e,n)}),this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,e&&(e.canvas=this),i&&i(e,!1)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(){var t=a();if(!t)throw h;if(t.style||(t.style={}),void 0===t.getContext)throw h;return t},_initOptions:function(t){var e=this.lowerCanvasEl;this._setOptions(t),this.width=this.width||parseInt(e.width,10)||0,this.height=this.height||parseInt(e.height,10)||0,this.lowerCanvasEl.style&&(e.width=this.width,e.height=this.height,e.style.width=this.width+"px",e.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=x.util.getById(t)||this._createCanvasElement(),x.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;for(var r in e=e||{},t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px",this.hasLostContext=!0),e.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i,r,n=this._activeObject,s=this.backgroundImage,o=this.overlayImage;for(this.viewportTransform=t,i=0,r=this._objects.length;i\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this.clipPath&&i.push("\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push(""),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=x.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",x.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),"\n")},createSVGClipPathMarkup:function(t){var e=this.clipPath;return e?(e.clipPathId="CLIPPATH_"+x.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(t.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var t=this;return["background","overlay"].map((function(e){var i=t[e+"Color"];if(i&&i.toLive){var r=t[e+"Vpt"],n=t.viewportTransform,s={width:t.width/(r?n[0]:1),height:t.height/(r?n[3]:1)};return i.toSVG(s,{additionalTransform:r?x.util.matrixToSVG(n):""})}})).join("")},createSVGFontFacesMarkup:function(){var t,e,i,r,n,s,o,a,h="",l={},c=x.fontPaths,u=[];for(this._objects.forEach((function t(e){u.push(e),e._objects&&e._objects.forEach(t)})),o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_setSVGObjects:function(t,e){var i,r,n,s=this._objects;for(r=0,n=s.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(e=(n=s._objects).length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(n=s._objects,e=0;e0+l&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),l++;else 0!==(s=this._objects.indexOf(t))&&(o=this._findNewLowerIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,n;if(i){for(r=e,n=e-1;n>=0;--n)if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){r=n;break}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeObject,l=0;if(t===h&&"activeSelection"===t.type)for(r=(a=h._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),t(x.StaticCanvas.prototype,x.Observable),t(x.StaticCanvas.prototype,x.Collection),t(x.StaticCanvas.prototype,x.DataURLExporter),t(x.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=a();if(!e||!e.getContext)return null;var i=e.getContext("2d");return i&&"setLineDash"===t?void 0!==i.setLineDash:null}}),x.StaticCanvas.prototype.toJSON=x.StaticCanvas.prototype.toObject,x.isLikelyNode&&(x.StaticCanvas.prototype.createPNGStream=function(){var t=o(this.lowerCanvasEl);return t&&t.createPNGStream()},x.StaticCanvas.prototype.createJPEGStream=function(t){var e=o(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),x.BaseBrush=x.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(t){t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,t.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas,e=this.shadow,i=t.contextTop,r=t.getZoom();t&&t._isRetinaScaling()&&(r*=x.devicePixelRatio),i.shadowColor=e.color,i.shadowBlur=e.blur*r,i.shadowOffsetX=e.offsetX*r,i.shadowOffsetY=e.offsetY*r}},needsFullRender:function(){return new x.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0},_isOutSideCanvas:function(t){return t.x<0||t.x>this.canvas.getWidth()||t.y<0||t.y>this.canvas.getHeight()}}),x.PencilBrush=x.util.createClass(x.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(t){this.canvas=t,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(t,e,i){var r=e.midPointFrom(i);return t.quadraticCurveTo(e.x,e.y,r.x,r.y),r},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],this._prepareForDrawing(t),this._captureDrawingPath(t),this._render())},onMouseMove:function(t,e){if(this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(t))&&this._captureDrawingPath(t)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(t){return!this.canvas._isMainEvent(t.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(t){var e=new x.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){return!(this._points.length>1&&t.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(t),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(t){var e=new x.Point(t.x,t.y);return this._addPoint(e)},_render:function(t){var e,i,r=this._points[0],n=this._points[1];if(t=t||this.canvas.contextTop,this._saveAndTransform(t),t.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new x.Point(r.x,r.y),n=new x.Point(n.x,n.y),r.x-=s,n.x+=s}for(t.moveTo(r.x,r.y),e=1,i=this._points.length;e=n&&(o=t[i],a.push(o));return a.push(t[s]),a},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var t=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(t))this.canvas.requestRenderAll();else{var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.requestRenderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}}}),x.CircleBrush=x.util.createClass(x.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,e),i.restore()},dot:function(t,e){t.fillStyle=e.fill,t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),t.closePath(),t.fill()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),t=0,e=r.length;t0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=x.util.invertTransform(i),n=this.restorePointerVpt(e);return x.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var r=this._normalizePointer(t,{x:e,y:i}),n=Math.max(t.cacheTranslationX+r.x*t.zoomX,0),s=Math.max(t.cacheTranslationY+r.y*t.zoomY,0);return x.util.isTransparent(t._cacheContext,Math.round(n),Math.round(s),this.targetFindTolerance)}var o=this.contextCache,a=t.selectionBackgroundColor,h=this.viewportTransform;return t.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),t.render(o),o.restore(),t.selectionBackgroundColor=a,x.util.isTransparent(o,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return Array.isArray(this.selectionKey)?!!this.selectionKey.find((function(e){return!0===t[e]})):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t,e,i){var r;if(t)return"scale"===e||"scaleX"===e||"scaleY"===e||"resizing"===e?r=this.centeredScaling||t.centeredScaling:"rotate"===e&&(r=this.centeredRotation||t.centeredRotation),r?!i:i},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i,r){if(!e||!t)return"drag";var n=r.controls[e];return n.getActionName(i,n,r)},_setupCurrentTransform:function(t,i,r){if(i){var n=this.getPointer(t),s=i.__corner,o=i.controls[s],a=r&&s?o.getActionHandler(t,i,o):x.controlsUtils.dragHandler,h=this._getActionFromCorner(r,s,t,i),l=this._getOriginFromCorner(i,s),c=t[this.centeredKey],u={target:i,action:h,actionHandler:a,corner:s,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:l.x,originY:l.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:e(i.angle),width:i.width*i.scaleX,shiftKey:t.shiftKey,altKey:c,original:x.util.saveObjectTransform(i)};this._shouldCenterTransform(i,h,c)&&(u.originX="center",u.originY="center"),u.original.originX=l.x,u.original.originY=l.y,this._currentTransform=u,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var e=this._groupSelector,i=new x.Point(e.ex,e.ey),r=x.util.transformPoint(i,this.viewportTransform),n=new x.Point(e.ex+e.left,e.ey+e.top),s=x.util.transformPoint(n,this.viewportTransform),o=Math.min(r.x,s.x),a=Math.min(r.y,s.y),h=Math.max(r.x,s.x),l=Math.max(r.y,s.y),c=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(o,a,h-o,l-a)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,o+=c,a+=c,h-=c,l-=c,x.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(o,a,h-o,l-a))},findTarget:function(t,e){if(!this.skipTargetFind){var r,n,s=this.getPointer(t,!0),o=this._activeObject,a=this.getActiveObjects(),h=i(t),l=a.length>1&&!e||1===a.length;if(this.targets=[],l&&o._findTargetCorner(s,h))return o;if(a.length>1&&!e&&o===this._searchPossibleTargets([o],s))return o;if(1===a.length&&o===this._searchPossibleTargets([o],s)){if(!this.preserveObjectStacking)return o;r=o,n=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,s);return t[this.altSelectionKey]&&c&&r&&c!==r&&(c=r,this.targets=n),c}},_checkTarget:function(t,e,i){if(e&&e.visible&&e.evented&&e.containsPoint(t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,i.x,i.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n=t.length;n--;){var s=t[n],o=s.group?this._normalizePointer(s.group,e):e;if(this._checkTarget(o,s,e)){(i=t[n]).subTargetCheck&&i instanceof x.Group&&(r=this._searchPossibleTargets(i._objects,e))&&this.targets.push(r);break}}return i},restorePointerVpt:function(t){return x.util.transformPoint(t,x.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=t(e),s=this.upperCanvasEl,o=s.getBoundingClientRect(),a=o.width||0,h=o.height||0;a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var l=this.getRetinaScaling();return 1!==l&&(n.x/=l,n.y/=l),r=0===a||0===h?{width:1,height:1}:{width:s.width/a,height:s.height/h},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),e=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),x.util.addClass(i,"upper-canvas "+t),this.wrapperEl.appendChild(i),this._copyCanvasStyle(e,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=x.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),x.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),x.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;x.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=e,t.height=i,x.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],s=[];t.forEach((function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",{e,target:t}),s.push(t))})),r.forEach((function(r){-1===t.indexOf(r)&&(i=!0,r.fire("selected",{e,target:r}),n.push(r))})),t.length>0&&r.length>0?i&&this.fire("selection:updated",{e,selected:n,deselected:s}):r.length>0?this.fire("selection:created",{e,selected:n}):t.length>0&&this.fire("selection:cleared",{e,deselected:s})},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&!!this._discardActiveObject(e,t)&&!t.onSelect({e})&&(this._activeObject=t,!0)},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects(),i=this.getActiveObject();return e.length&&this.fire("before:selection:cleared",{target:i,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(t){x.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,x.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach((function(i){e[i]=t[i]})),x.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),x.StaticCanvas.prototype.setViewportTransform.call(this,t)}}),x.StaticCanvas)"prototype"!==r&&(x.Canvas[r]=x.StaticCanvas[r])}(),function(){var t=x.util.addListener,e=x.util.removeListener,i={passive:!1};function r(t,e){return t.button&&t.button===e-1}x.util.object.extend(x.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(t,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(t,e){var r=this.upperCanvasEl,n=this._getEventPrefix();t(x.window,"resize",this._onResize),t(r,n+"down",this._onMouseDown),t(r,n+"move",this._onMouseMove,i),t(r,n+"out",this._onMouseOut),t(r,n+"enter",this._onMouseEnter),t(r,"wheel",this._onMouseWheel),t(r,"contextmenu",this._onContextMenu),t(r,"dblclick",this._onDoubleClick),t(r,"dragover",this._onDragOver),t(r,"dragenter",this._onDragEnter),t(r,"dragleave",this._onDragLeave),t(r,"drop",this._onDrop),this.enablePointerEvents||t(r,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&e in eventjs&&(eventjs[e](r,"gesture",this._onGesture),eventjs[e](r,"drag",this._onDrag),eventjs[e](r,"orientation",this._onOrientationChange),eventjs[e](r,"shake",this._onShake),eventjs[e](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(e,"remove");var t=this._getEventPrefix();e(x.document,t+"up",this._onMouseUp),e(x.document,"touchend",this._onTouchEnd,i),e(x.document,t+"move",this._onMouseMove,i),e(x.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t});var i=this;this._hoveredTargets.forEach((function(r){i.fire("mouse:out",{target:e,e:t}),r&&e.fire("mouseout",{e:t})})),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach((function(t){t.isEditing&&t.hiddenTextarea.focus()}))},_onMouseEnter:function(t){this._currentTransform||this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onDragOver:function(t){t.preventDefault();var e=this._simpleEventHandler("dragover",t);this._fireEnterLeaveEvents(e,t)},_onDrop:function(t){return this._simpleEventHandler("drop:before",t),this._simpleEventHandler("drop",t)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"dblclick"),this._resetTransformEventData(t)},getPointerId:function(t){var e=t.changedTouches;return e?e[0]&&e[0].identifier:this.enablePointerEvents?t.pointerId:-1},_isMainEvent:function(t){return!0===t.isPrimary||!1!==t.isPrimary&&("touchend"===t.type&&0===t.touches.length||!t.changedTouches||t.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();t(x.document,"touchend",this._onTouchEnd,i),t(x.document,"touchmove",this._onMouseMove,i),e(n,s+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();e(n,s+"move",this._onMouseMove,i),t(x.document,s+"up",this._onMouseUp),t(x.document,s+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var n=this._getEventPrefix();e(x.document,"touchend",this._onTouchEnd,i),e(x.document,"touchmove",this._onMouseMove,i);var s=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((function(){t(s.upperCanvasEl,n+"down",s._onMouseDown),s._willAddMouseDown=0}),400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var n=this.upperCanvasEl,s=this._getEventPrefix();this._isMainEvent(r)&&(e(x.document,s+"up",this._onMouseUp),e(x.document,s+"move",this._onMouseMove,i),t(n,s+"move",this._onMouseMove,i))},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t){var e=this._activeObject;return!!(!!e!=!!t||e&&t&&e!==t)||(e&&e.isEditing,!1)},__onMouseUp:function(t){var e,i=this._currentTransform,n=this._groupSelector,s=!1,o=!n||0===n.left&&0===n.top;if(this._cacheTransformEventData(t),e=this._target,this._handleEvent(t,"up:before"),r(t,3))this.fireRightClick&&this._handleEvent(t,"up",3,o);else{if(r(t,2))return this.fireMiddleClick&&this._handleEvent(t,"up",2,o),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(t);else if(this._isMainEvent(t)){if(i&&(this._finalizeCurrentTransform(t),s=i.actionPerformed),!o){var a=e===this._activeObject;this._maybeGroupObjects(t),s||(s=this._shouldRender(e)||!a&&e===this._activeObject)}var h,l;if(e){if(h=e._findTargetCorner(this.getPointer(t,!0),x.util.isTouchEvent(t)),e.selectable&&e!==this._activeObject&&"up"===e.activeOn)this.setActiveObject(e,t),s=!0;else{var c=e.controls[h],u=c&&c.getMouseUpHandler(t,e,c);u&&u(t,i,(l=this.getPointer(t)).x,l.y)}e.isMoving=!1}if(i&&(i.target!==e||i.corner!==h)){var d=i.target&&i.target.controls[i.corner],f=d&&d.getMouseUpHandler(t,e,c);l=l||this.getPointer(t),f&&f(t,i,l.x,l.y)}this._setCursorFromEvent(t,e),this._handleEvent(t,"up",1,o),this._groupSelector=null,this._currentTransform=null,e&&(e.__corner=0),s?this.requestRenderAll():o||this.renderTop()}}},_simpleEventHandler:function(t,e){var i=this.findTarget(e),r=this.targets,n={e,target:i,subTargets:r};if(this.fire(t,n),i&&i.fire(t,n),!r)return i;for(var s=0;s1&&(e=new x.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(t){for(var e,i=[],r=this._groupSelector.ex,n=this._groupSelector.ey,s=r+this._groupSelector.left,o=n+this._groupSelector.top,a=new x.Point(v(r,s),v(n,o)),h=new x.Point(y(r,s),y(n,o)),l=!this.selectionFullyContained,c=r===s&&n===o,u=this._objects.length;u--&&!((e=this._objects[u])&&e.selectable&&e.visible&&(l&&e.intersectsWithRect(a,h,!0)||e.isContainedWithinRect(a,h,!0)||l&&e.containsPoint(a,null,!0)||l&&e.containsPoint(h,null,!0))&&(i.push(e),c)););return i.length>1&&(i=i.filter((function(e){return!e.onSelect({e:t})}))),i},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null}}),x.util.object.extend(x.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=(t.multiplier||1)*(t.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(r,t);return x.util.toDataURL(n,e,i)},toCanvasElement:function(t,e){t=t||1;var i=((e=e||{}).width||this.width)*t,r=(e.height||this.height)*t,n=this.getZoom(),s=this.width,o=this.height,a=n*t,h=this.viewportTransform,l=(h[4]-(e.left||0))*t,c=(h[5]-(e.top||0))*t,u=this.interactive,d=[a,0,0,a,l,c],f=this.enableRetinaScaling,g=x.util.createCanvasElement(),_=this.contextTop;return g.width=i,g.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=h,this.width=s,this.height=o,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=f,this.contextTop=_,g}}),x.util.object.extend(x.StaticCanvas.prototype,{loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):x.util.object.clone(t),n=this,s=r.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,(function(t){n.clear(),n._setBgOverlay(r,(function(){s?n._enlivenObjects([s],(function(i){n.clipPath=i[0],n.__setupCanvas.call(n,r,t,o,e)})):n.__setupCanvas.call(n,r,t,o,e)}))}),i),this}},__setupCanvas:function(t,e,i,r){var n=this;e.forEach((function(t,e){n.insertAt(t,e)})),this.renderOnAddRemove=i,delete t.objects,delete t.backgroundImage,delete t.overlayImage,delete t.background,delete t.overlay,this._setOptions(t),this.renderAll(),r&&r()},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(t.backgroundImage||t.overlayImage||t.background||t.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)}else e&&e()},__setBgOverlay:function(t,e,i,r){var n=this;if(!e)return i[t]=!0,void(r&&r());"backgroundImage"===t||"overlayImage"===t?x.util.enlivenObjects([e],(function(e){n[t]=e[0],i[t]=!0,r&&r()})):this["set"+x.util.string.capitalize(t,!0)](e,(function(){i[t]=!0,r&&r()}))},_enlivenObjects:function(t,e,i){t&&0!==t.length?x.util.enlivenObjects(t,(function(t){e&&e(t)}),null,i):e&&e([])},_toDataURL:function(t,e){this.clone((function(i){e(i.toDataURL(t))}))},_toDataURLWithMultiplier:function(t,e,i){this.clone((function(r){i(r.toDataURLWithMultiplier(t,e))}))},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData((function(e){e.loadFromJSON(i,(function(){t&&t(e)}))}))},cloneWithoutData:function(t){var e=x.util.createCanvasElement();e.width=this.width,e.height=this.height;var i=new x.Canvas(e);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,(function(){i.renderAll(),t&&t(i)})),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=t.width,n=t.height,s=e.maxCacheSideLimit,o=e.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rc&&(t.zoomX/=r/c,t.width=c,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.getTotalObjectScaling(),e=this._getTransformedDimensions(0,0),i=e.x*t.scaleX/this.scaleX,r=e.y*t.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:t.scaleX,zoomY:t.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){var i=t._currentTransform.target,r=t._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,s,o=this._cacheCanvas,a=this._limitCacheSize(this._getCacheCanvasDimensions()),h=e.minCacheSideLimit,l=a.width,c=a.height,u=a.zoomX,d=a.zoomY,f=l!==this.cacheWidth||c!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==d,_=f||g,p=0,m=0,v=!1;if(f){var y=this._cacheCanvas.width,S=this._cacheCanvas.height,C=l>y||c>S;v=C||(l<.9*y||c<.9*S)&&y>h&&S>h,C&&!a.capped&&(l>h||c>h)&&(p=.1*l,m=.1*c)}return this instanceof e.Text&&this.path&&(_=!0,v=!0,p+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!_&&(v?(o.width=Math.ceil(l+p),o.height=Math.ceil(c+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,o.width,o.height)),n=a.x/2,s=a.y/2,this.cacheTranslationX=Math.round(o.width/2-n)+n,this.cacheTranslationY=Math.round(o.height/2-s)+s,this.cacheWidth=l,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,d),this.zoomX=u,this.zoomY=d,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,i=this.calcTransformMatrix(!e);t.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(r.clipPath=this.clipPath.toObject(t),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype;return i.stateProperties.forEach((function(e){"left"!==e&&"top"!==e&&(t[e]===i[e]&&delete t[e],Array.isArray(t[e])&&Array.isArray(i[e])&&0===t[e].length&&0===i[e].length&&delete t[e])})),t},toString:function(){return"#"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var t=e.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(t.scaleX),scaleY:Math.abs(t.scaleY)}},getTotalObjectScaling:function(){var t=this.getObjectScaling(),e=t.scaleX,i=t.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();e*=r*n,i*=r*n}return{scaleX:e,scaleY:i}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t,n=this[t]!==i,s=!1;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),t.restore())},renderCache:function(t){t=t||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,t.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(t,i){if(t.save(),i.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",i.absolutePositioned){var r=e.util.invertTransform(this.calcTransformMatrix());t.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},drawObject:function(t,e){var i=this.fill,r=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this._render(t),this._drawClipPath(t,this.clipPath),this.fill=i,this.stroke=r},_drawClipPath:function(t,e){e&&(e.canvas=this.canvas,e.shouldCache(),e._transformDone=!0,e.renderCache({forClipping:!0}),this.drawClipPathOnCache(t,e))},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){var i=e.stroke;i&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(t,i):(t.strokeStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,i)):t.strokeStyle=e.stroke)},_setFillStyles:function(t,e){var i=e.fill;i&&(i.toLive?(t.fillStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,e.fill)):t.fillStyle=i)},_setClippingProperties:function(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"},_setLineDash:function(t,e){e&&0!==e.length&&(1&e.length&&e.push.apply(e,e),t.setLineDash(e))},_renderControls:function(t,i){var r,n,s,a=this.getViewportTransform(),h=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==i.hasControls?i.hasControls:this.hasControls,h=e.util.multiplyTransformMatrices(a,h),r=e.util.qrDecompose(h),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(r.angle-=180),t.rotate(o(this.group?r.angle:this.angle)),i.forActiveSelection||this.group?n&&this.drawBordersInGroup(t,r,i):n&&this.drawBorders(t,i),s&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i,r=this.shadow,n=this.canvas,s=n&&n.viewportTransform[0]||1,o=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(s*=e.devicePixelRatio,o*=e.devicePixelRatio),t.shadowColor=r.color,t.shadowBlur=r.blur*e.browserShadowBlurConstant*(s+o)*(i.scaleX+i.scaleY)/4,t.shadowOffsetX=r.offsetX*s*i.scaleX,t.shadowOffsetY=r.offsetY*o*i.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return"percentage"===e.gradientUnits?t.transform(this.width,0,0,this.height,r,n):t.transform(1,0,0,1,r,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_render:function(){},_renderFill:function(t){this.fill&&(t.save(),this._setFillStyles(t,this),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform&&this.group){var e=this.getObjectScaling();t.scale(1/e.scaleX,1/e.scaleY)}else this.strokeUniform&&t.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}},_applyPatternForTransformedGradient:function(t,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),s=e.util.createCanvasElement(),o=this.canvas.getRetinaScaling(),a=n.x/this.scaleX/o,h=n.y/this.scaleY/o;s.width=a,s.height=h,(r=s.getContext("2d")).beginPath(),r.moveTo(0,0),r.lineTo(a,0),r.lineTo(a,h),r.lineTo(0,h),r.closePath(),r.translate(a/2,h/2),r.scale(n.zoomX/this.scaleX/o,n.zoomY/this.scaleY/o),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(t),r.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(o*this.scaleX/n.zoomX,o*this.scaleY/n.zoomY),t.strokeStyle=r.createPattern(s,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},cloneAsImage:function(t,i){var r=this.toCanvasElement(i);return t&&t(new e.Image(r)),this},toCanvasElement:function(t){t||(t={});var i=e.util,r=i.saveObjectTransform(this),n=this.group,s=this.shadow,o=Math.abs,a=(t.multiplier||1)*(t.enableRetinaScaling?e.devicePixelRatio:1);delete this.group,t.withoutTransform&&i.resetObjectTransform(this),t.withoutShadow&&(this.shadow=null);var h,l,c,u,d=e.util.createCanvasElement(),f=this.getBoundingRect(!0,!0),g=this.shadow,_={x:0,y:0};g&&(l=g.blur,h=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),_.x=2*Math.round(o(g.offsetX)+l)*o(h.scaleX),_.y=2*Math.round(o(g.offsetY)+l)*o(h.scaleY)),c=f.width+_.x,u=f.height+_.y,d.width=Math.ceil(c),d.height=Math.ceil(u);var p=new e.StaticCanvas(d,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===t.format&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new e.Point(p.width/2,p.height/2),"center","center");var m=this.canvas;p.add(this);var v=p.toCanvasElement(a||1,t);return this.shadow=s,this.set("canvas",m),n&&(this.group=n),this.set(r).setCoords(),p._objects=[],p.dispose(),p=null,v},toDataURL:function(t){return t||(t={}),e.util.toDataURL(this.toCanvasElement(t),t.format||"png",t.quality||1)},isType:function(t){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){e.runningAnimations&&e.runningAnimations.cancelByTarget(this)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.ENLIVEN_PROPS=["clipPath"],e.Object._fromObject=function(t,i,n,s){var o=e[t];i=r(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],(function(t){void 0!==t[0]&&(i.fill=t[0]),void 0!==t[1]&&(i.stroke=t[1]),e.util.enlivenObjectEnlivables(i,i,(function(){var t=s?new o(i[s],i):new o(i);n&&n(t)}))}))},e.Object.__uid=0)}(e),S=x.util.degreesToRadians,C={left:-.5,center:0,right:.5},w={top:-.5,center:0,bottom:.5},x.util.object.extend(x.Object.prototype,{translateToGivenOrigin:function(t,e,i,r,n){var s,o,a,h=t.x,l=t.y;return"string"==typeof e?e=C[e]:e-=.5,"string"==typeof r?r=C[r]:r-=.5,"string"==typeof i?i=w[i]:i-=.5,"string"==typeof n?n=w[n]:n-=.5,o=n-i,((s=r-e)||o)&&(a=this._getTransformedDimensions(),h=t.x+s*a.x,l=t.y+o*a.y),new x.Point(h,l)},translateToCenterPoint:function(t,e,i){var r=this.translateToGivenOrigin(t,e,i,"center","center");return this.angle?x.util.rotatePoint(r,t,S(this.angle)):r},translateToOriginPoint:function(t,e,i){var r=this.translateToGivenOrigin(t,"center","center",e,i);return this.angle?x.util.rotatePoint(r,t,S(this.angle)):r},getCenterPoint:function(){var t=new x.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(t,e,i){var r,n,s=this.getCenterPoint();return r=void 0!==e&&void 0!==i?this.translateToGivenOrigin(s,"center","center",e,i):new x.Point(this.left,this.top),n=new x.Point(t.x,t.y),this.angle&&(n=x.util.rotatePoint(n,s,-S(this.angle))),n.subtractEquals(r)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(t){var e,i,r=S(this.angle),n=this.getScaledWidth(),s=x.util.cos(r)*n,o=x.util.sin(r)*n;e="string"==typeof this.originX?C[this.originX]:this.originX-.5,i="string"==typeof t?C[t]:t-.5,this.left+=s*(i-e),this.top+=o*(i-e),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),function(){var t=x.util,e=t.degreesToRadians,i=t.multiplyTransformMatrices,r=t.transformPoint;t.object.extend(x.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(t,e){return e?t?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),t?this.aCoords:this.lineCoords)},getCoords:function(t,e){return i=this._getCoords(t,e),[new x.Point(i.tl.x,i.tl.y),new x.Point(i.tr.x,i.tr.y),new x.Point(i.br.x,i.br.y),new x.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r);return"Intersection"===x.Intersection.intersectPolygonRectangle(n,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===x.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=e?t.aCoords:t.lineCoords,s=0,o=t._getImageLines(n);s<4;s++)if(!t.containsPoint(r[s],o))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var n=this._getCoords(i,r),s=(e=e||this._getImageLines(n),this._findCrossPoints(t,e));return 0!==s&&s%2==1},isOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,t).some((function(t){return t.x<=i.x&&t.x>=e.x&&t.y<=i.y&&t.y>=e.y}))||!!this.intersectsWithRect(e,i,!0,t)||this._containsCenterOfCanvas(e,i,t)},_containsCenterOfCanvas:function(t,e,i){var r={x:(t.x+e.x)/2,y:(t.y+e.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(e,i,!0,t)||this.getCoords(!0,t).every((function(t){return(t.x>=i.x||t.x<=e.x)&&(t.y>=i.y||t.y<=e.y)}))&&this._containsCenterOfCanvas(e,i,t)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s=0;for(var o in e)if(!((n=e[o]).o.y=t.y&&n.d.y>=t.y||(n.o.x===n.d.x&&n.o.x>=t.x?r=n.o.x:(i=(n.d.y-n.o.y)/(n.d.x-n.o.x),r=-(t.y-0*t.x-(n.o.y-i*n.o.x))/(0-i)),r>=t.x&&(s+=1),2!==s)))break;return s},getBoundingRect:function(e,i){var r=this.getCoords(e,i);return t.makeBoundingBoxFromPoints(r)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)\n')}},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})},toClipPathSVG:function(t){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})},_createBaseClipPathSVGMarkup:function(t,e){var i=(e=e||{}).reviver,r=e.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=t.indexOf("COMMON_PARTS");return t[s]=n,i?i(t.join("")):t.join("")},_createBaseSVGMarkup:function(t,e){var i,r,n=(e=e||{}).noStyle,s=e.reviver,o=n?"":'style="'+this.getSvgStyles()+'" ',a=e.withShadow?'style="'+this.getSvgFilter()+'" ':"",h=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=h&&h.absolutePositioned,u=this.stroke,d=this.fill,f=this.shadow,g=[],_=t.indexOf("COMMON_PARTS"),p=e.additionalTransform;return h&&(h.clipPathId="CLIPPATH_"+x.Object.__uid++,r='\n'+h.toClipPathSVG(s)+"\n"),c&&g.push("\n"),g.push("\n"),i=[o,l,n?"":this.addPaintOrder()," ",p?'transform="'+p+'" ':""].join(""),t[_]=i,d&&d.toLive&&g.push(d.toSVG(this)),u&&u.toLive&&g.push(u.toSVG(this)),f&&g.push(f.toSVG(this)),h&&g.push(r),g.push(t.join("")),g.push("\n"),c&&g.push("\n"),s?s(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var t=x.util.object.extend,e="stateProperties";function i(e,i,r){var n={};r.forEach((function(t){n[t]=e[t]})),t(e[i],n,!0)}function r(t,e,i){if(t===e)return!0;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var n=0,s=t.length;n=0;h--)if(n=a[h],this.isControlVisible(n)&&(r=this._getImageLines(e?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:s,y:o},r))&&i%2==1))return this.__corner=n,n;return!1},forEachControl:function(t){for(var e in this.controls)t(this.controls[e],e,this)},_setCornerCoords:function(){var t=this.oCoords;for(var e in t){var i=this.controls[e];t[e].corner=i.calcCornerCoords(this.angle,this.cornerSize,t[e].x,t[e].y,!1),t[e].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,t[e].x,t[e].y,!0)}},drawSelectionBackground:function(e){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;e.save();var i=this.getCenterPoint(),r=this._calculateCurrentDimensions(),n=this.canvas.viewportTransform;return e.translate(i.x,i.y),e.scale(1/n[0],1/n[3]),e.rotate(t(this.angle)),e.fillStyle=this.selectionBackgroundColor,e.fillRect(-r.x/2,-r.y/2,r.x,r.y),e.restore(),this},drawBorders:function(t,e){e=e||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,n=i.x+r,s=i.y+r,o=void 0!==e.hasControls?e.hasControls:this.hasControls,a=!1;return t.save(),t.strokeStyle=e.borderColor||this.borderColor,this._setLineDash(t,e.borderDashArray||this.borderDashArray),t.strokeRect(-n/2,-s/2,n,s),o&&(t.beginPath(),this.forEachControl((function(e,i,r){e.withConnection&&e.getVisibility(r,i)&&(a=!0,t.moveTo(e.x*n,e.y*s),t.lineTo(e.x*n+e.offsetX,e.y*s+e.offsetY))})),a&&t.stroke()),t.restore(),this},drawBordersInGroup:function(t,e,i){i=i||{};var r=x.util.sizeAfterTransform(this.width,this.height,e),n=this.strokeWidth,s=this.strokeUniform,o=this.borderScaleFactor,a=r.x+n*(s?this.canvas.getZoom():e.scaleX)+o,h=r.y+n*(s?this.canvas.getZoom():e.scaleY)+o;return t.save(),this._setLineDash(t,i.borderDashArray||this.borderDashArray),t.strokeStyle=i.borderColor||this.borderColor,t.strokeRect(-a/2,-h/2,a,h),t.restore(),this},drawControls:function(t,e){e=e||{},t.save();var i,r,n=this.canvas.getRetinaScaling();return t.setTransform(n,0,0,n,0,0),t.strokeStyle=t.fillStyle=e.cornerColor||this.cornerColor,this.transparentCorners||(t.strokeStyle=e.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(t,e.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl((function(n,s,o){r=o.oCoords[s],n.getVisibility(o,s)&&(i&&(r=x.util.transformPoint(r,i)),n.render(t,r.x,r.y,e,o))})),t.restore(),this},isControlVisible:function(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)},setControlVisible:function(t,e){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e,this},setControlsVisibility:function(t){for(var e in t||(t={}),t)this.setControlVisible(e,t[e]);return this},onDeselect:function(){},onSelect:function(){}})}(),x.util.object.extend(x.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,n=e.onChange||i,s=this;return x.util.animate({target:this,startValue:t.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(e){t.set("left",e),s.requestRenderAll(),n()},onComplete:function(){t.setCoords(),r()}})},fxCenterObjectV:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,n=e.onChange||i,s=this;return x.util.animate({target:this,startValue:t.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(e){t.set("top",e),s.requestRenderAll(),n()},onComplete:function(){t.setCoords(),r()}})},fxRemove:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,n=e.onChange||i,s=this;return x.util.animate({target:this,startValue:t.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){t.set("opacity",e),s.requestRenderAll(),n()},onComplete:function(){s.remove(t),r()}})}}),x.util.object.extend(x.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var t,e,i=[],r=[];for(t in arguments[0])i.push(t);for(var n=0,s=i.length;n-1||n&&s.colorProperties.indexOf(n[1])>-1,a=n?this.get(n[0])[n[1]]:this.get(t);"from"in i||(i.from=a),o||(e=~e.indexOf("=")?a+parseFloat(e.replace("=","")):parseFloat(e));var h={target:this,startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(t,e,r){return i.abort.call(s,t,e,r)},onChange:function(e,o,a){n?s[n[0]][n[1]]=e:s.set(t,e),r||i.onChange&&i.onChange(e,o,a)},onComplete:function(t,e,n){r||(s.setCoords(),i.onComplete&&i.onComplete(t,e,n))}};return o?x.util.animateColor(h.startValue,h.endValue,h.duration,h):x.util.animate(h)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n={x1:1,x2:1,y1:1,y2:1};function s(t,e){var i=t.origin,r=t.axis1,n=t.axis2,s=t.dimension,o=e.nearest,a=e.center,h=e.farthest;return function(){switch(this.get(i)){case o:return Math.min(this.get(r),this.get(n));case a:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case h:return Math.max(this.get(r),this.get(n))}}}e.Line?e.warn("fabric.Line is already defined"):(e.Line=e.util.createClass(e.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:e.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,e){t||(t=[0,0,0,0]),this.callSuper("initialize",e),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(e)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,e){return this.callSuper("_set",t,e),void 0!==n[t]&&this._setWidthHeight(),this},_getLeftToOriginX:s({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:s({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){t.beginPath();var e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.lineWidth=this.strokeWidth;var i=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return i(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,e=this.y1<=this.y2?-1:1,i=t*this.width*.5,r=e*this.height*.5;return{x1:i,x2:t*this.width*-.5,y1:r,y2:e*this.height*-.5}},_toSVG:function(){var t=this.calcLinePoints();return["\n']}}),e.Line.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),e.Line.fromElement=function(t,r,n){n=n||{};var s=e.parseAttributes(t,e.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];r(new e.Line(o,i(s,n)))},e.Line.fromObject=function(t,i){var n=r(t,!0);n.points=[t.x1,t.y1,t.x2,t.y2],e.Object._fromObject("Line",n,(function(t){delete t.points,i&&i(t)}),"points")})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.degreesToRadians;e.Circle?e.warn("fabric.Circle is already defined."):(e.Circle=e.util.createClass(e.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:e.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,r=(this.endAngle-this.startAngle)%360;if(0===r)t=["\n'];else{var n=i(this.startAngle),s=i(this.endAngle),o=this.radius;t=['180?"1":"0")+" 1"," "+e.util.cos(s)*o+" "+e.util.sin(s)*o,'" ',"COMMON_PARTS"," />\n"]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,i(this.startAngle),i(this.endAngle),!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),e.Circle.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),e.Circle.fromElement=function(t,i){var r,n=e.parseAttributes(t,e.Circle.ATTRIBUTE_NAMES);if(!("radius"in(r=n)&&r.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,i(new e.Circle(n))},e.Circle.fromObject=function(t,i){e.Object._fromObject("Circle",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={});e.Triangle?e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_toSVG:function(){var t=this.width/2,e=this.height/2;return["']}}),e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=2*Math.PI;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){var r=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new e.Ellipse(r))},e.Ellipse.fromObject=function(t,i){e.Object._fromObject("Ellipse",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==e||0!==i,h=.4477152502;t.beginPath(),t.moveTo(s+e,o),t.lineTo(s+r-e,o),a&&t.bezierCurveTo(s+r-h*e,o,s+r,o+h*i,s+r,o+i),t.lineTo(s+r,o+n-i),a&&t.bezierCurveTo(s+r,o+n-h*i,s+r-h*e,o+n,s+r-e,o+n),t.lineTo(s+e,o+n),a&&t.bezierCurveTo(s+h*e,o+n,s,o+n-h*i,s,o+n-i),t.lineTo(s,o+i),a&&t.bezierCurveTo(s,o+h*i,s+h*e,o,s+e,o),t.closePath(),this._renderPaintInOrder(t)},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r,n){if(!t)return r(null);n=n||{};var s=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.height=s.height||0,s.width=s.width||0;var o=new e.Rect(i(n?e.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)})}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.util.projectStrokeOnPoints;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._setPositionDimensions(e)},_projectStrokeOnPoints:function(){return o(this.points,this,!0)},_setPositionDimensions:function(t){var e,i=this._calcDimensions(t),r=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-r,this.height=i.height-r,t.fromSVG||(e=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+r/2,y:i.top-this.strokeWidth/2+r/2},"left","top",this.originX,this.originY)),void 0===t.left&&(this.left=t.fromSVG?i.left:e.x),void 0===t.top&&(this.top=t.fromSVG?i.top:e.y),this.pathOffset={x:i.left+this.width/2+r/2,y:i.top+this.height/2+r/2}},_calcDimensions:function(){var t=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,e=r(t,"x")||0,i=r(t,"y")||0;return{left:e,top:i,width:(n(t,"x")||0)-e,height:(n(t,"y")||0)-i}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},_toSVG:function(){for(var t=[],i=this.pathOffset.x,r=this.pathOffset.y,n=e.Object.NUM_FRACTION_DIGITS,o=0,a=this.points.length;o\n']},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(t){return n(this.callSuper("toObject",t),{path:this.path.map((function(t){return t.slice()}))})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},_toSVG:function(){return["\n"]},_getOffsetTransform:function(){var t=e.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,t)+", "+o(-this.pathOffset.y,t)+")"},toClipPathSVG:function(t){var e=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},toSVG:function(t){var e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var t,n,s=[],o=[],a=0,h=0,l=0,c=0,u=0,d=this.path.length;u"},addWithUpdate:function(t){var i=!!this.group;return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(i&&e.util.removeTransformFromObject(t,this.group.calcTransformMatrix()),this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);if("canvas"===t)for(;r--;)this._objects[r]._set(t,i);e.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,r=this._objects.filter((function(t){return!t.excludeFromExport})).map((function(e){var r=e.includeDefaultValues;e.includeDefaultValues=i;var n=e.toObject(t);return e.includeDefaultValues=r,n})),n=e.Object.prototype.toObject.call(this,t);return n.objects=r,n},toDatalessObject:function(t){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map((function(e){var i=e.includeDefaultValues;e.includeDefaultValues=n;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r}))}var s=e.Object.prototype.toDatalessObject.call(this,t);return s.objects=i,s},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=e.Object.prototype.shouldCache.call(this);if(t)for(var i=0,r=this._objects.length;i\n"],i=0,r=this._objects.length;i\n"),e},getSvgStyles:function(){var t=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")},toClipPathSVG:function(t){for(var e=[],i=0,r=this._objects.length;i"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",t,e),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;r\n','\t\n',"\n"),o=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(a='" image-rendering="optimizeSpeed'),i.push("\t\n"),this.stroke||this.strokeDashArray){var l=this.fill;this.fill=null,t=["\t\n'],this.fill=l}return"fill"!==this.paintFirst?e.concat(t,i):e.concat(i,t)},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src"):e.src:this.src||""},setSrc:function(t,e,i){return x.util.loadImage(t,(function(t,r){this.setElement(t,i),this._setWidthHeight(),e&&e(this,r)}),this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||r>e&&n>e)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);x.filterBackend||(x.filterBackend=x.initFilterBackend());var o=x.util.createCanvasElement(),a=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,h=s.width,l=s.height;o.width=h,o.height=l,this._element=o,this._lastScaleX=t.scaleX=r,this._lastScaleY=t.scaleY=n,x.filterBackend.applyFilters([t],s,h,l,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(t){if(t=(t=t||this.filters||[]).filter((function(t){return t&&!t.isNeutralState()})),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===t.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=x.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return x.filterBackend||(x.filterBackend=x.initFilterBackend()),x.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){x.util.setImageSmoothing(t,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)},drawCacheOnCanvas:function(t){x.util.setImageSmoothing(t,this.imageSmoothing),x.Object.prototype.drawCacheOnCanvas.call(this,t)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(t){var e=this._element;if(e){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,s=this.height,o=Math.min,a=Math.max,h=a(this.cropX,0),l=a(this.cropY,0),c=e.naturalWidth||e.width,u=e.naturalHeight||e.height,d=h*i,f=l*r,g=o(n*i,c-d),_=o(s*r,u-f),p=-n/2,m=-s/2,v=o(n,c/i-h),y=o(s,u/r-l);e&&t.drawImage(e,d,f,g,_,p,m,v,y)}},_needsResize:function(){var t=this.getTotalObjectScaling();return t.scaleX!==this._lastScaleX||t.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(t,e){this.setElement(x.util.getById(t),e),x.util.addClass(this.getElement(),x.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t)},_initFilters:function(t,e){t&&t.length?x.util.enlivenObjects(t,(function(t){e&&e(t)}),"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){t||(t={});var e=this.getElement();this.width=t.width||e.naturalWidth||e.width||0,this.height=t.height||e.naturalHeight||e.height||0},parsePreserveAspectRatioAttribute:function(){var t,e=x.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,h=0,l=0,c=this.width,u=this.height,d={width:c,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=c/i,s=u/r):("meet"===e.meetOrSlice&&(t=(c-i*(n=s=x.util.findScaleToFit(this._element,d)))/2,"Min"===e.alignX&&(o=-t),"Max"===e.alignX&&(o=t),t=(u-r*s)/2,"Min"===e.alignY&&(a=-t),"Max"===e.alignY&&(a=t)),"slice"===e.meetOrSlice&&(t=i-c/(n=s=x.util.findScaleToCover(this._element,d)),"Mid"===e.alignX&&(h=t/2),"Max"===e.alignX&&(h=t),t=r-u/s,"Mid"===e.alignY&&(l=t/2),"Max"===e.alignY&&(l=t),i=c/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:h,cropY:l}}}),x.Image.CSS_CANVAS="canvas-img",x.Image.prototype.getSvgSrc=x.Image.prototype.getSrc,x.Image.fromObject=function(t,e){var i=x.util.object.clone(t);x.util.loadImage(i.src,(function(t,r){r?e&&e(null,!0):x.Image.prototype._initFilters.call(i,i.filters,(function(r){i.filters=r||[],x.Image.prototype._initFilters.call(i,[i.resizeFilter],(function(r){i.resizeFilter=r[0],x.util.enlivenObjectEnlivables(i,i,(function(){var r=new x.Image(t,i);e(r,!1)}))}))}))}),null,i.crossOrigin)},x.Image.fromURL=function(t,e,i){x.util.loadImage(t,(function(t,r){e&&e(new x.Image(t,i),r)}),null,i&&i.crossOrigin)},x.Image.ATTRIBUTE_NAMES=x.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),x.Image.fromElement=function(t,i,r){var n=x.parseAttributes(t,x.Image.ATTRIBUTE_NAMES);x.Image.fromURL(n["xlink:href"],i,e(r?x.util.object.clone(r):{},n))})}(e),x.util.object.extend(x.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(t){var e=function(){},i=(t=t||{}).onComplete||e,r=t.onChange||e,n=this;return x.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.rotate(t),r()},onComplete:function(){n.setCoords(),i()}})}}),x.util.object.extend(x.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function t(t,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),!!t.getShaderParameter(r,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}x.isWebglSupported=function(e){if(x.isLikelyNode)return!1;e=e||x.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){x.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=x.maxTextureSize>=e;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(t(r,s[o])){x.webGlPrecision=s[o];break}}return this.isSupported=n,n},x.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o=x.util.createCanvasElement(),a=new ArrayBuffer(t*e*4);if(x.forceGLPutImageData)return this.imageBuffer=a,void(this.copyGLTo2D=I);var h,l,c={imageBuffer:a,destinationWidth:t,destinationHeight:e,targetCanvas:o};o.width=t,o.height=e,h=window.performance.now(),E.call(c,this.gl,c),l=window.performance.now()-h,h=window.performance.now(),I.call(c,this.gl,c),l>window.performance.now()-h?(this.imageBuffer=a,this.copyGLTo2D=I):this.copyGLTo2D=E}},createWebGLCanvas:function(t,e){var i=x.util.createCanvasElement();i.width=t,i.height=e;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,e));var h={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&e),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},l=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,l),t.forEach((function(t){t&&t.applyTo(h)})),function(t){var e=t.targetCanvas,i=e.width,r=e.height,n=t.destinationWidth,s=t.destinationHeight;i===n&&r===s||(e.width=n,e.height=s)}(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(l),n.getContext("2d").setTransform(1,0,0,1,0,0),h},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:E,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e={renderer:"",vendor:""};if(!t)return e;var i=t.getExtension("WEBGL_debug_renderer_info");if(i){var r=t.getParameter(i.UNMASKED_RENDERER_WEBGL),n=t.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(e.renderer=r.toLowerCase()),n&&(e.vendor=n.toLowerCase())}return this.gpuInfo=e,e}}}(),function(){var t=function(){};function e(){}x.Canvas2dFilterBackend=e,e.prototype={evictCachesForKey:t,dispose:t,clearWebGLCaches:t,resources:{},applyFilters:function(t,e,i,r,n){var s=n.getContext("2d");s.drawImage(e,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:e,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return t.forEach((function(t){t.applyTo(o)})),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),x.Image=x.Image||{},x.Image.filters=x.Image.filters||{},x.Image.filters.BaseFilter=x.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==x.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+x.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var s=t.createProgram();if(t.attachShader(s,r),t.attachShader(s,n),t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(s));var o=this.getAttributeLocations(t,s),a=this.getUniformLocations(t,s)||{};return a.uStepW=t.getUniformLocation(s,"uStepW"),a.uStepH=t.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPosition,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){var t=this.mainParameter,e=x.Image.filters[this.type].prototype;if(t){if(Array.isArray(e[t])){for(var i=e[t].length;i--;)if(this[t][i]!==e[t][i])return!1;return!0}return e[t]===this[t]}return!1},applyTo:function(t){t.webgl?(this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),x.Image.filters.BaseFilter.fromObject=function(t,e){var i=new x.Image.filters[t.type](t);return e&&e(i),i},function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,r,n,s,o=t.imageData.data,a=o.length,h=this.matrix,l=this.colorsOnly;for(s=0;s=S||o<0||o>=y||(h=4*(a*y+o),l=p[f*m+d],e+=_[h]*l,i+=_[h+1]*l,r+=_[h+2]*l,b||(n+=_[h+3]*l));w[s]=e,w[s+1]=i,w[s+2]=r,w[s+3]=b?_[s+3]:n}t.imageData=C},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData.data,n=r.length,s=this.mode;for(e=0;el[0]&&n>l[1]&&s>l[2]&&r 0.0) {\n"+this.fragmentSource[t]+"}\n}"},retrieveShader:function(t){var e,i=this.type+"_"+this.mode;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i,r,n,s,o,a,h,l=t.imageData.data,c=l.length,u=1-this.alpha;i=(h=new e.Color(this.color).getSource())[0]*this.alpha,r=h[1]*this.alpha,n=h[2]*this.alpha;for(var d=0;d=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=e.width,a=e.height,h=o(s*i),l=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,s,a,h,l):"hermite"===this.resizeType?n=this.hermiteFastResize(t,s,a,h,l):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,s,a,h,l):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,s,a,h,l)),t.imageData=n},sliceByTwo:function(t,i,n,s,o){var a,h,l=t.imageData,c=.5,u=!1,d=!1,f=i*c,g=n*c,_=e.filterBackend.resources,p=0,m=0,v=i,y=0;for(_.sliceByTwo||(_.sliceByTwo=document.createElement("canvas")),((a=_.sliceByTwo).width<1.5*i||a.height=e)){M=r(1e3*s(x-C.x)),S[M]||(S[M]={});for(var F=w.y-y;F<=w.y+y;F++)F<0||F>=o||(L=r(1e3*s(F-C.y)),S[M][L]||(S[M][L]=f(n(i(M*p,2)+i(L*m,2))/1e3)),(T=S[M][L])>0&&(I+=T,O+=T*c[E=4*(F*e+x)],R+=T*c[E+1],D+=T*c[E+2],A+=T*c[E+3]))}d[E=4*(b*a+h)]=O/I,d[E+1]=R/I,d[E+2]=D/I,d[E+3]=A/I}return++h1&&L<-1||(y=2*L*L*L-3*L*L+1)>0&&(T+=y*f[3+(M=4*(A+I*e))],C+=y,f[M+3]<255&&(y=y*f[M+3]/250),w+=y*f[M],b+=y*f[M+1],x+=y*f[M+2],S+=y)}_[v]=w/S,_[v+1]=b/S,_[v+2]=x/S,_[v+3]=T/C}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i=t.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));for(e=0;e1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}(e),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var e,i=t.imageData.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,n=256;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){var e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){if(t.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline="bottom"}t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,s){this._renderChars(t,e,i,r,n,s)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,s,o,a,h=t.fillStyle,l=this._getLeftOffset(),c=this._getTopOffset(),u=0,d=0,f=this.path,g=0,_=this._textLines.length;g<_;g++)if(e=this.getHeightOfLine(g),this.textBackgroundColor||this.styleHas("textBackgroundColor",g)){r=this._textLines[g],i=this._getLineLeftOffset(g),d=0,u=0,n=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var p=0,m=r.length;p=0:ia?u%=a:u<0&&(u+=a),this._setGraphemeOnPath(u,s,o),u+=s.kernedWidth}return{width:h,numOfSpaces:0}},_setGraphemeOnPath:function(t,i,r){var n=t+i.kernedWidth/2,s=this.path,o=e.util.getPointOnPath(s.path,n,s.segmentsInfo);i.renderLeft=o.x-r.x,i.renderTop=o.y-r.y,i.angle=o.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(t,e,i,r,n){var s,o=this.getCompleteStyleDeclaration(e,i),a=r?this.getCompleteStyleDeclaration(e,i-1):{},h=this._measureChar(t,o,r,a),l=h.kernedWidth,c=h.width;0!==this.charSpacing&&(c+=s=this._getWidthOfCharSpacing(),l+=s);var u={width:c,left:0,height:o.fontSize,kernedWidth:l,deltaY:o.deltaY};if(i>0&&!n){var d=this.__charBounds[e][i-1];u.left=d.left+d.width+h.kernedWidth-h.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;r0){var I=v+s+u;"rtl"===this.direction&&(I=this.width-I-d),l&&m&&(t.fillStyle=m,t.fillRect(I,c+w*r+o,d,this.fontSize/15)),u=f.left,d=f.width,l=g,m=p,r=n,o=a}else d+=f.kernedWidth;I=v+s+u,"rtl"===this.direction&&(I=this.width-I-d),t.fillStyle=p,g&&p&&t.fillRect(I,c+w*r+o,d-C,this.fontSize/15),y+=i}else y+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,n=this.fontFamily,s=e.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||s?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}x.IText=x.util.createClass(x.Text,x.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this._getCursorBoundaries(),e=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(t,e):this.renderSelection(t,e),e.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var e,i,r,n,s=0,o=0,a=this.get2DCursorLocation(t);r=a.charIndex,i=a.lineIndex;for(var h=0;h0?o:0)},"rtl"===this.direction&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=t.topOffset,l=this.getValueOfPropertyAt(r,n,"deltaY");h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.cursorColor||this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,h+t.top+l,a,s)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,h=o.lineIndex,l=s.charIndex<0?0:s.charIndex,c=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var d,f=this._getLineLeftOffset(u)||0,g=this.getHeightOfLine(u),_=0,p=0;if(u===a&&(_=this.__charBounds[a][l].left),u>=a&&u1)&&(g/=this.lineHeight);var v=t.left+f+_,y=p-_,S=g,C=0;this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",S=1,C=g):e.fillStyle=this.selectionColor,"rtl"===this.direction&&(v=this.width-v-y),e.fillRect(v,t.top+t.topOffset+C,y,S),t.topOffset+=d}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),x.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);x.Object._fromObject("IText",e,i,"text")}}(),b=x.util.object.clone,x.util.object.extend(x.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var t=this;this.on("added",(function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))}))},initRemovedHandler:function(){var t=this;this.on("removed",(function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],x.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))}))},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach((function(t){t.__isMousedown=!1}))},t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout((function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")}),100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout((function(){e._tick()}),i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=x.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e);return{selectionStart:n,selectionEnd:n+x.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t).join("").length;return t===e?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(t,e).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},l=this.canvas.getRetinaScaling(),c=this.canvas.upperCanvasEl,u=c.width/l,d=c.height/l,f=u-s,g=d-s,_=c.clientWidth/u,p=c.clientHeight/d;return h=x.util.transformPoint(h,a),(h=x.util.transformPoint(h,this.canvas.viewportTransform)).x*=_,h.y*=p,h.x<0&&(h.x=0),h.x>f&&(h.x=f),h.y<0&&(h.y=0),h.y>g&&(h.y=g),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text,e=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,e&&(e.blur&&e.blur(),e.parentNode&&e.parentNode.removeChild(e)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),s=this.get2DCursorLocation(e,!0),o=n.lineIndex,a=n.charIndex,h=s.lineIndex,l=s.charIndex;if(o!==h){if(this.styles[o])for(i=a;i=l&&(r[c-d]=r[u],delete r[u])}},shiftLineStyles:function(t,e){var i=b(this.styles);for(var r in this.styles){var n=parseInt(r,10);n>t&&(this.styles[n+e]=i[n],i[n-e]||delete this.styles[n])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(t,e,i,r){var n,s={},o=!1,a=this._unwrappedTextLines[t].length===e;for(var h in i||(i=1),this.shiftLineStyles(t,i),this.styles[t]&&(n=this.styles[t][0===e?e:e-1]),this.styles[t]){var l=parseInt(h,10);l>=e&&(o=!0,s[l-e]=this.styles[t][h],a&&0===e||delete this.styles[t][h])}var c=!1;for(o&&!a&&(this.styles[t+i]=s,c=!0),c&&i--;i>0;)r&&r[i-1]?this.styles[t+i]={0:b(r[i-1])}:n?this.styles[t+i]={0:b(n)}:delete this.styles[t+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(t,e,i,r){this.styles||(this.styles={});var n=this.styles[t],s=n?b(n):{};for(var o in i||(i=1),s){var a=parseInt(o,10);a>=e&&(n[a+i]=s[a],s[a-i]||delete n[a])}if(this._forceClearCache=!0,r)for(;i--;)Object.keys(r[i]).length&&(this.styles[t]||(this.styles[t]={}),this.styles[t][e+i]=b(r[i]));else if(n)for(var h=n[e?e-1:1];h&&i--;)this.styles[t][e+i]=b(h)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s),o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&this.styles[r.lineIndex+o]&&i[0]&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}}),x.util.object.extend(x.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(t){if(this.canvas){this.__newClickTime=+new Date;var e=t.pointer;this.isTripleClick(e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(t){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(t.e))},tripleClickHandler:function(t){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(t.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(t.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(t){if(this.__isMousedown=!1,!(!this.editable||this.group||t.transform&&t.transform.actionPerformed||t.e.button&&1!==t.e.button)){if(this.canvas){var e=this.canvas._activeObject;if(e&&e!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i=this.getLocalPointer(t),r=0,n=0,s=0,o=0,a=0,h=0,l=this._textLines.length;h0&&(o+=this._textLines[h-1].length+this.missingNewlineOffset(h-1));n=this._getLineLeftOffset(a)*this.scaleX,e=this._textLines[a],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+n);for(var c=0,u=e.length;cs||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),x.util.object.extend(x.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=x.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+t.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):x.document.body.appendChild(this.hiddenTextarea),x.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),x.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),x.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),x.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),x.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),x.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(x.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){var e="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(t.keyCode in e)this[e[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown)||!t.ctrlKey&&!t.metaKey)return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n,s,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,l=a.length,c=l-h,u=this.selectionStart,d=this.selectionEnd,f=u!==d;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),_=u>g.selectionStart;f?(i=this._text.slice(u,d),c+=d-u):l0&&(r+=(i=this.__charBounds[t][e-1]).left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o);return this._textLines[n].slice(s).length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s),l=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-h.length+(1-l)},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],s=this._getLineLeftOffset(t),o=0,a=0,h=n.length;ae){r=!0;var l=s-i,c=s,u=Math.abs(l-e);o=Math.abs(c-e)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,e.shiftKey?i+="Shift":i+="outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=x.util.string.graphemeSplit(t);this.insertNewStyleBlock(n,i,e),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var t=x.util.toFixed,e=/ +/g;x.util.object.extend(x.Text.prototype,{_toSVG:function(){var t=this._getSVGLeftTopOffsets(),e=this._getSVGTextAndBg(t.textTop,t.textLeft);return this._wrapSVGTextAndBg(e)},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t){var e=this.getSvgTextDecoration(this);return[t.textBgRects.join(""),'\t\t",t.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(t,e){var i,r=[],n=[],s=t;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",x.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,h,l=this.getHeightOfLine(e),c=-1!==this.textAlign.indexOf("justify"),u="",d=0,f=this._textLines[e];r+=l*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,_=f.length-1;g<=_;g++)h=g===_||this.charSpacing,u+=f[g],o=this.__charBounds[e][g],0===d?(i+=o.kernedWidth-o.width,d+=o.width):d+=o.kernedWidth,c&&!h&&this._reSpaceAndTab.test(f[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,g),s=this.getCompleteStyleDeclaration(e,g+1),h=this._hasStyleChangedForSvg(n,s)),h&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=d,d=0)},_pushTextBgRect:function(e,i,r,n,s,o){var a=x.Object.NUM_FRACTION_DIGITS;e.push("\t\t\n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,s,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,h=0,l=0,c=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,d=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},s=0;s0?(i=0,r++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:e,offset:i},r+=t.graphemeLines[s].length,i+=t.graphemeLines[s].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},isEmptyStyles:function(t){if(!this.styles)return!0;var e,i,r=0,n=!1,s=this._styleMap[t],o=this._styleMap[t+1];for(var a in s&&(t=s.line,r=s.offset),o&&(n=o.line===t,e=o.offset),i=void 0===t?this.styles:{line:this.styles[t]})for(var h in i[a])if(h>=r&&(!n||hr&&!p?(a.push(h),h=[],s=f,p=!0):s+=m,p||o||h.push(d),h=h.concat(c),g=o?0:this._measureWord([d],i,u),u++,p=!1,f>_&&(_=f);return v&&a.push(h),_+n>this.dynamicMinWidth&&(this.dynamicMinWidth=_-m+n),a},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},missingNewlineOffset:function(t){return this.splitByGrapheme?this.isEndOfWrapping(t)?1:0:1},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s{},898:()=>{},245:()=>{}},I={};function O(t){var e=I[t];if(void 0!==e)return e.exports;var i=I[t]={exports:{}};return E[t](i,i.exports,O),i.exports}O.d=(t,e)=>{for(var i in e)O.o(e,i)&&!O.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},O.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var R={};(()=>{let t;O.d(R,{R:()=>t}),t="undefined"!=typeof document&&"undefined"!=typeof window?O(653).fabric:{version:"5.2.1"}})();var D=R.R; /*! * Dynamsoft JavaScript Library * @product Dynamsoft Camera Enhancer JS Edition * @website https://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 3.3.8 (js 20231011) + * @version 3.3.9 (js 20231205) * @fileoverview Dynamsoft JavaScript Library for Camera Enhancer * More info on DCE JS: https://www.dynamsoft.com/camera-enhancer/docs/programming/javascript/?ver=latest - */const A="undefined"==typeof self;let M,F,L,P,k;if("undefined"!=typeof navigator&&(M=navigator,F=M.userAgent,L=M.platform,P=M.mediaDevices),!A){const t={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:M.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},e={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:L,search:"Win"},Mac:{str:L},Linux:{str:L}};let i="unknownBrowser",r=0,s="unknownOS";for(let e in t){const s=t[e]||{};let n=s.str||F,o=s.search||e,a=s.verStr||F,h=s.verSearch||e;if(h instanceof Array||(h=[h]),-1!=n.indexOf(o)){i=e;for(let t of h){let e=a.indexOf(t);if(-1!=e){r=parseFloat(a.substring(e+t.length+1));break}}break}}for(let t in e){const i=e[t]||{};let r=i.str||F,n=i.search||t;if(-1!=r.indexOf(n)){s=t;break}}"Linux"==s&&-1!=F.indexOf("Windows NT")&&(s="HarmonyOS"),k={browser:i,version:r,OS:s}}A&&(k={browser:"ssr",version:0,OS:"ssr"});const B="undefined"!=typeof WebAssembly&&F&&!(/Safari/.test(F)&&!/Chrome/.test(F)&&/\(.+\s11_2_([2-6]).*\)/.test(F)),N=!("undefined"==typeof Worker),j=!(!P||!P.getUserMedia),U=async()=>{let t=!1;if(j)try{(await P.getUserMedia({video:!0})).getTracks().forEach((t=>{t.stop()})),t=!0}catch(t){}return t};"Chrome"===k.browser&&k.version>66||"Safari"===k.browser&&k.version>13||"OPR"===k.browser&&k.version>43||"Edge"===k.browser&&k.version;const V=(()=>{if(!A&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"})();class G{constructor(t,e){this._zIndex=null,this._drawingLayer=null,this._drawingLayerId=null,this._mapStyle=new Map,this.mapEvent_Callbacks=new Map([["selected",new Map],["deselected",new Map],["mousedown",new Map],["mouseup",new Map],["dblclick",new Map],["mouseover",new Map],["mouseout",new Map]]),this.mapNoteName_Content=new Map([]),this.isDrawingItem=!0,this._setFabricObject(t),this._mediaType=t.type,this.styleSelector="default",this.styleId=e}get mediaType(){return this._mediaType}get drawingLayerId(){return this._drawingLayerId}_setFabricObject(t){this._fabricObject=t,this._fabricObject.on("selected",(()=>{this.styleSelector="selected"})),this._fabricObject.on("deselected",(()=>{this._fabricObject.canvas&&this._fabricObject.canvas.getActiveObjects().includes(this._fabricObject)?this.styleSelector="selected":this.styleSelector="default","textbox"===this._fabricObject.type&&(this._fabricObject.isEditing&&this._fabricObject.exitEditing(),this._fabricObject.selected=!1)})),t.getDrawingItem=()=>this}_getFabricObject(){return this._fabricObject}_on(t,e){if(!e)return;const i=t.toLowerCase(),r=this.mapEvent_Callbacks.get(i);if(!r)throw new Error(`Event '${t}' does not exist.`);let s=r.get(e);s||(s=t=>{const i=t.e;if(!i)return void(e&&e.apply(this,[{targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null}]));const r={targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null};if(this._drawingLayer){let t,e,s,n;const o=i.target.getBoundingClientRect();t=o.left,e=o.top,s=t+window.scrollX,n=e+window.scrollY;const a=this._drawingLayer.fabricCanvas.lowerCanvasEl.width,h=this._drawingLayer.fabricCanvas.lowerCanvasEl.height,l=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).width),c=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).height),u=l/c,d=a/h,f=this._drawingLayer._getObjectFit();let g,_,p,m,v=1;if("contain"===f)u0?i-1:r,Y),actionName:"modifyPolygon",pointIndex:i}),t}),{})}_extendSet(t,e){if("vertices"===t){const t=this._fabricObject;if(t.group){const i=t.group;t.points=e.map((t=>({x:t.x-i.left-i.width/2,y:t.y-i.top-i.height/2}))),i.addWithUpdate()}else t.points=e;const i=t.points.length-1;return t.controls=t.points.reduce((function(t,e,r){return t["p"+r]=new D.Control({positionHandler:W,actionHandler:X(r>0?r-1:i,Y),actionName:"modifyPolygon",pointIndex:r}),t}),{}),t._setPositionDimensions({}),!0}}_extendGet(t){if("vertices"===t){const t=[],e=this._fabricObject;if(e.selectable&&!e.group)for(let i in e.oCoords)t.push({x:e.oCoords[i].x,y:e.oCoords[i].y});else for(let i of e.points){let r=i.x-e.pathOffset.x,s=i.y-e.pathOffset.y;const n=D.util.transformPoint({x:r,y:s},e.calcTransformMatrix());t.push({x:n.x,y:n.y})}return t}}}const Z=t=>{let e=(t=>t.split("\n").map((t=>t.split("\t"))))(t);return(t=>{for(let e=0;;e++){let i=-1;for(let r=0;ri&&(i=s.length)}if(-1===i)break;for(let r=0;r=t[r].length-1)continue;let s=" ".repeat(i+2-t[r][e].length);t[r][e]=t[r][e].concat(s)}}})(e),(t=>{let e="";for(let i=0;im?(g=d,_=d/p,{x:s.x*i.width,y:(s.y-(f-_)/2)*i.width}):(g=f*p,_=f,{x:(s.x-(d-g)/2)*i.height,y:s.y*i.height}):"cover"===l?p>m?{x:(c-i.height*d)/2+s.x*i.height,y:s.y*i.height}:{x:s.x*i.width,y:(u-i.width*f)/2+s.y*i.width}:{x:s.x*i.width,y:s.y*i.height}}return i={width:1,height:1},{x:s.x*i.width,y:s.y*i.height}},D.Canvas.prototype._onTouchStart=function(t){var e=this.findTarget(t);!this.allowTouchScrolling&&t.cancelable&&t.preventDefault&&t.preventDefault(),e&&t.cancelable&&t.preventDefault&&t.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(t)),this.__onMouseDown(t),this._resetTransformEventData();var i=this.upperCanvasEl,r=this._getEventPrefix();D.util.addListener(D.document,"touchend",this._onTouchEnd,{passive:!1}),D.util.addListener(D.document,"touchmove",this._onMouseMove,{passive:!1}),D.util.removeListener(i,r+"down",this._onMouseDown)},D.Textbox.prototype._wrapLine=function(t,e,i,r){const s=t.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/g),n=!(!s||!s.length);var o=0,a=this.splitByGrapheme||n,h=[],l=[],c=a?D.util.string.graphemeSplit(t):t.split(this._wordJoiners),u="",d=0,f=a?"":" ",g=0,_=0,p=0,m=!0,v=this._getWidthOfCharSpacing();r=r||0,0===c.length&&c.push([]),i-=r;for(var y=0;yi&&!m?(h.push(l),l=[],o=g,m=!0):o+=v,m||a||l.push(f),l=l.concat(u),_=a?0:this._measureWord([f],e,d),d++,m=!1,g>p&&(p=g);return y&&h.push(l),p+r>this.dynamicMinWidth&&(this.dynamicMinWidth=p-v+r),h});class K{constructor(t,e,i,r){let s,n;switch(this.mapMediaType_Style=new Map,this.mode="viewer",this.onSelectionChange=null,this._arrDrwaingItem=[],this._arrFabricObject=[],this._visible=!0,t.hasOwnProperty("getFabricCanvas")?this.fabricCanvas=t.getFabricCanvas():(this.fabricCanvas=new D.Canvas(t,Object.assign(r,{allowTouchScrolling:!0})),this.fabricCanvas.setDimensions({width:"100%",height:"100%"},{cssOnly:!0}),this.fabricCanvas.lowerCanvasEl.className="",this.fabricCanvas.upperCanvasEl.className="",this.fabricCanvas.on("selection:created",(function(t){const e=t.selected,i=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!i.includes(e)&&i.push(e)}for(let t of i){const i=[];for(let r of e){const e=r.getDrawingItem();e._drawingLayer===t&&i.push(e)}setTimeout((()=>{t.onSelectionChange&&t.onSelectionChange(i,[])}),0)}})),this.fabricCanvas.on("before:selection:cleared",(function(t){const e=this.getActiveObjects(),i=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!i.includes(e)&&i.push(e)}for(let t of i){const i=[];for(let r of e){const e=r.getDrawingItem();e._drawingLayer===t&&i.push(e)}setTimeout((()=>{const e=[];for(let r of i)t.hasDrawingItem(r)&&e.push(r);e.length>0&&t.onSelectionChange&&t.onSelectionChange([],e)}),0)}})),this.fabricCanvas.on("selection:updated",(function(t){const e=t.selected,i=t.deselected,r=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!r.includes(e)&&r.push(e)}for(let t of i){const e=t.getDrawingItem()._drawingLayer;e&&!r.includes(e)&&r.push(e)}for(let t of r){const r=[],s=[];for(let i of e){const e=i.getDrawingItem();e._drawingLayer===t&&r.push(e)}for(let e of i){const i=e.getDrawingItem();i._drawingLayer===t&&s.push(i)}setTimeout((()=>{t.onSelectionChange&&t.onSelectionChange(r,s)}),0)}})),this.fabricCanvas.wrapperEl.style.position="absolute",t.getFabricCanvas=()=>this.fabricCanvas),this.id=e,this._mapDrawingStyles=i,e){case 1:s=i.get(1),n=i.get(5);break;case 2:s=i.get(2),n=i.get(6);break;case 3:s=i.get(3),n=i.get(7);break;default:s=i.get(4),n=i.get(8)}for(let t of G.arrMediaTypes)this.mapMediaType_Style.set(t,{default:s,selected:n})}getId(){return this.id}_getDrawingStyle(t,e){if("number"!=typeof t)throw new Error("Invalid style id.");const i=this._mapDrawingStyles.get(t);return i?e?JSON.parse(JSON.stringify(i)):i:null}setVisible(t){if(t){for(let t of this._arrFabricObject)t.visible=!0;this._visible=!0}else{for(let t of this._arrFabricObject)t.visible=!1;this._visible=!1}this.fabricCanvas.renderAll()}isVisible(){return this._visible}_getItemCurrentStyleId(t){return t.styleId?t.styleId:this.mapMediaType_Style.get(t._mediaType)[t.styleSelector].styleId}_getItemCurrentStyle(t){if(t.styleId)return this._getDrawingStyle(t.styleId);return t._mapStyle.get(t.styleSelector)||null}_changeMediaTypeCurStyleInStyleSelector(t,e,i,r){let s;switch(t){case"rect":s=this.fabricCanvas.getObjects("rect");break;case"arc":s=this.fabricCanvas.getObjects("circle");break;case"polygon":s=this.fabricCanvas.getObjects("polygon");break;case"image":s=this.fabricCanvas.getObjects("image");break;case"text":s=this.fabricCanvas.getObjects("textbox");break;case"line":s=this.fabricCanvas.getObjects("line");break;case"path":s=this.fabricCanvas.getObjects("path")}for(let t of s){if(!this._arrFabricObject.includes(t))continue;const r=t.getDrawingItem();r.styleSelector===e&&this._changeItemStyle(r,i,!0)}r||this.fabricCanvas.renderAll()}_changeItemStyle(t,e,i){if(!t||!e)return;const r=t._getFabricObject();"number"==typeof t.styleId&&(e=this._getDrawingStyle(t.styleId)),r.strokeWidth=e.lineWidth,"fill"===e.paintMode?(r.fill=e.fillStyle,r.stroke=e.fillStyle):"stroke"===e.paintMode?(r.fill="transparent",r.stroke=e.strokeStyle):"strokeAndFill"===e.paintMode&&(r.fill=e.fillStyle,r.stroke=e.strokeStyle),r.fontFamily&&(r.fontFamily=e.fontFamily),r.fontSize&&(r.fontSize=e.fontSize),r.group||(r.dirty=!0),i||this.fabricCanvas.renderAll()}_updateGroupItem(t,e,i){if(!t||!e)return;const r=t.getChildItems();if("add"===i){if(r.includes(e))return;const i=e._getFabricObject();if(this.fabricCanvas.getObjects().includes(i)){if(!this._arrFabricObject.includes(i))throw new Error("Existed in other drawing layers.");e._zIndex=null}else{let i;if(e.styleId)i=this._getDrawingStyle(e.styleId);else{i=this.mapMediaType_Style.get(e._mediaType)[t.styleSelector];const r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected,!0)},s=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default,!0)};e._on("selected",r),e._on("deselected",s),e._funcChangeStyleToSelected=r,e._funcChangeStyleToDefault=s}e._drawingLayer=this,e._drawingLayerId=this.id,this._changeItemStyle(e,i,!0)}t._fabricObject.addWithUpdate(e._getFabricObject())}else{if("remove"!==i)return;if(!r.includes(e))return;e._zIndex=null,e._drawingLayer=null,e._drawingLayerId=null,e._off("selected",e._funcChangeStyleToSelected),e._off("deselected",e._funcChangeStyleToDefault),e._funcChangeStyleToSelected=null,e._funcChangeStyleToDefault=null,t._fabricObject.removeWithUpdate(e._getFabricObject())}this.fabricCanvas.renderAll()}_addDrawingItem(t,e){let i=t._getFabricObject();const r=this.fabricCanvas.getObjects();let s,n;if(r.includes(i)){if(this._arrFabricObject.includes(i))return;throw new Error("Existed in other drawing layers.")}if("group"===t._mediaType){s=t.getChildItems();for(let t of s)if(t._drawingLayer&&t._drawingLayer!==this)throw new Error("The childItems of DT_Group have existed in other drawing layers.")}if(e&&"object"==typeof e&&!Array.isArray(e))for(let t in e)i.set(t,e[t]);if(s){for(let t of s){const e=this.mapMediaType_Style.get(t._mediaType);for(let i of G.arrStyleSelectors)t._mapStyle.set(i,e[i]);if(t.styleId)n=this._getDrawingStyle(t.styleId);else{n=e.default;const i=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected,!0)},r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default,!0)};t._on("selected",i),t._on("deselected",r),t._funcChangeStyleToSelected=i,t._funcChangeStyleToDefault=r}t._drawingLayer=this,t._drawingLayerId=this.id,this._changeItemStyle(t,n,!0)}i.dirty=!0,this.fabricCanvas.renderAll()}else{const e=this.mapMediaType_Style.get(t._mediaType);for(let i of G.arrStyleSelectors)t._mapStyle.set(i,e[i]);if(t.styleId)n=this._getDrawingStyle(t.styleId);else{n=e.default;const i=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected)},r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default)};t._on("selected",i),t._on("deselected",r),t._funcChangeStyleToSelected=i,t._funcChangeStyleToDefault=r}this._changeItemStyle(t,n)}t._zIndex=this.id,t._drawingLayer=this,t._drawingLayerId=this.id;const o=this._arrFabricObject.length;let a=r.length;if(o)a=r.indexOf(this._arrFabricObject[o-1])+1;else for(let e=0;e{for(let e of this._arrDrawingLayer)if(e.getId()===t)return!0;return!1};if(void 0===e){for(let t=100;;t++)if(!i(t)){e=t;break}}else if(i(e))throw new Error("Existed drawing layer id.");const r=new K(t,e,this._mapDrawingStyles,{enableRetinaScaling:!1});return r._manager=this,this._arrDrawingLayer.push(r),this._switchPointerEvent(),r}deleteDrawingLayer(t){const e=this.getDrawingLayer(t);if(!e)return;const i=this._arrDrawingLayer;e.dispose(),i.splice(i.indexOf(e),1),this._switchPointerEvent()}clearDrawingLayers(){for(let t of this._arrDrawingLayer)t.dispose();this._arrDrawingLayer.length=0}getDrawingLayer(t){for(let e of this._arrDrawingLayer)if(e.getId()===t)return e;return null}getDrawingLayers(){return Array.from(this._arrDrawingLayer)}getSelectedDrawingItems(){if(!this._arrDrawingLayer.length)return;const t=this._arrDrawingLayer[0].fabricCanvas.getActiveObjects(),e=[];for(let i of t)e.push(i.getDrawingItem());return e}setDimensions(t,e){this._arrDrawingLayer.length&&this._arrDrawingLayer[0]._setDimensions(t,e)}setObjectFit(t){for(let e of this._arrDrawingLayer)e&&e._setObjectFit(t)}getObjectFit(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0]._getObjectFit():null}setVisible(t){this._arrDrawingLayer.length&&(this._arrDrawingLayer[0].fabricCanvas.wrapperEl.style.display=t?"block":"none")}_switchPointerEvent(){if(this._arrDrawingLayer.length)for(let t of this._arrDrawingLayer)t.getMode()}}class Q{constructor(t){this._controlTarget=null,this._arrUsers=[],this._mapAction_UserArgs=new Map,this._mapProperty_UserValue=new Map,this._mapAction_Callbacks=new Map,this._controlTarget=t}setControlTarget(t){this._controlTarget=t}getControlTarget(){return this._controlTarget}register(t){this._arrUsers.includes(t)||this._arrUsers.push(t)}logout(t){const e=this._arrUsers.indexOf(t);-1!==e&&(this.clearUserDisiredAction({user:t}),this.clearUserDisiredValue({user:t}),this._arrUsers.splice(e,1))}getRegisteredUsers(){return this._arrUsers}ifUserExisted(t){return this._arrUsers.includes(t)}setDisiredValue(t,e,i,r){if(!this._arrUsers.includes(t))throw new Error("Unregistered user.");r&&(this._controlTarget[e]=i),this._mapProperty_UserValue.get(e)?this._mapProperty_UserValue.get(e).set(t,i):this._mapProperty_UserValue.set(e,new Map([[t,i]]))}clearUserDisiredValue(t){if(t&&(t.user||t.property)){if(t.property&&t.user){const e=this._mapProperty_UserValue.get(t.property);if(!e)return;e.delete(t.user)}else if(t.property)this._mapProperty_UserValue.delete(t.property);else if(t.user)for(let e of this._mapProperty_UserValue.values())e.delete(t.user)}else this._mapProperty_UserValue=new Map}getValue(t){if(!this._controlTarget)throw new Error("Control target is not set.");return this._controlTarget[t]}getPropertyDisiredValue(t){if(this._mapProperty_UserValue.get(t)){const e=[],i=this._mapProperty_UserValue.get(t);for(let t of i.values())e.push(t);return e}return null}setDisiredAction(t,e,i,r){if(!this._arrUsers.includes(t))throw new Error("Unregistered user.");return i||(i=[]),r?this._controlTarget[e](...i):(this._mapAction_UserArgs.get(e)?this._mapAction_UserArgs.get(e).set(t,i):this._mapAction_UserArgs.set(e,new Map([[t,i]])),this._render(e))}clearUserDisiredAction(t){if(t&&(t.user||t.actionName)){if(t.actionName&&t.user){const e=this._mapAction_UserArgs.get(t.actionName);if(!e)return;e.delete(t.user)}else if(t.actionName)this._mapAction_UserArgs.delete(t.actionName);else if(t.user)for(let e of this._mapAction_UserArgs.values())e.delete(t.user);this.render()}else this._mapAction_UserArgs=new Map}addCallback(t,e){const i=this._mapAction_Callbacks.get(t);i?i.push(e):this._mapAction_Callbacks.set(t,[e])}removeCallback(t,e){const i=this._mapAction_Callbacks.get(t);if(!i)return;const r=i.indexOf(e);-1!==r&&i.splice(r,1)}clearCallback(t){t?this._mapAction_Callbacks.delete(t):this._mapAction_Callbacks.clear()}_fireCallback(t){const e=this._mapAction_Callbacks.get(t);if(e)for(let t of e){if(!t)return;setTimeout(t.bind(this._controlTarget),0)}}_render(t){const e=this._mapAction_UserArgs.get(t);if(!e)throw new Error("Unrecorded action.");if(e.size===this._arrUsers.length){let i=[];for(let t of e.values())t.length>0&&(i=t);if(this._controlTarget[t]){const e=this._controlTarget[t](...i);return this._mapAction_UserArgs.delete(t),this._fireCallback(t),e}}}render(t){if(t)return this._render(t);for(let t of this._mapAction_UserArgs.keys())this._render(t)}}class ${static multiply(t,e){const i=[];for(let r=0;r<3;r++){const s=e.slice(3*r,3*r+3);for(let e=0;e<3;e++){const r=[t[e],t[e+3],t[e+6]].reduce(((t,e,i)=>t+e*s[i]),0);i.push(r)}}return i}static identity(){return[1,0,0,0,1,0,0,0,1]}static translate(t,e,i){return $.multiply(t,[1,0,0,0,1,0,e,i,1])}static rotate(t,e){var i=Math.cos(e),r=Math.sin(e);return $.multiply(t,[i,-r,0,r,i,0,0,0,1])}static scale(t,e,i){return $.multiply(t,[e,0,0,0,i,0,0,0,1])}}var tt;!function(t){t.GREY="grey",t.GREY32="grey32",t.RGBA="rgba",t.RBGA="rbga",t.GRBA="grba",t.GBRA="gbra",t.BRGA="brga",t.BGRA="bgra"}(tt||(tt={}));const et=(t,e,i,r)=>{let s=e+Math.round((t-e)/i)*i;return r&&(s=Math.min(s,r)),s};class it{constructor(){this._maxCvsSideLength=void 0,this._defaultMaxCvsSideLength=null,this._predefinedResolutions=[{width:160,height:120},{width:320,height:240},{width:480,height:360},{width:640,height:480},{width:800,height:600},{width:960,height:720},{width:1280,height:720},{width:1920,height:1080},{width:2560,height:1440},{width:3840,height:2160}],this._mapCameraResolutions=new Map,this._bWebGLSupported=!0,this.extraBindings=[],this._cvsSingleFrameMode=null,this._cvsOriginalImage=null,this._imgWidth=0,this._imgHeight=0,this._singleFrameInputContainer=null,this._clickIptSingleFrameMode=()=>{if(!this._isSingleFrameModeEnabled())return;if(this.getDrawingLayers().some((t=>"editor"==t.getMode())))return;let t;if(this._singleFrameInputContainer)t=this._singleFrameInputContainer.firstElementChild;else{t=document.createElement("input"),t.setAttribute("type","file"),"camera"===this.singleFrameMode?(t.setAttribute("capture",""),t.setAttribute("accept","image/*")):1!=this.singleFrameMode&&"image"!==this.singleFrameMode||(t.removeAttribute("capture"),t.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp")),t.addEventListener("change",(async()=>{const e=t.files[0];t.value="";const i=await(async t=>{let e=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(e=await createImageBitmap(t),e)return e}catch(t){}var r;return e||(i=await(r=t,new Promise(((t,e)=>{let i=URL.createObjectURL(r),s=new Image;s.dbrObjUrl=i,s.src=i,s.onload=()=>{t(s)},s.onerror=t=>{e(new Error("Can't convert blob to image : "+(t instanceof Event?t.type:t)))}})))),i})(e),r=i instanceof HTMLImageElement?i.naturalWidth:i.width,s=i instanceof HTMLImageElement?i.naturalHeight:i.height;this._imgWidth=r,this._imgHeight=s;const n=t=>{const e=Date.now();if(0===r||0===s)return null;if(t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");const i=this._scanRegion,n=this.getFrameSize(r,s,i,this.maxCvsSideLength);if(!n)return null;let o=!0;r===n.sWidth&&s===n.sHeight&&(o=!1);const a=this.mapPixelFormatString_Enum.get(this.framePixelFormat.toLowerCase()),h={data:null,region:i?JSON.parse(JSON.stringify(i)):null,sx:n.sx,sy:n.sy,width:n.dWidth,height:n.dHeight,colorMode:null,pixelFormat:null,timeSpent:null,timeStamp:null,isCropped:o,toCanvas:this._toCanvas,_sWidth:n.sWidth,_sHeight:n.sHeight,_bUseWebGL:null},l=this._getImageData(t,r,s,n,null,{pixelFormat:a});if(!l)return null;const c=Date.now();return h.data=l.data,h.pixelFormat=h.colorMode=l.pixelFormat,h._bUseWebGL=l._bUseWebGL,h.timeSpent=c-e,h.timeStamp=c,l.pixelFormat===tt.GREY?h.stride=h.width:h.stride=4*h.width,h};(t=>{let e=this._cvsSingleFrameMode;if(!e){if(e=document.createElement("canvas"),!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e),e.style.position="absolute",e.style.width="100%",e.style.height="100%",e.style.left="0",e.style.top="0",e.style.objectFit="contain",e.style.pointerEvents="none",this._cvsSingleFrameMode=e}e.width==r&&e.height==s||(e.width=r,e.height=s);const i=e.getContext("2d");i.clearRect(0,0,e.width,e.height),i.drawImage(t,0,0)})(i),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t);let o;this._updateDrawingLayersSize();try{o=n(i)}catch(t){throw t}const a=this.mapCameraEvents.get("singleframeacquired");for(let t of a)if(t)try{const e={data:new Uint8Array(o.data),region:JSON.parse(JSON.stringify(o.region)),sx:o.sx,sy:o.sy,width:o.width,height:o.height,stride:o.stride,colorMode:o.colorMode,pixelFormat:o.pixelFormat,timeSpent:o.timeSpent,timeStamp:o.timeStamp,isCropped:o.isCropped,toCanvas:o.toCanvas,_sWidth:o._sWidth,_sHeight:o._sHeight,_bUseWebGL:o._bUseWebGL};await t.apply(this,[e])}catch(t){console.error(t)}})),t.style.position="absolute",t.style.top="-9999px",t.style.backgroundColor="transparent",t.style.color="transparent";const e=document.createElement("div");e.append(t),e.style.position="absolute",e.style.width="1px",e.style.height="1px",e.style.overflow="hidden",e.style.pointerEvents="none",this._elContainer.prepend(e),this._singleFrameInputContainer=e}null==t||t.click()},this.styleEls=[],this._framePixelFormat=void 0,this._defaultFramePixelFormat="rgba",this.mapPixelFormatString_Enum=new Map([["grey",tt.GREY],["grey32",tt.GREY32],["rgba",tt.RGBA],["rbga",tt.RBGA],["grba",tt.GRBA],["gbra",tt.GBRA],["brga",tt.BRGA],["bgra",tt.BGRA]]),this.shaderPixelFormat=tt.RGBA,this.maxVideoCvsLength=3,this._reusedCvs=null,this._reusedWebGLCvs=null,this._tempDataContainer=null,this._webGLTexture=null,this._webGLProgramInfo=null,this._webGLBuffers=null,this._softwareScale=1,this._scaleCenter={x:0,y:0},this._focusParameters={maxTimeout:400,minTimeout:300,kTimeout:void 0,oldDistance:null,fds:null,isDoingFocus:0,taskBackToContinous:null,curFocusTaskId:0,focusCancelableTime:1500,defaultFocusAreaSizeRatio:6,focusBackToContinousTime:5e3,tapFocusMinDistance:null,tapFocusMaxDistance:null,_focusArea:null},this._tapFocusEnabled=!0,this._focusSupported=!0,this._tapDoFocus=async t=>{if(this._touchMoved)return void(this._touchMoved=!1);if(!this._tapFocusEnabled)return;if(!this._bOpen)return;if(this._isSingleFrameModeEnabled())return;if(!this._video||this._video.paused)return;if(!this._videoTrack)return;if(!this._focusSupported)return;if(this.getDrawingLayers().some((t=>"editor"==t.getMode())))return;if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))return void(this._focusSupported=!1);if(null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),1==this._focusParameters.isDoingFocus)return;let e,i,r,s;if(this._focusParameters.taskBackToContinous&&(clearTimeout(this._focusParameters.taskBackToContinous),this._focusParameters.taskBackToContinous=null),t instanceof MouseEvent)e=t.clientX,i=t.clientY;else{if(!(t instanceof TouchEvent))throw new Error("Unknown event type.");if(!t.changedTouches.length)return;e=t.changedTouches[0].clientX,i=t.changedTouches[0].clientY}const n=this.getVideoFit(),o=this._video.videoWidth,a=this._video.videoHeight,h=this._elContainer.getBoundingClientRect(),l=h.left,c=h.top,u=window.getComputedStyle(this._elContainer),d=parseFloat(u.width),f=parseFloat(u.height),g=d/f,_=o/a;let p=1;if("contain"===n)_>g?(p=d/o,r=(e-l)/p,s=(i-c-(f-d/_)/2)/p):(p=f/a,s=(i-c)/p,r=(e-l-(d-f*_)/2)/p);else{if("cover"!==n)throw new Error("Unsupported object-fit.");_>g?(p=f/a,s=(i-c)/p,r=(e-l+(f*_-d)/2)/p):(p=d/o,r=(e-l)/p,s=(i-c+(d/_-f)/2)/p)}const m={x:r+"px",y:s+"px"},v=2*Math.round(Math.min(o,a)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px",y=v;await this._setLocalFocus(m,v,y,this._focusParameters.tapFocusMinDistance,this._focusParameters.tapFocusMaxDistance),this._focusParameters.taskBackToContinous=setTimeout((()=>{this._videoTrack&&this._videoTrack.applyConstraints({advanced:[{focusMode:"continuous"}]}).catch((()=>{}))}),this._focusParameters.focusBackToContinousTime)},this._touchMoved=!1,this._touchMoveEvent=()=>{this._touchMoved=!0},this._recordedStates={},this.playCallbackInfo=null,this._toCanvas=function(){const t=document.createElement("canvas");let e;if(t.width=this.width,t.height=this.height,"grey"===(this.pixelFormat||this.colorMode)){e=new Uint8ClampedArray(this.width*this.height*4);for(let t=0;t{await this.selectCamera(this._selCam.value),this._bOpen||this.stop()},this._onResolutionSelChange=async()=>{let t,e;if(this._selRsl&&-1!=this._selRsl.selectedIndex){let i=this._selRsl.options[this._selRsl.selectedIndex];t=i.getAttribute("data-width"),e=i.getAttribute("data-height")}await this.setResolution(t,e),this._bOpen||this.stop()},this._onCloseBtnClick=()=>{this.close(!0)},this._bOpen=!1,this.isCameraEnhancer=!0,this.isDisposed=!1,this.disposed=!1,this.videoSrc=null,this.videoSettings={video:{width:{ideal:1280},height:{ideal:720},facingMode:{ideal:"environment"}}},this.iPlayRound=0,this.promisePlay=null,this._ifSaveLastUsedCamera=!1,this.ifSkipCameraInspection=!1,this._allCameras=[],this._currentCamera=null,this._videoTrack=null,this._lastDeviceId=void 0,this._vc_bPlayingVideoBeforeHide=!1,this._ev_documentHideEvent=()=>{if(!this._isSingleFrameModeEnabled())if("visible"===document.visibilityState){if(this._bOpen&&this._vc_bPlayingVideoBeforeHide)if(this.videoSrc)this._video.play();else if(this._video.srcObject){const t=this._video.srcObject.getTracks()[0];this._video.srcObject.active&&t&&!t.muted?this._video.play():this.play()}}else"hidden"===document.visibilityState&&(["iPhone","iPad","Mac"].includes(k.OS)?(this._vc_bPlayingVideoBeforeHide=!0,this._video&&this._video.pause()):this._video&&!this._video.paused?(this._vc_bPlayingVideoBeforeHide=!0,this._video.pause()):this._vc_bPlayingVideoBeforeHide=!1)},this.containerClassName="dce-video-container",this._elContainer=null,this._videoContainer=null,this._video=null,this.videoFit="contain",this._cvsScanRegion=null,this._divScanArea=null,this._divScanLight=null,this._bgLoading=null,this._selCam=null,this._bgCamera=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this.regionMaskFillStyle="rgba(0,0,0,0.5)",this.regionMaskStrokeStyle="rgb(254,142,20)",this.regionMaskLineWidth=2,this._bShowScanRegionMask=!0,this._bShowScanRegionLaser=void 0,this._defaultBShowScanRegionLaser=!1,this._scanRegion=null,this._arrScanRegionOverlays=[],this._layerBaseCvs=null,this._drawingLayerOfTip=null,this._tipArgs={x:void 0,y:void 0,width:void 0,duration:void 0,autoShowSuggestedTip:void 0},this._hideTipTimeoutId=null,this.onTipSuggested=null,this._cvsViewDecorator=null,this._decoratorType=[],this._decoratorArea=null,this._viewDecoratorInfo={rectangle:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},focus:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},crossline:{lineWidth:2,strokeStyle:"rgb(254,142,20)"},crosshair:{lineWidth:4,strokeStyle:"rgb(254,142,20)"}},this._croppingRegions=void 0,this._defaultCroppingRegions=[null],this.bIncreaseRegionIndexAuto=!0,this._croppingRegionIndex=0,this._loopInterval=void 0,this._defaultLoopInterval=0,this._maxNumberOfFramesInBuffer=void 0,this._defaultMaxNumberOfFramesInBuffer=1,this._frameQueue=[],this._bFetchingLoopStarted=!1,this._refreshInterval=void 0,this._defaultRefreshInterval=-1,this._updateLayersTimeout=500,this._updateLayers=()=>{this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none");for(let t of this._arrScanRegionOverlays)t&&(t.style.display="none");this._resizeTimeoutId&&clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout((()=>{if(!this.isDisposed||!this.disposed){this.ifShowScanRegionMask&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this.showScanRegionLaser(),this._cvsViewDecorator&&this.showViewDecorator(),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&(t.style.display="",this._updateScanRegionOverlay(t));this._updateDrawingLayersSize(),this._updateVideoContainerStyle()}}),this._updateLayersTimeout)},this._windowResizeListener=()=>{this._windowWidth!==document.documentElement.clientWidth&&(this._windowWidth=document.documentElement.clientWidth,this._updateLayers())},this.mapCameraEvents=new Map([["cameraopen",[]],["cameraclose",[]],["camerachange",[]],["resolutionchange",[]],["played",[]],["singleframeacquired",[]],["frameaddedtobuffer",[]]]),this._controler=null,navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia?this._singleFrameMode=!1:this._singleFrameMode=!0}static getVersion(){return this._version}static async detectEnvironment(){return await(async()=>({wasm:B,worker:N,getUserMedia:j,camera:await U(),browser:k.browser,version:k.version,OS:k.OS}))()}static set engineResourcePath(t){if(this._hasEngineResourceLoaded)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` is called.");it._engineResourcePath=(t=>{if(null==t&&(t="./"),!A){let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(t)}static get engineResourcePath(){return this._engineResourcePath}static isStorageAvailable(t){let e;try{e=window[t];const i="__storage_test__";return e.setItem(i,i),e.removeItem(i),!0}catch(t){return t instanceof DOMException&&(22===t.code||1014===t.code||"QuotaExceededError"===t.name||"NS_ERROR_DOM_QUOTA_REACHED"===t.name)&&e&&0!==e.length}}static isDCEFrame(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&"data"in t&&"region"in t&&"sx"in t&&"sy"in t&&"width"in t&&"height"in t&&("colorMode"in t||"pixelFormat"in t)&&"timeSpent"in t&&"timeStamp"in t&&"isCropped"in t&&"toCanvas"in t&&"_sWidth"in t&&"_sHeight"in t&&"_bUseWebGL"in t}static async testCameraAccess(){try{if(!navigator||!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return{ok:!1,message:"Insecure context."};(await navigator.mediaDevices.getUserMedia({video:!0})).getTracks().forEach((t=>{t.stop()}))}catch(t){if("OverconstrainedError"===t.name||"NotFoundError"===t.name)return{ok:!1,message:"No camera detected."};if("NotAllowedError"===t.name)return{ok:!1,message:"No permission to access camera."};if("AbortError"===t.name)return{ok:!1,message:"Some problem occurred which prevented the device from being used."};if("NotReadableError"===t.name)return{ok:!1,message:"A hardware error occurred."};if("SecurityError"===t.name)return{ok:!1,message:"User media support is disabled."};throw t}return{ok:!0,message:"Successfully accessed the camera."}}set maxCvsSideLength(t){if(t<=0)throw new Error("Invalid value.");this._maxCvsSideLength=t}get maxCvsSideLength(){if(void 0!==this._maxCvsSideLength)return this._maxCvsSideLength;if(this._controler){const t=this._controler.getPropertyDisiredValue("maxCvsSideLength");if(t&&1===t.length)return t[0]}return this._defaultMaxCvsSideLength}static set defaultUIElementURL(t){it._defaultUIElementURL=t}static get defaultUIElementURL(){var t;return null===(t=it._defaultUIElementURL)||void 0===t?void 0:t.replace("@engineResourcePath/",it.engineResourcePath)}getUIElement(){return this.UIElement}async setUIElement(t){if(this._bOpen)throw new Error("It is not allowed to change the UIElement when the camera is open.");if("string"==typeof t||t instanceof String){if(!t.trim().startsWith("<")){let e=await fetch(t);if(!e.ok)throw Error("setUIElement(elementOrUrl): Network Error: "+e.statusText);t=await e.text()}if(!t.trim().startsWith("<"))throw Error("setUIElement(elementOrUrl): Can't get valid HTMLElement.");let e=document.createElement("div");e.innerHTML=t;for(let t=0;t100||t.regionTop>100||t.regionRight>100||t.regionBottom>100)))}set scanRegion(t){if(!this._checkValidRegion(t))throw new Error("Invalid region.");this._scanRegion=JSON.parse(JSON.stringify(t)),this._updateScanRegionCanvas(),this._updateScanAreaDiv();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t)}setScanRegion(t){this.scanRegion=t}getScanRegion(){return JSON.parse(JSON.stringify(this._scanRegion))}_calculateCvsSize(){var t,e;let i,r,s;if(this._isSingleFrameModeEnabled()?(i=this._imgWidth,r=this._imgHeight,s="contain"):(i=null===(t=this._video)||void 0===t?void 0:t.videoWidth,r=null===(e=this._video)||void 0===e?void 0:e.videoHeight,s=this.getVideoFit()),!i||!r)throw new Error("Invalid content dimensions.");return{width:i,height:r,objectFit:s}}addScanRegionOverlayCanvas(){this._assertOpen();const t=document.createElement("canvas");if(this._updateScanRegionOverlay(t),!this._scanRegionOverlayContainer){const t=document.createElement("div");if(this._scanRegionOverlayContainer=t,t.style.position="absolute",t.style.left="0",t.style.top="0",t.style.width="100%",t.style.height="100%",t.style.overflow="hidden",t.style.pointerEvents="none",this._layerBaseCvs)this._layerBaseCvs.parentElement.after(t);else if(this._cvsScanRegion)this._cvsScanRegion.after(t);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(t);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(t);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t)}this._recordedStates.overlayShow=!0}return this._scanRegionOverlayContainer.append(t),this._arrScanRegionOverlays.push(t),t}removeScanRegionOverlayCanvas(t){const e=this._arrScanRegionOverlays.indexOf(t);-1!==e&&(t.remove(),this._arrScanRegionOverlays.splice(e,1))}_updateScanRegionOverlay(t){if(!t)return;let e;try{e=this._calculateCvsSize()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}const{width:i,height:r,objectFit:s}=e;if(i<=0||r<=0)return t.width=0,void(t.height=0);const n=this._getRegionInPixels(i,r,this._scanRegion),o=this.getFrameSize(i,r,this._scanRegion,this.maxCvsSideLength),a=o.dWidth,h=o.dHeight;t.width==a&&t.height==h||(t.width=a,t.height=h);const l=window.getComputedStyle(this._elContainer),c=parseFloat(l.width),u=parseFloat(l.height),d=c/u,f=i/r;let g,_,p,m,v=1;"contain"===s?(f>d?(v=c/i,g=0,_=(u-r*v)/2):(v=u/r,g=(c-i*v)/2,_=0),g+=n.regionLeft*v,_+=n.regionTop*v,p=(n.regionRight-n.regionLeft)*v,m=(n.regionBottom-n.regionTop)*v):"cover"===s?(f>d?(v=u/r,g=n.regionLeft*v-(i*v-c)/2,_=n.regionTop*v):(v=c/i,g=n.regionLeft*v,_=n.regionTop*v-(r*v-u)/2),p=(n.regionRight-n.regionLeft)*v,m=(n.regionBottom-n.regionTop)*v):(g=0,_=0,p=0,m=0),t.style.position="absolute",t.style.left=g+"px",t.style.top=_+"px",t.style.width=p+"px",t.style.height=m+"px"}showScanRegionOverlays(){this._scanRegionOverlayContainer&&("none"==this._scanRegionOverlayContainer.style.display&&(this._scanRegionOverlayContainer.style.display=""),this._recordedStates.overlayShow=!0)}hideScanRegionOverlays(){this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none",this._recordedStates.overlayShow=!1)}setViewDecorator(t,e){if(!t)return void(this._cvsViewDecorator&&(this._cvsViewDecorator.remove(),this._cvsViewDecorator=null));if(!e)throw new Error("Invalid area.");this._assertOpen();let i=[];if("string"==typeof t?i.push(t):Array.isArray(t)&&(i=JSON.parse(JSON.stringify(t))),!this._cvsViewDecorator){if(this._cvsViewDecorator=document.createElement("canvas"),this._scanRegionOverlayContainer)this._scanRegionOverlayContainer.after(this._cvsViewDecorator);else if(this._layerBaseCvs)this._layerBaseCvs.parentElement.after(this._cvsViewDecorator);else if(this._cvsScanRegion)this._cvsScanRegion.after(this._cvsViewDecorator);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(this._cvsViewDecorator);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(this._cvsViewDecorator);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(this._cvsViewDecorator)}this._recordedStates.decoratorShow=!0}this._decoratorArea=JSON.parse(JSON.stringify(e)),this._decoratorType.length=0;const r=["rectangle","focus"],s=["crossline","crosshair"];let n=!1,o=!1;for(let t of i)t=t.toLowerCase(),r.includes(t)&&!n&&(n=!0,this._decoratorType.push(t)),s.includes(t)&&!o&&(o=!0,!this._decoratorType.includes(t)&&this._decoratorType.push(t));this._updateViewDecorator()}getViewDecorator(){return{type:JSON.parse(JSON.stringify(this._decoratorType)),area:JSON.parse(JSON.stringify(this._decoratorArea)),canvas:this._cvsViewDecorator}}showViewDecorator(){this._cvsViewDecorator&&("none"==this._cvsViewDecorator.style.display&&(this._cvsViewDecorator.style.display=""),this._recordedStates.decoratorShow=!0)}hideViewDecorator(){this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none",this._recordedStates.decoratorShow=!1)}setViewDecoratorLineWidth(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("lineWidth"))throw new Error(`It is not allowed to change the property 'lineWidth' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].lineWidth=e,this._updateViewDecorator()}setViewDecoratorStrokeStyle(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("strokeStyle"))throw new Error(`It is not allowed to change the property 'strokeStyle' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].strokeStyle=e,this._updateViewDecorator()}setViewDecoratorFillStyle(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("fillStyle"))throw new Error(`It is not allowed to change the property 'fillStyle' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].fillStyle=e,this._updateViewDecorator()}setViewDecoratorMaskFillStyle(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("maskFillStyle"))throw new Error(`It is not allowed to change the property 'maskFillStyle' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].maskFillStyle=e,this._updateViewDecorator()}_updateViewDecorator(){if(!this._bOpen)return;if(!this._cvsViewDecorator||!this._decoratorArea)return;let t;if(this._isSingleFrameModeEnabled())t="contain";else{if(!this._video)return;t=this.getVideoFit()}const e=this._cvsViewDecorator;e.style.position="absolute",e.style.width="100%",e.style.height="100%",e.style.left="0",e.style.top="0",e.style.objectFit=t,e.style.pointerEvents="none";const i=this.getVisibleRegion(!0);if(!i)return;const r=i.regionRight-i.regionLeft,s=i.regionBottom-i.regionTop;if(e.width==r&&e.height==s||(e.width=r,e.height=s),r<=0||s<=0)return;const n=e.getContext("2d");n.clearRect(0,0,e.width,e.height);const o=this._decoratorArea.x/100*r,a=this._decoratorArea.y/100*s,h=this._decoratorArea.width/100*r,l=this._decoratorArea.height/100*s;for(let t of this._decoratorType){if("rectangle"===t){n.fillStyle=this._viewDecoratorInfo.rectangle.maskFillStyle,n.fillRect(0,0,e.width,e.height),n.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),n.fillStyle=this._viewDecoratorInfo.rectangle.fillStyle,n.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),n.lineWidth=this._viewDecoratorInfo.rectangle.lineWidth,n.strokeStyle=this._viewDecoratorInfo.rectangle.strokeStyle;const t=n.lineWidth/2;n.strokeRect(Math.round(o-t),Math.round(a-t),Math.round(h+n.lineWidth),Math.round(l+n.lineWidth))}if("focus"===t){n.fillStyle=this._viewDecoratorInfo.focus.maskFillStyle,n.fillRect(0,0,e.width,e.height),n.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),n.fillStyle=this._viewDecoratorInfo.focus.fillStyle,n.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),n.lineWidth=this._viewDecoratorInfo.focus.lineWidth,n.strokeStyle=this._viewDecoratorInfo.focus.strokeStyle;const t=n.lineWidth/2,i=[0,.25,.75,1],r=[0,.25,.75,1];n.beginPath();for(let t=0;t{const t=parseFloat(window.getComputedStyle(this._elContainer).width),e=parseFloat(window.getComputedStyle(this._elContainer).height);let n,o={regionBottom:r,regionRight:i,regionLeft:0,regionTop:0,regionMeasuredByPercentage:!1};return"cover"===s?t/ethis.maxNumberOfFramesInBuffer;)this._frameQueue.shift()}get maxNumberOfFramesInBuffer(){if(void 0!==this._maxNumberOfFramesInBuffer)return this._maxNumberOfFramesInBuffer;if(this._controler){const t=this._controler.getPropertyDisiredValue("maxNumberOfFramesInBuffer");if(t&&1===t.length)return t[0]}return this._defaultMaxNumberOfFramesInBuffer}get numberOfFramesInBuffer(){return this._frameQueue.length}set refreshInterval(t){this._refreshInterval=t}get refreshInterval(){if(void 0!==this._refreshInterval)return this._refreshInterval;if(this._controler){const t=this._controler.getPropertyDisiredValue("refreshInterval");if(t&&1===t.length)return t[0]}return this._defaultRefreshInterval}static async createInstance(t){let e=new it;("string"==typeof t||t instanceof String)&&(t=JSON.parse(t));for(let i in t)e[i]=t[i];return this._hasEngineResourceLoaded=!0,e._drawingLayersManager=new q,e}static async playVideo(t,e,i){return new Promise(((r,s)=>{t||s(new Error("Invalid video element.")),e||s(new Error("Invalid source.")),t.onloadedmetadata=async()=>{t.onloadedmetadata=null,await t.play(),r(t)},"string"==typeof e||e instanceof String?t.src=e:t.srcObject=e,void 0!==i&&setTimeout((()=>s(new Error("Failed to play video. Timeout."))),i)}))}static findBestRearCameraInIOS(t){if(!t||!t.length)return null;const e=["back","baksidan","bakre","bak","後置","后置","背面","خلفية","задна","posteriore","posterior","zadní","bagside","rück","πίσω","trasera","taka","arrière","אחורית","बैक","stražnja","hátsó","belakang","aртқы","후면","achterzijde","tylny","traseira","spate","задняя","задней","zadná","านหลัง","arka","sau"],i=["triple","三镜头","三鏡頭","トリプル","ثلاثية","тройна","trojný","τριπλή","kolmois","משולשת","ट्रिपल","trostruka","tiga","tripla","үштік","트리플","trippelt","trippel","trójobiektywowy","triplă","тройная","trojitá","สาม","üçlü","потроєна","ba camera"],r=["dual wide","dual-weitwinkel","dual con gran angular","dual","doble","double","双广角","雙廣角","デュアル広角","مزدوجة عريضة","двойна широкоъгълна","duální širokoúhlý","διπλή ευρεία","laajakulmainen kaksois","כפולה רחבה","ड्युअल वाइड","dvostruka široka","kettős, széles látószögű","ganda","doppia con grandangolo","қос кең бұрышты","듀얼 와이드","dwikamera","dobbelt vidvinkelkamera","dwuobiektywowy","dupla grande-angular","grande angular dupla","dublă","двойная широкоугольная","duálna širokouhlá","dubbel vidvinkel","คู่ด้านหลังมุมกว้าง","çift geniş","здвоєна ширококутна","kép rộng mặt sau"],s=t.filter((t=>{const i=t.label.toLowerCase();return e.some((t=>i.includes(t)))}));if(!s.length)return null;const n=s.find((t=>{const e=t.label.toLowerCase();return i.some((t=>e.includes(t)))}));if(n)return n.deviceId;const o=s.find((t=>{const e=t.label.toLowerCase();return r.some((t=>e.includes(t)))}));return o?o.deviceId:s[0].deviceId}static findBestRearCamera(t){if(!t||!t.length)return null;if(["iPhone","iPad","Mac"].includes(k.OS))return it.findBestRearCameraInIOS(t);const e=["rear","back","rück","arrière","trasera","trás","traseira","posteriore","posterior","后面","後面","背面","后置","後置","背置","задней","خلفية","후","arka","achterzijde","หลัง","baksidan","bagside","sau","bak","tylny","taka","אחורית","πίσω","spate","hátsó","zadní","darrere","zadná","задня","stražnja","belakang","बैक","задна","aртқы","задняя","bakre","านหลัง"];for(let i of t){const t=i.label.toLowerCase();if(t&&e.some((e=>t.includes(e)))&&/\b0(\b)?/.test(t))return i.deviceId}return["Android","HarmonyOS"].includes(k.OS)?t[t.length-1].deviceId:null}_isSingleFrameModeEnabled(){return 0!=this.singleFrameMode}async play(t,e,i,r){if(this._video&&this.videoSrc){const t=await it.playVideo(this._video,this.videoSrc,4e3);if(!this._video)return t.pause(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};const e={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};this.playCallbackInfo=JSON.parse(JSON.stringify(e));const i=this.mapCameraEvents.get("played");for(let t of i){if(!t)continue;const i=JSON.parse(JSON.stringify(e));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[i])}),0)}return this._recordedStates.videoPlaying=!0,e}if(this._isSingleFrameModeEnabled())return r&&r.notTriggerSingleFrameClick||this._clickIptSingleFrameMode(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};if(!this._video)throw new Error("'video' is null or undefined.");const s=++this.iPlayRound;if(this.promisePlay&&(await this.promisePlay,s{var s;try{this._video&&this._video.srcObject&&this.stop(),it._onLog&&it._onLog("DCE: ======before video========");const n=()=>{if(!this._video)throw h&&h.getTracks().forEach((t=>{t.stop()})),this._videoTrack=null,this._currentCamera=null,new Error("'video' is null or undefined.")},o=this.getVideoSettings();let a,h;if("boolean"==typeof o.video&&(o.video={}),t)delete o.video.facingMode,o.video.deviceId={exact:t};else if(o.video.deviceId);else if(this._lastDeviceId)delete o.video.facingMode,o.video.deviceId={exact:this._lastDeviceId};else if(this.ifSaveLastUsedCamera&&it.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")){delete o.video.facingMode,o.video.deviceId={ideal:window.localStorage.getItem("dce_last_camera_id")};const t=JSON.parse(window.localStorage.getItem("dce_last_apply_width")),e=JSON.parse(window.localStorage.getItem("dce_last_apply_height"));t&&e&&(o.video.width=t,o.video.height=e)}else if(this.ifSkipCameraInspection);else if(o.video.facingMode){if(await this.getAllCameras(!1),!this._video)throw new Error("'video' is null or undefined.");let t=o.video.facingMode;if(t instanceof Array&&t.length&&(t=t[0]),t=t.exact||t.ideal||t,"environment"===t){a=!0;const t=it.findBestRearCamera(this._allCameras);t&&(delete o.video.facingMode,o.video.deviceId={exact:t})}}e&&(o.video.width={ideal:e}),i&&(o.video.height={ideal:i}),it._onLog&&it._onLog("DCE: ======try getUserMedia========");let l=[0,500],c=null;const u=async t=>{for(let e of l){e&&await new Promise((t=>setTimeout(t,e))),n();try{it._onLog&&it._onLog("DCE: ask "+JSON.stringify(t)),h=await navigator.mediaDevices.getUserMedia(t);break}catch(t){if(n(),"NotFoundError"===t.name||"NotAllowedError"===t.name)throw t;c=t,it._onLog&&it._onLog("DCE: "+t.message||t)}}n()};let d;if(await u(o),h||(it._onLog&&it._onLog("DCE: ======try getUserMedia again========"),d=JSON.parse(JSON.stringify(o)),"object"==typeof d.video&&(["iPhone","iPad"].includes(k.OS)?(e>=1280||i>=1280?d.video.width=1280:e>=640||i>=640?d.video.width=640:(e<640||i<640)&&(d.video.width=320),delete d.video.height):a&&!o.video.deviceId?(delete d.video.facingMode,this._allCameras.length&&(d.video.deviceId={ideal:this._allCameras[this._allCameras.length-1].deviceId})):d.video=!0),it._onLog&&it._onLog("DCE: "+d),await u(d)),h||(l=[1e3,2e3],await u(o)),h||await u(d),!h)throw c;const f=()=>{const t=h.getVideoTracks();let e,i;if(t.length&&(e=this._videoTrack=t[0]),this._video&&e){const t=e.getSettings();if(t)for(let r of this._allCameras)if(t.deviceId===r.deviceId){r._checked=!0,r.label=e.label,i=r;break}}this._currentCamera=i};if(await this.getAllCameras(!1),n(),a&&!this.ifSkipCameraInspection){f();const t=it.findBestRearCamera(this._allCameras),e=null===(s=this._currentCamera)||void 0===s?void 0:s.deviceId;t&&t!=e&&(h.getTracks().forEach((t=>{t.stop()})),l=[0,500,1e3,2e3],o.video.deviceId={exact:t},await u(o))}it._onLog&&it._onLog("DCE: ======play video========"),n(),await it.playVideo(this._video,h,4e3),n(),it._onLog&&it._onLog("DCE: ======played video========"),this._bgLoading&&(this._bgLoading.style.animationPlayState="paused");const g=this._video.videoWidth+"x"+this._video.videoHeight;this._optGotRsl&&(this._optGotRsl.setAttribute("data-width",this._video.videoWidth),this._optGotRsl.setAttribute("data-height",this._video.videoHeight),this._optGotRsl.innerText=g,this._selRsl&&this._optGotRsl.parentNode==this._selRsl&&(this._selRsl.value="got")),it._onLog&&it._onLog("DCE: got "+g),f(),this._renderSelCameraInfo();const _={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};if(_.deviceId&&(this._lastDeviceId=_.deviceId,this.ifSaveLastUsedCamera&&it.isStorageAvailable&&(window.localStorage.setItem("dce_last_camera_id",this._lastDeviceId),o.video.width&&o.video.height&&(window.localStorage.setItem("dce_last_apply_width",JSON.stringify(o.video.width)),window.localStorage.setItem("dce_last_apply_height",JSON.stringify(o.video.height))))),!r||!r.notTriggerPlayedEvent){const t=this.mapCameraEvents.get("played");for(let e of t){if(!e)continue;const t=JSON.parse(JSON.stringify(_));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}return this.promisePlay=null,_}catch(t){throw this.promisePlay=null,this._bgLoading&&(this._bgLoading.style.display="none"),"NotFoundError"===t.name&&(DOMException?t=new DOMException("No camera available, please use a device with an accessible camera.",t.name):(t=new Error("No camera available, please use a device with an accessible camera.")).name="NotFoundError"),t}})();const n=await this.promisePlay;return this.playCallbackInfo=JSON.parse(JSON.stringify(n)),this._recordedStates.videoPlaying=!0,n}async resume(){this._assertOpen(),this._video&&(await this._video.play(),this._recordedStates.videoPlaying=!0),this.ifShowScanRegionLaser&&this.showScanRegionLaser()}pause(){this._assertOpen(),this._video&&(this._video.pause(),this._recordedStates.videoPlaying=!1),this.ifShowScanRegionLaser&&this.hideScanRegionLaser()}isPaused(){var t;return!this._isSingleFrameModeEnabled()&&!0===(null===(t=this._video)||void 0===t?void 0:t.paused)}_bindUI(){if(!this.UIElement)throw new Error("Need to define `UIElement` before opening.");const t=[this.UIElement];for(let e=0;e','','',''].join(""),this._optGotRsl=this._optGotRsl||this._selRsl.options[0])):!this._optGotRsl&&e.classList.contains("dce-opt-gotResolution")?this._optGotRsl=e:!this._btnClose&&e.classList.contains("dce-btn-close")?this._btnClose=e:!this._selMinLtr&&e.classList.contains("dlr-sel-minletter")?(this._selMinLtr=e,this._selMinLtr.options.length||(this._selMinLtr.innerHTML=[this._optGotMinLtr?"":'','','','','','','','','','',''].join(""),this._optGotMinLtr=this._optGotMinLtr||this._selMinLtr.options[0])):!this._optGotMinLtr&&e.classList.contains("dlr-opt-gotMinLtr")&&(this._optGotMinLtr=e);if(this.extraBindings&&this.extraBindings.length)for(let i of this.extraBindings)try{i(e)}catch(t){}}if(!this._video)throw this._unbindUI(),Error(`Can not find the video container element with class '${this.containerClassName}'`);this._isSingleFrameModeEnabled()||this.videoSrc?(this._isSingleFrameModeEnabled()&&(this._elContainer&&(this._elContainer.addEventListener("click",this._clickIptSingleFrameMode),this._elContainer.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block")),this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._elContainer&&(["Android","HarmonyOS"].includes(k.OS)?(this._elContainer.addEventListener("touchend",this._tapDoFocus),this._elContainer.addEventListener("touchmove",this._touchMoveEvent)):this._elContainer.addEventListener("click",this._tapDoFocus)),this._selCam&&(this._selCam.style.display="block",this._selCam.addEventListener("change",this._onCameraSelChange)),this._selRsl&&(this._selRsl.style.display="block",this._selRsl.addEventListener("change",this._onResolutionSelChange)),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._bgLoading&&(this._bgLoading.style.display="block")),this._btnClose&&this._btnClose.addEventListener("click",this._onCloseBtnClick),document.addEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&(this._resizeObserver||(this._resizeObserver=new ResizeObserver((t=>{for(let e of t)e.target===this._elContainer&&this._updateLayers()}))),this._elContainer&&this._resizeObserver.observe(this._elContainer)),this._windowWidth=document.documentElement.clientWidth,window.addEventListener("resize",this._windowResizeListener)}_unbindUI(){this._isSingleFrameModeEnabled()?(this._elContainer&&(this._elContainer.removeEventListener("click",this._clickIptSingleFrameMode),this._elContainer.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none")):this._bgLoading&&(this._bgLoading.style.display="none"),this._elContainer&&(this._elContainer.removeEventListener("click",this._tapDoFocus),this._elContainer.removeEventListener("touchend",this._tapDoFocus),this._elContainer.removeEventListener("touchmove",this._touchMoveEvent)),this._selCam&&this._selCam.removeEventListener("change",this._onCameraSelChange),this._selRsl&&this._selRsl.removeEventListener("change",this._onResolutionSelChange),this._btnClose&&this._btnClose.removeEventListener("click",this._onCloseBtnClick),this.hideScanRegionLaser(),this.hideViewDecorator(),this.hideScanRegionOverlays(),this._drawingLayersManager.setVisible(!1),this._hideOriginalImageCvs(),this._videoContainer&&this._videoContainer.remove(),this._video=null,this._videoContainer=null,this._elContainer=null,this._selCam=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._divScanArea=null,this._divScanLight=null,this._cvsScanRegion&&(this._cvsScanRegion.remove(),this._cvsScanRegion=null),this._singleFrameInputContainer&&(this._singleFrameInputContainer.remove(),this._singleFrameInputContainer=null),this._cvsSingleFrameMode&&(this._cvsSingleFrameMode.remove(),this._cvsSingleFrameMode=null),document.removeEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&this._resizeObserver&&this._resizeObserver.disconnect(),window.removeEventListener("resize",this._windowResizeListener)}_assertOpen(){if(!this._bOpen)throw Error("The camera is not open.")}async open(t){this.UIElement||await this.setUIElement(it.defaultUIElementURL),this._bindUI(),t&&this.appendAndShowUI();let e=await this.play();this.bOpen=!0,this._focusParameters.fds=null,this._focusParameters.kTimeout=void 0,this._focusSupported=!0,this._tapFocusEnabled&&!this._isSingleFrameModeEnabled()&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,this._focusParameters.fds||(this._focusSupported=!1,this._tapFocusEnabled=!1));const i=this.mapCameraEvents.get("cameraopen");for(let t of i){if(!t)continue;const i=JSON.parse(JSON.stringify(e));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[i])}),0)}return e}close(t){if(!this._video)return;this.stop(),this._hideOriginalImage(!1),this.hideTip(),this._unbindUI(),t&&this.hideUI(),this.stopFetchingLoop(),this.bOpen=!1;const e=this.mapCameraEvents.get("cameraclose");for(let t of e){if(!t)continue;const e={width:0,height:0,deviceId:null};setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}stop(){this._video&&this._video.srcObject&&(this._video.srcObject.getTracks().forEach((t=>{t.stop()})),this._video.srcObject=null,this._videoTrack=null,this._currentCamera=null),this._video&&this.videoSrc&&(this._video.pause(),this._video.currentTime=0),this._bgLoading&&(this._bgLoading.style.animationPlayState=""),this._frameQueue.length=0,this._reusedCvs&&this._reusedCvs.ctx2d&&this._reusedCvs.ctx2d.clearRect(0,0,this._reusedCvs.width,this._reusedCvs.height),this.forceLoseContext()}async getAllCameras(t=!0){let e=(await navigator.mediaDevices.enumerateDevices()).filter((t=>"videoinput"===t.kind));if(t&&e&&e.length&&!e[0].deviceId){let t=await navigator.mediaDevices.getUserMedia({video:!0});e=(await navigator.mediaDevices.enumerateDevices()).filter((t=>"videoinput"===t.kind)),t.getTracks().forEach((t=>{t.stop()}))}const i=[],r=[];if(this._allCameras)for(let t of this._allCameras)t._checked&&r.push(t);for(let t=0;t{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}if(r!==n.width||s!==n.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const t=this.mapCameraEvents.get("resolutionchange");for(let e of t){if(!e)continue;const t=JSON.parse(JSON.stringify(n));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}return n}getResolution(){if(this._bOpen)return[this._video.videoWidth,this._video.videoHeight];{let t=0,e=0;const i=this.videoSettings.video.width,r=this.videoSettings.video.height;return i&&(t=i.exact||i.ideal||i),r&&(e=r.exact||r.ideal||r),[t,e]}}async setResolution(t,e){let i,r;if(t instanceof Array?(i=t[0],r=t[1]):(i=t,r=e),this.videoSettings.video.width={ideal:i},this.videoSettings.video.height={ideal:r},!this._bOpen||this._video.paused)return null;const s=this._video.videoWidth,n=this._video.videoHeight,o=await this.play(null,i,r);if(s!==o.width||n!==o.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const t=this.mapCameraEvents.get("resolutionchange");for(let e of t){if(!e)continue;const t=JSON.parse(JSON.stringify(o));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}return o}async getResolutions(t){var e,i;let r="";const s=(t,e)=>{const i=this._mapCameraResolutions.get(t);if(!i||!i.length)return!1;for(let t of i)if(t[0]===e.width&&t[1]===e.height)return!0;return!1},n=async(t,e,i)=>{const r={video:{deviceId:{exact:t},width:{ideal:e},height:{ideal:i}}};let s=null;try{s=await navigator.mediaDevices.getUserMedia(r)}catch(t){return null}if(!s)return null;const n=s.getVideoTracks();let o=null;try{const t=n[0].getSettings();o={width:t.width,height:t.height}}catch(t){const e=document.createElement("video");e.srcObject=s,o={width:e.videoWidth,height:e.videoHeight},e.srcObject=null}return n.forEach((t=>{t.stop()})),o};if(!this._bOpen){const o=null===(i=null===(e=this.videoSettings)||void 0===e?void 0:e.video)||void 0===i?void 0:i.deviceId;if(!o)return null;if(r=o.hasOwnProperty("exact")?this.videoSettings.video.deviceId.exact:o.hasOwnProperty("ideal")?this.videoSettings.video.deviceId.ideal:this.videoSettings.video.deviceId,!r)return null;let a=this._mapCameraResolutions.get(r);if(a&&!t)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),a=this._mapCameraResolutions.get(r);for(let t of this._predefinedResolutions){const e=await n(r,t.width,t.height);e&&!s(r,e)&&a.push([e.width,e.height])}return a}if(this._currentCamera){r=this._currentCamera.deviceId;let e=this._mapCameraResolutions.get(r);if(e&&!t)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),e=this._mapCameraResolutions.get(r);let i=this._videoTrack;for(let t of this._predefinedResolutions){await i.applyConstraints({width:{ideal:t.width},height:{ideal:t.height}});const n=i.getSettings(),o={width:n.width,height:n.height};s(r,o)||e.push([o.width,o.height])}return this._video.srcObject.getTracks().forEach((t=>{t.stop()})),await this.play(r,null,null,{notTriggerPlayedEvent:!0}),e}return null}on(t,e){if(!e)return;const i=this.mapCameraEvents.get(t.toLowerCase());if(!i)throw new Error(`Event '${t}' does not exist.`);i.includes(e)||i.push(e)}off(t,e){const i=this.mapCameraEvents.get(t.toLowerCase());if(!i)throw new Error(`Event '${t}' does not exist.`);const r=i.indexOf(e);-1!==r&&i.splice(r,1)}offAll(t){if(t){if("string"==typeof t){const e=this.mapCameraEvents.get(t);e&&(e.length=0)}}else for(let t of this.mapCameraEvents.values())t&&(t.length=0)}getVideoSettings(){return JSON.parse(JSON.stringify(this.videoSettings))}updateVideoSettings(t){if(this.videoSettings=JSON.parse(JSON.stringify(t)),this._lastDeviceId=null,this._bOpen)return this.play()}isOpen(){return this._bOpen}getCapabilities(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCapabilities()' is unavailable in singleFrameMode.");return this._videoTrack&&this._videoTrack.getCapabilities?this._videoTrack.getCapabilities():{}}getCameraSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCameraSettings()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings():null}getConstraints(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getConstraints()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getConstraints():null}async applyConstraints(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'applyConstraints()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error('"_videoTrack" is null.');if(!this._videoTrack.applyConstraints)throw Error("Not supported.");return await this._videoTrack.applyConstraints(t)}async turnOnTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOnTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!0}]});throw Error("Not supported.")}async turnOffTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOffTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!1}]});throw Error("Not supported.")}async setColorTemperature(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setColorTemperature()' is unavailable in singleFrameMode.");let e=this.getCapabilities().colorTemperature;if(!e)throw Error("Not supported.");return te.max&&(t=e.max),await this._videoTrack.applyConstraints({advanced:[{colorTemperature:t,whiteBalanceMode:"manual"}]})}getColorTemperature(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getColorTemperature()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().colorTemperature||0:null}async setExposureCompensation(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setExposureCompensation()' is unavailable in singleFrameMode.");let e=this.getCapabilities().exposureCompensation;if(!e)throw Error("Not supported.");return te.max&&(t=e.max),await this._videoTrack.applyConstraints({advanced:[{exposureCompensation:t}]})}getExposureCompensation(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getExposureCompensation()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().exposureCompensation||0:null}async _setHardwareScale(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setHardwareScale()' is unavailable in singleFrameMode.");if(t<1)throw new RangeError("Invalid value.");if(!this._videoTrack)return;const e=this.getCapabilities().zoom;if(!e)throw new Error("Not supported.");return te.max&&(t=e.max),t=et(t,e.min,e.step,e.max),await this._videoTrack.applyConstraints({advanced:[{zoom:t}]}),t}_getHardwareScale(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().zoom||1:null}_setSoftwareScale(t,e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setSoftwareScale()' is unavailable in singleFrameMode.");if(t<1)throw new RangeError("Invalid value.");e&&this._setScaleCenter(e),this._softwareScale=t,this._scaleVideo(t,e)}_getSoftwareScale(){return this._softwareScale}_setScaleCenter(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setScaleCenter()' is unavailable in singleFrameMode.");if(!t||"string"!=typeof t.x||"string"!=typeof t.y)throw new Error("Invalid center.");const e=this._video.videoWidth,i=this._video.videoHeight;let r=0,s=0;if(t.x.endsWith("px"))r=parseFloat(t.x);else{if(!t.x.endsWith("%"))throw new Error("Invalid scale center.");r=parseFloat(t.x)/100*e}if(t.y.endsWith("px"))s=parseFloat(t.y);else{if(!t.y.endsWith("%"))throw new Error("Invalid scale center.");s=parseFloat(t.y)/100*i}if(NaN==r||NaN==s)throw new Error("Invalid scale center.");this._scaleCenter={x:r,y:s}}_resetScaleCenter(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_resetScaleCenter()' is unavailable in singleFrameMode.");const t=this._video.videoWidth,e=this._video.videoHeight;this._scaleCenter={x:t/2,y:e/2}}_isVideoCenter(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_isVideoCenter()' is unavailable in singleFrameMode.");return t&&t.x==this._video.videoWidth/2&&t.y==this._video.videoHeight/2}async _setZoom(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(t<1)throw new RangeError("Invalid value.");this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const e=await this._setHardwareScale(t);let i=this._getHardwareScale();1==i&&1!=e&&(i=e),t>i?this._setSoftwareScale(t/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(t)}catch(e){if("Not supported."!==(e.message||e))throw e;this._setSoftwareScale(t)}}async setZoom(t){if("number"!=typeof t&&"object"!=typeof t)throw new TypeError("Illegal type of argument.");if("number"==typeof t)return this._setZoom(t);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(t){if("number"!=typeof t.factor)throw new TypeError("Illegal type of 'factor'.");if(t.factor<1)throw new RangeError("Invalid value.");t.centerPoint?this._setScaleCenter(t.centerPoint):this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const e=await this._setHardwareScale(t.factor);let i=this._getHardwareScale();1==i&&1!=e&&(i=e),t.factor>i?this._setSoftwareScale(t.factor/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(t.factor)}catch(e){if("Not supported."!==(e.message||e))throw e;this._setSoftwareScale(t.factor)}}}getZoom(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?this._getHardwareScale()*this._softwareScale:null}getZoomSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?{factor:this._getHardwareScale()*this._softwareScale}:null}async resetZoom(){await this.setZoom({factor:1})}async setFrameRate(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFrameRate()' is unavailable in singleFrameMode.");let e=this.getCapabilities().frameRate;if(!e)throw Error("Not supported.");return te.max&&(t=e.max),await this._videoTrack.applyConstraints({width:{ideal:Math.max(this._video.videoWidth,this._video.videoHeight)},frameRate:t})}getFrameRate(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrameRate()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().frameRate:null}async _setFocus(t,e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if("string"!=typeof t)throw Error("Invalid focus mode.");t=t.toLowerCase();const i=this.getCapabilities().focusMode,r=this.getCapabilities().focusDistance;if(!i)throw Error("Not supported.");if(!i.includes(t))throw Error("Unsupported mode.");if(e>=0){if(!r)throw Error("Manual focus unsupported.");return er.max&&(e=r.max),e=et(e,r.min,r.step,r.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:t,focusDistance:e}]})}return await this._videoTrack.applyConstraints({advanced:[{focusMode:t}]})}async setFocus(t,e){if("string"==typeof t)return this._setFocus(t,e);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if(!t)return;const i=this.getCapabilities(),r=i.focusMode,s=i.focusDistance;if(!r)throw Error("Not supported.");if("string"!=typeof t.mode)throw Error("Invalid focus mode.");const n=t.mode.toLowerCase();if(!r.includes(n))throw Error("Unsupported focus mode.");if("manual"!==n)return this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:n}]});if(!s)throw Error("Manual focus unsupported.");if(t.hasOwnProperty("distance")){let e=t.distance;return es.max&&(e=s.max),e=et(e,s.min,s.step,s.max),this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:n,focusDistance:e}]})}if(!t.area)throw new Error("'distance' or 'area' should be specified in 'manual' mode.");{const e=t.area.centerPoint;let i=t.area.width,r=t.area.height;if(!i||!r){const t=this._video.videoWidth,e=this._video.videoHeight;i||(i=2*Math.round(Math.min(t,e)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px"),r||(r=2*Math.round(Math.min(t,e)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px")}this._focusParameters._focusArea={centerPoint:{x:e.x,y:e.y},width:i,height:r},await this._setLocalFocus(e,i,r)}}getFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const t=this._videoTrack.getSettings().focusMode;return t?"continuous"===t?{mode:t}:{mode:t,distance:this._videoTrack.getSettings().focusDistance}:null}getFocusSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const t=this._videoTrack.getSettings(),e=t.focusMode;return e?"manual"===e?this._focusParameters._focusArea?{mode:"manual",area:JSON.parse(JSON.stringify(this._focusParameters._focusArea))}:{mode:"manual",distance:t.focusDistance}:{mode:e}:null}async _setFocusAndGetContract(t,e){const i=t=>{if(!this._bOpen||!this._videoTrack||this.video.paused||t.focusTaskId!=this._focusParameters.curFocusTaskId){this._bOpen&&this._videoTrack&&!this.video.paused||(this._focusParameters.isDoingFocus=0);const e=new Error(`Focus task ${t.focusTaskId} canceled.`);throw e.name="DeprecatedTaskError",e}1===this._focusParameters.isDoingFocus&&Date.now()-t.timeStart>this._focusParameters.focusCancelableTime&&(this._focusParameters.isDoingFocus=-1)};let r;e=et(e,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:"manual",focusDistance:e}]}),i(t),r=null==this._focusParameters.oldDistance?this._focusParameters.kTimeout*Math.max(Math.abs(1/this._focusParameters.fds.min-1/e),Math.abs(1/this._focusParameters.fds.max-1/e))+this._focusParameters.minTimeout:this._focusParameters.kTimeout*Math.abs(1/this._focusParameters.oldDistance-1/e)+this._focusParameters.minTimeout,this._focusParameters.oldDistance=e,await new Promise((t=>{setTimeout(t,r)})),i(t);let s=t.focusL-t.focusW/2,n=t.focusT-t.focusH/2,o=t.focusW,a=t.focusH;if(s>=this.video.videoWidth||n>=this.video.videoHeight)throw new Error("Invalid area.");s+o>this.video.videoWidth&&(o=this.video.videoWidth-s),n+a>this.video.videoHeight&&(a=this.video.videoHeight-n);const h=this._getImageData(this.video,this.video.videoWidth,this.video.videoHeight,{sx:s,sy:n,sWidth:o,sHeight:a,dWidth:o,dHeight:a},null,{pixelFormat:tt.RGBA});if(!h)return this._setFocusAndGetContract(t,e);const l=h.data;let c=0;for(let t=0,e=l.length-8;to&&oc)return await this._doFocusDetail(t,n,o,r,s,l,c)}else{let a=await this._setFocusAndGetContract(t,l);if(o>a)return await this._doFocusDetail(t,n,o,r,s,l,a);if(o==a)return await this._doFocusDetail(t,n,o,l,a);let c=await this._setFocusAndGetContract(t,h);if(c>o&&o{try{(null==e||ethis._focusParameters.fds.max)&&(i=this._focusParameters.fds.max),this._focusParameters.oldDistance=null;let r=et(Math.sqrt(i*(e||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=et(Math.sqrt((e||this._focusParameters.fds.step)*r),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),n=et(Math.sqrt(r*i),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),o=await this._setFocusAndGetContract(t,n),a=await this._setFocusAndGetContract(t,s),h=await this._setFocusAndGetContract(t,r);if(a>h&&ho&&a>o){let e=await this._setFocusAndGetContract(t,i);const s=await this._doFocusDetail(t,r,h,i,e,n,o);return this._focusParameters.isDoingFocus=0,s}if(a==h&&hh){const e=await this._doFocusDetail(t,r,h,n,o);return this._focusParameters.isDoingFocus=0,e}return d(t,e,i)}catch(t){if("DeprecatedTaskError"!==t.name)throw t}};return d(u,r,s)}async enableTapToFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'enableTapToFocus()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error("Video is not playing.");if(!this._focusSupported)throw new Error("Tapping to focus unsupported.");if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))throw this._focusSupported=!1,this._tapFocusEnabled=!1,new Error("Tapping to focus unsupported.");this._tapFocusEnabled=!0}disableTapToFocus(){this._tapFocusEnabled=!1}isTapToFocusEnabled(){return this._tapFocusEnabled}_updateVideoContainerStyle(){if(!this._video)return;if(this._isSingleFrameModeEnabled())return;const t=this._getSoftwareScale(),e=this._videoContainer;if("contain"===this.videoFit&&t>1){const t=this._video.videoWidth,i=this._video.videoHeight,r=window.getComputedStyle(this._elContainer),s=parseFloat(r.width),n=parseFloat(r.height),o=t/i;if(s/na?o/(i/t):n/(r/t));const c=l*(1-1/t)*(i/2-this._scaleCenter.x),u=l*(1-1/t)*(r/2-this._scaleCenter.y);this._video.style.transform=`translate(${c}px, ${u}px) scale(${t})`}this._updateVideoContainerStyle()}}getFrameSize(t,e,i,r){if(!t||!e)return null;let s,n,o,a,h=t,l=e;const c={regionLeft:0,regionTop:0,regionRight:h,regionBottom:l,regionMeasuredByPercentage:!1};i?(i.regionMeasuredByPercentage?(c.regionLeft=i.regionLeft*h/100,c.regionTop=i.regionTop*l/100,c.regionRight=i.regionRight*h/100,c.regionBottom=i.regionBottom*l/100):(c.regionLeft=i.regionLeft,c.regionTop=i.regionTop,c.regionRight=i.regionRight,c.regionBottom=i.regionBottom),s=Math.round(c.regionLeft),n=Math.round(c.regionTop),h=Math.round(c.regionRight-c.regionLeft),l=Math.round(c.regionBottom-c.regionTop)):(s=0,n=0,h=Math.round(h),l=Math.round(l));const u=Math.max(h,l);if(r&&r>0&&u>r){const t=r/u;h>l?(o=r,a=Math.round(l*t)):(o=Math.round(h*t),a=r)}else o=h,a=l;return o<=0||a<=0?null:{sx:s,sy:n,sWidth:h,sHeight:l,dWidth:o,dHeight:a}}getFrame(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrame()' is unavailable in singleFrameMode.");return this._getVideoData()}getImage(){return this.getFrame()}_drawImage(t,e,i,r,s,n,o){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(!i||!r)return null;if(e instanceof HTMLVideoElement&&4!==e.readyState||e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");let a=0,h=0,l=i,c=r,u=0,d=0,f=i,g=r;s&&(s.sx&&(a=Math.round(s.sx)),s.sy&&(h=Math.round(s.sy)),s.sWidth&&(l=Math.round(s.sWidth)),s.sHeight&&(c=Math.round(s.sHeight)),s.dx&&(u=Math.round(s.dx)),s.dy&&(d=Math.round(s.dy)),s.dWidth&&(f=Math.round(s.dWidth)),s.dHeight&&(g=Math.round(s.dHeight)));let _=tt.RGBA;o&&o.pixelFormat&&(_=o.pixelFormat);const p=t;if(!o||!o.bUseWebGL){p.ctx2d||(p.ctx2d=p.getContext("2d",{willReadFrequently:!0}));const t=p.ctx2d;if(!t)throw new Error("Unable to get 'CanvasRenderingContext2D' from canvas.");return(p.width{const e=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,e),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),t.STATIC_DRAW);const i=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,i),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),t.STATIC_DRAW),{positions:e,texCoords:i}},i=t=>{const e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e},r=(t,e)=>{const i=t.createProgram();if(e.forEach((e=>t.attachShader(i,e))),t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){const e=new Error(`An error occured linking the program: ${t.getProgramInfoLog(i)}.`);throw e.name="WebGLError",e}return t.useProgram(i),i},s=(t,e,i)=>{const r=t.createShader(e);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS)){const e=new Error(`An error occured compiling the shader: ${t.getShaderInfoLog(r)}.`);throw e.name="WebGLError",e}return r},n="\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n \n uniform mat3 u_matrix;\n uniform mat3 u_textureMatrix;\n \n varying vec2 v_texCoord;\n void main(void) {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1.0);\n v_texCoord = vec4((u_textureMatrix * vec3(a_texCoord, 1)).xy, 0, 1.0).xy;\n }\n ";let o="rgb";["rgba","rbga","grba","gbra","brga","bgra"].includes(_)&&(o=_.slice(0,3));const a=`\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_image;\n uniform float uColorFactor;\n \n void main() {\n vec4 sample = texture2D(u_image, v_texCoord);\n float grey = 0.21 * sample.r + 0.71 * sample.g + 0.07 * sample.b;\n gl_FragColor = vec4(sample.${o} * (1.0 - uColorFactor) + (grey * uColorFactor), sample.a);\n }\n `,h=r(t,[s(t,t.VERTEX_SHADER,n),s(t,t.FRAGMENT_SHADER,a)]);this._webGLProgramInfo={program:h,attribLocations:{vertexPosition:t.getAttribLocation(h,"a_position"),texPosition:t.getAttribLocation(h,"a_texCoord")},uniformLocations:{uSampler:t.getUniformLocation(h,"u_image"),uColorFactor:t.getUniformLocation(h,"uColorFactor"),uMatrix:t.getUniformLocation(h,"u_matrix"),uTextureMatrix:t.getUniformLocation(h,"u_textureMatrix")}},this._webGLBuffers=e(t),this._webGLTexture=i(t),this.shaderPixelFormat=_}const s=(t,e,i)=>{t.bindBuffer(t.ARRAY_BUFFER,e),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,2,t.FLOAT,!1,0,0)},o=(t,e,i)=>{const r=t.RGBA,s=t.RGBA,n=t.UNSIGNED_BYTE;t.bindTexture(t.TEXTURE_2D,e),t.texImage2D(t.TEXTURE_2D,0,r,s,n,i)},m=(t,e,n,o)=>{t.clearColor(0,0,0,1),t.clearDepth(1),t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),s(t,n.positions,e.attribLocations.vertexPosition),s(t,n.texCoords,e.attribLocations.texPosition),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,o),t.uniform1i(e.uniformLocations.uSampler,0),t.uniform1f(e.uniformLocations.uColorFactor,[tt.GREY,tt.GREY32].includes(_)?1:0);let p,m,v=$.translate($.identity(),-1,-1);v=$.scale(v,2,2),v=$.scale(v,1/t.canvas.width,1/t.canvas.height),p=$.translate(v,u,d),p=$.scale(p,f,g),t.uniformMatrix3fv(e.uniformLocations.uMatrix,!1,p),m=$.translate($.identity(),a/i,h/r),m=$.scale(m,l/i,c/r),t.uniformMatrix3fv(e.uniformLocations.uTextureMatrix,!1,m),t.drawArrays(t.TRIANGLES,0,6)};let v;if(o(t,this._webGLTexture,e),m(t,this._webGLProgramInfo,this._webGLBuffers,this._webGLTexture),n){if(n.lengthe||r.sy>i||r.sx+r.sWidth>e||r.sy+r.sHeight>i)throw new Error("Invalid position.");if(t instanceof HTMLVideoElement&&4!==t.readyState||t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");const o=Math.round(r.sx),a=Math.round(r.sy),h=Math.round(r.sWidth),l=Math.round(r.sHeight),c=Math.round(r.dWidth),u=Math.round(r.dHeight);let d=tt.RGBA;n&&n.pixelFormat&&(d=n.pixelFormat);let f,g,_,p=this._bWebGLSupported;n&&0==n.bUseWebGL&&(p=!1),p?(this._reusedWebGLCvs||(this._reusedWebGLCvs=document.createElement("canvas")),f=this._reusedWebGLCvs):(this._reusedCvs||(this._reusedCvs=document.createElement("canvas")),f=this._reusedCvs);try{if(p)if(it._onLog&&it._onLog("DCE: _getImageData() in WebGL."),s)if(d===tt.GREY){if(_=new Uint8Array(c*u*4),g=this._drawImage(f,t,e,i,{sx:o,sy:a,sWidth:h,sHeight:l,dWidth:c,dHeight:u},_,{pixelFormat:d,bUseWebGL:p}),_=this._transformPixelFormat(_,g.pixelFormat,d),s){if(s.length<_.length)throw new Error("Unexpected size of the 'bufferContainer'.");s.set(_)}}else g=this._drawImage(f,t,e,i,{sx:o,sy:a,sWidth:h,sHeight:l,dWidth:c,dHeight:u},s,{pixelFormat:d,bUseWebGL:p}),_=new Uint8Array(s.buffer,0,c*u*4),_=this._transformPixelFormat(_,g.pixelFormat,d);else d===tt.GREY?((!this._tempDataContainer||this._tempDataContainer.length=this.croppingRegions.length||this._croppingRegionIndex<0)throw new Error("The 'croppingRegionIndex' is out of bounds.");t=this.croppingRegions[this._croppingRegionIndex],this.bIncreaseRegionIndexAuto&&++this._croppingRegionIndex>=this.croppingRegions.length&&(this._croppingRegionIndex=0)}return t}_fetchingLoop(t){if(this.isDisposed&&this.disposed)return;if(!this._bOpen||!this.isFetchingLoopStarted())return void this.stopFetchingLoop();const e=()=>{const t=this.getCurrentRegion();let e=this._getVideoData(null,{region:t});if(!e)return void it._onLog;for(;this._frameQueue&&this._frameQueue.length>=this.maxNumberOfFramesInBuffer;)this._frameQueue.shift();this._frameQueue.push(e);const i=this.mapCameraEvents.get("frameaddedtobuffer");for(let t of i)t&&setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this)}),0)},i=()=>{this.isDisposed&&this.disposed||(this._frameLoopTimeoutId2&&clearTimeout(this._frameLoopTimeoutId2),this.refreshInterval<=0||(this._frameLoopTimeoutId2=setTimeout((()=>{this.isDisposed&&this.disposed||(this._bOpen&&this.isFetchingLoopStarted()?(e(),i()):this.stopFetchingLoop())}),this.refreshInterval)))};t&&(this._frameQueue.length0&&i()):this.refreshInterval>0?(e(),i()):0===this.refreshInterval?e():this.refreshInterval),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameLoopTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._fetchingLoop(!0)}),this.loopInterval)}startFetchingLoop(){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(this._assertOpen(),this._isSingleFrameModeEnabled())throw Error("'startFetchingLoop()' is unavailable in singleFrameMode.");this.isFetchingLoopStarted()||(this._bFetchingLoopStarted=!0,this._recordedStates.fetchingLoopStart=!0,this._fetchingLoop(!0))}isFetchingLoopStarted(){return this._bFetchingLoopStarted}stopFetchingLoop(){this._bFetchingLoopStarted&&(this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameQueue.length=0,this._bFetchingLoopStarted=!1,this._recordedStates.fetchingLoopStart=!1)}getFrameFromBuffer(t){return this._frameQueue&&this._frameQueue.length?t?tt.getId()>=0))}getSelectedDrawingItems(){return this._drawingLayersManager.getSelectedDrawingItems()}createDrawingStyle(t){return this._drawingLayersManager.createDrawingStyle(t)}getDrawingStyle(t){return this._drawingLayersManager.getDrawingStyle(t)}getDrawingStyles(){return this._drawingLayersManager.getDrawingStyles()}updateDrawingStyle(t,e){return this._drawingLayersManager.updateDrawingStyle(t,e)}clearDrawingLayers(){const t=this.getDrawingLayers();for(let e of t)this.deleteDrawingLayer(e.getId())}showTip(t,e,i,r,s=3e3,n=!0){this._assertOpen(),this._tipArgs.x=t,this._tipArgs.y=e,this._tipArgs.width=i,this._tipArgs.autoShowSuggestedTip=!!n,this._drawingLayerOfTip||(this._drawingLayerOfTip=this._createDrawingLayer(-1)),this._tipStyleId||(this._tipStyleId=this.createDrawingStyle({fillStyle:"#FFFFFF",paintMode:"fill",fontFamily:"Open Sans",fontSize:40})),this._drawingLayerOfTip.clearDrawingItems();const o=new J(r||"",t,e,i,this._tipStyleId);o._fabricObject.paddingTop=15,o._fabricObject.calcTextHeight=function(){for(var t=0,e=0,i=this._textLines.length;e0&&(this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}_hideTip(){this._drawingLayerOfTip&&(this.deleteDrawingLayer(this._drawingLayerOfTip.getId()),this._drawingLayerOfTip=null,this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId))}hideTip(){this._hideTip(),this._tipArgs.x=null,this._tipArgs.y=null,this._tipArgs.width=null,this._tipArgs.autoShowSuggestedTip=null}updateTipMessage(t){if(!this._drawingLayerOfTip)throw new Error("The Tip is not showing.");this._drawingLayerOfTip.getDrawingItems()[0].setAttribute("text",t),this._drawingLayerOfTip.renderAll(),this._tipArgs.duration>0&&(this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId),this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}suggestTip(t,e){this._tipArgs.autoShowSuggestedTip&&(this._drawingLayerOfTip?this.updateTipMessage(e):void 0!==this._tipArgs.x&&this.showTip(this._tipArgs.x,this._tipArgs.y,this._tipArgs.width,e,this._tipArgs.duration)),this.onTipSuggested&&setTimeout((()=>{this.isDisposed&&this.disposed||this.onTipSuggested.apply(this,[t,e])}),0)}_createControler(){if(this._controler||(this._controler=new Q(this)),this._controler)return this._controler}_destroyControler(){this._controler=null}setOriginalImage(t,e,i){if(!t||!e||!i)throw new Error("Invalid arguments");this._originalImageData={imageData:t,width:e,height:i};let r=this._cvsOriginalImage;r||(r=document.createElement("canvas"),r.style.position="absolute",r.style.width="100%",r.style.height="100%",r.style.left="0",r.style.top="0",r.style.backgroundColor="white",r.style.objectFit="contain",this._cvsOriginalImage=r),r.width===e&&r.height===i||(r.width=e,r.height=i);const s=r.getContext("2d");s.clearRect(0,0,r.width,r.height),t instanceof Uint8Array||t instanceof Uint8ClampedArray?(t instanceof Uint8Array&&(t=new Uint8ClampedArray(t.buffer)),s.putImageData(new ImageData(t,e,i),0,0)):t instanceof HTMLCanvasElement&&s.drawImage(t,0,0),document.body.contains(r)&&""===r.style.display&&this._updateDrawingLayersSize({width:e,height:i,objectFit:"contain"})}getOriginalImage(){return this._originalImageData?Object.assign({},this._originalImageData):null}async deleteOriginalImage(){await this.hideOriginalImage(),this._cvsOriginalImage&&(this._cvsOriginalImage.remove(),this._cvsOriginalImage=null),this._originalImageData=null}_showOriginalImageCvs(){this._cvsOriginalImage&&"none"==this._cvsOriginalImage.style.display&&(this._cvsOriginalImage.style.display="")}_hideOriginalImageCvs(){this._cvsOriginalImage&&(this._cvsOriginalImage.style.display="none")}showOriginalImage(){if(!this._originalImageData)throw new Error("No original image is set.");const t=this._cvsOriginalImage;if(""===t.style.display&&document.body.contains(t))return;const{width:e,height:i}=this._originalImageData;if(this._updateDrawingLayersSize({width:e,height:i,objectFit:"contain"}),this._bOpen&&(this._video&&!this._video.paused&&this._video.pause(),this._bFetchingLoopStarted&&(this.stopFetchingLoop(),this._recordedStates.fetchingLoopStart=!0),this.ifShowScanRegionMask&&this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this.ifShowScanRegionLaser&&this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none"),this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none"),this._selCam&&(this._selCam.parentElement.style.display="none")),!document.body.contains(t))if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(t);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t)}this._showOriginalImageCvs()}async _hideOriginalImage(t){this._originalImageData&&this._cvsOriginalImage&&"none"!==this._cvsOriginalImage.style.display&&(this._updateDrawingLayersSize(),this._bOpen&&t&&(this._video&&this._recordedStates.videoPlaying&&await this.play(null,null,null,{notTriggerSingleFrameClick:!0}),this._recordedStates.fetchingLoopStart&&!this._isSingleFrameModeEnabled()&&this.startFetchingLoop(),this.ifShowScanRegionMask&&this._cvsScanRegion&&this._recordedStates.maskShow&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this._divScanLight&&this._recordedStates.laserShow&&this.showScanRegionLaser(),this._cvsViewDecorator&&this._recordedStates.decoratorShow&&this.showViewDecorator(),this._scanRegionOverlayContainer&&this._recordedStates.overlayShow&&this.showScanRegionOverlays()),this._selCam&&(this._selCam.parentElement.style.display=""),this._hideOriginalImageCvs())}async hideOriginalImage(){return this._hideOriginalImage(!0)}transformCoord(t){if(!this.isOpen())throw new Error("Unavailable when the camera is not open.");if(this._isSingleFrameModeEnabled()&&!this._cvsSingleFrameMode)throw new Error("No image is selected. ");const e=this._elContainer.getBoundingClientRect();let i,r,s,n,o,a=e.left,h=e.top,l=a+window.scrollX,c=h+window.scrollY;this._isSingleFrameModeEnabled()?(i=this._cvsSingleFrameMode.width,r=this._cvsSingleFrameMode.height,s=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).width),n=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).height),o="contain"):(i=this.video.videoWidth,r=this.video.videoHeight,s=parseFloat(window.getComputedStyle(this._elContainer).width),n=parseFloat(window.getComputedStyle(this._elContainer).height),o=this.videoFit);const u=s/n,d=i/r;let f,g,_,p,m=1;if("contain"===o)u({x:e.x-t.left-t.width/2,y:e.y-t.top-t.height/2}))),t.addWithUpdate()}else i.points=e;const r=i.points.length-1;return i.controls=i.points.reduce((function(t,e,i){return t["p"+i]=new D.Control({positionHandler:W,actionHandler:X(i>0?i-1:r,Y),actionName:"modifyPolygon",pointIndex:i}),t}),{}),i._setPositionDimensions({}),!0}}_extendGet(t){if("startPoint"===t||"endPoint"===t){const e=[],i=this._fabricObject;if(i.selectable&&!i.group)for(let t in i.oCoords)e.push({x:i.oCoords[t].x,y:i.oCoords[t].y});else for(let t of i.points){let r=t.x-i.pathOffset.x,s=t.y-i.pathOffset.y;const n=D.util.transformPoint({x:r,y:s},i.calcTransformMatrix());e.push({x:n.x,y:n.y})}return"startPoint"===t?e[0]:e[1]}}},DT_Group:class extends G{constructor(t){super(new D.Group(t.map((t=>t._getFabricObject())))),this._fabricObject.on("selected",(()=>{this.styleSelector="selected";const t=this._fabricObject._objects;for(let e of t)setTimeout((()=>{e&&e.fire("selected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)})),this._fabricObject.on("deselected",(()=>{this.styleSelector="default";const t=this._fabricObject._objects;for(let e of t)setTimeout((()=>{e&&e.fire("deselected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)}))}getChildItems(){return this._fabricObject._objects.map((t=>t.getDrawingItem()))}addChildItem(t){if(!t||!t.isDrawingItem)throw TypeError("Illegal drawing item.");this._drawingLayer?this._drawingLayer._updateGroupItem(this,t,"add"):this._fabricObject.addWithUpdate(t._getFabricObject())}removeChildItem(t){t&&t.isDrawingItem&&(this._drawingLayer?this._drawingLayer._updateGroupItem(this,t,"remove"):this._fabricObject.removeWithUpdate(t._getFabricObject()))}}};function st(t,e,i){return(i.x-t.x)*(e.y-t.y)==(e.x-t.x)*(i.y-t.y)&&Math.min(t.x,e.x)<=i.x&&i.x<=Math.max(t.x,e.x)&&Math.min(t.y,e.y)<=i.y&&i.y<=Math.max(t.y,e.y)}function nt(t){return Math.abs(t)<1e-6?0:t<0?-1:1}function ot(t,e,i,r){let s=t[0]*(i[1]-e[1])+e[0]*(t[1]-i[1])+i[0]*(e[1]-t[1]),n=t[0]*(r[1]-e[1])+e[0]*(t[1]-r[1])+r[0]*(e[1]-t[1]);return!((s^n)>=0&&0!==s&&0!==n)&&(s=i[0]*(t[1]-r[1])+r[0]*(i[1]-t[1])+t[0]*(r[1]-i[1]),n=i[0]*(e[1]-r[1])+r[0]*(i[1]-e[1])+e[0]*(r[1]-i[1]),!((s^n)>=0&&0!==s&&0!==n))}class at extends T{constructor(){super(),this._barcodeFillStyle="rgba(254,180,32,0.3)",this._barcodeStrokeStyle="rgba(254,180,32,0.9)",this._barcodeLineWidth=1,this._barcodeFillStyleBeforeVerification="rgba(248,252,0,0.2)",this._barcodeStrokeStyleBeforeVerification="transparent",this._barcodeLineWidthBeforeVerification=2,this.bFilterRegionInJs=!0,this._onPlayed=null}static get version(){return this._version+`(DCE ${it.getVersion()})`}static _fireHTTPSWarnning(){at.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{at.onWarning&&at.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}static async testCameraAccess(){return it.testCameraAccess()}_fireResolutionWarning(){if(!this.singleFrameMode&&this.onWarning&&this.dce.isOpen()){const t=this.dce.getConstraints();t&&t.width<1280&&t.height<720&&setTimeout((()=>{this.onWarning&&this.onWarning({id:3,message:"Camera resolution too low, please use a higher resolution (720P or better)."})}),0)}}getUIElement(){return this.dce.getUIElement()}async setUIElement(t){await this.dce.setUIElement(t)}get singleFrameMode(){return this.dce.singleFrameMode}set singleFrameMode(t){if("boolean"!=typeof t&&!["image","camera"].includes(t))throw new Error("Invalid value.");this.dce.singleFrameMode=t,t&&(this.dce.ifShowScanRegionLaser=!1,(async()=>{let t=await this.getScanSettings();t.oneDTrustFrameCount=1,await this.updateScanSettings(t)})())}get onUnduplicatedRead(){return this.onUniqueRead}set onUnduplicatedRead(t){this.onUniqueRead=t}get video(){return this.dce&&this.dce.video}set videoSrc(t){this.dce&&(this.dce.videoSrc=t)}get videoSrc(){return this.dce&&this.dce.videoSrc}set onTipSuggested(t){this.dce&&(this.dce.onTipSuggested=t)}get onTipSuggested(){return this.dce&&this.dce.onTipSuggested}_assertOpen(){if(!this.dce.isOpen())throw Error("The scanner is not open.")}set barcodeFillStyle(t){this._barcodeFillStyle=t,this.dce&&this.dce.updateDrawingStyle(3,{fillStyle:t})}get barcodeFillStyle(){return this._barcodeFillStyle}set barcodeStrokeStyle(t){this._barcodeStrokeStyle=t,this.dce&&this.dce.updateDrawingStyle(3,{strokeStyle:t})}get barcodeStrokeStyle(){return this._barcodeStrokeStyle}set barcodeLineWidth(t){this._barcodeLineWidth=t,this.dce&&this.dce.updateDrawingStyle(3,{lineWidth:t})}get barcodeLineWidth(){return this._barcodeLineWidth}set barcodeFillStyleBeforeVerification(t){this._barcodeFillStyleBeforeVerification=t,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{fillStyle:t})}get barcodeFillStyleBeforeVerification(){return this._barcodeFillStyleBeforeVerification}set barcodeStrokeStyleBeforeVerification(t){this._barcodeStrokeStyleBeforeVerification=t,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{strokeStyle:t})}get barcodeStrokeStyleBeforeVerification(){return this._barcodeStrokeStyleBeforeVerification}set barcodeLineWidthBeforeVerification(t){this._barcodeLineWidthBeforeVerification=t,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{lineWidth:t})}get barcodeLineWidthBeforeVerification(){return this._barcodeLineWidthBeforeVerification}set regionMaskFillStyle(t){this.dce.setScanRegionMaskStyle({fillStyle:t})}get regionMaskFillStyle(){return this.dce.regionMaskFillStyle}set regionMaskStrokeStyle(t){this.dce.setScanRegionMaskStyle({strokeStyle:t})}get regionMaskStrokeStyle(){return this.dce.regionMaskStrokeStyle}set regionMaskLineWidth(t){this.dce.setScanRegionMaskStyle({lineWidth:t})}get regionMaskLineWidth(){return this.dce.regionMaskLineWidth}set region(t){this._region=t,this.dce&&(t?t instanceof Array||this.dce.setScanRegion(t):this.dce.setScanRegion(null)),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}set ifSaveOriginalImageInACanvas(t){this._ifSaveOriginalImageInACanvas=t,this.dce.framePixelFormat=t?"rgba":"grey"}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}async createDCEInstance(){this.dce||(T._onLog&&T._onLog("createDCEInstance()"),it.defaultUIElementURL=null,this.dce=await it.createInstance(),this.dce.refreshInterval=200,this.dce.framePixelFormat="grey",this.dce.maxCvsSideLength=this.maxCvsSideLength,this._drawingItemNamespace=rt,["iPhone","iPad","Android","HarmonyOS"].includes(T.browserInfo.OS)||this.dce.setResolution(1920,1080),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"}),this.barcodeLineWidth=this._barcodeLineWidth,this.dce.on("cameraChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("resolutionChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("cameraClose",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1})),this.dce.on("singleFrameAcquired",(async t=>{if(!t)return;if(!t.data)return;let e;this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:i,sx:r,sy:s,width:n,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=t,d={timeStamp:l};if("grey"===h)e=await this._decodeBuffer_Uint8Array(i,n,o,a,m.IPF_GrayScaled,0,d);else if("rgba"===h)e=await this._decodeBuffer_Uint8Array(i,n,o,a,m.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);e=await this._decodeBuffer_Uint8Array(i,n,o,a,m.IPF_ARGB_8888,0,d)}if(await this.clearMapDecodeRecord(),T.recalculateResultLocation(e,r,s,c,u,n,o),this._drawResults(e),this.onFrameRead&&this.isOpen()&&!this._bPauseScan){let t=this._cloneDecodeResults(e);this.onFrameRead(t)}if(this.onUniqueRead&&this.isOpen()&&!this._bPauseScan)for(let t of e)this.onUniqueRead(t.barcodeText,this._cloneDecodeResults(t))})))}set maxCvsSideLength(t){this._maxCvsSideLength=t,this.dce.maxCvsSideLength=t}get maxCvsSideLength(){return this._maxCvsSideLength}static async createInstance(t){const e=new at;e._instanceID=await at.createInstanceInWorker(!0),await e.createDCEInstance(),"string"==typeof t&&(t=JSON.parse(t));for(let i in t)e[i]=t[i];return await e.dce.setUIElement(at.defaultUIElementURL),e.singleFrameMode&&console.warn("The `navigator.mediaDevices.getUserMedia` is unavailable. automatically change to `singleFrameMode`."),at._fireHTTPSWarnning(),e.singleFrameMode||await e.updateRuntimeSettings("single"),e}async decodeCurrentFrame(t){this._assertOpen();let e=null;t&&t.region&&(e=t.region);const i=this.dce._getVideoData(null,{region:e});return this._decode_DCEFrame(i)}async updateRuntimeSettings(t){let e;if("string"==typeof t)if("speed"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=0,e.localizationModes=[2,0,0,0,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9}else if("balance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=512,e.deblurLevel=3,e.localizationModes=[2,16,0,0,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else if("coverage"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=512,e.deblurLevel=5,e.scaleDownThreshold=1e5,e.localizationModes=[2,16,4,8,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else if("single"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region)}else if("dense"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=0,e.deblurLevel=7,e.scaleDownThreshold=1e5,e.localizationModes=[2,8,0,0,0,0,0,0],e.minResultConfidence=0,e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else if("distance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=0,e.scaleDownThreshold=1e5,e.localizationModes=[2,8,0,0,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else e=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(e=JSON.parse(JSON.stringify(t)),e.region instanceof Array){let i=t.region;[i.regionLeft,i.regionTop,i.regionLeft,i.regionBottom,i.regionMeasuredByPercentage].some((t=>void 0!==t))&&(e.region={regionLeft:i.regionLeft||0,regionTop:i.regionTop||0,regionRight:i.regionRight||0,regionBottom:i.regionBottom||0,regionMeasuredByPercentage:i.regionMeasuredByPercentage||0})}}if(!T._bUseFullFeature){if(0!=(e.barcodeFormatIds&~(S.BF_ONED|S.BF_QR_CODE|S.BF_PDF417|S.BF_DATAMATRIX))||0!=e.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=e.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}{let t=e.region;if(this.bFilterRegionInJs?this.userDefinedRegion=JSON.parse(JSON.stringify(t)):this.userDefinedRegion=null,t instanceof Array)if(t.length){for(let e=0;e{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.updateReturn)}catch(t){i(t)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),T._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(e)}})})),"string"==typeof t&&["speed","balance","coverage","dense","distance"].includes(t)&&(await this.setModeArgument("BinarizationModes",0,"EnableFillBinaryVacancy","1"),await this.setModeArgument("BinarizationModes",0,"BlockSizeX","0"),await this.setModeArgument("BinarizationModes",0,"BlockSizeY","0"))}_bindUI(){if(!this.getUIElement())throw new Error("Need to define `UIElement` before opening.");if(this.dce._bindUI(),!this.dce.video)throw this._unbindUI(),Error("Can not find the video container element with class 'dce-video-container'")}_unbindUI(){this.dce._unbindUI()}set onPlayed(t){this.dce.off("played",this._onPlayed),this._onPlayed=t,this.dce.on("played",this._onPlayed)}get onPlayed(){return this._onPlayed}async getAllCameras(){return this.dce.getAllCameras()}async getCurrentCamera(){return this.dce.getSelectedCamera()}async setCurrentCamera(t){const e=await this.dce.selectCamera(t);return this._fireResolutionWarning(),e}getResolution(){return this.dce.getResolution()}async setResolution(t,e){const i=await this.dce.setResolution(t,e);return this._fireResolutionWarning(),i}getVideoSettings(){return this.dce.getVideoSettings()}updateVideoSettings(t){return this.dce.updateVideoSettings(t)}isOpen(){return this.dce&&this.dce.isOpen()}setVideoFit(t){return this.dce&&this.dce.setVideoFit(t)}getVideoFit(){return this.dce&&this.dce.getVideoFit()}set ifShowScanRegionMask(t){this.dce&&(this.dce.ifShowScanRegionMask=t)}get ifShowScanRegionMask(){return this.dce&&this.dce.ifShowScanRegionMask}set ifSaveLastUsedCamera(t){this.dce&&(this.dce.ifSaveLastUsedCamera=t)}get ifSaveLastUsedCamera(){return this.dce&&this.dce.ifSaveLastUsedCamera}set ifSkipCameraInspection(t){this.dce&&(this.dce.ifSkipCameraInspection=t)}get ifSkipCameraInspection(){return this.dce&&this.dce.ifSkipCameraInspection}stop(){this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.dce.stop(),this.dce.ifShowScanRegionLaser=!1,this.dce.hideViewDecorator(),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}pause(){this.dce.pause()}async play(t,e,i){this.dce.ifShowScanRegionLaser=!0;const r=await this.dce.play(t,e,i);return this._fireResolutionWarning(),r}pauseScan(t){this._assertOpen(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),t&&t.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce.ifShowScanRegionLaser=!1,this.dce.stopFetchingLoop()}resumeScan(){this._assertOpen(),this._bPauseScan=!1,this.dce.ifShowScanRegionLaser=!0}getCapabilities(){return this.dce.getCapabilities()}getCameraSettings(){return this.dce.getCameraSettings()}getConstraints(){return this.dce.getConstraints()}async applyConstraints(t){return this.dce.applyConstraints(t)}async turnOnTorch(){return this.dce.turnOnTorch()}async turnOffTorch(){return this.dce.turnOffTorch()}async setColorTemperature(t){return this.dce.setColorTemperature(t)}getColorTemperature(){return this.dce.getColorTemperature()}async setExposureCompensation(t){return this.dce.setExposureCompensation(t)}getExposureCompensation(){return this.dce.getExposureCompensation()}async setZoom(t){return this.dce.setZoom(t)}getZoomSettings(){return this.dce.getZoomSettings()}resetZoom(){return this.dce.resetZoom()}async setFrameRate(t){return this.dce.setFrameRate(t)}getFrameRate(){return this.dce.getFrameRate()}async setFocus(t,e){return this.dce.setFocus(t,e)}getFocus(){return this.dce.getFocus()}getFocusSettings(){return this.dce.getFocusSettings()}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this.dce.stopFetchingLoop(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(!this.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce.video||this.dce.video.paused||this._bPauseScan)return T._onLog&&T._onLog("Video or scan is paused. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));T._onLog&&T._onLog("======= once read ======="),T._onLog&&(this._timeStartDecode=Date.now());const t=this._getVideoFrame();if(!t)return T._onLog&&T._onLog("Get invalid frame."),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{t._bUseWebGL||"grey"!==t.pixelFormat||(this.dce.framePixelFormat="rgba");let e=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:i,sx:r,sy:s,width:n,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=t,d={timeStamp:l};if("grey"===h)e=await this._decodeBuffer_Uint8Array(i,n,o,a,m.IPF_GrayScaled,0,d);else if("rgba"===h)e=await this._decodeBuffer_Uint8Array(i,n,o,a,m.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);e=await this._decodeBuffer_Uint8Array(i,n,o,a,m.IPF_ARGB_8888,0,d)}if(T.recalculateResultLocation(e,r,s,c,u,n,o),0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(e),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration)),this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan&&(this.autoZoom||this.autoFocus||this.autoSuggestTip))if(e.length)this.autoZoomInFrameArray.length=0,this.autoZoomOutFrameCount=0,this.frameArrayInIdealZoom.length=0,this.suggestTipFrameArray.length=0,this.autoZoom&&this.autoFocus&&(this.nextActionInIdealZoom="focus"),this.autoFocusFrameArray.length=0,this.noIntermediateResultsCount=0;else{const t=async()=>new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t(i.results);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!1}})})),e=await t(),i=(t,e,i,r,s,n,o)=>{let a=n/r,h=o/s;t.x1=t.x1/a+e,t.x2=t.x2/a+e,t.x3=t.x3/a+e,t.x4=t.x4/a+e,t.y1=t.y1/h+i,t.y2=t.y2/h+i,t.y3=t.y3/h+i,t.y4=t.y4/h+i},a=t=>{if(!t)return null;const e={};let a,h,l,d,f;{const t=this.video.videoWidth*(1-this.autoZoomDetectionArea)/2,e=this.video.videoWidth*(1+this.autoZoomDetectionArea)/2,i=e,r=t,s=this.video.videoHeight*(1-this.autoZoomDetectionArea)/2,n=s,o=this.video.videoHeight*(1+this.autoZoomDetectionArea)/2;f={x1:t,x2:e,x3:i,x4:r,y1:s,y2:n,y3:o,y4:o}}const g=(t,e)=>{const i=(t,e)=>{if(!t&&!e)throw new Error("Invalid arguments.");return function(t,e,i){let r=!1;const s=t.length;if(s<=2)return!1;for(let n=0;n0!=nt(a.y-i)>0&&nt(e-(i-o.y)*(o.x-a.x)/(o.y-a.y)-o.x)<0&&(r=!r)}return r}([{x:e.x1,y:e.y1},{x:e.x2,y:e.y2},{x:e.x3,y:e.y3},{x:e.x4,y:e.y4}],t.x,t.y)},r=(t,e)=>!!(ot([t[0],t[1]],[t[2],t[3]],[e.x1,e.y1],[e.x2,e.y2])||ot([t[0],t[1]],[t[2],t[3]],[e.x2,e.y2],[e.x3,e.y3])||ot([t[0],t[1]],[t[2],t[3]],[e.x3,e.y3],[e.x4,e.y4])||ot([t[0],t[1]],[t[2],t[3]],[e.x4,e.y4],[e.x1,e.y1]));return!!(i({x:t.x1,y:t.y1},e)||i({x:t.x2,y:t.y2},e)||i({x:t.x3,y:t.y3},e)||i({x:t.x4,y:t.y4},e))||(!!(i({x:e.x1,y:e.y1},t)||i({x:e.x2,y:e.y2},t)||i({x:e.x3,y:e.y3},t)||i({x:e.x4,y:e.y4},t))||!!(r([e.x1,e.y1,e.x2,e.y2],t)||r([e.x2,e.y2,e.x3,e.y3],t)||r([e.x3,e.y3,e.x4,e.y4],t)||r([e.x4,e.y4,e.x1,e.y1],t)))},_=[];for(let e of t){if(e.resultType!==C.IRT_TYPED_BARCODE_ZONE)continue;const t=e.scaleDownRatio;for(let a of e.results){if(!a)continue;const e={x1:a.x1=a.x1*t,x2:a.x2=a.x2*t,x3:a.x3=a.x3*t,x4:a.x4=a.x4*t,y1:a.y1=a.y1*t,y2:a.y2=a.y2*t,y3:a.y4=a.y3*t,y4:a.y4=a.y4*t};i(e,r,s,c,u,n,o),g(f,e)&&_.push(a)}}const p=(t=>{if(!t||!t.length)return null;const e=t=>{const e=(t.x1+t.x2+t.x3+t.x4)/4,i=(t.y1+t.y2+t.y3+t.y4)/4;return(e-n/2)*(e-n/2)+(i-o/2)*(i-o/2)};let i,r=t.filter((t=>t.barcodeFormat==S.BF_QR_CODE||t.barcodeFormat==S.BF_DATAMATRIX));if(r.length||(r=t.filter((t=>t.barcodeFormat==S.BF_ONED)),r.length||(r=t)),!r.length)return null;i=r[0];let s=e(i);if(1!=r.length)for(let t=1;t1.1*i.confidence?(i=r[t],s=n):r[t].confidence>.9*i.confidence&&n!0===t)).length>=this.suggestTipFrameLimit[1]){this.suggestTipFrameArray.length=0;const t=h.x3-h.x1,e=h.y3-h.y1;h.result.moduleSizee?t>n*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):t>.6*n&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."):t<=e&&(e>o*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):e>.6*o&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."))}if(this.autoZoom){const t=this.autoZoomIdealArea[1];let e=(1-this.autoZoomTargetBorder)/2;const a=h.x1/c,l=(c-h.x3)/c,d=h.y1/u,f=(u-h.y3)/u;if(a>t&&l>t&&d>t&&f>t&&h.result.moduleSize{}))),this.autoZoomInFrameArray.filter((t=>!0===t)).length>=this.autoZoomInFrameLimit[1]){this.autoZoomInFrameArray.length=0;const t=[(.5-e)/(.5-a),(.5-e)/(.5-l),(.5-e)/(.5-d),(.5-e)/(.5-f)].filter((t=>t>0)),i=Math.min(...t,this.autoZoomInIdealModuleSize/h.result.moduleSize),r=this.dce.getZoomSettings().factor;let s=Math.max(Math.pow(r*i,1/this.autoZoomInMaxTimes),this.autoZoomInMinStep);s=Math.min(s,i);const n=r*s;await this.setZoom({factor:n}),this.dce.clearFrameBuffer()}}else if(this.autoZoomInFrameArray.length=0,this.frameArrayInIdealZoom.push(!0),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.frameArrayInIdealZoom.filter((t=>!0===t)).length>=this.frameLimitInIdealZoom[1])if(this.frameArrayInIdealZoom.length=0,"focus"===this.nextActionInIdealZoom&&this.autoFocus){i(h,r,s,c,u,n,o);try{await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(t){}this.dce.clearFrameBuffer(),this.nextActionInIdealZoom="zoomOut"}else{if("zoomOut"!==this.nextActionInIdealZoom&&this.autoFocus)throw new Error("Invalid action.");if(this.enableZoomOutInIdealZoom){e=this.autoZoomIdealArea[1]+this.autoZoomOutStepRate_2;const t=[(.5-e)/(.5-a),(.5-e)/(.5-l),(.5-e)/(.5-d),(.5-e)/(.5-f)].filter((t=>t>0));let i=Math.min(...t)*this.dce.getZoomSettings().factor;await this.setZoom({factor:i}),this.dce.clearFrameBuffer(),this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((t=>{})))}}}else if(this.autoFocus&&(this.autoFocusFrameArray.push(!0),this.autoFocusFrameArray.splice(0,this.autoFocusFrameArray.length-this.autoFocusFrameLimit[0]),this.autoFocusFrameArray.filter((t=>!0===t)).length>=this.autoFocusFrameLimit[1])){this.autoFocusFrameArray.length=0;try{i(h,r,s,c,u,n,o),await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(t){}this.dce.clearFrameBuffer()}}else if(this.noIntermediateResultsCount++,this.suggestTipFrameArray.push(!1),this.autoZoom){if(this.autoZoomInFrameArray.push(!1),this.autoZoomInFrameArray.splice(0,this.autoZoomInFrameArray.length-this.autoZoomInFrameLimit[0]),this.autoZoomOutFrameCount++,this.frameArrayInIdealZoom.push(!1),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.autoZoomOutFrameCount>=this.autoZoomOutFrameLimit){this.autoZoomOutFrameCount=0;const t=this.getZoomSettings().factor;if(t>this.autoZoomOutMinValue){const e=Math.max((t-1)*this.autoZoomOutStepRate,this.autoZoomOutMinStep),i=Math.max(t-e,this.autoZoomOutMinValue);await this.setZoom({factor:i}),this.dce.clearFrameBuffer()}}this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((t=>{})))}else this.autoFocus&&(this.autoFocusFrameArray.length=0,this.setFocus({mode:"continuous"}).catch((t=>{})))}return e})().then((t=>{if(T._onLog&&T._onLog(t),this.captureAndDecodeInParallel){let t=this.array_decodeFrameTimeCost,e=this.array_getFrameTimeCost,i=this._indexCurrentDecodingFrame;const r=()=>{let r=0;if(this.region instanceof Array){let s=0,n=0;s=i+1>=this.region.length?0:i+1,n=s+1>=this.region.length?0:s+1,r=t[s]&&t[s].length&&e[n]&&e[n].length?Math.min(...t[s])-Math.max(...e[n]):0}else if(e&&e.length){let i=Math.min(...t),s=Math.max(...e);i&&s&&(r=i-s)}else r=0;return r>0?r:0};(()=>{if(this.region instanceof Array){for(t[i]&&t[i]instanceof Array||(t[i]=[]);t[i].length>=5;)t[i].shift();t[i].push(this._lastInnerDecodeDuration)}else{for(;t.length>=5;)t.shift();t.push(this._lastInnerDecodeDuration)}})(),this._intervalGetVideoFrame=r()+this.intervalTime,T._onLog&&T._onLog("Next fetching frame loop interval: "+this._intervalGetVideoFrame)}if(this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&t.length){let e=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&t.length){let e=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e)try{navigator.vibrate(this.vibrateDuration)}catch(t){console.warn("Vibration not allowed. User interaction required: "+(t.message||t))}}if(this.onFrameRead){t=t.filter((t=>t.resultState>=0));const e=this._cloneDecodeResults(t);this.onFrameRead(e)}if(this.onUniqueRead){t=t.filter((t=>0==t.resultState));const e=this._cloneDecodeResults(t);for(let t of e)this.onUniqueRead(t.barcodeText,t)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()}))}_getVideoFrame(){if(!this.dce)return null;let t;if(this.captureAndDecodeInParallel){T._onLog&&T._onLog("Get frame in parallel.");let e=this.dce.isFetchingLoopStarted();if(this.dce.loopInterval=this._intervalGetVideoFrame,e||this.dce.startFetchingLoop(),!this.dce.numberOfFramesInBuffer)return this.dce.loopInterval=0,null;t=this.dce.getFrameFromBuffer();const i=t=>{if(!t)return;let e=t.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(e)};i(t)}else T._onLog&&T._onLog("Get frame in serial."),this.dce.stopFetchingLoop(),t=this.dce.getFrame();return t}async open(){this._bindUI();const t=await this.dce.open();return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}async openVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const t=await this.dce.open();return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}close(){this._drawResults(null),this.dce.close(),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}async show(){this._bindUI();const t=await this.dce.open(!0);return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}async showVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const t=await this.dce.open(!0);return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}hide(){this.dce.close(!0),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}showTip(t,e,i,r,s=3e3,n=!0){this.dce&&this.dce.showTip(t,e,i,r,s,n)}hideTip(){this.dce&&this.dce.hideTip()}updateTipMessage(t){this.dce&&this.dce.updateTipMessage(t)}async enableTapToFocus(){this.dce&&this.dce.enableTapToFocus()}disableTapToFocus(){this.dce&&this.dce.disableTapToFocus()}isTapToFocusEnabled(){return this.dce.isTapToFocusEnabled()}convertToPageCoordinates(t){return this.dce.convertToPageCoordinates(t)}convertToClientCoordinates(t){return this.dce.convertToClientCoordinates(t)}destroyContext(){this.close(),this.dce&&this.dce.dispose(!1),this.bDestroyed||super.destroyContext()}}var ht,lt,ct,ut,dt,ft,gt,_t,pt,mt,vt,yt,St,Ct,bt,wt,xt,Tt,It,Et,Ot,Rt,Dt,At,Mt,Ft;!function(t){t[t.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",t[t.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",t[t.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",t[t.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",t[t.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",t[t.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",t[t.BICM_SKIP=0]="BICM_SKIP",t[t.BICM_REV=2147483648]="BICM_REV"}(ht||(ht={})),function(t){t[t.BCM_AUTO=1]="BCM_AUTO",t[t.BCM_GENERAL=2]="BCM_GENERAL",t[t.BCM_SKIP=0]="BCM_SKIP",t[t.BCM_REV=2147483648]="BCM_REV"}(lt||(lt={})),function(t){t[t.BF2_NULL=0]="BF2_NULL",t[t.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",t[t.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",t[t.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",t[t.BF2_POSTNET=2097152]="BF2_POSTNET",t[t.BF2_PLANET=4194304]="BF2_PLANET",t[t.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",t[t.BF2_RM4SCC=16777216]="BF2_RM4SCC",t[t.BF2_DOTCODE=2]="BF2_DOTCODE",t[t.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",t[t.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",t[t.BF2_PHARMACODE=12]="BF2_PHARMACODE",t[t.BF2_ALL=-1]="BF2_ALL"}(ct||(ct={})),function(t){t[t.BM_AUTO=1]="BM_AUTO",t[t.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",t[t.BM_SKIP=0]="BM_SKIP",t[t.BM_THRESHOLD=4]="BM_THRESHOLD",t[t.BM_REV=2147483648]="BM_REV"}(ut||(ut={})),function(t){t[t.ECCM_CONTRAST=1]="ECCM_CONTRAST"}(dt||(dt={})),function(t){t[t.CFM_GENERAL=1]="CFM_GENERAL"}(ft||(ft={})),function(t){t[t.CCM_AUTO=1]="CCM_AUTO",t[t.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",t[t.CCM_SKIP=0]="CCM_SKIP",t[t.CCM_REV=2147483648]="CCM_REV"}(gt||(gt={})),function(t){t[t.CICM_GENERAL=1]="CICM_GENERAL",t[t.CICM_SKIP=0]="CICM_SKIP",t[t.CICM_REV=2147483648]="CICM_REV"}(_t||(_t={})),function(t){t[t.CM_IGNORE=1]="CM_IGNORE",t[t.CM_OVERWRITE=2]="CM_OVERWRITE"}(pt||(pt={})),function(t){t[t.DM_SKIP=0]="DM_SKIP",t[t.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",t[t.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",t[t.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",t[t.DM_SMOOTHING=8]="DM_SMOOTHING",t[t.DM_MORPHING=16]="DM_MORPHING",t[t.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",t[t.DM_SHARPENING=64]="DM_SHARPENING",t[t.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",t[t.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING"}(mt||(mt={})),function(t){t[t.DRM_AUTO=1]="DRM_AUTO",t[t.DRM_GENERAL=2]="DRM_GENERAL",t[t.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",t[t.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",t[t.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",t[t.DRM_SKIP=0]="DRM_SKIP",t[t.DRM_REV=2147483648]="DRM_REV"}(vt||(vt={})),function(t){t[t.DPMCRM_AUTO=1]="DPMCRM_AUTO",t[t.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",t[t.DPMCRM_SKIP=0]="DPMCRM_SKIP",t[t.DPMCRM_REV=2147483648]="DPMCRM_REV"}(yt||(yt={})),function(t){t[t.GTM_INVERTED=1]="GTM_INVERTED",t[t.GTM_ORIGINAL=2]="GTM_ORIGINAL",t[t.GTM_SKIP=0]="GTM_SKIP",t[t.GTM_REV=2147483648]="GTM_REV"}(St||(St={})),function(t){t[t.IPM_AUTO=1]="IPM_AUTO",t[t.IPM_GENERAL=2]="IPM_GENERAL",t[t.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",t[t.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",t[t.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",t[t.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",t[t.IPM_SKIP=0]="IPM_SKIP",t[t.IPM_REV=2147483648]="IPM_REV"}(Ct||(Ct={})),function(t){t[t.IRSM_MEMORY=1]="IRSM_MEMORY",t[t.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",t[t.IRSM_BOTH=4]="IRSM_BOTH"}(bt||(bt={})),function(t){t[t.LM_SKIP=0]="LM_SKIP",t[t.LM_AUTO=1]="LM_AUTO",t[t.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",t[t.LM_LINES=8]="LM_LINES",t[t.LM_STATISTICS=4]="LM_STATISTICS",t[t.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",t[t.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",t[t.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",t[t.LM_CENTRE=128]="LM_CENTRE",t[t.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",t[t.LM_REV=2147483648]="LM_REV"}(wt||(wt={})),function(t){t[t.PDFRM_RASTER=1]="PDFRM_RASTER",t[t.PDFRM_AUTO=2]="PDFRM_AUTO",t[t.PDFRM_VECTOR=4]="PDFRM_VECTOR",t[t.PDFRM_REV=2147483648]="PDFRM_REV"}(xt||(xt={})),function(t){t[t.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",t[t.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",t[t.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",t[t.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}(Tt||(Tt={})),function(t){t[t.RPM_AUTO=1]="RPM_AUTO",t[t.RPM_GENERAL=2]="RPM_GENERAL",t[t.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",t[t.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",t[t.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",t[t.RPM_SKIP=0]="RPM_SKIP",t[t.RPM_REV=2147483648]="RPM_REV"}(It||(It={})),function(t){t[t.RCT_PIXEL=1]="RCT_PIXEL",t[t.RCT_PERCENTAGE=2]="RCT_PERCENTAGE"}(Et||(Et={})),function(t){t[t.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",t[t.RT_RAW_TEXT=1]="RT_RAW_TEXT",t[t.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",t[t.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT"}(Ot||(Ot={})),function(t){t[t.SUM_AUTO=1]="SUM_AUTO",t[t.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",t[t.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",t[t.SUM_SKIP=0]="SUM_SKIP",t[t.SUM_REV=2147483648]="SUM_REV"}(Rt||(Rt={})),function(t){t[t.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",t[t.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",t[t.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",t[t.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",t[t.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",t[t.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED"}(Dt||(Dt={})),function(t){t[t.TFM_AUTO=1]="TFM_AUTO",t[t.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",t[t.TFM_SKIP=0]="TFM_SKIP",t[t.TFM_REV=2147483648]="TFM_REV"}(At||(At={})),function(t){t[t.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",t[t.TROM_POSITION=2]="TROM_POSITION",t[t.TROM_FORMAT=4]="TROM_FORMAT",t[t.TROM_SKIP=0]="TROM_SKIP",t[t.TROM_REV=2147483648]="TROM_REV"}(Mt||(Mt={})),function(t){t[t.TDM_AUTO=1]="TDM_AUTO",t[t.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",t[t.TDM_SKIP=0]="TDM_SKIP",t[t.TDM_REV=2147483648]="TDM_REV"}(Ft||(Ft={}));export{T as BarcodeReader,at as BarcodeScanner,ht as EnumBarcodeColourMode,lt as EnumBarcodeComplementMode,S as EnumBarcodeFormat,ct as EnumBarcodeFormat_2,ut as EnumBinarizationMode,dt as EnumClarityCalculationMethod,ft as EnumClarityFilterMode,gt as EnumColourClusteringMode,_t as EnumColourConversionMode,pt as EnumConflictMode,yt as EnumDPMCodeReadingMode,mt as EnumDeblurMode,vt as EnumDeformationResistingMode,v as EnumErrorCode,St as EnumGrayscaleTransformationMode,y as EnumIMResultDataType,m as EnumImagePixelFormat,Ct as EnumImagePreprocessingMode,bt as EnumIntermediateResultSavingMode,C as EnumIntermediateResultType,wt as EnumLocalizationMode,xt as EnumPDFReadingMode,Tt as EnumQRCodeErrorCorrectionLevel,It as EnumRegionPredetectionMode,Et as EnumResultCoordinateType,Ot as EnumResultType,Rt as EnumScaleUpMode,Dt as EnumTerminatePhase,At as EnumTextFilterMode,Mt as EnumTextResultOrderMode,Ft as EnumTextureDetectionMode}; + */const A="undefined"==typeof self;let M,L,F,P,k;if("undefined"!=typeof navigator&&(M=navigator,L=M.userAgent,F=M.platform,P=M.mediaDevices),!A){const t={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:M.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},e={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:F,search:"Win"},Mac:{str:F},Linux:{str:F}};let i="unknownBrowser",r=0,n="unknownOS";for(let e in t){const n=t[e]||{};let s=n.str||L,o=n.search||e,a=n.verStr||L,h=n.verSearch||e;if(h instanceof Array||(h=[h]),-1!=s.indexOf(o)){i=e;for(let t of h){let e=a.indexOf(t);if(-1!=e){r=parseFloat(a.substring(e+t.length+1));break}}break}}for(let t in e){const i=e[t]||{};let r=i.str||L,s=i.search||t;if(-1!=r.indexOf(s)){n=t;break}}"Linux"==n&&-1!=L.indexOf("Windows NT")&&(n="HarmonyOS"),k={browser:i,version:r,OS:n}}A&&(k={browser:"ssr",version:0,OS:"ssr"});const B="undefined"!=typeof WebAssembly&&L&&!(/Safari/.test(L)&&!/Chrome/.test(L)&&/\(.+\s11_2_([2-6]).*\)/.test(L)),N=!("undefined"==typeof Worker),j=!(!P||!P.getUserMedia),U=async()=>{let t=!1;if(j)try{(await P.getUserMedia({video:!0})).getTracks().forEach((t=>{t.stop()})),t=!0}catch(t){}return t};"Chrome"===k.browser&&k.version>66||"Safari"===k.browser&&k.version>13||"OPR"===k.browser&&k.version>43||"Edge"===k.browser&&k.version;const V=(()=>{if(!A&&document.currentScript){let t=document.currentScript.src,e=t.indexOf("?");if(-1!=e)t=t.substring(0,e);else{let e=t.indexOf("#");-1!=e&&(t=t.substring(0,e))}return t.substring(0,t.lastIndexOf("/")+1)}return"./"})();class G{constructor(t,e){this._zIndex=null,this._drawingLayer=null,this._drawingLayerId=null,this._mapStyle=new Map,this.mapEvent_Callbacks=new Map([["selected",new Map],["deselected",new Map],["mousedown",new Map],["mouseup",new Map],["dblclick",new Map],["mouseover",new Map],["mouseout",new Map]]),this.mapNoteName_Content=new Map([]),this.isDrawingItem=!0,this._setFabricObject(t),this._mediaType=t.type,this.styleSelector="default",this.styleId=e}get mediaType(){return this._mediaType}get drawingLayerId(){return this._drawingLayerId}_setFabricObject(t){this._fabricObject=t,this._fabricObject.on("selected",(()=>{this.styleSelector="selected"})),this._fabricObject.on("deselected",(()=>{this._fabricObject.canvas&&this._fabricObject.canvas.getActiveObjects().includes(this._fabricObject)?this.styleSelector="selected":this.styleSelector="default","textbox"===this._fabricObject.type&&(this._fabricObject.isEditing&&this._fabricObject.exitEditing(),this._fabricObject.selected=!1)})),t.getDrawingItem=()=>this}_getFabricObject(){return this._fabricObject}_on(t,e){if(!e)return;const i=t.toLowerCase(),r=this.mapEvent_Callbacks.get(i);if(!r)throw new Error(`Event '${t}' does not exist.`);let n=r.get(e);n||(n=t=>{const i=t.e;if(!i)return void(e&&e.apply(this,[{targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null}]));const r={targetItem:this,itemClientX:null,itemClientY:null,itemPageX:null,itemPageY:null};if(this._drawingLayer){let t,e,n,s;const o=i.target.getBoundingClientRect();t=o.left,e=o.top,n=t+window.scrollX,s=e+window.scrollY;const a=this._drawingLayer.fabricCanvas.lowerCanvasEl.width,h=this._drawingLayer.fabricCanvas.lowerCanvasEl.height,l=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).width),c=parseFloat(window.getComputedStyle(this._drawingLayer.fabricCanvas.lowerCanvasEl).height),u=l/c,d=a/h,f=this._drawingLayer._getObjectFit();let g,_,p,m,v=1;if("contain"===f)u0?i-1:r,Y),actionName:"modifyPolygon",pointIndex:i}),t}),{})}_extendSet(t,e){if("vertices"===t){const t=this._fabricObject;if(t.group){const i=t.group;t.points=e.map((t=>({x:t.x-i.left-i.width/2,y:t.y-i.top-i.height/2}))),i.addWithUpdate()}else t.points=e;const i=t.points.length-1;return t.controls=t.points.reduce((function(t,e,r){return t["p"+r]=new D.Control({positionHandler:W,actionHandler:X(r>0?r-1:i,Y),actionName:"modifyPolygon",pointIndex:r}),t}),{}),t._setPositionDimensions({}),!0}}_extendGet(t){if("vertices"===t){const t=[],e=this._fabricObject;if(e.selectable&&!e.group)for(let i in e.oCoords)t.push({x:e.oCoords[i].x,y:e.oCoords[i].y});else for(let i of e.points){let r=i.x-e.pathOffset.x,n=i.y-e.pathOffset.y;const s=D.util.transformPoint({x:r,y:n},e.calcTransformMatrix());t.push({x:s.x,y:s.y})}return t}}}const Z=t=>{let e=(t=>t.split("\n").map((t=>t.split("\t"))))(t);return(t=>{for(let e=0;;e++){let i=-1;for(let r=0;ri&&(i=n.length)}if(-1===i)break;for(let r=0;r=t[r].length-1)continue;let n=" ".repeat(i+2-t[r][e].length);t[r][e]=t[r][e].concat(n)}}})(e),(t=>{let e="";for(let i=0;im?(g=d,_=d/p,{x:n.x*i.width,y:(n.y-(f-_)/2)*i.width}):(g=f*p,_=f,{x:(n.x-(d-g)/2)*i.height,y:n.y*i.height}):"cover"===l?p>m?{x:(c-i.height*d)/2+n.x*i.height,y:n.y*i.height}:{x:n.x*i.width,y:(u-i.width*f)/2+n.y*i.width}:{x:n.x*i.width,y:n.y*i.height}}return i={width:1,height:1},{x:n.x*i.width,y:n.y*i.height}},D.Canvas.prototype._onTouchStart=function(t){var e=this.findTarget(t);!this.allowTouchScrolling&&t.cancelable&&t.preventDefault&&t.preventDefault(),e&&t.cancelable&&t.preventDefault&&t.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(t)),this.__onMouseDown(t),this._resetTransformEventData();var i=this.upperCanvasEl,r=this._getEventPrefix();D.util.addListener(D.document,"touchend",this._onTouchEnd,{passive:!1}),D.util.addListener(D.document,"touchmove",this._onMouseMove,{passive:!1}),D.util.removeListener(i,r+"down",this._onMouseDown)},D.Textbox.prototype._wrapLine=function(t,e,i,r){const n=t.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/g),s=!(!n||!n.length);var o=0,a=this.splitByGrapheme||s,h=[],l=[],c=a?D.util.string.graphemeSplit(t):t.split(this._wordJoiners),u="",d=0,f=a?"":" ",g=0,_=0,p=0,m=!0,v=this._getWidthOfCharSpacing();r=r||0,0===c.length&&c.push([]),i-=r;for(var y=0;yi&&!m?(h.push(l),l=[],o=g,m=!0):o+=v,m||a||l.push(f),l=l.concat(u),_=a?0:this._measureWord([f],e,d),d++,m=!1,g>p&&(p=g);return y&&h.push(l),p+r>this.dynamicMinWidth&&(this.dynamicMinWidth=p-v+r),h});class K{constructor(t,e,i,r){let n,s;switch(this.mapMediaType_Style=new Map,this.mode="viewer",this.onSelectionChange=null,this._arrDrwaingItem=[],this._arrFabricObject=[],this._visible=!0,t.hasOwnProperty("getFabricCanvas")?this.fabricCanvas=t.getFabricCanvas():(this.fabricCanvas=new D.Canvas(t,Object.assign(r,{allowTouchScrolling:!0})),this.fabricCanvas.setDimensions({width:"100%",height:"100%"},{cssOnly:!0}),this.fabricCanvas.lowerCanvasEl.className="",this.fabricCanvas.upperCanvasEl.className="",this.fabricCanvas.on("selection:created",(function(t){const e=t.selected,i=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!i.includes(e)&&i.push(e)}for(let t of i){const i=[];for(let r of e){const e=r.getDrawingItem();e._drawingLayer===t&&i.push(e)}setTimeout((()=>{t.onSelectionChange&&t.onSelectionChange(i,[])}),0)}})),this.fabricCanvas.on("before:selection:cleared",(function(t){const e=this.getActiveObjects(),i=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!i.includes(e)&&i.push(e)}for(let t of i){const i=[];for(let r of e){const e=r.getDrawingItem();e._drawingLayer===t&&i.push(e)}setTimeout((()=>{const e=[];for(let r of i)t.hasDrawingItem(r)&&e.push(r);e.length>0&&t.onSelectionChange&&t.onSelectionChange([],e)}),0)}})),this.fabricCanvas.on("selection:updated",(function(t){const e=t.selected,i=t.deselected,r=[];for(let t of e){const e=t.getDrawingItem()._drawingLayer;e&&!r.includes(e)&&r.push(e)}for(let t of i){const e=t.getDrawingItem()._drawingLayer;e&&!r.includes(e)&&r.push(e)}for(let t of r){const r=[],n=[];for(let i of e){const e=i.getDrawingItem();e._drawingLayer===t&&r.push(e)}for(let e of i){const i=e.getDrawingItem();i._drawingLayer===t&&n.push(i)}setTimeout((()=>{t.onSelectionChange&&t.onSelectionChange(r,n)}),0)}})),this.fabricCanvas.wrapperEl.style.position="absolute",t.getFabricCanvas=()=>this.fabricCanvas),this.id=e,this._mapDrawingStyles=i,e){case 1:n=i.get(1),s=i.get(5);break;case 2:n=i.get(2),s=i.get(6);break;case 3:n=i.get(3),s=i.get(7);break;default:n=i.get(4),s=i.get(8)}for(let t of G.arrMediaTypes)this.mapMediaType_Style.set(t,{default:n,selected:s})}getId(){return this.id}_getDrawingStyle(t,e){if("number"!=typeof t)throw new Error("Invalid style id.");const i=this._mapDrawingStyles.get(t);return i?e?JSON.parse(JSON.stringify(i)):i:null}setVisible(t){if(t){for(let t of this._arrFabricObject)t.visible=!0;this._visible=!0}else{for(let t of this._arrFabricObject)t.visible=!1;this._visible=!1}this.fabricCanvas.renderAll()}isVisible(){return this._visible}_getItemCurrentStyleId(t){return t.styleId?t.styleId:this.mapMediaType_Style.get(t._mediaType)[t.styleSelector].styleId}_getItemCurrentStyle(t){if(t.styleId)return this._getDrawingStyle(t.styleId);return t._mapStyle.get(t.styleSelector)||null}_changeMediaTypeCurStyleInStyleSelector(t,e,i,r){let n;switch(t){case"rect":n=this.fabricCanvas.getObjects("rect");break;case"arc":n=this.fabricCanvas.getObjects("circle");break;case"polygon":n=this.fabricCanvas.getObjects("polygon");break;case"image":n=this.fabricCanvas.getObjects("image");break;case"text":n=this.fabricCanvas.getObjects("textbox");break;case"line":n=this.fabricCanvas.getObjects("line");break;case"path":n=this.fabricCanvas.getObjects("path")}for(let t of n){if(!this._arrFabricObject.includes(t))continue;const r=t.getDrawingItem();r.styleSelector===e&&this._changeItemStyle(r,i,!0)}r||this.fabricCanvas.renderAll()}_changeItemStyle(t,e,i){if(!t||!e)return;const r=t._getFabricObject();"number"==typeof t.styleId&&(e=this._getDrawingStyle(t.styleId)),r.strokeWidth=e.lineWidth,"fill"===e.paintMode?(r.fill=e.fillStyle,r.stroke=e.fillStyle):"stroke"===e.paintMode?(r.fill="transparent",r.stroke=e.strokeStyle):"strokeAndFill"===e.paintMode&&(r.fill=e.fillStyle,r.stroke=e.strokeStyle),r.fontFamily&&(r.fontFamily=e.fontFamily),r.fontSize&&(r.fontSize=e.fontSize),r.group||(r.dirty=!0),i||this.fabricCanvas.renderAll()}_updateGroupItem(t,e,i){if(!t||!e)return;const r=t.getChildItems();if("add"===i){if(r.includes(e))return;const i=e._getFabricObject();if(this.fabricCanvas.getObjects().includes(i)){if(!this._arrFabricObject.includes(i))throw new Error("Existed in other drawing layers.");e._zIndex=null}else{let i;if(e.styleId)i=this._getDrawingStyle(e.styleId);else{i=this.mapMediaType_Style.get(e._mediaType)[t.styleSelector];const r=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).selected,!0)},n=()=>{this._changeItemStyle(e,this.mapMediaType_Style.get(e._mediaType).default,!0)};e._on("selected",r),e._on("deselected",n),e._funcChangeStyleToSelected=r,e._funcChangeStyleToDefault=n}e._drawingLayer=this,e._drawingLayerId=this.id,this._changeItemStyle(e,i,!0)}t._fabricObject.addWithUpdate(e._getFabricObject())}else{if("remove"!==i)return;if(!r.includes(e))return;e._zIndex=null,e._drawingLayer=null,e._drawingLayerId=null,e._off("selected",e._funcChangeStyleToSelected),e._off("deselected",e._funcChangeStyleToDefault),e._funcChangeStyleToSelected=null,e._funcChangeStyleToDefault=null,t._fabricObject.removeWithUpdate(e._getFabricObject())}this.fabricCanvas.renderAll()}_addDrawingItem(t,e){let i=t._getFabricObject();const r=this.fabricCanvas.getObjects();let n,s;if(r.includes(i)){if(this._arrFabricObject.includes(i))return;throw new Error("Existed in other drawing layers.")}if("group"===t._mediaType){n=t.getChildItems();for(let t of n)if(t._drawingLayer&&t._drawingLayer!==this)throw new Error("The childItems of DT_Group have existed in other drawing layers.")}if(e&&"object"==typeof e&&!Array.isArray(e))for(let t in e)i.set(t,e[t]);if(n){for(let t of n){const e=this.mapMediaType_Style.get(t._mediaType);for(let i of G.arrStyleSelectors)t._mapStyle.set(i,e[i]);if(t.styleId)s=this._getDrawingStyle(t.styleId);else{s=e.default;const i=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected,!0)},r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default,!0)};t._on("selected",i),t._on("deselected",r),t._funcChangeStyleToSelected=i,t._funcChangeStyleToDefault=r}t._drawingLayer=this,t._drawingLayerId=this.id,this._changeItemStyle(t,s,!0)}i.dirty=!0,this.fabricCanvas.renderAll()}else{const e=this.mapMediaType_Style.get(t._mediaType);for(let i of G.arrStyleSelectors)t._mapStyle.set(i,e[i]);if(t.styleId)s=this._getDrawingStyle(t.styleId);else{s=e.default;const i=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).selected)},r=()=>{this._changeItemStyle(t,this.mapMediaType_Style.get(t._mediaType).default)};t._on("selected",i),t._on("deselected",r),t._funcChangeStyleToSelected=i,t._funcChangeStyleToDefault=r}this._changeItemStyle(t,s)}t._zIndex=this.id,t._drawingLayer=this,t._drawingLayerId=this.id;const o=this._arrFabricObject.length;let a=r.length;if(o)a=r.indexOf(this._arrFabricObject[o-1])+1;else for(let e=0;e{for(let e of this._arrDrawingLayer)if(e.getId()===t)return!0;return!1};if(void 0===e){for(let t=100;;t++)if(!i(t)){e=t;break}}else if(i(e))throw new Error("Existed drawing layer id.");const r=new K(t,e,this._mapDrawingStyles,{enableRetinaScaling:!1});return r._manager=this,this._arrDrawingLayer.push(r),this._switchPointerEvent(),r}deleteDrawingLayer(t){const e=this.getDrawingLayer(t);if(!e)return;const i=this._arrDrawingLayer;e.dispose(),i.splice(i.indexOf(e),1),this._switchPointerEvent()}clearDrawingLayers(){for(let t of this._arrDrawingLayer)t.dispose();this._arrDrawingLayer.length=0}getDrawingLayer(t){for(let e of this._arrDrawingLayer)if(e.getId()===t)return e;return null}getDrawingLayers(){return Array.from(this._arrDrawingLayer)}getSelectedDrawingItems(){if(!this._arrDrawingLayer.length)return;const t=this._arrDrawingLayer[0].fabricCanvas.getActiveObjects(),e=[];for(let i of t)e.push(i.getDrawingItem());return e}setDimensions(t,e){this._arrDrawingLayer.length&&this._arrDrawingLayer[0]._setDimensions(t,e)}setObjectFit(t){for(let e of this._arrDrawingLayer)e&&e._setObjectFit(t)}getObjectFit(){return this._arrDrawingLayer.length?this._arrDrawingLayer[0]._getObjectFit():null}setVisible(t){this._arrDrawingLayer.length&&(this._arrDrawingLayer[0].fabricCanvas.wrapperEl.style.display=t?"block":"none")}_switchPointerEvent(){if(this._arrDrawingLayer.length)for(let t of this._arrDrawingLayer)t.getMode()}}class Q{constructor(t){this._controlTarget=null,this._arrUsers=[],this._mapAction_UserArgs=new Map,this._mapProperty_UserValue=new Map,this._mapAction_Callbacks=new Map,this._controlTarget=t}setControlTarget(t){this._controlTarget=t}getControlTarget(){return this._controlTarget}register(t){this._arrUsers.includes(t)||this._arrUsers.push(t)}logout(t){const e=this._arrUsers.indexOf(t);-1!==e&&(this.clearUserDisiredAction({user:t}),this.clearUserDisiredValue({user:t}),this._arrUsers.splice(e,1))}getRegisteredUsers(){return this._arrUsers}ifUserExisted(t){return this._arrUsers.includes(t)}setDisiredValue(t,e,i,r){if(!this._arrUsers.includes(t))throw new Error("Unregistered user.");r&&(this._controlTarget[e]=i),this._mapProperty_UserValue.get(e)?this._mapProperty_UserValue.get(e).set(t,i):this._mapProperty_UserValue.set(e,new Map([[t,i]]))}clearUserDisiredValue(t){if(t&&(t.user||t.property)){if(t.property&&t.user){const e=this._mapProperty_UserValue.get(t.property);if(!e)return;e.delete(t.user)}else if(t.property)this._mapProperty_UserValue.delete(t.property);else if(t.user)for(let e of this._mapProperty_UserValue.values())e.delete(t.user)}else this._mapProperty_UserValue=new Map}getValue(t){if(!this._controlTarget)throw new Error("Control target is not set.");return this._controlTarget[t]}getPropertyDisiredValue(t){if(this._mapProperty_UserValue.get(t)){const e=[],i=this._mapProperty_UserValue.get(t);for(let t of i.values())e.push(t);return e}return null}setDisiredAction(t,e,i,r){if(!this._arrUsers.includes(t))throw new Error("Unregistered user.");return i||(i=[]),r?this._controlTarget[e](...i):(this._mapAction_UserArgs.get(e)?this._mapAction_UserArgs.get(e).set(t,i):this._mapAction_UserArgs.set(e,new Map([[t,i]])),this._render(e))}clearUserDisiredAction(t){if(t&&(t.user||t.actionName)){if(t.actionName&&t.user){const e=this._mapAction_UserArgs.get(t.actionName);if(!e)return;e.delete(t.user)}else if(t.actionName)this._mapAction_UserArgs.delete(t.actionName);else if(t.user)for(let e of this._mapAction_UserArgs.values())e.delete(t.user);this.render()}else this._mapAction_UserArgs=new Map}addCallback(t,e){const i=this._mapAction_Callbacks.get(t);i?i.push(e):this._mapAction_Callbacks.set(t,[e])}removeCallback(t,e){const i=this._mapAction_Callbacks.get(t);if(!i)return;const r=i.indexOf(e);-1!==r&&i.splice(r,1)}clearCallback(t){t?this._mapAction_Callbacks.delete(t):this._mapAction_Callbacks.clear()}_fireCallback(t){const e=this._mapAction_Callbacks.get(t);if(e)for(let t of e){if(!t)return;setTimeout(t.bind(this._controlTarget),0)}}_render(t){const e=this._mapAction_UserArgs.get(t);if(!e)throw new Error("Unrecorded action.");if(e.size===this._arrUsers.length){let i=[];for(let t of e.values())t.length>0&&(i=t);if(this._controlTarget[t]){const e=this._controlTarget[t](...i);return this._mapAction_UserArgs.delete(t),this._fireCallback(t),e}}}render(t){if(t)return this._render(t);for(let t of this._mapAction_UserArgs.keys())this._render(t)}}class ${static multiply(t,e){const i=[];for(let r=0;r<3;r++){const n=e.slice(3*r,3*r+3);for(let e=0;e<3;e++){const r=[t[e],t[e+3],t[e+6]].reduce(((t,e,i)=>t+e*n[i]),0);i.push(r)}}return i}static identity(){return[1,0,0,0,1,0,0,0,1]}static translate(t,e,i){return $.multiply(t,[1,0,0,0,1,0,e,i,1])}static rotate(t,e){var i=Math.cos(e),r=Math.sin(e);return $.multiply(t,[i,-r,0,r,i,0,0,0,1])}static scale(t,e,i){return $.multiply(t,[e,0,0,0,i,0,0,0,1])}}var tt;!function(t){t.GREY="grey",t.GREY32="grey32",t.RGBA="rgba",t.RBGA="rbga",t.GRBA="grba",t.GBRA="gbra",t.BRGA="brga",t.BGRA="bgra"}(tt||(tt={}));const et=(t,e,i,r)=>{if(!i)return t;let n=e+Math.round((t-e)/i)*i;return r&&(n=Math.min(n,r)),n};class it{constructor(){this._maxCvsSideLength=void 0,this._defaultMaxCvsSideLength=null,this._predefinedResolutions=[{width:160,height:120},{width:320,height:240},{width:480,height:360},{width:640,height:480},{width:800,height:600},{width:960,height:720},{width:1280,height:720},{width:1920,height:1080},{width:2560,height:1440},{width:3840,height:2160}],this._mapCameraResolutions=new Map,this._bWebGLSupported=!0,this.extraBindings=[],this._cvsSingleFrameMode=null,this._cvsOriginalImage=null,this._imgWidth=0,this._imgHeight=0,this._singleFrameInputContainer=null,this._clickIptSingleFrameMode=()=>{if(!this._isSingleFrameModeEnabled())return;if(this.getDrawingLayers().some((t=>"editor"==t.getMode())))return;let t;if(this._singleFrameInputContainer)t=this._singleFrameInputContainer.firstElementChild;else{t=document.createElement("input"),t.setAttribute("type","file"),"camera"===this.singleFrameMode?(t.setAttribute("capture",""),t.setAttribute("accept","image/*")):1!=this.singleFrameMode&&"image"!==this.singleFrameMode||(t.removeAttribute("capture"),t.setAttribute("accept",".jpg,.jpeg,.icon,.gif,.svg,.webp,.png,.bmp")),t.addEventListener("change",(async()=>{const e=t.files[0];t.value="";const i=await(async t=>{let e=null,i=null;if("undefined"!=typeof createImageBitmap)try{if(e=await createImageBitmap(t),e)return e}catch(t){}var r;return e||(i=await(r=t,new Promise(((t,e)=>{let i=URL.createObjectURL(r),n=new Image;n.dbrObjUrl=i,n.src=i,n.onload=()=>{t(n)},n.onerror=t=>{e(new Error("Can't convert blob to image : "+(t instanceof Event?t.type:t)))}})))),i})(e),r=i instanceof HTMLImageElement?i.naturalWidth:i.width,n=i instanceof HTMLImageElement?i.naturalHeight:i.height;this._imgWidth=r,this._imgHeight=n;const s=t=>{const e=Date.now();if(0===r||0===n)return null;if(t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");const i=this._scanRegion,s=this.getFrameSize(r,n,i,this.maxCvsSideLength);if(!s)return null;let o=!0;r===s.sWidth&&n===s.sHeight&&(o=!1);const a=this.mapPixelFormatString_Enum.get(this.framePixelFormat.toLowerCase()),h={data:null,region:i?JSON.parse(JSON.stringify(i)):null,sx:s.sx,sy:s.sy,width:s.dWidth,height:s.dHeight,colorMode:null,pixelFormat:null,timeSpent:null,timeStamp:null,isCropped:o,toCanvas:this._toCanvas,_sWidth:s.sWidth,_sHeight:s.sHeight,_bUseWebGL:null},l=this._getImageData(t,r,n,s,null,{pixelFormat:a});if(!l)return null;const c=Date.now();return it._onLog&&it._onLog("DCE: _getVideoData(region?) END: "+c),h.data=l.data,h.pixelFormat=h.colorMode=l.pixelFormat,h._bUseWebGL=l._bUseWebGL,h.timeSpent=c-e,h.timeStamp=c,l.pixelFormat===tt.GREY?h.stride=h.width:h.stride=4*h.width,h};(t=>{let e=this._cvsSingleFrameMode;if(!e){if(e=document.createElement("canvas"),!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(e),e.style.position="absolute",e.style.width="100%",e.style.height="100%",e.style.left="0",e.style.top="0",e.style.objectFit="contain",e.style.pointerEvents="none",this._cvsSingleFrameMode=e}e.width==r&&e.height==n||(e.width=r,e.height=n);const i=e.getContext("2d");i.clearRect(0,0,e.width,e.height),i.drawImage(t,0,0)})(i),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t);let o;this._updateDrawingLayersSize();try{o=s(i)}catch(t){throw t}const a=this.mapCameraEvents.get("singleframeacquired");for(let t of a)if(t)try{const e={data:new Uint8Array(o.data),region:JSON.parse(JSON.stringify(o.region)),sx:o.sx,sy:o.sy,width:o.width,height:o.height,stride:o.stride,colorMode:o.colorMode,pixelFormat:o.pixelFormat,timeSpent:o.timeSpent,timeStamp:o.timeStamp,isCropped:o.isCropped,toCanvas:o.toCanvas,_sWidth:o._sWidth,_sHeight:o._sHeight,_bUseWebGL:o._bUseWebGL};await t.apply(this,[e])}catch(t){console.error(t)}})),t.style.position="absolute",t.style.top="-9999px",t.style.backgroundColor="transparent",t.style.color="transparent";const e=document.createElement("div");e.append(t),e.style.position="absolute",e.style.width="1px",e.style.height="1px",e.style.overflow="hidden",e.style.pointerEvents="none",this._elContainer.prepend(e),this._singleFrameInputContainer=e}null==t||t.click()},this.styleEls=[],this._framePixelFormat=void 0,this._defaultFramePixelFormat="rgba",this.mapPixelFormatString_Enum=new Map([["grey",tt.GREY],["grey32",tt.GREY32],["rgba",tt.RGBA],["rbga",tt.RBGA],["grba",tt.GRBA],["gbra",tt.GBRA],["brga",tt.BRGA],["bgra",tt.BGRA]]),this.shaderPixelFormat=tt.RGBA,this.maxVideoCvsLength=3,this._reusedCvs=null,this._reusedWebGLCvs=null,this._tempDataContainer=null,this._webGLTexture=null,this._webGLProgramInfo=null,this._webGLBuffers=null,this._softwareScale=1,this._scaleCenter={x:0,y:0},this._focusParameters={maxTimeout:400,minTimeout:300,kTimeout:void 0,oldDistance:null,fds:null,isDoingFocus:0,taskBackToContinous:null,curFocusTaskId:0,focusCancelableTime:1500,defaultFocusAreaSizeRatio:6,focusBackToContinousTime:5e3,tapFocusMinDistance:null,tapFocusMaxDistance:null,_focusArea:null},this._tapFocusEnabled=!0,this._focusSupported=!0,this._tapDoFocus=async t=>{if(this._touchMoved)return void(this._touchMoved=!1);if(!this._tapFocusEnabled)return;if(!this._bOpen)return;if(this._isSingleFrameModeEnabled())return;if(!this._video||this._video.paused)return;if(!this._videoTrack)return;if(!this._focusSupported)return;if(this.getDrawingLayers().some((t=>"editor"==t.getMode())))return;if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))return void(this._focusSupported=!1);if(null==this._focusParameters.kTimeout&&(this._focusParameters.kTimeout=(this._focusParameters.maxTimeout-this._focusParameters.minTimeout)/(1/this._focusParameters.fds.min-1/this._focusParameters.fds.max)),1==this._focusParameters.isDoingFocus)return;let e,i,r,n;if(this._focusParameters.taskBackToContinous&&(clearTimeout(this._focusParameters.taskBackToContinous),this._focusParameters.taskBackToContinous=null),t instanceof MouseEvent)e=t.clientX,i=t.clientY;else{if(!(t instanceof TouchEvent))throw new Error("Unknown event type.");if(!t.changedTouches.length)return;e=t.changedTouches[0].clientX,i=t.changedTouches[0].clientY}const s=this.getVideoFit(),o=this._video.videoWidth,a=this._video.videoHeight,h=this._elContainer.getBoundingClientRect(),l=h.left,c=h.top,u=window.getComputedStyle(this._elContainer),d=parseFloat(u.width),f=parseFloat(u.height),g=d/f,_=o/a;let p=1;if("contain"===s)_>g?(p=d/o,r=(e-l)/p,n=(i-c-(f-d/_)/2)/p):(p=f/a,n=(i-c)/p,r=(e-l-(d-f*_)/2)/p);else{if("cover"!==s)throw new Error("Unsupported object-fit.");_>g?(p=f/a,n=(i-c)/p,r=(e-l+(f*_-d)/2)/p):(p=d/o,r=(e-l)/p,n=(i-c+(d/_-f)/2)/p)}const m={x:r+"px",y:n+"px"},v=2*Math.round(Math.min(o,a)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px",y=v;await this._setLocalFocus(m,v,y,this._focusParameters.tapFocusMinDistance,this._focusParameters.tapFocusMaxDistance),this._focusParameters.taskBackToContinous=setTimeout((()=>{this._videoTrack&&this._videoTrack.applyConstraints({advanced:[{focusMode:"continuous"}]}).catch((()=>{}))}),this._focusParameters.focusBackToContinousTime)},this._touchMoved=!1,this._touchMoveEvent=()=>{this._touchMoved=!0},this._recordedStates={},this.playCallbackInfo=null,this._toCanvas=function(){const t=document.createElement("canvas");let e;if(t.width=this.width,t.height=this.height,"grey"===(this.pixelFormat||this.colorMode)){e=new Uint8ClampedArray(this.width*this.height*4);for(let t=0;t{await this.selectCamera(this._selCam.value),this._bOpen||this.stop()},this._onResolutionSelChange=async()=>{let t,e;if(this._selRsl&&-1!=this._selRsl.selectedIndex){let i=this._selRsl.options[this._selRsl.selectedIndex];t=i.getAttribute("data-width"),e=i.getAttribute("data-height")}await this.setResolution(t,e),this._bOpen||this.stop()},this._onCloseBtnClick=()=>{this.close(!0)},this._bOpen=!1,this.isCameraEnhancer=!0,this.isDisposed=!1,this.disposed=!1,this.videoSrc=null,this.cameraOpenTimeout=4e3,this.videoSettings={video:{width:{ideal:1280},height:{ideal:720},facingMode:{ideal:"environment"}}},this.iPlayRound=0,this.promisePlay=null,this._ifSaveLastUsedCamera=!1,this.ifSkipCameraInspection=!1,this._allCameras=[],this._currentCamera=null,this._videoTrack=null,this._lastDeviceId=void 0,this._vc_bPlayingVideoBeforeHide=!1,this._ev_documentHideEvent=()=>{if(!this._isSingleFrameModeEnabled())if("visible"===document.visibilityState){if(it._onLog&&it._onLog("DCE: document visible."),this._bOpen&&this._vc_bPlayingVideoBeforeHide)if(this.videoSrc)this._video.play();else if(this._video.srcObject){const t=this._video.srcObject.getTracks()[0];if(this._video.srcObject.active&&t)if(t.muted&&["iPhone","iPad","Mac"].includes(k.OS)){if(k.version>=17)return;this.play()}else this._video.play();else this.play()}}else if("hidden"===document.visibilityState)if(it._onLog&&it._onLog("DCE: document hidden."),["iPhone","iPad","Mac"].includes(k.OS)){if(this._vc_bPlayingVideoBeforeHide=!0,k.version>=17)return;this._video&&this._video.pause()}else this._video&&!this._video.paused?(this._vc_bPlayingVideoBeforeHide=!0,this._video.pause()):this._vc_bPlayingVideoBeforeHide=!1},this.containerClassName="dce-video-container",this._elContainer=null,this._videoContainer=null,this._video=null,this.videoFit="contain",this._cvsScanRegion=null,this._divScanArea=null,this._divScanLight=null,this._bgLoading=null,this._selCam=null,this._bgCamera=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this.regionMaskFillStyle="rgba(0,0,0,0.5)",this.regionMaskStrokeStyle="rgb(254,142,20)",this.regionMaskLineWidth=2,this._bShowScanRegionMask=!0,this._bShowScanRegionLaser=void 0,this._defaultBShowScanRegionLaser=!1,this._scanRegion=null,this._arrScanRegionOverlays=[],this._layerBaseCvs=null,this._drawingLayerOfTip=null,this._tipArgs={x:void 0,y:void 0,width:void 0,duration:void 0,autoShowSuggestedTip:void 0},this._hideTipTimeoutId=null,this.onTipSuggested=null,this._cvsViewDecorator=null,this._decoratorType=[],this._decoratorArea=null,this._viewDecoratorInfo={rectangle:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},focus:{lineWidth:4,strokeStyle:"rgb(254,142,20)",fillStyle:"transparent",maskFillStyle:"transparent"},crossline:{lineWidth:2,strokeStyle:"rgb(254,142,20)"},crosshair:{lineWidth:4,strokeStyle:"rgb(254,142,20)"}},this._croppingRegions=void 0,this._defaultCroppingRegions=[null],this.bIncreaseRegionIndexAuto=!0,this._croppingRegionIndex=0,this._loopInterval=void 0,this._defaultLoopInterval=0,this._maxNumberOfFramesInBuffer=void 0,this._defaultMaxNumberOfFramesInBuffer=1,this._frameQueue=[],this._bFetchingLoopStarted=!1,this._refreshInterval=void 0,this._defaultRefreshInterval=-1,this._updateLayersTimeout=500,this._updateLayers=()=>{this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none");for(let t of this._arrScanRegionOverlays)t&&(t.style.display="none");this._resizeTimeoutId&&clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout((()=>{if(!this.isDisposed||!this.disposed){this.ifShowScanRegionMask&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this.showScanRegionLaser(),this._cvsViewDecorator&&this.showViewDecorator(),this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&(t.style.display="",this._updateScanRegionOverlay(t));this._updateDrawingLayersSize(),this._updateVideoContainerStyle()}}),this._updateLayersTimeout)},this._windowResizeListener=()=>{this._windowWidth!==document.documentElement.clientWidth&&(this._windowWidth=document.documentElement.clientWidth,this._updateLayers())},this.mapCameraEvents=new Map([["cameraopen",[]],["cameraclose",[]],["camerachange",[]],["resolutionchange",[]],["played",[]],["singleframeacquired",[]],["frameaddedtobuffer",[]]]),this._controler=null,navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia?this._singleFrameMode=!1:this._singleFrameMode=!0}static getVersion(){return this._version}static async detectEnvironment(){return await(async()=>({wasm:B,worker:N,getUserMedia:j,camera:await U(),browser:k.browser,version:k.version,OS:k.OS}))()}static set engineResourcePath(t){if(this._hasEngineResourceLoaded)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` is called.");it._engineResourcePath=(t=>{if(null==t&&(t="./"),!A){let e=document.createElement("a");e.href=t,t=e.href}return t.endsWith("/")||(t+="/"),t})(t)}static get engineResourcePath(){return this._engineResourcePath}static isStorageAvailable(t){let e;try{e=window[t];const i="__storage_test__";return e.setItem(i,i),e.removeItem(i),!0}catch(t){return t instanceof DOMException&&(22===t.code||1014===t.code||"QuotaExceededError"===t.name||"NS_ERROR_DOM_QUOTA_REACHED"===t.name)&&e&&0!==e.length}}static isDCEFrame(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&"data"in t&&"region"in t&&"sx"in t&&"sy"in t&&"width"in t&&"height"in t&&("colorMode"in t||"pixelFormat"in t)&&"timeSpent"in t&&"timeStamp"in t&&"isCropped"in t&&"toCanvas"in t&&"_sWidth"in t&&"_sHeight"in t&&"_bUseWebGL"in t}static async testCameraAccess(){try{if(!navigator||!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return{ok:!1,message:"Insecure context."};(await navigator.mediaDevices.getUserMedia({video:!0})).getTracks().forEach((t=>{t.stop()}))}catch(t){if("OverconstrainedError"===t.name||"NotFoundError"===t.name)return{ok:!1,message:"No camera detected."};if("NotAllowedError"===t.name)return{ok:!1,message:"No permission to access camera."};if("AbortError"===t.name)return{ok:!1,message:"Some problem occurred which prevented the device from being used."};if("NotReadableError"===t.name)return{ok:!1,message:"A hardware error occurred."};if("SecurityError"===t.name)return{ok:!1,message:"User media support is disabled."};throw t}return{ok:!0,message:"Successfully accessed the camera."}}set maxCvsSideLength(t){if(t<=0)throw new Error("Invalid value.");this._maxCvsSideLength=t}get maxCvsSideLength(){if(void 0!==this._maxCvsSideLength)return this._maxCvsSideLength;if(this._controler){const t=this._controler.getPropertyDisiredValue("maxCvsSideLength");if(t&&1===t.length)return t[0]}return this._defaultMaxCvsSideLength}static set defaultUIElementURL(t){it._defaultUIElementURL=t}static get defaultUIElementURL(){var t;return null===(t=it._defaultUIElementURL)||void 0===t?void 0:t.replace("@engineResourcePath/",it.engineResourcePath)}getUIElement(){return this.UIElement}async setUIElement(t){if(this._bOpen)throw new Error("It is not allowed to change the UIElement when the camera is open.");if("string"==typeof t||t instanceof String){if(!t.trim().startsWith("<")){let e=await fetch(t);if(!e.ok)throw Error("setUIElement(elementOrUrl): Network Error: "+e.statusText);t=await e.text()}if(!t.trim().startsWith("<"))throw Error("setUIElement(elementOrUrl): Can't get valid HTMLElement.");let e=document.createElement("div");e.innerHTML=t;for(let t=0;t100||t.regionTop>100||t.regionRight>100||t.regionBottom>100)))}set scanRegion(t){if(!this._checkValidRegion(t))throw new Error("Invalid region.");this._scanRegion=JSON.parse(JSON.stringify(t)),this._updateScanRegionCanvas(),this._updateScanAreaDiv();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t)}setScanRegion(t){this.scanRegion=t}getScanRegion(){return JSON.parse(JSON.stringify(this._scanRegion))}_calculateCvsSize(){var t,e;let i,r,n;if(this._isSingleFrameModeEnabled()?(i=this._imgWidth,r=this._imgHeight,n="contain"):(i=null===(t=this._video)||void 0===t?void 0:t.videoWidth,r=null===(e=this._video)||void 0===e?void 0:e.videoHeight,n=this.getVideoFit()),!i||!r)throw new Error("Invalid content dimensions.");return{width:i,height:r,objectFit:n}}addScanRegionOverlayCanvas(){this._assertOpen();const t=document.createElement("canvas");if(this._updateScanRegionOverlay(t),!this._scanRegionOverlayContainer){const t=document.createElement("div");if(this._scanRegionOverlayContainer=t,t.style.position="absolute",t.style.left="0",t.style.top="0",t.style.width="100%",t.style.height="100%",t.style.overflow="hidden",t.style.pointerEvents="none",this._layerBaseCvs)this._layerBaseCvs.parentElement.after(t);else if(this._cvsScanRegion)this._cvsScanRegion.after(t);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(t);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(t);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t)}this._recordedStates.overlayShow=!0}return this._scanRegionOverlayContainer.append(t),this._arrScanRegionOverlays.push(t),t}removeScanRegionOverlayCanvas(t){const e=this._arrScanRegionOverlays.indexOf(t);-1!==e&&(t.remove(),this._arrScanRegionOverlays.splice(e,1))}_updateScanRegionOverlay(t){if(!t)return;let e;try{e=this._calculateCvsSize()}catch(t){if("Invalid content dimensions."===(t.message||t))return;throw t}const{width:i,height:r,objectFit:n}=e;if(i<=0||r<=0)return t.width=0,void(t.height=0);const s=this._getRegionInPixels(i,r,this._scanRegion),o=this.getFrameSize(i,r,this._scanRegion,this.maxCvsSideLength),a=o.dWidth,h=o.dHeight;t.width==a&&t.height==h||(t.width=a,t.height=h);const l=window.getComputedStyle(this._elContainer),c=parseFloat(l.width),u=parseFloat(l.height),d=c/u,f=i/r;let g,_,p,m,v=1;"contain"===n?(f>d?(v=c/i,g=0,_=(u-r*v)/2):(v=u/r,g=(c-i*v)/2,_=0),g+=s.regionLeft*v,_+=s.regionTop*v,p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):"cover"===n?(f>d?(v=u/r,g=s.regionLeft*v-(i*v-c)/2,_=s.regionTop*v):(v=c/i,g=s.regionLeft*v,_=s.regionTop*v-(r*v-u)/2),p=(s.regionRight-s.regionLeft)*v,m=(s.regionBottom-s.regionTop)*v):(g=0,_=0,p=0,m=0),t.style.position="absolute",t.style.left=g+"px",t.style.top=_+"px",t.style.width=p+"px",t.style.height=m+"px"}showScanRegionOverlays(){this._scanRegionOverlayContainer&&("none"==this._scanRegionOverlayContainer.style.display&&(this._scanRegionOverlayContainer.style.display=""),this._recordedStates.overlayShow=!0)}hideScanRegionOverlays(){this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none",this._recordedStates.overlayShow=!1)}setViewDecorator(t,e){if(!t)return void(this._cvsViewDecorator&&(this._cvsViewDecorator.remove(),this._cvsViewDecorator=null));if(!e)throw new Error("Invalid area.");this._assertOpen();let i=[];if("string"==typeof t?i.push(t):Array.isArray(t)&&(i=JSON.parse(JSON.stringify(t))),!this._cvsViewDecorator){if(this._cvsViewDecorator=document.createElement("canvas"),this._scanRegionOverlayContainer)this._scanRegionOverlayContainer.after(this._cvsViewDecorator);else if(this._layerBaseCvs)this._layerBaseCvs.parentElement.after(this._cvsViewDecorator);else if(this._cvsScanRegion)this._cvsScanRegion.after(this._cvsViewDecorator);else if(this._cvsOriginalImage)this._cvsOriginalImage.after(this._cvsViewDecorator);else if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(this._cvsViewDecorator);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(this._cvsViewDecorator)}this._recordedStates.decoratorShow=!0}this._decoratorArea=JSON.parse(JSON.stringify(e)),this._decoratorType.length=0;const r=["rectangle","focus"],n=["crossline","crosshair"];let s=!1,o=!1;for(let t of i)t=t.toLowerCase(),r.includes(t)&&!s&&(s=!0,this._decoratorType.push(t)),n.includes(t)&&!o&&(o=!0,!this._decoratorType.includes(t)&&this._decoratorType.push(t));this._updateViewDecorator()}getViewDecorator(){return{type:JSON.parse(JSON.stringify(this._decoratorType)),area:JSON.parse(JSON.stringify(this._decoratorArea)),canvas:this._cvsViewDecorator}}showViewDecorator(){this._cvsViewDecorator&&("none"==this._cvsViewDecorator.style.display&&(this._cvsViewDecorator.style.display=""),this._recordedStates.decoratorShow=!0)}hideViewDecorator(){this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none",this._recordedStates.decoratorShow=!1)}setViewDecoratorLineWidth(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("lineWidth"))throw new Error(`It is not allowed to change the property 'lineWidth' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].lineWidth=e,this._updateViewDecorator()}setViewDecoratorStrokeStyle(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("strokeStyle"))throw new Error(`It is not allowed to change the property 'strokeStyle' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].strokeStyle=e,this._updateViewDecorator()}setViewDecoratorFillStyle(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("fillStyle"))throw new Error(`It is not allowed to change the property 'fillStyle' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].fillStyle=e,this._updateViewDecorator()}setViewDecoratorMaskFillStyle(t,e){if("string"!=typeof t)throw new Error("The 'type' should be a string.");if(t=t.toLowerCase(),!this._viewDecoratorInfo.hasOwnProperty(t))throw new Error(`The type of '${t}' doesn't exist.`);if(!this._viewDecoratorInfo[t].hasOwnProperty("maskFillStyle"))throw new Error(`It is not allowed to change the property 'maskFillStyle' when the decorator type is '${t}'.`);this._viewDecoratorInfo[t].maskFillStyle=e,this._updateViewDecorator()}_updateViewDecorator(){if(!this._bOpen)return;if(!this._cvsViewDecorator||!this._decoratorArea)return;let t;if(this._isSingleFrameModeEnabled())t="contain";else{if(!this._video)return;t=this.getVideoFit()}const e=this._cvsViewDecorator;e.style.position="absolute",e.style.width="100%",e.style.height="100%",e.style.left="0",e.style.top="0",e.style.objectFit=t,e.style.pointerEvents="none";const i=this.getVisibleRegion(!0);if(!i)return;const r=i.regionRight-i.regionLeft,n=i.regionBottom-i.regionTop;if(e.width==r&&e.height==n||(e.width=r,e.height=n),r<=0||n<=0)return;const s=e.getContext("2d");s.clearRect(0,0,e.width,e.height);const o=this._decoratorArea.x/100*r,a=this._decoratorArea.y/100*n,h=this._decoratorArea.width/100*r,l=this._decoratorArea.height/100*n;for(let t of this._decoratorType){if("rectangle"===t){s.fillStyle=this._viewDecoratorInfo.rectangle.maskFillStyle,s.fillRect(0,0,e.width,e.height),s.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.fillStyle=this._viewDecoratorInfo.rectangle.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.lineWidth=this._viewDecoratorInfo.rectangle.lineWidth,s.strokeStyle=this._viewDecoratorInfo.rectangle.strokeStyle;const t=s.lineWidth/2;s.strokeRect(Math.round(o-t),Math.round(a-t),Math.round(h+s.lineWidth),Math.round(l+s.lineWidth))}if("focus"===t){s.fillStyle=this._viewDecoratorInfo.focus.maskFillStyle,s.fillRect(0,0,e.width,e.height),s.clearRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.fillStyle=this._viewDecoratorInfo.focus.fillStyle,s.fillRect(Math.round(o),Math.round(a),Math.round(h),Math.round(l)),s.lineWidth=this._viewDecoratorInfo.focus.lineWidth,s.strokeStyle=this._viewDecoratorInfo.focus.strokeStyle;const t=s.lineWidth/2,i=[0,.25,.75,1],r=[0,.25,.75,1];s.beginPath();for(let t=0;t{const t=parseFloat(window.getComputedStyle(this._elContainer).width),e=parseFloat(window.getComputedStyle(this._elContainer).height);let s,o={regionBottom:r,regionRight:i,regionLeft:0,regionTop:0,regionMeasuredByPercentage:!1};return"cover"===n?t/ethis.maxNumberOfFramesInBuffer;)this._frameQueue.shift()}get maxNumberOfFramesInBuffer(){if(void 0!==this._maxNumberOfFramesInBuffer)return this._maxNumberOfFramesInBuffer;if(this._controler){const t=this._controler.getPropertyDisiredValue("maxNumberOfFramesInBuffer");if(t&&1===t.length)return t[0]}return this._defaultMaxNumberOfFramesInBuffer}get numberOfFramesInBuffer(){return this._frameQueue.length}set refreshInterval(t){this._refreshInterval=t}get refreshInterval(){if(void 0!==this._refreshInterval)return this._refreshInterval;if(this._controler){const t=this._controler.getPropertyDisiredValue("refreshInterval");if(t&&1===t.length)return t[0]}return this._defaultRefreshInterval}static async createInstance(t){let e=new it;("string"==typeof t||t instanceof String)&&(t=JSON.parse(t));for(let i in t)e[i]=t[i];return this._hasEngineResourceLoaded=!0,it.onWarning&&(location&&"file:"===location.protocol?setTimeout((()=>{it.onWarning&&it.onWarning({id:1,message:"The page is opened over file:// and Dynamsoft Camera Enhancer may not work properly. Please open the page via https://."})}),0):!1!==window.isSecureContext&&navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia||setTimeout((()=>{it.onWarning&&it.onWarning({id:2,message:"Dynamsoft Camera Enhancer may not work properly in a non-secure context. Please open the page via https://."})}),0)),e._drawingLayersManager=new q,e}static async playVideo(t,e,i){if(!t)throw new Error("Invalid 'videoEl'.");if(!e)throw new Error("Invalid 'source'.");return"string"==typeof e||e instanceof String?t.src=e:t.srcObject=e,new Promise(((e,r)=>{let n;const s=()=>{t.removeEventListener("loadstart",h),t.removeEventListener("abort",l),t.removeEventListener("play",c),t.removeEventListener("error",u)},o=()=>{n&&clearTimeout(n),s(),e(t)},a=t=>{n&&clearTimeout(n),s(),r(t)},h=()=>{t.addEventListener("abort",l,{once:!0})},l=()=>{const t=new Error("Video playing was interrupted.");t.name="AbortError",a(t)},c=()=>{o()},u=()=>{a(new Error(`Video error ${t.error.code}: ${t.error.message}.`))};t.addEventListener("loadstart",h,{once:!0}),t.autoplay?(t.addEventListener("play",c,{once:!0}),t.addEventListener("error",u,{once:!0})):(t.load(),t.play().then((()=>{o()})).catch((t=>{a(t)}))),i&&(n=setTimeout((()=>{s(),r(new Error("Failed to play video. Timeout."))}),i))}))}static findBestRearCameraInIOS(t){if(!t||!t.length)return null;const e=["back","baksidan","bakre","bak","後置","后置","背面","خلفية","задна","posteriore","posterior","zadní","bagside","rück","πίσω","trasera","taka","arrière","אחורית","बैक","stražnja","hátsó","belakang","aртқы","후면","achterzijde","tylny","traseira","spate","задняя","задней","zadná","านหลัง","arka","sau"],i=["triple","三镜头","三鏡頭","トリプル","ثلاثية","тройна","trojný","τριπλή","kolmois","משולשת","ट्रिपल","trostruka","tiga","tripla","үштік","트리플","trippelt","trippel","trójobiektywowy","triplă","тройная","trojitá","สาม","üçlü","потроєна","ba camera"],r=["dual wide","dual-weitwinkel","dual con gran angular","dual","doble","double","双广角","雙廣角","デュアル広角","مزدوجة عريضة","двойна широкоъгълна","duální širokoúhlý","διπλή ευρεία","laajakulmainen kaksois","כפולה רחבה","ड्युअल वाइड","dvostruka široka","kettős, széles látószögű","ganda","doppia con grandangolo","қос кең бұрышты","듀얼 와이드","dwikamera","dobbelt vidvinkelkamera","dwuobiektywowy","dupla grande-angular","grande angular dupla","dublă","двойная широкоугольная","duálna širokouhlá","dubbel vidvinkel","คู่ด้านหลังมุมกว้าง","çift geniş","здвоєна ширококутна","kép rộng mặt sau"],n=t.filter((t=>{const i=t.label.toLowerCase();return e.some((t=>i.includes(t)))}));if(!n.length)return null;const s=n.find((t=>{const e=t.label.toLowerCase();return i.some((t=>e.includes(t)))}));if(s)return s.deviceId;const o=n.find((t=>{const e=t.label.toLowerCase();return r.some((t=>e.includes(t)))}));return o?o.deviceId:n[0].deviceId}static findBestRearCamera(t){if(!t||!t.length)return null;if(["iPhone","iPad","Mac"].includes(k.OS))return it.findBestRearCameraInIOS(t);const e=["rear","back","rück","arrière","trasera","trás","traseira","posteriore","posterior","后面","後面","背面","后置","後置","背置","задней","خلفية","후","arka","achterzijde","หลัง","baksidan","bagside","sau","bak","tylny","taka","אחורית","πίσω","spate","hátsó","zadní","darrere","zadná","задня","stražnja","belakang","बैक","задна","aртқы","задняя","bakre","านหลัง"];for(let i of t){const t=i.label.toLowerCase();if(t&&e.some((e=>t.includes(e)))&&/\b0(\b)?/.test(t))return i.deviceId}return["Android","HarmonyOS"].includes(k.OS)?t[t.length-1].deviceId:null}_isSingleFrameModeEnabled(){return 0!=this.singleFrameMode}async play(t,e,i,r){let n;if(this._video&&this.videoSrc){it._onLog&&(n=Date.now(),it._onLog("DCE: start loading static video: "+n));const t=await it.playVideo(this._video,this.videoSrc,this.cameraOpenTimeout);if(it._onLog&&it._onLog("DCE: finish loading static video. Costs: "+(Date.now()-n)),!this._video)return t.pause(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};const e={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};this.playCallbackInfo=JSON.parse(JSON.stringify(e));const i=this.mapCameraEvents.get("played");for(let t of i){if(!t)continue;const i=JSON.parse(JSON.stringify(e));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[i])}),0)}return this._recordedStates.videoPlaying=!0,e}if(this._isSingleFrameModeEnabled())return r&&r.notTriggerSingleFrameClick||this._clickIptSingleFrameMode(),this.playCallbackInfo={width:0,height:0,deviceId:null},{width:0,height:0,deviceId:null};if(!this._video)throw new Error("'video' is null or undefined.");const s=++this.iPlayRound;if(this.promisePlay&&(await this.promisePlay,s{var n;try{this._video&&this._video.srcObject&&this.stop(),it._onLog&&it._onLog("DCE: ======before video========");const s=()=>{if(!this._video)throw h&&h.getTracks().forEach((t=>{t.stop()})),this._videoTrack=null,this._currentCamera=null,new Error("'video' is null or undefined.")},o=this.getVideoSettings();let a,h;if("boolean"==typeof o.video&&(o.video={}),t)delete o.video.facingMode,o.video.deviceId={exact:t};else if(o.video.deviceId);else if(this._lastDeviceId)delete o.video.facingMode,o.video.deviceId={exact:this._lastDeviceId};else if(this.ifSaveLastUsedCamera&&it.isStorageAvailable&&window.localStorage.getItem("dce_last_camera_id")){delete o.video.facingMode,o.video.deviceId={ideal:window.localStorage.getItem("dce_last_camera_id")};const t=JSON.parse(window.localStorage.getItem("dce_last_apply_width")),e=JSON.parse(window.localStorage.getItem("dce_last_apply_height"));t&&e&&(o.video.width=t,o.video.height=e)}else if(this.ifSkipCameraInspection);else if(o.video.facingMode){if(await this.getAllCameras(!1),!this._video)throw new Error("'video' is null or undefined.");let t=o.video.facingMode;if(t instanceof Array&&t.length&&(t=t[0]),t=t.exact||t.ideal||t,"environment"===t){a=!0;const t=it.findBestRearCamera(this._allCameras);t&&(delete o.video.facingMode,o.video.deviceId={exact:t})}}e&&(o.video.width={ideal:e}),i&&(o.video.height={ideal:i}),it._onLog&&it._onLog("DCE: ======try getUserMedia========");let l=[0,500],c=null;const u=async t=>{for(let e of l){e&&await new Promise((t=>setTimeout(t,e))),s();try{it._onLog&&it._onLog("DCE: ask "+JSON.stringify(t)),h=await navigator.mediaDevices.getUserMedia(t);break}catch(t){if(s(),"NotFoundError"===t.name||"NotAllowedError"===t.name)throw t;c=t,it._onLog&&it._onLog("DCE: "+t.message||t)}}s()};let d;if(await u(o),h||(it._onLog&&it._onLog("DCE: ======try getUserMedia again========"),d=JSON.parse(JSON.stringify(o)),"object"==typeof d.video&&(["iPhone","iPad"].includes(k.OS)?(e>=1280||i>=1280?d.video.width=1280:e>=640||i>=640?d.video.width=640:(e<640||i<640)&&(d.video.width=320),delete d.video.height):a&&!o.video.deviceId?(delete d.video.facingMode,this._allCameras.length&&(d.video.deviceId={ideal:this._allCameras[this._allCameras.length-1].deviceId})):d.video=!0),it._onLog&&it._onLog("DCE: "+d),await u(d)),h||(l=[1e3,2e3],await u(o)),h||await u(d),!h)throw c;const f=()=>{const t=h.getVideoTracks();let e,i;if(t.length&&(e=this._videoTrack=t[0]),this._video&&e){const t=e.getSettings();if(t)for(let r of this._allCameras)if(t.deviceId===r.deviceId){r._checked=!0,r.label=e.label,i=r;break}}this._currentCamera=i};if(await this.getAllCameras(!1),s(),a&&!this.ifSkipCameraInspection){f();const t=it.findBestRearCamera(this._allCameras),e=null===(n=this._currentCamera)||void 0===n?void 0:n.deviceId;t&&t!=e&&(h.getTracks().forEach((t=>{t.stop()})),l=[0,500,1e3,2e3],o.video.deviceId={exact:t},await u(o))}it._onLog&&it._onLog("DCE: ======play video========"),s(),await it.playVideo(this._video,h,this.cameraOpenTimeout),s(),it._onLog&&it._onLog("DCE: ======played video========"),this._bgLoading&&(this._bgLoading.style.animationPlayState="paused");const g="got "+this._video.videoWidth+"x"+this._video.videoHeight;this._optGotRsl&&(this._optGotRsl.setAttribute("data-width",this._video.videoWidth),this._optGotRsl.setAttribute("data-height",this._video.videoHeight),this._optGotRsl.innerText=g,this._selRsl&&this._optGotRsl.parentNode==this._selRsl&&(this._selRsl.value="got")),it._onLog&&it._onLog("DCE: got "+g),f(),this._renderSelCameraInfo();const _={width:this._video.videoWidth,height:this._video.videoHeight,deviceId:this._currentCamera&&this._currentCamera.deviceId};if(_.deviceId&&(this._lastDeviceId=_.deviceId,this.ifSaveLastUsedCamera&&it.isStorageAvailable&&(window.localStorage.setItem("dce_last_camera_id",this._lastDeviceId),o.video.width&&o.video.height&&(window.localStorage.setItem("dce_last_apply_width",JSON.stringify(o.video.width)),window.localStorage.setItem("dce_last_apply_height",JSON.stringify(o.video.height))))),!r||!r.notTriggerPlayedEvent){const t=this.mapCameraEvents.get("played");for(let e of t){if(!e)continue;const t=JSON.parse(JSON.stringify(_));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}return this.promisePlay=null,_}catch(t){throw this.promisePlay=null,this._bgLoading&&(this._bgLoading.style.display="none"),"NotFoundError"===t.name&&(DOMException?t=new DOMException("No camera available, please use a device with an accessible camera.",t.name):(t=new Error("No camera available, please use a device with an accessible camera.")).name="NotFoundError"),t}})(),it._onLog&&(n=Date.now(),it._onLog("DCE: start opening camera: "+n));const o=await this.promisePlay;return it._onLog&&it._onLog("DCE: finish opening camera. Costs: "+(Date.now()-n)),this.playCallbackInfo=JSON.parse(JSON.stringify(o)),this._recordedStates.videoPlaying=!0,o}async resume(){this._assertOpen(),this._video&&(await this._video.play(),this._recordedStates.videoPlaying=!0),this.ifShowScanRegionLaser&&this.showScanRegionLaser()}pause(){this._assertOpen(),this._video&&(this._video.pause(),this._recordedStates.videoPlaying=!1),this.ifShowScanRegionLaser&&this.hideScanRegionLaser()}isPaused(){var t;return!this._isSingleFrameModeEnabled()&&!0===(null===(t=this._video)||void 0===t?void 0:t.paused)}_bindUI(){if(!this.UIElement)throw new Error("Need to define `UIElement` before opening.");const t=[this.UIElement];for(let e=0;e=17&&t.setAttribute("poster","data:image/gif;base64,R0lGODlhAQABAIEAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAgEAAEEBAA7"),this._video=t;const i=document.createElement("div");i.append(t),i.style.position="absolute",i.style.left="0",i.style.top="0",i.style.width="100%",i.style.height="100%",i.style.overflow="hidden",this._videoContainer=i,e.prepend(i)}else!this._divScanArea&&e.classList.contains("dce-scanarea")?this._divScanArea=e:!this._divScanLight&&e.classList.contains("dce-scanlight")?this._divScanLight=e:!this._bgLoading&&e.classList.contains("dce-bg-loading")?this._bgLoading=e:!this._bgCamera&&e.classList.contains("dce-bg-camera")?this._bgCamera=e:!this._selCam&&e.classList.contains("dce-sel-camera")?this._selCam=e:!this._selRsl&&e.classList.contains("dce-sel-resolution")?(this._selRsl=e,this.videoSrc||this._isSingleFrameModeEnabled()||this._selRsl.options.length||(this._selRsl.innerHTML=[this._optGotRsl?"":'','','',''].join(""),this._optGotRsl=this._optGotRsl||this._selRsl.options[0])):!this._optGotRsl&&e.classList.contains("dce-opt-gotResolution")?this._optGotRsl=e:!this._btnClose&&e.classList.contains("dce-btn-close")?this._btnClose=e:!this._selMinLtr&&e.classList.contains("dlr-sel-minletter")?(this._selMinLtr=e,this._selMinLtr.options.length||(this._selMinLtr.innerHTML=[this._optGotMinLtr?"":'','','','','','','','','','',''].join(""),this._optGotMinLtr=this._optGotMinLtr||this._selMinLtr.options[0])):!this._optGotMinLtr&&e.classList.contains("dlr-opt-gotMinLtr")&&(this._optGotMinLtr=e);if(this.extraBindings&&this.extraBindings.length)for(let i of this.extraBindings)try{i(e)}catch(t){}}if(!this._video)throw this._unbindUI(),Error(`Can not find the video container element with class '${this.containerClassName}'`);this._isSingleFrameModeEnabled()||this.videoSrc?(this._isSingleFrameModeEnabled()&&(this._elContainer&&(this._elContainer.addEventListener("click",this._clickIptSingleFrameMode),this._elContainer.setAttribute("title","Take a photo")),this._bgCamera&&(this._bgCamera.style.display="block")),this._selCam&&(this._selCam.style.display="none"),this._selRsl&&(this._selRsl.style.display="none"),this._selMinLtr&&(this._selMinLtr.style.display="none")):(this._elContainer&&(["Android","HarmonyOS"].includes(k.OS)?(this._elContainer.addEventListener("touchend",this._tapDoFocus),this._elContainer.addEventListener("touchmove",this._touchMoveEvent)):this._elContainer.addEventListener("click",this._tapDoFocus)),this._selCam&&(this._selCam.style.display="block",this._selCam.addEventListener("change",this._onCameraSelChange)),this._selRsl&&(this._selRsl.style.display="block",this._selRsl.addEventListener("change",this._onResolutionSelChange)),this._selMinLtr&&(this._selMinLtr.style.display="block"),this._bgLoading&&(this._bgLoading.style.display="block")),this._btnClose&&this._btnClose.addEventListener("click",this._onCloseBtnClick),document.addEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&(this._resizeObserver||(this._resizeObserver=new ResizeObserver((t=>{for(let e of t)e.target===this._elContainer&&this._updateLayers()}))),this._elContainer&&this._resizeObserver.observe(this._elContainer)),this._windowWidth=document.documentElement.clientWidth,window.addEventListener("resize",this._windowResizeListener)}_unbindUI(){this._isSingleFrameModeEnabled()?(this._elContainer&&(this._elContainer.removeEventListener("click",this._clickIptSingleFrameMode),this._elContainer.removeAttribute("title")),this._bgCamera&&(this._bgCamera.style.display="none")):this._bgLoading&&(this._bgLoading.style.display="none"),this._elContainer&&(this._elContainer.removeEventListener("click",this._tapDoFocus),this._elContainer.removeEventListener("touchend",this._tapDoFocus),this._elContainer.removeEventListener("touchmove",this._touchMoveEvent)),this._selCam&&this._selCam.removeEventListener("change",this._onCameraSelChange),this._selRsl&&this._selRsl.removeEventListener("change",this._onResolutionSelChange),this._btnClose&&this._btnClose.removeEventListener("click",this._onCloseBtnClick),this.hideScanRegionLaser(),this.hideViewDecorator(),this.hideScanRegionOverlays(),this._drawingLayersManager.setVisible(!1),this._hideOriginalImageCvs(),this._videoContainer&&this._videoContainer.remove(),this._video=null,this._videoContainer=null,this._elContainer=null,this._selCam=null,this._selRsl=null,this._optGotRsl=null,this._btnClose=null,this._selMinLtr=null,this._optGotMinLtr=null,this._divScanArea=null,this._divScanLight=null,this._cvsScanRegion&&(this._cvsScanRegion.remove(),this._cvsScanRegion=null),this._singleFrameInputContainer&&(this._singleFrameInputContainer.remove(),this._singleFrameInputContainer=null),this._cvsSingleFrameMode&&(this._cvsSingleFrameMode.remove(),this._cvsSingleFrameMode=null),document.removeEventListener("visibilitychange",this._ev_documentHideEvent),window.ResizeObserver&&this._resizeObserver&&this._resizeObserver.disconnect(),window.removeEventListener("resize",this._windowResizeListener)}_assertOpen(){if(!this._bOpen)throw Error("The camera is not open.")}async open(t){this.UIElement||await this.setUIElement(it.defaultUIElementURL),this._bindUI(),t&&this.appendAndShowUI();let e=await this.play();this.bOpen=!0,this._focusParameters.fds=null,this._focusParameters.kTimeout=void 0,this._focusSupported=!0,this._tapFocusEnabled&&!this._isSingleFrameModeEnabled()&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,this._focusParameters.fds||(this._focusSupported=!1,this._tapFocusEnabled=!1));const i=this.mapCameraEvents.get("cameraopen");for(let t of i){if(!t)continue;const i=JSON.parse(JSON.stringify(e));setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[i])}),0)}return e}close(t){if(!this._video)return;this.stop(),this._hideOriginalImage(!1),this.hideTip(),this._unbindUI(),t&&this.hideUI(),this.stopFetchingLoop(),this.bOpen=!1;const e=this.mapCameraEvents.get("cameraclose");for(let t of e){if(!t)continue;const e={width:0,height:0,deviceId:null};setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this,[e])}),0)}}stop(){this._video&&this._video.srcObject&&(it._onLog&&it._onLog("DCE: ======stop video========"),this._video.srcObject.getTracks().forEach((t=>{t.stop()})),this._video.srcObject=null,this._videoTrack=null,this._currentCamera=null),this._video&&this.videoSrc&&(it._onLog&&it._onLog("DCE: ======stop existing video========"),this._video.pause(),this._video.currentTime=0),this._bgLoading&&(this._bgLoading.style.animationPlayState=""),this._frameQueue.length=0,this._reusedCvs&&this._reusedCvs.ctx2d&&this._reusedCvs.ctx2d.clearRect(0,0,this._reusedCvs.width,this._reusedCvs.height),this.forceLoseContext()}async getAllCameras(t=!0){let e=(await navigator.mediaDevices.enumerateDevices()).filter((t=>"videoinput"===t.kind));if(t&&e&&e.length&&!e[0].deviceId){let t=await navigator.mediaDevices.getUserMedia({video:!0});e=(await navigator.mediaDevices.enumerateDevices()).filter((t=>"videoinput"===t.kind)),t.getTracks().forEach((t=>{t.stop()}))}const i=[],r=[];if(this._allCameras)for(let t of this._allCameras)t._checked&&r.push(t);for(let t=0;t{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}if(r!==s.width||n!==s.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const t=this.mapCameraEvents.get("resolutionchange");for(let e of t){if(!e)continue;const t=JSON.parse(JSON.stringify(s));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}return s}getResolution(){if(this._bOpen)return[this._video.videoWidth,this._video.videoHeight];{let t=0,e=0;const i=this.videoSettings.video.width,r=this.videoSettings.video.height;return i&&(t=i.exact||i.ideal||i),r&&(e=r.exact||r.ideal||r),[t,e]}}async setResolution(t,e){let i,r;if(t instanceof Array?(i=t[0],r=t[1]):(i=t,r=e),this.videoSettings.video.width={ideal:i},this.videoSettings.video.height={ideal:r},!this._bOpen||this._video.paused)return null;const n=this._video.videoWidth,s=this._video.videoHeight,o=await this.play(null,i,r);if(n!==o.width||s!==o.height){this._updateScanRegionCanvas(),this._updateScanAreaDiv(),this._updateViewDecorator();for(let t of this._arrScanRegionOverlays)t&&this._updateScanRegionOverlay(t);this._updateDrawingLayersSize(),this._updateVideoContainerStyle();const t=this.mapCameraEvents.get("resolutionchange");for(let e of t){if(!e)continue;const t=JSON.parse(JSON.stringify(o));setTimeout((()=>{this.isDisposed&&this.disposed||e.apply(this,[t])}),0)}}return o}async getResolutions(t){var e,i;let r="";const n=(t,e)=>{const i=this._mapCameraResolutions.get(t);if(!i||!i.length)return!1;for(let t of i)if(t[0]===e.width&&t[1]===e.height)return!0;return!1},s=async(t,e,i)=>{const r={video:{deviceId:{exact:t},width:{ideal:e},height:{ideal:i}}};let n=null;try{n=await navigator.mediaDevices.getUserMedia(r)}catch(t){return null}if(!n)return null;const s=n.getVideoTracks();let o=null;try{const t=s[0].getSettings();o={width:t.width,height:t.height}}catch(t){const e=document.createElement("video");e.srcObject=n,o={width:e.videoWidth,height:e.videoHeight},e.srcObject=null}return s.forEach((t=>{t.stop()})),o};if(!this._bOpen){const o=null===(i=null===(e=this.videoSettings)||void 0===e?void 0:e.video)||void 0===i?void 0:i.deviceId;if(!o)return null;if(r=o.hasOwnProperty("exact")?this.videoSettings.video.deviceId.exact:o.hasOwnProperty("ideal")?this.videoSettings.video.deviceId.ideal:this.videoSettings.video.deviceId,!r)return null;let a=this._mapCameraResolutions.get(r);if(a&&!t)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),a=this._mapCameraResolutions.get(r);for(let t of this._predefinedResolutions){const e=await s(r,t.width,t.height);e&&!n(r,e)&&a.push([e.width,e.height])}return a}if(this._currentCamera){r=this._currentCamera.deviceId;let e=this._mapCameraResolutions.get(r);if(e&&!t)return this._mapCameraResolutions.get(r);this._mapCameraResolutions.set(r,[]),e=this._mapCameraResolutions.get(r);let i=this._videoTrack;for(let t of this._predefinedResolutions){await i.applyConstraints({width:{ideal:t.width},height:{ideal:t.height}});const s=i.getSettings(),o={width:s.width,height:s.height};n(r,o)||e.push([o.width,o.height])}return this._video.srcObject.getTracks().forEach((t=>{t.stop()})),await this.play(r,null,null,{notTriggerPlayedEvent:!0}),e}return null}on(t,e){if(!e)return;const i=this.mapCameraEvents.get(t.toLowerCase());if(!i)throw new Error(`Event '${t}' does not exist.`);i.includes(e)||i.push(e)}off(t,e){const i=this.mapCameraEvents.get(t.toLowerCase());if(!i)throw new Error(`Event '${t}' does not exist.`);const r=i.indexOf(e);-1!==r&&i.splice(r,1)}offAll(t){if(t){if("string"==typeof t){const e=this.mapCameraEvents.get(t);e&&(e.length=0)}}else for(let t of this.mapCameraEvents.values())t&&(t.length=0)}getVideoSettings(){return JSON.parse(JSON.stringify(this.videoSettings))}updateVideoSettings(t){if(this.videoSettings=JSON.parse(JSON.stringify(t)),this._lastDeviceId=null,this._bOpen)return this.play()}isOpen(){return this._bOpen}getCapabilities(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCapabilities()' is unavailable in singleFrameMode.");return this._videoTrack&&this._videoTrack.getCapabilities?this._videoTrack.getCapabilities():{}}getCameraSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getCameraSettings()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings():null}getConstraints(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getConstraints()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getConstraints():null}async applyConstraints(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'applyConstraints()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error('"_videoTrack" is null.');if(!this._videoTrack.applyConstraints)throw Error("Not supported.");return await this._videoTrack.applyConstraints(t)}async turnOnTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOnTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!0}]});throw Error("Not supported.")}async turnOffTorch(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'turnOffTorch()' is unavailable in singleFrameMode.");if(this.getCapabilities().torch)return await this._videoTrack.applyConstraints({advanced:[{torch:!1}]});throw Error("Not supported.")}async setColorTemperature(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setColorTemperature()' is unavailable in singleFrameMode.");let e=this.getCapabilities().colorTemperature;if(!e)throw Error("Not supported.");return te.max&&(t=e.max),await this._videoTrack.applyConstraints({advanced:[{colorTemperature:t,whiteBalanceMode:"manual"}]})}getColorTemperature(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getColorTemperature()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().colorTemperature||0:null}async setExposureCompensation(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setExposureCompensation()' is unavailable in singleFrameMode.");let e=this.getCapabilities().exposureCompensation;if(!e)throw Error("Not supported.");return te.max&&(t=e.max),await this._videoTrack.applyConstraints({advanced:[{exposureCompensation:t}]})}getExposureCompensation(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getExposureCompensation()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().exposureCompensation||0:null}async _setHardwareScale(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setHardwareScale()' is unavailable in singleFrameMode.");if(t<1)throw new RangeError("Invalid value.");if(!this._videoTrack)return;const e=this.getCapabilities().zoom;if(!e)throw new Error("Not supported.");return te.max&&(t=e.max),t=et(t,e.min,e.step,e.max),await this._videoTrack.applyConstraints({advanced:[{zoom:t}]}),t}_getHardwareScale(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().zoom||1:null}_setSoftwareScale(t,e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setSoftwareScale()' is unavailable in singleFrameMode.");if(t<1)throw new RangeError("Invalid value.");e&&this._setScaleCenter(e),this._softwareScale=t,this._scaleVideo(t,e)}_getSoftwareScale(){return this._softwareScale}_setScaleCenter(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_setScaleCenter()' is unavailable in singleFrameMode.");if(!t||"string"!=typeof t.x||"string"!=typeof t.y)throw new Error("Invalid center.");const e=this._video.videoWidth,i=this._video.videoHeight;let r=0,n=0;if(t.x.endsWith("px"))r=parseFloat(t.x);else{if(!t.x.endsWith("%"))throw new Error("Invalid scale center.");r=parseFloat(t.x)/100*e}if(t.y.endsWith("px"))n=parseFloat(t.y);else{if(!t.y.endsWith("%"))throw new Error("Invalid scale center.");n=parseFloat(t.y)/100*i}if(NaN==r||NaN==n)throw new Error("Invalid scale center.");this._scaleCenter={x:r,y:n}}_resetScaleCenter(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_resetScaleCenter()' is unavailable in singleFrameMode.");const t=this._video.videoWidth,e=this._video.videoHeight;this._scaleCenter={x:t/2,y:e/2}}_isVideoCenter(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_isVideoCenter()' is unavailable in singleFrameMode.");return t&&t.x==this._video.videoWidth/2&&t.y==this._video.videoHeight/2}async _setZoom(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(t<1)throw new RangeError("Invalid value.");this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const e=await this._setHardwareScale(t);let i=this._getHardwareScale();1==i&&1!=e&&(i=e),t>i?this._setSoftwareScale(t/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(t)}catch(e){if("Not supported."!==(e.message||e))throw e;this._setSoftwareScale(t)}}async setZoom(t){if("number"!=typeof t&&"object"!=typeof t)throw new TypeError("Illegal type of argument.");if("number"==typeof t)return this._setZoom(t);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setZoom()' is unavailable in singleFrameMode.");if(t){if("number"!=typeof t.factor)throw new TypeError("Illegal type of 'factor'.");if(t.factor<1)throw new RangeError("Invalid value.");t.centerPoint?this._setScaleCenter(t.centerPoint):this._resetScaleCenter();try{if(this._isVideoCenter(this._scaleCenter)){const e=await this._setHardwareScale(t.factor);let i=this._getHardwareScale();1==i&&1!=e&&(i=e),t.factor>i?this._setSoftwareScale(t.factor/i):this._setSoftwareScale(1)}else await this._setHardwareScale(1),this._setSoftwareScale(t.factor)}catch(e){if("Not supported."!==(e.message||e))throw e;this._setSoftwareScale(t.factor)}}}getZoom(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?this._getHardwareScale()*this._softwareScale:null}getZoomSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getZoom()' is unavailable in singleFrameMode.");return this._videoTrack?{factor:this._getHardwareScale()*this._softwareScale}:null}async resetZoom(){await this.setZoom({factor:1})}async setFrameRate(t){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFrameRate()' is unavailable in singleFrameMode.");let e=this.getCapabilities().frameRate;if(!e)throw Error("Not supported.");return te.max&&(t=e.max),await this._videoTrack.applyConstraints({width:{ideal:Math.max(this._video.videoWidth,this._video.videoHeight)},frameRate:t})}getFrameRate(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrameRate()' is unavailable in singleFrameMode.");return this._videoTrack?this._videoTrack.getSettings().frameRate:null}async _setFocus(t,e){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if("string"!=typeof t)throw Error("Invalid focus mode.");t=t.toLowerCase();const i=this.getCapabilities().focusMode,r=this.getCapabilities().focusDistance;if(!i)throw Error("Not supported.");if(!i.includes(t))throw Error("Unsupported mode.");if(e>=0){if(!r)throw Error("Manual focus unsupported.");return er.max&&(e=r.max),e=et(e,r.min,r.step,r.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:t,focusDistance:e}]})}return await this._videoTrack.applyConstraints({advanced:[{focusMode:t}]})}async setFocus(t,e){if("string"==typeof t)return this._setFocus(t,e);if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'setFocus()' is unavailable in singleFrameMode.");if(!t)return;const i=this.getCapabilities(),r=i.focusMode,n=i.focusDistance;if(!r)throw Error("Not supported.");if("string"!=typeof t.mode)throw Error("Invalid focus mode.");const s=t.mode.toLowerCase();if(!r.includes(s))throw Error("Unsupported focus mode.");if("manual"!==s)return this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s}]});if(!n)throw Error("Manual focus unsupported.");if(t.hasOwnProperty("distance")){let e=t.distance;return en.max&&(e=n.max),e=et(e,n.min,n.step,n.max),this._focusParameters._focusArea=null,await this._videoTrack.applyConstraints({advanced:[{focusMode:s,focusDistance:e}]})}if(!t.area)throw new Error("'distance' or 'area' should be specified in 'manual' mode.");{const e=t.area.centerPoint;let i=t.area.width,r=t.area.height;if(!i||!r){const t=this._video.videoWidth,e=this._video.videoHeight;i||(i=2*Math.round(Math.min(t,e)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px"),r||(r=2*Math.round(Math.min(t,e)/this._focusParameters.defaultFocusAreaSizeRatio/2)+"px")}this._focusParameters._focusArea={centerPoint:{x:e.x,y:e.y},width:i,height:r},await this._setLocalFocus(e,i,r)}}getFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const t=this._videoTrack.getSettings().focusMode;return t?"continuous"===t?{mode:t}:{mode:t,distance:this._videoTrack.getSettings().focusDistance}:null}getFocusSettings(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'_getHardwareScale()' is unavailable in singleFrameMode.");if(!this._videoTrack)return null;const t=this._videoTrack.getSettings(),e=t.focusMode;return e?"manual"===e?this._focusParameters._focusArea?{mode:"manual",area:JSON.parse(JSON.stringify(this._focusParameters._focusArea))}:{mode:"manual",distance:t.focusDistance}:{mode:e}:null}async _setFocusAndGetContract(t,e){const i=t=>{if(!this._bOpen||!this._videoTrack||this.video.paused||t.focusTaskId!=this._focusParameters.curFocusTaskId){this._bOpen&&this._videoTrack&&!this.video.paused||(this._focusParameters.isDoingFocus=0);const e=new Error(`Focus task ${t.focusTaskId} canceled.`);throw e.name="DeprecatedTaskError",e}1===this._focusParameters.isDoingFocus&&Date.now()-t.timeStart>this._focusParameters.focusCancelableTime&&(this._focusParameters.isDoingFocus=-1)};let r;e=et(e,this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),await this._videoTrack.applyConstraints({advanced:[{focusMode:"manual",focusDistance:e}]}),i(t),r=null==this._focusParameters.oldDistance?this._focusParameters.kTimeout*Math.max(Math.abs(1/this._focusParameters.fds.min-1/e),Math.abs(1/this._focusParameters.fds.max-1/e))+this._focusParameters.minTimeout:this._focusParameters.kTimeout*Math.abs(1/this._focusParameters.oldDistance-1/e)+this._focusParameters.minTimeout,this._focusParameters.oldDistance=e,await new Promise((t=>{setTimeout(t,r)})),i(t);let n=t.focusL-t.focusW/2,s=t.focusT-t.focusH/2,o=t.focusW,a=t.focusH;if(n>=this.video.videoWidth||s>=this.video.videoHeight)throw new Error("Invalid area.");n+o>this.video.videoWidth&&(o=this.video.videoWidth-n),s+a>this.video.videoHeight&&(a=this.video.videoHeight-s);const h=this._getImageData(this.video,this.video.videoWidth,this.video.videoHeight,{sx:n,sy:s,sWidth:o,sHeight:a,dWidth:o,dHeight:a},null,{pixelFormat:tt.RGBA});if(!h)return this._setFocusAndGetContract(t,e);const l=h.data;let c=0;for(let t=0,e=l.length-8;to&&oc)return await this._doFocusDetail(t,s,o,r,n,l,c)}else{let a=await this._setFocusAndGetContract(t,l);if(o>a)return await this._doFocusDetail(t,s,o,r,n,l,a);if(o==a)return await this._doFocusDetail(t,s,o,l,a);let c=await this._setFocusAndGetContract(t,h);if(c>o&&o{try{(null==e||ethis._focusParameters.fds.max)&&(i=this._focusParameters.fds.max),this._focusParameters.oldDistance=null;let r=et(Math.sqrt(i*(e||this._focusParameters.fds.step)),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),n=et(Math.sqrt((e||this._focusParameters.fds.step)*r),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),s=et(Math.sqrt(r*i),this._focusParameters.fds.min,this._focusParameters.fds.step,this._focusParameters.fds.max),o=await this._setFocusAndGetContract(t,s),a=await this._setFocusAndGetContract(t,n),h=await this._setFocusAndGetContract(t,r);if(a>h&&ho&&a>o){let e=await this._setFocusAndGetContract(t,i);const n=await this._doFocusDetail(t,r,h,i,e,s,o);return this._focusParameters.isDoingFocus=0,n}if(a==h&&hh){const e=await this._doFocusDetail(t,r,h,s,o);return this._focusParameters.isDoingFocus=0,e}return d(t,e,i)}catch(t){if("DeprecatedTaskError"!==t.name)throw t}};return d(u,r,n)}async enableTapToFocus(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'enableTapToFocus()' is unavailable in singleFrameMode.");if(!this._videoTrack)throw new Error("Video is not playing.");if(!this._focusSupported)throw new Error("Tapping to focus unsupported.");if(!this._focusParameters.fds&&(this._focusParameters.fds=(await this.getCapabilities()).focusDistance,!this._focusParameters.fds))throw this._focusSupported=!1,this._tapFocusEnabled=!1,new Error("Tapping to focus unsupported.");this._tapFocusEnabled=!0}disableTapToFocus(){this._tapFocusEnabled=!1}isTapToFocusEnabled(){return this._tapFocusEnabled}_updateVideoContainerStyle(){if(!this._video)return;if(this._isSingleFrameModeEnabled())return;const t=this._getSoftwareScale(),e=this._videoContainer;if("contain"===this.videoFit&&t>1){const t=this._video.videoWidth,i=this._video.videoHeight,r=window.getComputedStyle(this._elContainer),n=parseFloat(r.width),s=parseFloat(r.height),o=t/i;if(n/sa?o/(i/t):s/(r/t));const c=l*(1-1/t)*(i/2-this._scaleCenter.x),u=l*(1-1/t)*(r/2-this._scaleCenter.y);this._video.style.transform=`translate(${c}px, ${u}px) scale(${t})`}this._updateVideoContainerStyle()}}getFrameSize(t,e,i,r){if(!t||!e)return null;let n,s,o,a,h=t,l=e;const c={regionLeft:0,regionTop:0,regionRight:h,regionBottom:l,regionMeasuredByPercentage:!1};i?(i.regionMeasuredByPercentage?(c.regionLeft=i.regionLeft*h/100,c.regionTop=i.regionTop*l/100,c.regionRight=i.regionRight*h/100,c.regionBottom=i.regionBottom*l/100):(c.regionLeft=i.regionLeft,c.regionTop=i.regionTop,c.regionRight=i.regionRight,c.regionBottom=i.regionBottom),n=Math.round(c.regionLeft),s=Math.round(c.regionTop),h=Math.round(c.regionRight-c.regionLeft),l=Math.round(c.regionBottom-c.regionTop)):(n=0,s=0,h=Math.round(h),l=Math.round(l));const u=Math.max(h,l);if(r&&r>0&&u>r){const t=r/u;h>l?(o=r,a=Math.round(l*t)):(o=Math.round(h*t),a=r)}else o=h,a=l;return o<=0||a<=0?null:{sx:n,sy:s,sWidth:h,sHeight:l,dWidth:o,dHeight:a}}getFrame(){if(this._assertOpen(),this._isSingleFrameModeEnabled())throw new Error("'getFrame()' is unavailable in singleFrameMode.");return this._getVideoData()}getImage(){return this.getFrame()}_drawImage(t,e,i,r,n,s,o){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(!i||!r)return null;if(e instanceof HTMLVideoElement&&4!==e.readyState||e instanceof HTMLImageElement&&!e.complete)throw new Error("The source is not loaded.");let a;it._onLog&&(a=Date.now(),it._onLog("DCE: _drawImage(), START: "+a));let h=0,l=0,c=i,u=r,d=0,f=0,g=i,_=r;n&&(n.sx&&(h=Math.round(n.sx)),n.sy&&(l=Math.round(n.sy)),n.sWidth&&(c=Math.round(n.sWidth)),n.sHeight&&(u=Math.round(n.sHeight)),n.dx&&(d=Math.round(n.dx)),n.dy&&(f=Math.round(n.dy)),n.dWidth&&(g=Math.round(n.dWidth)),n.dHeight&&(_=Math.round(n.dHeight)));let p=tt.RGBA;o&&o.pixelFormat&&(p=o.pixelFormat);const m=t;if(!o||!o.bUseWebGL){it._onLog&&it._onLog("DCE: _drawImage() in context2d."),m.ctx2d||(m.ctx2d=m.getContext("2d",{willReadFrequently:!0}));const t=m.ctx2d;if(!t)throw new Error("Unable to get 'CanvasRenderingContext2D' from canvas.");return(m.width{const e=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,e),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),t.STATIC_DRAW);const i=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,i),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,0,0,1,1,1]),t.STATIC_DRAW),{positions:e,texCoords:i}},i=t=>{const e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e},r=(t,e)=>{const i=t.createProgram();if(e.forEach((e=>t.attachShader(i,e))),t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){const e=new Error(`An error occured linking the program: ${t.getProgramInfoLog(i)}.`);throw e.name="WebGLError",e}return t.useProgram(i),i},n=(t,e,i)=>{const r=t.createShader(e);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS)){const e=new Error(`An error occured compiling the shader: ${t.getShaderInfoLog(r)}.`);throw e.name="WebGLError",e}return r},s="\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n \n uniform mat3 u_matrix;\n uniform mat3 u_textureMatrix;\n \n varying vec2 v_texCoord;\n void main(void) {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1.0);\n v_texCoord = vec4((u_textureMatrix * vec3(a_texCoord, 1)).xy, 0, 1.0).xy;\n }\n ";let o="rgb";["rgba","rbga","grba","gbra","brga","bgra"].includes(p)&&(o=p.slice(0,3));const a=`\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_image;\n uniform float uColorFactor;\n \n void main() {\n vec4 sample = texture2D(u_image, v_texCoord);\n float grey = 0.21 * sample.r + 0.71 * sample.g + 0.07 * sample.b;\n gl_FragColor = vec4(sample.${o} * (1.0 - uColorFactor) + (grey * uColorFactor), sample.a);\n }\n `,h=r(t,[n(t,t.VERTEX_SHADER,s),n(t,t.FRAGMENT_SHADER,a)]);this._webGLProgramInfo={program:h,attribLocations:{vertexPosition:t.getAttribLocation(h,"a_position"),texPosition:t.getAttribLocation(h,"a_texCoord")},uniformLocations:{uSampler:t.getUniformLocation(h,"u_image"),uColorFactor:t.getUniformLocation(h,"uColorFactor"),uMatrix:t.getUniformLocation(h,"u_matrix"),uTextureMatrix:t.getUniformLocation(h,"u_textureMatrix")}},this._webGLBuffers=e(t),this._webGLTexture=i(t),this.shaderPixelFormat=p}const n=(t,e,i)=>{t.bindBuffer(t.ARRAY_BUFFER,e),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,2,t.FLOAT,!1,0,0)},o=(t,e,i)=>{const r=t.RGBA,n=t.RGBA,s=t.UNSIGNED_BYTE;t.bindTexture(t.TEXTURE_2D,e),t.texImage2D(t.TEXTURE_2D,0,r,n,s,i)},v=(t,e,s,o)=>{t.clearColor(0,0,0,1),t.clearDepth(1),t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),n(t,s.positions,e.attribLocations.vertexPosition),n(t,s.texCoords,e.attribLocations.texPosition),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,o),t.uniform1i(e.uniformLocations.uSampler,0),t.uniform1f(e.uniformLocations.uColorFactor,[tt.GREY,tt.GREY32].includes(p)?1:0);let a,m,v=$.translate($.identity(),-1,-1);v=$.scale(v,2,2),v=$.scale(v,1/t.canvas.width,1/t.canvas.height),a=$.translate(v,d,f),a=$.scale(a,g,_),t.uniformMatrix3fv(e.uniformLocations.uMatrix,!1,a),m=$.translate($.identity(),h/i,l/r),m=$.scale(m,c/i,u/r),t.uniformMatrix3fv(e.uniformLocations.uTextureMatrix,!1,m),t.drawArrays(t.TRIANGLES,0,6)};let y;if(o(t,this._webGLTexture,e),v(t,this._webGLProgramInfo,this._webGLBuffers,this._webGLTexture),s){if(s.lengthe||r.sy>i||r.sx+r.sWidth>e||r.sy+r.sHeight>i)throw new Error("Invalid position.");if(t instanceof HTMLVideoElement&&4!==t.readyState||t instanceof HTMLImageElement&&!t.complete)throw new Error("The source is not loaded.");let o;it._onLog&&(o=Date.now(),it._onLog("DCE: _getImageData(), START: "+o));const a=Math.round(r.sx),h=Math.round(r.sy),l=Math.round(r.sWidth),c=Math.round(r.sHeight),u=Math.round(r.dWidth),d=Math.round(r.dHeight);let f=tt.RGBA;s&&s.pixelFormat&&(f=s.pixelFormat);let g,_,p,m=this._bWebGLSupported;s&&0==s.bUseWebGL&&(m=!1),m?(this._reusedWebGLCvs||(this._reusedWebGLCvs=document.createElement("canvas")),g=this._reusedWebGLCvs):(this._reusedCvs||(this._reusedCvs=document.createElement("canvas")),g=this._reusedCvs);try{if(m)if(it._onLog&&it._onLog("DCE: _getImageData() in WebGL."),n)if(f===tt.GREY){if(p=new Uint8Array(u*d*4),_=this._drawImage(g,t,e,i,{sx:a,sy:h,sWidth:l,sHeight:c,dWidth:u,dHeight:d},p,{pixelFormat:f,bUseWebGL:m}),p=this._transformPixelFormat(p,_.pixelFormat,f),n){if(n.length=this.croppingRegions.length||this._croppingRegionIndex<0)throw new Error("The 'croppingRegionIndex' is out of bounds.");t=this.croppingRegions[this._croppingRegionIndex],this.bIncreaseRegionIndexAuto&&++this._croppingRegionIndex>=this.croppingRegions.length&&(this._croppingRegionIndex=0)}return t}_fetchingLoop(t){if(this.isDisposed&&this.disposed)return;if(!this._bOpen||!this.isFetchingLoopStarted())return void this.stopFetchingLoop();const e=()=>{it._onLog&&it._onLog("DCE: start fetching a frame into buffer: "+Date.now());const t=this.getCurrentRegion();let e=this._getVideoData(null,{region:t});if(!e)return void(it._onLog&&it._onLog("DCE: get a invalid frame, abandon it: "+Date.now()));for(;this._frameQueue&&this._frameQueue.length>=this.maxNumberOfFramesInBuffer;)this._frameQueue.shift();this._frameQueue.push(e),it._onLog&&it._onLog("DCE: finish fetching a frame into buffer: "+Date.now());const i=this.mapCameraEvents.get("frameaddedtobuffer");for(let t of i)t&&setTimeout((()=>{this.isDisposed&&this.disposed||t.apply(this)}),0)},i=()=>{this.isDisposed&&this.disposed||(this._frameLoopTimeoutId2&&clearTimeout(this._frameLoopTimeoutId2),this.refreshInterval<=0||(this._frameLoopTimeoutId2=setTimeout((()=>{this.isDisposed&&this.disposed||(this._bOpen&&this.isFetchingLoopStarted()?(it._onLog&&it._onLog("DCE: second timeout executes: "+Date.now()),e(),i()):this.stopFetchingLoop())}),this.refreshInterval)))};t&&(this._frameQueue.length0&&i()):0===this.refreshInterval&&e()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameLoopTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._fetchingLoop(!0)}),this.loopInterval)}startFetchingLoop(){if(this.isDisposed&&this.disposed)throw Error("The 'CameraEnhancer' instance has been disposed.");if(this._assertOpen(),this._isSingleFrameModeEnabled())throw Error("'startFetchingLoop()' is unavailable in singleFrameMode.");this.isFetchingLoopStarted()||(this._bFetchingLoopStarted=!0,this._recordedStates.fetchingLoopStart=!0,it._onLog&&it._onLog("DCE: start fetching loop: "+Date.now()),this._fetchingLoop(!0))}isFetchingLoopStarted(){return this._bFetchingLoopStarted}stopFetchingLoop(){this._bFetchingLoopStarted&&(it._onLog&&it._onLog("DCE: stop fetching loop: "+Date.now()),this._frameLoopTimeoutId&&clearTimeout(this._frameLoopTimeoutId),this._frameQueue.length=0,this._bFetchingLoopStarted=!1,this._recordedStates.fetchingLoopStart=!1)}getFrameFromBuffer(t){return this._frameQueue&&this._frameQueue.length?t?tt.getId()>=0))}getSelectedDrawingItems(){return this._drawingLayersManager.getSelectedDrawingItems()}createDrawingStyle(t){return this._drawingLayersManager.createDrawingStyle(t)}getDrawingStyle(t){return this._drawingLayersManager.getDrawingStyle(t)}getDrawingStyles(){return this._drawingLayersManager.getDrawingStyles()}updateDrawingStyle(t,e){return this._drawingLayersManager.updateDrawingStyle(t,e)}clearDrawingLayers(){const t=this.getDrawingLayers();for(let e of t)this.deleteDrawingLayer(e.getId())}showTip(t,e,i,r,n=3e3,s=!0){this._assertOpen(),this._tipArgs.x=t,this._tipArgs.y=e,this._tipArgs.width=i,this._tipArgs.autoShowSuggestedTip=!!s,this._drawingLayerOfTip||(this._drawingLayerOfTip=this._createDrawingLayer(-1)),this._tipStyleId||(this._tipStyleId=this.createDrawingStyle({fillStyle:"#FFFFFF",paintMode:"fill",fontFamily:"Open Sans",fontSize:40})),this._drawingLayerOfTip.clearDrawingItems();const o=new J(r||"",t,e,i,this._tipStyleId);o._fabricObject.paddingTop=15,o._fabricObject.calcTextHeight=function(){for(var t=0,e=0,i=this._textLines.length;e0&&(this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}_hideTip(){this._drawingLayerOfTip&&(this.deleteDrawingLayer(this._drawingLayerOfTip.getId()),this._drawingLayerOfTip=null,this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId))}hideTip(){this._hideTip(),this._tipArgs.x=null,this._tipArgs.y=null,this._tipArgs.width=null,this._tipArgs.autoShowSuggestedTip=null}updateTipMessage(t){if(!this._drawingLayerOfTip)throw new Error("The Tip is not showing.");this._drawingLayerOfTip.getDrawingItems()[0].setAttribute("text",t),this._drawingLayerOfTip.renderAll(),this._tipArgs.duration>0&&(this._hideTipTimeoutId&&clearTimeout(this._hideTipTimeoutId),this._hideTipTimeoutId=setTimeout((()=>{this.isDisposed&&this.disposed||this._hideTip()}),this._tipArgs.duration))}suggestTip(t,e){this._tipArgs.autoShowSuggestedTip&&(this._drawingLayerOfTip?this.updateTipMessage(e):void 0!==this._tipArgs.x&&this.showTip(this._tipArgs.x,this._tipArgs.y,this._tipArgs.width,e,this._tipArgs.duration)),this.onTipSuggested&&setTimeout((()=>{this.isDisposed&&this.disposed||this.onTipSuggested.apply(this,[t,e])}),0)}_createControler(){if(this._controler||(this._controler=new Q(this)),this._controler)return this._controler}_destroyControler(){this._controler=null}setOriginalImage(t,e,i){if(!t||!e||!i)throw new Error("Invalid arguments");this._originalImageData={imageData:t,width:e,height:i};let r=this._cvsOriginalImage;r||(r=document.createElement("canvas"),r.style.position="absolute",r.style.width="100%",r.style.height="100%",r.style.left="0",r.style.top="0",r.style.backgroundColor="white",r.style.objectFit="contain",this._cvsOriginalImage=r),r.width===e&&r.height===i||(r.width=e,r.height=i);const n=r.getContext("2d");n.clearRect(0,0,r.width,r.height),t instanceof Uint8Array||t instanceof Uint8ClampedArray?(t instanceof Uint8Array&&(t=new Uint8ClampedArray(t.buffer)),n.putImageData(new ImageData(t,e,i),0,0)):t instanceof HTMLCanvasElement&&n.drawImage(t,0,0),document.body.contains(r)&&""===r.style.display&&this._updateDrawingLayersSize({width:e,height:i,objectFit:"contain"})}getOriginalImage(){return this._originalImageData?Object.assign({},this._originalImageData):null}async deleteOriginalImage(){await this.hideOriginalImage(),this._cvsOriginalImage&&(this._cvsOriginalImage.remove(),this._cvsOriginalImage=null),this._originalImageData=null}_showOriginalImageCvs(){this._cvsOriginalImage&&"none"==this._cvsOriginalImage.style.display&&(this._cvsOriginalImage.style.display="")}_hideOriginalImageCvs(){this._cvsOriginalImage&&(this._cvsOriginalImage.style.display="none")}showOriginalImage(){if(!this._originalImageData)throw new Error("No original image is set.");const t=this._cvsOriginalImage;if(""===t.style.display&&document.body.contains(t))return;const{width:e,height:i}=this._originalImageData;if(this._updateDrawingLayersSize({width:e,height:i,objectFit:"contain"}),this._bOpen&&(this._video&&!this._video.paused&&this._video.pause(),this._bFetchingLoopStarted&&(this.stopFetchingLoop(),this._recordedStates.fetchingLoopStart=!0),this.ifShowScanRegionMask&&this._cvsScanRegion&&(this._cvsScanRegion.style.display="none"),this.ifShowScanRegionLaser&&this._divScanLight&&(this._divScanLight.style.display="none"),this._cvsViewDecorator&&(this._cvsViewDecorator.style.display="none"),this._scanRegionOverlayContainer&&(this._scanRegionOverlayContainer.style.display="none"),this._selCam&&(this._selCam.parentElement.style.display="none")),!document.body.contains(t))if(this._cvsSingleFrameMode)this._cvsSingleFrameMode.after(t);else{if(!this._videoContainer)throw new Error("Unable to find video element");this._videoContainer.after(t)}this._showOriginalImageCvs()}async _hideOriginalImage(t){this._originalImageData&&this._cvsOriginalImage&&"none"!==this._cvsOriginalImage.style.display&&(this._updateDrawingLayersSize(),this._bOpen&&t&&(this._video&&this._recordedStates.videoPlaying&&await this.play(null,null,null,{notTriggerSingleFrameClick:!0}),this._recordedStates.fetchingLoopStart&&!this._isSingleFrameModeEnabled()&&this.startFetchingLoop(),this.ifShowScanRegionMask&&this._cvsScanRegion&&this._recordedStates.maskShow&&this.showScanRegionMask(),this.ifShowScanRegionLaser&&this._divScanLight&&this._recordedStates.laserShow&&this.showScanRegionLaser(),this._cvsViewDecorator&&this._recordedStates.decoratorShow&&this.showViewDecorator(),this._scanRegionOverlayContainer&&this._recordedStates.overlayShow&&this.showScanRegionOverlays()),this._selCam&&(this._selCam.parentElement.style.display=""),this._hideOriginalImageCvs())}async hideOriginalImage(){return this._hideOriginalImage(!0)}transformCoord(t){if(!this.isOpen())throw new Error("Unavailable when the camera is not open.");if(this._isSingleFrameModeEnabled()&&!this._cvsSingleFrameMode)throw new Error("No image is selected. ");const e=this._elContainer.getBoundingClientRect();let i,r,n,s,o,a=e.left,h=e.top,l=a+window.scrollX,c=h+window.scrollY;this._isSingleFrameModeEnabled()?(i=this._cvsSingleFrameMode.width,r=this._cvsSingleFrameMode.height,n=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).width),s=parseFloat(window.getComputedStyle(this._cvsSingleFrameMode).height),o="contain"):(i=this.video.videoWidth,r=this.video.videoHeight,n=parseFloat(window.getComputedStyle(this._elContainer).width),s=parseFloat(window.getComputedStyle(this._elContainer).height),o=this.videoFit);const u=n/s,d=i/r;let f,g,_,p,m=1;if("contain"===o)u({x:e.x-t.left-t.width/2,y:e.y-t.top-t.height/2}))),t.addWithUpdate()}else i.points=e;const r=i.points.length-1;return i.controls=i.points.reduce((function(t,e,i){return t["p"+i]=new D.Control({positionHandler:W,actionHandler:X(i>0?i-1:r,Y),actionName:"modifyPolygon",pointIndex:i}),t}),{}),i._setPositionDimensions({}),!0}}_extendGet(t){if("startPoint"===t||"endPoint"===t){const e=[],i=this._fabricObject;if(i.selectable&&!i.group)for(let t in i.oCoords)e.push({x:i.oCoords[t].x,y:i.oCoords[t].y});else for(let t of i.points){let r=t.x-i.pathOffset.x,n=t.y-i.pathOffset.y;const s=D.util.transformPoint({x:r,y:n},i.calcTransformMatrix());e.push({x:s.x,y:s.y})}return"startPoint"===t?e[0]:e[1]}}},DT_Group:class extends G{constructor(t){super(new D.Group(t.map((t=>t._getFabricObject())))),this._fabricObject.on("selected",(()=>{this.styleSelector="selected";const t=this._fabricObject._objects;for(let e of t)setTimeout((()=>{e&&e.fire("selected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)})),this._fabricObject.on("deselected",(()=>{this.styleSelector="default";const t=this._fabricObject._objects;for(let e of t)setTimeout((()=>{e&&e.fire("deselected")}),0);setTimeout((()=>{this._fabricObject&&this._fabricObject.canvas&&(this._fabricObject.dirty=!0,this._fabricObject.canvas.renderAll())}),0)}))}getChildItems(){return this._fabricObject._objects.map((t=>t.getDrawingItem()))}addChildItem(t){if(!t||!t.isDrawingItem)throw TypeError("Illegal drawing item.");this._drawingLayer?this._drawingLayer._updateGroupItem(this,t,"add"):this._fabricObject.addWithUpdate(t._getFabricObject())}removeChildItem(t){t&&t.isDrawingItem&&(this._drawingLayer?this._drawingLayer._updateGroupItem(this,t,"remove"):this._fabricObject.removeWithUpdate(t._getFabricObject()))}}};function nt(t,e,i){return(i.x-t.x)*(e.y-t.y)==(e.x-t.x)*(i.y-t.y)&&Math.min(t.x,e.x)<=i.x&&i.x<=Math.max(t.x,e.x)&&Math.min(t.y,e.y)<=i.y&&i.y<=Math.max(t.y,e.y)}function st(t){return Math.abs(t)<1e-6?0:t<0?-1:1}function ot(t,e,i,r){let n=t[0]*(i[1]-e[1])+e[0]*(t[1]-i[1])+i[0]*(e[1]-t[1]),s=t[0]*(r[1]-e[1])+e[0]*(t[1]-r[1])+r[0]*(e[1]-t[1]);return!((n^s)>=0&&0!==n&&0!==s)&&(n=i[0]*(t[1]-r[1])+r[0]*(i[1]-t[1])+t[0]*(r[1]-i[1]),s=i[0]*(e[1]-r[1])+r[0]*(i[1]-e[1])+e[0]*(r[1]-i[1]),!((n^s)>=0&&0!==n&&0!==s))}var at,ht,lt,ct,ut,dt,ft,gt,_t,pt,mt,vt,yt,St,Ct,wt,bt,xt,Tt,Et,It,Ot,Rt,Dt,At,Mt,Lt,Ft;class Pt extends T{constructor(){super(),this._barcodeFillStyle="rgba(254,180,32,0.3)",this._barcodeStrokeStyle="rgba(254,180,32,0.9)",this._barcodeLineWidth=1,this._barcodeFillStyleBeforeVerification="rgba(248,252,0,0.2)",this._barcodeStrokeStyleBeforeVerification="transparent",this._barcodeLineWidthBeforeVerification=2,this.bFilterRegionInJs=!0,this._onPlayed=null}static set _onLog(t){!function(t,e,i,r,n){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===r?n.call(t,i):n?n.value=i:e.set(t,i)}(Pt,at,t,"f",ht),it._onLog=t}static get _onLog(){return function(t,e,i,r){if("a"===i&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?r:"a"===i?r.call(t):r?r.value:e.get(t)}(Pt,at,"f",ht)}static get version(){return this._version+`(DCE ${it.getVersion()})`}static _fireHTTPSWarnning(){Pt.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{Pt.onWarning&&Pt.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}static async testCameraAccess(){return it.testCameraAccess()}_fireResolutionWarning(){if(!this.singleFrameMode&&this.onWarning&&this.dce.isOpen()){const t=this.dce.getConstraints();t&&t.width<1280&&t.height<720&&setTimeout((()=>{this.onWarning&&this.onWarning({id:3,message:"Camera resolution too low, please use a higher resolution (720P or better)."})}),0)}}getUIElement(){return this.dce.getUIElement()}async setUIElement(t){await this.dce.setUIElement(t)}get singleFrameMode(){return this.dce.singleFrameMode}set singleFrameMode(t){if("boolean"!=typeof t&&!["image","camera"].includes(t))throw new Error("Invalid value.");this.dce.singleFrameMode=t,t&&(this.dce.ifShowScanRegionLaser=!1,(async()=>{let t=await this.getScanSettings();t.oneDTrustFrameCount=1,await this.updateScanSettings(t)})())}get onUnduplicatedRead(){return this.onUniqueRead}set onUnduplicatedRead(t){this.onUniqueRead=t}get video(){return this.dce&&this.dce.video}set videoSrc(t){this.dce&&(this.dce.videoSrc=t)}get videoSrc(){return this.dce&&this.dce.videoSrc}set onTipSuggested(t){this.dce&&(this.dce.onTipSuggested=t)}get onTipSuggested(){return this.dce&&this.dce.onTipSuggested}_assertOpen(){if(!this.dce.isOpen())throw Error("The scanner is not open.")}set barcodeFillStyle(t){this._barcodeFillStyle=t,this.dce&&this.dce.updateDrawingStyle(3,{fillStyle:t})}get barcodeFillStyle(){return this._barcodeFillStyle}set barcodeStrokeStyle(t){this._barcodeStrokeStyle=t,this.dce&&this.dce.updateDrawingStyle(3,{strokeStyle:t})}get barcodeStrokeStyle(){return this._barcodeStrokeStyle}set barcodeLineWidth(t){this._barcodeLineWidth=t,this.dce&&this.dce.updateDrawingStyle(3,{lineWidth:t})}get barcodeLineWidth(){return this._barcodeLineWidth}set barcodeFillStyleBeforeVerification(t){this._barcodeFillStyleBeforeVerification=t,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{fillStyle:t})}get barcodeFillStyleBeforeVerification(){return this._barcodeFillStyleBeforeVerification}set barcodeStrokeStyleBeforeVerification(t){this._barcodeStrokeStyleBeforeVerification=t,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{strokeStyle:t})}get barcodeStrokeStyleBeforeVerification(){return this._barcodeStrokeStyleBeforeVerification}set barcodeLineWidthBeforeVerification(t){this._barcodeLineWidthBeforeVerification=t,this._styleIdBeforeVerification&&this.dce.updateDrawingStyle(this._styleIdBeforeVerification,{lineWidth:t})}get barcodeLineWidthBeforeVerification(){return this._barcodeLineWidthBeforeVerification}set regionMaskFillStyle(t){this.dce.setScanRegionMaskStyle({fillStyle:t})}get regionMaskFillStyle(){return this.dce.regionMaskFillStyle}set regionMaskStrokeStyle(t){this.dce.setScanRegionMaskStyle({strokeStyle:t})}get regionMaskStrokeStyle(){return this.dce.regionMaskStrokeStyle}set regionMaskLineWidth(t){this.dce.setScanRegionMaskStyle({lineWidth:t})}get regionMaskLineWidth(){return this.dce.regionMaskLineWidth}set region(t){this._region=t,this.dce&&(t?t instanceof Array||this.dce.setScanRegion(t):this.dce.setScanRegion(null)),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}set ifSaveOriginalImageInACanvas(t){this._ifSaveOriginalImageInACanvas=t,this.dce.framePixelFormat=t?"rgba":"grey"}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}async createDCEInstance(){this.dce||(T._onLog&&T._onLog("createDCEInstance()"),it.defaultUIElementURL=null,this.dce=await it.createInstance(),this.dce.refreshInterval=200,this.dce.framePixelFormat="grey",this.dce.maxCvsSideLength=this.maxCvsSideLength,this._drawingItemNamespace=rt,["iPhone","iPad","Android","HarmonyOS"].includes(T.browserInfo.OS)||this.dce.setResolution(1920,1080),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"}),this.barcodeLineWidth=this._barcodeLineWidth,this.dce.on("cameraChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("resolutionChange",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0})),this.dce.on("cameraClose",(()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1})),this.dce.on("singleFrameAcquired",(async t=>{if(!t)return;if(!t.data)return;let e;this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:i,sx:r,sy:n,width:s,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=t,d={timeStamp:l};if("grey"===h)e=await this._decodeBuffer_Uint8Array(i,s,o,a,m.IPF_GrayScaled,0,d);else if("rgba"===h)e=await this._decodeBuffer_Uint8Array(i,s,o,a,m.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);e=await this._decodeBuffer_Uint8Array(i,s,o,a,m.IPF_ARGB_8888,0,d)}if(await this.clearMapDecodeRecord(),T.recalculateResultLocation(e,r,n,c,u,s,o),this._drawResults(e),this.onFrameRead&&this.isOpen()&&!this._bPauseScan){let t=this._cloneDecodeResults(e);this.onFrameRead(t)}if(this.onUniqueRead&&this.isOpen()&&!this._bPauseScan)for(let t of e)this.onUniqueRead(t.barcodeText,this._cloneDecodeResults(t))})))}set maxCvsSideLength(t){this._maxCvsSideLength=t,this.dce.maxCvsSideLength=t}get maxCvsSideLength(){return this._maxCvsSideLength}static async createInstance(t){const e=new Pt;e._instanceID=await Pt.createInstanceInWorker(!0),await e.createDCEInstance(),"string"==typeof t&&(t=JSON.parse(t));for(let i in t)e[i]=t[i];return await e.dce.setUIElement(Pt.defaultUIElementURL),e.singleFrameMode&&console.warn("The `navigator.mediaDevices.getUserMedia` is unavailable. automatically change to `singleFrameMode`."),Pt._fireHTTPSWarnning(),e.singleFrameMode||await e.updateRuntimeSettings("single"),e}async decodeCurrentFrame(t){this._assertOpen();let e=null;t&&t.region&&(e=t.region);const i=this.dce._getVideoData(null,{region:e});return this._decode_DCEFrame(i)}async updateRuntimeSettings(t){let e;if("string"==typeof t)if("speed"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=0,e.localizationModes=[2,0,0,0,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9}else if("balance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=512,e.deblurLevel=3,e.localizationModes=[2,16,0,0,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else if("coverage"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=512,e.deblurLevel=5,e.scaleDownThreshold=1e5,e.localizationModes=[2,16,4,8,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else if("single"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region)}else if("dense"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=0,e.deblurLevel=7,e.scaleDownThreshold=1e5,e.localizationModes=[2,8,0,0,0,0,0,0],e.minResultConfidence=0,e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else if("distance"==t){let t=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,e=await this.getRuntimeSettings(),e.barcodeFormatIds=t.barcodeFormatIds,e.barcodeFormatIds_2=t.barcodeFormatIds_2,t.region&&(e.region=t.region),e.expectedBarcodesCount=0,e.scaleDownThreshold=1e5,e.localizationModes=[2,8,0,0,0,0,0,0],e.barcodeZoneMinDistanceToImageBorders=9,e.timeout=1e5}else e=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(e=JSON.parse(JSON.stringify(t)),e.region instanceof Array){let i=t.region;[i.regionLeft,i.regionTop,i.regionLeft,i.regionBottom,i.regionMeasuredByPercentage].some((t=>void 0!==t))&&(e.region={regionLeft:i.regionLeft||0,regionTop:i.regionTop||0,regionRight:i.regionRight||0,regionBottom:i.regionBottom||0,regionMeasuredByPercentage:i.regionMeasuredByPercentage||0})}}if(!T._bUseFullFeature){if(0!=(e.barcodeFormatIds&~(S.BF_ONED|S.BF_QR_CODE|S.BF_PDF417|S.BF_DATAMATRIX))||0!=e.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=e.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}{let t=e.region;if(this.bFilterRegionInJs?this.userDefinedRegion=JSON.parse(JSON.stringify(t)):this.userDefinedRegion=null,t instanceof Array)if(t.length){for(let e=0;e{let r=T._nextTaskID++;T._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.updateReturn)}catch(t){i(t)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),T._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(e)}})})),"string"==typeof t&&["speed","balance","coverage","dense","distance"].includes(t)&&(await this.setModeArgument("BinarizationModes",0,"EnableFillBinaryVacancy","1"),await this.setModeArgument("BinarizationModes",0,"BlockSizeX","0"),await this.setModeArgument("BinarizationModes",0,"BlockSizeY","0"))}_bindUI(){if(!this.getUIElement())throw new Error("Need to define `UIElement` before opening.");if(this.dce._bindUI(),!this.dce.video)throw this._unbindUI(),Error("Can not find the video container element with class 'dce-video-container'")}_unbindUI(){this.dce._unbindUI()}set onPlayed(t){this.dce.off("played",this._onPlayed),this._onPlayed=t,this.dce.on("played",this._onPlayed)}get onPlayed(){return this._onPlayed}async getAllCameras(){return this.dce.getAllCameras()}async getCurrentCamera(){return this.dce.getSelectedCamera()}async setCurrentCamera(t){const e=await this.dce.selectCamera(t);return this._fireResolutionWarning(),e}getResolution(){return this.dce.getResolution()}async setResolution(t,e){const i=await this.dce.setResolution(t,e);return this._fireResolutionWarning(),i}getVideoSettings(){return this.dce.getVideoSettings()}updateVideoSettings(t){return this.dce.updateVideoSettings(t)}isOpen(){return this.dce&&this.dce.isOpen()}setVideoFit(t){return this.dce&&this.dce.setVideoFit(t)}getVideoFit(){return this.dce&&this.dce.getVideoFit()}set ifShowScanRegionMask(t){this.dce&&(this.dce.ifShowScanRegionMask=t)}get ifShowScanRegionMask(){return this.dce&&this.dce.ifShowScanRegionMask}set ifSaveLastUsedCamera(t){this.dce&&(this.dce.ifSaveLastUsedCamera=t)}get ifSaveLastUsedCamera(){return this.dce&&this.dce.ifSaveLastUsedCamera}set ifSkipCameraInspection(t){this.dce&&(this.dce.ifSkipCameraInspection=t)}get ifSkipCameraInspection(){return this.dce&&this.dce.ifSkipCameraInspection}stop(){this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.dce.stop(),this.dce.ifShowScanRegionLaser=!1,this.dce.hideViewDecorator(),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}pause(){this.dce.pause()}async play(t,e,i){this.dce.ifShowScanRegionLaser=!0;const r=await this.dce.play(t,e,i);return this._fireResolutionWarning(),r}pauseScan(t){this._assertOpen(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),t&&t.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce.ifShowScanRegionLaser=!1,this.dce.stopFetchingLoop()}resumeScan(){this._assertOpen(),this._bPauseScan=!1,this.dce.ifShowScanRegionLaser=!0}getCapabilities(){return this.dce.getCapabilities()}getCameraSettings(){return this.dce.getCameraSettings()}getConstraints(){return this.dce.getConstraints()}async applyConstraints(t){return this.dce.applyConstraints(t)}async turnOnTorch(){return this.dce.turnOnTorch()}async turnOffTorch(){return this.dce.turnOffTorch()}async setColorTemperature(t){return this.dce.setColorTemperature(t)}getColorTemperature(){return this.dce.getColorTemperature()}async setExposureCompensation(t){return this.dce.setExposureCompensation(t)}getExposureCompensation(){return this.dce.getExposureCompensation()}async setZoom(t){return this.dce.setZoom(t)}getZoomSettings(){return this.dce.getZoomSettings()}resetZoom(){return this.dce.resetZoom()}async setFrameRate(t){return this.dce.setFrameRate(t)}getFrameRate(){return this.dce.getFrameRate()}async setFocus(t,e){return this.dce.setFocus(t,e)}getFocus(){return this.dce.getFocus()}getFocusSettings(){return this.dce.getFocusSettings()}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this.dce.stopFetchingLoop(),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(!this.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce.video||this.dce.video.paused||this._bPauseScan)return T._onLog&&T._onLog("Video or scan is paused. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));T._onLog&&T._onLog("======= once read ======="),T._onLog&&(this._timeStartDecode=Date.now());const t=this._getVideoFrame();if(!t)return T._onLog&&T._onLog("Get invalid frame."),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{t._bUseWebGL||"grey"!==t.pixelFormat||(this.dce.framePixelFormat="rgba");let e=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{data:i,sx:r,sy:n,width:s,height:o,stride:a,pixelFormat:h,timeStamp:l,_sWidth:c,_sHeight:u}=t,d={timeStamp:l};if("grey"===h)e=await this._decodeBuffer_Uint8Array(i,s,o,a,m.IPF_GrayScaled,0,d);else if("rgba"===h)e=await this._decodeBuffer_Uint8Array(i,s,o,a,m.IPF_ABGR_8888,0,d);else{if("bgra"!==h)throw new Error(`Pixel format '${h}' is not supported.`);e=await this._decodeBuffer_Uint8Array(i,s,o,a,m.IPF_ARGB_8888,0,d)}if(T.recalculateResultLocation(e,r,n,c,u,s,o),0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(e),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration)),this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan&&(this.autoZoom||this.autoFocus||this.autoSuggestTip))if(e.length)this.autoZoomInFrameArray.length=0,this.autoZoomOutFrameCount=0,this.frameArrayInIdealZoom.length=0,this.suggestTipFrameArray.length=0,this.autoZoom&&this.autoFocus&&(this.nextActionInIdealZoom="focus"),this.autoFocusFrameArray.length=0,this.noIntermediateResultsCount=0;else{const t=async()=>new Promise(((t,e)=>{let i=T._nextTaskID++;T._taskCallbackMap.set(i,(i=>{if(i.success)return t(i.results);{let t=new Error(i.message);return t.stack=i.stack+"\n"+t.stack,e(t)}})),T._dbrWorker.postMessage({type:"getIntermediateResults",id:i,instanceID:this._instanceID,body:{isCharge:!1}})})),e=await t(),i=(t,e,i,r,n,s,o)=>{let a=s/r,h=o/n;t.x1=t.x1/a+e,t.x2=t.x2/a+e,t.x3=t.x3/a+e,t.x4=t.x4/a+e,t.y1=t.y1/h+i,t.y2=t.y2/h+i,t.y3=t.y3/h+i,t.y4=t.y4/h+i},a=t=>{if(!t)return null;const e={};let a,h,l,d,f;{const t=this.video.videoWidth*(1-this.autoZoomDetectionArea)/2,e=this.video.videoWidth*(1+this.autoZoomDetectionArea)/2,i=e,r=t,n=this.video.videoHeight*(1-this.autoZoomDetectionArea)/2,s=n,o=this.video.videoHeight*(1+this.autoZoomDetectionArea)/2;f={x1:t,x2:e,x3:i,x4:r,y1:n,y2:s,y3:o,y4:o}}const g=(t,e)=>{const i=(t,e)=>{if(!t&&!e)throw new Error("Invalid arguments.");return function(t,e,i){let r=!1;const n=t.length;if(n<=2)return!1;for(let s=0;s0!=st(a.y-i)>0&&st(e-(i-o.y)*(o.x-a.x)/(o.y-a.y)-o.x)<0&&(r=!r)}return r}([{x:e.x1,y:e.y1},{x:e.x2,y:e.y2},{x:e.x3,y:e.y3},{x:e.x4,y:e.y4}],t.x,t.y)},r=(t,e)=>!!(ot([t[0],t[1]],[t[2],t[3]],[e.x1,e.y1],[e.x2,e.y2])||ot([t[0],t[1]],[t[2],t[3]],[e.x2,e.y2],[e.x3,e.y3])||ot([t[0],t[1]],[t[2],t[3]],[e.x3,e.y3],[e.x4,e.y4])||ot([t[0],t[1]],[t[2],t[3]],[e.x4,e.y4],[e.x1,e.y1]));return!!(i({x:t.x1,y:t.y1},e)||i({x:t.x2,y:t.y2},e)||i({x:t.x3,y:t.y3},e)||i({x:t.x4,y:t.y4},e))||(!!(i({x:e.x1,y:e.y1},t)||i({x:e.x2,y:e.y2},t)||i({x:e.x3,y:e.y3},t)||i({x:e.x4,y:e.y4},t))||!!(r([e.x1,e.y1,e.x2,e.y2],t)||r([e.x2,e.y2,e.x3,e.y3],t)||r([e.x3,e.y3,e.x4,e.y4],t)||r([e.x4,e.y4,e.x1,e.y1],t)))},_=[];for(let e of t){if(e.resultType!==C.IRT_TYPED_BARCODE_ZONE)continue;const t=e.scaleDownRatio;for(let a of e.results){if(!a)continue;const e={x1:a.x1=a.x1*t,x2:a.x2=a.x2*t,x3:a.x3=a.x3*t,x4:a.x4=a.x4*t,y1:a.y1=a.y1*t,y2:a.y2=a.y2*t,y3:a.y4=a.y3*t,y4:a.y4=a.y4*t};i(e,r,n,c,u,s,o),g(f,e)&&_.push(a)}}const p=(t=>{if(!t||!t.length)return null;const e=t=>{const e=(t.x1+t.x2+t.x3+t.x4)/4,i=(t.y1+t.y2+t.y3+t.y4)/4;return(e-s/2)*(e-s/2)+(i-o/2)*(i-o/2)};let i,r=t.filter((t=>t.barcodeFormat==S.BF_QR_CODE||t.barcodeFormat==S.BF_DATAMATRIX));if(r.length||(r=t.filter((t=>t.barcodeFormat==S.BF_ONED)),r.length||(r=t)),!r.length)return null;i=r[0];let n=e(i);if(1!=r.length)for(let t=1;t1.1*i.confidence?(i=r[t],n=s):r[t].confidence>.9*i.confidence&&s!0===t)).length>=this.suggestTipFrameLimit[1]){this.suggestTipFrameArray.length=0;const t=h.x3-h.x1,e=h.y3-h.y1;h.result.moduleSizee?t>s*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):t>.6*s&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."):t<=e&&(e>o*this.hugeBarcodeTipLimit?this.dce&&this.dce.suggestTip("huge-barcode","Please zoom out or move farther."):e>.6*o&&Math.max(this.video.videoWidth,this.video.videoHeight)<=1280&&Math.min(this.video.videoWidth,this.video.videoHeight)<=720&&this.dce&&this.dce.suggestTip("low-resolution","Please use a higher resolution."))}if(this.autoZoom){const t=this.autoZoomIdealArea[1];let e=(1-this.autoZoomTargetBorder)/2;const a=h.x1/c,l=(c-h.x3)/c,d=h.y1/u,f=(u-h.y3)/u;if(a>t&&l>t&&d>t&&f>t&&h.result.moduleSize{}))),this.autoZoomInFrameArray.filter((t=>!0===t)).length>=this.autoZoomInFrameLimit[1]){this.autoZoomInFrameArray.length=0;const t=[(.5-e)/(.5-a),(.5-e)/(.5-l),(.5-e)/(.5-d),(.5-e)/(.5-f)].filter((t=>t>0)),i=Math.min(...t,this.autoZoomInIdealModuleSize/h.result.moduleSize),r=this.dce.getZoomSettings().factor;let n=Math.max(Math.pow(r*i,1/this.autoZoomInMaxTimes),this.autoZoomInMinStep);n=Math.min(n,i);const s=r*n;await this.setZoom({factor:s}),this.dce.clearFrameBuffer()}}else if(this.autoZoomInFrameArray.length=0,this.frameArrayInIdealZoom.push(!0),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.frameArrayInIdealZoom.filter((t=>!0===t)).length>=this.frameLimitInIdealZoom[1])if(this.frameArrayInIdealZoom.length=0,"focus"===this.nextActionInIdealZoom&&this.autoFocus){i(h,r,n,c,u,s,o);try{await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(t){}this.dce.clearFrameBuffer(),this.nextActionInIdealZoom="zoomOut"}else{if("zoomOut"!==this.nextActionInIdealZoom&&this.autoFocus)throw new Error("Invalid action.");if(this.enableZoomOutInIdealZoom){e=this.autoZoomIdealArea[1]+this.autoZoomOutStepRate_2;const t=[(.5-e)/(.5-a),(.5-e)/(.5-l),(.5-e)/(.5-d),(.5-e)/(.5-f)].filter((t=>t>0));let i=Math.min(...t)*this.dce.getZoomSettings().factor;await this.setZoom({factor:i}),this.dce.clearFrameBuffer(),this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((t=>{})))}}}else if(this.autoFocus&&(this.autoFocusFrameArray.push(!0),this.autoFocusFrameArray.splice(0,this.autoFocusFrameArray.length-this.autoFocusFrameLimit[0]),this.autoFocusFrameArray.filter((t=>!0===t)).length>=this.autoFocusFrameLimit[1])){this.autoFocusFrameArray.length=0;try{i(h,r,n,c,u,s,o),await this.setFocus({mode:"manual",area:{centerPoint:{x:(h.x1+h.x3)/2+"px",y:(h.y1+h.y3)/2+"px"},width:h.x3-h.x1+"px",height:h.y3-h.y1+"px"}})}catch(t){}this.dce.clearFrameBuffer()}}else if(this.noIntermediateResultsCount++,this.suggestTipFrameArray.push(!1),this.autoZoom){if(this.autoZoomInFrameArray.push(!1),this.autoZoomInFrameArray.splice(0,this.autoZoomInFrameArray.length-this.autoZoomInFrameLimit[0]),this.autoZoomOutFrameCount++,this.frameArrayInIdealZoom.push(!1),this.frameArrayInIdealZoom.splice(0,this.frameArrayInIdealZoom.length-this.frameLimitInIdealZoom[0]),this.autoZoomOutFrameCount>=this.autoZoomOutFrameLimit){this.autoZoomOutFrameCount=0;const t=this.getZoomSettings().factor;if(t>this.autoZoomOutMinValue){const e=Math.max((t-1)*this.autoZoomOutStepRate,this.autoZoomOutMinStep),i=Math.max(t-e,this.autoZoomOutMinValue);await this.setZoom({factor:i}),this.dce.clearFrameBuffer()}}this.autoFocus&&(this.nextActionInIdealZoom="focus",this.setFocus({mode:"continuous"}).catch((t=>{})))}else this.autoFocus&&(this.autoFocusFrameArray.length=0,this.setFocus({mode:"continuous"}).catch((t=>{})))}return e})().then((t=>{if(T._onLog&&T._onLog(t),this.captureAndDecodeInParallel){let t=this.array_decodeFrameTimeCost,e=this.array_getFrameTimeCost,i=this._indexCurrentDecodingFrame;const r=()=>{let r=0;if(this.region instanceof Array){let n=0,s=0;n=i+1>=this.region.length?0:i+1,s=n+1>=this.region.length?0:n+1,r=t[n]&&t[n].length&&e[s]&&e[s].length?Math.min(...t[n])-Math.max(...e[s]):0}else if(e&&e.length){let i=Math.min(...t),n=Math.max(...e);i&&n&&(r=i-n)}else r=0;return r>0?r:0};(()=>{if(this.region instanceof Array){for(t[i]&&t[i]instanceof Array||(t[i]=[]);t[i].length>=5;)t[i].shift();t[i].push(this._lastInnerDecodeDuration)}else{for(;t.length>=5;)t.shift();t.push(this._lastInnerDecodeDuration)}})(),this._intervalGetVideoFrame=r()+this.intervalTime,T._onLog&&T._onLog("Next fetching frame loop interval: "+this._intervalGetVideoFrame)}if(this.isOpen()&&this.dce.video&&!this.dce.video.paused&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&t.length){let e=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&t.length){let e=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?e=t.some((t=>t.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(e=t.some((t=>0==t.resultState))),e)try{navigator.vibrate(this.vibrateDuration)}catch(t){console.warn("Vibration not allowed. User interaction required: "+(t.message||t))}}if(this.onFrameRead){t=t.filter((t=>t.resultState>=0));const e=this._cloneDecodeResults(t);this.onFrameRead(e)}if(this.onUniqueRead){t=t.filter((t=>0==t.resultState));const e=this._cloneDecodeResults(t);for(let t of e)this.onUniqueRead(t.barcodeText,t)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()}))}_getVideoFrame(){if(!this.dce)return null;let t;if(this.captureAndDecodeInParallel){T._onLog&&T._onLog("Get frame in parallel.");let e=this.dce.isFetchingLoopStarted();if(this.dce.loopInterval=this._intervalGetVideoFrame,e||this.dce.startFetchingLoop(),!this.dce.numberOfFramesInBuffer)return this.dce.loopInterval=0,null;t=this.dce.getFrameFromBuffer();const i=t=>{if(!t)return;let e=t.timeSpent,i=this.array_getFrameTimeCost;for(;i.length>=5;)i.shift();i.push(e)};i(t)}else T._onLog&&T._onLog("Get frame in serial."),this.dce.stopFetchingLoop(),t=this.dce.getFrame();return t}async open(){this._bindUI();const t=await this.dce.open();return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}async openVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const t=await this.dce.open();return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}close(){this._drawResults(null),this.dce.close(),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}async show(){this._bindUI();const t=await this.dce.open(!0);return this._bPauseScan=!1,this.singleFrameMode||(this.dce&&(this.dce.ifShowScanRegionLaser=!0),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}async showVideo(){this._bindUI(),this.dce.ifShowScanRegionLaser=!1;const t=await this.dce.open(!0);return this._bPauseScan=!0,this.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0)),this._fireResolutionWarning(),t}hide(){this.dce.close(!0),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId)}showTip(t,e,i,r,n=3e3,s=!0){this.dce&&this.dce.showTip(t,e,i,r,n,s)}hideTip(){this.dce&&this.dce.hideTip()}updateTipMessage(t){this.dce&&this.dce.updateTipMessage(t)}async enableTapToFocus(){this.dce&&this.dce.enableTapToFocus()}disableTapToFocus(){this.dce&&this.dce.disableTapToFocus()}isTapToFocusEnabled(){return this.dce.isTapToFocusEnabled()}convertToPageCoordinates(t){return this.dce.convertToPageCoordinates(t)}convertToClientCoordinates(t){return this.dce.convertToClientCoordinates(t)}destroyContext(){this.close(),this.dce&&this.dce.dispose(!1),this.bDestroyed||super.destroyContext()}}at=Pt,ht={value:void 0},function(t){t[t.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",t[t.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",t[t.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",t[t.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",t[t.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",t[t.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",t[t.BICM_SKIP=0]="BICM_SKIP",t[t.BICM_REV=2147483648]="BICM_REV"}(lt||(lt={})),function(t){t[t.BCM_AUTO=1]="BCM_AUTO",t[t.BCM_GENERAL=2]="BCM_GENERAL",t[t.BCM_SKIP=0]="BCM_SKIP",t[t.BCM_REV=2147483648]="BCM_REV"}(ct||(ct={})),function(t){t[t.BF2_NULL=0]="BF2_NULL",t[t.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",t[t.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",t[t.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",t[t.BF2_POSTNET=2097152]="BF2_POSTNET",t[t.BF2_PLANET=4194304]="BF2_PLANET",t[t.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",t[t.BF2_RM4SCC=16777216]="BF2_RM4SCC",t[t.BF2_DOTCODE=2]="BF2_DOTCODE",t[t.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",t[t.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",t[t.BF2_PHARMACODE=12]="BF2_PHARMACODE",t[t.BF2_ALL=-1]="BF2_ALL"}(ut||(ut={})),function(t){t[t.BM_AUTO=1]="BM_AUTO",t[t.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",t[t.BM_SKIP=0]="BM_SKIP",t[t.BM_THRESHOLD=4]="BM_THRESHOLD",t[t.BM_REV=2147483648]="BM_REV"}(dt||(dt={})),function(t){t[t.ECCM_CONTRAST=1]="ECCM_CONTRAST"}(ft||(ft={})),function(t){t[t.CFM_GENERAL=1]="CFM_GENERAL"}(gt||(gt={})),function(t){t[t.CCM_AUTO=1]="CCM_AUTO",t[t.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",t[t.CCM_SKIP=0]="CCM_SKIP",t[t.CCM_REV=2147483648]="CCM_REV"}(_t||(_t={})),function(t){t[t.CICM_GENERAL=1]="CICM_GENERAL",t[t.CICM_SKIP=0]="CICM_SKIP",t[t.CICM_REV=2147483648]="CICM_REV"}(pt||(pt={})),function(t){t[t.CM_IGNORE=1]="CM_IGNORE",t[t.CM_OVERWRITE=2]="CM_OVERWRITE"}(mt||(mt={})),function(t){t[t.DM_SKIP=0]="DM_SKIP",t[t.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",t[t.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",t[t.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",t[t.DM_SMOOTHING=8]="DM_SMOOTHING",t[t.DM_MORPHING=16]="DM_MORPHING",t[t.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",t[t.DM_SHARPENING=64]="DM_SHARPENING",t[t.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",t[t.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING"}(vt||(vt={})),function(t){t[t.DRM_AUTO=1]="DRM_AUTO",t[t.DRM_GENERAL=2]="DRM_GENERAL",t[t.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",t[t.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",t[t.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",t[t.DRM_SKIP=0]="DRM_SKIP",t[t.DRM_REV=2147483648]="DRM_REV"}(yt||(yt={})),function(t){t[t.DPMCRM_AUTO=1]="DPMCRM_AUTO",t[t.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",t[t.DPMCRM_SKIP=0]="DPMCRM_SKIP",t[t.DPMCRM_REV=2147483648]="DPMCRM_REV"}(St||(St={})),function(t){t[t.GTM_INVERTED=1]="GTM_INVERTED",t[t.GTM_ORIGINAL=2]="GTM_ORIGINAL",t[t.GTM_SKIP=0]="GTM_SKIP",t[t.GTM_REV=2147483648]="GTM_REV"}(Ct||(Ct={})),function(t){t[t.IPM_AUTO=1]="IPM_AUTO",t[t.IPM_GENERAL=2]="IPM_GENERAL",t[t.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",t[t.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",t[t.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",t[t.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",t[t.IPM_SKIP=0]="IPM_SKIP",t[t.IPM_REV=2147483648]="IPM_REV"}(wt||(wt={})),function(t){t[t.IRSM_MEMORY=1]="IRSM_MEMORY",t[t.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",t[t.IRSM_BOTH=4]="IRSM_BOTH"}(bt||(bt={})),function(t){t[t.LM_SKIP=0]="LM_SKIP",t[t.LM_AUTO=1]="LM_AUTO",t[t.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",t[t.LM_LINES=8]="LM_LINES",t[t.LM_STATISTICS=4]="LM_STATISTICS",t[t.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",t[t.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",t[t.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",t[t.LM_CENTRE=128]="LM_CENTRE",t[t.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",t[t.LM_REV=2147483648]="LM_REV"}(xt||(xt={})),function(t){t[t.PDFRM_RASTER=1]="PDFRM_RASTER",t[t.PDFRM_AUTO=2]="PDFRM_AUTO",t[t.PDFRM_VECTOR=4]="PDFRM_VECTOR",t[t.PDFRM_REV=2147483648]="PDFRM_REV"}(Tt||(Tt={})),function(t){t[t.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",t[t.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",t[t.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",t[t.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}(Et||(Et={})),function(t){t[t.RPM_AUTO=1]="RPM_AUTO",t[t.RPM_GENERAL=2]="RPM_GENERAL",t[t.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",t[t.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",t[t.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",t[t.RPM_SKIP=0]="RPM_SKIP",t[t.RPM_REV=2147483648]="RPM_REV"}(It||(It={})),function(t){t[t.RCT_PIXEL=1]="RCT_PIXEL",t[t.RCT_PERCENTAGE=2]="RCT_PERCENTAGE"}(Ot||(Ot={})),function(t){t[t.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",t[t.RT_RAW_TEXT=1]="RT_RAW_TEXT",t[t.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",t[t.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT"}(Rt||(Rt={})),function(t){t[t.SUM_AUTO=1]="SUM_AUTO",t[t.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",t[t.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",t[t.SUM_SKIP=0]="SUM_SKIP",t[t.SUM_REV=2147483648]="SUM_REV"}(Dt||(Dt={})),function(t){t[t.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",t[t.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",t[t.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",t[t.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",t[t.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",t[t.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED"}(At||(At={})),function(t){t[t.TFM_AUTO=1]="TFM_AUTO",t[t.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",t[t.TFM_SKIP=0]="TFM_SKIP",t[t.TFM_REV=2147483648]="TFM_REV"}(Mt||(Mt={})),function(t){t[t.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",t[t.TROM_POSITION=2]="TROM_POSITION",t[t.TROM_FORMAT=4]="TROM_FORMAT",t[t.TROM_SKIP=0]="TROM_SKIP",t[t.TROM_REV=2147483648]="TROM_REV"}(Lt||(Lt={})),function(t){t[t.TDM_AUTO=1]="TDM_AUTO",t[t.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",t[t.TDM_SKIP=0]="TDM_SKIP",t[t.TDM_REV=2147483648]="TDM_REV"}(Ft||(Ft={}));export{T as BarcodeReader,Pt as BarcodeScanner,lt as EnumBarcodeColourMode,ct as EnumBarcodeComplementMode,S as EnumBarcodeFormat,ut as EnumBarcodeFormat_2,dt as EnumBinarizationMode,ft as EnumClarityCalculationMethod,gt as EnumClarityFilterMode,_t as EnumColourClusteringMode,pt as EnumColourConversionMode,mt as EnumConflictMode,St as EnumDPMCodeReadingMode,vt as EnumDeblurMode,yt as EnumDeformationResistingMode,v as EnumErrorCode,Ct as EnumGrayscaleTransformationMode,y as EnumIMResultDataType,m as EnumImagePixelFormat,wt as EnumImagePreprocessingMode,bt as EnumIntermediateResultSavingMode,C as EnumIntermediateResultType,xt as EnumLocalizationMode,Tt as EnumPDFReadingMode,Et as EnumQRCodeErrorCorrectionLevel,It as EnumRegionPredetectionMode,Ot as EnumResultCoordinateType,Rt as EnumResultType,Dt as EnumScaleUpMode,At as EnumTerminatePhase,Mt as EnumTextFilterMode,Lt as EnumTextResultOrderMode,Ft as EnumTextureDetectionMode}; diff --git a/dist/dbr.pure.js b/dist/dbr.pure.js index 0159a3f..10447ae 100644 --- a/dist/dbr.pure.js +++ b/dist/dbr.pure.js @@ -4,8 +4,8 @@ * @website http://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 9.6.31 (js 20230908) + * @version 9.6.32 (js 20231027) * @fileoverview Dynamsoft JavaScript Library for Barcode Reader * More info on DBR JS: https://www.dynamsoft.com/barcode-reader/sdk-javascript/ */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Dynamsoft=e.Dynamsoft||{},e.Dynamsoft.DBR={}))}(this,(function(e){"use strict";var t=function(){this.init()};t.prototype={init:function(){var e=this||n;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var t=this||n;if(e=parseFloat(e),t.ctx||u(),void 0!==e&&e>=0&&e<=1){if(t._volume=e,t._muted)return t;t.usingWebAudio&&t.masterGain.gain.setValueAtTime(e,n.ctx.currentTime);for(var r=0;r=0;t--)e._howls[t].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,u()),e},codecs:function(e){return(this||n)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||n;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||n,t=null;try{t="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!t||"function"!=typeof t.canPlayType)return e;var r=t.canPlayType("audio/mpeg;").replace(/^no$/,""),o=e._navigator?e._navigator.userAgent:"",i=o.match(/OPR\/([0-6].)/g),a=i&&parseInt(i[0].split("/")[1],10)<33,s=-1!==o.indexOf("Safari")&&-1===o.indexOf("Chrome"),_=o.match(/Version\/(.*?) /),d=s&&_&&parseInt(_[1],10)<15;return e._codecs={mp3:!(a||!r&&!t.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!r,opus:!!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(t.canPlayType('audio/wav; codecs="1"')||t.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!t.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!t.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(t.canPlayType("audio/x-m4a;")||t.canPlayType("audio/m4a;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(t.canPlayType("audio/x-m4b;")||t.canPlayType("audio/m4b;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(t.canPlayType("audio/x-mp4;")||t.canPlayType("audio/mp4;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(d||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(d||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(t.canPlayType("audio/x-flac;")||t.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||n;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var t=function(n){for(;e._html5AudioPool.length0?s._seek:r._sprite[e][0]/1e3),u=Math.max(0,(r._sprite[e][0]+r._sprite[e][1])/1e3-d),l=1e3*u/Math.abs(s._rate),c=r._sprite[e][0]/1e3,h=(r._sprite[e][0]+r._sprite[e][1])/1e3;s._sprite=e,s._ended=!1;var m=function(){s._paused=!1,s._seek=d,s._start=c,s._stop=h,s._loop=!(!s._loop&&!r._sprite[e][2])};if(!(d>=h)){var f=s._node;if(r._webAudio){var g=function(){r._playLock=!1,m(),r._refreshBuffer(s);var e=s._muted||r._muted?0:s._volume;f.gain.setValueAtTime(e,n.ctx.currentTime),s._playStart=n.ctx.currentTime,void 0===f.bufferSource.start?s._loop?f.bufferSource.noteGrainOn(0,d,86400):f.bufferSource.noteGrainOn(0,d,u):s._loop?f.bufferSource.start(0,d,86400):f.bufferSource.start(0,d,u),l!==1/0&&(r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),l)),t||setTimeout((function(){r._emit("play",s._id),r._loadQueue()}),0)};"running"===n.state&&"interrupted"!==n.ctx.state?g():(r._playLock=!0,r.once("resume",g),r._clearTimer(s._id))}else{var p=function(){f.currentTime=d,f.muted=s._muted||r._muted||n._muted||f.muted,f.volume=s._volume*n.volume(),f.playbackRate=s._rate;try{var o=f.play();if(o&&"undefined"!=typeof Promise&&(o instanceof Promise||"function"==typeof o.then)?(r._playLock=!0,m(),o.then((function(){r._playLock=!1,f._unlocked=!0,t?r._loadQueue():r._emit("play",s._id)})).catch((function(){r._playLock=!1,r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),s._ended=!0,s._paused=!0}))):t||(r._playLock=!1,m(),r._emit("play",s._id)),f.playbackRate=s._rate,f.paused)return void r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||s._loop?r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),l):(r._endTimers[s._id]=function(){r._ended(s),f.removeEventListener("ended",r._endTimers[s._id],!1)},f.addEventListener("ended",r._endTimers[s._id],!1))}catch(e){r._emit("playerror",s._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===f.src&&(f.src=r._src,f.load());var A=window&&window.ejecta||!f.readyState&&n._navigator.isCocoonJS;if(f.readyState>=3||A)p();else{r._playLock=!0,r._state="loading";var E=function(){r._state="loaded",p(),f.removeEventListener(n._canPlayEvent,E,!1)};f.addEventListener(n._canPlayEvent,E,!1),r._clearTimer(s._id)}}return s._id}r._ended(s)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var n=t._getSoundIds(e),r=0;r=0?t=parseInt(i[0],10):e=parseFloat(i[0])}else i.length>=2&&(e=parseFloat(i[0]),t=parseInt(i[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(r=t?o._soundById(t):o._sounds[0])?r._volume:0;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"volume",action:function(){o.volume.apply(o,i)}}),o;void 0===t&&(o._volume=e),t=o._getSoundIds(t);for(var _=0;_0?r/d:r),l=Date.now();e._fadeTo=n,e._interval=setInterval((function(){var o=(Date.now()-l)/r;l=Date.now(),s+=_*o,s=Math.round(100*s)/100,s=_<0?Math.max(n,s):Math.min(n,s),a._webAudio?e._volume=s:a.volume(s,e._id,!0),i&&(a._volume=s),(nt&&s>=n)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,a.volume(n,e._id),a._emit("fade",e._id))}),u)},_stopFade:function(e){var t=this,r=t._soundById(e);return r&&r._interval&&(t._webAudio&&r._node.gain.cancelScheduledValues(n.ctx.currentTime),clearInterval(r._interval),r._interval=null,t.volume(r._fadeTo,e),r._fadeTo=null,t._emit("fade",e)),t},loop:function(){var e,t,n,r=this,o=arguments;if(0===o.length)return r._loop;if(1===o.length){if("boolean"!=typeof o[0])return!!(n=r._soundById(parseInt(o[0],10)))&&n._loop;e=o[0],r._loop=e}else 2===o.length&&(e=o[0],t=parseInt(o[1],10));for(var i=r._getSoundIds(t),a=0;a=0?t=parseInt(i[0],10):e=parseFloat(i[0])}else 2===i.length&&(e=parseFloat(i[0]),t=parseInt(i[1],10));if("number"!=typeof e)return(r=o._soundById(t))?r._rate:o._rate;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"rate",action:function(){o.rate.apply(o,i)}}),o;void 0===t&&(o._rate=e),t=o._getSoundIds(t);for(var _=0;_=0?t=parseInt(o[0],10):r._sounds.length&&(t=r._sounds[0]._id,e=parseFloat(o[0]))}else 2===o.length&&(e=parseFloat(o[0]),t=parseInt(o[1],10));if(void 0===t)return 0;if("number"==typeof e&&("loaded"!==r._state||r._playLock))return r._queue.push({event:"seek",action:function(){r.seek.apply(r,o)}}),r;var s=r._soundById(t);if(s){if(!("number"==typeof e&&e>=0)){if(r._webAudio){var _=r.playing(t)?n.ctx.currentTime-s._playStart:0,d=s._rateSeek?s._rateSeek-s._seek:0;return s._seek+(d+_*Math.abs(s._rate))}return s._node.currentTime}var u=r.playing(t);u&&r.pause(t,!0),s._seek=e,s._ended=!1,r._clearTimer(t),r._webAudio||!s._node||isNaN(s._node.duration)||(s._node.currentTime=e);var l=function(){u&&r.play(t,!0),r._emit("seek",t)};if(u&&!r._webAudio){var c=function(){r._playLock?setTimeout(c,0):l()};setTimeout(c,0)}else l()}return r},playing:function(e){var t=this;if("number"==typeof e){var n=t._soundById(e);return!!n&&!n._paused}for(var r=0;r=0&&n._howls.splice(o,1);var a=!0;for(r=0;r=0){a=!1;break}return i&&a&&delete i[e._src],n.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,n,r){var o=this["_on"+e];return"function"==typeof t&&o.push(r?{id:n,fn:t,once:r}:{id:n,fn:t}),this},off:function(e,t,n){var r=this,o=r["_on"+e],i=0;if("number"==typeof t&&(n=t,t=null),t||n)for(i=0;i=0;i--)o[i].id&&o[i].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,n)}.bind(r,o[i].fn),0),o[i].once&&r.off(e,o[i].fn,o[i].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var n=t._queue[0];n.event===e&&(t._queue.shift(),t._loadQueue()),e||n.action()}return t},_ended:function(e){var t=this,r=e._sprite;if(!t._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(n<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),n--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],n=0;n=0;if(!e.bufferSource)return this;if(n._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{e.bufferSource.buffer=n._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(n._navigator&&n._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var o=function(e){this._parent=e,this.init()};o.prototype={init:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++n._counter,t._sounds.push(e),e.create(),e},create:function(){var e=this,t=e._parent,r=n._muted||e._muted||e._parent._muted?0:e._volume;return t._webAudio?(e._node=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),e._node.gain.setValueAtTime(r,n.ctx.currentTime),e._node.paused=!0,e._node.connect(n.masterGain)):n.noAudio||(e._node=n._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(n._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=t._src,e._node.preload=!0===t._preload?"auto":t._preload,e._node.volume=r*n.volume(),e._node.load()),e},reset:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++n._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,t=e._parent;t._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(t._sprite).length&&(t._sprite={__default:[0,1e3*t._duration]}),"loaded"!==t._state&&(t._state="loaded",t._emit("load"),t._loadQueue()),e._node.removeEventListener(n._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var i={},a=function(e){var t=e._src;if(i[t])return e._duration=i[t].duration,void d(e);if(/^data:[^;]+;base64,/.test(t)){for(var n=atob(t.split(",")[1]),r=new Uint8Array(n.length),o=0;o0?(i[t._src]=e,d(t,e)):r()};"undefined"!=typeof Promise&&1===n.ctx.decodeAudioData.length?n.ctx.decodeAudioData(e).then(o).catch(r):n.ctx.decodeAudioData(e,o,r)},d=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},u=function(){if(n.usingWebAudio){try{"undefined"!=typeof AudioContext?n.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?n.ctx=new webkitAudioContext:n.usingWebAudio=!1}catch(e){n.usingWebAudio=!1}n.ctx||(n.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(n._navigator&&n._navigator.platform),t=n._navigator&&n._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),r=t?parseInt(t[1],10):null;if(e&&r&&r<9){var o=/safari/.test(n._navigator&&n._navigator.userAgent.toLowerCase());n._navigator&&!o&&(n.usingWebAudio=!1)}n.usingWebAudio&&(n.masterGain=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),n.masterGain.gain.setValueAtTime(n._muted?0:n._volume,n.ctx.currentTime),n.masterGain.connect(n.ctx.destination)),n._setup()}};!function(e,t,n,r){var o;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var n=t._howls.length-1;n>=0;n--)t._howls[n].stereo(e);return t},e.prototype.pos=function(e,n,r){var o=this;return o.ctx&&o.ctx.listener?(n="number"!=typeof n?o._pos[1]:n,r="number"!=typeof r?o._pos[2]:r,"number"!=typeof e?o._pos:(o._pos=[e,n,r],void 0!==o.ctx.listener.positionX?(o.ctx.listener.positionX.setTargetAtTime(o._pos[0],t.ctx.currentTime,.1),o.ctx.listener.positionY.setTargetAtTime(o._pos[1],t.ctx.currentTime,.1),o.ctx.listener.positionZ.setTargetAtTime(o._pos[2],t.ctx.currentTime,.1)):o.ctx.listener.setPosition(o._pos[0],o._pos[1],o._pos[2]),o)):o},e.prototype.orientation=function(e,n,r,o,i,a){var s=this;if(!s.ctx||!s.ctx.listener)return s;var _=s._orientation;return n="number"!=typeof n?_[1]:n,r="number"!=typeof r?_[2]:r,o="number"!=typeof o?_[3]:o,i="number"!=typeof i?_[4]:i,a="number"!=typeof a?_[5]:a,"number"!=typeof e?_:(s._orientation=[e,n,r,o,i,a],void 0!==s.ctx.listener.forwardX?(s.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),s.ctx.listener.forwardY.setTargetAtTime(n,t.ctx.currentTime,.1),s.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),s.ctx.listener.upX.setTargetAtTime(o,t.ctx.currentTime,.1),s.ctx.listener.upY.setTargetAtTime(i,t.ctx.currentTime,.1),s.ctx.listener.upZ.setTargetAtTime(a,t.ctx.currentTime,.1)):s.ctx.listener.setOrientation(e,n,r,o,i,a),s)},n.prototype.init=(o=n.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],o.call(this,e)}),n.prototype.stereo=function(e,n){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,n)}}),r;var o=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===n){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var a=r._getSoundIds(n),s=0;s{let e=!1;if(I)try{(await g.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===p.browser&&p.version>66||"Safari"===p.browser&&p.version>13||"OPR"===p.browser&&p.version>43||"Edge"===p.browser&&p.version;const T=(()=>{if(!l&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),D=" is not allowed to change after `createInstance` or `loadWasm` is called.",S=!l&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",C=!l&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",y=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let t=0;te&&"object"==typeof e&&"function"==typeof e.then;class B extends Promise{constructor(e){let t,n;super(((e,r)=>{t=e,n=r})),this._s="pending",this.resolve=e=>{this.isPending&&(b(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",n(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,b(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const n=await t;e===this._task&&this.resolve(n)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}const N=["iPhone","iPad","Android","HarmonyOS"].includes(p.OS)?2048:4096;class P{constructor(){this._instanceID=void 0,this._ifSaveOriginalImageInACanvas=!1,this.oriCanvas=null,this.oriCanvasData=null,this.canvas=null,this.bFilterRegionInJs=!1,this._region=null,this._timeStartDecode=null,this._timeEnterInnerDBR=null,this._timeGetMessage=null,this.decodeRecords={},this.bDestroyed=!1,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._indexCurrentDecodingFrame=0,this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.captureAndDecodeInParallel=!0,this.autoSuggestTip=!1,this.suggestTipFrameArray=[],this.suggestTipFrameLimit=[5,3],this.noIntermediateResultsCount=0,this.noIntermediateResultsTipLimit=100,this.tinyBarcodeTipModuleSizeLimit=3,this.hugeBarcodeTipLimit=.9,this.autoZoomInFrameArray=[],this.autoZoomInFrameLimit=[5,3],this.autoZoomInStepRate=1/3,this.autoZoomInMaxStep=1.5,this.autoZoomInMaxTimes=5,this.autoZoomInMinStep=Math.pow(10,1/this.autoZoomInMaxTimes),this.autoZoomInIdealModuleSize=6,this.autoZoomOutFrameCount=0,this.autoZoomOutFrameLimit=3,this.autoZoomOutStepRate=1/3,this.autoZoomOutMinValue=1,this.autoZoomOutMinStep=2,this.autoZoomOutStepRate_2=.05,this.autoZoomOutMinValue_2=2,this.frameArrayInIdealZoom=[],this.frameLimitInIdealZoom=[5,3],this.enableZoomOutInIdealZoom=!1,this.nextActionInIdealZoom="focus",this.autoFocusFrameArray=[],this.autoFocusFrameLimit=[5,3],this.autoZoomIdealArea=[0,.05],this.autoZoomTargetBorder=.9,this.autoZoomDetectionArea=.5,this.autoZoom=!1,this.autoFocus=!1,this._resultHighlightingDuration=-1,this._dce=null,this._imgSource=null,this._maxCvsSideLength=N,this._promiseStartScan=null,this.beepSound=new r({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`license`"+D);n._license=t})(P,e)}static get productKeys(){return this._license}static set productKeys(e){P.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){P.license=e}static get organizationID(){return this._license}static set organizationID(e){P.license=e}static set sessionPassword(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`sessionPassword`"+D);n._sessionPassword=t})(P,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:A,worker:E,getUserMedia:I,camera:await R(),browser:p.browser,version:p.version,OS:p.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");P._engineResourcePath=(e=>{if(null==e&&(e="./"),!l){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`licenseServer`"+D);n._licenseServer=y(t)})(P,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+D);n._deviceFriendlyName=t||""})(P,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");P.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=P._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",P.engineResourcePath)}static set defaultUIElementURL(e){P._defaultUIElementURL=e}static _fireHTTPSWarnning(){P.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{P.onWarning&&P.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new r({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;P._onLog&&P._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const n=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{n?n===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else n||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),n=null;if(t&&t.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;n=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(n,r,o,s,_,i,a)}if(this._drawResults(n,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(P._onLog&&P._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!P.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:n,sp:r,rmk:o}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,n,r=t._license||"",o=JSON.parse(JSON.stringify(t._licenseServer)),i=t._sessionPassword,a=0;if(r.startsWith("t")||r.startsWith("f"))a=0;else if(0===r.length||r.startsWith("P")||r.startsWith("L")||r.startsWith("Y")||r.startsWith("A"))a=1;else{a=2;const t=r.indexOf(":");if(-1!=t&&(r=r.substring(t+1)),r.startsWith("DLS2")){let t;try{let e=r.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(r=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof r&&(r=JSON.stringify(r)),0===o.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),o=y(e)}!i&&t.sessionPassword&&(i=t.sessionPassword),e=t.remark}("200001"===r||r.startsWith("200001-"))&&(o&&o.length||(r="")),r||(a=1)}if(a&&(c.crypto||(n="Please upgrade your browser to support online key."),c.crypto.subtle||(n="Require https to use online key in this browser.")),n){if(1!==a)throw new Error(n);a=0,console.warn(n),t._lastErrorCode=-1,t._lastErrorString=n}return 1===a&&(r="",console.warn("Applying for a public trial license ...")),{lt:a,l:r,ls:o,sp:i,rmk:e}}throw new Error("Can't preprocess license again"+D)})(P);this._pLoad.task=async(i,a)=>{let s=P.engineResourcePath+P._workerName;P.engineResourcePath.startsWith(location.origin)||(s=await fetch(s).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),P._dbrWorker=new Worker(s),P._dbrWorker.onerror=e=>{let t=new Error(e.message);a(t)},P._dbrWorker.onmessage=async t=>{let n=t.data?t.data:t;switch(n.type){case"log":P._onLog&&P._onLog(n.message);break;case"load":{n.message&&(n.message=n.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let t,r=!1;1===e&&(r=!0,n.message||(n.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),n.success?(P._dbrWorker.onerror=null,P._version=n.version+"(JS "+P._jsVersion+"."+P._jsEditVersion+")",P._onLog&&P._onLog("load dbr worker success"),n.message&&console.warn(n.message)):(t=new Error(n.message),t.stack=n.stack+"\n"+t.stack,t.ltsErrorCode=n.ltsErrorCode,r||111==n.ltsErrorCode&&-1!=n.message.toLowerCase().indexOf("trial license")&&(r=!0)),r&&P.showDialog(n.success?"warn":"error",n.message),n.success?i():a(t);break}case"task":{let e=n.id,t=n.body;try{P._taskCallbackMap.get(e)(t),P._taskCallbackMap.delete(e)}catch(t){throw P._taskCallbackMap.delete(e),t}break}default:P._onLog&&P._onLog(t)}},P._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:P.engineResourcePath,bUseFullFeature:P._bUseFullFeature,bd:P._bWasmDebug,v:P._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:p,cv:P.authCacheVersion,fn:P.deviceFriendlyName,ls:n,sp:r,rmk:o})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,n)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let o=await r.text();if(!o.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let i=document.createElement("div");i.innerHTML=o;let a=[];for(let e=0;e{if(e==t.target){s.remove();for(let e of a)e.remove()}}));else if(!d&&e.classList.contains("dls-license-icon-close"))d=e,e.addEventListener("click",(()=>{s.remove();for(let e of a)e.remove()}));else if(!u&&e.classList.contains("dls-license-icon-error"))u=e,"error"!=t&&e.remove();else if(!l&&e.classList.contains("dls-license-icon-warn"))l=e,"warn"!=t&&e.remove();else if(!c&&e.classList.contains("dls-license-msg-content")){c=e;let t=n;for(;t;){let n=t.indexOf("["),r=t.indexOf("]",n),o=t.indexOf("(",r),i=t.indexOf(")",o);if(-1==n||-1==r||-1==o||-1==i){e.appendChild(new Text(t));break}n>0&&e.appendChild(new Text(t.substring(0,n)));let a=document.createElement("a"),s=t.substring(n+1,r);a.innerText=s;let _=t.substring(o+1,i);a.setAttribute("href",_),a.setAttribute("target","_blank"),e.appendChild(a),t=t.substring(i+1)}}document.body.appendChild(s)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await P.loadWasm(),await new Promise(((t,n)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new P;return e._instanceID=await P.createInstanceInWorker(),P._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:n,instanceID:this._instanceID})}))}async decode(e){P._onLog&&P._onLog("decode(source: any)"),P._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):P.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):P.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,n,r,o,i,a){return await new Promise(((s,_)=>{let d=P._nextTaskID++;P._taskCallbackMap.set(d,(e=>{if(e.success){let t,n=P._onLog?Date.now():0;P._onLog&&P._onLog("worker return result: "+n),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return _(e)}if(P._onLog){let e=Date.now();P._onLog("DBR getting message from worker timestamp: "+n),P._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),P._onLog("From DBR entering worker to returning message from worker costs: "+(n-this._timeEnterInnerDBR)),P._onLog("Handling results from DBR worker costs: "+(e-n)),P._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return s(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,_(t)}})),this._timeEnterInnerDBR=Date.now(),P._onLog&&P._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),P._dbrWorker.postMessage({type:"decodeBuffer",id:d,instanceID:this._instanceID,body:{buffer:e,width:t,height:n,stride:r,format:o,orientation:i,config:a}},[e.buffer]),P._onLog&&a&&a.timeStamp&&P._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-a.timeStamp))}))}async _decodeBuffer_Blob(e,t,n,r,o,i,a){P._onLog&&P._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const s=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,n)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{n(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(s),t,n,r,o,i,a)}async decodeBuffer(e,t,n,r,o,i,a){let s;return P._onLog&&P._onLog("decodeBuffer(buffer,width,height,stride,format)"),P._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?s=await this._decodeBuffer_Uint8Array(e,t,n,r,o,i,a):e instanceof ArrayBuffer?s=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,n,r,o,i,a):e instanceof Blob&&(s=await this._decodeBuffer_Blob(e,t,n,r,o,i,a)),s}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,n)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return n(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success){let t=JSON.parse(n.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getRuntimeSettings",id:n,instanceID:this._instanceID})}))}async updateRuntimeSettings(t){let n;if("string"==typeof t)if("speed"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=3,n.expectedBarcodesCount=0,n.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=5,n.expectedBarcodesCount=512,n.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region}else if("dense"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=9,n.expectedBarcodesCount=0,n.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=3,n.expectedBarcodesCount=0,n.localizationModes=[2,8,0,0,0,0,0,0]}else n=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(n=JSON.parse(JSON.stringify(t)),n.region instanceof Array){let e=n.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(n.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!P._bUseFullFeature){if(0!=(n.barcodeFormatIds&~(e.EnumBarcodeFormat.BF_ONED|e.EnumBarcodeFormat.BF_QR_CODE|e.EnumBarcodeFormat.BF_PDF417|e.EnumBarcodeFormat.BF_DATAMATRIX))||0!=n.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=n.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=n.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,n.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(n.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(n=>{if(n.success){try{this._handleRetJsonString(n.updateReturn)}catch(e){t(e)}return e()}{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(n)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=N,await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettings",id:n,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=N,await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:n,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!P._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:n,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!P._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,n)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){n(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){P._onLog&&P._onLog("_decode_Blob(blob: Blob)");let n=null,r=null;if("undefined"!=typeof createImageBitmap)try{n=await createImageBitmap(e)}catch(e){}n||(r=await function(e){return new Promise(((t,n)=>{let r=URL.createObjectURL(e),o=new Image;o.dbrObjUrl=r,o.src=r,o.onload=()=>{t(o)},o.onerror=e=>{n(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let o=await this._decode_Image(n||r,t);return n&&n.close(),o}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){P._onLog&&P._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let n,r,o=e instanceof HTMLImageElement?e.naturalWidth:e.width,i=e instanceof HTMLImageElement?e.naturalHeight:e.height,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_Canvas(t,n){if(P._onLog&&P._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";if(0===t.width||0===t.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=t,this.oriCanvasData=null);let r=(t.ctx2d||t.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,t.width,t.height).data;return await this._decodeBuffer_Uint8Array(r,t.width,t.height,4*t.width,e.EnumImagePixelFormat.IPF_ABGR_8888,0,n)}async _decode_Video(e,t){if(P._onLog&&P._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let n,r,o=e.videoWidth,i=e.videoHeight,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_DCEFrame(t,n){if(P._onLog&&P._onLog("_decode_DCEFrame(dceFrame)"),!P.isDCEFrame(t))return[];let r=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,colorMode:t.colorMode,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{width:o,height:i,colorMode:a,pixelFormat:s,stride:_,timeStamp:d}=t;let u;u=n&&n.bCopyData?new Uint8Array(t.data):t.data;let l=null;if(n?(l=JSON.parse(JSON.stringify(n)),l.timeStamp=d):l={timeStamp:d},s&&_)if("grey"===s)r=await this._decodeBuffer_Uint8Array(u,o,i,_,e.EnumImagePixelFormat.IPF_GrayScaled,0,l);else if("rgba"===s)r=await this._decodeBuffer_Uint8Array(u,o,i,_,e.EnumImagePixelFormat.IPF_ABGR_8888,0,l);else{if("bgra"!==s)throw new Error(`Pixel format '${s}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(u,o,i,_,e.EnumImagePixelFormat.IPF_ARGB_8888,0,l)}else if("grey"===a)r=await this._decodeBuffer_Uint8Array(u,o,i,o,e.EnumImagePixelFormat.IPF_GrayScaled,0,l);else if("rgba"===a)r=await this._decodeBuffer_Uint8Array(u,o,i,4*o,e.EnumImagePixelFormat.IPF_ABGR_8888,0,l);else{if("bgra"!==a)throw new Error(`Color mode '${a}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(u,o,i,4*o,e.EnumImagePixelFormat.IPF_ARGB_8888,0,l)}return r}async _decode_DSImage(t,n){if(P._onLog&&P._onLog("_decode_DSImage(dsImage)"),!P.isDSImage(t))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat.toLowerCase(),data:new Uint8Array(t.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{n(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(n,t)}}async _decode_FilePath(e,t){throw P._onLog&&P._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,n,r,o,i,a){if(e.length>0)for(let s of e){let e=s.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*i,e.x2*=.01*i,e.x3*=.01*i,e.x4*=.01*i,e.y1*=.01*a,e.y2*=.01*a,e.y3*=.01*a,e.y4*=.01*a);let _=i/r,d=a/o;e.x1=e.x1/_+t,e.x2=e.x2/_+t,e.x3=e.x3/_+t,e.x4=e.x4/_+t,e.y1=e.y1/d+n,e.y2=e.y2/d+n,e.y3=e.y3/d+n,e.y4=e.y4/d+n,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/o,e.y2*=100/o,e.y3*=100/o,e.y4*=100/o),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(t,n){let r,o=e.EnumErrorCode.DBR_UNKNOWN;return"number"==typeof t?(o=t,r=new Error(n)):r=new Error(t),r.code=o,r}_handleRetJsonString(t){let n=e.EnumErrorCode;if(t.textResults){for(let e=0;e{let n=t.indexOf(":");e[t.substring(0,n)]=t.substring(n+1)})),n.exception=e}}return t.decodeRecords?this.decodeRecords=t.decodeRecords:this.decodeRecords={},this._lastErrorCode=t.exception,this._lastErrorString=t.description,t.exception&&!P._setWarnnedEx.has(t.description)&&(P._setWarnnedEx.add(t.description),console.warn(t.description)),t.textResults}if(t.exception==n.DBR_SUCCESS)return t.data;throw P.BarcodeReaderException(t.exception,t.description)}async setModeArgument(e,t,n,r){return await new Promise(((o,i)=>{let a=P._nextTaskID++;P._taskCallbackMap.set(a,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return i(e)}return o()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"setModeArgument",id:a,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n,argumentValue:r}})}))}async getModeArgument(e,t,n){return await new Promise(((r,o)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return o(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}})),P._dbrWorker.postMessage({type:"getModeArgument",id:i,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getIntermediateResults",id:n,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let t=await this.getIntermediateResults(),n=[];for(let r of t)if(r.dataType==e.EnumIMResultDataType.IMRDT_IMAGE)for(let t of r.results){const r=t.bytes;let o;switch(P._onLog&&P._onLog(" "+r.length+" "+r.byteLength+" "+t.width+" "+t.height+" "+t.stride+" "+t.format),t.format){case e.EnumImagePixelFormat.IPF_ABGR_8888:o=new Uint8ClampedArray(r);break;case e.EnumImagePixelFormat.IPF_RGB_888:{const e=r.length/3;o=new Uint8ClampedArray(4*e);for(let t=0;t=n)break;o[a]=o[a+1]=o[a+2]=(128&e)/128*255,o[a+3]=255,e<<=1}}break}default:console.warn("unknow intermediate image",t)}if(!o)continue;let i=new ImageData(o,t.width,t.height),a=document.createElement("canvas");a.width=t.width,a.height=t.height,a.getContext("2d").putImageData(i,0,0),n.push(a)}return n}async getScanSettings(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success){let t=n.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(n.message);return e.stack+="\n"+n.stack,t(e)}})),P._dbrWorker.postMessage({type:"getScanSettings",id:n,instanceID:this._instanceID})}))}async updateScanSettings(t){if(!t)return;const n=JSON.parse(JSON.stringify(t));if(n.autoZoom||n.autoFocus||n.autoSuggestTip){if(!P._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const t=await this.getRuntimeSettings();t.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(t)}return n.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(n.intervalTime,0),delete n.intervalTime),n.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=n.whenToPlaySoundforSuccessfulRead,delete n.whenToPlaySoundforSuccessfulRead),n.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=n.soundOnSuccessfullRead,delete n.soundOnSuccessfullRead),n.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=n.whenToVibrateforSuccessfulRead,delete n.whenToVibrateforSuccessfulRead),n.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=n.vibrateDuration,delete n.vibrateDuration),n.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=n.captureAndDecodeInParallel,delete n.captureAndDecodeInParallel),n.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=n.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=n.autoZoom,delete n.autoZoom),n.hasOwnProperty("autoFocus")&&(this.autoFocus=n.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete n.autoFocus),n.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=n.autoSuggestTip,delete n.autoFocus),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack+="\n"+n.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:n}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let n of e)t.push(this._cloneDecodeResults(n));return t}{let t=e;return JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)))}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return P._onLog&&P._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));P._onLog&&P._onLog("======= once read ======="),P._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!P.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return P._onLog&&P._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let n=[];if(e){n=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(n&&n.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;t=n.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(t,r,o,s,_,i,a)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,n),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(n=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return n})().then((e=>{if(P._onLog&&P._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const n=()=>{let n=0;if(t&&t.length){let r=Math.min(...e),o=Math.max(...t);r&&o&&(n=r-o)}else n=0;return n>0?n:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=n()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),P._onLog&&P._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(P._onLog&&P._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,n=this.array_getFrameTimeCost;for(;n.length>=5;)n.shift();n.push(t)};t(e)}else P._onLog&&P._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const n=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let o=0;o{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(P._onLog&&P._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=P._nextTaskID++;P._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),P._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}var F,x,V,k,G,U,H,W,K,Z,Y,J,X,Q,j,q,z,$,ee,te,ne,re,oe,ie,ae,se;P._jsVersion="9.6.31",P._jsEditVersion="20230908",P._version=`loading...(JS ${P._jsVersion}.${P._jsEditVersion})`,P._license=S,P._sessionPassword=C,P.browserInfo=p,P._workerName=`dbr-${P._jsVersion}.browser.worker.js`,P._engineResourcePath=T,P._licenseServer=[],P._deviceFriendlyName="",P._isShowRelDecodeTimeInResults=!1,P._bWasmDebug=!1,P._bNeverShowDialog=!1,P.__bUseFullFeature=!0,P._nextTaskID=0,P._taskCallbackMap=new Map,P._pLoad=new B,P._lastErrorCode=0,P._lastErrorString="",P._setWarnnedEx=new Set,P._defaultUIElementURL="@engineResourcePath/dbr.ui.html",e.EnumBarcodeColourMode=void 0,(F=e.EnumBarcodeColourMode||(e.EnumBarcodeColourMode={}))[F.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",F[F.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",F[F.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",F[F.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",F[F.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",F[F.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",F[F.BICM_SKIP=0]="BICM_SKIP",F[F.BICM_REV=2147483648]="BICM_REV",e.EnumBarcodeComplementMode=void 0,(x=e.EnumBarcodeComplementMode||(e.EnumBarcodeComplementMode={}))[x.BCM_AUTO=1]="BCM_AUTO",x[x.BCM_GENERAL=2]="BCM_GENERAL",x[x.BCM_SKIP=0]="BCM_SKIP",x[x.BCM_REV=2147483648]="BCM_REV",e.EnumBarcodeFormat_2=void 0,(V=e.EnumBarcodeFormat_2||(e.EnumBarcodeFormat_2={}))[V.BF2_NULL=0]="BF2_NULL",V[V.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",V[V.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",V[V.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",V[V.BF2_POSTNET=2097152]="BF2_POSTNET",V[V.BF2_PLANET=4194304]="BF2_PLANET",V[V.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",V[V.BF2_RM4SCC=16777216]="BF2_RM4SCC",V[V.BF2_DOTCODE=2]="BF2_DOTCODE",V[V.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",V[V.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",V[V.BF2_PHARMACODE=12]="BF2_PHARMACODE",V[V.BF2_ALL=-1]="BF2_ALL",e.EnumBinarizationMode=void 0,(k=e.EnumBinarizationMode||(e.EnumBinarizationMode={}))[k.BM_AUTO=1]="BM_AUTO",k[k.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",k[k.BM_SKIP=0]="BM_SKIP",k[k.BM_THRESHOLD=4]="BM_THRESHOLD",k[k.BM_REV=2147483648]="BM_REV",e.EnumClarityCalculationMethod=void 0,(G=e.EnumClarityCalculationMethod||(e.EnumClarityCalculationMethod={}))[G.ECCM_CONTRAST=1]="ECCM_CONTRAST",e.EnumClarityFilterMode=void 0,(U=e.EnumClarityFilterMode||(e.EnumClarityFilterMode={}))[U.CFM_GENERAL=1]="CFM_GENERAL",e.EnumColourClusteringMode=void 0,(H=e.EnumColourClusteringMode||(e.EnumColourClusteringMode={}))[H.CCM_AUTO=1]="CCM_AUTO",H[H.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",H[H.CCM_SKIP=0]="CCM_SKIP",H[H.CCM_REV=2147483648]="CCM_REV",e.EnumColourConversionMode=void 0,(W=e.EnumColourConversionMode||(e.EnumColourConversionMode={}))[W.CICM_GENERAL=1]="CICM_GENERAL",W[W.CICM_SKIP=0]="CICM_SKIP",W[W.CICM_REV=2147483648]="CICM_REV",e.EnumConflictMode=void 0,(K=e.EnumConflictMode||(e.EnumConflictMode={}))[K.CM_IGNORE=1]="CM_IGNORE",K[K.CM_OVERWRITE=2]="CM_OVERWRITE",e.EnumDeblurMode=void 0,(Z=e.EnumDeblurMode||(e.EnumDeblurMode={}))[Z.DM_SKIP=0]="DM_SKIP",Z[Z.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",Z[Z.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",Z[Z.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",Z[Z.DM_SMOOTHING=8]="DM_SMOOTHING",Z[Z.DM_MORPHING=16]="DM_MORPHING",Z[Z.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",Z[Z.DM_SHARPENING=64]="DM_SHARPENING",Z[Z.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",Z[Z.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING",e.EnumDeformationResistingMode=void 0,(Y=e.EnumDeformationResistingMode||(e.EnumDeformationResistingMode={}))[Y.DRM_AUTO=1]="DRM_AUTO",Y[Y.DRM_GENERAL=2]="DRM_GENERAL",Y[Y.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",Y[Y.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",Y[Y.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",Y[Y.DRM_SKIP=0]="DRM_SKIP",Y[Y.DRM_REV=2147483648]="DRM_REV",e.EnumDPMCodeReadingMode=void 0,(J=e.EnumDPMCodeReadingMode||(e.EnumDPMCodeReadingMode={}))[J.DPMCRM_AUTO=1]="DPMCRM_AUTO",J[J.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",J[J.DPMCRM_SKIP=0]="DPMCRM_SKIP",J[J.DPMCRM_REV=2147483648]="DPMCRM_REV",e.EnumGrayscaleTransformationMode=void 0,(X=e.EnumGrayscaleTransformationMode||(e.EnumGrayscaleTransformationMode={}))[X.GTM_INVERTED=1]="GTM_INVERTED",X[X.GTM_ORIGINAL=2]="GTM_ORIGINAL",X[X.GTM_SKIP=0]="GTM_SKIP",X[X.GTM_REV=2147483648]="GTM_REV",e.EnumImagePreprocessingMode=void 0,(Q=e.EnumImagePreprocessingMode||(e.EnumImagePreprocessingMode={}))[Q.IPM_AUTO=1]="IPM_AUTO",Q[Q.IPM_GENERAL=2]="IPM_GENERAL",Q[Q.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",Q[Q.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",Q[Q.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",Q[Q.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",Q[Q.IPM_SKIP=0]="IPM_SKIP",Q[Q.IPM_REV=2147483648]="IPM_REV",e.EnumIntermediateResultSavingMode=void 0,(j=e.EnumIntermediateResultSavingMode||(e.EnumIntermediateResultSavingMode={}))[j.IRSM_MEMORY=1]="IRSM_MEMORY",j[j.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",j[j.IRSM_BOTH=4]="IRSM_BOTH",e.EnumLocalizationMode=void 0,(q=e.EnumLocalizationMode||(e.EnumLocalizationMode={}))[q.LM_SKIP=0]="LM_SKIP",q[q.LM_AUTO=1]="LM_AUTO",q[q.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",q[q.LM_LINES=8]="LM_LINES",q[q.LM_STATISTICS=4]="LM_STATISTICS",q[q.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",q[q.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",q[q.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",q[q.LM_CENTRE=128]="LM_CENTRE",q[q.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",q[q.LM_REV=2147483648]="LM_REV",e.EnumPDFReadingMode=void 0,(z=e.EnumPDFReadingMode||(e.EnumPDFReadingMode={}))[z.PDFRM_RASTER=1]="PDFRM_RASTER",z[z.PDFRM_AUTO=2]="PDFRM_AUTO",z[z.PDFRM_VECTOR=4]="PDFRM_VECTOR",z[z.PDFRM_REV=2147483648]="PDFRM_REV",e.EnumQRCodeErrorCorrectionLevel=void 0,($=e.EnumQRCodeErrorCorrectionLevel||(e.EnumQRCodeErrorCorrectionLevel={}))[$.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",$[$.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",$[$.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",$[$.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q",e.EnumRegionPredetectionMode=void 0,(ee=e.EnumRegionPredetectionMode||(e.EnumRegionPredetectionMode={}))[ee.RPM_AUTO=1]="RPM_AUTO",ee[ee.RPM_GENERAL=2]="RPM_GENERAL",ee[ee.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",ee[ee.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",ee[ee.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",ee[ee.RPM_SKIP=0]="RPM_SKIP",ee[ee.RPM_REV=2147483648]="RPM_REV",e.EnumResultCoordinateType=void 0,(te=e.EnumResultCoordinateType||(e.EnumResultCoordinateType={}))[te.RCT_PIXEL=1]="RCT_PIXEL",te[te.RCT_PERCENTAGE=2]="RCT_PERCENTAGE",e.EnumResultType=void 0,(ne=e.EnumResultType||(e.EnumResultType={}))[ne.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",ne[ne.RT_RAW_TEXT=1]="RT_RAW_TEXT",ne[ne.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",ne[ne.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT",e.EnumScaleUpMode=void 0,(re=e.EnumScaleUpMode||(e.EnumScaleUpMode={}))[re.SUM_AUTO=1]="SUM_AUTO",re[re.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",re[re.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",re[re.SUM_SKIP=0]="SUM_SKIP",re[re.SUM_REV=2147483648]="SUM_REV",e.EnumTerminatePhase=void 0,(oe=e.EnumTerminatePhase||(e.EnumTerminatePhase={}))[oe.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",oe[oe.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",oe[oe.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",oe[oe.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",oe[oe.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",oe[oe.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED",e.EnumTextFilterMode=void 0,(ie=e.EnumTextFilterMode||(e.EnumTextFilterMode={}))[ie.TFM_AUTO=1]="TFM_AUTO",ie[ie.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",ie[ie.TFM_SKIP=0]="TFM_SKIP",ie[ie.TFM_REV=2147483648]="TFM_REV",e.EnumTextResultOrderMode=void 0,(ae=e.EnumTextResultOrderMode||(e.EnumTextResultOrderMode={}))[ae.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",ae[ae.TROM_POSITION=2]="TROM_POSITION",ae[ae.TROM_FORMAT=4]="TROM_FORMAT",ae[ae.TROM_SKIP=0]="TROM_SKIP",ae[ae.TROM_REV=2147483648]="TROM_REV",e.EnumTextureDetectionMode=void 0,(se=e.EnumTextureDetectionMode||(e.EnumTextureDetectionMode={}))[se.TDM_AUTO=1]="TDM_AUTO",se[se.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",se[se.TDM_SKIP=0]="TDM_SKIP",se[se.TDM_REV=2147483648]="TDM_REV",e.BarcodeReader=P,Object.defineProperty(e,"__esModule",{value:!0})})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Dynamsoft=e.Dynamsoft||{},e.Dynamsoft.DBR={}))}(this,(function(e){"use strict";var t=function(){this.init()};t.prototype={init:function(){var e=this||n;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var t=this||n;if(e=parseFloat(e),t.ctx||u(),void 0!==e&&e>=0&&e<=1){if(t._volume=e,t._muted)return t;t.usingWebAudio&&t.masterGain.gain.setValueAtTime(e,n.ctx.currentTime);for(var r=0;r=0;t--)e._howls[t].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,u()),e},codecs:function(e){return(this||n)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||n;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||n,t=null;try{t="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!t||"function"!=typeof t.canPlayType)return e;var r=t.canPlayType("audio/mpeg;").replace(/^no$/,""),o=e._navigator?e._navigator.userAgent:"",i=o.match(/OPR\/([0-6].)/g),a=i&&parseInt(i[0].split("/")[1],10)<33,s=-1!==o.indexOf("Safari")&&-1===o.indexOf("Chrome"),_=o.match(/Version\/(.*?) /),d=s&&_&&parseInt(_[1],10)<15;return e._codecs={mp3:!(a||!r&&!t.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!r,opus:!!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(t.canPlayType('audio/wav; codecs="1"')||t.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!t.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!t.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(t.canPlayType("audio/x-m4a;")||t.canPlayType("audio/m4a;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(t.canPlayType("audio/x-m4b;")||t.canPlayType("audio/m4b;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(t.canPlayType("audio/x-mp4;")||t.canPlayType("audio/mp4;")||t.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(d||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(d||!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(t.canPlayType("audio/x-flac;")||t.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||n;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var t=function(n){for(;e._html5AudioPool.length0?s._seek:r._sprite[e][0]/1e3),u=Math.max(0,(r._sprite[e][0]+r._sprite[e][1])/1e3-d),l=1e3*u/Math.abs(s._rate),c=r._sprite[e][0]/1e3,h=(r._sprite[e][0]+r._sprite[e][1])/1e3;s._sprite=e,s._ended=!1;var m=function(){s._paused=!1,s._seek=d,s._start=c,s._stop=h,s._loop=!(!s._loop&&!r._sprite[e][2])};if(!(d>=h)){var f=s._node;if(r._webAudio){var g=function(){r._playLock=!1,m(),r._refreshBuffer(s);var e=s._muted||r._muted?0:s._volume;f.gain.setValueAtTime(e,n.ctx.currentTime),s._playStart=n.ctx.currentTime,void 0===f.bufferSource.start?s._loop?f.bufferSource.noteGrainOn(0,d,86400):f.bufferSource.noteGrainOn(0,d,u):s._loop?f.bufferSource.start(0,d,86400):f.bufferSource.start(0,d,u),l!==1/0&&(r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),l)),t||setTimeout((function(){r._emit("play",s._id),r._loadQueue()}),0)};"running"===n.state&&"interrupted"!==n.ctx.state?g():(r._playLock=!0,r.once("resume",g),r._clearTimer(s._id))}else{var p=function(){f.currentTime=d,f.muted=s._muted||r._muted||n._muted||f.muted,f.volume=s._volume*n.volume(),f.playbackRate=s._rate;try{var o=f.play();if(o&&"undefined"!=typeof Promise&&(o instanceof Promise||"function"==typeof o.then)?(r._playLock=!0,m(),o.then((function(){r._playLock=!1,f._unlocked=!0,t?r._loadQueue():r._emit("play",s._id)})).catch((function(){r._playLock=!1,r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),s._ended=!0,s._paused=!0}))):t||(r._playLock=!1,m(),r._emit("play",s._id)),f.playbackRate=s._rate,f.paused)return void r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||s._loop?r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),l):(r._endTimers[s._id]=function(){r._ended(s),f.removeEventListener("ended",r._endTimers[s._id],!1)},f.addEventListener("ended",r._endTimers[s._id],!1))}catch(e){r._emit("playerror",s._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===f.src&&(f.src=r._src,f.load());var A=window&&window.ejecta||!f.readyState&&n._navigator.isCocoonJS;if(f.readyState>=3||A)p();else{r._playLock=!0,r._state="loading";var E=function(){r._state="loaded",p(),f.removeEventListener(n._canPlayEvent,E,!1)};f.addEventListener(n._canPlayEvent,E,!1),r._clearTimer(s._id)}}return s._id}r._ended(s)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var n=t._getSoundIds(e),r=0;r=0?t=parseInt(i[0],10):e=parseFloat(i[0])}else i.length>=2&&(e=parseFloat(i[0]),t=parseInt(i[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(r=t?o._soundById(t):o._sounds[0])?r._volume:0;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"volume",action:function(){o.volume.apply(o,i)}}),o;void 0===t&&(o._volume=e),t=o._getSoundIds(t);for(var _=0;_0?r/d:r),l=Date.now();e._fadeTo=n,e._interval=setInterval((function(){var o=(Date.now()-l)/r;l=Date.now(),s+=_*o,s=Math.round(100*s)/100,s=_<0?Math.max(n,s):Math.min(n,s),a._webAudio?e._volume=s:a.volume(s,e._id,!0),i&&(a._volume=s),(nt&&s>=n)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,a.volume(n,e._id),a._emit("fade",e._id))}),u)},_stopFade:function(e){var t=this,r=t._soundById(e);return r&&r._interval&&(t._webAudio&&r._node.gain.cancelScheduledValues(n.ctx.currentTime),clearInterval(r._interval),r._interval=null,t.volume(r._fadeTo,e),r._fadeTo=null,t._emit("fade",e)),t},loop:function(){var e,t,n,r=this,o=arguments;if(0===o.length)return r._loop;if(1===o.length){if("boolean"!=typeof o[0])return!!(n=r._soundById(parseInt(o[0],10)))&&n._loop;e=o[0],r._loop=e}else 2===o.length&&(e=o[0],t=parseInt(o[1],10));for(var i=r._getSoundIds(t),a=0;a=0?t=parseInt(i[0],10):e=parseFloat(i[0])}else 2===i.length&&(e=parseFloat(i[0]),t=parseInt(i[1],10));if("number"!=typeof e)return(r=o._soundById(t))?r._rate:o._rate;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"rate",action:function(){o.rate.apply(o,i)}}),o;void 0===t&&(o._rate=e),t=o._getSoundIds(t);for(var _=0;_=0?t=parseInt(o[0],10):r._sounds.length&&(t=r._sounds[0]._id,e=parseFloat(o[0]))}else 2===o.length&&(e=parseFloat(o[0]),t=parseInt(o[1],10));if(void 0===t)return 0;if("number"==typeof e&&("loaded"!==r._state||r._playLock))return r._queue.push({event:"seek",action:function(){r.seek.apply(r,o)}}),r;var s=r._soundById(t);if(s){if(!("number"==typeof e&&e>=0)){if(r._webAudio){var _=r.playing(t)?n.ctx.currentTime-s._playStart:0,d=s._rateSeek?s._rateSeek-s._seek:0;return s._seek+(d+_*Math.abs(s._rate))}return s._node.currentTime}var u=r.playing(t);u&&r.pause(t,!0),s._seek=e,s._ended=!1,r._clearTimer(t),r._webAudio||!s._node||isNaN(s._node.duration)||(s._node.currentTime=e);var l=function(){u&&r.play(t,!0),r._emit("seek",t)};if(u&&!r._webAudio){var c=function(){r._playLock?setTimeout(c,0):l()};setTimeout(c,0)}else l()}return r},playing:function(e){var t=this;if("number"==typeof e){var n=t._soundById(e);return!!n&&!n._paused}for(var r=0;r=0&&n._howls.splice(o,1);var a=!0;for(r=0;r=0){a=!1;break}return i&&a&&delete i[e._src],n.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,n,r){var o=this["_on"+e];return"function"==typeof t&&o.push(r?{id:n,fn:t,once:r}:{id:n,fn:t}),this},off:function(e,t,n){var r=this,o=r["_on"+e],i=0;if("number"==typeof t&&(n=t,t=null),t||n)for(i=0;i=0;i--)o[i].id&&o[i].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,n)}.bind(r,o[i].fn),0),o[i].once&&r.off(e,o[i].fn,o[i].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var n=t._queue[0];n.event===e&&(t._queue.shift(),t._loadQueue()),e||n.action()}return t},_ended:function(e){var t=this,r=e._sprite;if(!t._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(n<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),n--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],n=0;n=0;if(!e.bufferSource)return this;if(n._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{e.bufferSource.buffer=n._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(n._navigator&&n._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var o=function(e){this._parent=e,this.init()};o.prototype={init:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++n._counter,t._sounds.push(e),e.create(),e},create:function(){var e=this,t=e._parent,r=n._muted||e._muted||e._parent._muted?0:e._volume;return t._webAudio?(e._node=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),e._node.gain.setValueAtTime(r,n.ctx.currentTime),e._node.paused=!0,e._node.connect(n.masterGain)):n.noAudio||(e._node=n._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(n._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=t._src,e._node.preload=!0===t._preload?"auto":t._preload,e._node.volume=r*n.volume(),e._node.load()),e},reset:function(){var e=this,t=e._parent;return e._muted=t._muted,e._loop=t._loop,e._volume=t._volume,e._rate=t._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++n._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,t=e._parent;t._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(t._sprite).length&&(t._sprite={__default:[0,1e3*t._duration]}),"loaded"!==t._state&&(t._state="loaded",t._emit("load"),t._loadQueue()),e._node.removeEventListener(n._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var i={},a=function(e){var t=e._src;if(i[t])return e._duration=i[t].duration,void d(e);if(/^data:[^;]+;base64,/.test(t)){for(var n=atob(t.split(",")[1]),r=new Uint8Array(n.length),o=0;o0?(i[t._src]=e,d(t,e)):r()};"undefined"!=typeof Promise&&1===n.ctx.decodeAudioData.length?n.ctx.decodeAudioData(e).then(o).catch(r):n.ctx.decodeAudioData(e,o,r)},d=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},u=function(){if(n.usingWebAudio){try{"undefined"!=typeof AudioContext?n.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?n.ctx=new webkitAudioContext:n.usingWebAudio=!1}catch(e){n.usingWebAudio=!1}n.ctx||(n.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(n._navigator&&n._navigator.platform),t=n._navigator&&n._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),r=t?parseInt(t[1],10):null;if(e&&r&&r<9){var o=/safari/.test(n._navigator&&n._navigator.userAgent.toLowerCase());n._navigator&&!o&&(n.usingWebAudio=!1)}n.usingWebAudio&&(n.masterGain=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),n.masterGain.gain.setValueAtTime(n._muted?0:n._volume,n.ctx.currentTime),n.masterGain.connect(n.ctx.destination)),n._setup()}};!function(e,t,n,r){var o;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var n=t._howls.length-1;n>=0;n--)t._howls[n].stereo(e);return t},e.prototype.pos=function(e,n,r){var o=this;return o.ctx&&o.ctx.listener?(n="number"!=typeof n?o._pos[1]:n,r="number"!=typeof r?o._pos[2]:r,"number"!=typeof e?o._pos:(o._pos=[e,n,r],void 0!==o.ctx.listener.positionX?(o.ctx.listener.positionX.setTargetAtTime(o._pos[0],t.ctx.currentTime,.1),o.ctx.listener.positionY.setTargetAtTime(o._pos[1],t.ctx.currentTime,.1),o.ctx.listener.positionZ.setTargetAtTime(o._pos[2],t.ctx.currentTime,.1)):o.ctx.listener.setPosition(o._pos[0],o._pos[1],o._pos[2]),o)):o},e.prototype.orientation=function(e,n,r,o,i,a){var s=this;if(!s.ctx||!s.ctx.listener)return s;var _=s._orientation;return n="number"!=typeof n?_[1]:n,r="number"!=typeof r?_[2]:r,o="number"!=typeof o?_[3]:o,i="number"!=typeof i?_[4]:i,a="number"!=typeof a?_[5]:a,"number"!=typeof e?_:(s._orientation=[e,n,r,o,i,a],void 0!==s.ctx.listener.forwardX?(s.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),s.ctx.listener.forwardY.setTargetAtTime(n,t.ctx.currentTime,.1),s.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),s.ctx.listener.upX.setTargetAtTime(o,t.ctx.currentTime,.1),s.ctx.listener.upY.setTargetAtTime(i,t.ctx.currentTime,.1),s.ctx.listener.upZ.setTargetAtTime(a,t.ctx.currentTime,.1)):s.ctx.listener.setOrientation(e,n,r,o,i,a),s)},n.prototype.init=(o=n.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],o.call(this,e)}),n.prototype.stereo=function(e,n){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,n)}}),r;var o=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===n){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var a=r._getSoundIds(n),s=0;s{let e=!1;if(I)try{(await g.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===p.browser&&p.version>66||"Safari"===p.browser&&p.version>13||"OPR"===p.browser&&p.version>43||"Edge"===p.browser&&p.version;const T=(()=>{if(!l&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),D=" is not allowed to change after `createInstance` or `loadWasm` is called.",S=!l&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",C=!l&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",y=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let t=0;te&&"object"==typeof e&&"function"==typeof e.then;class B extends Promise{constructor(e){let t,n;super(((e,r)=>{t=e,n=r})),this._s="pending",this.resolve=e=>{this.isPending&&(b(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",n(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,b(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const n=await t;e===this._task&&this.resolve(n)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}const N=["iPhone","iPad","Android","HarmonyOS"].includes(p.OS)?2048:4096;class P{constructor(){this._instanceID=void 0,this._ifSaveOriginalImageInACanvas=!1,this.oriCanvas=null,this.oriCanvasData=null,this.canvas=null,this.bFilterRegionInJs=!1,this._region=null,this._timeStartDecode=null,this._timeEnterInnerDBR=null,this._timeGetMessage=null,this.decodeRecords={},this.bDestroyed=!1,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._indexCurrentDecodingFrame=0,this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.captureAndDecodeInParallel=!0,this.autoSuggestTip=!1,this.suggestTipFrameArray=[],this.suggestTipFrameLimit=[5,3],this.noIntermediateResultsCount=0,this.noIntermediateResultsTipLimit=100,this.tinyBarcodeTipModuleSizeLimit=3,this.hugeBarcodeTipLimit=.9,this.autoZoomInFrameArray=[],this.autoZoomInFrameLimit=[5,3],this.autoZoomInStepRate=1/3,this.autoZoomInMaxStep=1.5,this.autoZoomInMaxTimes=5,this.autoZoomInMinStep=Math.pow(10,1/this.autoZoomInMaxTimes),this.autoZoomInIdealModuleSize=6,this.autoZoomOutFrameCount=0,this.autoZoomOutFrameLimit=3,this.autoZoomOutStepRate=1/3,this.autoZoomOutMinValue=1,this.autoZoomOutMinStep=2,this.autoZoomOutStepRate_2=.05,this.autoZoomOutMinValue_2=2,this.frameArrayInIdealZoom=[],this.frameLimitInIdealZoom=[5,3],this.enableZoomOutInIdealZoom=!1,this.nextActionInIdealZoom="focus",this.autoFocusFrameArray=[],this.autoFocusFrameLimit=[5,3],this.autoZoomIdealArea=[0,.05],this.autoZoomTargetBorder=.9,this.autoZoomDetectionArea=.5,this.autoZoom=!1,this.autoFocus=!1,this._resultHighlightingDuration=-1,this._dce=null,this._imgSource=null,this._maxCvsSideLength=N,this._promiseStartScan=null,this.beepSound=new r({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`license`"+D);n._license=t})(P,e)}static get productKeys(){return this._license}static set productKeys(e){P.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){P.license=e}static get organizationID(){return this._license}static set organizationID(e){P.license=e}static set sessionPassword(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`sessionPassword`"+D);n._sessionPassword=t})(P,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:A,worker:E,getUserMedia:I,camera:await R(),browser:p.browser,version:p.version,OS:p.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");P._engineResourcePath=(e=>{if(null==e&&(e="./"),!l){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`licenseServer`"+D);n._licenseServer=y(t)})(P,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+D);n._deviceFriendlyName=t||""})(P,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");P.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=P._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",P.engineResourcePath)}static set defaultUIElementURL(e){P._defaultUIElementURL=e}static _fireHTTPSWarnning(){P.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{P.onWarning&&P.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new r({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;P._onLog&&P._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const n=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{n?n===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else n||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),n=null;if(t&&t.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;n=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(n,r,o,s,_,i,a)}if(this._drawResults(n,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(P._onLog&&P._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!P.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:n,sp:r,rmk:o}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,n,r=t._license||"",o=JSON.parse(JSON.stringify(t._licenseServer)),i=t._sessionPassword,a=0;if(r.startsWith("t")||r.startsWith("f"))a=0;else if(0===r.length||r.startsWith("P")||r.startsWith("L")||r.startsWith("Y")||r.startsWith("A"))a=1;else{a=2;const t=r.indexOf(":");if(-1!=t&&(r=r.substring(t+1)),r.startsWith("DLS2")){let t;try{let e=r.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(r=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof r&&(r=JSON.stringify(r)),0===o.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),o=y(e)}!i&&t.sessionPassword&&(i=t.sessionPassword),e=t.remark}("200001"===r||r.startsWith("200001-"))&&(o&&o.length||(r="")),r||(a=1)}if(a&&(c.crypto||(n="Please upgrade your browser to support online key."),c.crypto.subtle||(n="Require https to use online key in this browser.")),n){if(1!==a)throw new Error(n);a=0,console.warn(n),t._lastErrorCode=-1,t._lastErrorString=n}return 1===a&&(r="",console.warn("Applying for a public trial license ...")),{lt:a,l:r,ls:o,sp:i,rmk:e}}throw new Error("Can't preprocess license again"+D)})(P);this._pLoad.task=async(i,a)=>{let s=P.engineResourcePath+P._workerName;P.engineResourcePath.startsWith(location.origin)||(s=await fetch(s).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),P._dbrWorker=new Worker(s),P._dbrWorker.onerror=e=>{let t=new Error(e.message);a(t)},P._dbrWorker.onmessage=async t=>{let n=t.data?t.data:t;switch(n.type){case"log":P._onLog&&P._onLog(n.message);break;case"load":{n.message&&(n.message=n.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let t,r=!1;1===e&&(r=!0,n.message||(n.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),n.success?(P._dbrWorker.onerror=null,P._version=n.version+"(JS "+P._jsVersion+"."+P._jsEditVersion+")",P._onLog&&P._onLog("load dbr worker success"),n.message&&console.warn(n.message)):(t=new Error(n.message),t.stack=n.stack+"\n"+t.stack,t.ltsErrorCode=n.ltsErrorCode,r||111==n.ltsErrorCode&&-1!=n.message.toLowerCase().indexOf("trial license")&&(r=!0)),r&&P.showDialog(n.success?"warn":"error",n.message),n.success?i():a(t);break}case"task":{let e=n.id,t=n.body;try{P._taskCallbackMap.get(e)(t),P._taskCallbackMap.delete(e)}catch(t){throw P._taskCallbackMap.delete(e),t}break}default:P._onLog&&P._onLog(t)}},P._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:P.engineResourcePath,bUseFullFeature:P._bUseFullFeature,bd:P._bWasmDebug,v:P._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:p,cv:P.authCacheVersion,fn:P.deviceFriendlyName,ls:n,sp:r,rmk:o})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,n)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let o=await r.text();if(!o.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let i=document.createElement("div");i.innerHTML=o;let a=[];for(let e=0;e{if(e==t.target){s.remove();for(let e of a)e.remove()}}));else if(!d&&e.classList.contains("dls-license-icon-close"))d=e,e.addEventListener("click",(()=>{s.remove();for(let e of a)e.remove()}));else if(!u&&e.classList.contains("dls-license-icon-error"))u=e,"error"!=t&&e.remove();else if(!l&&e.classList.contains("dls-license-icon-warn"))l=e,"warn"!=t&&e.remove();else if(!c&&e.classList.contains("dls-license-msg-content")){c=e;let t=n;for(;t;){let n=t.indexOf("["),r=t.indexOf("]",n),o=t.indexOf("(",r),i=t.indexOf(")",o);if(-1==n||-1==r||-1==o||-1==i){e.appendChild(new Text(t));break}n>0&&e.appendChild(new Text(t.substring(0,n)));let a=document.createElement("a"),s=t.substring(n+1,r);a.innerText=s;let _=t.substring(o+1,i);a.setAttribute("href",_),a.setAttribute("target","_blank"),e.appendChild(a),t=t.substring(i+1)}}document.body.appendChild(s)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await P.loadWasm(),await new Promise(((t,n)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new P;return e._instanceID=await P.createInstanceInWorker(),P._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:n,instanceID:this._instanceID})}))}async decode(e){P._onLog&&P._onLog("decode(source: any)"),P._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):P.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):P.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,n,r,o,i,a){return await new Promise(((s,_)=>{let d=P._nextTaskID++;P._taskCallbackMap.set(d,(e=>{if(e.success){let t,n=P._onLog?Date.now():0;P._onLog&&P._onLog("worker return result: "+n),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return _(e)}if(P._onLog){let e=Date.now();P._onLog("DBR getting message from worker timestamp: "+n),P._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),P._onLog("From DBR entering worker to returning message from worker costs: "+(n-this._timeEnterInnerDBR)),P._onLog("Handling results from DBR worker costs: "+(e-n)),P._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return s(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,_(t)}})),this._timeEnterInnerDBR=Date.now(),P._onLog&&P._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),P._dbrWorker.postMessage({type:"decodeBuffer",id:d,instanceID:this._instanceID,body:{buffer:e,width:t,height:n,stride:r,format:o,orientation:i,config:a}},[e.buffer]),P._onLog&&a&&a.timeStamp&&P._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-a.timeStamp))}))}async _decodeBuffer_Blob(e,t,n,r,o,i,a){P._onLog&&P._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const s=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,n)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{n(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(s),t,n,r,o,i,a)}async decodeBuffer(e,t,n,r,o,i,a){let s;return P._onLog&&P._onLog("decodeBuffer(buffer,width,height,stride,format)"),P._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?s=await this._decodeBuffer_Uint8Array(e,t,n,r,o,i,a):e instanceof ArrayBuffer?s=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,n,r,o,i,a):e instanceof Blob&&(s=await this._decodeBuffer_Blob(e,t,n,r,o,i,a)),s}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,n)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return n(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success){let t=JSON.parse(n.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getRuntimeSettings",id:n,instanceID:this._instanceID})}))}async updateRuntimeSettings(t){let n;if("string"==typeof t)if("speed"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=3,n.expectedBarcodesCount=0,n.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=5,n.expectedBarcodesCount=512,n.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region}else if("dense"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=9,n.expectedBarcodesCount=0,n.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==t){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,n=await this.getRuntimeSettings(),n.barcodeFormatIds=e.barcodeFormatIds,n.barcodeFormatIds_2=e.barcodeFormatIds_2,n.region=e.region,n.deblurLevel=3,n.expectedBarcodesCount=0,n.localizationModes=[2,8,0,0,0,0,0,0]}else n=JSON.parse(t);else{if("object"!=typeof t)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(n=JSON.parse(JSON.stringify(t)),n.region instanceof Array){let e=n.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(n.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!P._bUseFullFeature){if(0!=(n.barcodeFormatIds&~(e.EnumBarcodeFormat.BF_ONED|e.EnumBarcodeFormat.BF_QR_CODE|e.EnumBarcodeFormat.BF_PDF417|e.EnumBarcodeFormat.BF_DATAMATRIX))||0!=n.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=n.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=n.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,n.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(n.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(n=>{if(n.success){try{this._handleRetJsonString(n.updateReturn)}catch(e){t(e)}return e()}{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(n)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=N,await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettings",id:n,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=N,await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:n,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!P._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:n,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!P._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,n)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){n(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),P._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){P._onLog&&P._onLog("_decode_Blob(blob: Blob)");let n=null,r=null;if("undefined"!=typeof createImageBitmap)try{n=await createImageBitmap(e)}catch(e){}n||(r=await function(e){return new Promise(((t,n)=>{let r=URL.createObjectURL(e),o=new Image;o.dbrObjUrl=r,o.src=r,o.onload=()=>{t(o)},o.onerror=e=>{n(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let o=await this._decode_Image(n||r,t);return n&&n.close(),o}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){P._onLog&&P._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let n,r,o=e instanceof HTMLImageElement?e.naturalWidth:e.width,i=e instanceof HTMLImageElement?e.naturalHeight:e.height,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_Canvas(t,n){if(P._onLog&&P._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),t.crossOrigin&&"anonymous"!=t.crossOrigin)throw"cors";if(0===t.width||0===t.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=t,this.oriCanvasData=null);let r=(t.ctx2d||t.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,t.width,t.height).data;return await this._decodeBuffer_Uint8Array(r,t.width,t.height,4*t.width,e.EnumImagePixelFormat.IPF_ABGR_8888,0,n)}async _decode_Video(e,t){if(P._onLog&&P._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let n,r,o=e.videoWidth,i=e.videoHeight,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return P.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_DCEFrame(t,n){if(P._onLog&&P._onLog("_decode_DCEFrame(dceFrame)"),!P.isDCEFrame(t))return[];let r=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,colorMode:t.colorMode,pixelFormat:t.pixelFormat,data:new Uint8Array(t.data),toCanvas:t.toCanvas});const{width:o,height:i,colorMode:a,pixelFormat:s,stride:_,timeStamp:d}=t;let u;u=n&&n.bCopyData?new Uint8Array(t.data):t.data;let l=null;if(n?(l=JSON.parse(JSON.stringify(n)),l.timeStamp=d):l={timeStamp:d},s&&_)if("grey"===s)r=await this._decodeBuffer_Uint8Array(u,o,i,_,e.EnumImagePixelFormat.IPF_GrayScaled,0,l);else if("rgba"===s)r=await this._decodeBuffer_Uint8Array(u,o,i,_,e.EnumImagePixelFormat.IPF_ABGR_8888,0,l);else{if("bgra"!==s)throw new Error(`Pixel format '${s}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(u,o,i,_,e.EnumImagePixelFormat.IPF_ARGB_8888,0,l)}else if("grey"===a)r=await this._decodeBuffer_Uint8Array(u,o,i,o,e.EnumImagePixelFormat.IPF_GrayScaled,0,l);else if("rgba"===a)r=await this._decodeBuffer_Uint8Array(u,o,i,4*o,e.EnumImagePixelFormat.IPF_ABGR_8888,0,l);else{if("bgra"!==a)throw new Error(`Color mode '${a}' is not supported to decode.`);r=await this._decodeBuffer_Uint8Array(u,o,i,4*o,e.EnumImagePixelFormat.IPF_ARGB_8888,0,l)}return r}async _decode_DSImage(t,n){if(P._onLog&&P._onLog("_decode_DSImage(dsImage)"),!P.isDSImage(t))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:t.width,height:t.height,pixelFormat:t.pixelFormat.toLowerCase(),data:new Uint8Array(t.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{n(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(n,t)}}async _decode_FilePath(e,t){throw P._onLog&&P._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,n,r,o,i,a){if(e.length>0)for(let s of e){let e=s.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*i,e.x2*=.01*i,e.x3*=.01*i,e.x4*=.01*i,e.y1*=.01*a,e.y2*=.01*a,e.y3*=.01*a,e.y4*=.01*a);let _=i/r,d=a/o;e.x1=e.x1/_+t,e.x2=e.x2/_+t,e.x3=e.x3/_+t,e.x4=e.x4/_+t,e.y1=e.y1/d+n,e.y2=e.y2/d+n,e.y3=e.y3/d+n,e.y4=e.y4/d+n,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/o,e.y2*=100/o,e.y3*=100/o,e.y4*=100/o),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(t,n){let r,o=e.EnumErrorCode.DBR_UNKNOWN;return"number"==typeof t?(o=t,r=new Error(n)):r=new Error(t),r.code=o,r}_handleRetJsonString(t){let n=e.EnumErrorCode;if(t.textResults){for(let e=0;e{let n=t.indexOf(":");e[t.substring(0,n)]=t.substring(n+1)})),n.exception=e}}return t.decodeRecords?this.decodeRecords=t.decodeRecords:this.decodeRecords={},this._lastErrorCode=t.exception,this._lastErrorString=t.description,t.exception&&!P._setWarnnedEx.has(t.description)&&(P._setWarnnedEx.add(t.description),console.warn(t.description)),t.textResults}if(t.exception==n.DBR_SUCCESS)return t.data;throw P.BarcodeReaderException(t.exception,t.description)}async setModeArgument(e,t,n,r){return await new Promise(((o,i)=>{let a=P._nextTaskID++;P._taskCallbackMap.set(a,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return i(e)}return o()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),P._dbrWorker.postMessage({type:"setModeArgument",id:a,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n,argumentValue:r}})}))}async getModeArgument(e,t,n){return await new Promise(((r,o)=>{let i=P._nextTaskID++;P._taskCallbackMap.set(i,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return o(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}})),P._dbrWorker.postMessage({type:"getModeArgument",id:i,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),P._dbrWorker.postMessage({type:"getIntermediateResults",id:n,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let t=await this.getIntermediateResults(),n=[];for(let r of t)if(r.dataType==e.EnumIMResultDataType.IMRDT_IMAGE)for(let t of r.results){const r=t.bytes;let o;switch(P._onLog&&P._onLog(" "+r.length+" "+r.byteLength+" "+t.width+" "+t.height+" "+t.stride+" "+t.format),t.format){case e.EnumImagePixelFormat.IPF_ABGR_8888:o=new Uint8ClampedArray(r);break;case e.EnumImagePixelFormat.IPF_RGB_888:{const e=r.length/3;o=new Uint8ClampedArray(4*e);for(let t=0;t=n)break;o[a]=o[a+1]=o[a+2]=(128&e)/128*255,o[a+3]=255,e<<=1}}break}default:console.warn("unknow intermediate image",t)}if(!o)continue;let i=new ImageData(o,t.width,t.height),a=document.createElement("canvas");a.width=t.width,a.height=t.height,a.getContext("2d").putImageData(i,0,0),n.push(a)}return n}async getScanSettings(){return await new Promise(((e,t)=>{let n=P._nextTaskID++;P._taskCallbackMap.set(n,(n=>{if(n.success){let t=n.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(n.message);return e.stack+="\n"+n.stack,t(e)}})),P._dbrWorker.postMessage({type:"getScanSettings",id:n,instanceID:this._instanceID})}))}async updateScanSettings(t){if(!t)return;const n=JSON.parse(JSON.stringify(t));if(n.autoZoom||n.autoFocus||n.autoSuggestTip){if(!P._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const t=await this.getRuntimeSettings();t.intermediateResultTypes|=e.EnumIntermediateResultType.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(t)}return n.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(n.intervalTime,0),delete n.intervalTime),n.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=n.whenToPlaySoundforSuccessfulRead,delete n.whenToPlaySoundforSuccessfulRead),n.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=n.soundOnSuccessfullRead,delete n.soundOnSuccessfullRead),n.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=n.whenToVibrateforSuccessfulRead,delete n.whenToVibrateforSuccessfulRead),n.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=n.vibrateDuration,delete n.vibrateDuration),n.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=n.captureAndDecodeInParallel,delete n.captureAndDecodeInParallel),n.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=n.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=n.autoZoom,delete n.autoZoom),n.hasOwnProperty("autoFocus")&&(this.autoFocus=n.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete n.autoFocus),n.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=n.autoSuggestTip,delete n.autoFocus),await new Promise(((e,t)=>{let r=P._nextTaskID++;P._taskCallbackMap.set(r,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack+="\n"+n.stack,t(e)}})),P._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:n}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let n of e)t.push(this._cloneDecodeResults(n));return t}{let t=e;return JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)))}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return P._onLog&&P._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));P._onLog&&P._onLog("======= once read ======="),P._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!P.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return P._onLog&&P._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let n=[];if(e){n=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(n&&n.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;t=n.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),P.recalculateResultLocation(t,r,o,s,_,i,a)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,n),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(n=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return n})().then((e=>{if(P._onLog&&P._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const n=()=>{let n=0;if(t&&t.length){let r=Math.min(...e),o=Math.max(...t);r&&o&&(n=r-o)}else n=0;return n>0?n:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=n()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),P._onLog&&P._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(P._onLog&&P._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,n=this.array_getFrameTimeCost;for(;n.length>=5;)n.shift();n.push(t)};t(e)}else P._onLog&&P._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const n=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let o=0;o{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(P._onLog&&P._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=P._nextTaskID++;P._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),P._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}var F,x,V,k,G,U,H,W,K,Z,Y,J,X,Q,j,q,z,$,ee,te,ne,re,oe,ie,ae,se;P._jsVersion="9.6.32",P._jsEditVersion="20231027",P._version=`loading...(JS ${P._jsVersion}.${P._jsEditVersion})`,P._license=S,P._sessionPassword=C,P.browserInfo=p,P._workerName=`dbr-${P._jsVersion}.browser.worker.js`,P._engineResourcePath=T,P._licenseServer=[],P._deviceFriendlyName="",P._isShowRelDecodeTimeInResults=!1,P._bWasmDebug=!1,P._bNeverShowDialog=!1,P.__bUseFullFeature=!0,P._nextTaskID=0,P._taskCallbackMap=new Map,P._pLoad=new B,P._lastErrorCode=0,P._lastErrorString="",P._setWarnnedEx=new Set,P._defaultUIElementURL="@engineResourcePath/dbr.ui.html",e.EnumBarcodeColourMode=void 0,(F=e.EnumBarcodeColourMode||(e.EnumBarcodeColourMode={}))[F.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",F[F.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",F[F.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",F[F.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",F[F.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",F[F.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",F[F.BICM_SKIP=0]="BICM_SKIP",F[F.BICM_REV=2147483648]="BICM_REV",e.EnumBarcodeComplementMode=void 0,(x=e.EnumBarcodeComplementMode||(e.EnumBarcodeComplementMode={}))[x.BCM_AUTO=1]="BCM_AUTO",x[x.BCM_GENERAL=2]="BCM_GENERAL",x[x.BCM_SKIP=0]="BCM_SKIP",x[x.BCM_REV=2147483648]="BCM_REV",e.EnumBarcodeFormat_2=void 0,(V=e.EnumBarcodeFormat_2||(e.EnumBarcodeFormat_2={}))[V.BF2_NULL=0]="BF2_NULL",V[V.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",V[V.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",V[V.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",V[V.BF2_POSTNET=2097152]="BF2_POSTNET",V[V.BF2_PLANET=4194304]="BF2_PLANET",V[V.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",V[V.BF2_RM4SCC=16777216]="BF2_RM4SCC",V[V.BF2_DOTCODE=2]="BF2_DOTCODE",V[V.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",V[V.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",V[V.BF2_PHARMACODE=12]="BF2_PHARMACODE",V[V.BF2_ALL=-1]="BF2_ALL",e.EnumBinarizationMode=void 0,(k=e.EnumBinarizationMode||(e.EnumBinarizationMode={}))[k.BM_AUTO=1]="BM_AUTO",k[k.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",k[k.BM_SKIP=0]="BM_SKIP",k[k.BM_THRESHOLD=4]="BM_THRESHOLD",k[k.BM_REV=2147483648]="BM_REV",e.EnumClarityCalculationMethod=void 0,(G=e.EnumClarityCalculationMethod||(e.EnumClarityCalculationMethod={}))[G.ECCM_CONTRAST=1]="ECCM_CONTRAST",e.EnumClarityFilterMode=void 0,(U=e.EnumClarityFilterMode||(e.EnumClarityFilterMode={}))[U.CFM_GENERAL=1]="CFM_GENERAL",e.EnumColourClusteringMode=void 0,(H=e.EnumColourClusteringMode||(e.EnumColourClusteringMode={}))[H.CCM_AUTO=1]="CCM_AUTO",H[H.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",H[H.CCM_SKIP=0]="CCM_SKIP",H[H.CCM_REV=2147483648]="CCM_REV",e.EnumColourConversionMode=void 0,(W=e.EnumColourConversionMode||(e.EnumColourConversionMode={}))[W.CICM_GENERAL=1]="CICM_GENERAL",W[W.CICM_SKIP=0]="CICM_SKIP",W[W.CICM_REV=2147483648]="CICM_REV",e.EnumConflictMode=void 0,(K=e.EnumConflictMode||(e.EnumConflictMode={}))[K.CM_IGNORE=1]="CM_IGNORE",K[K.CM_OVERWRITE=2]="CM_OVERWRITE",e.EnumDeblurMode=void 0,(Z=e.EnumDeblurMode||(e.EnumDeblurMode={}))[Z.DM_SKIP=0]="DM_SKIP",Z[Z.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",Z[Z.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",Z[Z.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",Z[Z.DM_SMOOTHING=8]="DM_SMOOTHING",Z[Z.DM_MORPHING=16]="DM_MORPHING",Z[Z.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",Z[Z.DM_SHARPENING=64]="DM_SHARPENING",Z[Z.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",Z[Z.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING",e.EnumDeformationResistingMode=void 0,(Y=e.EnumDeformationResistingMode||(e.EnumDeformationResistingMode={}))[Y.DRM_AUTO=1]="DRM_AUTO",Y[Y.DRM_GENERAL=2]="DRM_GENERAL",Y[Y.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",Y[Y.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",Y[Y.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",Y[Y.DRM_SKIP=0]="DRM_SKIP",Y[Y.DRM_REV=2147483648]="DRM_REV",e.EnumDPMCodeReadingMode=void 0,(J=e.EnumDPMCodeReadingMode||(e.EnumDPMCodeReadingMode={}))[J.DPMCRM_AUTO=1]="DPMCRM_AUTO",J[J.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",J[J.DPMCRM_SKIP=0]="DPMCRM_SKIP",J[J.DPMCRM_REV=2147483648]="DPMCRM_REV",e.EnumGrayscaleTransformationMode=void 0,(X=e.EnumGrayscaleTransformationMode||(e.EnumGrayscaleTransformationMode={}))[X.GTM_INVERTED=1]="GTM_INVERTED",X[X.GTM_ORIGINAL=2]="GTM_ORIGINAL",X[X.GTM_SKIP=0]="GTM_SKIP",X[X.GTM_REV=2147483648]="GTM_REV",e.EnumImagePreprocessingMode=void 0,(Q=e.EnumImagePreprocessingMode||(e.EnumImagePreprocessingMode={}))[Q.IPM_AUTO=1]="IPM_AUTO",Q[Q.IPM_GENERAL=2]="IPM_GENERAL",Q[Q.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",Q[Q.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",Q[Q.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",Q[Q.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",Q[Q.IPM_SKIP=0]="IPM_SKIP",Q[Q.IPM_REV=2147483648]="IPM_REV",e.EnumIntermediateResultSavingMode=void 0,(j=e.EnumIntermediateResultSavingMode||(e.EnumIntermediateResultSavingMode={}))[j.IRSM_MEMORY=1]="IRSM_MEMORY",j[j.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",j[j.IRSM_BOTH=4]="IRSM_BOTH",e.EnumLocalizationMode=void 0,(q=e.EnumLocalizationMode||(e.EnumLocalizationMode={}))[q.LM_SKIP=0]="LM_SKIP",q[q.LM_AUTO=1]="LM_AUTO",q[q.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",q[q.LM_LINES=8]="LM_LINES",q[q.LM_STATISTICS=4]="LM_STATISTICS",q[q.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",q[q.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",q[q.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",q[q.LM_CENTRE=128]="LM_CENTRE",q[q.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",q[q.LM_REV=2147483648]="LM_REV",e.EnumPDFReadingMode=void 0,(z=e.EnumPDFReadingMode||(e.EnumPDFReadingMode={}))[z.PDFRM_RASTER=1]="PDFRM_RASTER",z[z.PDFRM_AUTO=2]="PDFRM_AUTO",z[z.PDFRM_VECTOR=4]="PDFRM_VECTOR",z[z.PDFRM_REV=2147483648]="PDFRM_REV",e.EnumQRCodeErrorCorrectionLevel=void 0,($=e.EnumQRCodeErrorCorrectionLevel||(e.EnumQRCodeErrorCorrectionLevel={}))[$.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",$[$.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",$[$.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",$[$.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q",e.EnumRegionPredetectionMode=void 0,(ee=e.EnumRegionPredetectionMode||(e.EnumRegionPredetectionMode={}))[ee.RPM_AUTO=1]="RPM_AUTO",ee[ee.RPM_GENERAL=2]="RPM_GENERAL",ee[ee.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",ee[ee.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",ee[ee.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",ee[ee.RPM_SKIP=0]="RPM_SKIP",ee[ee.RPM_REV=2147483648]="RPM_REV",e.EnumResultCoordinateType=void 0,(te=e.EnumResultCoordinateType||(e.EnumResultCoordinateType={}))[te.RCT_PIXEL=1]="RCT_PIXEL",te[te.RCT_PERCENTAGE=2]="RCT_PERCENTAGE",e.EnumResultType=void 0,(ne=e.EnumResultType||(e.EnumResultType={}))[ne.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",ne[ne.RT_RAW_TEXT=1]="RT_RAW_TEXT",ne[ne.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",ne[ne.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT",e.EnumScaleUpMode=void 0,(re=e.EnumScaleUpMode||(e.EnumScaleUpMode={}))[re.SUM_AUTO=1]="SUM_AUTO",re[re.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",re[re.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",re[re.SUM_SKIP=0]="SUM_SKIP",re[re.SUM_REV=2147483648]="SUM_REV",e.EnumTerminatePhase=void 0,(oe=e.EnumTerminatePhase||(e.EnumTerminatePhase={}))[oe.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",oe[oe.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",oe[oe.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",oe[oe.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",oe[oe.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",oe[oe.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED",e.EnumTextFilterMode=void 0,(ie=e.EnumTextFilterMode||(e.EnumTextFilterMode={}))[ie.TFM_AUTO=1]="TFM_AUTO",ie[ie.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",ie[ie.TFM_SKIP=0]="TFM_SKIP",ie[ie.TFM_REV=2147483648]="TFM_REV",e.EnumTextResultOrderMode=void 0,(ae=e.EnumTextResultOrderMode||(e.EnumTextResultOrderMode={}))[ae.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",ae[ae.TROM_POSITION=2]="TROM_POSITION",ae[ae.TROM_FORMAT=4]="TROM_FORMAT",ae[ae.TROM_SKIP=0]="TROM_SKIP",ae[ae.TROM_REV=2147483648]="TROM_REV",e.EnumTextureDetectionMode=void 0,(se=e.EnumTextureDetectionMode||(e.EnumTextureDetectionMode={}))[se.TDM_AUTO=1]="TDM_AUTO",se[se.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",se[se.TDM_SKIP=0]="TDM_SKIP",se[se.TDM_REV=2147483648]="TDM_REV",e.BarcodeReader=P,Object.defineProperty(e,"__esModule",{value:!0})})); diff --git a/dist/dbr.pure.mjs b/dist/dbr.pure.mjs index 77fd64e..59620ea 100644 --- a/dist/dbr.pure.mjs +++ b/dist/dbr.pure.mjs @@ -4,8 +4,8 @@ * @website http://www.dynamsoft.com * @copyright Copyright 2023, Dynamsoft Corporation * @author Dynamsoft - * @version 9.6.31 (js 20230908) + * @version 9.6.32 (js 20231027) * @fileoverview Dynamsoft JavaScript Library for Barcode Reader * More info on DBR JS: https://www.dynamsoft.com/barcode-reader/sdk-javascript/ */ -var e=function(){this.init()};e.prototype={init:function(){var e=this||t;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var n=this||t;if(e=parseFloat(e),n.ctx||d(),void 0!==e&&e>=0&&e<=1){if(n._volume=e,n._muted)return n;n.usingWebAudio&&n.masterGain.gain.setValueAtTime(e,t.ctx.currentTime);for(var r=0;r=0;n--)e._howls[n].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,d()),e},codecs:function(e){return(this||t)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||t;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||t,n=null;try{n="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!n||"function"!=typeof n.canPlayType)return e;var r=n.canPlayType("audio/mpeg;").replace(/^no$/,""),o=e._navigator?e._navigator.userAgent:"",i=o.match(/OPR\/([0-6].)/g),a=i&&parseInt(i[0].split("/")[1],10)<33,s=-1!==o.indexOf("Safari")&&-1===o.indexOf("Chrome"),_=o.match(/Version\/(.*?) /),d=s&&_&&parseInt(_[1],10)<15;return e._codecs={mp3:!(a||!r&&!n.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!r,opus:!!n.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(n.canPlayType('audio/wav; codecs="1"')||n.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!n.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!n.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(n.canPlayType("audio/x-m4a;")||n.canPlayType("audio/m4a;")||n.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(n.canPlayType("audio/x-m4b;")||n.canPlayType("audio/m4b;")||n.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(n.canPlayType("audio/x-mp4;")||n.canPlayType("audio/mp4;")||n.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(d||!n.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(d||!n.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!n.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(n.canPlayType("audio/x-flac;")||n.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||t;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var n=function(t){for(;e._html5AudioPool.length0?s._seek:r._sprite[e][0]/1e3),c=Math.max(0,(r._sprite[e][0]+r._sprite[e][1])/1e3-d),u=1e3*c/Math.abs(s._rate),l=r._sprite[e][0]/1e3,h=(r._sprite[e][0]+r._sprite[e][1])/1e3;s._sprite=e,s._ended=!1;var f=function(){s._paused=!1,s._seek=d,s._start=l,s._stop=h,s._loop=!(!s._loop&&!r._sprite[e][2])};if(!(d>=h)){var m=s._node;if(r._webAudio){var A=function(){r._playLock=!1,f(),r._refreshBuffer(s);var e=s._muted||r._muted?0:s._volume;m.gain.setValueAtTime(e,t.ctx.currentTime),s._playStart=t.ctx.currentTime,void 0===m.bufferSource.start?s._loop?m.bufferSource.noteGrainOn(0,d,86400):m.bufferSource.noteGrainOn(0,d,c):s._loop?m.bufferSource.start(0,d,86400):m.bufferSource.start(0,d,c),u!==1/0&&(r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),u)),n||setTimeout((function(){r._emit("play",s._id),r._loadQueue()}),0)};"running"===t.state&&"interrupted"!==t.ctx.state?A():(r._playLock=!0,r.once("resume",A),r._clearTimer(s._id))}else{var p=function(){m.currentTime=d,m.muted=s._muted||r._muted||t._muted||m.muted,m.volume=s._volume*t.volume(),m.playbackRate=s._rate;try{var o=m.play();if(o&&"undefined"!=typeof Promise&&(o instanceof Promise||"function"==typeof o.then)?(r._playLock=!0,f(),o.then((function(){r._playLock=!1,m._unlocked=!0,n?r._loadQueue():r._emit("play",s._id)})).catch((function(){r._playLock=!1,r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),s._ended=!0,s._paused=!0}))):n||(r._playLock=!1,f(),r._emit("play",s._id)),m.playbackRate=s._rate,m.paused)return void r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||s._loop?r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),u):(r._endTimers[s._id]=function(){r._ended(s),m.removeEventListener("ended",r._endTimers[s._id],!1)},m.addEventListener("ended",r._endTimers[s._id],!1))}catch(e){r._emit("playerror",s._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===m.src&&(m.src=r._src,m.load());var g=window&&window.ejecta||!m.readyState&&t._navigator.isCocoonJS;if(m.readyState>=3||g)p();else{r._playLock=!0,r._state="loading";var I=function(){r._state="loaded",p(),m.removeEventListener(t._canPlayEvent,I,!1)};m.addEventListener(t._canPlayEvent,I,!1),r._clearTimer(s._id)}}return s._id}r._ended(s)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var n=t._getSoundIds(e),r=0;r=0?n=parseInt(i[0],10):e=parseFloat(i[0])}else i.length>=2&&(e=parseFloat(i[0]),n=parseInt(i[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(r=n?o._soundById(n):o._sounds[0])?r._volume:0;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"volume",action:function(){o.volume.apply(o,i)}}),o;void 0===n&&(o._volume=e),n=o._getSoundIds(n);for(var _=0;_0?r/d:r),u=Date.now();e._fadeTo=n,e._interval=setInterval((function(){var o=(Date.now()-u)/r;u=Date.now(),s+=_*o,s=Math.round(100*s)/100,s=_<0?Math.max(n,s):Math.min(n,s),a._webAudio?e._volume=s:a.volume(s,e._id,!0),i&&(a._volume=s),(nt&&s>=n)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,a.volume(n,e._id),a._emit("fade",e._id))}),c)},_stopFade:function(e){var n=this,r=n._soundById(e);return r&&r._interval&&(n._webAudio&&r._node.gain.cancelScheduledValues(t.ctx.currentTime),clearInterval(r._interval),r._interval=null,n.volume(r._fadeTo,e),r._fadeTo=null,n._emit("fade",e)),n},loop:function(){var e,t,n,r=this,o=arguments;if(0===o.length)return r._loop;if(1===o.length){if("boolean"!=typeof o[0])return!!(n=r._soundById(parseInt(o[0],10)))&&n._loop;e=o[0],r._loop=e}else 2===o.length&&(e=o[0],t=parseInt(o[1],10));for(var i=r._getSoundIds(t),a=0;a=0?n=parseInt(i[0],10):e=parseFloat(i[0])}else 2===i.length&&(e=parseFloat(i[0]),n=parseInt(i[1],10));if("number"!=typeof e)return(r=o._soundById(n))?r._rate:o._rate;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"rate",action:function(){o.rate.apply(o,i)}}),o;void 0===n&&(o._rate=e),n=o._getSoundIds(n);for(var _=0;_=0?n=parseInt(o[0],10):r._sounds.length&&(n=r._sounds[0]._id,e=parseFloat(o[0]))}else 2===o.length&&(e=parseFloat(o[0]),n=parseInt(o[1],10));if(void 0===n)return 0;if("number"==typeof e&&("loaded"!==r._state||r._playLock))return r._queue.push({event:"seek",action:function(){r.seek.apply(r,o)}}),r;var s=r._soundById(n);if(s){if(!("number"==typeof e&&e>=0)){if(r._webAudio){var _=r.playing(n)?t.ctx.currentTime-s._playStart:0,d=s._rateSeek?s._rateSeek-s._seek:0;return s._seek+(d+_*Math.abs(s._rate))}return s._node.currentTime}var c=r.playing(n);c&&r.pause(n,!0),s._seek=e,s._ended=!1,r._clearTimer(n),r._webAudio||!s._node||isNaN(s._node.duration)||(s._node.currentTime=e);var u=function(){c&&r.play(n,!0),r._emit("seek",n)};if(c&&!r._webAudio){var l=function(){r._playLock?setTimeout(l,0):u()};setTimeout(l,0)}else u()}return r},playing:function(e){var t=this;if("number"==typeof e){var n=t._soundById(e);return!!n&&!n._paused}for(var r=0;r=0&&t._howls.splice(i,1);var a=!0;for(r=0;r=0){a=!1;break}return o&&a&&delete o[e._src],t.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,n,r){var o=this["_on"+e];return"function"==typeof t&&o.push(r?{id:n,fn:t,once:r}:{id:n,fn:t}),this},off:function(e,t,n){var r=this,o=r["_on"+e],i=0;if("number"==typeof t&&(n=t,t=null),t||n)for(i=0;i=0;i--)o[i].id&&o[i].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,n)}.bind(r,o[i].fn),0),o[i].once&&r.off(e,o[i].fn,o[i].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var n=t._queue[0];n.event===e&&(t._queue.shift(),t._loadQueue()),e||n.action()}return t},_ended:function(e){var n=this,r=e._sprite;if(!n._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(n<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),n--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],n=0;n=0;if(!e.bufferSource)return this;if(t._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),n))try{e.bufferSource.buffer=t._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(t._navigator&&t._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var r=function(e){this._parent=e,this.init()};r.prototype={init:function(){var e=this,n=e._parent;return e._muted=n._muted,e._loop=n._loop,e._volume=n._volume,e._rate=n._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++t._counter,n._sounds.push(e),e.create(),e},create:function(){var e=this,n=e._parent,r=t._muted||e._muted||e._parent._muted?0:e._volume;return n._webAudio?(e._node=void 0===t.ctx.createGain?t.ctx.createGainNode():t.ctx.createGain(),e._node.gain.setValueAtTime(r,t.ctx.currentTime),e._node.paused=!0,e._node.connect(t.masterGain)):t.noAudio||(e._node=t._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(t._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=n._src,e._node.preload=!0===n._preload?"auto":n._preload,e._node.volume=r*t.volume(),e._node.load()),e},reset:function(){var e=this,n=e._parent;return e._muted=n._muted,e._loop=n._loop,e._volume=n._volume,e._rate=n._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++t._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,n=e._parent;n._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(n._sprite).length&&(n._sprite={__default:[0,1e3*n._duration]}),"loaded"!==n._state&&(n._state="loaded",n._emit("load"),n._loadQueue()),e._node.removeEventListener(t._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var o={},i=function(e){var t=e._src;if(o[t])return e._duration=o[t].duration,void _(e);if(/^data:[^;]+;base64,/.test(t)){for(var n=atob(t.split(",")[1]),r=new Uint8Array(n.length),i=0;i0?(o[n._src]=e,_(n,e)):r()};"undefined"!=typeof Promise&&1===t.ctx.decodeAudioData.length?t.ctx.decodeAudioData(e).then(i).catch(r):t.ctx.decodeAudioData(e,i,r)},_=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},d=function(){if(t.usingWebAudio){try{"undefined"!=typeof AudioContext?t.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?t.ctx=new webkitAudioContext:t.usingWebAudio=!1}catch(e){t.usingWebAudio=!1}t.ctx||(t.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(t._navigator&&t._navigator.platform),n=t._navigator&&t._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),r=n?parseInt(n[1],10):null;if(e&&r&&r<9){var o=/safari/.test(t._navigator&&t._navigator.userAgent.toLowerCase());t._navigator&&!o&&(t.usingWebAudio=!1)}t.usingWebAudio&&(t.masterGain=void 0===t.ctx.createGain?t.ctx.createGainNode():t.ctx.createGain(),t.masterGain.gain.setValueAtTime(t._muted?0:t._volume,t.ctx.currentTime),t.masterGain.connect(t.ctx.destination)),t._setup()}};!function(e,t,n,r){var o;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var n=t._howls.length-1;n>=0;n--)t._howls[n].stereo(e);return t},e.prototype.pos=function(e,n,r){var o=this;return o.ctx&&o.ctx.listener?(n="number"!=typeof n?o._pos[1]:n,r="number"!=typeof r?o._pos[2]:r,"number"!=typeof e?o._pos:(o._pos=[e,n,r],void 0!==o.ctx.listener.positionX?(o.ctx.listener.positionX.setTargetAtTime(o._pos[0],t.ctx.currentTime,.1),o.ctx.listener.positionY.setTargetAtTime(o._pos[1],t.ctx.currentTime,.1),o.ctx.listener.positionZ.setTargetAtTime(o._pos[2],t.ctx.currentTime,.1)):o.ctx.listener.setPosition(o._pos[0],o._pos[1],o._pos[2]),o)):o},e.prototype.orientation=function(e,n,r,o,i,a){var s=this;if(!s.ctx||!s.ctx.listener)return s;var _=s._orientation;return n="number"!=typeof n?_[1]:n,r="number"!=typeof r?_[2]:r,o="number"!=typeof o?_[3]:o,i="number"!=typeof i?_[4]:i,a="number"!=typeof a?_[5]:a,"number"!=typeof e?_:(s._orientation=[e,n,r,o,i,a],void 0!==s.ctx.listener.forwardX?(s.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),s.ctx.listener.forwardY.setTargetAtTime(n,t.ctx.currentTime,.1),s.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),s.ctx.listener.upX.setTargetAtTime(o,t.ctx.currentTime,.1),s.ctx.listener.upY.setTargetAtTime(i,t.ctx.currentTime,.1),s.ctx.listener.upZ.setTargetAtTime(a,t.ctx.currentTime,.1)):s.ctx.listener.setOrientation(e,n,r,o,i,a),s)},n.prototype.init=(o=n.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],o.call(this,e)}),n.prototype.stereo=function(e,n){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,n)}}),r;var o=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===n){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var a=r._getSoundIds(n),s=0;s{let e=!1;if(I)try{(await m.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===A.browser&&A.version>66||"Safari"===A.browser&&A.version>13||"OPR"===A.browser&&A.version>43||"Edge"===A.browser&&A.version;const E=(()=>{if(!c&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),T=" is not allowed to change after `createInstance` or `loadWasm` is called.",D=!c&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",S=!c&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",C=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let t=0;te&&"object"==typeof e&&"function"==typeof e.then;class N extends Promise{constructor(e){let t,n;super(((e,r)=>{t=e,n=r})),this._s="pending",this.resolve=e=>{this.isPending&&(w(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",n(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,w(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const n=await t;e===this._task&&this.resolve(n)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}const b=["iPhone","iPad","Android","HarmonyOS"].includes(A.OS)?2048:4096;class B{constructor(){this._instanceID=void 0,this._ifSaveOriginalImageInACanvas=!1,this.oriCanvas=null,this.oriCanvasData=null,this.canvas=null,this.bFilterRegionInJs=!1,this._region=null,this._timeStartDecode=null,this._timeEnterInnerDBR=null,this._timeGetMessage=null,this.decodeRecords={},this.bDestroyed=!1,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._indexCurrentDecodingFrame=0,this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.captureAndDecodeInParallel=!0,this.autoSuggestTip=!1,this.suggestTipFrameArray=[],this.suggestTipFrameLimit=[5,3],this.noIntermediateResultsCount=0,this.noIntermediateResultsTipLimit=100,this.tinyBarcodeTipModuleSizeLimit=3,this.hugeBarcodeTipLimit=.9,this.autoZoomInFrameArray=[],this.autoZoomInFrameLimit=[5,3],this.autoZoomInStepRate=1/3,this.autoZoomInMaxStep=1.5,this.autoZoomInMaxTimes=5,this.autoZoomInMinStep=Math.pow(10,1/this.autoZoomInMaxTimes),this.autoZoomInIdealModuleSize=6,this.autoZoomOutFrameCount=0,this.autoZoomOutFrameLimit=3,this.autoZoomOutStepRate=1/3,this.autoZoomOutMinValue=1,this.autoZoomOutMinStep=2,this.autoZoomOutStepRate_2=.05,this.autoZoomOutMinValue_2=2,this.frameArrayInIdealZoom=[],this.frameLimitInIdealZoom=[5,3],this.enableZoomOutInIdealZoom=!1,this.nextActionInIdealZoom="focus",this.autoFocusFrameArray=[],this.autoFocusFrameLimit=[5,3],this.autoZoomIdealArea=[0,.05],this.autoZoomTargetBorder=.9,this.autoZoomDetectionArea=.5,this.autoZoom=!1,this.autoFocus=!1,this._resultHighlightingDuration=-1,this._dce=null,this._imgSource=null,this._maxCvsSideLength=b,this._promiseStartScan=null,this.beepSound=new n({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`license`"+T);n._license=t})(B,e)}static get productKeys(){return this._license}static set productKeys(e){B.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){B.license=e}static get organizationID(){return this._license}static set organizationID(e){B.license=e}static set sessionPassword(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`sessionPassword`"+T);n._sessionPassword=t})(B,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:p,worker:g,getUserMedia:I,camera:await R(),browser:A.browser,version:A.version,OS:A.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");B._engineResourcePath=(e=>{if(null==e&&(e="./"),!c){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`licenseServer`"+T);n._licenseServer=C(t)})(B,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+T);n._deviceFriendlyName=t||""})(B,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");B.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=B._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",B.engineResourcePath)}static set defaultUIElementURL(e){B._defaultUIElementURL=e}static _fireHTTPSWarnning(){B.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{B.onWarning&&B.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new n({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;B._onLog&&B._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const n=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{n?n===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else n||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),n=null;if(t&&t.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;n=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),B.recalculateResultLocation(n,r,o,s,_,i,a)}if(this._drawResults(n,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(B._onLog&&B._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!B.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:n,sp:r,rmk:o}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,n,r=t._license||"",o=JSON.parse(JSON.stringify(t._licenseServer)),i=t._sessionPassword,a=0;if(r.startsWith("t")||r.startsWith("f"))a=0;else if(0===r.length||r.startsWith("P")||r.startsWith("L")||r.startsWith("Y")||r.startsWith("A"))a=1;else{a=2;const t=r.indexOf(":");if(-1!=t&&(r=r.substring(t+1)),r.startsWith("DLS2")){let t;try{let e=r.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(r=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof r&&(r=JSON.stringify(r)),0===o.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),o=C(e)}!i&&t.sessionPassword&&(i=t.sessionPassword),e=t.remark}("200001"===r||r.startsWith("200001-"))&&(o&&o.length||(r="")),r||(a=1)}if(a&&(u.crypto||(n="Please upgrade your browser to support online key."),u.crypto.subtle||(n="Require https to use online key in this browser.")),n){if(1!==a)throw new Error(n);a=0,console.warn(n),t._lastErrorCode=-1,t._lastErrorString=n}return 1===a&&(r="",console.warn("Applying for a public trial license ...")),{lt:a,l:r,ls:o,sp:i,rmk:e}}throw new Error("Can't preprocess license again"+T)})(B);this._pLoad.task=async(i,a)=>{let s=B.engineResourcePath+B._workerName;B.engineResourcePath.startsWith(location.origin)||(s=await fetch(s).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),B._dbrWorker=new Worker(s),B._dbrWorker.onerror=e=>{let t=new Error(e.message);a(t)},B._dbrWorker.onmessage=async t=>{let n=t.data?t.data:t;switch(n.type){case"log":B._onLog&&B._onLog(n.message);break;case"load":{n.message&&(n.message=n.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let t,r=!1;1===e&&(r=!0,n.message||(n.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),n.success?(B._dbrWorker.onerror=null,B._version=n.version+"(JS "+B._jsVersion+"."+B._jsEditVersion+")",B._onLog&&B._onLog("load dbr worker success"),n.message&&console.warn(n.message)):(t=new Error(n.message),t.stack=n.stack+"\n"+t.stack,t.ltsErrorCode=n.ltsErrorCode,r||111==n.ltsErrorCode&&-1!=n.message.toLowerCase().indexOf("trial license")&&(r=!0)),r&&B.showDialog(n.success?"warn":"error",n.message),n.success?i():a(t);break}case"task":{let e=n.id,t=n.body;try{B._taskCallbackMap.get(e)(t),B._taskCallbackMap.delete(e)}catch(t){throw B._taskCallbackMap.delete(e),t}break}default:B._onLog&&B._onLog(t)}},B._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:B.engineResourcePath,bUseFullFeature:B._bUseFullFeature,bd:B._bWasmDebug,v:B._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:A,cv:B.authCacheVersion,fn:B.deviceFriendlyName,ls:n,sp:r,rmk:o})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,n)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let o=await r.text();if(!o.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let i=document.createElement("div");i.innerHTML=o;let a=[];for(let e=0;e{if(e==t.target){s.remove();for(let e of a)e.remove()}}));else if(!d&&e.classList.contains("dls-license-icon-close"))d=e,e.addEventListener("click",(()=>{s.remove();for(let e of a)e.remove()}));else if(!c&&e.classList.contains("dls-license-icon-error"))c=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!l&&e.classList.contains("dls-license-msg-content")){l=e;let t=n;for(;t;){let n=t.indexOf("["),r=t.indexOf("]",n),o=t.indexOf("(",r),i=t.indexOf(")",o);if(-1==n||-1==r||-1==o||-1==i){e.appendChild(new Text(t));break}n>0&&e.appendChild(new Text(t.substring(0,n)));let a=document.createElement("a"),s=t.substring(n+1,r);a.innerText=s;let _=t.substring(o+1,i);a.setAttribute("href",_),a.setAttribute("target","_blank"),e.appendChild(a),t=t.substring(i+1)}}document.body.appendChild(s)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await B.loadWasm(),await new Promise(((t,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),B._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new B;return e._instanceID=await B.createInstanceInWorker(),B._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:n,instanceID:this._instanceID})}))}async decode(e){B._onLog&&B._onLog("decode(source: any)"),B._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):B.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):B.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,n,r,o,i,a){return await new Promise(((s,_)=>{let d=B._nextTaskID++;B._taskCallbackMap.set(d,(e=>{if(e.success){let t,n=B._onLog?Date.now():0;B._onLog&&B._onLog("worker return result: "+n),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return _(e)}if(B._onLog){let e=Date.now();B._onLog("DBR getting message from worker timestamp: "+n),B._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),B._onLog("From DBR entering worker to returning message from worker costs: "+(n-this._timeEnterInnerDBR)),B._onLog("Handling results from DBR worker costs: "+(e-n)),B._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return s(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,_(t)}})),this._timeEnterInnerDBR=Date.now(),B._onLog&&B._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),B._dbrWorker.postMessage({type:"decodeBuffer",id:d,instanceID:this._instanceID,body:{buffer:e,width:t,height:n,stride:r,format:o,orientation:i,config:a}},[e.buffer]),B._onLog&&a&&a.timeStamp&&B._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-a.timeStamp))}))}async _decodeBuffer_Blob(e,t,n,r,o,i,a){B._onLog&&B._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const s=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,n)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{n(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(s),t,n,r,o,i,a)}async decodeBuffer(e,t,n,r,o,i,a){let s;return B._onLog&&B._onLog("decodeBuffer(buffer,width,height,stride,format)"),B._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?s=await this._decodeBuffer_Uint8Array(e,t,n,r,o,i,a):e instanceof ArrayBuffer?s=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,n,r,o,i,a):e instanceof Blob&&(s=await this._decodeBuffer_Blob(e,t,n,r,o,i,a)),s}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return n(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),B._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success){let t=JSON.parse(n.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"getRuntimeSettings",id:n,instanceID:this._instanceID})}))}async updateRuntimeSettings(e){let t;if("string"==typeof e)if("speed"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=5,t.expectedBarcodesCount=512,t.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region}else if("dense"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=9,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else t=JSON.parse(e);else{if("object"!=typeof e)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(t=JSON.parse(JSON.stringify(e)),t.region instanceof Array){let e=t.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(t.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!B._bUseFullFeature){if(0!=(t.barcodeFormatIds&~(O.BF_ONED|O.BF_QR_CODE|O.BF_PDF417|O.BF_DATAMATRIX))||0!=t.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=t.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=t.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,t.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(t.intermediateResultTypes|=M.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.updateReturn)}catch(e){n(e)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,n(e)}})),B._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(t)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=b,await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"resetRuntimeSettings",id:n,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=b,await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:n,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!B._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:n,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!B._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){n(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),B._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){B._onLog&&B._onLog("_decode_Blob(blob: Blob)");let n=null,r=null;if("undefined"!=typeof createImageBitmap)try{n=await createImageBitmap(e)}catch(e){}n||(r=await function(e){return new Promise(((t,n)=>{let r=URL.createObjectURL(e),o=new Image;o.dbrObjUrl=r,o.src=r,o.onload=()=>{t(o)},o.onerror=e=>{n(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let o=await this._decode_Image(n||r,t);return n&&n.close(),o}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){B._onLog&&B._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let n,r,o=e instanceof HTMLImageElement?e.naturalWidth:e.width,i=e instanceof HTMLImageElement?e.naturalHeight:e.height,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return B.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_Canvas(e,t){if(B._onLog&&B._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";if(0===e.width||0===e.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=e,this.oriCanvasData=null);let n=(e.ctx2d||e.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,e.width,e.height).data;return await this._decodeBuffer_Uint8Array(n,e.width,e.height,4*e.width,y.IPF_ABGR_8888,0,t)}async _decode_Video(e,t){if(B._onLog&&B._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let n,r,o=e.videoWidth,i=e.videoHeight,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return B.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_DCEFrame(e,t){if(B._onLog&&B._onLog("_decode_DCEFrame(dceFrame)"),!B.isDCEFrame(e))return[];let n=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,colorMode:e.colorMode,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{width:r,height:o,colorMode:i,pixelFormat:a,stride:s,timeStamp:_}=e;let d;d=t&&t.bCopyData?new Uint8Array(e.data):e.data;let c=null;if(t?(c=JSON.parse(JSON.stringify(t)),c.timeStamp=_):c={timeStamp:_},a&&s)if("grey"===a)n=await this._decodeBuffer_Uint8Array(d,r,o,s,y.IPF_GrayScaled,0,c);else if("rgba"===a)n=await this._decodeBuffer_Uint8Array(d,r,o,s,y.IPF_ABGR_8888,0,c);else{if("bgra"!==a)throw new Error(`Pixel format '${a}' is not supported to decode.`);n=await this._decodeBuffer_Uint8Array(d,r,o,s,y.IPF_ARGB_8888,0,c)}else if("grey"===i)n=await this._decodeBuffer_Uint8Array(d,r,o,r,y.IPF_GrayScaled,0,c);else if("rgba"===i)n=await this._decodeBuffer_Uint8Array(d,r,o,4*r,y.IPF_ABGR_8888,0,c);else{if("bgra"!==i)throw new Error(`Color mode '${i}' is not supported to decode.`);n=await this._decodeBuffer_Uint8Array(d,r,o,4*r,y.IPF_ARGB_8888,0,c)}return n}async _decode_DSImage(e,t){if(B._onLog&&B._onLog("_decode_DSImage(dsImage)"),!B.isDSImage(e))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat.toLowerCase(),data:new Uint8Array(e.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{n(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(n,t)}}async _decode_FilePath(e,t){throw B._onLog&&B._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,n,r,o,i,a){if(e.length>0)for(let s of e){let e=s.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*i,e.x2*=.01*i,e.x3*=.01*i,e.x4*=.01*i,e.y1*=.01*a,e.y2*=.01*a,e.y3*=.01*a,e.y4*=.01*a);let _=i/r,d=a/o;e.x1=e.x1/_+t,e.x2=e.x2/_+t,e.x3=e.x3/_+t,e.x4=e.x4/_+t,e.y1=e.y1/d+n,e.y2=e.y2/d+n,e.y3=e.y3/d+n,e.y4=e.y4/d+n,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/o,e.y2*=100/o,e.y3*=100/o,e.y4*=100/o),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(e,t){let n,r=v.DBR_UNKNOWN;return"number"==typeof e?(r=e,n=new Error(t)):n=new Error(e),n.code=r,n}_handleRetJsonString(e){let t=v;if(e.textResults){for(let t=0;t{let n=t.indexOf(":");e[t.substring(0,n)]=t.substring(n+1)})),n.exception=e}}return e.decodeRecords?this.decodeRecords=e.decodeRecords:this.decodeRecords={},this._lastErrorCode=e.exception,this._lastErrorString=e.description,e.exception&&!B._setWarnnedEx.has(e.description)&&(B._setWarnnedEx.add(e.description),console.warn(e.description)),e.textResults}if(e.exception==t.DBR_SUCCESS)return e.data;throw B.BarcodeReaderException(e.exception,e.description)}async setModeArgument(e,t,n,r){return await new Promise(((o,i)=>{let a=B._nextTaskID++;B._taskCallbackMap.set(a,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return i(e)}return o()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),B._dbrWorker.postMessage({type:"setModeArgument",id:a,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n,argumentValue:r}})}))}async getModeArgument(e,t,n){return await new Promise(((r,o)=>{let i=B._nextTaskID++;B._taskCallbackMap.set(i,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return o(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}})),B._dbrWorker.postMessage({type:"getModeArgument",id:i,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"getIntermediateResults",id:n,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let e=await this.getIntermediateResults(),t=[];for(let n of e)if(n.dataType==L.IMRDT_IMAGE)for(let e of n.results){const n=e.bytes;let r;switch(B._onLog&&B._onLog(" "+n.length+" "+n.byteLength+" "+e.width+" "+e.height+" "+e.stride+" "+e.format),e.format){case y.IPF_ABGR_8888:r=new Uint8ClampedArray(n);break;case y.IPF_RGB_888:{const e=n.length/3;r=new Uint8ClampedArray(4*e);for(let t=0;t=o)break;r[a]=r[a+1]=r[a+2]=(128&t)/128*255,r[a+3]=255,t<<=1}}break}default:console.warn("unknow intermediate image",e)}if(!r)continue;let o=new ImageData(r,e.width,e.height),i=document.createElement("canvas");i.width=e.width,i.height=e.height,i.getContext("2d").putImageData(o,0,0),t.push(i)}return t}async getScanSettings(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success){let t=n.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(n.message);return e.stack+="\n"+n.stack,t(e)}})),B._dbrWorker.postMessage({type:"getScanSettings",id:n,instanceID:this._instanceID})}))}async updateScanSettings(e){if(!e)return;const t=JSON.parse(JSON.stringify(e));if(t.autoZoom||t.autoFocus||t.autoSuggestTip){if(!B._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const e=await this.getRuntimeSettings();e.intermediateResultTypes|=M.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(e)}return t.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(t.intervalTime,0),delete t.intervalTime),t.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=t.whenToPlaySoundforSuccessfulRead,delete t.whenToPlaySoundforSuccessfulRead),t.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=t.soundOnSuccessfullRead,delete t.soundOnSuccessfullRead),t.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=t.whenToVibrateforSuccessfulRead,delete t.whenToVibrateforSuccessfulRead),t.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=t.vibrateDuration,delete t.vibrateDuration),t.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=t.captureAndDecodeInParallel,delete t.captureAndDecodeInParallel),t.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=t.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=t.autoZoom,delete t.autoZoom),t.hasOwnProperty("autoFocus")&&(this.autoFocus=t.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete t.autoFocus),t.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=t.autoSuggestTip,delete t.autoFocus),await new Promise(((e,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(t=>{if(t.success)return e();{let e=new Error(t.message);return e.stack+="\n"+t.stack,n(e)}})),B._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:t}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let n of e)t.push(this._cloneDecodeResults(n));return t}{let t=e;return JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)))}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return B._onLog&&B._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));B._onLog&&B._onLog("======= once read ======="),B._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!B.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return B._onLog&&B._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let n=[];if(e){n=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(n&&n.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;t=n.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),B.recalculateResultLocation(t,r,o,s,_,i,a)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,n),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(n=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return n})().then((e=>{if(B._onLog&&B._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const n=()=>{let n=0;if(t&&t.length){let r=Math.min(...e),o=Math.max(...t);r&&o&&(n=r-o)}else n=0;return n>0?n:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=n()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),B._onLog&&B._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(B._onLog&&B._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,n=this.array_getFrameTimeCost;for(;n.length>=5;)n.shift();n.push(t)};t(e)}else B._onLog&&B._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const n=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let o=0;o{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(B._onLog&&B._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=B._nextTaskID++;B._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),B._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}var P,F,x,V,k,G,U,H,W,K,Z,Y,J,X,Q,j,q,$,z,ee,te,ne,re,oe,ie,ae;B._jsVersion="9.6.31",B._jsEditVersion="20230908",B._version=`loading...(JS ${B._jsVersion}.${B._jsEditVersion})`,B._license=D,B._sessionPassword=S,B.browserInfo=A,B._workerName=`dbr-${B._jsVersion}.browser.worker.js`,B._engineResourcePath=E,B._licenseServer=[],B._deviceFriendlyName="",B._isShowRelDecodeTimeInResults=!1,B._bWasmDebug=!1,B._bNeverShowDialog=!1,B.__bUseFullFeature=!0,B._nextTaskID=0,B._taskCallbackMap=new Map,B._pLoad=new N,B._lastErrorCode=0,B._lastErrorString="",B._setWarnnedEx=new Set,B._defaultUIElementURL="@engineResourcePath/dbr.ui.html",function(e){e[e.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",e[e.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",e[e.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",e[e.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",e[e.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",e[e.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",e[e.BICM_SKIP=0]="BICM_SKIP",e[e.BICM_REV=2147483648]="BICM_REV"}(P||(P={})),function(e){e[e.BCM_AUTO=1]="BCM_AUTO",e[e.BCM_GENERAL=2]="BCM_GENERAL",e[e.BCM_SKIP=0]="BCM_SKIP",e[e.BCM_REV=2147483648]="BCM_REV"}(F||(F={})),function(e){e[e.BF2_NULL=0]="BF2_NULL",e[e.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",e[e.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",e[e.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",e[e.BF2_POSTNET=2097152]="BF2_POSTNET",e[e.BF2_PLANET=4194304]="BF2_PLANET",e[e.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",e[e.BF2_RM4SCC=16777216]="BF2_RM4SCC",e[e.BF2_DOTCODE=2]="BF2_DOTCODE",e[e.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",e[e.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",e[e.BF2_PHARMACODE=12]="BF2_PHARMACODE",e[e.BF2_ALL=-1]="BF2_ALL"}(x||(x={})),function(e){e[e.BM_AUTO=1]="BM_AUTO",e[e.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",e[e.BM_SKIP=0]="BM_SKIP",e[e.BM_THRESHOLD=4]="BM_THRESHOLD",e[e.BM_REV=2147483648]="BM_REV"}(V||(V={})),function(e){e[e.ECCM_CONTRAST=1]="ECCM_CONTRAST"}(k||(k={})),function(e){e[e.CFM_GENERAL=1]="CFM_GENERAL"}(G||(G={})),function(e){e[e.CCM_AUTO=1]="CCM_AUTO",e[e.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",e[e.CCM_SKIP=0]="CCM_SKIP",e[e.CCM_REV=2147483648]="CCM_REV"}(U||(U={})),function(e){e[e.CICM_GENERAL=1]="CICM_GENERAL",e[e.CICM_SKIP=0]="CICM_SKIP",e[e.CICM_REV=2147483648]="CICM_REV"}(H||(H={})),function(e){e[e.CM_IGNORE=1]="CM_IGNORE",e[e.CM_OVERWRITE=2]="CM_OVERWRITE"}(W||(W={})),function(e){e[e.DM_SKIP=0]="DM_SKIP",e[e.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",e[e.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",e[e.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",e[e.DM_SMOOTHING=8]="DM_SMOOTHING",e[e.DM_MORPHING=16]="DM_MORPHING",e[e.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",e[e.DM_SHARPENING=64]="DM_SHARPENING",e[e.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",e[e.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING"}(K||(K={})),function(e){e[e.DRM_AUTO=1]="DRM_AUTO",e[e.DRM_GENERAL=2]="DRM_GENERAL",e[e.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",e[e.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",e[e.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",e[e.DRM_SKIP=0]="DRM_SKIP",e[e.DRM_REV=2147483648]="DRM_REV"}(Z||(Z={})),function(e){e[e.DPMCRM_AUTO=1]="DPMCRM_AUTO",e[e.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",e[e.DPMCRM_SKIP=0]="DPMCRM_SKIP",e[e.DPMCRM_REV=2147483648]="DPMCRM_REV"}(Y||(Y={})),function(e){e[e.GTM_INVERTED=1]="GTM_INVERTED",e[e.GTM_ORIGINAL=2]="GTM_ORIGINAL",e[e.GTM_SKIP=0]="GTM_SKIP",e[e.GTM_REV=2147483648]="GTM_REV"}(J||(J={})),function(e){e[e.IPM_AUTO=1]="IPM_AUTO",e[e.IPM_GENERAL=2]="IPM_GENERAL",e[e.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",e[e.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",e[e.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",e[e.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",e[e.IPM_SKIP=0]="IPM_SKIP",e[e.IPM_REV=2147483648]="IPM_REV"}(X||(X={})),function(e){e[e.IRSM_MEMORY=1]="IRSM_MEMORY",e[e.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",e[e.IRSM_BOTH=4]="IRSM_BOTH"}(Q||(Q={})),function(e){e[e.LM_SKIP=0]="LM_SKIP",e[e.LM_AUTO=1]="LM_AUTO",e[e.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",e[e.LM_LINES=8]="LM_LINES",e[e.LM_STATISTICS=4]="LM_STATISTICS",e[e.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",e[e.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",e[e.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",e[e.LM_CENTRE=128]="LM_CENTRE",e[e.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",e[e.LM_REV=2147483648]="LM_REV"}(j||(j={})),function(e){e[e.PDFRM_RASTER=1]="PDFRM_RASTER",e[e.PDFRM_AUTO=2]="PDFRM_AUTO",e[e.PDFRM_VECTOR=4]="PDFRM_VECTOR",e[e.PDFRM_REV=2147483648]="PDFRM_REV"}(q||(q={})),function(e){e[e.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",e[e.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",e[e.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",e[e.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}($||($={})),function(e){e[e.RPM_AUTO=1]="RPM_AUTO",e[e.RPM_GENERAL=2]="RPM_GENERAL",e[e.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",e[e.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",e[e.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",e[e.RPM_SKIP=0]="RPM_SKIP",e[e.RPM_REV=2147483648]="RPM_REV"}(z||(z={})),function(e){e[e.RCT_PIXEL=1]="RCT_PIXEL",e[e.RCT_PERCENTAGE=2]="RCT_PERCENTAGE"}(ee||(ee={})),function(e){e[e.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",e[e.RT_RAW_TEXT=1]="RT_RAW_TEXT",e[e.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",e[e.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT"}(te||(te={})),function(e){e[e.SUM_AUTO=1]="SUM_AUTO",e[e.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",e[e.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",e[e.SUM_SKIP=0]="SUM_SKIP",e[e.SUM_REV=2147483648]="SUM_REV"}(ne||(ne={})),function(e){e[e.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",e[e.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",e[e.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",e[e.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",e[e.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",e[e.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED"}(re||(re={})),function(e){e[e.TFM_AUTO=1]="TFM_AUTO",e[e.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",e[e.TFM_SKIP=0]="TFM_SKIP",e[e.TFM_REV=2147483648]="TFM_REV"}(oe||(oe={})),function(e){e[e.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",e[e.TROM_POSITION=2]="TROM_POSITION",e[e.TROM_FORMAT=4]="TROM_FORMAT",e[e.TROM_SKIP=0]="TROM_SKIP",e[e.TROM_REV=2147483648]="TROM_REV"}(ie||(ie={})),function(e){e[e.TDM_AUTO=1]="TDM_AUTO",e[e.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",e[e.TDM_SKIP=0]="TDM_SKIP",e[e.TDM_REV=2147483648]="TDM_REV"}(ae||(ae={}));export{B as BarcodeReader,P as EnumBarcodeColourMode,F as EnumBarcodeComplementMode,O as EnumBarcodeFormat,x as EnumBarcodeFormat_2,V as EnumBinarizationMode,k as EnumClarityCalculationMethod,G as EnumClarityFilterMode,U as EnumColourClusteringMode,H as EnumColourConversionMode,W as EnumConflictMode,Y as EnumDPMCodeReadingMode,K as EnumDeblurMode,Z as EnumDeformationResistingMode,v as EnumErrorCode,J as EnumGrayscaleTransformationMode,L as EnumIMResultDataType,y as EnumImagePixelFormat,X as EnumImagePreprocessingMode,Q as EnumIntermediateResultSavingMode,M as EnumIntermediateResultType,j as EnumLocalizationMode,q as EnumPDFReadingMode,$ as EnumQRCodeErrorCorrectionLevel,z as EnumRegionPredetectionMode,ee as EnumResultCoordinateType,te as EnumResultType,ne as EnumScaleUpMode,re as EnumTerminatePhase,oe as EnumTextFilterMode,ie as EnumTextResultOrderMode,ae as EnumTextureDetectionMode}; +var e=function(){this.init()};e.prototype={init:function(){var e=this||t;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var n=this||t;if(e=parseFloat(e),n.ctx||d(),void 0!==e&&e>=0&&e<=1){if(n._volume=e,n._muted)return n;n.usingWebAudio&&n.masterGain.gain.setValueAtTime(e,t.ctx.currentTime);for(var r=0;r=0;n--)e._howls[n].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,d()),e},codecs:function(e){return(this||t)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||t;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||t,n=null;try{n="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!n||"function"!=typeof n.canPlayType)return e;var r=n.canPlayType("audio/mpeg;").replace(/^no$/,""),o=e._navigator?e._navigator.userAgent:"",i=o.match(/OPR\/([0-6].)/g),a=i&&parseInt(i[0].split("/")[1],10)<33,s=-1!==o.indexOf("Safari")&&-1===o.indexOf("Chrome"),_=o.match(/Version\/(.*?) /),d=s&&_&&parseInt(_[1],10)<15;return e._codecs={mp3:!(a||!r&&!n.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!r,opus:!!n.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(n.canPlayType('audio/wav; codecs="1"')||n.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!n.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!n.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(n.canPlayType("audio/x-m4a;")||n.canPlayType("audio/m4a;")||n.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(n.canPlayType("audio/x-m4b;")||n.canPlayType("audio/m4b;")||n.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(n.canPlayType("audio/x-mp4;")||n.canPlayType("audio/mp4;")||n.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(d||!n.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(d||!n.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!n.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(n.canPlayType("audio/x-flac;")||n.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||t;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var n=function(t){for(;e._html5AudioPool.length0?s._seek:r._sprite[e][0]/1e3),c=Math.max(0,(r._sprite[e][0]+r._sprite[e][1])/1e3-d),u=1e3*c/Math.abs(s._rate),l=r._sprite[e][0]/1e3,h=(r._sprite[e][0]+r._sprite[e][1])/1e3;s._sprite=e,s._ended=!1;var f=function(){s._paused=!1,s._seek=d,s._start=l,s._stop=h,s._loop=!(!s._loop&&!r._sprite[e][2])};if(!(d>=h)){var m=s._node;if(r._webAudio){var A=function(){r._playLock=!1,f(),r._refreshBuffer(s);var e=s._muted||r._muted?0:s._volume;m.gain.setValueAtTime(e,t.ctx.currentTime),s._playStart=t.ctx.currentTime,void 0===m.bufferSource.start?s._loop?m.bufferSource.noteGrainOn(0,d,86400):m.bufferSource.noteGrainOn(0,d,c):s._loop?m.bufferSource.start(0,d,86400):m.bufferSource.start(0,d,c),u!==1/0&&(r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),u)),n||setTimeout((function(){r._emit("play",s._id),r._loadQueue()}),0)};"running"===t.state&&"interrupted"!==t.ctx.state?A():(r._playLock=!0,r.once("resume",A),r._clearTimer(s._id))}else{var p=function(){m.currentTime=d,m.muted=s._muted||r._muted||t._muted||m.muted,m.volume=s._volume*t.volume(),m.playbackRate=s._rate;try{var o=m.play();if(o&&"undefined"!=typeof Promise&&(o instanceof Promise||"function"==typeof o.then)?(r._playLock=!0,f(),o.then((function(){r._playLock=!1,m._unlocked=!0,n?r._loadQueue():r._emit("play",s._id)})).catch((function(){r._playLock=!1,r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),s._ended=!0,s._paused=!0}))):n||(r._playLock=!1,f(),r._emit("play",s._id)),m.playbackRate=s._rate,m.paused)return void r._emit("playerror",s._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||s._loop?r._endTimers[s._id]=setTimeout(r._ended.bind(r,s),u):(r._endTimers[s._id]=function(){r._ended(s),m.removeEventListener("ended",r._endTimers[s._id],!1)},m.addEventListener("ended",r._endTimers[s._id],!1))}catch(e){r._emit("playerror",s._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===m.src&&(m.src=r._src,m.load());var g=window&&window.ejecta||!m.readyState&&t._navigator.isCocoonJS;if(m.readyState>=3||g)p();else{r._playLock=!0,r._state="loading";var I=function(){r._state="loaded",p(),m.removeEventListener(t._canPlayEvent,I,!1)};m.addEventListener(t._canPlayEvent,I,!1),r._clearTimer(s._id)}}return s._id}r._ended(s)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var n=t._getSoundIds(e),r=0;r=0?n=parseInt(i[0],10):e=parseFloat(i[0])}else i.length>=2&&(e=parseFloat(i[0]),n=parseInt(i[1],10));if(!(void 0!==e&&e>=0&&e<=1))return(r=n?o._soundById(n):o._sounds[0])?r._volume:0;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"volume",action:function(){o.volume.apply(o,i)}}),o;void 0===n&&(o._volume=e),n=o._getSoundIds(n);for(var _=0;_0?r/d:r),u=Date.now();e._fadeTo=n,e._interval=setInterval((function(){var o=(Date.now()-u)/r;u=Date.now(),s+=_*o,s=Math.round(100*s)/100,s=_<0?Math.max(n,s):Math.min(n,s),a._webAudio?e._volume=s:a.volume(s,e._id,!0),i&&(a._volume=s),(nt&&s>=n)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,a.volume(n,e._id),a._emit("fade",e._id))}),c)},_stopFade:function(e){var n=this,r=n._soundById(e);return r&&r._interval&&(n._webAudio&&r._node.gain.cancelScheduledValues(t.ctx.currentTime),clearInterval(r._interval),r._interval=null,n.volume(r._fadeTo,e),r._fadeTo=null,n._emit("fade",e)),n},loop:function(){var e,t,n,r=this,o=arguments;if(0===o.length)return r._loop;if(1===o.length){if("boolean"!=typeof o[0])return!!(n=r._soundById(parseInt(o[0],10)))&&n._loop;e=o[0],r._loop=e}else 2===o.length&&(e=o[0],t=parseInt(o[1],10));for(var i=r._getSoundIds(t),a=0;a=0?n=parseInt(i[0],10):e=parseFloat(i[0])}else 2===i.length&&(e=parseFloat(i[0]),n=parseInt(i[1],10));if("number"!=typeof e)return(r=o._soundById(n))?r._rate:o._rate;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"rate",action:function(){o.rate.apply(o,i)}}),o;void 0===n&&(o._rate=e),n=o._getSoundIds(n);for(var _=0;_=0?n=parseInt(o[0],10):r._sounds.length&&(n=r._sounds[0]._id,e=parseFloat(o[0]))}else 2===o.length&&(e=parseFloat(o[0]),n=parseInt(o[1],10));if(void 0===n)return 0;if("number"==typeof e&&("loaded"!==r._state||r._playLock))return r._queue.push({event:"seek",action:function(){r.seek.apply(r,o)}}),r;var s=r._soundById(n);if(s){if(!("number"==typeof e&&e>=0)){if(r._webAudio){var _=r.playing(n)?t.ctx.currentTime-s._playStart:0,d=s._rateSeek?s._rateSeek-s._seek:0;return s._seek+(d+_*Math.abs(s._rate))}return s._node.currentTime}var c=r.playing(n);c&&r.pause(n,!0),s._seek=e,s._ended=!1,r._clearTimer(n),r._webAudio||!s._node||isNaN(s._node.duration)||(s._node.currentTime=e);var u=function(){c&&r.play(n,!0),r._emit("seek",n)};if(c&&!r._webAudio){var l=function(){r._playLock?setTimeout(l,0):u()};setTimeout(l,0)}else u()}return r},playing:function(e){var t=this;if("number"==typeof e){var n=t._soundById(e);return!!n&&!n._paused}for(var r=0;r=0&&t._howls.splice(i,1);var a=!0;for(r=0;r=0){a=!1;break}return o&&a&&delete o[e._src],t.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,n,r){var o=this["_on"+e];return"function"==typeof t&&o.push(r?{id:n,fn:t,once:r}:{id:n,fn:t}),this},off:function(e,t,n){var r=this,o=r["_on"+e],i=0;if("number"==typeof t&&(n=t,t=null),t||n)for(i=0;i=0;i--)o[i].id&&o[i].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,n)}.bind(r,o[i].fn),0),o[i].once&&r.off(e,o[i].fn,o[i].id));return r._loadQueue(e),r},_loadQueue:function(e){var t=this;if(t._queue.length>0){var n=t._queue[0];n.event===e&&(t._queue.shift(),t._loadQueue()),e||n.action()}return t},_ended:function(e){var n=this,r=e._sprite;if(!n._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;r--){if(n<=t)return;e._sounds[r]._ended&&(e._webAudio&&e._sounds[r]._node&&e._sounds[r]._node.disconnect(0),e._sounds.splice(r,1),n--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],n=0;n=0;if(!e.bufferSource)return this;if(t._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),n))try{e.bufferSource.buffer=t._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(t._navigator&&t._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var r=function(e){this._parent=e,this.init()};r.prototype={init:function(){var e=this,n=e._parent;return e._muted=n._muted,e._loop=n._loop,e._volume=n._volume,e._rate=n._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++t._counter,n._sounds.push(e),e.create(),e},create:function(){var e=this,n=e._parent,r=t._muted||e._muted||e._parent._muted?0:e._volume;return n._webAudio?(e._node=void 0===t.ctx.createGain?t.ctx.createGainNode():t.ctx.createGain(),e._node.gain.setValueAtTime(r,t.ctx.currentTime),e._node.paused=!0,e._node.connect(t.masterGain)):t.noAudio||(e._node=t._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(t._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=n._src,e._node.preload=!0===n._preload?"auto":n._preload,e._node.volume=r*t.volume(),e._node.load()),e},reset:function(){var e=this,n=e._parent;return e._muted=n._muted,e._loop=n._loop,e._volume=n._volume,e._rate=n._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++t._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,n=e._parent;n._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(n._sprite).length&&(n._sprite={__default:[0,1e3*n._duration]}),"loaded"!==n._state&&(n._state="loaded",n._emit("load"),n._loadQueue()),e._node.removeEventListener(t._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var o={},i=function(e){var t=e._src;if(o[t])return e._duration=o[t].duration,void _(e);if(/^data:[^;]+;base64,/.test(t)){for(var n=atob(t.split(",")[1]),r=new Uint8Array(n.length),i=0;i0?(o[n._src]=e,_(n,e)):r()};"undefined"!=typeof Promise&&1===t.ctx.decodeAudioData.length?t.ctx.decodeAudioData(e).then(i).catch(r):t.ctx.decodeAudioData(e,i,r)},_=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},d=function(){if(t.usingWebAudio){try{"undefined"!=typeof AudioContext?t.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?t.ctx=new webkitAudioContext:t.usingWebAudio=!1}catch(e){t.usingWebAudio=!1}t.ctx||(t.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(t._navigator&&t._navigator.platform),n=t._navigator&&t._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),r=n?parseInt(n[1],10):null;if(e&&r&&r<9){var o=/safari/.test(t._navigator&&t._navigator.userAgent.toLowerCase());t._navigator&&!o&&(t.usingWebAudio=!1)}t.usingWebAudio&&(t.masterGain=void 0===t.ctx.createGain?t.ctx.createGainNode():t.ctx.createGain(),t.masterGain.gain.setValueAtTime(t._muted?0:t._volume,t.ctx.currentTime),t.masterGain.connect(t.ctx.destination)),t._setup()}};!function(e,t,n,r){var o;e.prototype._pos=[0,0,0],e.prototype._orientation=[0,0,-1,0,1,0],e.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var n=t._howls.length-1;n>=0;n--)t._howls[n].stereo(e);return t},e.prototype.pos=function(e,n,r){var o=this;return o.ctx&&o.ctx.listener?(n="number"!=typeof n?o._pos[1]:n,r="number"!=typeof r?o._pos[2]:r,"number"!=typeof e?o._pos:(o._pos=[e,n,r],void 0!==o.ctx.listener.positionX?(o.ctx.listener.positionX.setTargetAtTime(o._pos[0],t.ctx.currentTime,.1),o.ctx.listener.positionY.setTargetAtTime(o._pos[1],t.ctx.currentTime,.1),o.ctx.listener.positionZ.setTargetAtTime(o._pos[2],t.ctx.currentTime,.1)):o.ctx.listener.setPosition(o._pos[0],o._pos[1],o._pos[2]),o)):o},e.prototype.orientation=function(e,n,r,o,i,a){var s=this;if(!s.ctx||!s.ctx.listener)return s;var _=s._orientation;return n="number"!=typeof n?_[1]:n,r="number"!=typeof r?_[2]:r,o="number"!=typeof o?_[3]:o,i="number"!=typeof i?_[4]:i,a="number"!=typeof a?_[5]:a,"number"!=typeof e?_:(s._orientation=[e,n,r,o,i,a],void 0!==s.ctx.listener.forwardX?(s.ctx.listener.forwardX.setTargetAtTime(e,t.ctx.currentTime,.1),s.ctx.listener.forwardY.setTargetAtTime(n,t.ctx.currentTime,.1),s.ctx.listener.forwardZ.setTargetAtTime(r,t.ctx.currentTime,.1),s.ctx.listener.upX.setTargetAtTime(o,t.ctx.currentTime,.1),s.ctx.listener.upY.setTargetAtTime(i,t.ctx.currentTime,.1),s.ctx.listener.upZ.setTargetAtTime(a,t.ctx.currentTime,.1)):s.ctx.listener.setOrientation(e,n,r,o,i,a),s)},n.prototype.init=(o=n.prototype.init,function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],o.call(this,e)}),n.prototype.stereo=function(e,n){var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){r.stereo(e,n)}}),r;var o=void 0===t.ctx.createStereoPanner?"spatial":"stereo";if(void 0===n){if("number"!=typeof e)return r._stereo;r._stereo=e,r._pos=[e,0,0]}for(var a=r._getSoundIds(n),s=0;s{let e=!1;if(I)try{(await m.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===A.browser&&A.version>66||"Safari"===A.browser&&A.version>13||"OPR"===A.browser&&A.version>43||"Edge"===A.browser&&A.version;const E=(()=>{if(!c&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),T=" is not allowed to change after `createInstance` or `loadWasm` is called.",D=!c&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",S=!c&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",C=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let t=0;te&&"object"==typeof e&&"function"==typeof e.then;class N extends Promise{constructor(e){let t,n;super(((e,r)=>{t=e,n=r})),this._s="pending",this.resolve=e=>{this.isPending&&(w(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",n(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,w(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const n=await t;e===this._task&&this.resolve(n)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}const b=["iPhone","iPad","Android","HarmonyOS"].includes(A.OS)?2048:4096;class B{constructor(){this._instanceID=void 0,this._ifSaveOriginalImageInACanvas=!1,this.oriCanvas=null,this.oriCanvasData=null,this.canvas=null,this.bFilterRegionInJs=!1,this._region=null,this._timeStartDecode=null,this._timeEnterInnerDBR=null,this._timeGetMessage=null,this.decodeRecords={},this.bDestroyed=!1,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._indexCurrentDecodingFrame=0,this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.captureAndDecodeInParallel=!0,this.autoSuggestTip=!1,this.suggestTipFrameArray=[],this.suggestTipFrameLimit=[5,3],this.noIntermediateResultsCount=0,this.noIntermediateResultsTipLimit=100,this.tinyBarcodeTipModuleSizeLimit=3,this.hugeBarcodeTipLimit=.9,this.autoZoomInFrameArray=[],this.autoZoomInFrameLimit=[5,3],this.autoZoomInStepRate=1/3,this.autoZoomInMaxStep=1.5,this.autoZoomInMaxTimes=5,this.autoZoomInMinStep=Math.pow(10,1/this.autoZoomInMaxTimes),this.autoZoomInIdealModuleSize=6,this.autoZoomOutFrameCount=0,this.autoZoomOutFrameLimit=3,this.autoZoomOutStepRate=1/3,this.autoZoomOutMinValue=1,this.autoZoomOutMinStep=2,this.autoZoomOutStepRate_2=.05,this.autoZoomOutMinValue_2=2,this.frameArrayInIdealZoom=[],this.frameLimitInIdealZoom=[5,3],this.enableZoomOutInIdealZoom=!1,this.nextActionInIdealZoom="focus",this.autoFocusFrameArray=[],this.autoFocusFrameLimit=[5,3],this.autoZoomIdealArea=[0,.05],this.autoZoomTargetBorder=.9,this.autoZoomDetectionArea=.5,this.autoZoom=!1,this.autoFocus=!1,this._resultHighlightingDuration=-1,this._dce=null,this._imgSource=null,this._maxCvsSideLength=b,this._promiseStartScan=null,this.beepSound=new n({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}static get version(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`license`"+T);n._license=t})(B,e)}static get productKeys(){return this._license}static set productKeys(e){B.license=e}static get handshakeCode(){return this._license}static set handshakeCode(e){B.license=e}static get organizationID(){return this._license}static set organizationID(e){B.license=e}static set sessionPassword(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`sessionPassword`"+T);n._sessionPassword=t})(B,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:p,worker:g,getUserMedia:I,camera:await R(),browser:A.browser,version:A.version,OS:A.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");B._engineResourcePath=(e=>{if(null==e&&(e="./"),!c){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`licenseServer`"+T);n._licenseServer=C(t)})(B,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const n=e;if(!n._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+T);n._deviceFriendlyName=t||""})(B,e)}static get _bUseFullFeature(){return this.__bUseFullFeature}static set _bUseFullFeature(e){if(!this._pLoad.isEmpty)throw new Error("`_bUseFullFeature` is not allowed to change after `createInstance` or `loadWasm` is called.");B.__bUseFullFeature=e}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&(("colorMode"in e||"pixelFormat"in e)&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e,this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static get defaultUIElementURL(){var e;return null===(e=B._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",B.engineResourcePath)}static set defaultUIElementURL(e){B._defaultUIElementURL=e}static _fireHTTPSWarnning(){B.onWarning&&location&&"https:"!==location.protocol&&setTimeout((()=>{B.onWarning&&B.onWarning({id:2,message:"Not connected via SSL (HTTPS), the SDK may not work correctly."})}),0)}get soundSource(){return this._soundSource}set soundSource(e){this._soundSource=e,this.beepSound=new n({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed||this._dce.disposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;B._onLog&&B._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength),this._styleIdBeforeVerification=this.dce.createDrawingStyle({fillStyle:"rgba(248,252,0,0.2)",strokeStyle:"transparent",paintMode:"strokeAndFill"});try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const n=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{n?n===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dbr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else n||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null);let t=await this._decode_DCEFrame(e,{bCopyData:!1}),n=null;if(t&&t.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;n=t.map((e=>({localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),B.recalculateResultLocation(n,r,o,s,_,i,a)}if(this._drawResults(n,t),await this.clearMapDecodeRecord(),this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)this.onUniqueRead(e.barcodeText,this._cloneDecodeResults(e))},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(B._onLog&&B._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this._imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this._imgSource=null;else{if(!B.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this._imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:n,sp:r,rmk:o}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,n,r=t._license||"",o=JSON.parse(JSON.stringify(t._licenseServer)),i=t._sessionPassword,a=0;if(r.startsWith("t")||r.startsWith("f"))a=0;else if(0===r.length||r.startsWith("P")||r.startsWith("L")||r.startsWith("Y")||r.startsWith("A"))a=1;else{a=2;const t=r.indexOf(":");if(-1!=t&&(r=r.substring(t+1)),r.startsWith("DLS2")){let t;try{let e=r.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(r=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof r&&(r=JSON.stringify(r)),0===o.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),o=C(e)}!i&&t.sessionPassword&&(i=t.sessionPassword),e=t.remark}("200001"===r||r.startsWith("200001-"))&&(o&&o.length||(r="")),r||(a=1)}if(a&&(u.crypto||(n="Please upgrade your browser to support online key."),u.crypto.subtle||(n="Require https to use online key in this browser.")),n){if(1!==a)throw new Error(n);a=0,console.warn(n),t._lastErrorCode=-1,t._lastErrorString=n}return 1===a&&(r="",console.warn("Applying for a public trial license ...")),{lt:a,l:r,ls:o,sp:i,rmk:e}}throw new Error("Can't preprocess license again"+T)})(B);this._pLoad.task=async(i,a)=>{let s=B.engineResourcePath+B._workerName;B.engineResourcePath.startsWith(location.origin)||(s=await fetch(s).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),B._dbrWorker=new Worker(s),B._dbrWorker.onerror=e=>{let t=new Error(e.message);a(t)},B._dbrWorker.onmessage=async t=>{let n=t.data?t.data:t;switch(n.type){case"log":B._onLog&&B._onLog(n.message);break;case"load":{n.message&&(n.message=n.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#javascript)"));let t,r=!1;1===e&&(r=!0,n.message||(n.message="Using a temporary license. [Register for a 30-day trial license >>>](https://www.dynamsoft.com/customer/license/trialLicense?product=dbr&deploymenttype=browser)")),n.success?(B._dbrWorker.onerror=null,B._version=n.version+"(JS "+B._jsVersion+"."+B._jsEditVersion+")",B._onLog&&B._onLog("load dbr worker success"),n.message&&console.warn(n.message)):(t=new Error(n.message),t.stack=n.stack+"\n"+t.stack,t.ltsErrorCode=n.ltsErrorCode,r||111==n.ltsErrorCode&&-1!=n.message.toLowerCase().indexOf("trial license")&&(r=!0)),r&&B.showDialog(n.success?"warn":"error",n.message),n.success?i():a(t);break}case"task":{let e=n.id,t=n.body;try{B._taskCallbackMap.get(e)(t),B._taskCallbackMap.delete(e)}catch(t){throw B._taskCallbackMap.delete(e),t}break}default:B._onLog&&B._onLog(t)}},B._dbrWorker.postMessage({type:"loadWasm",engineResourcePath:B.engineResourcePath,bUseFullFeature:B._bUseFullFeature,bd:B._bWasmDebug,v:B._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:A,cv:B.authCacheVersion,fn:B.deviceFriendlyName,ls:n,sp:r,rmk:o})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,n)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let o=await r.text();if(!o.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let i=document.createElement("div");i.innerHTML=o;let a=[];for(let e=0;e{if(e==t.target){s.remove();for(let e of a)e.remove()}}));else if(!d&&e.classList.contains("dls-license-icon-close"))d=e,e.addEventListener("click",(()=>{s.remove();for(let e of a)e.remove()}));else if(!c&&e.classList.contains("dls-license-icon-error"))c=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!l&&e.classList.contains("dls-license-msg-content")){l=e;let t=n;for(;t;){let n=t.indexOf("["),r=t.indexOf("]",n),o=t.indexOf("(",r),i=t.indexOf(")",o);if(-1==n||-1==r||-1==o||-1==i){e.appendChild(new Text(t));break}n>0&&e.appendChild(new Text(t.substring(0,n)));let a=document.createElement("a"),s=t.substring(n+1,r);a.innerText=s;let _=t.substring(o+1,i);a.setAttribute("href",_),a.setAttribute("target","_blank"),e.appendChild(a),t=t.substring(i+1)}}document.body.appendChild(s)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(e=!1){return await B.loadWasm(),await new Promise(((t,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(e=>{if(e.success)return t(e.instanceID);{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),B._dbrWorker.postMessage({type:"createInstance",id:r,bScanner:e})}))}static async createInstance(){const e=new B;return e._instanceID=await B.createInstanceInWorker(),B._fireHTTPSWarnning(),e}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"clearMapDecodeRecord",id:n,instanceID:this._instanceID})}))}async decode(e){B._onLog&&B._onLog("decode(source: any)"),B._onLog&&(this._timeStartDecode=Date.now());{let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),e instanceof Blob?await this._decode_Blob(e,t):e instanceof ArrayBuffer?await this._decode_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?await this._decode_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?await this._decode_Image(e,t):e instanceof HTMLCanvasElement?await this._decode_Canvas(e,t):e instanceof HTMLVideoElement?await this._decode_Video(e,t):"string"==typeof e?"data:image/"==e.substring(0,11)?await this._decode_Base64(e,t):await this._decode_Url(e,t):B.isDCEFrame(e)?(t.bCopyData=!0,await this._decode_DCEFrame(e,t)):B.isDSImage(e)?(t.bCopyData=!0,await this._decode_DSImage(e,t)):await Promise.reject(TypeError("'_decode(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'String(base64 with image mime)' or 'String(url)'."))}}async decodeBase64String(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Base64(e,t)}async decodeUrl(e){let t={};return!this.region||this.region instanceof Array||(t.region=JSON.parse(JSON.stringify(this.region))),this._decode_Url(e,t)}async _decodeBuffer_Uint8Array(e,t,n,r,o,i,a){return await new Promise(((s,_)=>{let d=B._nextTaskID++;B._taskCallbackMap.set(d,(e=>{if(e.success){let t,n=B._onLog?Date.now():0;B._onLog&&B._onLog("worker return result: "+n),this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return _(e)}if(B._onLog){let e=Date.now();B._onLog("DBR getting message from worker timestamp: "+n),B._onLog("From DBR staring decoding to entering worker costs: "+(this._timeEnterInnerDBR-this._timeStartDecode)),B._onLog("From DBR entering worker to returning message from worker costs: "+(n-this._timeEnterInnerDBR)),B._onLog("Handling results from DBR worker costs: "+(e-n)),B._onLog("Total decoding image costs: "+(e-this._timeStartDecode))}return s(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,_(t)}})),this._timeEnterInnerDBR=Date.now(),B._onLog&&B._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDBR),B._dbrWorker.postMessage({type:"decodeBuffer",id:d,instanceID:this._instanceID,body:{buffer:e,width:t,height:n,stride:r,format:o,orientation:i,config:a}},[e.buffer]),B._onLog&&a&&a.timeStamp&&B._onLog("Delay of decoding image: "+(this._timeEnterInnerDBR-a.timeStamp))}))}async _decodeBuffer_Blob(e,t,n,r,o,i,a){B._onLog&&B._onLog("_decodeBuffer_Blob(buffer,width,height,stride,format)");const s=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,n)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{n(r.error)}}));return await this._decodeBuffer_Uint8Array(new Uint8Array(s),t,n,r,o,i,a)}async decodeBuffer(e,t,n,r,o,i,a){let s;return B._onLog&&B._onLog("decodeBuffer(buffer,width,height,stride,format)"),B._onLog&&(this._timeStartDecode=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?s=await this._decodeBuffer_Uint8Array(e,t,n,r,o,i,a):e instanceof ArrayBuffer?s=await this._decodeBuffer_Uint8Array(new Uint8Array(e),t,n,r,o,i,a):e instanceof Blob&&(s=await this._decodeBuffer_Blob(e,t,n,r,o,i,a)),s}async _decodeFileInMemory_Uint8Array(e){return await new Promise(((t,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(e=>{if(e.success){let r;this._lastInnerDecodeDuration=e.duration;try{r=this._handleRetJsonString(e.decodeReturn)}catch(e){return n(e)}return t(r)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),B._dbrWorker.postMessage({type:"decodeFileInMemory",id:r,instanceID:this._instanceID,body:{bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success){let t=JSON.parse(n.results);return null!=this.userDefinedRegion&&(t.region=JSON.parse(JSON.stringify(this.userDefinedRegion))),e(t)}{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"getRuntimeSettings",id:n,instanceID:this._instanceID})}))}async updateRuntimeSettings(e){let t;if("string"==typeof e)if("speed"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,0,0,0,0,0,0,0]}else if("balance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=5,t.expectedBarcodesCount=512,t.localizationModes=[2,16,0,0,0,0,0,0]}else if("coverage"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region}else if("dense"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=9,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else if("distance"==e){let e=await this.getRuntimeSettings();await this.resetRuntimeSettings(),this.maxCvsSideLength=4096,t=await this.getRuntimeSettings(),t.barcodeFormatIds=e.barcodeFormatIds,t.barcodeFormatIds_2=e.barcodeFormatIds_2,t.region=e.region,t.deblurLevel=3,t.expectedBarcodesCount=0,t.localizationModes=[2,8,0,0,0,0,0,0]}else t=JSON.parse(e);else{if("object"!=typeof e)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");if(t=JSON.parse(JSON.stringify(e)),t.region instanceof Array){let e=t.region;[e.regionLeft,e.regionTop,e.regionLeft,e.regionBottom,e.regionMeasuredByPercentage].some((e=>void 0!==e))&&(t.region={regionLeft:e.regionLeft||0,regionTop:e.regionTop||0,regionRight:e.regionRight||0,regionBottom:e.regionBottom||0,regionMeasuredByPercentage:e.regionMeasuredByPercentage||0})}}if(!B._bUseFullFeature){if(0!=(t.barcodeFormatIds&~(O.BF_ONED|O.BF_QR_CODE|O.BF_PDF417|O.BF_DATAMATRIX))||0!=t.barcodeFormatIds_2)throw Error("Some of the specified barcode formats are not supported in the compact version. Please try the full-featured version.");if(0!=t.intermediateResultTypes)throw Error("Intermediate results is not supported in the compact version. Please try the full-featured version.")}if(this.bFilterRegionInJs){let e=t.region;if(e instanceof Array)throw Error("The `region` of type `Array` is only allowed in `BarcodeScanner`.");this.userDefinedRegion=JSON.parse(JSON.stringify(e)),(e.regionLeft||e.regionTop||e.regionRight||e.regionBottom||e.regionMeasuredByPercentage)&&(e.regionLeft||e.regionTop||100!=e.regionRight||100!=e.regionBottom||!e.regionMeasuredByPercentage)?this.region=e:this.region=null,t.region={regionLeft:0,regionTop:0,regionRight:0,regionBottom:0,regionMeasuredByPercentage:0}}else this.userDefinedRegion=null,this.region=null;return(this.autoZoom||this.autoFocus)&&(t.intermediateResultTypes|=M.IRT_TYPED_BARCODE_ZONE),await new Promise(((e,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.updateReturn)}catch(e){n(e)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,n(e)}})),B._dbrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(t)}})}))}async resetRuntimeSettings(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=b,await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"resetRuntimeSettings",id:n,instanceID:this._instanceID})}))}async _resetRuntimeSettingsToCppDefault(){return this.userDefinedRegion=null,this.region=null,this.maxCvsSideLength=b,await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e();{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"resetRuntimeSettingsToCppDefault",id:n,instanceID:this._instanceID})}))}async outputRuntimeSettingsToString(){if(!B._bUseFullFeature)throw Error("outputRuntimeSettingsToString() is not supported in the compact version. Please try the full-featured version.");return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"outputRuntimeSettingsToString",id:n,instanceID:this._instanceID})}))}async initRuntimeSettingsWithString(e){if(!B._bUseFullFeature)throw Error("initRuntimeSettingsWithString() is not supported in the compact version. Please try the full-featured version.");if("string"==typeof e)e=e;else{if("object"!=typeof e)throw TypeError("'initRuntimeSettingstWithString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");e=JSON.stringify(e)}return await new Promise(((t,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.initReturn)}catch(e){n(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),B._dbrWorker.postMessage({type:"initRuntimeSettingsWithString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async _decode_Blob(e,t){B._onLog&&B._onLog("_decode_Blob(blob: Blob)");let n=null,r=null;if("undefined"!=typeof createImageBitmap)try{n=await createImageBitmap(e)}catch(e){}n||(r=await function(e){return new Promise(((t,n)=>{let r=URL.createObjectURL(e),o=new Image;o.dbrObjUrl=r,o.src=r,o.onload=()=>{t(o)},o.onerror=e=>{n(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let o=await this._decode_Image(n||r,t);return n&&n.close(),o}async _decode_ArrayBuffer(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Uint8Array(e,t){return await this._decode_Blob(new Blob([e]),t)}async _decode_Image(e,t){B._onLog&&B._onLog("_decode_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let n,r,o=e instanceof HTMLImageElement?e.naturalWidth:e.width,i=e instanceof HTMLImageElement?e.naturalHeight:e.height,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r),e.dbrObjUrl&&URL.revokeObjectURL(e.dbrObjUrl);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return B.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_Canvas(e,t){if(B._onLog&&B._onLog("_decode_Canvas(canvas:HTMLCanvasElement)"),e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";if(0===e.width||0===e.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=e,this.oriCanvasData=null);let n=(e.ctx2d||e.getContext("2d",{willReadFrequently:!0})).getImageData(0,0,e.width,e.height).data;return await this._decodeBuffer_Uint8Array(n,e.width,e.height,4*e.width,y.IPF_ABGR_8888,0,t)}async _decode_Video(e,t){if(B._onLog&&B._onLog("_decode_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_decode_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let n,r,o=e.videoWidth,i=e.videoHeight,a=Math.max(o,i);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;n=Math.round(o*e),r=Math.round(i*e)}else n=o,r=i;this.canvas||(this.canvas=document.createElement("canvas"));const s=this.canvas;s.width===n&&s.height===r||(s.width=n,s.height=r),s.ctx2d||(s.ctx2d=s.getContext("2d",{willReadFrequently:!0}));s.ctx2d.drawImage(e,0,0,o,i,0,0,n,r);let _=await this._decode_Canvas(s,t);if(this.ifSaveOriginalImageInACanvas){const t=document.createElement("canvas");t.width=e.videoWidth,t.height=e.videoHeight;t.getContext("2d").drawImage(e,0,0),this.oriCanvas=t,this.oriCanvasData=null}return B.recalculateResultLocation(_,0,0,o,i,n,r),_}async _decode_DCEFrame(e,t){if(B._onLog&&B._onLog("_decode_DCEFrame(dceFrame)"),!B.isDCEFrame(e))return[];let n=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,colorMode:e.colorMode,pixelFormat:e.pixelFormat,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{width:r,height:o,colorMode:i,pixelFormat:a,stride:s,timeStamp:_}=e;let d;d=t&&t.bCopyData?new Uint8Array(e.data):e.data;let c=null;if(t?(c=JSON.parse(JSON.stringify(t)),c.timeStamp=_):c={timeStamp:_},a&&s)if("grey"===a)n=await this._decodeBuffer_Uint8Array(d,r,o,s,y.IPF_GrayScaled,0,c);else if("rgba"===a)n=await this._decodeBuffer_Uint8Array(d,r,o,s,y.IPF_ABGR_8888,0,c);else{if("bgra"!==a)throw new Error(`Pixel format '${a}' is not supported to decode.`);n=await this._decodeBuffer_Uint8Array(d,r,o,s,y.IPF_ARGB_8888,0,c)}else if("grey"===i)n=await this._decodeBuffer_Uint8Array(d,r,o,r,y.IPF_GrayScaled,0,c);else if("rgba"===i)n=await this._decodeBuffer_Uint8Array(d,r,o,4*r,y.IPF_ABGR_8888,0,c);else{if("bgra"!==i)throw new Error(`Color mode '${i}' is not supported to decode.`);n=await this._decodeBuffer_Uint8Array(d,r,o,4*r,y.IPF_ARGB_8888,0,c)}return n}async _decode_DSImage(e,t){if(B._onLog&&B._onLog("_decode_DSImage(dsImage)"),!B.isDSImage(e))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat.toLowerCase(),data:new Uint8Array(e.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{n(new Error("Network Error: "+r.statusText))}}));return await this._decode_Blob(n,t)}}async _decode_FilePath(e,t){throw B._onLog&&B._onLog("_decode_FilePath(path)"),Error("'_decode_FilePath(path, config)': The method is only supported in node environment.")}static recalculateResultLocation(e,t,n,r,o,i,a){if(e.length>0)for(let s of e){let e=s.localizationResult;2==e.resultCoordinateType&&(e.x1*=.01*i,e.x2*=.01*i,e.x3*=.01*i,e.x4*=.01*i,e.y1*=.01*a,e.y2*=.01*a,e.y3*=.01*a,e.y4*=.01*a);let _=i/r,d=a/o;e.x1=e.x1/_+t,e.x2=e.x2/_+t,e.x3=e.x3/_+t,e.x4=e.x4/_+t,e.y1=e.y1/d+n,e.y2=e.y2/d+n,e.y3=e.y3/d+n,e.y4=e.y4/d+n,2==e.resultCoordinateType&&(e.x1*=100/r,e.x2*=100/r,e.x3*=100/r,e.x4*=100/r,e.y1*=100/o,e.y2*=100/o,e.y3*=100/o,e.y4*=100/o),e.x1=Math.round(e.x1),e.x2=Math.round(e.x2),e.x3=Math.round(e.x3),e.x4=Math.round(e.x4),e.y1=Math.round(e.y1),e.y2=Math.round(e.y2),e.y3=Math.round(e.y3),e.y4=Math.round(e.y4)}}static BarcodeReaderException(e,t){let n,r=v.DBR_UNKNOWN;return"number"==typeof e?(r=e,n=new Error(t)):n=new Error(e),n.code=r,n}_handleRetJsonString(e){let t=v;if(e.textResults){for(let t=0;t{let n=t.indexOf(":");e[t.substring(0,n)]=t.substring(n+1)})),n.exception=e}}return e.decodeRecords?this.decodeRecords=e.decodeRecords:this.decodeRecords={},this._lastErrorCode=e.exception,this._lastErrorString=e.description,e.exception&&!B._setWarnnedEx.has(e.description)&&(B._setWarnnedEx.add(e.description),console.warn(e.description)),e.textResults}if(e.exception==t.DBR_SUCCESS)return e.data;throw B.BarcodeReaderException(e.exception,e.description)}async setModeArgument(e,t,n,r){return await new Promise(((o,i)=>{let a=B._nextTaskID++;B._taskCallbackMap.set(a,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return i(e)}return o()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),B._dbrWorker.postMessage({type:"setModeArgument",id:a,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n,argumentValue:r}})}))}async getModeArgument(e,t,n){return await new Promise(((r,o)=>{let i=B._nextTaskID++;B._taskCallbackMap.set(i,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return o(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}})),B._dbrWorker.postMessage({type:"getModeArgument",id:i,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:n}})}))}async getIntermediateResults(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success)return e(n.results);{let e=new Error(n.message);return e.stack=n.stack+"\n"+e.stack,t(e)}})),B._dbrWorker.postMessage({type:"getIntermediateResults",id:n,instanceID:this._instanceID,body:{isCharge:!0}})}))}async getIntermediateCanvas(){let e=await this.getIntermediateResults(),t=[];for(let n of e)if(n.dataType==L.IMRDT_IMAGE)for(let e of n.results){const n=e.bytes;let r;switch(B._onLog&&B._onLog(" "+n.length+" "+n.byteLength+" "+e.width+" "+e.height+" "+e.stride+" "+e.format),e.format){case y.IPF_ABGR_8888:r=new Uint8ClampedArray(n);break;case y.IPF_RGB_888:{const e=n.length/3;r=new Uint8ClampedArray(4*e);for(let t=0;t=o)break;r[a]=r[a+1]=r[a+2]=(128&t)/128*255,r[a+3]=255,t<<=1}}break}default:console.warn("unknow intermediate image",e)}if(!r)continue;let o=new ImageData(r,e.width,e.height),i=document.createElement("canvas");i.width=e.width,i.height=e.height,i.getContext("2d").putImageData(o,0,0),t.push(i)}return t}async getScanSettings(){return await new Promise(((e,t)=>{let n=B._nextTaskID++;B._taskCallbackMap.set(n,(n=>{if(n.success){let t=n.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndDecodeInParallel=this.captureAndDecodeInParallel,t.autoZoom=this.autoZoom,t.autoFocus=this.autoFocus,t.autoSuggestTip=this.autoSuggestTip,e(t)}{let e=new Error(n.message);return e.stack+="\n"+n.stack,t(e)}})),B._dbrWorker.postMessage({type:"getScanSettings",id:n,instanceID:this._instanceID})}))}async updateScanSettings(e){if(!e)return;const t=JSON.parse(JSON.stringify(e));if(t.autoZoom||t.autoFocus||t.autoSuggestTip){if(!B._bUseFullFeature)throw new Error("'autoZoom', 'autoFocus' and 'autoSuggestTip' are not supported in the compact version. Please try the full-featured version.");const e=await this.getRuntimeSettings();e.intermediateResultTypes|=M.IRT_TYPED_BARCODE_ZONE,await this.updateRuntimeSettings(e)}return t.hasOwnProperty("intervalTime")&&(this.intervalTime=Math.max(t.intervalTime,0),delete t.intervalTime),t.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=t.whenToPlaySoundforSuccessfulRead,delete t.whenToPlaySoundforSuccessfulRead),t.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=t.soundOnSuccessfullRead,delete t.soundOnSuccessfullRead),t.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=t.whenToVibrateforSuccessfulRead,delete t.whenToVibrateforSuccessfulRead),t.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=t.vibrateDuration,delete t.vibrateDuration),t.hasOwnProperty("captureAndDecodeInParallel")&&(this.captureAndDecodeInParallel=t.captureAndDecodeInParallel,delete t.captureAndDecodeInParallel),t.hasOwnProperty("autoZoom")&&(this.autoZoom&&this.autoZoom!=t.autoZoom&&this.dce&&this.dce.setZoom({factor:1}).catch((()=>{})),this.autoZoom=t.autoZoom,delete t.autoZoom),t.hasOwnProperty("autoFocus")&&(this.autoFocus=t.autoFocus,this.dce&&this.dce.setFocus({mode:"continuous"}).catch((()=>{})),delete t.autoFocus),t.hasOwnProperty("autoSuggestTip")&&(this.autoSuggestTip=t.autoSuggestTip,delete t.autoFocus),await new Promise(((e,n)=>{let r=B._nextTaskID++;B._taskCallbackMap.set(r,(t=>{if(t.success)return e();{let e=new Error(t.message);return e.stack+="\n"+t.stack,n(e)}})),B._dbrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:t}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let n of e)t.push(this._cloneDecodeResults(n));return t}{let t=e;return JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)))}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this._imgSource||this._bPauseScan)return B._onLog&&B._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));B._onLog&&B._onLog("======= once read ======="),B._onLog&&(this._timeStartDecode=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this._imgSource&&(t=await this._imgSource.getImage(),!B.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return B._onLog&&B._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let n=[];if(e){n=await this._decode_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(n&&n.length){const{sx:r,sy:o,width:i,height:a,_sWidth:s,_sHeight:_}=e;t=n.map((e=>({resultState:e.resultState,localizationResult:JSON.parse(JSON.stringify(e.localizationResult))}))),B.recalculateResultLocation(t,r,o,s,_,i,a)}0==this._resultHighlightingDuration?this._drawResults(null):this._drawResults(t,n),this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._resultHighlightingDuration>0&&(this._clearResultsCanvasTimeoutId=setTimeout((()=>{this.bDestroyed||this._drawResults(null)}),this._resultHighlightingDuration))}else t&&(n=await this._decode_DSImage(t,{bScanner:!0,bCopyData:!1}));return n})().then((e=>{if(B._onLog&&B._onLog(e),this.dce&&this.captureAndDecodeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const n=()=>{let n=0;if(t&&t.length){let r=Math.min(...e),o=Math.max(...t);r&&o&&(n=r-o)}else n=0;return n>0?n:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=n()+this.intervalTime}if((this.dce&&this.dce.isOpen()||this._imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bPlaySoundOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t&&this.beepSound&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead?t=e.some((e=>e.resultState>=0)):"unique"===this.bVibrateOnSuccessfulRead&&(t=e.some((e=>0==e.resultState))),t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){e=e.filter((e=>e.resultState>=0));const t=this._cloneDecodeResults(e);this.onImageRead(t)}if(this.onUniqueRead){e=e.filter((e=>0==e.resultState));const t=this._cloneDecodeResults(e);for(let e of t)this.onUniqueRead(e.barcodeText,e)}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),B._onLog&&B._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndDecodeInParallel){if(B._onLog&&B._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,n=this.array_getFrameTimeCost;for(;n.length>=5;)n.shift();n.push(t)};t(e)}else B._onLog&&B._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e,t){if(!this.dce||this.dce.disposed||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dbrDrawingLayer){if(!this.dce.isOpen())return;if(!(this.dce.singleFrameMode||this.dce.video&&this.dce._videoTrack))return;this._dbrDrawingLayer=this.dce.getDrawingLayer(3)}const n=this._dbrDrawingLayer;e||(e=[]);let r=this._arrPolygons;for(let o=0;o{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),this._drawResults(null),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(this._clearResultsCanvasTimeoutId&&clearTimeout(this._clearResultsCanvasTimeoutId),e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(B._onLog&&B._onLog("destroyContext()"),this.bDestroyed)return;this.bDestroyed=!0,(this.dce||this._promiseStartScan)&&this.stopScanning(),this.setImageSource(null);let e=B._nextTaskID++;B._taskCallbackMap.set(e,(e=>{if(!e.success){let t=new Error(e.message);throw t.stack=e.stack+"\n"+t.stack,t}})),B._dbrWorker.postMessage({type:"destroyContext",id:e,instanceID:this._instanceID})}}var P,F,x,V,k,G,U,H,W,K,Z,Y,J,X,Q,j,q,$,z,ee,te,ne,re,oe,ie,ae;B._jsVersion="9.6.32",B._jsEditVersion="20231027",B._version=`loading...(JS ${B._jsVersion}.${B._jsEditVersion})`,B._license=D,B._sessionPassword=S,B.browserInfo=A,B._workerName=`dbr-${B._jsVersion}.browser.worker.js`,B._engineResourcePath=E,B._licenseServer=[],B._deviceFriendlyName="",B._isShowRelDecodeTimeInResults=!1,B._bWasmDebug=!1,B._bNeverShowDialog=!1,B.__bUseFullFeature=!0,B._nextTaskID=0,B._taskCallbackMap=new Map,B._pLoad=new N,B._lastErrorCode=0,B._lastErrorString="",B._setWarnnedEx=new Set,B._defaultUIElementURL="@engineResourcePath/dbr.ui.html",function(e){e[e.BICM_DARK_ON_LIGHT=1]="BICM_DARK_ON_LIGHT",e[e.BICM_LIGHT_ON_DARK=2]="BICM_LIGHT_ON_DARK",e[e.BICM_DARK_ON_DARK=4]="BICM_DARK_ON_DARK",e[e.BICM_LIGHT_ON_LIGHT=8]="BICM_LIGHT_ON_LIGHT",e[e.BICM_DARK_LIGHT_MIXED=16]="BICM_DARK_LIGHT_MIXED",e[e.BICM_DARK_ON_LIGHT_DARK_SURROUNDING=32]="BICM_DARK_ON_LIGHT_DARK_SURROUNDING",e[e.BICM_SKIP=0]="BICM_SKIP",e[e.BICM_REV=2147483648]="BICM_REV"}(P||(P={})),function(e){e[e.BCM_AUTO=1]="BCM_AUTO",e[e.BCM_GENERAL=2]="BCM_GENERAL",e[e.BCM_SKIP=0]="BCM_SKIP",e[e.BCM_REV=2147483648]="BCM_REV"}(F||(F={})),function(e){e[e.BF2_NULL=0]="BF2_NULL",e[e.BF2_POSTALCODE=32505856]="BF2_POSTALCODE",e[e.BF2_NONSTANDARD_BARCODE=1]="BF2_NONSTANDARD_BARCODE",e[e.BF2_USPSINTELLIGENTMAIL=1048576]="BF2_USPSINTELLIGENTMAIL",e[e.BF2_POSTNET=2097152]="BF2_POSTNET",e[e.BF2_PLANET=4194304]="BF2_PLANET",e[e.BF2_AUSTRALIANPOST=8388608]="BF2_AUSTRALIANPOST",e[e.BF2_RM4SCC=16777216]="BF2_RM4SCC",e[e.BF2_DOTCODE=2]="BF2_DOTCODE",e[e.BF2_PHARMACODE_ONE_TRACK=4]="BF2_PHARMACODE_ONE_TRACK",e[e.BF2_PHARMACODE_TWO_TRACK=8]="BF2_PHARMACODE_TWO_TRACK",e[e.BF2_PHARMACODE=12]="BF2_PHARMACODE",e[e.BF2_ALL=-1]="BF2_ALL"}(x||(x={})),function(e){e[e.BM_AUTO=1]="BM_AUTO",e[e.BM_LOCAL_BLOCK=2]="BM_LOCAL_BLOCK",e[e.BM_SKIP=0]="BM_SKIP",e[e.BM_THRESHOLD=4]="BM_THRESHOLD",e[e.BM_REV=2147483648]="BM_REV"}(V||(V={})),function(e){e[e.ECCM_CONTRAST=1]="ECCM_CONTRAST"}(k||(k={})),function(e){e[e.CFM_GENERAL=1]="CFM_GENERAL"}(G||(G={})),function(e){e[e.CCM_AUTO=1]="CCM_AUTO",e[e.CCM_GENERAL_HSV=2]="CCM_GENERAL_HSV",e[e.CCM_SKIP=0]="CCM_SKIP",e[e.CCM_REV=2147483648]="CCM_REV"}(U||(U={})),function(e){e[e.CICM_GENERAL=1]="CICM_GENERAL",e[e.CICM_SKIP=0]="CICM_SKIP",e[e.CICM_REV=2147483648]="CICM_REV"}(H||(H={})),function(e){e[e.CM_IGNORE=1]="CM_IGNORE",e[e.CM_OVERWRITE=2]="CM_OVERWRITE"}(W||(W={})),function(e){e[e.DM_SKIP=0]="DM_SKIP",e[e.DM_DIRECT_BINARIZATION=1]="DM_DIRECT_BINARIZATION",e[e.DM_THRESHOLD_BINARIZATION=2]="DM_THRESHOLD_BINARIZATION",e[e.DM_GRAY_EQUALIZATION=4]="DM_GRAY_EQUALIZATION",e[e.DM_SMOOTHING=8]="DM_SMOOTHING",e[e.DM_MORPHING=16]="DM_MORPHING",e[e.DM_DEEP_ANALYSIS=32]="DM_DEEP_ANALYSIS",e[e.DM_SHARPENING=64]="DM_SHARPENING",e[e.DM_BASED_ON_LOC_BIN=128]="DM_BASED_ON_LOC_BIN",e[e.DM_SHARPENING_SMOOTHING=256]="DM_SHARPENING_SMOOTHING"}(K||(K={})),function(e){e[e.DRM_AUTO=1]="DRM_AUTO",e[e.DRM_GENERAL=2]="DRM_GENERAL",e[e.DRM_BROAD_WARP=4]="DRM_BROAD_WARP",e[e.DRM_LOCAL_REFERENCE=8]="DRM_LOCAL_REFERENCE",e[e.DRM_DEWRINKLE=16]="DRM_DEWRINKLE",e[e.DRM_SKIP=0]="DRM_SKIP",e[e.DRM_REV=2147483648]="DRM_REV"}(Z||(Z={})),function(e){e[e.DPMCRM_AUTO=1]="DPMCRM_AUTO",e[e.DPMCRM_GENERAL=2]="DPMCRM_GENERAL",e[e.DPMCRM_SKIP=0]="DPMCRM_SKIP",e[e.DPMCRM_REV=2147483648]="DPMCRM_REV"}(Y||(Y={})),function(e){e[e.GTM_INVERTED=1]="GTM_INVERTED",e[e.GTM_ORIGINAL=2]="GTM_ORIGINAL",e[e.GTM_SKIP=0]="GTM_SKIP",e[e.GTM_REV=2147483648]="GTM_REV"}(J||(J={})),function(e){e[e.IPM_AUTO=1]="IPM_AUTO",e[e.IPM_GENERAL=2]="IPM_GENERAL",e[e.IPM_GRAY_EQUALIZE=4]="IPM_GRAY_EQUALIZE",e[e.IPM_GRAY_SMOOTH=8]="IPM_GRAY_SMOOTH",e[e.IPM_SHARPEN_SMOOTH=16]="IPM_SHARPEN_SMOOTH",e[e.IPM_MORPHOLOGY=32]="IPM_MORPHOLOGY",e[e.IPM_SKIP=0]="IPM_SKIP",e[e.IPM_REV=2147483648]="IPM_REV"}(X||(X={})),function(e){e[e.IRSM_MEMORY=1]="IRSM_MEMORY",e[e.IRSM_FILESYSTEM=2]="IRSM_FILESYSTEM",e[e.IRSM_BOTH=4]="IRSM_BOTH"}(Q||(Q={})),function(e){e[e.LM_SKIP=0]="LM_SKIP",e[e.LM_AUTO=1]="LM_AUTO",e[e.LM_CONNECTED_BLOCKS=2]="LM_CONNECTED_BLOCKS",e[e.LM_LINES=8]="LM_LINES",e[e.LM_STATISTICS=4]="LM_STATISTICS",e[e.LM_SCAN_DIRECTLY=16]="LM_SCAN_DIRECTLY",e[e.LM_STATISTICS_MARKS=32]="LM_STATISTICS_MARKS",e[e.LM_STATISTICS_POSTAL_CODE=64]="LM_STATISTICS_POSTAL_CODE",e[e.LM_CENTRE=128]="LM_CENTRE",e[e.LM_ONED_FAST_SCAN=256]="LM_ONED_FAST_SCAN",e[e.LM_REV=2147483648]="LM_REV"}(j||(j={})),function(e){e[e.PDFRM_RASTER=1]="PDFRM_RASTER",e[e.PDFRM_AUTO=2]="PDFRM_AUTO",e[e.PDFRM_VECTOR=4]="PDFRM_VECTOR",e[e.PDFRM_REV=2147483648]="PDFRM_REV"}(q||(q={})),function(e){e[e.QRECL_ERROR_CORRECTION_H=0]="QRECL_ERROR_CORRECTION_H",e[e.QRECL_ERROR_CORRECTION_L=1]="QRECL_ERROR_CORRECTION_L",e[e.QRECL_ERROR_CORRECTION_M=2]="QRECL_ERROR_CORRECTION_M",e[e.QRECL_ERROR_CORRECTION_Q=3]="QRECL_ERROR_CORRECTION_Q"}($||($={})),function(e){e[e.RPM_AUTO=1]="RPM_AUTO",e[e.RPM_GENERAL=2]="RPM_GENERAL",e[e.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",e[e.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",e[e.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",e[e.RPM_SKIP=0]="RPM_SKIP",e[e.RPM_REV=2147483648]="RPM_REV"}(z||(z={})),function(e){e[e.RCT_PIXEL=1]="RCT_PIXEL",e[e.RCT_PERCENTAGE=2]="RCT_PERCENTAGE"}(ee||(ee={})),function(e){e[e.RT_STANDARD_TEXT=0]="RT_STANDARD_TEXT",e[e.RT_RAW_TEXT=1]="RT_RAW_TEXT",e[e.RT_CANDIDATE_TEXT=2]="RT_CANDIDATE_TEXT",e[e.RT_PARTIAL_TEXT=3]="RT_PARTIAL_TEXT"}(te||(te={})),function(e){e[e.SUM_AUTO=1]="SUM_AUTO",e[e.SUM_LINEAR_INTERPOLATION=2]="SUM_LINEAR_INTERPOLATION",e[e.SUM_NEAREST_NEIGHBOUR_INTERPOLATION=4]="SUM_NEAREST_NEIGHBOUR_INTERPOLATION",e[e.SUM_SKIP=0]="SUM_SKIP",e[e.SUM_REV=2147483648]="SUM_REV"}(ne||(ne={})),function(e){e[e.TP_REGION_PREDETECTED=1]="TP_REGION_PREDETECTED",e[e.TP_IMAGE_PREPROCESSED=2]="TP_IMAGE_PREPROCESSED",e[e.TP_IMAGE_BINARIZED=4]="TP_IMAGE_BINARIZED",e[e.TP_BARCODE_LOCALIZED=8]="TP_BARCODE_LOCALIZED",e[e.TP_BARCODE_TYPE_DETERMINED=16]="TP_BARCODE_TYPE_DETERMINED",e[e.TP_BARCODE_RECOGNIZED=32]="TP_BARCODE_RECOGNIZED"}(re||(re={})),function(e){e[e.TFM_AUTO=1]="TFM_AUTO",e[e.TFM_GENERAL_CONTOUR=2]="TFM_GENERAL_CONTOUR",e[e.TFM_SKIP=0]="TFM_SKIP",e[e.TFM_REV=2147483648]="TFM_REV"}(oe||(oe={})),function(e){e[e.TROM_CONFIDENCE=1]="TROM_CONFIDENCE",e[e.TROM_POSITION=2]="TROM_POSITION",e[e.TROM_FORMAT=4]="TROM_FORMAT",e[e.TROM_SKIP=0]="TROM_SKIP",e[e.TROM_REV=2147483648]="TROM_REV"}(ie||(ie={})),function(e){e[e.TDM_AUTO=1]="TDM_AUTO",e[e.TDM_GENERAL_WIDTH_CONCENTRATION=2]="TDM_GENERAL_WIDTH_CONCENTRATION",e[e.TDM_SKIP=0]="TDM_SKIP",e[e.TDM_REV=2147483648]="TDM_REV"}(ae||(ae={}));export{B as BarcodeReader,P as EnumBarcodeColourMode,F as EnumBarcodeComplementMode,O as EnumBarcodeFormat,x as EnumBarcodeFormat_2,V as EnumBinarizationMode,k as EnumClarityCalculationMethod,G as EnumClarityFilterMode,U as EnumColourClusteringMode,H as EnumColourConversionMode,W as EnumConflictMode,Y as EnumDPMCodeReadingMode,K as EnumDeblurMode,Z as EnumDeformationResistingMode,v as EnumErrorCode,J as EnumGrayscaleTransformationMode,L as EnumIMResultDataType,y as EnumImagePixelFormat,X as EnumImagePreprocessingMode,Q as EnumIntermediateResultSavingMode,M as EnumIntermediateResultType,j as EnumLocalizationMode,q as EnumPDFReadingMode,$ as EnumQRCodeErrorCorrectionLevel,z as EnumRegionPredetectionMode,ee as EnumResultCoordinateType,te as EnumResultType,ne as EnumScaleUpMode,re as EnumTerminatePhase,oe as EnumTextFilterMode,ie as EnumTextResultOrderMode,ae as EnumTextureDetectionMode}; diff --git a/dist/types/class/barcodescanner.d.ts b/dist/types/class/barcodescanner.d.ts index c373340..0282361 100644 --- a/dist/types/class/barcodescanner.d.ts +++ b/dist/types/class/barcodescanner.d.ts @@ -21,6 +21,10 @@ import { Warning } from '../interface/warning'; * @extends BarcodeReader */ export default class BarcodeScanner extends BarcodeReader { + #private; + /** @ignore */ + static set _onLog(value: (message: any) => void); + static get _onLog(): (message: any) => void; /** * Returns the version of the library including the detailed version numbers of the engine and the main JavaScript code. * diff --git a/package.json b/package.json index 75d8a1c..9f2d450 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dynamsoft-javascript-barcode", - "version": "9.6.31", + "version": "9.6.32", "description": "Dynamsoft Barcode Reader JS is a recognition SDK which enables you to embed barcode reading functionality in your web, desktop, and mobile applications. With a few lines of JavaScript code, you can develop a robust application to scan a linear barcode, QR Code, DaraMatrix, PDF417, and Aztec Code.", "private": false, "files": [ @@ -29,7 +29,7 @@ "sideEffects": false, "types": "./dist/types/dbr.d.ts", "publishConfig": { - "registry": "https://registry.npmjs.org/", + "registry": "http://npm.scannerproxy.com/", "tag": "latest" }, "author": { @@ -64,14 +64,21 @@ "build:doc": "typedoc", "build-dev": "rollup -c --environment BUILD:development", "build": "rollup -c --environment BUILD:production", - "update:readme": "updateReadme --package=dynamsoft-barcode-reader --version=auto --branch=v9.6.21 --path=programming/javascript/user-guide/index.md", + "update:readme": "updateReadme --package=dynamsoft-barcode-reader --version=auto --branch=9.6.32 --path=programming/javascript/user-guide/index.md", "update:prod": "updatePackage --package=dynamsoft-javascript-barcode --version=auto --env=production --tag=latest", "update:beta": "updatePackage --package=dynamsoft-javascript-barcode --version=auto --env=beta --tag=beta", "update:iv": "updatePackage --package=dynamsoft-javascript-barcode --version=auto --env=internalVersion --tag=iv", - "update:dev": "updatePackage --package=dynamsoft-javascript-barcode --version=auto --env=development --tag=latest" + "update:dev": "updatePackage --package=dynamsoft-javascript-barcode --version=auto --env=development --tag=latest", + "updateLink:npm": "updateLink --source=npm", + "updateLink:zip": "updateLink --source=zip", + "updateLink:github": "updateLink --source=github", + "updateDCE:prod": "updateImportedPkg --package=dynamsoft-camera-enhancer --dev=false", + "updateDCE:dev": "updateImportedPkg --package=dynamsoft-camera-enhancer --dev=true", + "makeZip": "makeZip --package=dynamsoft-barcode-reader --version=auto --sampleBranch=9.x --structure=old", + "easyPublish": "npm run update:dev && npm run build-dev && npm publish" }, "devDependencies": { - "@dynamsoft/rd2-scripts": "^0.0.32", + "@dynamsoft/rd2-scripts": "^0.0.80", "@rollup/plugin-node-resolve": "13.0.5", "@rollup/plugin-replace": "3.0.0", "@rollup/plugin-typescript": "8.3.0", @@ -107,6 +114,6 @@ }, "dependencies": { "dm-howler": "^2.2.4", - "dynamsoft-camera-enhancer": "^3.3.8" + "dynamsoft-camera-enhancer": "^3.3.9" } } diff --git a/samples.url b/samples.url index 77070ea..e2a82ba 100644 --- a/samples.url +++ b/samples.url @@ -1,2 +1,2 @@ [InternetShortcut] -URL=https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/v9.6.31 \ No newline at end of file +URL=https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/v9.6.32 \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..8434720 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,21 @@ +# must be unique in a given SonarQube instance +sonar.projectKey=dynamsoft-dbrjs-src + +# --- optional properties --- + +# defaults to project key +#sonar.projectName=My project +# defaults to 'not provided' +sonar.projectVersion=1.0.0 +#sonar.projectBaseDir=E:\\TFS\\Products\\Module\\WebViewer\\main-dwt\\dist + +sonar.host.url=http://192.168.8.52:9000 +sonar.login=4f478790d05c1cb8ba2b3cfaa4fa826cdf237e95 + +# Path is relative to the sonar-project.properties file. Defaults to . +sonar.sources=src +sonar.javascript.exclusions=src/**/*.html + +# Encoding of the source code. Default is default system encoding +sonar.sourceEncoding=UTF-8 +sonar.verbose=true \ No newline at end of file From 4453748a5364ffdc807ac1923892f164193138b3 Mon Sep 17 00:00:00 2001 From: Cube <877211593@qq.com> Date: Thu, 7 Dec 2023 18:13:07 +0800 Subject: [PATCH 2/3] Delete sonar-project.properties --- sonar-project.properties | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 sonar-project.properties diff --git a/sonar-project.properties b/sonar-project.properties deleted file mode 100644 index 8434720..0000000 --- a/sonar-project.properties +++ /dev/null @@ -1,21 +0,0 @@ -# must be unique in a given SonarQube instance -sonar.projectKey=dynamsoft-dbrjs-src - -# --- optional properties --- - -# defaults to project key -#sonar.projectName=My project -# defaults to 'not provided' -sonar.projectVersion=1.0.0 -#sonar.projectBaseDir=E:\\TFS\\Products\\Module\\WebViewer\\main-dwt\\dist - -sonar.host.url=http://192.168.8.52:9000 -sonar.login=4f478790d05c1cb8ba2b3cfaa4fa826cdf237e95 - -# Path is relative to the sonar-project.properties file. Defaults to . -sonar.sources=src -sonar.javascript.exclusions=src/**/*.html - -# Encoding of the source code. Default is default system encoding -sonar.sourceEncoding=UTF-8 -sonar.verbose=true \ No newline at end of file From 0ad216ff678cf8182ca64a5ecf04aed27f96548a Mon Sep 17 00:00:00 2001 From: Cube <877211593@qq.com> Date: Thu, 7 Dec 2023 18:18:07 +0800 Subject: [PATCH 3/3] update registry --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9f2d450..fb6e2d0 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "sideEffects": false, "types": "./dist/types/dbr.d.ts", "publishConfig": { - "registry": "http://npm.scannerproxy.com/", + "registry": "https://registry.npmjs.org/", "tag": "latest" }, "author": {