syntec3-0-ui-components 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntec3-0-ui-components.es.js","sources":["../node_modules/element-plus/es/locale/lang/zh-cn.mjs","../node_modules/element-plus/es/locale/lang/en.mjs","../node_modules/element-plus/es/locale/lang/zh-tw.mjs","../src/i18n/lang/errorCodeTranslate.mjs","../src/utils/i18n.js","../src/components/columnConfigNext.vue","../src/scriptFiles/apiConfig/serviceRoute.js","../src/scriptFiles/apiConfig/privateCloudCoreApis.js","../src/scriptFiles/apis/privateCloudCoreApiFunction.js","../src/scriptFiles/apiConfig/baseApis.js","../src/scriptFiles/apis/baseApiFunction.js","../src/scriptFiles/apiConfig/mesApis.js","../src/scriptFiles/apis/mesApiFunction.js","../src/scriptFiles/apiConfig/mmsApis.js","../src/scriptFiles/apis/mmsApiFunction.js","../src/scriptFiles/apiConfig/sfcApis.js","../src/scriptFiles/apis/sfcApiFunction.js","../src/scriptFiles/apiConfig/ppmApis.js","../src/scriptFiles/apis/ppmApiFunction.js","../src/scriptFiles/apiConfig/wmsApis.js","../src/scriptFiles/apis/wmsApiFunction.js","../src/scriptFiles/apiConfig/pdmApis.js","../src/scriptFiles/apis/pdmApiFunction.js","../src/scriptFiles/backendApiFunction.js","../src/scriptFiles/checkApiErrorMechanism.js","../src/components/Pagination.vue","../src/components/customFilter/filterCriteria.vue","../src/components/customFilter/customFilter.vue","../src/components/Layout/modules/viewFile/viewManageTool.js","../src/components/Layout/modules/viewFile/viewTabs.vue","../src/components/Layout/modules/viewFile/config.js","../src/components/Layout/modules/viewFile/filterCriteria.vue","../__vite-browser-external","../node_modules/crypto-js/core.js","../node_modules/crypto-js/x64-core.js","../node_modules/crypto-js/lib-typedarrays.js","../node_modules/crypto-js/enc-utf16.js","../node_modules/crypto-js/enc-base64.js","../node_modules/crypto-js/enc-base64url.js","../node_modules/crypto-js/md5.js","../node_modules/crypto-js/sha1.js","../node_modules/crypto-js/sha256.js","../node_modules/crypto-js/sha224.js","../node_modules/crypto-js/sha512.js","../node_modules/crypto-js/sha384.js","../node_modules/crypto-js/sha3.js","../node_modules/crypto-js/ripemd160.js","../node_modules/crypto-js/hmac.js","../node_modules/crypto-js/pbkdf2.js","../node_modules/crypto-js/evpkdf.js","../node_modules/crypto-js/cipher-core.js","../node_modules/crypto-js/mode-cfb.js","../node_modules/crypto-js/mode-ctr.js","../node_modules/crypto-js/mode-ctr-gladman.js","../node_modules/crypto-js/mode-ofb.js","../node_modules/crypto-js/mode-ecb.js","../node_modules/crypto-js/pad-ansix923.js","../node_modules/crypto-js/pad-iso10126.js","../node_modules/crypto-js/pad-iso97971.js","../node_modules/crypto-js/pad-zeropadding.js","../node_modules/crypto-js/pad-nopadding.js","../node_modules/crypto-js/format-hex.js","../node_modules/crypto-js/aes.js","../node_modules/crypto-js/tripledes.js","../node_modules/crypto-js/rc4.js","../node_modules/crypto-js/rabbit.js","../node_modules/crypto-js/rabbit-legacy.js","../node_modules/crypto-js/blowfish.js","../node_modules/crypto-js/index.js","../src/components/Layout/modules/viewFile/createView.vue","../src/components/Layout/modules/viewFile/viewList.vue","../src/scriptFiles/common/objectDataProcessing.js","../src/utils/excel.js","../src/components/Layout/modules/viewFile/viewRecord.vue","../src/components/customTable/components/headerTabs/index.vue","../src/components/customTable/components/headerOperation/index.vue","../src/components/customTable/components/tableContent/index.vue","../src/components/customTable/index.vue","../src/components/materialSelectDialog/manufacturerList/querySearch.vue","../src/components/Layout/tools/GlobalDialog.vue","../src/utils/tableWidth.js","../src/components/materialSelectDialog/manufacturerList/index.vue","../src/components/materialSelectDialog/querySearch.vue","../src/components/materialSelectDialog/component/filePreview.vue","../src/components/materialSelectDialog/DragDropTree.vue","../src/components/materialSelectDialog/status.js","../src/scriptFiles/common/digitalRelated.js","../node_modules/utif/node_modules/pako/lib/utils/common.js","../node_modules/utif/node_modules/pako/lib/zlib/trees.js","../node_modules/utif/node_modules/pako/lib/zlib/adler32.js","../node_modules/utif/node_modules/pako/lib/zlib/crc32.js","../node_modules/utif/node_modules/pako/lib/zlib/messages.js","../node_modules/utif/node_modules/pako/lib/zlib/deflate.js","../node_modules/utif/node_modules/pako/lib/utils/strings.js","../node_modules/utif/node_modules/pako/lib/zlib/zstream.js","../node_modules/utif/node_modules/pako/lib/deflate.js","../node_modules/utif/node_modules/pako/lib/zlib/inffast.js","../node_modules/utif/node_modules/pako/lib/zlib/inftrees.js","../node_modules/utif/node_modules/pako/lib/zlib/inflate.js","../node_modules/utif/node_modules/pako/lib/zlib/constants.js","../node_modules/utif/node_modules/pako/lib/zlib/gzheader.js","../node_modules/utif/node_modules/pako/lib/inflate.js","../node_modules/utif/node_modules/pako/index.js","../node_modules/utif/UTIF.js","../src/assets/image/defaultImage.png","../src/utils/toolFun.js","../src/components/materialSelectDialog/component/docCustomFieldForm.vue","../src/components/materialSelectDialog/component/newUnits.vue","../src/components/materialSelectDialog/component/dialog.vue","../src/components/materialSelectDialog/component/previewView.vue","../src/components/materialSelectDialog/component/materialFileBatchUploader.vue","../src/components/materialSelectDialog/component/editAndAddOrderDialog.vue","../src/components/materialSelectDialog/index.vue","../src/index.js"],"sourcesContent":["var zhCn = {\n name: \"zh-cn\",\n el: {\n breadcrumb: {\n label: \"\\u9762\\u5305\\u5C51\"\n },\n colorpicker: {\n confirm: \"\\u786E\\u5B9A\",\n clear: \"\\u6E05\\u7A7A\",\n defaultLabel: \"\\u989C\\u8272\\u9009\\u62E9\\u5668\",\n description: \"\\u5F53\\u524D\\u989C\\u8272 {color}\\uFF0C\\u6309 Enter \\u952E\\u9009\\u62E9\\u65B0\\u989C\\u8272\",\n alphaLabel: \"\\u9009\\u62E9\\u900F\\u660E\\u5EA6\\u7684\\u503C\"\n },\n datepicker: {\n now: \"\\u6B64\\u523B\",\n today: \"\\u4ECA\\u5929\",\n cancel: \"\\u53D6\\u6D88\",\n clear: \"\\u6E05\\u7A7A\",\n confirm: \"\\u786E\\u5B9A\",\n dateTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u65E5\\u671F\",\n monthTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u6708\\u4EFD\",\n yearTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u5E74\\u4EFD\",\n selectedDate: \"\\u5DF2\\u9009\\u65E5\\u671F\",\n selectDate: \"\\u9009\\u62E9\\u65E5\\u671F\",\n selectTime: \"\\u9009\\u62E9\\u65F6\\u95F4\",\n startDate: \"\\u5F00\\u59CB\\u65E5\\u671F\",\n startTime: \"\\u5F00\\u59CB\\u65F6\\u95F4\",\n endDate: \"\\u7ED3\\u675F\\u65E5\\u671F\",\n endTime: \"\\u7ED3\\u675F\\u65F6\\u95F4\",\n prevYear: \"\\u524D\\u4E00\\u5E74\",\n nextYear: \"\\u540E\\u4E00\\u5E74\",\n prevMonth: \"\\u4E0A\\u4E2A\\u6708\",\n nextMonth: \"\\u4E0B\\u4E2A\\u6708\",\n year: \"\\u5E74\",\n month1: \"1 \\u6708\",\n month2: \"2 \\u6708\",\n month3: \"3 \\u6708\",\n month4: \"4 \\u6708\",\n month5: \"5 \\u6708\",\n month6: \"6 \\u6708\",\n month7: \"7 \\u6708\",\n month8: \"8 \\u6708\",\n month9: \"9 \\u6708\",\n month10: \"10 \\u6708\",\n month11: \"11 \\u6708\",\n month12: \"12 \\u6708\",\n weeks: {\n sun: \"\\u65E5\",\n mon: \"\\u4E00\",\n tue: \"\\u4E8C\",\n wed: \"\\u4E09\",\n thu: \"\\u56DB\",\n fri: \"\\u4E94\",\n sat: \"\\u516D\"\n },\n weeksFull: {\n sun: \"\\u661F\\u671F\\u65E5\",\n mon: \"\\u661F\\u671F\\u4E00\",\n tue: \"\\u661F\\u671F\\u4E8C\",\n wed: \"\\u661F\\u671F\\u4E09\",\n thu: \"\\u661F\\u671F\\u56DB\",\n fri: \"\\u661F\\u671F\\u4E94\",\n sat: \"\\u661F\\u671F\\u516D\"\n },\n months: {\n jan: \"\\u4E00\\u6708\",\n feb: \"\\u4E8C\\u6708\",\n mar: \"\\u4E09\\u6708\",\n apr: \"\\u56DB\\u6708\",\n may: \"\\u4E94\\u6708\",\n jun: \"\\u516D\\u6708\",\n jul: \"\\u4E03\\u6708\",\n aug: \"\\u516B\\u6708\",\n sep: \"\\u4E5D\\u6708\",\n oct: \"\\u5341\\u6708\",\n nov: \"\\u5341\\u4E00\\u6708\",\n dec: \"\\u5341\\u4E8C\\u6708\"\n }\n },\n inputNumber: {\n decrease: \"\\u51CF\\u5C11\\u6570\\u503C\",\n increase: \"\\u589E\\u52A0\\u6570\\u503C\"\n },\n select: {\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n noData: \"\\u65E0\\u6570\\u636E\",\n placeholder: \"\\u8BF7\\u9009\\u62E9\"\n },\n dropdown: {\n toggleDropdown: \"\\u5207\\u6362\\u4E0B\\u62C9\\u9009\\u9879\"\n },\n mention: {\n loading: \"\\u52A0\\u8F7D\\u4E2D\"\n },\n cascader: {\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\n placeholder: \"\\u8BF7\\u9009\\u62E9\",\n noData: \"\\u6682\\u65E0\\u6570\\u636E\"\n },\n pagination: {\n goto: \"\\u524D\\u5F80\",\n pagesize: \"\\u6761/\\u9875\",\n total: \"\\u5171 {total} \\u6761\",\n pageClassifier: \"\\u9875\",\n page: \"\\u9875\",\n prev: \"\\u4E0A\\u4E00\\u9875\",\n next: \"\\u4E0B\\u4E00\\u9875\",\n currentPage: \"\\u7B2C {pager} \\u9875\",\n prevPages: \"\\u5411\\u524D {pager} \\u9875\",\n nextPages: \"\\u5411\\u540E {pager} \\u9875\",\n deprecationWarning: \"\\u4F60\\u4F7F\\u7528\\u4E86\\u4E00\\u4E9B\\u5DF2\\u88AB\\u5E9F\\u5F03\\u7684\\u7528\\u6CD5\\uFF0C\\u8BF7\\u53C2\\u8003 el-pagination \\u7684\\u5B98\\u65B9\\u6587\\u6863\"\n },\n dialog: {\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\n },\n drawer: {\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\n },\n messagebox: {\n title: \"\\u63D0\\u793A\",\n confirm: \"\\u786E\\u5B9A\",\n cancel: \"\\u53D6\\u6D88\",\n error: \"\\u8F93\\u5165\\u7684\\u6570\\u636E\\u4E0D\\u5408\\u6CD5!\",\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\n },\n upload: {\n deleteTip: \"\\u6309 Delete \\u952E\\u53EF\\u5220\\u9664\",\n delete: \"\\u5220\\u9664\",\n preview: \"\\u67E5\\u770B\\u56FE\\u7247\",\n continue: \"\\u7EE7\\u7EED\\u4E0A\\u4F20\"\n },\n slider: {\n defaultLabel: \"\\u6ED1\\u5757\\u4ECB\\u4E8E {min} \\u81F3 {max}\",\n defaultRangeStartLabel: \"\\u9009\\u62E9\\u8D77\\u59CB\\u503C\",\n defaultRangeEndLabel: \"\\u9009\\u62E9\\u7ED3\\u675F\\u503C\"\n },\n table: {\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\",\n confirmFilter: \"\\u7B5B\\u9009\",\n resetFilter: \"\\u91CD\\u7F6E\",\n clearFilter: \"\\u5168\\u90E8\",\n sumText: \"\\u5408\\u8BA1\"\n },\n tour: {\n next: \"\\u4E0B\\u4E00\\u6B65\",\n previous: \"\\u4E0A\\u4E00\\u6B65\",\n finish: \"\\u7ED3\\u675F\\u5BFC\\u89C8\"\n },\n tree: {\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\"\n },\n transfer: {\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n noData: \"\\u65E0\\u6570\\u636E\",\n titles: [\"\\u5217\\u8868 1\", \"\\u5217\\u8868 2\"],\n filterPlaceholder: \"\\u8BF7\\u8F93\\u5165\\u641C\\u7D22\\u5185\\u5BB9\",\n noCheckedFormat: \"\\u5171 {total} \\u9879\",\n hasCheckedFormat: \"\\u5DF2\\u9009 {checked}/{total} \\u9879\"\n },\n image: {\n error: \"\\u52A0\\u8F7D\\u5931\\u8D25\"\n },\n pageHeader: {\n title: \"\\u8FD4\\u56DE\"\n },\n popconfirm: {\n confirmButtonText: \"\\u786E\\u5B9A\",\n cancelButtonText: \"\\u53D6\\u6D88\"\n },\n carousel: {\n leftArrow: \"\\u4E0A\\u4E00\\u5F20\\u5E7B\\u706F\\u7247\",\n rightArrow: \"\\u4E0B\\u4E00\\u5F20\\u5E7B\\u706F\\u7247\",\n indicator: \"\\u5E7B\\u706F\\u7247\\u5207\\u6362\\u81F3\\u7D22\\u5F15 {index}\"\n }\n }\n};\n\nexport { zhCn as default };\n//# sourceMappingURL=zh-cn.mjs.map\n","var English = {\n name: \"en\",\n el: {\n breadcrumb: {\n label: \"Breadcrumb\"\n },\n colorpicker: {\n confirm: \"OK\",\n clear: \"Clear\",\n defaultLabel: \"color picker\",\n description: \"current color is {color}. press enter to select a new color.\",\n alphaLabel: \"pick alpha value\"\n },\n datepicker: {\n now: \"Now\",\n today: \"Today\",\n cancel: \"Cancel\",\n clear: \"Clear\",\n confirm: \"OK\",\n dateTablePrompt: \"Use the arrow keys and enter to select the day of the month\",\n monthTablePrompt: \"Use the arrow keys and enter to select the month\",\n yearTablePrompt: \"Use the arrow keys and enter to select the year\",\n selectedDate: \"Selected date\",\n selectDate: \"Select date\",\n selectTime: \"Select time\",\n startDate: \"Start Date\",\n startTime: \"Start Time\",\n endDate: \"End Date\",\n endTime: \"End Time\",\n prevYear: \"Previous Year\",\n nextYear: \"Next Year\",\n prevMonth: \"Previous Month\",\n nextMonth: \"Next Month\",\n year: \"\",\n month1: \"January\",\n month2: \"February\",\n month3: \"March\",\n month4: \"April\",\n month5: \"May\",\n month6: \"June\",\n month7: \"July\",\n month8: \"August\",\n month9: \"September\",\n month10: \"October\",\n month11: \"November\",\n month12: \"December\",\n week: \"week\",\n weeks: {\n sun: \"Sun\",\n mon: \"Mon\",\n tue: \"Tue\",\n wed: \"Wed\",\n thu: \"Thu\",\n fri: \"Fri\",\n sat: \"Sat\"\n },\n weeksFull: {\n sun: \"Sunday\",\n mon: \"Monday\",\n tue: \"Tuesday\",\n wed: \"Wednesday\",\n thu: \"Thursday\",\n fri: \"Friday\",\n sat: \"Saturday\"\n },\n months: {\n jan: \"Jan\",\n feb: \"Feb\",\n mar: \"Mar\",\n apr: \"Apr\",\n may: \"May\",\n jun: \"Jun\",\n jul: \"Jul\",\n aug: \"Aug\",\n sep: \"Sep\",\n oct: \"Oct\",\n nov: \"Nov\",\n dec: \"Dec\"\n }\n },\n inputNumber: {\n decrease: \"decrease number\",\n increase: \"increase number\"\n },\n select: {\n loading: \"Loading\",\n noMatch: \"No matching data\",\n noData: \"No data\",\n placeholder: \"Select\"\n },\n mention: {\n loading: \"Loading\"\n },\n dropdown: {\n toggleDropdown: \"Toggle Dropdown\"\n },\n cascader: {\n noMatch: \"No matching data\",\n loading: \"Loading\",\n placeholder: \"Select\",\n noData: \"No data\"\n },\n pagination: {\n goto: \"Go to\",\n pagesize: \"/page\",\n total: \"Total {total}\",\n pageClassifier: \"\",\n page: \"Page\",\n prev: \"Go to previous page\",\n next: \"Go to next page\",\n currentPage: \"page {pager}\",\n prevPages: \"Previous {pager} pages\",\n nextPages: \"Next {pager} pages\",\n deprecationWarning: \"Deprecated usages detected, please refer to the el-pagination documentation for more details\"\n },\n dialog: {\n close: \"Close this dialog\"\n },\n drawer: {\n close: \"Close this dialog\"\n },\n messagebox: {\n title: \"Message\",\n confirm: \"OK\",\n cancel: \"Cancel\",\n error: \"Illegal input\",\n close: \"Close this dialog\"\n },\n upload: {\n deleteTip: \"press delete to remove\",\n delete: \"Delete\",\n preview: \"Preview\",\n continue: \"Continue\"\n },\n slider: {\n defaultLabel: \"slider between {min} and {max}\",\n defaultRangeStartLabel: \"pick start value\",\n defaultRangeEndLabel: \"pick end value\"\n },\n table: {\n emptyText: \"No Data\",\n confirmFilter: \"Confirm\",\n resetFilter: \"Reset\",\n clearFilter: \"All\",\n sumText: \"Sum\"\n },\n tour: {\n next: \"Next\",\n previous: \"Previous\",\n finish: \"Finish\"\n },\n tree: {\n emptyText: \"No Data\"\n },\n transfer: {\n noMatch: \"No matching data\",\n noData: \"No data\",\n titles: [\"List 1\", \"List 2\"],\n filterPlaceholder: \"Enter keyword\",\n noCheckedFormat: \"{total} items\",\n hasCheckedFormat: \"{checked}/{total} checked\"\n },\n image: {\n error: \"FAILED\"\n },\n pageHeader: {\n title: \"Back\"\n },\n popconfirm: {\n confirmButtonText: \"Yes\",\n cancelButtonText: \"No\"\n },\n carousel: {\n leftArrow: \"Carousel arrow left\",\n rightArrow: \"Carousel arrow right\",\n indicator: \"Carousel switch to index {index}\"\n }\n }\n};\n\nexport { English as default };\n//# sourceMappingURL=en.mjs.map\n","var zhTw = {\n name: \"zh-tw\",\n el: {\n breadcrumb: {\n label: \"\\u9762\\u5305\\u5C51\"\n },\n colorpicker: {\n confirm: \"\\u78BA\\u8A8D\",\n clear: \"\\u6E05\\u7A7A\",\n defaultLabel: \"\\u8272\\u5F69\\u9078\\u64C7\\u5668\",\n description: \"\\u76EE\\u524D\\u8272\\u5F69\\u70BA {color}\\u3002\\u6309\\u4E00\\u4E0B Enter \\u4EE5\\u9078\\u64C7\\u65B0\\u8272\\u5F69\\u3002\",\n alphaLabel: \"\\u9078\\u64C7\\u900F\\u660E\\u5EA6\\u7684\\u503C\"\n },\n datepicker: {\n now: \"\\u73FE\\u5728\",\n today: \"\\u4ECA\\u5929\",\n cancel: \"\\u53D6\\u6D88\",\n clear: \"\\u6E05\\u7A7A\",\n confirm: \"\\u78BA\\u8A8D\",\n dateTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u9375\\u8207 Enter \\u9375\\u4EE5\\u9078\\u64C7\\u65E5\\u671F\",\n monthTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u9375\\u8207 Enter \\u9375\\u4EE5\\u9078\\u64C7\\u6708\\u4EFD\",\n yearTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u9375\\u8207 Enter \\u9375\\u4EE5\\u9078\\u64C7\\u5E74\\u4EFD\",\n selectedDate: \"\\u5DF2\\u9078\\u65E5\\u671F\",\n selectDate: \"\\u9078\\u64C7\\u65E5\\u671F\",\n selectTime: \"\\u9078\\u64C7\\u6642\\u9593\",\n startDate: \"\\u958B\\u59CB\\u65E5\\u671F\",\n startTime: \"\\u958B\\u59CB\\u6642\\u9593\",\n endDate: \"\\u7D50\\u675F\\u65E5\\u671F\",\n endTime: \"\\u7D50\\u675F\\u6642\\u9593\",\n prevYear: \"\\u524D\\u4E00\\u5E74\",\n nextYear: \"\\u5F8C\\u4E00\\u5E74\",\n prevMonth: \"\\u4E0A\\u500B\\u6708\",\n nextMonth: \"\\u4E0B\\u500B\\u6708\",\n year: \"\\u5E74\",\n month1: \"1 \\u6708\",\n month2: \"2 \\u6708\",\n month3: \"3 \\u6708\",\n month4: \"4 \\u6708\",\n month5: \"5 \\u6708\",\n month6: \"6 \\u6708\",\n month7: \"7 \\u6708\",\n month8: \"8 \\u6708\",\n month9: \"9 \\u6708\",\n month10: \"10 \\u6708\",\n month11: \"11 \\u6708\",\n month12: \"12 \\u6708\",\n weeks: {\n sun: \"\\u65E5\",\n mon: \"\\u4E00\",\n tue: \"\\u4E8C\",\n wed: \"\\u4E09\",\n thu: \"\\u56DB\",\n fri: \"\\u4E94\",\n sat: \"\\u516D\"\n },\n weeksFull: {\n sun: \"\\u661F\\u671F\\u65E5\",\n mon: \"\\u661F\\u671F\\u4E00\",\n tue: \"\\u661F\\u671F\\u4E8C\",\n wed: \"\\u661F\\u671F\\u4E09\",\n thu: \"\\u661F\\u671F\\u56DB\",\n fri: \"\\u661F\\u671F\\u4E94\",\n sat: \"\\u661F\\u671F\\u516D\"\n },\n months: {\n jan: \"\\u4E00\\u6708\",\n feb: \"\\u4E8C\\u6708\",\n mar: \"\\u4E09\\u6708\",\n apr: \"\\u56DB\\u6708\",\n may: \"\\u4E94\\u6708\",\n jun: \"\\u516D\\u6708\",\n jul: \"\\u4E03\\u6708\",\n aug: \"\\u516B\\u6708\",\n sep: \"\\u4E5D\\u6708\",\n oct: \"\\u5341\\u6708\",\n nov: \"\\u5341\\u4E00\\u6708\",\n dec: \"\\u5341\\u4E8C\\u6708\"\n }\n },\n inputNumber: {\n decrease: \"\\u6E1B\\u5C11\\u6578\\u503C\",\n increase: \"\\u589E\\u52A0\\u6578\\u503C\"\n },\n select: {\n loading: \"\\u8F09\\u5165\\u4E2D\",\n noMatch: \"\\u7121\\u76F8\\u7B26\\u8CC7\\u6599\",\n noData: \"\\u7121\\u8CC7\\u6599\",\n placeholder: \"\\u8ACB\\u9078\\u64C7\"\n },\n mention: {\n loading: \"\\u8F09\\u5165\\u4E2D\"\n },\n dropdown: {\n toggleDropdown: \"\\u5207\\u63DB\\u4E0B\\u62C9\\u9078\\u55AE\"\n },\n cascader: {\n noMatch: \"\\u7121\\u76F8\\u7B26\\u8CC7\\u6599\",\n loading: \"\\u8F09\\u5165\\u4E2D\",\n placeholder: \"\\u8ACB\\u9078\\u64C7\",\n noData: \"\\u7121\\u8CC7\\u6599\"\n },\n pagination: {\n goto: \"\\u524D\\u5F80\",\n pagesize: \"\\u9805/\\u9801\",\n total: \"\\u5171 {total} \\u9805\",\n pageClassifier: \"\\u9801\",\n page: \"\\u9801\",\n prev: \"\\u4E0A\\u4E00\\u9801\",\n next: \"\\u4E0B\\u4E00\\u9801\",\n currentPage: \"\\u7B2C {pager} \\u9801\",\n prevPages: \"\\u5411\\u524D {pager} \\u9801\",\n nextPages: \"\\u5411\\u5F8C {pager} \\u9801\",\n deprecationWarning: \"\\u5075\\u6E2C\\u5230\\u5DF2\\u904E\\u6642\\u7684\\u4F7F\\u7528\\u65B9\\u5F0F\\uFF0C\\u8ACB\\u53C3\\u95B1 el-pagination \\u8AAA\\u660E\\u6587\\u4EF6\\u4EE5\\u4E86\\u89E3\\u66F4\\u591A\\u8CC7\\u8A0A\"\n },\n dialog: {\n close: \"\\u95DC\\u9589\\u6B64\\u5C0D\\u8A71\\u6846\"\n },\n drawer: {\n close: \"\\u95DC\\u9589\\u6B64\\u5C0D\\u8A71\\u6846\"\n },\n messagebox: {\n title: \"\\u63D0\\u793A\",\n confirm: \"\\u78BA\\u5B9A\",\n cancel: \"\\u53D6\\u6D88\",\n error: \"\\u8F38\\u5165\\u7684\\u8CC7\\u6599\\u4E0D\\u7B26\\u5408\\u898F\\u5B9A!\",\n close: \"\\u95DC\\u9589\\u6B64\\u5C0D\\u8A71\\u6846\"\n },\n upload: {\n deleteTip: \"\\u6309 Delete \\u9375\\u4EE5\\u522A\\u9664\",\n delete: \"\\u522A\\u9664\",\n preview: \"\\u67E5\\u770B\\u5716\\u7247\",\n continue: \"\\u7E7C\\u7E8C\\u4E0A\\u50B3\"\n },\n slider: {\n defaultLabel: \"\\u6ED1\\u687F\\u4ECB\\u65BC {min} \\u81F3 {max}\",\n defaultRangeStartLabel: \"\\u9078\\u64C7\\u8D77\\u59CB\\u503C\",\n defaultRangeEndLabel: \"\\u9078\\u64C7\\u7D50\\u675F\\u503C\"\n },\n table: {\n emptyText: \"\\u66AB\\u7121\\u8CC7\\u6599\",\n confirmFilter: \"\\u7BE9\\u9078\",\n resetFilter: \"\\u91CD\\u7F6E\",\n clearFilter: \"\\u5168\\u90E8\",\n sumText: \"\\u5408\\u8A08\"\n },\n tour: {\n next: \"\\u4E0B\\u4E00\\u6B65\",\n previous: \"\\u4E0A\\u4E00\\u6B65\",\n finish: \"\\u7D50\\u675F\\u5C0E\\u89BD\"\n },\n tree: {\n emptyText: \"\\u66AB\\u7121\\u8CC7\\u6599\"\n },\n transfer: {\n noMatch: \"\\u7121\\u76F8\\u7B26\\u8CC7\\u6599\",\n noData: \"\\u7121\\u8CC7\\u6599\",\n titles: [\"\\u5217\\u8868 1\", \"\\u5217\\u8868 2\"],\n filterPlaceholder: \"\\u8ACB\\u8F38\\u5165\\u641C\\u5C0B\\u5167\\u5BB9\",\n noCheckedFormat: \"\\u5171 {total} \\u9805\",\n hasCheckedFormat: \"\\u5DF2\\u9078 {checked}/{total} \\u9805\"\n },\n image: {\n error: \"\\u8F09\\u5165\\u5931\\u6557\"\n },\n pageHeader: {\n title: \"\\u8FD4\\u56DE\"\n },\n popconfirm: {\n confirmButtonText: \"\\u78BA\\u8A8D\",\n cancelButtonText: \"\\u53D6\\u6D88\"\n },\n carousel: {\n leftArrow: \"\\u4E0A\\u4E00\\u5F35\\u6295\\u5F71\\u7247\",\n rightArrow: \"\\u4E0B\\u4E00\\u5F35\\u6295\\u5F71\\u7247\",\n indicator: \"\\u6295\\u5F71\\u7247\\u5207\\u63DB\\u81F3\\u7D22\\u5F15 {index}\"\n }\n }\n};\n\nexport { zhTw as default };\n//# sourceMappingURL=zh-tw.mjs.map\n","export default {\n 'zh-tw': {\n System_Error: '系統錯誤',\n Service_Unavailable: '系統服務暫停',\n Remote_Service_Error: '遠端連線錯誤',\n IP_Limit: 'IP限制不能請求該資源',\n Illegal_Request: '非法請求',\n Token_Missing: '缺少source (token) 參數',\n Unsupport_Mediatype: '不支援的MediaType',\n Param_Error: '參數錯誤,您回傳的資料內容或代碼數量不符規範',\n System_Busy: '系統過載',\n Job_Expired: '執行超時',\n RPC_Error: 'RPC錯誤',\n Partial_Data_Error: '部分資料錯誤',\n Time_Out: '連線逾時',\n Mail_Failed: '寄信功能異常',\n Decode_Failed: '解密功能異常',\n WeChat_GetOpenID_Error: '微信取OpenID功能異常',\n SDK_Unsupport_Function: 'SDK不支援此功能',\n API_Internet_Error: '連線其他API失敗',\n SMS_Failed: '簡訊發送異常,請檢查國碼及手機號碼是否輸入正確',\n Insert_Problem_Type_Wrong: '插入錯誤之參數型態不正確',\n Insert_Problem_KeyColumn_Exist: '已存在相同主鍵欄位',\n Update_Problem_Type_Wrong: '更新錯誤之參數型態不正確',\n Update_Problem_KeyColumn_Miss: '缺少主鍵',\n Select_Problem_No_Data: '查無資料',\n Update_Error: '更新錯誤',\n Insert_Error: '插入失敗',\n Upsert_Error: '更新插入失敗',\n Delete_Error: '刪除失敗',\n DBRelated_Error: '資料庫相關系統錯誤',\n Data_Duplicate: '資料重複',\n Password_Wrong: '密碼錯誤',\n ProcessOrder_Duplicate: '工序子工單重複',\n No_Right_to_Access: '權限不足',\n UserID_UnExist: '帳號不存在',\n Account_Quit: '帳號停用',\n Verify_Fail: '驗證錯誤',\n ID_SameAs_Password: '帳號等同於密碼',\n Auth_Error: '帳號認證錯誤',\n Machine_Number_Limit: '機台授權數量限制',\n Token_Expired: '權證時效過期,請重新整理或重新提交表單',\n Password_Need_Change: '密碼必須更改(忘記密碼時)',\n Cookie_Error: 'Cookie驗證錯誤,您的登入時限可能過期,請重新登入',\n WeChat_First_Login: '微信首次登入',\n Token_Verify_Fail: 'Token驗證失敗',\n Option_Right_Invalid: '選配功能權限不足',\n No_Right_to_Access_CNC: '對控制器權限不足',\n Mail_Verify_Fail: '信箱尚未驗證',\n No_Right_to_Access_Equipment: '對其他設備權限不足',\n Equipment_Name_Duplicate: '其他設備名稱重複',\n Software_Serial_Number_Valid: '軟體序號非法,直聯網用之序號不得拿來使用SMB軟體序號相關 API',\n Input_Type_Wrong: '參數型態不正確',\n Input_Size_Exceeded: '輸入參數過多',\n File_Not_Exist: '檔案不存在',\n File_Using_Conflict: '檔案使用衝突',\n File_Not_ExistInRequest: '檔案不存在於參數中',\n File_Upload_Number_Limit: '檔案上傳數量問題',\n Oss_Upload_Fail: '上傳到OSS失敗',\n File_Size_Exceeded: '單一檔案大小超過上限',\n Folder_Size_Exceeded: '單一資料夾檔案大小超過上限',\n File_Extension_Invalid: '非法的副檔名',\n File_Delete_Fail: '刪除檔案失敗',\n File_Related_Error: '檔案相關錯誤',\n File_InUse_Error: '檔案正在使用中',\n Folder_Not_Exist: '資料夾不存在',\n Folder_InUse_Error: '資料夾正在使用中',\n Folder_Error: '通用資料夾錯誤訊息',\n Partial_File_Fail: '部分檔案失敗',\n OSS_Error: 'OSS通用錯誤訊息',\n Connect_Broker_Failed: '連線Broker失敗',\n Subscribe_Topic_Failed: '訂閱topic失敗',\n Publish_Topic_Failed: '發布topic失敗',\n Duplicate_Subscribe_Topic: '重複訂閱topic',\n Not_Subscribe_Topic_Yet: '尚未訂閱此Topic',\n Unsubscribe_Topic_Failed: '取消訂閱topic失敗',\n DisConnect_Broker_Failed: '斷線Broker失敗',\n CNC_MQTT_Error: '通用控制器MQTT相關錯誤',\n CNC_Offline: '控制器離線',\n CNC_Busy: '控制器忙碌中',\n CNC_Busy_MQTT: '控制器因為MQTT指令忙碌中',\n SMB_MQTT_Error: '通用 SMB MQTT 相關錯誤',\n SMB_Offline: 'SMB離線',\n SMB_Busy: 'SMB忙碌中',\n SMB_Busy_MQTT: 'SMB 因為MQTT忙碌中',\n Client_Already_Connect: '已經有相同資訊的Client連線中',\n CNC_Error: '控制器通用錯誤碼',\n CNC_Not_Regist: '控制器沒有註冊過',\n CNC_Already_Decode: '該控制器對應的檢查碼已經解密成功了',\n CNC_Already_Bind_SynFactory: '該控制器已經被註冊綁定給其他終端使用者',\n CNC_Name_Duplicate: '終端使用者的控制器名稱重複',\n CNC_Connection_Full: '終端使用者的連線數量已達上限',\n CNC_Not_Binding: '控制器並沒有被任何終端綁定',\n CNC_Disk_Not_Enough: '控制器磁碟未足夠',\n CNC_Dispatch_Type: '控制器派送類型問題(例如:參數不對)',\n CNC_Busy_FileRelated: '控制器忙碌處理檔案相關事宜',\n Robot_CNC_Direct_Dispatch_Deny: '機器人控制器不允許接收派工',\n CNC_Busy_LogBackup: '控制器忙碌處理Log備份相關事宜',\n CNC_Disconnected: '控制器離線中,無法交握',\n CNC_Invalid_BindingType: '控制器綁定類型不適用,如部分功能只有直聯網機台能使用',\n CNC_Invalid_Brand: '控制器廠牌不適用,如部分功能只有新代廠牌能使用',\n CNC_Busy_ReportWorkRelated: '控制器忙碌無法修改報工方式',\n CNC_Check_Connection: '控制器不合法或連線問題',\n Decode_Error: '序號或檢查代碼輸入錯誤',\n Decode_Illegal: '此檢查代碼或解密行為異常,請聯繫新代進一步確認',\n Subaccount_Auth_Illegal: '您沒有權限,請洽您的機械廠管理者',\n VerifyCode_Illegal: '檢查代碼異常',\n SN_Not_Found: '資料庫查無此筆序號',\n Decode_DataBase_Action_Error: '解密資料庫操作錯誤,請聯繫新代進一步確認',\n Remote_Decode_Error: '遠距解密失敗',\n CNCType_Model_Not_Found: '查無控制器機型或控制器類別',\n SubAccount_Multi_Wechat_Bind: '子帳號存在多組微信綁定',\n MotherAccount_Multi_Wechat_Bind: '母帳號存在多組微信綁定',\n Production_Plan_Error: '生產計劃管理通用錯誤碼',\n Production_Order_Duplicate: '工單重複',\n Order_Duplicate: '訂單重複或訂單資料不一致',\n InValid_WorkOrderID: '工令ID 不合法 (不屬於該使用者或者不存在)',\n InValid_CNC_ID: '不合法的控制器ID (可能不屬於當前使用者 或者根本不存在)',\n InValid_ExceptedStartTime_Parameter: '工單起始時間有誤',\n Out_Of_Number: '取號碼系統發現 規格內可用號碼用鑿',\n Production_Order_Not_Same_Order: '工單已存在,對應到不同訂單號錯誤',\n Work_Order_Inconsistency: '子工單已存在,機台ID、工序相同 但其他欄位(如需求工件數)不同',\n PLM_Data_Inconsistent: '與工藝包資料不一致',\n Work_Order_Comes_From_OT: '子工單來源是OT的錯誤碼',\n InValid_ProductionOrderID: '工單ID不合法(不屬於該使用者或不存在)',\n PLM_CraftPath_Info_Inconsistent: '與工藝包的工藝路徑資料不符',\n PLM_ProdctionProcess_Info_Inconsistent: '與工藝包的工序資料不符',\n PLM_Machine_Info_Inconsistent: '與工藝包的機台資料不符',\n InValid_Shift_ID: '不合法的班別ID',\n InValid_Emp_ID: '不合法的職員ID',\n Part_Serial_Number_In_Use: '序號已經被使用',\n Part_Serial_Number_Process_Lock: '已有人正在取序號',\n Serial_Number_Count_Setting_Conflict: '取號數量和設定不符',\n Insufficient_Number: '剩餘號碼數量不足',\n Work_Order_Status_Error: '子工單狀態有誤',\n Part_Serial_Number_Length_Limit: '序號長度過長',\n Duplicate_SN_List: '清單號碼內序號重複',\n Work_Order_Duplicate_Start: '子工單在一分鐘內重複開工',\n Work_Order_Start_Fail: '子工單開工失敗',\n Work_Order_Suspend_Fail: '子工單暫停加工失敗',\n Work_Order_Close_Fail_But_Suspend_Success: '子工單關閉失敗,但是暫停加工成功',\n Work_Order_Part_Count_Not_Fulfill: '子工單需求數尚未完成,無法完工',\n Work_Order_Start_Switch_Fail: '子工單開工時換單失敗',\n Duplicate_Production_Order_List: '清單內工單重複',\n Work_order_Can_not_Direct_Start_work: '子工單無法直接開工',\n Unbind_Part_Serial_Number_When_Start_work: '加工中的工單不能執行解綁',\n InValid_Part_Serial_Number: '不合法的序號',\n Machine_Send_File_When_Start_Work: '機台正在開工傳檔中,無法執行開工',\n Serial_Number_Bind_Different_Part_Number: '序號綁定到不同料號',\n Need_Part_Serial_Number_Export_Time: '已有出站時間的序號,更新後需要有序號的出站時間',\n Shift_Error: '班別錯誤',\n Employee_Error: '人員錯誤',\n Shift_Pattern_Not_Exist: '班制模式不存在',\n Same_Pattern_System_Exist: '已存在相同班制模式的實際班制',\n Pattern_Shift_Number_Conflict: '欲新增的班別數量與班制模式不符',\n Shift_Time_Overlap: '班別時間重疊',\n Shift_Time_Sum_Exceed: '班制時間區間超過上限(一天)',\n Shift_Start_End_Time_Conflict: '班別開始時間大於等於結束時間',\n Shift_System_Not_Exist: '實際班制不存在',\n Shift_ID_Shift_System_Conflict: '該班別不屬於此實際班制',\n Duplicate_Dept: '部門名稱重複',\n Success: '成功',\n Work_Report_Review_Error: '審核失敗',\n Wrong_Work_Quantity: '報工數量數量錯誤,數量被卡控',\n Field_Count_Max: '自定義字段數量過多',\n Field_Name_Repeat: '自定義字段名稱重復',\n Break_Time_Out_Of_Range: '有休息時間超出該輪班區間',\n FileDispatch_Error: '檔案派送通用錯誤碼',\n TakeEvent_ID_Error: '取事件代碼錯誤',\n Service_Original_Connect_Error: '串接原生SynFactory API錯誤',\n IsProxyCheck_Error: '確認是否為代理時發生錯誤',\n IsCNCIdentityValid_Check_Error: '確認CNC認證資訊是否正確時發生錯誤',\n CanSNAccessEquipment_Check_Error: '確認軟體序號是否可使用設備時發生錯誤',\n SNCanNotAccessEquipment: '該序號不能使用該設備',\n GetTriggerHistory_Error: '呼叫取派送記錄API時發生錯誤',\n Duplicate_Setting_Data: '預設路徑設定重複',\n Setting_Number_Limit_Exceed: '預設路徑設定 數量 達到設定上限',\n None_Data_Delete: '沒有資料被刪除',\n Material_Error: '物料通用錯誤碼',\n MaterialPartNumber_Invalid: '物料編號不合法',\n MaterialPartNumber_Duplicated: '物料編號重複',\n MaterialType_Duplicated: '物料類型重複',\n MaterialPartNumber_Not_Found: '物料編號不存在',\n MaterialBOM_Exist: '物料BOM表已存在',\n MaterialBOM_Child_Relation_Invalid: '物料BOM表子項非法',\n MaterialBOM_RelationShip_Invalid: '不能存在其他BOM表有父子料相反的關係',\n MaterialBOM_Self_Contained: '父項物料與子項物料不能相同',\n MaterialBOM_Not_Exist: '物料BOM表不存在',\n MaterialBOM_Bulk_Insert_Exceed: '超出批量匯入數量',\n MaterialBOM_Version_Not_Exist: '料號BOM版本不存在',\n Material_Sync_To_PDM_Fail: '料號同步到PDM失敗',\n Material_Do_Not_Have_BatchNumber_Setting: '料號沒有批次號設定',\n MaterialPartNumber_Status_Disable: '料號狀態停用',\n Response_Fomat_Error: '格式不正確',\n Equipmnet_Craft_Bind_Error: '設備工藝綁定錯誤',\n Template_Format_Error: '刀具模板格式錯誤',\n Craft_NO_ToolLIfeTemplate: '該設備對應工序無刀具壽命資料',\n Tool_Axis_Error: '系統(軸群)錯誤',\n Specification_Update_Error: '規範更新錯誤',\n Equip_Monitor_Setting_Name_Existed: '監控設定名稱已存在',\n Equip_In_Monitor_Setting_Has_Existed_In_Same_Indicator_And_Immediate_Noti: '設備在該監控指標下已設定過即時通知',\n Equip_ID_Not_Exist: '設備ID不存在',\n Equip_Monitor_Setting_ID_Not_Existed: '監控設定ID不存在',\n CVUS_Error: '通用客製變數系統錯誤',\n CVUS_Setting_Not_Exist: '客製變數設定不存在',\n CVUS_Parameter_Validation_Fail: 'CVUS通用參數驗證失敗',\n CVUS_SETTING_COUNT_LIMIT: '達到CVUS 設定數量上限',\n CVUS_VARTYPE_LENGTH_LIMIT: 'vartype 參數超過長度限制',\n CVUS_Map_Diff_Set_Result: '不同設定結果',\n CVUS_Map_Error_Busy: '設備忙碌,無法設定',\n CVUS_Map_When_Get_Setting: '當取得設定時發生錯誤',\n CVUS_Map_Unsup_Var: '不支援的變數',\n CVUS_Map_Var_Addr: '不支援的變數指向',\n CVUS_Map_Unsup_Var_Tp: '不支援的變數類型',\n CVUS_Map_Unsup_Freq: '不支援的上傳頻率',\n CVUS_EventID_Not_Exist: '該派送事件不存在',\n CVM_Parameter_Validation_Fail: '客製變數修改參數驗證失敗',\n CVM_SETTING_COUNT_LIMIT: '達到CVM設定數量上限',\n CVM_VARTYPE_LENGTH_LIMIT: 'CVM vartype 參數超過長度限制',\n CVM_Take_Event_ID: 'CVM 服務取得派送ID錯誤',\n CVM_Different_Result: 'CVM 有不同修改結果',\n CVM_Busy_Var_Modifying: 'CVM執行失敗,忙碌中,正在變更變數數值',\n CVM_Error_DataType_Trans_Error: 'CVM執行失敗,資料型別轉型失敗',\n CVM_Error_Unsupport_VarType: 'CVM執行失敗,不支援的變數類別',\n CVM_Error_Wrong_Var_Address: 'CVM執行失敗,變數位址不合法',\n CVM_Error_Unsupport_DataType: 'CVM執行失敗,不支援的型別代碼',\n CVUS_Error_GroupSub_NotExist: '該群組相關資料不存在,有可能是設備ID不存在,有可能是該設備名稱或者ID不存在',\n CVUS_Equip_Not_Support: '設備不支援群組訂閱功能',\n CVUS_Error_DataType_Inconsistent: '資料型態不一致',\n CVUS_Error_Unsupport_DataType: '不支援的資料型態',\n CVUS_PLC_Setting_Count_Limit: 'PLC設備達數量設定上限',\n Data_Already_Exists: '數據已存在',\n Data_Count_Few: '資料筆數過少',\n APP_Service_Common: 'APP服務通用錯誤',\n APP_Not_Exist: 'APP不存在',\n APP_Duplicate_MQ_Connection: 'APP已經連線到MQTT',\n Part_Serial_Number_Error: '料件序號通用錯誤',\n Part_Serial_Number_Already_Bind_Part_Number: '料件序號已經綁在料號上了',\n Part_Serial_Number_Not_Found: '找不到該料件序號',\n Part_Serial_Number_Do_Not_Bind_Part_Number: '料件序號沒有綁定的料號',\n Operation_Uuid_Already_Bind_Other_Part_Number: '該操作記錄已經綁定在其他料號上了',\n Custom_Parameter_Already_Used_By_Part_Serial_Number_Setting: '序號自定義參數已經被序號設定所使用',\n Serial_Number_Rule_Setting_Name_Duplicate: '序號規則設定的名稱重複',\n Serial_Number_Interval_Setting_Error: '流水號區間設定錯誤',\n Machine_Type_Exit_Error: '機台類別已存在',\n Cnc_Already_Bound: '控制器已绑定',\n Batch_Number_Error: '批次號通用錯誤',\n Batch_Number_Setting_Name_Duplicate: '批次號設定名稱重複',\n Batch_Number_Setting_ID_Not_Exist: '批次號設定ID不存在',\n Batch_Number_Setting_Not_Enable: '批次號設定未啟用',\n Batch_Number_Insufficient: '批次號數量不足',\n Batch_Number_Already_Bind_Other_Production_Order: '批次號已經綁定在其他工單上',\n Illegal_Batch_Number: '不合法的批次號',\n Batch_Number_Setting_Exceed_Max_Digit: '批次號設定超過最大位數',\n Message_Push_Error: '推播服務通用錯誤',\n Message_Push_Server_Not_Initialized: '推播服務尚未與伺服器做初始化連線設定',\n Message_Push_Mobile_Message_Excced: '推播服務手機提醒訊息達到上限',\n Message_Push_Server_Connect_Fail: '推播服務與推播伺服器連線失敗',\n Message_Push_Emp_Not_Bind_APP: '推播服務要發送訊息的人員尚未綁定APP',\n Message_Push_Message_Setting_Not_Initialized: '推播服務手機提醒訊息設定尚未初始化開通',\n Tag_Over_Count: '超出工單可綁定標簽數量',\n Data_Not_Exists: '數據不存在',\n Encoding_Exceeds_Upper_Limit: '編碼會超過系統設定上限,請至工廠建模中的編號規則設定',\n No_Beat_Point: '請先至工廠建模_產品工藝設定該路徑節拍點',\n Last_Process: '最後一道工序,不能删除',\n MaterialUnit_Not_Exist: '單位不存在',\n Production_Order_Not_In_NotDispatch: '非未派工的工單不可刪除',\n Production_Order_Has_Source_Document_Association: '生產工單存在源單關聯',\n Production_Order_Tag_Number_Released: '生產工單已發行標簽',\n Out_Storage_Not_Exit: '出庫倉庫不存在',\n Out_Stock_Space_Not_Exit: '出庫倉位不存在',\n In_Storage_Not_Exit: '入库仓库不存在',\n In_Stock_Space_Not_Exit: '入库仓位不存在',\n Def_In_Storage_Not_Exit: '不良入库仓库不存在',\n Def_In_Stock_Space_Not_Exit: '不良入庫倉庫不存在',\n Purchase_In_Storage_Not_Exit: '采购入库仓库不存在',\n Purchase_In_Stock_Space_Not_Exit: '採購入庫倉位不存在',\n },\n 'zh-cn': {\n System_Error: '系统错误',\n Service_Unavailable: '系统服务暂停',\n Remote_Service_Error: '远端连线错误',\n ProcessOrder_Duplicate: '工序子工单重复',\n IP_Limit: 'IP限制不能请求该资源',\n Illegal_Request: '非法请求',\n Token_Missing: '缺少source (token) 参数',\n Unsupport_Mediatype: '不支援的MediaType',\n Param_Error: '参数错误,您回传的资料内容或代码数量不符规范',\n System_Busy: '系统过载',\n Job_Expired: '执行超时',\n RPC_Error: 'RPC错误',\n Partial_Data_Error: '部分资料错误',\n Time_Out: '连线逾时',\n Mail_Failed: '寄信功能异常',\n Decode_Failed: '解密功能异常',\n WeChat_GetOpenID_Error: '微信取OpenID功能异常',\n SDK_Unsupport_Function: 'SDK不支援此功能',\n API_Internet_Error: '连线其他API失败',\n SMS_Failed: '简讯发送异常,请检查国码及手机号码是否输入正确',\n Insert_Problem_Type_Wrong: '插入错误之参数型态不正确',\n Insert_Problem_KeyColumn_Exist: '已存在相同主键栏位',\n Update_Problem_Type_Wrong: '更新错误之参数型态不正确',\n Update_Problem_KeyColumn_Miss: '缺少主键',\n Select_Problem_No_Data: '查无资料',\n Update_Error: '更新错误',\n Insert_Error: '插入失败',\n Upsert_Error: '更新插入失败',\n Delete_Error: '删除失败',\n DBRelated_Error: '资料库相关系统错误',\n Data_Duplicate: '资料重复',\n Password_Wrong: '密码错误',\n No_Right_to_Access: '权限不足',\n UserID_UnExist: '帐号不存在',\n Account_Quit: '帐号停用',\n Verify_Fail: '验证错误',\n ID_SameAs_Password: '帐号等同于密码',\n Auth_Error: '帐号认证错误',\n Machine_Number_Limit: '机台授权数量限制',\n Token_Expired: '权证时效过期,请重新整理或重新提交表单',\n Password_Need_Change: '密码必须更改(忘记密码时)',\n Cookie_Error: 'Cookie验证错误,您的登入时限可能过期,请重新登入',\n WeChat_First_Login: '微信首次登入',\n Token_Verify_Fail: 'Token验证失败',\n Option_Right_Invalid: '选配功能权限不足',\n No_Right_to_Access_CNC: '对控制器权限不足',\n Mail_Verify_Fail: '信箱尚未验证',\n No_Right_to_Access_Equipment: '对其他设备权限不足',\n Equipment_Name_Duplicate: '其他设备名称重复',\n Software_Serial_Number_Valid: '软体序号非法,直联网用之序号不得拿来使用SMB软体序号相关 API',\n Input_Type_Wrong: '参数型态不正确',\n Input_Size_Exceeded: '输入参数过多',\n File_Not_Exist: '档案不存在',\n File_Using_Conflict: '档案使用冲突',\n File_Not_ExistInRequest: '档案不存在于参数中',\n File_Upload_Number_Limit: '档案上传数量问题',\n Oss_Upload_Fail: '上传到OSS失败',\n File_Size_Exceeded: '单一档案大小超过上限',\n Folder_Size_Exceeded: '单一资料夹档案大小超过上限',\n File_Extension_Invalid: '非法的副档名',\n File_Delete_Fail: '删除档案失败',\n File_Related_Error: '档案相关错误',\n File_InUse_Error: '档案正在使用中',\n Folder_Not_Exist: '资料夹不存在',\n Folder_InUse_Error: '资料夹正在使用中',\n Folder_Error: '通用资料夹错误讯息',\n Partial_File_Fail: '部分档案失败',\n OSS_Error: 'OSS通用错误讯息',\n Connect_Broker_Failed: '连线Broker失败',\n Subscribe_Topic_Failed: '订阅topic失败',\n Publish_Topic_Failed: '发布topic失败',\n Duplicate_Subscribe_Topic: '重复订阅topic',\n Not_Subscribe_Topic_Yet: '尚未订阅此Topic',\n Unsubscribe_Topic_Failed: '取消订阅topic失败',\n DisConnect_Broker_Failed: '断线Broker失败',\n CNC_MQTT_Error: '通用控制器MQTT相关错误',\n CNC_Offline: '控制器离线',\n CNC_Busy: '控制器忙碌中',\n CNC_Busy_MQTT: '控制器因为MQTT指令忙碌中',\n SMB_MQTT_Error: '通用 SMB MQTT 相关错误',\n SMB_Offline: 'SMB离线',\n SMB_Busy: 'SMB忙碌中',\n SMB_Busy_MQTT: 'SMB 因为MQTT忙碌中',\n Client_Already_Connect: '已经有相同资讯的Client连线中',\n CNC_Error: '控制器通用错误码',\n CNC_Not_Regist: '控制器没有注册过',\n CNC_Already_Decode: '该控制器对应的检查码已经解密成功了',\n CNC_Already_Bind_SynFactory: '该控制器已经被注册绑定给其他终端使用者',\n CNC_Name_Duplicate: '终端使用者的控制器名称重复',\n CNC_Connection_Full: '终端使用者的连线数量已达上限',\n CNC_Not_Binding: '控制器并没有被任何终端绑定',\n CNC_Disk_Not_Enough: '控制器磁碟未足够',\n CNC_Dispatch_Type: '控制器派送类型问题(例如:参数不对)',\n CNC_Busy_FileRelated: '控制器忙碌处理档案相关事宜',\n Robot_CNC_Direct_Dispatch_Deny: '机器人控制器不允许接收派工',\n CNC_Busy_LogBackup: '控制器忙碌处理Log备份相关事宜',\n CNC_Disconnected: '控制器离线中,无法交握',\n CNC_Invalid_BindingType: '控制器绑定类型不适用,如部分功能只有直联网机台能使用',\n CNC_Invalid_Brand: '控制器厂牌不适用,如部分功能只有新代厂牌能使用',\n CNC_Busy_ReportWorkRelated: '控制器忙碌无法修改报工方式',\n CNC_Check_Connection: '控制器不合法或连线问题',\n Decode_Error: '序号或检查代码输入错误',\n Decode_Illegal: '此检查代码或解密行为异常,请联系新代进一步确认',\n Subaccount_Auth_Illegal: '您没有权限,请洽您的机械厂管理者',\n VerifyCode_Illegal: '检查代码异常',\n SN_Not_Found: '资料库查无此笔序号',\n Decode_DataBase_Action_Error: '解密资料库操作错误,请联系新代进一步确认',\n Remote_Decode_Error: '远距解密失败',\n CNCType_Model_Not_Found: '查无控制器机型或控制器类别',\n Wechat_Error: '微信错误通用错误码',\n SubAccount_Multi_Wechat_Bind: '子帐号存在多组微信绑定',\n MotherAccount_Multi_Wechat_Bind: '母帐号存在多组为信绑定',\n Production_Plan_Error: '生产计划管理通用错误码',\n Production_Order_Duplicate: '工单重复',\n Order_Duplicate: '订单重复或订单资料不一致',\n InValid_WorkOrderID: '工令ID 不合法 (不属于该使用者或者不存在)',\n InValid_CNC_ID: '不合法的控制器ID (可能不属于当前使用者 或者根本不存在)',\n InValid_ExceptedStartTime_Parameter: '工单起始时间有误',\n Out_Of_Number: '取号码系统发现 规格内可用号码用凿',\n Production_Order_Not_Same_Order: '工单已存在,对应到不同订单号错误',\n Work_Order_Inconsistency: '子工单已存在,机台ID、工序相同 但其他栏位(如需求工件数)不同',\n PLM_Data_Inconsistent: '与工艺包资料不一致',\n Work_Order_Comes_From_OT: '子工单来源是OT的错误码',\n InValid_ProductionOrderID: '工单ID不合法(不属于该使用者或不存在)',\n PLM_CraftPath_Info_Inconsistent: '与工艺包的工艺路径资料不符',\n PLM_ProdctionProcess_Info_Inconsistent: '与工艺包的工序资料不符',\n PLM_Machine_Info_Inconsistent: '与工艺包的机台资料不符',\n InValid_Shift_ID: '不合法的班别ID',\n InValid_Emp_ID: '不合法的职员ID',\n Part_Serial_Number_In_Use: '序号已经被使用',\n Part_Serial_Number_Process_Lock: '已有人正在取序号',\n Serial_Number_Count_Setting_Conflict: '取号数量和设定不符',\n Insufficient_Number: '剩余号码数量不足',\n Work_Order_Status_Error: '子工单状态有误',\n Part_Serial_Number_Length_Limit: '序号长度过长',\n Duplicate_SN_List: '清单号码内序号重复',\n Work_Order_Duplicate_Start: '子工单在一分钟内重复开工',\n Work_Order_Start_Fail: '子工单开工失败',\n Work_Order_Suspend_Fail: '子工单暂停加工失败',\n Work_Order_Close_Fail_But_Suspend_Success: '子工单关闭失败,但是暂停加工成功',\n Work_Order_Part_Count_Not_Fulfill: '子工单需求数尚未完成,无法完工',\n Work_Order_Start_Switch_Fail: '子工单开工时换单失败',\n Duplicate_Production_Order_List: '清单内工单重复',\n Work_order_Can_not_Direct_Start_work: '子工单无法直接开工',\n Unbind_Part_Serial_Number_When_Start_work: '加工中的工单不能执行解绑',\n InValid_Part_Serial_Number: '不合法的序号',\n Machine_Send_File_When_Start_Work: '机台正在开工传档中,无法执行开工',\n Serial_Number_Bind_Different_Part_Number: '序号绑定到不同料号',\n Need_Part_Serial_Number_Export_Time: '已有出站时间的序号,更新后需要有序号的出站时间',\n Shift_Error: '班别错误',\n Employee_Error: '人员错误',\n Shift_Pattern_Not_Exist: '班制模式不存在',\n Same_Pattern_System_Exist: '已存在相同班制模式的实际班制',\n Pattern_Shift_Number_Conflict: '欲新增的班别数量与班制模式不符',\n Shift_Time_Overlap: '班别时间重叠',\n Shift_Time_Sum_Exceed: '班制时间区间超过上限(一天)',\n Shift_Start_End_Time_Conflict: '班别开始时间大于等于结束时间',\n Shift_System_Not_Exist: '实际班制不存在',\n Shift_ID_Shift_System_Conflict: '该班别不属于此实际班制',\n Duplicate_Dept: '部门名称重复',\n Success: '成功',\n Work_Report_Review_Error: '审核失败',\n Wrong_Work_Quantity: '报工数量数量错误,数量被卡控',\n Field_Count_Max: '自定义字段数量过多',\n Field_Name_Repeat: '自定义字段名称重复',\n Break_Time_Out_Of_Range: '有休息时间超出该轮班区间',\n FileDispatch_Error: '档案派送通用错误码',\n TakeEvent_ID_Error: '取事件代码错误',\n Service_Original_Connect_Error: '串接原生SynFactory API错误',\n IsProxyCheck_Error: '确认是否为代理时发生错误',\n IsCNCIdentityValid_Check_Error: '确认CNC认证资讯是否正确时发生错误',\n CanSNAccessEquipment_Check_Error: '确认软体序号是否可使用设备时发生错误',\n SNCanNotAccessEquipment: '该序号不能使用该设备',\n GetTriggerHistory_Error: '呼叫取派送记录API时发生错误',\n Duplicate_Setting_Data: '预设路径设定重复',\n Setting_Number_Limit_Exceed: '预设路径设定 数量 达到设定上限',\n None_Data_Delete: '没有资料被删除',\n Material_Error: '物料通用错误码',\n MaterialPartNumber_Invalid: '物料编号不合法',\n MaterialPartNumber_Duplicated: '物料编号重复',\n MaterialType_Duplicated: '物料类型重复',\n MaterialPartNumber_Not_Found: '物料编号不存在',\n MaterialBOM_Exist: '物料BOM表已存在',\n MaterialBOM_Child_Relation_Invalid: '物料BOM表子项非法',\n MaterialBOM_RelationShip_Invalid: '不能存在其他BOM表有父子料相反的关系',\n MaterialBOM_Self_Contained: '父项物料与子项物料不能相同',\n MaterialBOM_Not_Exist: '物料BOM表不存在',\n MaterialBOM_Bulk_Insert_Exceed: '超出批量汇入数量',\n MaterialBOM_Version_Not_Exist: '料号BOM版本不存在',\n Material_Sync_To_PDM_Fail: '料号同步到PDM失败',\n Material_Do_Not_Have_BatchNumber_Setting: '料号没有批次号设定',\n MaterialPartNumber_Status_Disable: '料号状态停用',\n Response_Fomat_Error: '格式不正确',\n Equipmnet_Craft_Bind_Error: '设备工艺绑定错误',\n Template_Format_Error: '刀具模板格式错误',\n Craft_NO_ToolLIfeTemplate: '该设备对应工序无刀具寿命资料',\n Tool_Axis_Error: '系统(轴群)错误',\n Specification_Update_Error: '规范更新错误',\n Equip_Monitor_Setting_Name_Existed: '监控设定名称已存在',\n Equip_In_Monitor_Setting_Has_Existed_In_Same_Indicator_And_Immediate_Noti: '设备在该监控指标下已设定过即时通知',\n Equip_ID_Not_Exist: '设备ID不存在',\n Equip_Monitor_Setting_ID_Not_Existed: '监控设定ID不存在',\n CVUS_Error: '通用客制变数系统错误',\n CVUS_Setting_Not_Exist: '客制变数设定不存在',\n CVUS_Parameter_Validation_Fail: 'CVUS通用参数验证失败',\n CVUS_SETTING_COUNT_LIMIT: '达到CVUS 设定数量上限',\n CVUS_VARTYPE_LENGTH_LIMIT: 'vartype 参数超过长度限制',\n CVUS_Map_Diff_Set_Result: '不同设定结果',\n CVUS_Map_Error_Busy: '设备忙碌,无法设定',\n CVUS_Map_When_Get_Setting: '当取得设定时发生错误',\n CVUS_Map_Unsup_Var: '不支援的变数',\n CVUS_Map_Var_Addr: '不支援的变数指向',\n CVUS_Map_Unsup_Var_Tp: '不支援的变数类型',\n CVUS_Map_Unsup_Freq: '不支援的上传频率',\n CVUS_EventID_Not_Exist: '该派送事件不存在',\n CVM_Parameter_Validation_Fail: '客制变数修改参数验证失败',\n CVM_SETTING_COUNT_LIMIT: '达到CVM设定数量上限',\n CVM_VARTYPE_LENGTH_LIMIT: 'CVM vartype 参数超过长度限制',\n CVM_Take_Event_ID: 'CVM 服务取得派送ID错误',\n CVM_Different_Result: 'CVM 有不同修改结果',\n CVM_Busy_Var_Modifying: 'CVM执行失败,忙碌中,正在变更变数数值',\n CVM_Error_DataType_Trans_Error: 'CVM执行失败,资料型别转型失败',\n CVM_Error_Unsupport_VarType: 'CVM执行失败,不支援的变数类别',\n CVM_Error_Wrong_Var_Address: 'CVM执行失败,变数位址不合法',\n CVM_Error_Unsupport_DataType: 'CVM执行失败,不支援的型别代码',\n CVUS_Error_GroupSub_NotExist: '该群组相关资料不存在,有可能是设备ID不存在,有可能是该设备名称或者ID不存在',\n CVUS_Equip_Not_Support: '设备不支援群组订阅功能',\n CVUS_Error_DataType_Inconsistent: '资料型态不一致',\n CVUS_Error_Unsupport_DataType: '资料型态不支援',\n CVUS_PLC_Setting_Count_Limit: 'PLC设备达数量设定上限',\n Part_Serial_Number_Error: '料件序号通用错误',\n Part_Serial_Number_Already_Bind_Part_Number: '料件序号已经绑在料号上了',\n Part_Serial_Number_Not_Found: '找不到该料件序号',\n Part_Serial_Number_Do_Not_Bind_Part_Number: '料件序号没有绑定的料号',\n Operation_Uuid_Already_Bind_Other_Part_Number: '该操作记录已经绑定在其他料号上了',\n Custom_Parameter_Already_Used_By_Part_Serial_Number_Setting: '序号自定义参数已经被序号设定所使用',\n Serial_Number_Rule_Setting_Name_Duplicate: '序号规则设定的名称重复',\n Serial_Number_Interval_Setting_Error: '流水号区间设定错误',\n Machine_Type_Exit_Error: '机台类别已存在',\n Cnc_Already_Bound: '控制器已绑定',\n Batch_Number_Error: '批次号通用错误',\n Batch_Number_Setting_Name_Duplicate: '批次号设定名称重复',\n Batch_Number_Setting_ID_Not_Exist: '批次号设定ID不存在',\n Batch_Number_Setting_Not_Enable: '批次号设定未启用',\n Batch_Number_Insufficient: '批次号数量不足',\n Batch_Number_Already_Bind_Other_Production_Order: '批次号已经绑定在其他工单上',\n Illegal_Batch_Number: '不合法的批次号',\n Batch_Number_Setting_Exceed_Max_Digit: '批次号设定超过最大位数',\n Message_Push_Error: '推播服务通用错误',\n Message_Push_Server_Not_Initialized: '推播服务尚未与伺服器做初始化连线设定',\n Message_Push_Mobile_Message_Excced: '推播服务手机提醒讯息达到上限',\n Message_Push_Server_Connect_Fail: '推播服务与推播伺服器连线失败',\n Message_Push_Emp_Not_Bind_APP: '推播服务要发送讯息的人员尚未绑定APP',\n Message_Push_Message_Setting_Not_Initialized: '推播服务手机提醒讯息设定尚未初始化开通',\n Tag_Over_Count: '超出工单可绑定标签数量',\n Data_Not_Exists: '数据不存在',\n Encoding_Exceeds_Upper_Limit: '编码会超过系统设定上限,请至工厂建模中的编号规则设定',\n No_Beat_Point: '请先至工厂建模_产品工艺设定该路径节拍点',\n Last_Process: '最后一道工序,不能删除',\n MaterialUnit_Not_Exist: '单位不存在',\n Production_Order_Not_In_NotDispatch: '非未派工的工单不可删除',\n Production_Order_Has_Source_Document_Association: '生产工单存在源单关联',\n Production_Order_Tag_Number_Released: '生产工单已发行标签',\n Out_Storage_Not_Exit: '出库仓库不存在',\n Out_Stock_Space_Not_Exit: '出库仓位不存在',\n In_Storage_Not_Exit: '入库仓库不存在',\n In_Stock_Space_Not_Exit: '入库仓位不存在',\n Def_In_Storage_Not_Exit: '不良入库仓库不存在',\n Def_In_Stock_Space_Not_Exit: '不良入库仓库不存在',\n Purchase_In_Storage_Not_Exit: '采购入库仓库不存在',\n Purchase_In_Stock_Space_Not_Exit: '采购入库仓位不存在',\n },\n en: {\n System_Error: 'System Error.',\n Service_Unavailable: 'System service is suspended.',\n Remote_Service_Error: 'Remote connection error.',\n IP_Limit: 'IP limit cannot request this resource.',\n Illegal_Request: 'Illegal request.',\n Token_Missing: 'The source (token) parameter is missing.',\n Unsupport_Mediatype: 'Unsupported MediaType.',\n Param_Error:\n 'Parameter error, the content of the data or the number of codes you returned does not meet the specifications.',\n System_Busy: 'System overload.',\n Job_Expired: 'Execution timed out.',\n RPC_Error: 'RPC error.',\n Partial_Data_Error: 'Partial data error.',\n Time_Out: 'Connection timed out.',\n Mail_Failed: 'The mailing function is abnormal.',\n Decode_Failed: 'Decryption function is abnormal.',\n WeChat_GetOpenID_Error: 'WeChat get OpenID function abnormal.',\n SDK_Unsupport_Function: 'SDK unsupport function.',\n API_Internet_Error: 'Failed to connect to other API.',\n SMS_Failed:\n 'SMS sending is abnormal. Please check whether the country code and phone number are entered correctly.',\n Insert_Problem_Type_Wrong: 'Insert Error. The parameter type is incorrect.',\n Insert_Problem_KeyColumn_Exist: 'The same primary key column already exists.',\n Update_Problem_Type_Wrong: 'Update Error. The parameter type is incorrect.',\n Update_Problem_KeyColumn_Miss: 'Missing primary key.',\n Select_Problem_No_Data: 'Check no data.',\n Update_Error: 'Update error.',\n Insert_Error: 'Insert failed.',\n Upsert_Error: 'Update insert failed.',\n Delete_Error: 'Delete failed.',\n DBRelated_Error: 'DB Related Error.',\n Password_Wrong: 'Password Wrong.',\n No_Right_to_Access: 'Insufficient permissions.',\n UserID_UnExist: 'Account does not exist.',\n Account_Quit: 'Account is disabled.',\n Verify_Fail: 'Verification error.',\n ProcessOrder_Duplicate: 'The process sub-work order is repeated',\n ID_SameAs_Password: 'Account is equivalent to password.',\n Auth_Error: 'Account authentication error.',\n Machine_Number_Limit: 'Machine authorized number limit.',\n Token_Expired: 'Login time limit expired, please refresh or resubmit the form.',\n Password_Need_Change: 'The password must be changed (when the password is forgotten).',\n Cookie_Error: 'Cookie verification error. Your login time limit may have expired, please login again.',\n WeChat_First_Login: 'WeChat first login.',\n Token_Verify_Fail: 'Token verification failed.',\n Option_Right_Invalid: 'Insufficient Option right.',\n No_Right_to_Access_CNC: 'No right to access CNC.',\n Mail_Verify_Fail: 'The mail has not been verified.',\n No_Right_to_Access_Equipment: 'Insufficient permission to other devices.',\n Equipment_Name_Duplicate: 'Other equipment names are duplicated.',\n Software_Serial_Number_Valid:\n 'The software serial number is illegal, the serial number used for direct networking cannot be used to use the SMB software serial number related API.',\n Input_Type_Wrong: 'The parameter type is incorrect.',\n File_Not_Exist: 'File does not exist.',\n File_Using_Conflict: 'File usage conflict.',\n File_Not_ExistInRequest: 'File does not exist in the parameter.',\n File_Upload_Number_Limit: 'File upload number problem.',\n Oss_Upload_Fail: 'Upload to OSS failed.',\n File_Size_Exceeded: 'Single file size exceeds the upper limit.',\n Folder_Size_Exceeded: 'The file size of a single folder exceeds the upper limit.',\n File_Extension_Invalid: 'Illegal extension.',\n File_Delete_Fail: 'Failed to delete file.',\n File_Related_Error: 'File related error.',\n File_InUse_Error: 'File is in use.',\n Folder_Not_Exist: 'Folder does not exist.',\n Folder_InUse_Error: 'Folder is in use.',\n Folder_Error: 'Generic folder error message.',\n Partial_File_Fail: 'Partial file failed.',\n OSS_Error: 'OSS general error.',\n Connect_Broker_Failed: 'Failed to connect to Broker.',\n Subscribe_Topic_Failed: 'Subscription to topic failed.',\n Publish_Topic_Failed: 'Publish topic failed.',\n Duplicate_Subscribe_Topic: 'Duplicate subscription topic.',\n Not_Subscribe_Topic_Yet: 'Not yet subscribed to this topic.',\n Unsubscribe_Topic_Failed: 'Unsubscribe topic failed.',\n DisConnect_Broker_Failed: 'Broker failed to disconnect.',\n CNC_MQTT_Error: 'General controller MQTT related error.',\n CNC_Offline: 'Controller is offline.',\n CNC_Busy: 'The controller is busy.',\n CNC_Busy_MQTT: 'The controller is busy due to MQTT instructions.',\n SMB_MQTT_Error: 'General SMB MQTT related errors.',\n SMB_Offline: 'SMB offline.',\n SMB_Busy: 'SMB is busy.',\n SMB_Busy_MQTT: 'SMB is busy because of MQTT.',\n Client_Already_Connect: 'A client with the same information is already connected',\n CNC_Error: 'controller general error code.',\n CNC_Not_Regist: 'The controller has not been registered.',\n CNC_Already_Decode: 'The check code corresponding to this controller has been successfully decrypted.',\n CNC_Already_Bind_SynFactory: 'The controller has been registered and bound to other user.',\n CNC_Name_Duplicate: 'The controller name of the end user is duplicated.',\n CNC_Connection_Full: 'The number of connections for the end user has reached the upper limit.',\n CNC_Not_Binding: 'The controller is not bound by any terminal.',\n CNC_Disk_Not_Enough: 'Not enough CNC disk',\n CNC_Dispatch_Type: 'The CNC dispatch type problem (for example: the parameter is incorrect)',\n CNC_Busy_FileRelated: 'The CNC is busy with file related matters',\n Robot_CNC_Direct_Dispatch_Deny: 'Robot CNC is not allowed to receive dispatches',\n CNC_Busy_LogBackup: 'The controller is busy with log backup related matters',\n CNC_Disconnected: 'The controller is offline, unable to shake hands',\n CNC_Invalid_BindingType:\n 'The controller binding type is not applicable, such as some functions can only be used by directly connected machines',\n CNC_Busy_ReportWorkRelated: 'The controller is busy and cannot modify the reporting method',\n CNC_Invalid_Brand:\n 'The controller brand is not applicable, such as some functions can only be used by the new generation brand',\n CNC_Check_Connection: 'Invalid controller or connection problem',\n Decode_Error: 'Serial number or check code input error.',\n Decode_Illegal:\n 'This check code or decryption behavior is abnormal, please contact the new generation for further confirmation.',\n Subaccount_Auth_Illegal: 'You do not have permission, please contact your machine factory manager.',\n VerifyCode_Illegal: 'Check code exception.',\n SN_Not_Found: 'No such serial number found in the database.',\n Decode_DataBase_Action_Error:\n 'Decode database operation error, please contact New Generation for further confirmation.',\n Remote_Decode_Error: 'Remote decryption failed.',\n CNCType_Model_Not_Found: 'Check without controller model or controller type.',\n Wechat_Error: 'Wechat error.',\n SubAccount_Multi_Wechat_Bind: 'There are multiple WeChat bindings for sub-accounts.',\n MotherAccount_Multi_Wechat_Bind: 'The parent account has multiple groups for WeChat binding.',\n Production_Plan_Error: 'Production plan management error.',\n Production_Order_Duplicate: 'Production order number duplicate.',\n Order_Duplicate: 'Order duplicate or inconsistent order Number information.',\n InValid_WorkOrderID:\n 'The sub production order number is invalid. (It does not belong to the account or does not exist)',\n InValid_CNC_ID: 'Invalid CNC ID (It may not belong to the account or does not exist at all)',\n InValid_ExceptedStartTime_Parameter: 'The start time of the production order number is incorrect',\n Out_Of_Number: 'The number system found that the available numbers in the specification are used up',\n Production_Order_Not_Same_Order:\n 'Production order number already exists, corresponding to a different order number error.',\n Work_Order_Inconsistency:\n 'The sub-work order already exists, the machine ID and process are the same, but other fields (such as the number of required workpieces) are different',\n PLM_Data_Inconsistent: 'Inconsistent with the PLM data',\n Work_Order_Comes_From_OT: 'The source of the sub-work order is the error code of OT',\n InValid_ProductionOrderID: 'The work order ID is invalid (does not belong to the user or does not exist)',\n PLM_CraftPath_Info_Inconsistent: 'Inconsistent with the craft path information of the craft package',\n PLM_ProdctionProcess_Info_Inconsistent: 'Inconsistent with the process information of the process package',\n PLM_Machine_Info_Inconsistent: 'Inconsistent with the machine information of the craft package',\n InValid_Shift_ID: 'Invalid shift ID',\n InValid_Emp_ID: 'Invalid employee ID',\n Part_Serial_Number_In_Use: 'The serial number has been used',\n Part_Serial_Number_Process_Lock: 'Someone is accessing the serial number',\n Serial_Number_Count_Setting_Conflict: 'Number of SN to be taken does not match the setting',\n Insufficient_Number: 'Insufficient number of remaining numbers',\n Work_Order_Status_Error: 'Work order status error',\n Part_Serial_Number_Length_Limit: 'The length of the serial number is too long',\n Duplicate_SN_List: 'The serial number in the list number is repeated',\n Work_Order_Duplicate_Start: 'The sub-work order starts repeatedly within one minute',\n Work_Order_Start_Fail: 'Failed to start sub-work order',\n Work_Order_Suspend_Fail: 'The sub-work order suspend processing failed',\n Work_Order_Close_Fail_But_Suspend_Success:\n 'Failed to close the sub-work order, but suspend processing successfully',\n Work_Order_Part_Count_Not_Fulfill:\n 'The sub-work order partCountRequired has not been completed and cannot be completed',\n Work_Order_Start_Switch_Fail: 'Failed to change the order when the sub-work order started',\n Duplicate_Production_Order_List: 'Duplicate work orders in the list',\n Work_order_Can_not_Direct_Start_work: 'The sub-work order cannot start directly',\n Unbind_Part_Serial_Number_When_Start_work: 'The work order in processing cannot be unbind',\n InValid_Part_Serial_Number: 'Invalid serial number',\n Machine_Send_File_When_Start_Work: 'The machine is in the process of starting work, unable to start work',\n Serial_Number_Bind_Different_Part_Number: 'The serial number is bound to a different part number',\n Need_Part_Serial_Number_Export_Time:\n 'The serial number of the export time already exists, and the export time of the serial number is required after the update',\n Shift_Error: 'Shift error',\n Employee_Error: 'Employee error',\n Shift_Pattern_Not_Exist: 'Shift pattern does not exist',\n Same_Pattern_System_Exist: 'The shift with the same shift pattern already exists',\n Pattern_Shift_Number_Conflict: 'The number of shifts does not match the shift pattern',\n Shift_Time_Overlap: 'Shift time overlap',\n Shift_Time_Sum_Exceed: 'The shift time interval exceeds the upper limit (one day)',\n Shift_Start_End_Time_Conflict: 'The shift start time is greater than or equal to the end time',\n Shift_System_Not_Exist: 'The actual shift system does not exist',\n Shift_ID_Shift_System_Conflict: 'This shift name does not belong to this actual shift',\n Duplicate_Dept: 'Duplicate department name',\n Success: 'Success',\n Work_Report_Review_Error: 'Review failed',\n Wrong_Work_Quantity: 'The number of work reports is incorrect, and the quantity is stuck',\n Field_Count_Max: 'Too many custom fields',\n Field_Name_Repeat: 'Duplicate custom field names',\n Break_Time_Out_Of_Range: 'This break time beyond the shift interval',\n FileDispatch_Error: 'File delivery general error code',\n TakeEvent_ID_Error: 'Error taking event code',\n Service_Original_Connect_Error: 'Error in connecting native SynFactory API',\n IsProxyCheck_Error: 'An error occurred while confirming whether it is a proxy',\n IsCNCIdentityValid_Check_Error:\n 'An error occurred while confirming whether the CNC certification information is correct',\n CanSNAccessEquipment_Check_Error:\n 'An error occurred while confirming whether the software serial number can use the device',\n SNCanNotAccessEquipment: 'This serial number cannot use this device',\n GetTriggerHistory_Error: 'An error occurred while calling the API to get the dispatch record',\n Duplicate_Setting_Data: 'Duplicate default path settings',\n Setting_Number_Limit_Exceed: 'The number of default path settings has reached the setting upper limit',\n None_Data_Delete: 'No data was deleted',\n Material_Error: 'Material general error code',\n MaterialPartNumber_Invalid: 'The material number is illegal',\n MaterialPartNumber_Duplicated: 'Duplicate material number',\n MaterialType_Duplicated: 'Duplicated material type',\n MaterialPartNumber_Not_Found: 'The material number does not exist',\n MaterialBOM_Exist: 'Material BOM already exists',\n MaterialBOM_Child_Relation_Invalid: 'Illegal material BOM child item',\n MaterialBOM_RelationShip_Invalid:\n 'There cannot be any other BOM table with an opposite relationship between parent and child materials',\n MaterialBOM_Self_Contained: 'Parent and child materials cannot be the same',\n MaterialBOM_Not_Exist: 'Material BOM table does not exist',\n MaterialBOM_Bulk_Insert_Exceed: 'Exceeded batch import quantity',\n MaterialBOM_Version_Not_Exist: 'The material number BOM version does not exist',\n Material_Sync_To_PDM_Fail: 'Failed to synchronize material number to PDM',\n Material_Do_Not_Have_BatchNumber_Setting: 'The material number does not have a batch number setting',\n MaterialPartNumber_Status_Disable: 'Material number status disabled',\n Response_Fomat_Error: 'Incorrect format',\n Equipmnet_Craft_Bind_Error: 'Equipment craft binding error',\n Template_Format_Error: 'Tool template format error',\n Craft_NO_ToolLIfeTemplate: 'There is no tool life data for the corresponding process of this equipment',\n Tool_Axis_Error: 'System (axis group) error',\n Specification_Update_Error: 'Specification update error',\n Equip_Monitor_Setting_Name_Existed: 'Monitoring setting name already exists',\n Equip_In_Monitor_Setting_Has_Existed_In_Same_Indicator_And_Immediate_Noti:\n 'The device has set up real-time notification under this monitoring indicator',\n Equip_ID_Not_Exist: 'Device ID does not exist',\n Equip_Monitor_Setting_ID_Not_Existed: 'Monitoring setting ID does not exist',\n CVUS_Error: 'General custom variable system error',\n CVUS_Setting_Not_Exist: 'Custom variable setting does not exist',\n CVUS_Parameter_Validation_Fail: 'CVUS general parameter validation failed',\n CVUS_SETTING_COUNT_LIMIT: 'CVUS setting limit reached',\n CVUS_VARTYPE_LENGTH_LIMIT: 'The vartype parameter exceeds the length limit',\n CVUS_Map_Diff_Set_Result: 'Different setting results',\n CVUS_Map_Error_Busy: 'The device is busy and cannot be set',\n CVUS_Map_When_Get_Setting: 'An error occurred when getting the setting',\n CVUS_Map_Unsup_Var: 'Unsupported variable',\n CVUS_Map_Var_Addr: 'Unsupported variable pointer',\n CVUS_Map_Unsup_Var_Tp: 'Unsupported variable type',\n CVUS_Map_Unsup_Freq: 'Unsupported upload frequency',\n CVUS_EventID_Not_Exist: 'The dispatch event does not exist',\n CVM_Parameter_Validation_Fail: 'Custom variable modification parameter validation failed',\n CVM_SETTING_COUNT_LIMIT: 'The upper limit of the number of CVM settings has been reached',\n CVM_VARTYPE_LENGTH_LIMIT: 'CVM vartype parameter exceeds length limit',\n CVM_Take_Event_ID: 'The CVM service got a delivery ID error',\n CVM_Different_Result: 'CVM has different modification results',\n CVM_Busy_Var_Modifying: 'CVM execution failed, busy, changing variable value',\n CVM_Error_DataType_Trans_Error: 'CVM execution failed, data type transformation failed',\n CVM_Error_Unsupport_VarType: 'CVM execution failed, unsupported variable type',\n CVM_Error_Wrong_Var_Address: 'CVM execution failed, the variable address is invalid',\n CVM_Error_Unsupport_DataType: 'CVM execution failed, unsupported type code',\n CVUS_Error_GroupSub_NotExist:\n 'The group-related information does not exist, it may be that the device ID does not exist, it may be that the device name or ID does not exist',\n CVUS_Equip_Not_Support: 'The device does not support the group subscription function',\n CVUS_Error_DataType_Inconsistent: 'Data type is inconsistent',\n CVUS_Error_Unsupport_DataType: 'Unsupported data type',\n CVUS_PLC_Setting_Count_Limit: 'PLC device reaches the setting upper limit',\n Part_Serial_Number_Error: 'General error of material serial number',\n Part_Serial_Number_Already_Bind_Part_Number:\n 'The serial number of the material has been bound to the material number',\n Part_Serial_Number_Not_Found: 'The part serial number cannot be found',\n Part_Serial_Number_Do_Not_Bind_Part_Number: 'The material part serial number does not have a bound material number',\n Operation_Uuid_Already_Bind_Other_Part_Number: 'This operation record has been bound to other material numbers',\n Custom_Parameter_Already_Used_By_Part_Serial_Number_Setting:\n 'The serial number custom parameter has been used by the serial number setting',\n Serial_Number_Rule_Setting_Name_Duplicate: 'The name of the serial number rule setting is duplicated',\n Serial_Number_Interval_Setting_Error: 'Serial number interval setting error',\n Machine_Type_Exit_Error: 'Machine type already exists',\n Cnc_Already_Bound: 'Controller is bound',\n Batch_Number_Error: 'Batch number error.',\n Batch_Number_Setting_Name_Duplicate: 'Duplicate batch number setting name.',\n Batch_Number_Setting_ID_Not_Exist: 'The batch number setting ID does not exist.',\n Batch_Number_Setting_Not_Enable: 'Batch number setting is not enabled.',\n Batch_Number_Insufficient: 'Insufficient batch number.',\n Batch_Number_Already_Bind_Other_Production_Order: 'The batch number has been bound to other work orders.',\n Illegal_Batch_Number: 'Illegal batch number',\n Batch_Number_Setting_Exceed_Max_Digit: 'The batch number setting exceeds the maximum number of digits.',\n Message_Push_Error: 'Push service general error',\n Message_Push_Server_Not_Initialized:\n 'The push service has not yet initialized the connection settings with the server',\n Message_Push_Mobile_Message_Excced: 'The push service mobile phone reminder message has reached the upper limit',\n Message_Push_Server_Connect_Fail: 'The connection between push service and push server failed',\n Message_Push_Emp_Not_Bind_APP:\n 'The person to whom the push service wants to send messages has not been bound to the APP',\n Message_Push_Message_Setting_Not_Initialized:\n 'The push service mobile phone reminder message setting has not been initialized and activated',\n Tag_Over_Count: 'Exceeding the number of tags that can be bound to the work order',\n Data_Not_Exists: 'Data does not exist',\n Encoding_Exceeds_Upper_Limit:\n 'The coding will exceed the upper limit set by the system. Please go to the numbering rule setting in the factory modeling',\n No_Beat_Point: 'Please first go to the factory to model the product process and set the beat point for this path',\n Last_Process: 'The last process cannot be deleted',\n MaterialUnit_Not_Exist: 'Unit does not exist',\n Production_Order_Not_In_NotDispatch: 'Non-assigned work orders cannot be deleted',\n Production_Order_Has_Source_Document_Association: 'The production order has a source order association',\n Production_Order_Tag_Number_Released: 'Production Work Order Issued Label',\n Out_Storage_Not_Exit: 'The outbound storage does not exist',\n Out_Stock_Space_Not_Exit: 'Outbound storage location does not exist',\n In_Storage_Not_Exit: 'The storage warehouse does not exist',\n In_Stock_Space_Not_Exit: 'The inbound storage location does not exist',\n Def_In_Storage_Not_Exit: 'The defective product storage warehouse does not exist',\n Def_In_Stock_Space_Not_Exit: 'The defective product storage warehouse does not exist',\n Purchase_In_Storage_Not_Exit: 'The purchase inbound warehouse does not exist',\n Purchase_In_Stock_Space_Not_Exit: 'The purchase inbound storage location does not exist',\n },\n};\n","import { createI18n } from 'vue-i18n';\n\n// 导入 element-plus 的国际化文件\nimport elementZhCn from 'element-plus/es/locale/lang/zh-cn';\nimport elementEn from 'element-plus/es/locale/lang/en';\nimport elementZhTw from 'element-plus/es/locale/lang/zh-tw';\n\nimport zhCnFiles from '../i18n/lang/zh-cn.json';\nimport enUsFiles from '../i18n/lang/en-us.json';\nimport zhTwFiles from '../i18n/lang/zh-tw.json';\nimport errorCodeTranslate from '../i18n/lang/errorCodeTranslate.mjs';\n\nconst messages = {\n 'zh-cn': {\n ...zhCnFiles,\n ...errorCodeTranslate['zh-cn'],\n el: elementZhCn,\n },\n 'zh-tw': {\n ...zhTwFiles,\n ...errorCodeTranslate['zh-tw'],\n el: elementZhTw,\n },\n 'en': {\n ...enUsFiles,\n ...errorCodeTranslate['en'],\n el: elementEn,\n },\n};\n\nconst i18n = createI18n({\n locale: localStorage.getItem('lang') || 'zh-cn',\n fallbackLocale: 'zh-cn',\n silentTranslationWarn: true,\n missingWarn: false,\n silentFallbackWarn: true,\n fallbackWarn: false,\n messages,\n});\n\n// 创建 i18n 实例并导出\nexport default i18n;\n","<template>\n <el-dropdown\n size=\"default\"\n type=\"primary\"\n :hide-on-click=\"false\"\n trigger=\"click\"\n style=\"margin-left: 15px\"\n :disabled=\"disabled\"\n data-test-id=\"EL-DROPDOWN-eo8M84\"\n >\n <el-button type=\"primary\" color=\"#125088\" :disabled=\"disabled\" data-test-id=\"EL-BUTTON-WQugCA\">\n {{ t('columnConfiguration') }}\n <el-icon class=\"el-icon--right\" data-test-id=\"EL-ICON-9BpySy\">\n <arrow-down data-test-id=\"ARROW-DOWN-iXQ8EA\" />\n </el-icon>\n </el-button>\n <template #dropdown>\n <!-- filter 禁止拖拽 -->\n <div style=\"display: flex\" data-test-id=\"DIV-ksWjQV\">\n <div data-test-id=\"DIV-0Bp9xN\">\n <el-space v-if=\"parentLabel\" direction=\"vertical\" data-test-id=\"EL-SPACE-SwiJNQ\">\n <el-text tag=\"b\" data-test-id=\"EL-TEXT-PtuT6g\">{{ parentLabel }}</el-text>\n </el-space>\n <!-- 父表头 -->\n <el-dropdown-menu style=\"max-height: 400px\" data-test-id=\"EL-DROPDOWN-MENU-P9MKSO\">\n <VueDraggable\n ref=\"el\"\n v-model=\"parentDraggableItems\"\n :handle=\"handle\"\n filter=\".disabled-color\"\n data-test-id=\"VUEDRAGGABLE-XbqWos\"\n @end=\"parentSaveData\"\n @move=\"(evt) => onDragMove(evt, parentDraggableItems)\"\n >\n <el-dropdown-item\n v-for=\"item in parentDraggableItems\"\n :key=\"item.value\"\n :command=\"item\"\n data-test-id=\"EL-DROPDOWN-ITEM-qhw6G6\"\n >\n <v-icon\n :class=\"['mdi mdi-drag dragindicator', dynamicClasses(item)]\"\n style=\"margin-right: 10px\"\n data-test-id=\"V-ICON-4nKZUW\"\n />\n <el-checkbox\n v-if=\"isParentCheckbox\"\n v-model=\"item.isShown\"\n :label=\"item.customizeFields ? item.text : $t(item.text)\"\n size=\"large\"\n :disabled=\"item.disabled\"\n data-test-id=\"EL-CHECKBOX-7VXhXa\"\n @change=\"parentSaveData(item)\"\n />\n <span v-else :class=\"dynamicClasses(item)\" style=\"margin-right: 10px\" data-test-id=\"SPAN-VpmSwI\">{{\n item.customizeFields ? item.text : $t(item.text)\n }}</span>\n <v-icon\n v-if=\"!item.freeze\"\n class=\"mdi mdi-lock-open-variant\"\n style=\"margin-left: 10px\"\n data-test-id=\"V-ICON-gfsrPv\"\n @click=\"isFrozen(item, parentDraggableItems, 'parentSaveData')\"\n />\n <v-icon\n v-if=\"item.freeze\"\n class=\"mdi mdi-lock\"\n style=\"margin-left: 10px\"\n data-test-id=\"V-ICON-bfzpiZ\"\n @click=\"isFrozen(item, parentDraggableItems, 'parentSaveData')\"\n />\n </el-dropdown-item>\n </VueDraggable>\n </el-dropdown-menu>\n </div>\n <div v-if=\"isChild\" data-test-id=\"DIV-FUfjAE\">\n <el-space v-if=\"childLabel\" direction=\"vertical\" data-test-id=\"EL-SPACE-tJl63c\">\n <el-text tag=\"b\" data-test-id=\"EL-TEXT-BqEDSr\">{{ childLabel }}</el-text>\n </el-space>\n <!-- 子表头 -->\n <el-dropdown-menu style=\"max-height: 400px\" data-test-id=\"EL-DROPDOWN-MENU-PAz7a2\">\n <VueDraggable\n ref=\"el\"\n v-model=\"childDraggableItems\"\n :handle=\"handle\"\n filter=\".disabled-color\"\n data-test-id=\"VUEDRAGGABLE-QgDzSV\"\n @end=\"childSaveData\"\n @move=\"(evt) => onDragMove(evt, childDraggableItems)\"\n >\n <el-dropdown-item\n v-for=\"item in childDraggableItems\"\n :key=\"item.value\"\n :command=\"item\"\n data-test-id=\"EL-DROPDOWN-ITEM-LBKFI2\"\n >\n <v-icon\n :class=\"['mdi mdi-drag dragindicator', dynamicClasses(item)]\"\n style=\"margin-right: 10px\"\n data-test-id=\"V-ICON-8xH3OY\"\n />\n <el-checkbox\n v-if=\"isChildCheckbox\"\n v-model=\"item.isShown\"\n :label=\"item.customizeFields ? item.text : $t(item.text)\"\n size=\"large\"\n :disabled=\"item.disabled\"\n data-test-id=\"EL-CHECKBOX-EMAn7J\"\n @change=\"childSaveData(item)\"\n />\n <span v-else :class=\"dynamicClasses(item)\" style=\"margin-right: 10px\" data-test-id=\"SPAN-DCpyQn\">{{\n item.customizeFields ? item.text : $t(item.text)\n }}</span>\n <v-icon\n v-if=\"!item.freeze\"\n class=\"mdi mdi-lock-open-variant\"\n style=\"margin-left: 10px\"\n data-test-id=\"V-ICON-BJQDvq\"\n @click=\"isFrozen(item, childDraggableItems, 'childSaveData')\"\n />\n <v-icon\n v-if=\"item.freeze\"\n class=\"mdi mdi-lock\"\n style=\"margin-left: 10px\"\n data-test-id=\"V-ICON-fcAGHD\"\n @click=\"isFrozen(item, childDraggableItems, 'childSaveData')\"\n />\n </el-dropdown-item>\n </VueDraggable>\n </el-dropdown-menu>\n </div>\n </div>\n </template>\n </el-dropdown>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue';\nimport { VueDraggable } from 'vue-draggable-plus';\nimport { useI18n } from 'vue-i18n';\nimport { ElMessage } from 'element-plus';\nconst { t } = useI18n();\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false,\n }, // 是否禁用列配置按钮\n parentItems: {\n type: Array,\n default: () => [],\n }, // 父表头数据\n isParentCheckbox: {\n type: Boolean,\n default: false,\n }, // 父表头是否显示复选框\n parentLabel: {\n type: String,\n default: '',\n }, // 父表头名称\n childLabel: {\n type: String,\n default: '',\n }, // 子表头名称\n childItems: {\n type: Array,\n default: () => [],\n }, // 子表头数据\n isChildCheckbox: {\n type: Boolean,\n default: false,\n }, // 子表头是否显示复选框\n isChild: {\n type: Boolean,\n default: false,\n }, // 是否显示子表头列配置\n});\nconst emit = defineEmits(['parentSaveData', 'childSaveData']);\nconst parentDraggableItems = ref([]);\nconst childDraggableItems = ref([]);\nconst handle = ref('.dragindicator');\nwatch(\n () => props,\n () => {\n parentDraggableItems.value = props.parentItems;\n childDraggableItems.value = props.childItems;\n },\n {\n immediate: true,\n deep: true,\n },\n);\nfunction parentSaveData(val) {\n const count = parentDraggableItems.value.filter((item) => item.isShown === true).length;\n if (count < 6 && !val.isShown) {\n val.isShown = true;\n ElMessage.error(t('theMinimumColumns6'));\n return;\n }\n emit('parentSaveData', parentDraggableItems.value);\n}\nfunction childSaveData(val) {\n const count = childDraggableItems.value.filter((item) => item.isShown === true).length;\n if (count < 6 && !val.isShown) {\n val.isShown = true;\n ElMessage.error(t('theMinimumColumns6'));\n return;\n }\n emit('childSaveData', childDraggableItems.value);\n}\nfunction isFrozen(item, data, event) {\n const frozenCount = data.filter((item) => item.freeze === true).length;\n\n if (item.freeze) {\n // 取消冻结逻辑\n item.freeze = false;\n item.isFixed = false;\n // 将取消冻结的栏位移动到未冻结栏位的第一位\n const currentIndex = data.indexOf(item);\n if (currentIndex !== -1) {\n const [removed] = data.splice(currentIndex, 1);\n const firstNonFrozenIndex = data.findIndex((i) => !i.freeze);\n if (firstNonFrozenIndex !== -1) {\n data.splice(firstNonFrozenIndex, 0, removed);\n } else {\n data.push(removed); // 如果没有未冻结栏位,则放到最后\n }\n }\n } else {\n // 冻结逻辑\n if (frozenCount >= 4) {\n ElMessage.error(t('upTo4ColumnsFrozen'));\n return;\n }\n item.freeze = true;\n item.isFixed = true;\n\n // 将冻结的栏位移动到最后一个冻结栏位之后\n const currentIndex = data.indexOf(item);\n if (currentIndex !== -1) {\n const [removed] = data.splice(currentIndex, 1);\n const lastFrozenIndex = data.findLastIndex((i) => i.freeze);\n if (lastFrozenIndex !== -1) {\n data.splice(lastFrozenIndex + 1, 0, removed);\n } else {\n data.unshift(removed); // 如果没有冻结栏位,则放到最前面\n }\n }\n }\n // 触发保存事件\n emit(event, data);\n}\nfunction dynamicClasses(item) {\n return item.freeze ? 'disabled-color' : '';\n}\n// 禁止未冻结列拖动到冻结列的上方或中间\nfunction onDragMove(evt, val) {\n // 获取拖拽项的索引\n const draggedIndex = Array.from(evt.from.children).indexOf(evt.dragged);\n const draggedItem = val[draggedIndex];\n\n // 获取目标项的索引\n let relatedIndex = Array.from(evt.to.children).indexOf(evt.related);\n // willInsertAfter 为 true 时,目标索引要+1\n if (evt.willInsertAfter && relatedIndex !== -1) {\n relatedIndex += 1;\n }\n // 如果 related 为空,说明拖到最后\n if (evt.related == null) {\n relatedIndex = val.length;\n }\n\n const frozenCount = val.filter((item) => item.freeze).length;\n\n // 未冻结列不能拖到冻结区(前frozenCount个)内部或前面\n if (!draggedItem.freeze && relatedIndex < frozenCount) {\n return false;\n }\n // 冻结列只能在冻结区内移动\n if (draggedItem.freeze && relatedIndex >= frozenCount) {\n return false;\n }\n return true;\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.disabled-color {\n color: #ccc !important;\n cursor: not-allowed !important;\n}\n:deep(.el-space--vertical) {\n padding: 5px 0 0 16px;\n position: relative;\n top: 5px;\n z-index: 9999;\n}\n</style>\n","const BUILD_TYPE = process.env.NODE_ENV;\n\nfunction serviceRoute(productionRoute, devRoute = '') {\n let localDevRoute = devRoute;\n if (localDevRoute.length === 0) {\n localDevRoute = productionRoute;\n }\n let originPath = '';\n if (BUILD_TYPE === 'production') {\n // 放上研發測試環境或是整合測試環境(連自己同源的API)\n const { protocol } = window.location;\n const { hostname } = window.location;\n const { port } = window.location;\n originPath = `${protocol}//${hostname}:${port}/${productionRoute}`;\n } else if (BUILD_TYPE === 'development') {\n // 在本地端開發連研發測試環境(讓devServer代理到API專案)\n originPath = `/${localDevRoute}`;\n }\n\n return originPath;\n}\n\nexport default serviceRoute;\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute(\n\t'PrivateCloudCore/API/V1',\n\t'PrivateCloudCoreApi_SynComponent/PrivateCloudCore/API/V1',\n);\n\nconst getBaseApi = axios.create({\n\tbaseURL: originPath,\n});\n\nexport default getBaseApi;\n","import coreApiList from '@/configFiles/apiFile/coreApiList.json';\nimport getCoreBaseApi from '../apiConfig/privateCloudCoreApis';\n\nexport default {\n refreshToken(data) {\n const config = {\n headers: {\n 'Content-Type': 'application/json',\n token: 'store.state.login.token',\n },\n };\n const returnObject = getCoreBaseApi.post(coreApiList.refreshToken, data, config);\n return returnObject;\n },\n logins(data) {\n return getCoreBaseApi.post(coreApiList.logins, data);\n },\n logout() {\n localStorage.removeItem('synFactoryUserID');\n localStorage.removeItem('synFactoryUserName');\n localStorage.removeItem('synFactoryPermission');\n localStorage.removeItem('synFactoryEmpID');\n const returnObject = getCoreBaseApi.get(coreApiList.logout);\n return returnObject;\n },\n //获取全部人员接口\n getEmployeeList(params) {\n return getCoreBaseApi.post(coreApiList.employeeList, params);\n },\n // ************************\n QueryMyPermission(params) {\n return getCoreBaseApi.get(coreApiList.QueryMyPermission, {\n params,\n });\n },\n // 查询分页配置API\n queryPageSetting(data) {\n return getCoreBaseApi.get(\n `${coreApiList.queryPageSetting}?permissionCode=${data.permissionCode}&pageType=${data.pageType}`,\n );\n },\n // 更新分页配置API\n updatePageSetting(data) {\n return getCoreBaseApi.post(coreApiList.updatePageSetting, data);\n },\n queryDeptAssigneeInfoList(data) {\n return getCoreBaseApi.post(coreApiList.queryDeptAssigneeInfoList, data);\n },\n //查询视图只读列表\n getViewOnlyReadList(data) {\n return getCoreBaseApi.post(coreApiList.getViewOnlyReadList, data);\n },\n //获取视图操作记录\n getViewOpLogList(data) {\n return getCoreBaseApi.post(coreApiList.getViewLogList, data);\n },\n //获取视图操作人员列表\n getViewEmployeeList(data) {\n return getCoreBaseApi.post(coreApiList.getViewOptEmployeeList, data);\n },\n\n //获取视图列表\n getViewList(data) {\n return getCoreBaseApi.post(coreApiList.getViewList, data);\n },\n //新增视图\n addView(data) {\n return getCoreBaseApi.post(coreApiList.addView, data);\n },\n //视图名称重复校验\n checkViewName(data) {\n return getCoreBaseApi.post(coreApiList.IsExistViewName, data);\n },\n //编辑视图\n editView(data) {\n return getCoreBaseApi.post(coreApiList.modifyView, data);\n },\n //删除视图\n deleteView(id) {\n return getCoreBaseApi.get(`${coreApiList.deleteView}?id=${id}`);\n },\n //获取视图详情\n getViewDetail(id, type) {\n return getCoreBaseApi.get(`${coreApiList.getViewTabDetail}?id=${id}&isCopy=${type}`);\n },\n //获取筛选字段\n getViewFilterList(data) {\n return getCoreBaseApi.post(coreApiList.getViewFieldList, data);\n },\n //视图排序\n viewSortList(data) {\n return getCoreBaseApi.post(coreApiList.upadateViewOrder, data);\n },\n //获取查阅权限人员列表\n getViewReadEmployeeList(data) {\n return getCoreBaseApi.post(coreApiList.getViewPermissionEmployeeList, data);\n },\n //查询人元列表\n getViewPersionList(data) {\n return getCoreBaseApi.post(coreApiList.getViewpersionList, data);\n },\n getCommonStaffList(data) {\n return getCoreBaseApi.post(coreApiList.getCommonStaffList, data);\n },\n};\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute('API/V1', 'baseApi_SynComponent/API/V1');\n\nconst getBaseApi = axios.create({\n baseURL: originPath,\n});\n\nexport default getBaseApi;","import baseApi from '../apiConfig/baseApis';\nimport baseApiList from '@/configFiles/apiFile/baseApiList';\n\nexport default {\n // 文件上传\n docCustomUpload(data) {\n const config = {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n };\n return baseApi.post(`${baseApiList.docCustomUpload}/${data.DocCode}/${data.DocCustomId}`, data.file, config);\n },\n // 查询单据自定义栏位\n querySetting(data) {\n const config = {\n headers: {\n 'Content-Type': 'application/json',\n },\n };\n return baseApi.post(baseApiList.querySetting, data, config);\n },\n // 单据自定义附件下载\n docDownloadFile(data) {\n const config = {\n headers: {\n 'Content-Type': 'application/json',\n },\n responseType: 'blob',\n };\n return baseApi.post(baseApiList.docDownloadFile, data, config);\n },\n // 更新列配置数据(最新版)\n updateColumnSettingNext(data) {\n const config = {\n headers: {\n 'Content-Type': 'application/json',\n },\n };\n return baseApi.put(baseApiList.updateColumnSettingNext, data, config);\n },\n // 查询列配置数据(最新版)\n queryColumnSettingNext(data) {\n const config = {\n headers: {\n 'Content-Type': 'application/json',\n },\n };\n return baseApi.post(baseApiList.queryColumnSettingNext, data, config);\n },\n // 新增或更新筛选条件\n insertOrUpdateFilterCondition(data) {\n return baseApi.post(baseApiList.insertOrUpdateFilterCondition, data);\n },\n // 查询筛选条件\n queryFilterCondition(data) {\n return baseApi.post(baseApiList.queryFilterCondition, data);\n },\n // 获取自定义筛选字段内容\n getFieldSetting(permissionCode) {\n return baseApi.get(`${baseApiList.getFieldSetting}?permissionCode=${permissionCode}`);\n },\n};\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute('MES/API/V1', 'mesApi_SynComponent/MES/API/V1');\n\nconst getBaseApi = axios.create({\n baseURL: originPath,\n});\n\nexport default getBaseApi;","import mesApiList from '@/configFiles/apiFile/mesApiList.json';\nimport mesApi from '../apiConfig/mesApis';\n\nexport default {\n // 生产工单页查询接口\n planFormulationQuery(data) {\n const returnObject = mesApi.post(mesApiList.planFormulationQuery, data);\n return returnObject;\n },\n // 报工审核查询接口\n GetReviewRecord(data) {\n const returnObject = mesApi.post(mesApiList.GetReviewRecord, data);\n return returnObject;\n },\n};\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute('MMS/API/V1', 'mmsApi_SynComponent/MMS/API/V1');\n\nconst getBaseApi = axios.create({\n baseURL: originPath,\n});\n\nexport default getBaseApi;","import mmsApiList from '@/configFiles/apiFile/mmsApiList.json';\nimport mmsApi from '../apiConfig/mmsApis';\n\nexport default {\n // 获取物料类别末级数据\n materialCategoryLastLevel() {\n return mmsApi.get(mmsApiList.materialCategoryLastLevel);\n },\n // *******************\n getAllMatreialTypeList(data) {\n return mmsApi.post(mmsApiList.allMatreialTypeList, data);\n },\n getMaterialList(data) {\n return mmsApi.post(mmsApiList.getMaterialList, data);\n },\n getMaterialImage(data) {\n const config = {\n responseType: 'blob',\n };\n return mmsApi.post(mmsApiList.getMaterialImage, data, config);\n },\n getMaterialCategory(data) {\n return mmsApi.post(mmsApiList.getMaterialCategory, data);\n },\n materialCategoryTreeStructure() {\n return mmsApi.get(mmsApiList.materialCategoryTreeStructure);\n },\n queryUnit(data) {\n return mmsApi.post(mmsApiList.queryUnit, data);\n },\n // 新增单位\n newUnit(data) {\n return mmsApi.post(mmsApiList.newUnit, data);\n },\n // 删除单位\n deleteUnit(materialUnitID) {\n return mmsApi.delete(mmsApiList.deleteUnit.replace(/{materialUnitID}/, materialUnitID));\n },\n getMaterialType(data) {\n return mmsApi.post(mmsApiList.getMaterialType, data);\n },\n updateMaterialImage(data) {\n const config = {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n };\n return mmsApi.put(mmsApiList.updateMaterialImage, data, config);\n },\n // 新增物料产品\n addMaterial(data) {\n return mmsApi.post(mmsApiList.material, data);\n },\n // 修改物料产品\n editMaterial(data) {\n return mmsApi.put(mmsApiList.material, data);\n },\n};\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute('SFC/API/V1', 'sfcApi_SynComponent/SFC/API/V1');\n\nconst getBaseApi = axios.create({\n baseURL: originPath,\n});\n\nexport default getBaseApi;\n","import sfcApiList from '@/configFiles/apiFile/sfcApiList.json';\nimport sfcApi from '../apiConfig/sfcApis.js';\n\nexport default {\n // 3.0-SFC 校验采购标签/库存标签数量\n quantityCheck(params) {\n return sfcApi.post(sfcApiList.quantityCheck, params);\n },\n // 3.0-SFC 批量新增标签(采购标签/即时库存)\n addTagBatch(params) {\n return sfcApi.post(sfcApiList.addTagBatch, params);\n },\n // 3.0-SFC 查询标签\n queryTags(params, cancelTokenSource) {\n const config = {\n headers: {\n 'Content-Type': 'application/json',\n },\n cancelToken: cancelTokenSource,\n };\n return sfcApi.post(sfcApiList.queryTags, params, config);\n },\n};\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute('PPM/API/V1', 'ppmApi_SynComponent/PPM/API/V1');\n\nconst getBaseApi = axios.create({\n baseURL: originPath,\n});\n\nexport default getBaseApi;\n","import ppmApiList from '@/configFiles/apiFile/ppmApiList.json';\nimport ppmApi from '../apiConfig/ppmApis.js';\n\nexport default {\n getSystemNumber(data) {\n return ppmApi.post(ppmApiList.getSystemNumber, data);\n },\n getBatchRuleList(data) {\n return ppmApi.post(ppmApiList.getBatchRuleList, data);\n },\n};\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute('WMS/API/V1', 'wmsApi_SynComponent/WMS/API/V1');\n\nconst getBaseApi = axios.create({\n baseURL: originPath,\n});\n\nexport default getBaseApi;\n","import wmsApi from '../apiConfig/wmsApis.js';\nimport wmsApiList from '@/configFiles/apiFile/wmsApiList.json';\nexport default {\n // 库存展示 查询所有料号 库存信息 ****************************\n information(params) {\n return wmsApi.post(wmsApiList.information, params);\n },\n // ***************************\n situation(data) {\n return wmsApi.post(wmsApiList.situation, data);\n },\n // 库存展示汇出信息查询 *********************\n informationExcel(data) {\n return wmsApi.post(wmsApiList.informationExcel, data);\n },\n queryStorageSpaceType(data) {\n return wmsApi.post(wmsApiList.queryStorageSpaceType, data);\n },\n // 查询仓库信息\n StoreCountGetStorageSetting(data) {\n return wmsApi.post(wmsApiList.StoreCountGetStorageSetting, data);\n },\n // 查询储位信息\n getLocationTable(data) {\n return wmsApi.get(\n `${wmsApiList.getLocationTable}?storageSpaceId=${data.storageSpaceId}&storageId=${data.storageId}&levelId=${data.levelId}`,\n );\n },\n // 查询客户信息\n getCustomerList(data) {\n return wmsApi.post(wmsApiList.getCustomerList, data);\n },\n // 查询供应商信息\n getManufacturerList(data) {\n return wmsApi.post(wmsApiList.getManufacturerList, data);\n },\n};\n","import axios from 'axios';\nimport serviceRoute from './serviceRoute';\n\nconst originPath = serviceRoute('PDM/API/V1', 'pdmApi_SynComponent/PDM/API/V1');\n\nconst getBaseApi = axios.create({\n baseURL: originPath,\n});\n\nexport default getBaseApi;","import pdmApi from '../apiConfig/pdmApis.js';\nimport pdmApiList from '@/configFiles/apiFile/pdmApiList.json';\nexport default {\n // 查询档案\n queryPlmFile(data) {\n let str = '';\n if (data.fileType === null || data.fileType === undefined) {\n str = `fileName=${data.fileName || ''}&count=${data.count}&startIndex=${data.startIndex}`;\n } else {\n str = `fileName=${data.fileName || ''}&fileTypeId=${data.fileType}&count=${data.count}&startIndex=${data.startIndex}`;\n }\n return pdmApi.get(`${pdmApiList.plmFile}?${str}`);\n },\n // 新增档案\n addPlmFile(data) {\n return pdmApi.post(pdmApiList.plmFile, data, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n },\n // 删除档案\n deletePlmFile(data) {\n return pdmApi.delete(pdmApiList.plmFile, { data });\n },\n // 批量检查档案是否存在\n plmFileIsExistBatch(data) {\n return pdmApi.post(pdmApiList.plmFileIsExistBatch, data);\n },\n getPlmFilePreviewStream(data) {\n const basicURL = pdmApiList.getPlmFilePreviewStream.replace('{fileVersion}', data.plmFileVersionId);\n return pdmApi.get(basicURL, { responseType: 'blob' });\n },\n downloadPlm(data) {\n return pdmApi.get(`${pdmApiList.downloadPlm}?plmFileVersionId=${data.plmFileVersionId}`, { responseType: 'blob' });\n },\n queryTemplate(body) {\n return pdmApi.post(pdmApiList.queryTemplate, body);\n },\n};\n","import privateCloudCoreApiFunction from './apis/privateCloudCoreApiFunction';\nimport baseApiFun from './apis/baseApiFunction';\nimport mesApiFun from './apis/mesApiFunction';\nimport mmsApiFun from './apis/mmsApiFunction';\nimport sfcApiFun from './apis/sfcApiFunction';\nimport ppmApiFun from './apis/ppmApiFunction';\nimport wmsApiFun from './apis/wmsApiFunction';\nimport pdmApiFun from './apis/pdmApiFunction';\nexport default {\n ...privateCloudCoreApiFunction,\n ...baseApiFun,\n ...mmsApiFun,\n ...mesApiFun,\n ...sfcApiFun,\n ...ppmApiFun,\n ...wmsApiFun,\n ...pdmApiFun,\n};\n","import errorCode from '@/configFiles/errorCode.json';\nimport apiFunction from './backendApiFunction.js';\nimport { ElMessage } from 'element-plus';\nimport i18n from '@/utils/i18n.js';\n\nconst delay = (times) =>\n\tnew Promise((resolve) => {\n\t\tsetTimeout(() => {\n\t\t\tconst timeAddTime = times + 1;\n\t\t\tresolve(timeAddTime);\n\t\t\treturn timeAddTime;\n\t\t}, 3000);\n\t});\nconst JumpLogin = () => {\n const BUILD_TYPE = process.env.NODE_ENV;\n if (BUILD_TYPE === 'production') {\n // 生产环境\n const { protocol } = window.location;\n const { hostname } = window.location;\n const { port } = window.location;\n window.location.href = `${protocol}//${hostname}:${port}/BASE/login`;\n } else if (BUILD_TYPE === 'development') {\n // 本地研发环境\n window.location.href = '/login';\n }\n};\nconst callRefreshAPI = async (action, prop, times) => {\n\tlet apiResult = {};\n\tawait apiFunction\n\t\t.refreshToken({\n\t\t\taccount: localStorage.synFactoryUserID,\n\t\t})\n\t\t.then(async (response) => {\n\t\t\tswitch (response.data.code) {\n\t\t\t\tcase errorCode.Success: {\n\t\t\t\t\tawait action(...prop)\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\tapiResult = res;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\tapiResult = err;\n\t\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// case errorCode.Token_Expired:\n\t\t\t\t// case errorCode.Cookie_Error:\n\t\t\t\t// case errorCode.Verify_Fail: {\n\t\t\t\t// \tapiFunction\n\t\t\t\t// \t\t.logout()\n\t\t\t\t// \t\t.then(() => {\n\t\t\t\t// \t\t\tJumpLogin();\n\t\t\t\t// \t\t})\n\t\t\t\t// \t\t.catch((err) => {\n\t\t\t\t// \t\t\tconsole.log(err);\n\t\t\t\t// \t\t});\n\t\t\t\t// \tapiResult = {};\n\t\t\t\t// \tbreak;\n\t\t\t\t// }\n\t\t\t\tdefault: {\n\t\t\t\t\tapiFunction\n\t\t\t\t\t\t.logout()\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tJumpLogin();\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t\t});\n\t\t\t\t\tapiResult = {};\n\t\t\t\t\tElMessage.error('Refresh Token Api Error!');\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t.catch(async (err) => {\n\t\t\tapiResult = err;\n\t\t\tconst timeAdd = await delay(times);\n\t\t\tif (timeAdd > 1) {\n\t\t\t\tElMessage.error(i18n.global.t('canNotGetToken'));\n\t\t\t\treturn apiResult;\n\t\t\t}\n\t\t\treturn await callRefreshAPI(action, prop, timeAdd);\n\t\t});\n\treturn apiResult;\n};\n\nconst retryExecute = async (action, parameter, times, shouldAlert) => {\n\ttry {\n\t\tconst result = await action(...parameter);\n\t\tif (result.data.code === errorCode.Verify_Fail || result.data.code === errorCode.Cookie_Error || result.data.code === errorCode.UserID_UnExist) {\n\t\t\tapiFunction\n\t\t\t\t.logout()\n\t\t\t\t.then(() => {\n\t\t\t\t\tJumpLogin();\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.log(err);\n\t\t\t\t});\n\t\t\treturn result;\n\t\t}\n\t\tif (result.data.code === errorCode.Token_Expired) {\n\t\t\treturn await callRefreshAPI(action, parameter, 0);\n\t\t}\n\t\treturn result;\n\t} catch (error) {\n\t\tconst timeAdd = await delay(times);\n\t\tif (timeAdd > 1) {\n\t\t\tif (shouldAlert) {\n\t\t\t\t// ElMessage.error(i18n.global.t('Syn_apiError'));\n\t\t\t\treturn error;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn await retryExecute(action, parameter, times + 1, shouldAlert);\n\t}\n};\n\n/**\n *\n * @param {object} apis apiFunction\n * @param {boolean}shouldAlert should alert when error\n * @returns {Object} proxy object\n */\nfunction createApiProxy(apis, shouldAlert = false) {\n\treturn new Proxy(apis, {\n\t\tget(...args) {\n\t\t\tconst allFunction = Reflect.get(...args);\n\t\t\treturn async function thisFun(...param) {\n\t\t\t\treturn retryExecute(allFunction, param, 0, shouldAlert);\n\t\t\t};\n\t\t},\n\t});\n}\n\nconst nonAlertProxy = createApiProxy(apiFunction);\nconst proxyObj = createApiProxy(apiFunction, true);\n\nexport default proxyObj;\nexport { nonAlertProxy };\n","<template>\n <el-pagination\n v-model:current-page=\"pageInfo.page\"\n v-model:page-size=\"pageInfo.size\"\n class=\"pagination-table\"\n :page-sizes=\"[5, 10, 20, 50, 100, 200]\"\n :disabled=\"!total\"\n background\n layout=\"slot, sizes, prev, pager, next, jumper\"\n :total=\"total\"\n :pager-count=\"pagerCount\"\n :data-test-id=\"`${dataTestId}-EL-PAGINATION-fvu9sB`\"\n @size-change=\"handleSizeChange\"\n @current-change=\"handleCurrentChange\"\n >\n <div class=\"slot_style\" :data-test-id=\"`${dataTestId}-DIV-yISBZh`\">\n <span :data-test-id=\"`${dataTestId}-SPAN-lX8Y8q`\">{{ $t('currentCount', { currentSize: currentCount }) }},</span>\n <span v-if=\"hasSelected\" :data-test-id=\"`${dataTestId}-SPAN-BlXSV7`\">\n {{ $t('selectedRecordsNum', { selectedNum: selectedNum }) }},\n </span>\n <span :data-test-id=\"`${dataTestId}-SPAN-qnY4fg`\">{{ $t('allRecordsNum', { total: total }) }}</span>\n </div>\n </el-pagination>\n</template>\n\n<script setup>\nimport { ref, watch, onMounted } from 'vue';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism.js';\n\nconst props = defineProps({\n total: {\n type: Number,\n default: 0,\n },\n currentPage: {\n type: Number,\n default: 1,\n },\n pageSize: {\n type: Number,\n default: 20,\n },\n selectedNum: {\n type: Number,\n default: 0,\n },\n hasSelected: {\n type: Boolean,\n default: false,\n },\n currentCount: {\n type: Number,\n default: 0,\n },\n pagerCount: {\n type: Number,\n default: 7,\n },\n dataTestId: {\n // data-test-id\n type: String,\n default: '',\n },\n pageType: {\n type: Number,\n default: 1,\n },\n permissionCode: {\n type: String,\n default: '',\n },\n});\nconst emits = defineEmits(['changePage']);\nconst pageInfo = ref({\n page: props.currentPage,\n size: props.pageSize,\n});\n\nfunction changePage() {\n emits('changePage', pageInfo.value);\n}\n\nfunction handleSizeChange(val) {\n pageInfo.value.size = val;\n changePage(pageInfo);\n if (props.permissionCode) {\n // 更新分页显示条数\n apiFunction.updatePageSetting({\n permissionCode: props.permissionCode,\n pageNumber: val,\n pageType: props.pageType,\n });\n }\n}\n\nfunction handleCurrentChange(val) {\n pageInfo.value.page = val;\n changePage(pageInfo);\n}\nwatch(\n () => props.currentPage,\n (val) => {\n pageInfo.value.page = val;\n },\n);\nonMounted(() => {\n if (props.permissionCode) {\n // 查询分页显示条数\n apiFunction\n .queryPageSetting({\n permissionCode: props.permissionCode,\n pageType: props.pageType,\n })\n .then((res) => {\n if (res.data.code === 0) {\n pageInfo.value.size = parseInt(res.data.content.pageNumber, 10);\n changePage(pageInfo);\n }\n });\n }\n});\n</script>\n\n<style scoped>\n.pagination-table {\n display: flex;\n justify-content: end;\n width: 100%;\n margin: 0;\n box-sizing: border-box;\n position: relative;\n}\n\n.slot_style {\n width: 15rem;\n position: absolute;\n left: 0;\n}\n</style>\n","<template>\n <div>\n <el-form\n v-for=\"(item, index) in filterConditions\"\n ref=\"filterForm\"\n :key=\"index\"\n :model=\"item\"\n :rules=\"getRules(item)\"\n :data-test-id=\"`EL-FORM-t4nN1q-${index}`\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-i6hi71\">\n <!-- 字段选择 -->\n <el-col :span=\"6\" data-test-id=\"EL-COL-YtO6It\">\n <el-form-item\n :label=\"isItDefault ? t('Syn_dataFilter') : ''\"\n prop=\"CloumnName\"\n data-test-id=\"EL-FORM-ITEM-X2DfMG\"\n >\n <el-select\n v-model=\"item.CloumnName\"\n filterable\n data-test-id=\"EL-SELECT-Tla5bC\"\n @change=\"handleChangeColumn($event, index)\"\n >\n <el-option\n v-for=\"(it, index) in fieldSetting\"\n :key=\"it.key\"\n :label=\"t(it.fieldName)\"\n :value=\"it.key\"\n :disabled=\"\n filterConditions.some((item) => item.CloumnName === it.key) ||\n otherFilterConditions.some((item) => item.CloumnName === it.key)\n \"\n :data-test-id=\"`EL-OPTION-24JqP4-${index}`\"\n />\n </el-select>\n </el-form-item>\n </el-col>\n\n <!-- 操作符 -->\n <el-col v-if=\"item.CloumnName\" :span=\"4\" data-test-id=\"EL-COL-o6tUCn\">\n <el-form-item prop=\"Operator\" data-test-id=\"EL-FORM-ITEM-lwyEu4\">\n <el-select\n v-model=\"item.Operator\"\n :placeholder=\"t('Syn_selectOperation')\"\n data-test-id=\"EL-SELECT-B8JVKa\"\n @change=\"handleChangeOperator($event, index)\"\n >\n <el-option\n v-for=\"(it, index) in operatorOptionsFunction(item.ColumnType)\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-698Ga6-${index}`\"\n />\n </el-select>\n </el-form-item>\n\n <!-- StartOrEnd(仅类型4) -->\n <el-form-item v-if=\"item.ColumnType === 4\" prop=\"StartOrEnd\" data-test-id=\"EL-FORM-ITEM-iI09Nl\">\n <el-select\n v-model=\"item.StartOrEnd\"\n style=\"margin-top: 1rem\"\n :placeholder=\"t('Syn_startOrEndTime')\"\n data-test-id=\"EL-SELECT-hYLMt4\"\n >\n <el-option\n v-for=\"(it, index) in startOrEndOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-qkQDv6-${index}`\"\n />\n </el-select>\n </el-form-item>\n </el-col>\n\n <!-- 值输入 -->\n <el-col v-if=\"item.Operator && ![9, 10].includes(item.Operator)\" :span=\"12\" data-test-id=\"EL-COL-bWX9Cb\">\n <!-- 文本 / 附件 / 超链接 -->\n <el-form-item\n v-if=\"isTextLikeType(item.ColumnType) && isTextOperator(item.Operator)\"\n prop=\"TextValue\"\n data-test-id=\"EL-FORM-ITEM-MaRru1\"\n >\n <el-input v-model=\"item.TextValue\" :placeholder=\"t('Syn_inputText')\" clearable data-test-id=\"EL-INPUT-RoUXuD\" />\n </el-form-item>\n\n <!-- 数字范围 -->\n <el-form-item\n v-else-if=\"item.ColumnType === 2 && [13, 14].includes(item.Operator)\"\n prop=\"NumberRangeValue\"\n data-test-id=\"EL-FORM-ITEM-vLLx0f\"\n >\n <el-input-number\n v-model=\"item.NumberRangeValue[0]\"\n :max=\"item.NumberRangeValue[1] ?? Number.MAX_SAFE_INTEGER\"\n :controls=\"false\"\n :placeholder=\"t('Syn_minValue')\"\n disabled-scientific\n clearable\n data-test-id=\"EL-INPUT-NUMBER-nxVp98\"\n />\n <span data-test-id=\"SPAN-aJGkhM\"> - </span>\n <el-input-number\n v-model=\"item.NumberRangeValue[1]\"\n :min=\"item.NumberRangeValue[0] ?? Number.MIN_SAFE_INTEGER\"\n :controls=\"false\"\n :placeholder=\"t('Syn_maxValue')\"\n disabled-scientific\n clearable\n data-test-id=\"EL-INPUT-NUMBER-BhVdW7\"\n />\n <el-button type=\"text\" data-test-id=\"EL-BUTTON-1EWCV6\" @click=\"handleNumberValidate(index)\">\n <i class=\"mdi mdi-close\" data-test-id=\"I-a2oGJf\" />\n </el-button>\n </el-form-item>\n\n <!-- 单选/多选 -->\n <el-form-item\n v-else-if=\"isSelectType(item.ColumnType) && [15, 16].includes(item.Operator)\"\n prop=\"SelectRangeValue\"\n data-test-id=\"EL-FORM-ITEM-tjsXva\"\n >\n <el-select\n v-model=\"item.SelectRangeValue\"\n collapse-tags\n collapse-tags-tooltip\n multiple\n filterable\n reserve-keyword\n :placeholder=\"t('Syn_selectOptions')\"\n clearable\n data-test-id=\"EL-SELECT-3wxMW0\"\n :filter-method=\"(query) => handleSelectFilter(query, index)\"\n >\n <el-option\n v-for=\"(opt, index) in filteredOptionsMap[item.CloumnName] ||\n fieldSelectOptionsFunction(item.CloumnName).slice(0, 200)\"\n :key=\"opt.value\"\n :label=\"t(opt.label)\"\n :value=\"opt.value\"\n :data-test-id=\"`EL-OPTION-5wrWi6-${index}`\"\n />\n </el-select>\n </el-form-item>\n <el-form-item\n v-else-if=\"isSelectType(item.ColumnType) && [5].includes(item.Operator)\"\n prop=\"SingleSelectValue\"\n data-test-id=\"EL-FORM-ITEM-tjsXvb\"\n >\n <el-select\n v-model=\"item.SingleSelectValue\"\n collapse-tags\n collapse-tags-tooltip\n filterable\n :placeholder=\"t('Syn_selectOptions')\"\n clearable\n reserve-keyword\n data-test-id=\"EL-SELECT-3wxMWS\"\n :filter-method=\"(query) => handleSelectFilter(query, index)\"\n >\n <el-option\n v-for=\"(opt, index) in filteredOptionsMap[item.CloumnName] ||\n fieldSelectOptionsFunction(item.CloumnName).slice(0, 200)\"\n :key=\"opt.value\"\n :label=\"t(opt.label)\"\n :value=\"opt.value\"\n :data-test-id=\"`EL-OPTION-5wrWi5-${index}`\"\n />\n </el-select>\n </el-form-item>\n\n <!-- 日期单值 -->\n <el-form-item\n v-else-if=\"isDateType(item.ColumnType) && [1, 2, 3, 4, 5].includes(item.Operator)\"\n prop=\"DateTimeOperatorValue\"\n data-test-id=\"EL-FORM-ITEM-932Tco\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-CWWfMC\">\n <el-col :span=\"6\" data-test-id=\"EL-COL-3tGiBz8\">\n <el-select\n v-model=\"item.DateTimeOperatorValue.TimeType\"\n :placeholder=\"t('Syn_timePrecision')\"\n clearable\n data-test-id=\"EL-SELECT-nphb5z\"\n >\n <el-option\n v-for=\"(it, index) in timePrecisionOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-7foEY9-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"18\" data-test-id=\"EL-COL-rxXI8U\">\n <el-date-picker\n v-model=\"item.DateTimeOperatorValue.TimeValue\"\n :type=\"item.DateTimeOperatorValue.TimeType === 0 ? 'date' : 'datetime'\"\n :format=\"timePrecisionOptionsFunction(item.DateTimeOperatorValue.TimeType)\"\n value-format=\"x\"\n :placeholder=\"t('Syn_selectTime')\"\n clearable\n data-test-id=\"EL-DATE-PICKER-BFwrVh\"\n />\n </el-col>\n </el-row>\n </el-form-item>\n\n <!-- 日期范围 -->\n <el-form-item\n v-else-if=\"isDateType(item.ColumnType) && item.Operator === 11\"\n prop=\"DateTimeRangeValue\"\n data-test-id=\"EL-FORM-ITEM-nM49hw\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-zZIFj0\">\n <el-col :span=\"6\" data-test-id=\"EL-COL-k6LrJP\">\n <el-select\n v-model=\"item.DateTimeRangeValue.TimeType\"\n :placeholder=\"t('Syn_timePrecision')\"\n clearable\n data-test-id=\"EL-SELECT-93yQnb\"\n >\n <el-option\n v-for=\"(it, index) in timePrecisionOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-WuL5hF-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"24\" data-test-id=\"EL-COL-Zy3UKA\">\n <el-date-picker\n :key=\"componentKey\"\n v-model=\"item.DateTimeRangeValue.TimeValue\"\n style=\"width: 90%; margin-top: 1rem\"\n :type=\"item.DateTimeRangeValue.TimeType === 0 ? 'daterange' : 'datetimerange'\"\n :format=\"timePrecisionOptionsFunction(item.DateTimeRangeValue.TimeType)\"\n value-format=\"x\"\n clearable\n range-separator=\"-\"\n :start-placeholder=\"t('Syn_starttime')\"\n :end-placeholder=\"t('Syn_endtime')\"\n data-test-id=\"EL-DATE-PICKER-fPXNSn\"\n @clear=\"item.DateTimeRangeValue.TimeValue = []\"\n @change=\"(() => {\n componentKey++\n })\"\n />\n </el-col>\n </el-row>\n </el-form-item>\n\n <!-- 动态筛选 -->\n <el-form-item\n v-else-if=\"isDateType(item.ColumnType) && item.Operator === 12\"\n prop=\"DateTimeDynamicFilteringValue\"\n data-test-id=\"EL-FORM-ITEM-3pz54d\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-wcwmDm\">\n <el-col :span=\"12\" data-test-id=\"EL-COL-1WOBcB\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringValue.DateType\"\n :placeholder=\"t('dynamicFiltering')\"\n clearable\n data-test-id=\"EL-SELECT-93zW0f\"\n @change=\"handleDateTimeDynamicFilteringValueChange($event, index)\"\n >\n <el-option\n v-for=\"(it, index) in dynamicFilteringOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-j2Gto6-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"8\">\n <div style=\"width: 200px\" data-test-id=\"DIV-oQYQZI\" />\n </el-col>\n </el-row>\n </el-form-item>\n\n <!-- 自定义单区间 -->\n <el-form-item\n v-if=\"\n item.DateTimeDynamicFilteringValue.DateType === 0 || item.DateTimeDynamicFilteringValue.DateType === 1\n \"\n prop=\"DateTimeDynamicFilteringCustomize\"\n data-test-id=\"EL-FORM-ITEM-oKi0MK\"\n >\n <el-col v-if=\"item.DateTimeDynamicFilteringValue.DateType === 0\" :span=\"24\" data-test-id=\"EL-COL-5XNCgU\">\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-zHGl1c\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-tTDMtb\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].PastOrFuture\"\n :placeholder=\"t('Syn_pastOrFuture')\"\n clearable\n data-test-id=\"EL-SELECT-xifi4x\"\n >\n <el-option\n v-for=\"(it, index) in pastOrFutureOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-0ql2zr-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-T5qcri\">\n <el-input-number\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].NumberValue\"\n :min=\"1\"\n :max=\"365\"\n :precision=\"0\"\n :controls=\"false\"\n style=\"width: 100%\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-RYLnRt\"\n />\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-JlxABO\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].DayType\"\n :placeholder=\"t('Syn_unit')\"\n clearable\n data-test-id=\"EL-SELECT-8Lpazq\"\n >\n <el-option\n v-for=\"(it, index) in dayTypeOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-ncuVRo-${index}`\"\n />\n </el-select>\n </el-col>\n </el-row>\n </el-col>\n\n <!-- 自定义双区间 -->\n <el-col\n v-else-if=\"item.DateTimeDynamicFilteringValue.DateType === 1\"\n :span=\"24\"\n data-test-id=\"EL-COL-eM8opS\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-lcZ8pe\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-7j3j0p\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].PastOrFuture\"\n :placeholder=\"t('Syn_pastOrFuture')\"\n clearable\n data-test-id=\"EL-SELECT-FjHTpQ\"\n >\n <el-option\n v-for=\"(it, index) in pastOrFutureOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-xpcYp5-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-JnQ12D\">\n <el-input-number\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].NumberValue\"\n :min=\"1\"\n :max=\"365\"\n :precision=\"0\"\n :controls=\"false\"\n style=\"width: 100%\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-3lwksG\"\n />\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-ms7sgy\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].DayType\"\n :placeholder=\"t('Syn_unit')\"\n clearable\n data-test-id=\"EL-SELECT-fgZOLb\"\n >\n <el-option\n v-for=\"(it, index) in dayTypeOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-Q07Tx8-${index}`\"\n />\n </el-select>\n </el-col>\n </el-row>\n <el-row :gutter=\"10\" style=\"margin-top: 1rem\" data-test-id=\"EL-ROW-XkOYka\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-dLQQRb\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[1].PastOrFuture\"\n :placeholder=\"t('Syn_pastOrFuture')\"\n clearable\n data-test-id=\"EL-SELECT-ZNyGMx\"\n >\n <el-option\n v-for=\"(it, index) in pastOrFutureOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-nlnE2g-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-3uTjYF\">\n <el-input-number\n v-model=\"item.DateTimeDynamicFilteringCustomize[1].NumberValue\"\n :min=\"1\"\n :max=\"365\"\n :precision=\"0\"\n :controls=\"false\"\n style=\"width: 100%\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-w1GgpV\"\n />\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-wDLRGi\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[1].DayType\"\n :placeholder=\"t('Syn_unit')\"\n clearable\n data-test-id=\"EL-SELECT-3d7Hyz\"\n >\n <el-option\n v-for=\"(it, index) in dayTypeOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-wkFjZV-${index}`\"\n />\n </el-select>\n </el-col>\n </el-row>\n </el-col>\n </el-form-item>\n </el-col>\n <el-col v-if=\"!isItDefault\" :span=\"2\" data-test-id=\"EL-COL-7VbmTB\">\n <!-- 删除按钮 -->\n <el-button type=\"text\" data-test-id=\"EL-BUTTON-f9487D\" @click=\"removeFilter(index)\">\n <i class=\"mdi mdi-close\" data-test-id=\"I-lr2pJ2\" />\n </el-button>\n </el-col>\n </el-row>\n </el-form>\n </div>\n</template>\n<script setup>\nimport { ref, nextTick, watch, onMounted } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { ElMessageBox, ElMessage } from 'element-plus';\n\nconst { t } = useI18n();\nconst props = defineProps({\n filterConditions: {\n type: Array,\n default: () => [],\n }, // 筛选条件\n fieldSetting: {\n type: Array,\n default: () => [],\n }, // 筛选条件内容的字段配置\n isItDefault: {\n type: Boolean,\n default: false,\n }, // 是否默认筛选条件\n otherFilterConditions: {\n type: Array,\n default: () => [],\n }, // 其他筛选条件\n selectOptions: {\n type: Object,\n default: function () {\n return {};\n },\n }, // 外部传入的筛选选项数据\n});\nconst componentKey = ref(1);\nconst { filterConditions, fieldSetting, isItDefault, otherFilterConditions } = props;\n// 工具函数:判断字段类型\nconst isTextLikeType = (type) => [1, 5, 6].includes(type); // 文本、附件、超链接\nconst isSelectType = (type) => [7, 8].includes(type); // 单选、多选\nconst isDateType = (type) => [3, 4].includes(type); // 日期、日期范围\nconst isTextOperator = (op) => [5, 6, 7, 8].includes(op); // 等于、包含等\n\nconst filterForm = ref([]);\n// 过滤选项映射\nconst filteredOptionsMap = ref({});\n// 搜索关键词映射\nconst searchKeywords = ref({});\n// 验证规则动态生成\nconst getRules = (item) => {\n const rules = {};\n\n if (![9, 10].includes(item?.Operator)) {\n if (item.ColumnType === 2 && [13, 14].includes(item.Operator)) {\n rules.NumberRangeValue = [\n {\n validator: (rule, value, callback) => {\n if (value.length === 1 && value[0] !== null) {\n return callback(new Error(t('Syn_inputValidRange')));\n }\n if (value.length === 2 && (value[0] === null) !== (value[1] === null)) {\n return callback(new Error(t('Syn_inputValidRange')));\n }\n if (value.length === 2 && value[0] !== null && value[1] !== null && value[0] > value[1]) {\n return callback(new Error(t('Syn_startValueCannotGreaterThanEndValue')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n }\n }\n\n return rules;\n};\n/**\n * 数字范围验证\n * @param index 筛选条件索引\n */\nconst handleNumberValidate = (index) => {\n filterConditions[index].NumberRangeValue = [];\n filterForm.value[index].clearValidate('NumberRangeValue');\n filterForm.value[index].validateField('NumberRangeValue');\n};\n\n/* 时间精度 */\nconst timePrecisionOptions = ref([\n { value: 0, label: 'daily', timeFormat: 'YYYY-MM-DD' },\n { value: 1, label: 'hour', timeFormat: 'YYYY-MM-DD HH' },\n { value: 2, label: 'minute', timeFormat: 'YYYY-MM-DD HH:mm' },\n { value: 3, label: 'second', timeFormat: 'YYYY-MM-DD HH:mm:ss' },\n]);\n/**\n * 时间精度选项\n * @param timeType 时间精度\n * @returns 时间格式\n */\nconst timePrecisionOptionsFunction = (timeType) => {\n return timePrecisionOptions.value.find((item) => item.value === timeType)?.timeFormat;\n};\n/* 动态筛选 */\nconst dynamicFilteringOptions = ref([\n { value: 2, label: 'today' },\n { value: 3, label: 'yesterday' },\n { value: 4, label: 'thisWeek' },\n { value: 5, label: 'lastWeek' },\n { value: 6, label: 'thisMonth' },\n { value: 7, label: 'lastMonth' },\n { value: 8, label: 'lastThreeMonths' },\n { value: 0, label: 'custom' },\n { value: 1, label: 'customRange' },\n]);\n/* 动态筛选自定义筛选 */\nconst pastOrFutureOptions = ref([\n { value: 0, label: 'past' },\n { value: 1, label: 'future' },\n]);\n/* 动态筛选自定义筛选时间类型 */\nconst dayTypeOptions = ref([\n { value: 1, label: 'daily' },\n { value: 2, label: 'week' },\n { value: 3, label: 'month' },\n { value: 4, label: 'quarter' },\n { value: 5, label: 'year' },\n]);\n/* 筛选条件内容的字段类型为4时,判断逻辑选项 */\nconst startOrEndOptions = ref([\n { value: 0, label: 'intervalStart' },\n { value: 1, label: 'intervalEnd' },\n]);\n/* 判断逻辑 */\nconst operatorOptions = ref([\n { value: 1, label: 'greaterThan' },\n { value: 2, label: 'greaterThanOrEqualTo' },\n { value: 3, label: 'lessThan' },\n { value: 4, label: 'lessThanOrEqualTo' },\n { value: 5, label: 'equalTo' },\n { value: 6, label: 'notEqualTo' },\n { value: 7, label: 'contains' },\n { value: 8, label: 'notContains' },\n { value: 9, label: 'yesEmpty' },\n { value: 10, label: 'notEmpty' },\n { value: 11, label: 'selectRange' },\n { value: 12, label: 'dynamicFiltering' },\n { value: 13, label: 'inRange' },\n { value: 14, label: 'notInRange' },\n { value: 15, label: 'isOneOf' },\n { value: 16, label: 'notAnyOf' },\n]);\n/**\n * 筛选条件内容的字段类型改变时,判断逻辑选项改变\n * @param fieldTypeId 筛选条件内容的字段类型\n * @returns 筛选条件内容的判断逻辑选项\n */\nconst operatorOptionsFunction = (fieldTypeId) => {\n const mapping = {\n 1: [5, 6, 7, 8, 9, 10], // 文本\n 2: [9, 10, 13, 14], // 数字\n 3: [1, 2, 3, 4, 5, 9, 10, 11, 12], // 日期\n 4: [1, 2, 3, 4, 5, 9, 10, 11, 12], // 日期范围\n 5: [5, 6, 7, 8, 9, 10], // 附件\n 6: [5, 6, 7, 8, 9, 10], // 超链接\n 7: [5], // 单选\n 8: [9, 10, 15, 16], // 多选\n };\n const allowed = mapping[fieldTypeId] || [];\n return operatorOptions.value.filter((op) => allowed.includes(op.value));\n};\n/**\n * 筛选条件内容的字段类型改变时,判断逻辑选项改变\n * @param columnName 筛选条件内容的字段类型\n * @returns 筛选条件内容的判断逻辑选项\n */\nconst fieldSelectOptionsFunction = (columnName) => {\n // 添加输入验证,确保columnName是有效的字符串\n if (columnName === null || columnName === undefined) {\n return [];\n }\n try {\n // 从字段配置中获取选项\n const dataSource = Array.isArray(fieldSetting) ? fieldSetting : [];\n const field = dataSource.find((f) => f && f.key === columnName);\n // 选择类型字段(单选/多选)\n if (field.fieldSelectOptions) {\n try {\n const opts = JSON.parse(field.fieldSelectOptions);\n return Array.isArray(opts)\n ? opts.map((opt) => ({\n label: field.isDoc ? opt : opt ? opt.key || opt.label || opt.value : '',\n value: field.isDoc ? opt : opt ? opt.value : '',\n }))\n : [];\n } catch (jsonError) {\n ElMessage.error(t('Syn_apiError'));\n }\n }\n if (props.selectOptions && typeof props.selectOptions === 'object') {\n // 1.直接通过字段名配置\n if (props.selectOptions[columnName]) {\n return Array.isArray(props.selectOptions[columnName]) ? props.selectOptions[columnName] : [];\n }\n // 2.通过类型配置(例如xxxOptions)\n const typeOptionsKey = Object.keys(props.selectOptions).find(\n (key) => key.endsWith('Options') && columnName.includes(key.replace('Options', '')),\n );\n if (typeOptionsKey) {\n return Array.isArray(props.selectOptions[typeOptionsKey]) ? props.selectOptions[typeOptionsKey] : [];\n }\n }\n return [];\n } catch (e) {\n return [];\n }\n};\n/**\n * 筛选条件内容的字段类型改变时,赋默认值\n * @param type 筛选条件内容的字段类型\n */\nconst fieldTypeFun = (type) => {\n if ([1, 5, 6].includes(type)) {\n return 5;\n }\n if (type === 2) {\n return 13;\n }\n if ([3, 4].includes(type)) {\n return 11;\n }\n if (type === 7) {\n return 5;\n }\n if (type === 8) {\n return 15;\n }\n return null;\n};\n/**\n * 筛选条件内容的字段类型改变时,判断逻辑选项改变\n * @param value 筛选条件内容的字段类型\n * @param index 筛选条件的索引\n */\nconst handleChangeColumn = (value, index) => {\n const field = props.fieldSetting.find((f) => f.key === value);\n const item = filterConditions[index];\n Object.assign(item, {\n CloumnName: value,\n ColumnType: field?.fieldTypeId,\n Operator: fieldTypeFun(field?.fieldTypeId),\n StartOrEnd: null,\n TextValue: null,\n IsCustomSetting: field?.isDoc,\n DocCustomId: field?.isDoc ? field.key : null,\n NumberRangeValue: [],\n SelectRangeValue: [],\n SingleSelectValue: null,\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: [3, 4].includes(field?.fieldTypeId) ? 0 : null, TimeValue: [] },\n DateTimeDynamicFilteringValue: { DateType: null },\n DateTimeDynamicFilteringCustomize: [\n { PastOrFuture: null, NumberValue: null, DayType: null },\n { PastOrFuture: null, NumberValue: null, DayType: null },\n ],\n });\n};\n/**\n *\n * @param value 筛选条件内容的判断逻辑\n * @param index 筛选条件的索引\n */\nconst handleChangeOperator = (value, index) => {\n const item = filterConditions[index];\n // 清空无关字段\n Object.assign(item, {\n TextValue: null,\n NumberRangeValue: [],\n SelectRangeValue: [],\n SingleSelectValue: null,\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: null, TimeValue: [] },\n DateTimeDynamicFilteringValue: { DateType: null },\n DateTimeDynamicFilteringCustomize: [\n { PastOrFuture: null, NumberValue: null, DayType: null },\n { PastOrFuture: null, NumberValue: null, DayType: null },\n ],\n });\n};\n/**\n * 动态筛选自定义筛选时间类型改变时,判断逻辑选项改变\n * @param value 动态筛选自定义筛选时间类型\n * @param index 筛选条件的索引\n */\nconst handleDateTimeDynamicFilteringValueChange = (value, index) => {\n const item = filterConditions[index];\n item.DateTimeDynamicFilteringCustomize = [\n { PastOrFuture: null, NumberValue: null, DayType: null },\n { PastOrFuture: null, NumberValue: null, DayType: null },\n ];\n};\n/**\n * 删除筛选条件\n * @param index 筛选条件的索引\n */\nconst removeFilter = (index) => {\n ElMessageBox.confirm(t('Syn_confirmToDelete'), t('Syn_confirmDelete'), {\n confirmButtonText: t('Syn_confirm'),\n cancelButtonText: t('Syn_cancel'),\n type: 'warning',\n }).then(() => {\n filterConditions.splice(index, 1);\n // emit('update:filterConditions', filterConditions);\n });\n};\n// 处理选择框过滤\nconst handleSelectFilter = (query, index) => {\n const item = filterConditions[index];\n const columnName = item.CloumnName;\n // 保存搜索关键词\n searchKeywords.value[columnName] = query;\n // 获取所有选项\n const allOptions = fieldSelectOptionsFunction(columnName);\n if (!query) {\n // 如果没有搜索关键词,只显示前200个选项\n filteredOptionsMap.value[columnName] = allOptions.slice(0, 200);\n } else {\n // 如果有搜索关键词,过滤并只显示前200个匹配的选项\n filteredOptionsMap.value[columnName] = allOptions\n .filter((option) => option.label.toLowerCase().includes(query.toLowerCase()))\n .slice(0, 200);\n }\n};\n// 监听字段变化,重置过滤选项\nwatch(\n () => filterConditions,\n (newConditions) => {\n newConditions.forEach((item, index) => {\n if (isSelectType(item.ColumnType)) {\n handleSelectFilter(searchKeywords.value[item.CloumnName] || '', index);\n }\n });\n },\n { deep: true },\n);\n// 初始化过滤选项\nconst initFilteredOptions = () => {\n filterConditions.forEach((item, index) => {\n if (isSelectType(item.ColumnType)) {\n handleSelectFilter('', index);\n }\n });\n};\n// 暴露提交方法\nconst validateAllForms = async () => {\n await nextTick();\n try {\n await Promise.all(filterForm.value.map((form) => form?.validate?.() || Promise.resolve()));\n return true;\n } catch (error) {\n ElMessage.error(t('Syn_checkForm'));\n return false;\n }\n};\ndefineExpose({ validateAllForms });\nonMounted(() => {\n initFilteredOptions();\n});\n</script>\n<style scoped lang=\"scss\"></style>\n","<template>\n <div v-loading=\"!isLoad\" data-test-id=\"DIV-Ydf0yz\">\n <div data-test-id=\"DIV-uWyNOt\">\n <el-row data-test-id=\"EL-ROW-Qs8O6C\">\n <el-col :span=\"15\" data-test-id=\"EL-COL-7SqxcZ\">\n <filterCriteria\n v-if=\"isLoad\"\n ref=\"defaultFilterRef\"\n :is-it-default=\"true\"\n :filter-conditions=\"defaultFilterConditions\"\n :other-filter-conditions=\"extraFilterConditions\"\n :field-setting=\"fieldSetting\"\n :select-options=\"selectOptions\"\n data-test-id=\"FILTERCRITERIA-1hVwQx\"\n />\n </el-col>\n <el-col :span=\"9\" align=\"center\" data-test-id=\"EL-COL-jTNbYx\">\n <div class=\"button-container\" data-test-id=\"DIV-jtoMT9\">\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-heY1hB\" @click=\"handleSearch(true)\">\n <i class=\"mdi mdi-magnify\" data-test-id=\"I-tbxET9\" />\n {{ t('query') }}\n </el-button>\n <el-popover\n ref=\"popoverRef\"\n :visible=\"visible\"\n placement=\"bottom-start\"\n width=\"800\"\n trigger=\"click\"\n data-test-id=\"EL-POPOVER-fMMv4b\"\n >\n <div v-loading=\"loading\" data-test-id=\"DIV-u82ZkA\">\n <filterCriteria\n v-if=\"visible\"\n ref=\"extraFilterRef\"\n :is-it-default=\"false\"\n :filter-conditions=\"extraFilterConditions\"\n :other-filter-conditions=\"defaultFilterConditions\"\n :field-setting=\"fieldSetting\"\n :select-options=\"selectOptions\"\n data-test-id=\"FILTERCRITERIA-1hVwQx\"\n />\n <el-text\n class=\"title-content cursor mx-1\"\n type=\"primary\"\n data-test-id=\"EL-TEXT-fiYiUY\"\n @click=\"addFilterCondition\"\n >\n <v-icon class=\"mdi mdi-plus\" data-test-id=\"V-ICON-RTH8U1\" />\n {{ t('Syn_addFilterCriteria') }}\n </el-text>\n </div>\n <template #reference>\n <el-button data-test-id=\"EL-BUTTON-AzDm8o\" @click=\"handleMoreFilter\">\n <i class=\"mdi mdi-cog\" data-test-id=\"I-tbxET9\" />\n {{ t('Syn_moreFilter') }}\n </el-button>\n </template>\n </el-popover>\n <el-button data-test-id=\"EL-BUTTON-f5txPo\" @click=\"handleReset\">{{ t('Syn_reset') }}</el-button>\n <columnConfigNext\n v-if=\"hasColumnConfig\"\n :parent-items=\"canEditHeaders\"\n :child-items=\"childItems\"\n :is-parent-checkbox=\"isParentCheckbox\"\n :is-child-checkbox=\"isChildCheckbox\"\n :is-child=\"isChild\"\n :parent-label=\"parentLabel\"\n :child-label=\"childLabel\"\n :disabled=\"disabledColumnConfig\"\n data-test-id=\"COLUMNCONFIGNEXT-fZb3uK\"\n @parentSaveData=\"parentSaveData\"\n @childSaveData=\"childSaveData\"\n />\n </div>\n </el-col>\n </el-row>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, nextTick, onBeforeUnmount, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport columnConfigNext from '@/components/columnConfigNext.vue';\nimport filterCriteria from '@/components/customFilter/filterCriteria.vue';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport { ElMessage } from 'element-plus';\nconst { t } = useI18n();\nconst emit = defineEmits(['filterSearch', 'parentSaveData', 'childSaveData']);\nconst props = defineProps({\n hasColumnConfig: {\n type: Boolean,\n default: true,\n },\n canEditHeaders: Array, // 父表头列配置\n permissionCode: String,\n childItems: Array,\n // 是否禁用列配置\n disabledColumnConfig: {\n type: Boolean,\n default: false,\n },\n // 父表头是否显示复选框\n isParentCheckbox: {\n type: Boolean,\n default: true,\n },\n parentLabel: String, // 父表头名称\n childLabel: String, // 子表头名称\n isChildCheckbox: Boolean, // 子表头是否显示复选框\n isChild: Boolean, // 是否子表头列配置\n selectOptions: {\n type: Object,\n default: () => ({}),\n },\n});\nconst isLoad = ref(false);\nconst visible = ref(false);\n/* 列配置 */\nconst canEditHeaders = computed(() => props.canEditHeaders);\n/* 权限编码 */\nconst permissionCode = computed(() => props.permissionCode);\n\n/**\n * 类配置修改\n * @param {*} val\n */\nconst parentSaveData = (val) => {\n emit('parentSaveData', val);\n};\n/**\n * 子级数据保存\n * @param {*} val\n */\nconst childSaveData = (val) => {\n emit('childSaveData', val);\n};\n\n/* 过滤条件 */\nconst filterConditions = ref([]);\nconst defaultFilterConditions = ref([]); //外部默认筛选条件\nconst extraFilterConditions = ref([]); //内部额外筛选条件\n/**\n * 获取自定义筛选条件\n */\nconst fetchFilterConditions = async () => {\n try {\n const {\n data: { code, message, content },\n } = await apiFunction.queryFilterCondition({ permissionCode: permissionCode.value });\n if (code !== 0) {\n ElMessage.error(t(message));\n return;\n }\n if (\n content.data.filterCondition === '' ||\n content.data.filterCondition === '[]' ||\n content.data.filterCondition === null\n ) {\n defaultFilterConditions.value = [\n {\n Operator: null,\n IsCustomSetting: null,\n DocCustomId: null,\n ColumnType: null,\n TextValue: null,\n NumberValue: null,\n NumberRangeValue: [],\n CloumnName: null,\n SelectRangeValue: [],\n SingleSelectValue: null,\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: null, TimeValue: [] },\n DateTimeDynamicFilteringValue: {\n DateType: null,\n },\n DateTimeDynamicFilteringCustomize: [\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n ],\n },\n ];\n extraFilterConditions.value = [];\n return;\n }\n filterConditions.value = JSON.parse(content.data.filterCondition);\n defaultFilterConditions.value = [filterConditions.value[0]];\n extraFilterConditions.value = filterConditions.value.length === 1 ? [] : filterConditions.value.slice(1, 10);\n } catch (error) {\n ElMessage.error(t('Syn_apiError'));\n }\n};\n/**\n * 添加筛选条件\n */\nconst addFilterCondition = () => {\n if (extraFilterConditions.value.length >= 9) {\n ElMessage.error(t('Syn_maxFilterConditions'));\n return;\n }\n extraFilterConditions.value.push({\n Operator: null,\n IsCustomSetting: null,\n DocCustomId: null,\n ColumnType: null,\n TextValue: null,\n NumberValue: null,\n NumberRangeValue: [],\n CloumnName: null,\n SelectRangeValue: [],\n SingleSelectValue: null,\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: null, TimeValue: [] },\n DateTimeDynamicFilteringValue: {\n DateType: null,\n },\n DateTimeDynamicFilteringCustomize: [\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n ],\n });\n};\n/* 查询自定义筛选字段内容 */\nconst fieldSetting = ref([]);\n/**\n * 获取自定义筛选字段内容\n * @param permissionCode 权限编码\n */\nconst getFieldSetting = async (permissionCode) => {\n try {\n const {\n data: { code, content, message },\n } = await apiFunction.getFieldSetting(permissionCode);\n if (code !== 0) {\n ElMessage.error(t(message));\n return;\n }\n const docCustomSettings = content.docCustomSettings.map((item) => ({\n fieldName: item.fieldName,\n fieldTypeId: item.fieldTypeId,\n fieldSelectOptions: item.fieldSelectOptions,\n key: item.docCustomId,\n isDoc: true,\n }));\n const fieldSettings = content.fieldSettings.map((item) => ({\n fieldName: item.fieldKey,\n fieldTypeId: item.fieldTypeId,\n fieldSelectOptions: item.fieldSelectOptions,\n key: item.fieldKey,\n isDoc: false,\n }));\n fieldSetting.value = [...fieldSettings, ...docCustomSettings];\n } catch (error) {\n ElMessage.error(t('Syn_apiError'));\n }\n};\n\n/* 查询 */\nconst defaultFilterRef = ref(null);\nconst extraFilterRef = ref(null);\nconst loading = ref(false);\n/**\n * 校验筛选条件\n */\nconst validate = async () => {\n try {\n const defaultValidate = (await defaultFilterRef.value?.validateAllForms()) ?? true;\n const extraValidate = (await extraFilterRef.value?.validateAllForms()) ?? true;\n return defaultValidate && extraValidate;\n } catch (error) {\n return false;\n }\n};\n/**\n * 保存更多筛选条件\n */\nconst handleSaveExtraFilter = async () => {\n isLoad.value = false;\n loading.value = true;\n try {\n const valid = await validate();\n if (!valid) {\n return;\n }\n const {\n data: { code, message },\n } = await apiFunction.insertOrUpdateFilterCondition({\n permissionCode: permissionCode.value,\n filterCondition: JSON.stringify(\n [...defaultFilterConditions.value, ...extraFilterConditions.value]\n .filter((item) => item.CloumnName !== null)\n .map((it) => ({\n ...it,\n NumberRangeValue: it.NumberRangeValue.every((num) => num === null) ? [] : it.NumberRangeValue,\n })),\n ),\n });\n if (code !== 0) {\n ElMessage.error(t(message));\n return;\n }\n await fetchFilterConditions();\n visible.value = false;\n } catch (error) {\n ElMessage.error(t('Syn_apiError'));\n } finally {\n loading.value = false;\n isLoad.value = true;\n }\n};\n/**\n * 筛选查询\n * @param type\n */\nconst handleSearch = async (type) => {\n if (type) {\n await handleSaveExtraFilter();\n }\n // 获取筛选条件数据\n const defaultConditions = defaultFilterRef.value?.filterConditions || [];\n const extraConditions = extraFilterRef.value?.filterConditions || [];\n\n // 合并筛选条件\n const filterData = {\n defaultConditions,\n extraConditions,\n };\n emit('filterSearch', filterData);\n};\n/**\n * 更多筛选条件\n */\nconst handleMoreFilter = () => {\n visible.value = !visible.value;\n};\n\n// 添加点击外部区域关闭弹窗的逻辑\nconst popoverRef = ref(null);\nconst referenceRef = ref(null);\n\nconst handleClickOutside = (event) => {\n if (visible.value) {\n const popoverEl = popoverRef.value?.$el;\n const referenceEl = referenceRef.value?.$el || document.querySelector('[data-test-id=\"EL-BUTTON-AzDm8o\"]');\n if (popoverEl && referenceEl) {\n // 检查点击的元素是否在弹窗或引用元素内部\n const isClickInside = popoverEl.contains(event.target) || referenceEl.contains(event.target);\n // 检查点击的元素是否是Element Plus的弹出组件(如日期选择器、下拉菜单等)\n let isClickOnPopper = false;\n let target = event.target;\n // 向上遍历DOM树,检查是否是popper组件\n while (target) {\n if (\n target.classList?.contains('el-popper') ||\n target.classList?.contains('el-date-editor') ||\n target.dataset?.testId?.includes('EL-DATE-PICKER') ||\n target.dataset?.testId?.includes('EL-SELECT')\n ) {\n isClickOnPopper = true;\n break;\n }\n target = target.parentElement;\n }\n // 检查点击的元素是否在弹窗的子组件内部\n const isClickInFilterCriteria = event.target.closest('[data-test-id=\"FILTERCRITERIA-1hVwQx\"]');\n // 只有当点击确实在弹窗外部且不是弹窗的子组件或popper组件时,才关闭弹窗\n if (!isClickInside && !isClickOnPopper && !isClickInFilterCriteria) {\n visible.value = false;\n }\n }\n }\n};\n\n// 监听visible变化,添加或移除事件监听器\nwatch(visible, (newVal) => {\n if (newVal) {\n // 在下一个事件循环添加监听器,避免触发点击事件\n setTimeout(() => {\n document.addEventListener('click', handleClickOutside);\n }, 0);\n } else {\n document.removeEventListener('click', handleClickOutside);\n }\n});\n/**\n * 重置筛选条件\n */\nconst handleReset = async () => {\n isLoad.value = false;\n loading.value = true;\n filterConditions.value = [];\n defaultFilterConditions.value = [];\n extraFilterConditions.value = [];\n try {\n const {\n data: { code, message },\n } = await apiFunction.insertOrUpdateFilterCondition({\n permissionCode: permissionCode.value,\n filterCondition: null,\n });\n if (code !== 0) {\n ElMessage.error(t(message));\n return;\n }\n await fetchFilterConditions();\n await handleSearch(false);\n visible.value = false;\n } catch (error) {\n ElMessage.error(t('Syn_apiError'));\n } finally {\n loading.value = false;\n isLoad.value = true;\n }\n};\n\ndefineExpose({\n handleSearch,\n});\n\nonMounted(async () => {\n await nextTick();\n await getFieldSetting(permissionCode.value);\n await fetchFilterConditions();\n const stockViewQueryDataObj = window.stockViewQueryDataObj;\n let searchObj = {};\n if (stockViewQueryDataObj) {\n searchObj = stockViewQueryDataObj.searchObj;\n }\n if (searchObj?.sourceOrderNumber) {\n isLoad.value = false;\n loading.value = true;\n filterConditions.value = [\n {\n Operator: 5,\n IsCustomSetting: false,\n DocCustomId: null,\n ColumnType: 1,\n TextValue: searchObj.sourceOrderNumber,\n NumberValue: null,\n NumberRangeValue: [],\n CloumnName: 'productionOrderNumber',\n SelectRangeValue: [],\n SingleSelectValue: null,\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: null, TimeValue: [] },\n DateTimeDynamicFilteringValue: {\n DateType: null,\n },\n DateTimeDynamicFilteringCustomize: [\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n ],\n },\n ];\n defaultFilterConditions.value = [filterConditions.value[0]];\n extraFilterConditions.value = filterConditions.value.length === 1 ? [] : filterConditions.value.slice(1, 10);\n await handleSearch(true);\n loading.value = false;\n isLoad.value = true;\n }\n isLoad.value = true;\n});\nonBeforeUnmount(() => {\n delete window.stockViewQueryDataObj;\n // 移除事件监听器\n document.removeEventListener('click', handleClickOutside);\n});\n</script>\n\n<style scoped>\n.el-form-item__content {\n width: 100%;\n}\n\n.title-content {\n max-width: 50%;\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 20px !important;\n}\n\n.cursor {\n cursor: pointer;\n}\n</style>\n","import { ref } from 'vue';\n// 递归收集所有人员ID\nexport function getAllPersonIds(opts) {\n const ids = [];\n opts.forEach((option) => {\n // 如果有子项,说明是部门,递归收集子项\n if (option.children && option.children.length > 0) {\n ids.push(...getAllPersonIds(option.children));\n } else if (option.value !== '-1') {\n // 排除\"所有人\"自身\n ids.push(option.value);\n }\n });\n return ids;\n}\n// 收集指定部门下的所有人员ID\nexport function getDeptPersonIds(deptId, opts) {\n const ids = [];\n const findDept = (options) => {\n for (const opt of options) {\n if (opt.value === deptId && opt.children) {\n // 收集当前部门下的所有人员\n opt.children.forEach((child) => ids.push(child.value));\n return true;\n }\n if (opt.children && findDept(opt.children)) {\n return true;\n }\n }\n return false;\n };\n findDept(opts);\n return ids;\n}\n\n// 导出回显相关工具函数\nexport const echoUtils = {\n // 1. 初始化部门-人员映射表\n initDeptMap(opts) {\n const deptPersonMap = {};\n const traverse = (options) => {\n options.forEach((opt) => {\n if (opt.children && opt.children.length > 0) {\n // 记录部门下所有人员ID\n deptPersonMap[opt.value] = opt.children.map((child) => child.value);\n traverse(opt.children); // 递归处理子部门\n }\n });\n };\n traverse(opts);\n return deptPersonMap;\n },\n\n // 2. 初始化独立人员ID列表(无下级的非\"所有人\"选项)\n initPersonIds(opts) {\n const personIds = [];\n const traverse = (options) => {\n options.forEach((opt) => {\n if (opt.value !== '-1' && (!opt.children || opt.children.length === 0)) {\n personIds.push(opt.value);\n } else if (opt.children && opt.children.length > 0) {\n traverse(opt.children);\n }\n });\n };\n traverse(opts);\n return personIds;\n },\n\n // 3. 递归收集所有人员ID(用于判断全量人员)\n getAllPersonIds(opts) {\n const ids = [];\n opts.forEach((option) => {\n if (option.children && option.children.length > 0) {\n ids.push(...this.getAllPersonIds(option.children));\n } else if (option.value !== '-1') {\n // 排除\"所有人\"\n ids.push(option.value);\n }\n });\n return ids;\n },\n\n getEchoValues(personIdList, options) {\n // 1. 将后端返回的数字ID转为字符串(关键修复)\n const stringIdList = personIdList.map((id) => String(id));\n\n // 2. 初始化依赖数据(全量人员ID是字符串)\n const deptPersonMap = this.initDeptMap(options);\n const allPersons = this.getAllPersonIds(options); // 如 [\"8\", \"1\", \"11\", \"10\", \"9\"]\n\n // 3. 修正:用转换后的字符串ID列表判断全量\n if (stringIdList.length === allPersons.length && stringIdList.every((id) => allPersons.includes(id))) {\n return ['-1']; // 此时会正确触发“所有人”回显\n }\n\n const echoValues = [];\n const remainingIds = [...stringIdList]; // 用转换后的ID处理后续逻辑\n\n // 剩余逻辑不变...\n Object.entries(deptPersonMap).forEach(([deptId, deptPersons]) => {\n const allIncluded = deptPersons.every((personId) => remainingIds.includes(personId));\n if (allIncluded) {\n echoValues.push(deptId);\n deptPersons.forEach((id) => {\n const index = remainingIds.indexOf(id);\n if (index > -1) remainingIds.splice(index, 1);\n });\n }\n });\n\n echoValues.push(...remainingIds);\n return echoValues;\n },\n};\n// 图标类型 颜色映射\nexport function iconType(type) {\n const colorMap = {\n 0: '#125088',\n 1: '#FF0000',\n 2: '#F0D155',\n 3: '#99C0E4',\n 4: '#FF7A21',\n 5: '#323338',\n 6: '#34AA1A',\n };\n return { color: colorMap[type] || '#909399' };\n}\n\n// 获取图标颜色数组\n\nexport function iconColors() {\n return ref(['#125088', '#FF0000', '#F0D155', '#99C0E4', '#FF7A21', '#323338', '#34AA1A']);\n}\n\n/**\n * 转换筛选条件列表为 popover显示的筛选过滤条件 格式\n * @param {Array} list - 后端返回的筛选条件数组\n * @returns {Array} 转换后的模板字符串数组\n */\n/**\n * 转换筛选条件列表为目标格式\n * @param {Array} list - 后端返回的筛选条件数组(可能为null/undefined)\n * @returns {Array} 转换后的模板字符串数组(默认返回空数组)\n */\n// 操作符选项映射表(内置)\nconst operatorOptions = [\n { label: 'greaterThan', value: 1 },\n { label: 'greaterThanOrEqualTo', value: 2 },\n { label: 'lessThan', value: 3 },\n { label: 'lessThanOrEqualTo', value: 4 },\n { label: 'equalTo', value: 5 },\n { label: 'notEqualTo', value: 6 },\n { label: 'contains', value: 7 },\n { label: 'notContains', value: 8 },\n { label: 'yesEmpty', value: 9 },\n { label: 'notEmpty', value: 10 },\n { label: 'selectRange', value: 11 },\n { label: 'dynamicFiltering', value: 12 },\n { label: 'inRange', value: 13 },\n { label: 'notInRange', value: 14 },\n { label: 'isOneOf', value: 15 },\n { label: 'notAnyOf', value: 16 },\n];\n\n/**\n * 根据value获取operatorOptions中对应的label\n * @param {number} value - 操作符的value(如1、12、15等)\n * @returns {string} 对应的label,若未找到则返回空字符串\n */\nexport function getOperatorLabel(value) {\n // 查找匹配的选项\n const option = operatorOptions.find((item) => item.value === value);\n // 存在则返回label,否则返回空字符串\n return option ? option.label : '';\n}\nexport function processFilterData(editableTabs) {\n // 校验入参是否为数组\n if (!Array.isArray(editableTabs)) {\n console.error('processFilterData:入参必须是数组');\n return [];\n }\n\n return editableTabs.map((item) => {\n try {\n // 1. 校验filterString是否为有效字符串\n if (!item?.filterString || typeof item.filterString !== 'string') {\n return { ...item, parsedFilter: null };\n }\n\n // 2. 解析JSON字符串\n const parsedArray = JSON.parse(item.filterString);\n\n // 3. 确保解析结果是数组\n if (!Array.isArray(parsedArray)) {\n console.warn(`processFilterData:id为${item.id || '未知'}的filterString解析结果非数组`);\n return { ...item, parsedFilter: null };\n }\n\n // 4. 转换为二维数组(按逗号分割子项)\n const twoDimensionalArray = parsedArray.map((subItem) => {\n if (typeof subItem !== 'string') {\n return [subItem]; // 非字符串子项包裹为单元素数组\n }\n // 分割并去除首尾空格\n return subItem.split(',').map((part) => part.trim());\n });\n\n return { ...item, parsedFilter: twoDimensionalArray };\n } catch (error) {\n console.error(`processFilterData:解析id为${item.id || '未知'}的filterString失败:`, error);\n return { ...item, parsedFilter: null };\n }\n });\n}\n\n// 通用工具函数:从parsedFilter中查找目标项\nexport function findTargetItem(parsedFilter, field) {\n return Array.isArray(parsedFilter) ? parsedFilter.find((item) => Array.isArray(item) && item.includes(field)) : null;\n}\n// 1. 输入类型字段处理函数(取第三项,控制禁用)\nexport function handleInputField(parsedFilter, field, valueRef, disabledRef) {\n const targetItem = findTargetItem(parsedFilter, field);\n const thirdItem = targetItem?.[2] ?? '';\n valueRef.value = thirdItem;\n disabledRef.value = !!thirdItem;\n}\n\n// 2. 下拉选择类型字段处理函数(取第三项及以后,映射value)\nexport function handleSelectField(parsedFilter, field, valueRef, disabledRef, mapList) {\n const targetItem = findTargetItem(parsedFilter, field);\n const afterThirdItems = Array.isArray(targetItem) ? targetItem.slice(2) : [];\n const mappedValues = afterThirdItems\n .map((text) => mapList.find((item) => item.text === text)?.value ?? null)\n .filter((val) => val !== null);\n valueRef.value = mappedValues;\n disabledRef.value = mappedValues.length > 0;\n}\n\n// 3. 新增:时间范围类型处理函数(含selectRange,取最后两项并转换时间戳)\nexport function handleDateRangeField(parsedFilter, field, valueRef, disabledRef) {\n const targetItem = findTargetItem(parsedFilter, field);\n // 校验:目标项存在且包含selectRange,且至少有5项(确保最后两项是时间)\n const isValid = Array.isArray(targetItem) && targetItem.includes('selectRange') && targetItem.length >= 5;\n\n if (isValid) {\n // 取最后两项(开始时间、结束时间)\n const [startStr, endStr] = targetItem.slice(-2);\n // 转换为时间戳(结束时间默认补到当天23:59:59)\n const startTimestamp = new Date(startStr).getTime();\n const endDate = new Date(endStr);\n endDate.setHours(23, 59, 59, 999); // 补全结束时间到当天最后一刻\n const endTimestamp = endDate.getTime();\n\n valueRef.value = [startTimestamp, endTimestamp];\n disabledRef.value = true; // 有效时禁用\n } else {\n valueRef.value = [];\n disabledRef.value = false; // 无效时不禁用\n }\n}\n//处理下拉 key value 不一致问题 统一转为 text value\nexport function transformToTextValue(array, textField, valueField) {\n // 容错处理:原始数组为空或非数组时返回空数组\n if (!Array.isArray(array)) return [];\n\n return array.map((item) => ({\n text: item?.[textField] ?? '',\n value: item?.[valueField] ?? '',\n }));\n}\n","<template>\n <div class=\"view-box flex-center\" data-test-id=\"DIV-f6cLWs\">\n <el-tabs\n v-model=\"editableTabsValue\"\n type=\"card\"\n :closable=\"false\"\n :stretch=\"false\"\n data-test-id=\"EL-TABS-hQi8BJ\"\n @tab-click=\"handleTabClick\"\n >\n <!-- 遍历所有可编辑标签(保留标签,仅控制过滤条件显示) -->\n <el-tab-pane\n v-for=\"(item, index) in editableTabs\"\n :key=\"item.id\"\n :label=\"item.viewName\"\n :name=\"item.viewName\"\n :data-test-id=\"`EL-TAB-PANE-yEF1MT-${index}`\"\n >\n <template #label>\n <div class=\"tab-label-container\">\n <el-popover\n :title=\"item.id < 0 && (item.viewName === '全部' || item.viewName === 'all') ? t('Syn_all') : item.viewName\"\n placement=\"bottom\"\n width=\"auto\"\n data-test-id=\"EL-POPOVER-KqCZyA\"\n >\n <template #reference>\n <div class=\"fixed-width flex-center\" data-test-id=\"DIV-Vgcixm\">\n <v-icon\n :style=\"{ color: iconColors[Number(item.meta)] }\"\n class=\"mdi mdi-book-open-blank-variant\"\n data-test-id=\"V-ICON-F6vGIl\"\n />\n <span\n class=\"tab-title\"\n :style=\"viewId === item.id ? 'font-weight: 700' : ''\"\n data-test-id=\"SPAN-4OpUJc\"\n >\n {{\n item.id < 0 && (item.viewName === '全部' || item.viewName === 'all') ? t('Syn_all') : item.viewName\n }}\n </span>\n </div>\n </template>\n <!-- 仅当parsedFilter有效时显示过滤条件 -->\n <div v-if=\"isParsedFilterValid(item.parsedFilter)\" class=\"span-box\" data-test-id=\"DIV-BiX4o2\">\n <div style=\"margin-bottom: 5px\" data-test-id=\"DIV-v0zgNe\">{{ t('Syn_dataFilter') }}</div>\n <span\n v-for=\"(subArray, subIndex) in item.parsedFilter\"\n :key=\"subIndex\"\n :data-test-id=\"`SPAN-Y5w6Ny-${subIndex}`\"\n >\n <template v-if=\"subArray.length > 0\">\n <span\n v-for=\"(field, fieldIndex) in subArray\"\n :key=\"fieldIndex\"\n :data-test-id=\"`SPAN-RA8qb9-${fieldIndex}`\"\n >\n {{ t(field) || field }}\n <span v-if=\"fieldIndex < subArray.length - 1\" data-test-id=\"SPAN-Zj5s2a\">&nbsp;</span>\n </span>\n <br v-if=\"subIndex < item.parsedFilter.length - 1\" data-test-id=\"BR-g8bZ8D\" />\n </template>\n </span>\n </div>\n <!-- parsedFilter无效时显示提示(可选) -->\n <div v-else class=\"empty-filter-tip\" data-test-id=\"DIV-5qrLAo\" />\n </el-popover>\n <!-- 标签操作下拉菜单(始终显示) -->\n <el-dropdown\n v-if=\"viewType\"\n placement=\"bottom-start\"\n trigger=\"click\"\n data-test-id=\"EL-DROPDOWN-S8ReG5\"\n @command=\"(command) => handleViewOption(item, command)\"\n @click.stop\n >\n <span class=\"mdi mdi-dots-vertical\" data-test-id=\"SPAN-JZNwUC\" />\n <template #dropdown>\n <el-dropdown-menu data-test-id=\"EL-DROPDOWN-MENU-lXcUWS\">\n <el-dropdown-item command=\"edit\" data-test-id=\"EL-DROPDOWN-ITEM-a8rxXb\">\n <span class=\"mdi mdi-pencil\" style=\"margin-right: 0.5rem\" data-test-id=\"SPAN-c8iMHY\" />\n {{ t('Syn_edit') }}\n </el-dropdown-item>\n <el-dropdown-item command=\"copy\" data-test-id=\"EL-DROPDOWN-ITEM-cTJWPm\">\n <span class=\"mdi mdi-content-copy\" style=\"margin-right: 0.5rem\" data-test-id=\"SPAN-ixzjfp\" />\n {{ t('Syn_copy') }}\n </el-dropdown-item>\n <el-dropdown-item command=\"delete\" data-test-id=\"EL-DROPDOWN-ITEM-le8tGS\">\n <span class=\"mdi mdi-trash-can\" style=\"margin-right: 0.5rem\" data-test-id=\"SPAN-Ihig61\" />\n {{ t('delete') }}\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n </template>\n </el-tab-pane>\n </el-tabs>\n <!-- 更多视图(保留标签,仅控制过滤条件显示) -->\n <div v-if=\"moreTabs.length\" class=\"view-more\" data-test-id=\"DIV-VIE0ym\">\n <el-dropdown trigger=\"click\" placement=\"bottom-end\" data-test-id=\"EL-DROPDOWN-Y6vrvm\">\n <span data-test-id=\"SPAN-N2VdKy\">\n <el-button type=\"text\" data-test-id=\"EL-BUTTON-8gv545\">\n <div class=\"flex-center\" data-test-id=\"DIV-mCNYU8\">\n <div v-if=\"!isShowClickTab\" class=\"more-txt\" data-test-id=\"DIV-z5UnfR\">{{ t('moreView') }}</div>\n <div v-else class=\"more-txt\" data-test-id=\"DIV-54VVVY\">\n {{ clickViewName === 'all' ? t('Syn_all') : clickViewName }}\n </div>\n <div data-test-id=\"DIV-YkEYuZ\"><span class=\"mdi mdi-chevron-down\" data-test-id=\"SPAN-OA1DMi\" /></div>\n </div>\n </el-button>\n </span>\n <template #dropdown>\n <el-dropdown-menu data-test-id=\"EL-DROPDOWN-MENU-EaVFiu\">\n <el-dropdown-item\n v-for=\"(item, index) in moreTabs\"\n :key=\"item.id\"\n :data-test-id=\"`EL-DROPDOWN-ITEM-p4mHqG-${index}`\"\n @click=\"handleTabOperation2(item)\"\n >\n <el-popover\n :title=\"item.id < 0 && (item.viewName === '全部' || item.viewName === 'all') ? t('Syn_all') : item.viewName\"\n placement=\"left\"\n width=\"aoto\"\n data-test-id=\"EL-POPOVER-bIn3x3\"\n >\n <template #reference>\n <div class=\"fixed-width flex-center\" data-test-id=\"DIV-iCwDyl\">\n <v-icon\n :style=\"{ color: iconColors[item.meta] }\"\n class=\"mdi mdi-book-open-blank-variant\"\n style=\"margin-right: 0.5rem\"\n data-test-id=\"V-ICON-V8uyqx\"\n />\n <span class=\"tab-title\" data-test-id=\"SPAN-kvDuvy\">\n {{\n item.id < 0 && (item.viewName === '全部' || item.viewName === 'all') ? t('Syn_all') : item.viewName\n }}\n </span>\n </div>\n </template>\n <!-- 仅当parsedFilter有效时显示过滤条件 -->\n <div v-if=\"isParsedFilterValid(item.parsedFilter)\" class=\"span-box\" data-test-id=\"DIV-PgJjLg\">\n <div style=\"margin-bottom: 5px\" data-test-id=\"DIV-qlWueE\">{{ t('Syn_dataFilter') }}</div>\n <span\n v-for=\"(subArray, subIndex) in item.parsedFilter\"\n :key=\"subIndex\"\n :data-test-id=\"`SPAN-gwUPHe-${subIndex}`\"\n >\n <template v-if=\"subArray.length > 0\">\n <span\n v-for=\"(field, fieldIndex) in subArray\"\n :key=\"fieldIndex\"\n :data-test-id=\"`SPAN-Yoke3N-${fieldIndex}`\"\n >\n {{ t(field) || field }}\n <span v-if=\"fieldIndex < subArray.length - 1\" data-test-id=\"SPAN-b69aKz\">&nbsp;</span>\n </span>\n <br v-if=\"subIndex < item.parsedFilter.length - 1\" data-test-id=\"BR-6bC7S9\" />\n </template>\n </span>\n </div>\n <!-- parsedFilter无效时显示提示(可选) -->\n <div v-else class=\"empty-filter-tip\" data-test-id=\"DIV-5FYT0D\" />\n </el-popover>\n <!-- 更多视图操作下拉菜单(始终显示) -->\n <el-dropdown\n v-if=\"viewType\"\n placement=\"bottom-start\"\n trigger=\"hover\"\n data-test-id=\"EL-DROPDOWN-VwI5JN\"\n @command=\"(command) => handleViewOption(item, command)\"\n >\n <span class=\"mdi mdi-dots-vertical\" data-test-id=\"SPAN-88aNbL\" />\n <template #dropdown>\n <el-dropdown-menu data-test-id=\"EL-DROPDOWN-MENU-uB6AzT\">\n <el-dropdown-item command=\"edit\" data-test-id=\"EL-DROPDOWN-ITEM-pPx9rh\">\n <span class=\"mdi mdi-pencil\" style=\"margin-right: 0.5rem\" data-test-id=\"SPAN-gONTrg\" />\n {{ t('Syn_edit') }}\n </el-dropdown-item>\n <el-dropdown-item command=\"copy\" data-test-id=\"EL-DROPDOWN-ITEM-GzG8Jm\">\n <span class=\"mdi mdi-content-copy\" style=\"margin-right: 0.5rem\" data-test-id=\"SPAN-N1W2YJ\" />\n {{ t('Syn_copy') }}\n </el-dropdown-item>\n <el-dropdown-item command=\"delete\" data-test-id=\"EL-DROPDOWN-ITEM-n2UcqQ\">\n <span class=\"mdi mdi-trash-can\" style=\"margin-right: 0.5rem\" data-test-id=\"SPAN-PL9dTd\" />\n {{ t('delete') }}\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n <!-- 操作按钮区(始终显示) -->\n <div v-if=\"viewType\" class=\"flex-center\" data-test-id=\"DIV-1GGakX\">\n <el-tooltip :content=\"t('Syn_createView')\" placement=\"top\" :enterable=\"false\" data-test-id=\"EL-TOOLTIP-tBu398\">\n <div class=\"plus-icon\" data-test-id=\"DIV-2LlLoK\" @click=\"emit('openViewDrawer')\">\n <el-button type=\"text\" data-test-id=\"EL-BUTTON-v7caGb\">\n <span class=\"mdi mdi-plus\" data-test-id=\"SPAN-vVJa7G\" />\n </el-button>\n </div>\n </el-tooltip>\n <div class=\"plus-icon flex-center\" data-test-id=\"DIV-7acJL9\">\n <el-tooltip\n :content=\"t('viewOperationRecordTxt')\"\n placement=\"top\"\n :enterable=\"false\"\n data-test-id=\"EL-TOOLTIP-QQUw4G\"\n >\n <el-button type=\"text\" data-test-id=\"EL-BUTTON-D3QSbJ\" @click=\"emit('openLogDrawer')\">\n <span class=\"mdi mdi-text-box-check-outline\" style=\"margin-right: 0.5rem\" data-test-id=\"SPAN-4M2L0o\" />\n {{ t('viewOperationRecordTxt') }}\n </el-button>\n </el-tooltip>\n </div>\n </div>\n\n <!-- 视图编辑/复制抽屉(始终可用) -->\n <!-- <ViewAddDrawer\n v-if=\"isAddDrawerVisible\"\n v-model=\"isAddDrawerVisible\"\n :init-data=\"drawerInitData\"\n data-test-id=\"VIEWADDDRAWER-dsvnJb\"\n @view-saved=\"handleViewSaved\"\n @update:modelValue=\"isAddDrawerVisible = $event\"\n /> -->\n </div>\n</template>\n\n<script setup>\nimport { ref, watch, nextTick } from 'vue';\nimport { useI18n } from 'vue-i18n';\n// import ViewAddDrawer from './viewAddDrawer.vue';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport { ElMessageBox, ElMessage } from 'element-plus';\nimport { processFilterData } from './viewManageTool.js';\n\nconst { t } = useI18n();\n\n// 接收父组件参数\nconst props = defineProps({\n pageData: {\n type: Object,\n default: () => ({}),\n },\n viewType: {\n type: Boolean,\n default: false,\n },\n viewIdFromList: {\n type: Number,\n default: null,\n },\n tabs: {\n type: Array,\n required: true,\n default: () => [],\n },\n selectOptions: {\n type: Object,\n default: () => ({}),\n },\n});\n\n// 暴露事件给父组件\nconst emit = defineEmits(['openViewDrawer', 'openLogDrawer', 'tabUpdate', 'tabClick']);\n\n// 响应式数据\nconst viewId = ref(''); // 视图id\nconst isShowClickTab = ref(false);\nconst clickViewName = ref('');\nconst iconColors = ref(['#125088', '#FF0000', '#F0D155', '#99C0E4', '#FF7A21', '#323338', '#34AA1A']);\nconst editableTabs = ref([]); // 保留所有可编辑标签\nconst moreTabs = ref([]); // 保留所有更多标签\nconst editableTabsValue = ref('');\nconst drawerInitData = ref(null);\nconst isEditing = ref(false); // 区分操作类型\n\n// 校验parsedFilter是否有效(核心工具函数)\nconst isParsedFilterValid = (parsedFilter) => {\n return (\n Array.isArray(parsedFilter) &&\n parsedFilter.length > 0 &&\n parsedFilter.some((subArr) => Array.isArray(subArr) && subArr.length > 0)\n );\n};\n\n// 标签点击事件\nfunction handleTabClick(tab) {\n isShowClickTab.value = false;\n clickViewName.value = '';\n // 获取当前激活的标签名\n let tabName = tab.paneName;\n // 如果 paneName 是 ComputedRefImpl,获取它的值\n if (tabName && typeof tabName.value !== 'undefined') {\n tabName = tabName.value;\n }\n // 使用 tabName 查找标签项\n const clickedTab = editableTabs.value.find((item) => item.viewName === tabName);\n\n if (clickedTab) {\n editableTabsValue.value = clickedTab.viewName;\n viewId.value = clickedTab.id;\n nextTick(() => {\n emit('tabClick', viewId.value, 1);\n });\n } else {\n ElMessage.error(t('tabNotFound'));\n }\n}\n\n// 更多视图点击事件\nfunction handleTabOperation2(tabItem) {\n isShowClickTab.value = true;\n clickViewName.value =\n tabItem.id < 0 && (tabItem.viewName === '全部' || tabItem.viewName === 'all') ? 'Syn_all' : tabItem.viewName;\n viewId.value = tabItem.id;\n editableTabsValue.value = ''; //清空激活项\n nextTick(() => {\n emit('tabClick', viewId.value, 1);\n });\n}\n\n// 删除视图接口调用\nasync function doDeleteOperation(id) {\n await apiFunction\n .deleteView(id)\n .then((res) => {\n if (res.data?.code === 0) {\n // 如果删除的是当前显示的更多视图,重置状态\n if (isShowClickTab.value && viewId.value === id) {\n isShowClickTab.value = false;\n clickViewName.value = '';\n }\n emit('tabUpdate');\n } else {\n ElMessage.error(t(res.data.message));\n }\n })\n .catch(() => {\n ElMessage.error(t('Syn_apiError'));\n });\n}\n\n// 标签操作(编辑/复制/删除)\nfunction handleViewOption(tabItem, command) {\n switch (command) {\n case 'edit':\n isEditing.value = true;\n drawerInitData.value = {\n mode: 'edit',\n data: { ...tabItem },\n permissionCode: props.pageData.permissionCode,\n docCode: props.pageData.docCode,\n };\n nextTick(() => {\n // 编辑相关操作\n // emit('tabClick', tabItem.id, 'edit');\n emit('tabClick', tabItem.id, 0, props.selectOptions);\n });\n break;\n\n case 'copy':\n drawerInitData.value = {\n mode: 'copy',\n data: {\n ...tabItem,\n name: `${t('Syn_copy')}${tabItem.name}`,\n },\n permissionCode: props.pageData.permissionCode,\n docCode: props.pageData.docCode,\n };\n nextTick(() => {\n // 复制相关操作\n // emit('tabClick', tabItem.id, 'copy');\n emit('tabClick', tabItem.id, 2, props.selectOptions);\n });\n break;\n\n case 'delete':\n ElMessageBox.confirm(t('viewDeleteTip'), t('delReminder'), {\n type: 'warning',\n confirmButtonText: t('Syn_confirm'),\n cancelButtonText: t('Syn_cancel'),\n })\n .then(async () => {\n await doDeleteOperation(tabItem.id);\n })\n .catch(() => {\n return;\n });\n break;\n }\n}\n\nfunction getEditableTabsValue() {\n const foundInArray1 = editableTabs.value.find((item) => item.id === viewId.value);\n if (foundInArray1) {\n editableTabsValue.value = foundInArray1.viewName;\n isShowClickTab.value = false;\n clickViewName.value = '';\n } else {\n // 如果在第一个数组没找到,在第二个数组中查找\n const foundInArray2 = moreTabs.value.find((item) => item.id === viewId.value);\n if (foundInArray2) {\n isShowClickTab.value = true;\n clickViewName.value =\n foundInArray2.id < 0 && (foundInArray2.viewName === '全部' || foundInArray2.viewName === 'all')\n ? 'Syn_all'\n : foundInArray2.viewName;\n }\n }\n}\n\n// 监听父组件tabs变化,仅解析不过滤标签\nwatch(\n () => props.tabs,\n (newTabs) => {\n const safeTabs = Array.isArray(newTabs) ? newTabs : [];\n // 1. 拆分标签(保留所有标签,不过滤)\n if (safeTabs.length > 6) {\n editableTabs.value = processFilterData(safeTabs.slice(0, 6)); // 仅解析,不过滤\n moreTabs.value = processFilterData(safeTabs.slice(6)); // 仅解析,不过滤\n } else {\n editableTabs.value = processFilterData(safeTabs); // 仅解析,不过滤\n moreTabs.value = [];\n }\n if (props.viewIdFromList) {\n isEditing.value = true;\n viewId.value = props.viewIdFromList;\n }\n // 2. 根据操作类型设置激活标签\n if (isEditing.value) {\n // 编辑操作:保持当前tab不变\n isEditing.value = false; // 重置标志位\n nextTick(() => {\n getEditableTabsValue();\n emit('tabClick', viewId.value, 'refresh');\n });\n } else {\n // 检查当前选中的视图是否还存在\n const currentViewExists = safeTabs.some((item) => item.id === viewId.value);\n if (currentViewExists) {\n // 如果当前选中的视图还存在,保持选中状态\n nextTick(() => {\n getEditableTabsValue();\n });\n } else {\n // 其他操作:重置到第一个tab\n isShowClickTab.value = false;\n clickViewName.value = '';\n editableTabsValue.value = safeTabs.length > 0 ? safeTabs[0].viewName : '';\n viewId.value = safeTabs.length > 0 ? safeTabs[0]?.id : 0;\n nextTick(() => {\n emit('tabClick', viewId.value);\n });\n }\n }\n },\n { deep: true, immediate: true },\n);\n\n// 视图保存后通知父组件刷新\n// function handleViewSaved() {\n// // eslint-disable-next-line vue/custom-event-name-casing\n// emit('tab-update');\n// }\n</script>\n\n<style scoped>\n.flex-center {\n display: flex;\n align-items: center;\n}\n\n.view-box {\n overflow-x: auto;\n}\n\n.view-box :deep(.el-tabs) {\n max-width: 80%;\n overflow: hidden;\n}\n\n.view-more {\n margin-left: 20px;\n margin-top: -15px;\n}\n\n.more-txt {\n max-width: 80px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.plus-icon {\n margin-left: 20px;\n margin-top: -15px;\n}\n\n.fixed-width {\n width: 100px;\n box-sizing: border-box;\n}\n\n.tab-title {\n display: block;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-left: 5px;\n width: 75px;\n text-align: center;\n}\n\n/* 新增:标签容器样式 */\n.tab-label-container {\n display: flex;\n align-items: center;\n position: relative;\n}\n\n/* 空过滤条件提示样式 */\n.empty-filter-tip {\n color: #999;\n font-size: 12px;\n padding: 4px 0;\n}\n\n.span-box span:first-child {\n color: #909399;\n margin-right: 5px;\n}\n\n:deep(.el-dropdown-menu__item) {\n}\n</style>\n","/* 动态筛选 */\nconst dynamicFilteringOptions = [\n { value: 2, label: 'today', sql: 'today' }, // 今天需要处理\n { value: 3, label: 'yesterday', sql: 'yesterday' }, // 昨天需要处理\n { value: 4, label: 'thisWeek', sql: 'thisweek' },\n { value: 5, label: 'lastWeek', sql: 'lastweek' },\n { value: 6, label: 'thisMonth', sql: 'thismonth' },\n { value: 7, label: 'lastMonth', sql: 'lastmonth' },\n { value: 8, label: 'lastThreeMonths', sql: 'lastthreemonths' },\n { value: 0, label: 'custom', sql: 'custom' },\n { value: 1, label: 'customRange' }, // 自定义范围\n];\n/* 动态筛选自定义筛选 */\nconst pastOrFutureOptions = [\n { value: 0, label: 'past' },\n { value: 2, label: 'current' },\n { value: 1, label: 'future' },\n];\n/* 动态筛选自定义筛选时间类型 */\nconst dayTypeOptions = [\n { value: 1, label: 'daily' },\n { value: 2, label: 'week' },\n { value: 3, label: 'month' },\n { value: 4, label: 'quarter' },\n { value: 5, label: 'year' },\n];\n/* 筛选条件内容的字段类型为4时,判断逻辑选项 */\nconst startOrEndOptions = [\n { value: 0, label: 'intervalStart' },\n { value: 1, label: 'intervalEnd' },\n];\n/* 判断逻辑 */\nconst operatorOptions = [\n { value: 1, label: 'greaterThan', sql: '>' }, // 大于\n { value: 2, label: 'greaterThanOrEqualTo', sql: '>=' }, // 大于等于\n { value: 3, label: 'lessThan', sql: '<' }, // 小于\n { value: 4, label: 'lessThanOrEqualTo', sql: '<=' }, // 小于等于\n { value: 5, label: 'equalTo', sql: '=' }, // 等于\n { value: 6, label: 'notEqualTo', sql: '!=' }, // 不等于\n { value: 7, label: 'contains', sql: 'LIKE' }, // 包含\n { value: 8, label: 'notContains', sql: 'NOT LIKE' }, // 不包含\n { value: 9, label: 'yesEmpty', sql: 'is' }, // 为空\n { value: 10, label: 'notEmpty', sql: 'is not' }, // 不为空\n { value: 11, label: 'selectRange', sql: 'BETWEEN' }, // 选择范围\n { value: 12, label: 'dynamicFiltering', sql: 'BETWEEN' }, // 动态筛选\n { value: 13, label: 'inRange', sql: 'BETWEEN' }, // 在范围内\n { value: 14, label: 'notInRange', sql: 'NOT BETWEEN' }, // 不在范围内\n { value: 15, label: 'isOneOf', sql: 'IN' }, // 是其中一个\n { value: 16, label: 'notAnyOf', sql: 'NOT IN' }, // 不是任何一个\n];\n/* 时间精度 */\nconst timePrecisionOptions = [\n { value: 0, label: 'daily', timeFormat: 'YYYY-MM-DD' },\n { value: 1, label: 'hour', timeFormat: 'YYYY-MM-DD HH' },\n { value: 2, label: 'minute', timeFormat: 'YYYY-MM-DD HH:mm' },\n { value: 3, label: 'second', timeFormat: 'YYYY-MM-DD HH:mm:ss' },\n];\nexport default {\n dynamicFilteringOptions,\n pastOrFutureOptions,\n dayTypeOptions,\n startOrEndOptions,\n operatorOptions,\n timePrecisionOptions,\n};\n","<template>\n <div>\n <el-form\n v-for=\"(item, index) in filterConditions\"\n ref=\"filterForm\"\n :key=\"index\"\n :model=\"item\"\n :rules=\"getRules(item)\"\n style=\"margin-bottom: 1rem\"\n :data-test-id=\"`EL-FORM-t4nN1q-${index}`\"\n class=\"filter-item\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-i6hi71\">\n <!-- 字段选择 -->\n <el-col :span=\"5\" data-test-id=\"EL-COL-YtO6It\">\n <el-form-item prop=\"CloumnName\" data-test-id=\"EL-FORM-ITEM-X2DfMG\">\n <el-select\n v-model=\"item.CloumnName\"\n data-test-id=\"EL-SELECT-Tla5bC\"\n :disabled=\"item.CloumnName === defaultCreateTimeString\"\n filterable\n @change=\"handleChangeColumn($event, index)\"\n >\n <el-option\n v-for=\"(it, index) in fieldSelectDataSource\"\n :key=\"it.key\"\n :label=\"it.key === 'salesOrderNumber' ? t(it.key) : t(it.fieldName)\"\n :value=\"it.key\"\n :disabled=\"filterConditions.some((item) => item.CloumnName === it.key)\"\n :data-test-id=\"`EL-OPTION-24JqP4-${index}`\"\n />\n </el-select>\n </el-form-item>\n </el-col>\n\n <!-- 操作符 -->\n <el-col v-if=\"item.CloumnName\" :span=\"5\" data-test-id=\"EL-COL-o6tUCn\">\n <el-form-item prop=\"Operator\" data-test-id=\"EL-FORM-ITEM-lwyEu4\">\n <el-select\n v-model=\"item.Operator\"\n :placeholder=\"t('Syn_selectOperation')\"\n data-test-id=\"EL-SELECT-B8JVKa\"\n @change=\"handleChangeOperator($event, index)\"\n >\n <el-option\n v-for=\"(it, index) in operatorOptionsFunction(item.ColumnType)\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-698Ga6-${index}`\"\n />\n </el-select>\n </el-form-item>\n\n <!-- StartOrEnd(仅类型4) -->\n <el-form-item v-if=\"item.ColumnType === 4\" prop=\"StartOrEnd\" data-test-id=\"EL-FORM-ITEM-iI09Nl\">\n <el-select\n v-model=\"item.StartOrEnd\"\n style=\"margin-top: 1rem\"\n :placeholder=\"t('Syn_startOrEndTime')\"\n data-test-id=\"EL-SELECT-hYLMt4\"\n >\n <el-option\n v-for=\"(it, index) in optionFile.startOrEndOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-qkQDv6-${index}`\"\n />\n </el-select>\n </el-form-item>\n </el-col>\n\n <!-- 值输入 -->\n <el-col v-if=\"item.Operator && ![9, 10].includes(item.Operator)\" :span=\"12\" data-test-id=\"EL-COL-bWX9Cb\">\n <!-- 文本 / 附件 / 超链接 -->\n <el-form-item\n v-if=\"isTextLikeType(item.ColumnType) && isTextOperator(item.Operator)\"\n prop=\"TextValue\"\n data-test-id=\"EL-FORM-ITEM-MaRru1\"\n >\n <el-input v-model=\"item.TextValue\" :placeholder=\"t('Syn_inputText')\" clearable data-test-id=\"EL-INPUT-RoUXuD\" />\n </el-form-item>\n\n <!-- 数字范围 -->\n <el-form-item\n v-else-if=\"(item.ColumnType === 2 || item.ColumnType === 9) && [13, 14].includes(item.Operator)\"\n prop=\"NumberRangeValue\"\n data-test-id=\"EL-FORM-ITEM-vLLx0f\"\n >\n <el-input\n v-model=\"item.NumberRangeValue[0]\"\n style=\"width: 150px\"\n type=\"number\"\n :controls=\"false\"\n :placeholder=\"t('Syn_minValue')\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-nxVp98\"\n />\n <span data-test-id=\"SPAN-aJGkhM\"> - </span>\n <el-input\n v-model=\"item.NumberRangeValue[1]\"\n style=\"width: 150px\"\n type=\"number\"\n :controls=\"false\"\n :placeholder=\"t('Syn_maxValue')\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-BhVdW7\"\n />\n </el-form-item>\n\n <!-- 单选/多选 -->\n <el-form-item\n v-else-if=\"isSelectType(item.ColumnType) && [5, 15, 16].includes(item.Operator)\"\n prop=\"SelectRangeValue\"\n data-test-id=\"EL-FORM-ITEM-tjsXva\"\n >\n <el-select\n v-model=\"item.SelectRangeValue\"\n collapse-tags\n collapse-tags-tooltip\n :multiple=\"item.ColumnType === 8\"\n :placeholder=\"t('Syn_selectOptions')\"\n clearable\n filterable\n reserve-keyword\n data-test-id=\"EL-SELECT-3wxMWS\"\n :filter-method=\"(query) => handleSelectFilter(query, index)\"\n >\n <el-option\n v-for=\"(opt, index) in filteredOptionsMap[item.CloumnName] ||\n fieldSelectOptionsFunction(item.CloumnName).slice(0, 100)\"\n :key=\"opt.value\"\n :label=\"t(opt.label)\"\n :value=\"opt.value\"\n :data-test-id=\"`EL-OPTION-5wrWi5-${index}`\"\n />\n </el-select>\n </el-form-item>\n\n <!-- 日期单值 -->\n <el-form-item\n v-else-if=\"isDateType(item.ColumnType) && [1, 2, 3, 4, 5].includes(item.Operator)\"\n prop=\"DateTimeOperatorValue\"\n data-test-id=\"EL-FORM-ITEM-932Tco\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-CWWfMC\">\n <el-col :span=\"6\" data-test-id=\"EL-COL-3tGiBz\">\n <el-select\n v-model=\"item.DateTimeOperatorValue.TimeType\"\n :placeholder=\"t('Syn_timePrecision')\"\n clearable\n data-test-id=\"EL-SELECT-nphb5z\"\n >\n <el-option\n v-for=\"(it, index) in optionFile.timePrecisionOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-7foEY9-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"18\" data-test-id=\"EL-COL-rxXI8U\">\n <el-date-picker\n v-model=\"item.DateTimeOperatorValue.TimeValue\"\n :type=\"item.DateTimeOperatorValue.TimeType === 0 ? 'date' : 'datetime'\"\n :format=\"timePrecisionOptionsFunction(item.DateTimeOperatorValue.TimeType)\"\n value-format=\"x\"\n :placeholder=\"t('Syn_selectTime')\"\n clearable\n data-test-id=\"EL-DATE-PICKER-BFwrVh\"\n />\n </el-col>\n </el-row>\n </el-form-item>\n\n <!-- 日期范围 -->\n <el-form-item\n v-else-if=\"isDateType(item.ColumnType) && item.Operator === 11\"\n prop=\"DateTimeRangeValue\"\n data-test-id=\"EL-FORM-ITEM-nM49hw\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-zZIFj0\">\n <el-col :span=\"12\" data-test-id=\"EL-COL-k6LrJP\">\n <el-select\n v-model=\"item.DateTimeRangeValue.TimeType\"\n :placeholder=\"t('Syn_timePrecision')\"\n clearable\n data-test-id=\"EL-SELECT-93yQnb\"\n >\n <el-option\n v-for=\"(it, index) in optionFile.timePrecisionOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-WuL5hF-${index}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"24\" data-test-id=\"EL-COL-Zy3UKA\">\n <el-date-picker\n v-model=\"item.DateTimeRangeValue.TimeValue\"\n style=\"width: 90%; margin-top: 1rem\"\n :type=\"item.DateTimeRangeValue.TimeType === 0 ? 'daterange' : 'datetimerange'\"\n :format=\"timePrecisionOptionsFunction(item.DateTimeRangeValue.TimeType)\"\n clearable\n range-separator=\"-\"\n :start-placeholder=\"t('Syn_startTime')\"\n :end-placeholder=\"t('Syn_endTime')\"\n data-test-id=\"EL-DATE-PICKER-fPXNSn\"\n />\n </el-col>\n </el-row>\n </el-form-item>\n\n <!-- 动态筛选 -->\n <el-form-item\n v-else-if=\"isDateType(item.ColumnType) && item.Operator === 12\"\n prop=\"DateTimeDynamicFilteringValue\"\n data-test-id=\"EL-FORM-ITEM-3pz54d\"\n >\n <el-select\n v-model=\"item.DateTimeDynamicFilteringValue.DateType\"\n :placeholder=\"t('dynamicFiltering')\"\n clearable\n data-test-id=\"EL-SELECT-93zW0f\"\n @change=\"handleDateTimeDynamicFilteringValueChange($event, index)\"\n >\n <el-option\n v-for=\"(it, index) in optionFile.dynamicFilteringOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-j2Gto6-${index}`\"\n />\n </el-select>\n </el-form-item>\n\n <!-- 自定义单区间 -->\n <el-form-item\n v-if=\"\n item.DateTimeDynamicFilteringValue.DateType === 0 || item.DateTimeDynamicFilteringValue.DateType === 1\n \"\n prop=\"DateTimeDynamicFilteringCustomize\"\n data-test-id=\"EL-FORM-ITEM-oKi0MK\"\n >\n <el-col\n v-if=\"item.DateTimeDynamicFilteringValue.DateType === 0\"\n :span=\"24\"\n style=\"margin-top: 1rem\"\n data-test-id=\"EL-COL-5XNCgU\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-zHGl1c\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-tTDMtb\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].PastOrFuture\"\n :placeholder=\"t('Syn_pastOrFuture')\"\n clearable\n data-test-id=\"EL-SELECT-xifi4x\"\n >\n <el-option\n v-for=\"(it, ind) in optionFile.pastOrFutureOptions.filter((opt) => opt.value !== 2)\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-0ql2zr-${ind}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-T5qcri\">\n <el-input-number\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].NumberValue\"\n :min=\"1\"\n :max=\"365\"\n :precision=\"0\"\n :controls=\"false\"\n style=\"width: 100%\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-RYLnRt\"\n />\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-JlxABO\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].DayType\"\n :placeholder=\"t('Syn_unity')\"\n clearable\n data-test-id=\"EL-SELECT-8Lpazq\"\n >\n <el-option\n v-for=\"(it, ind) in optionFile.dayTypeOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-ncuVRo-${ind}`\"\n />\n </el-select>\n </el-col>\n </el-row>\n </el-col>\n\n <!-- 自定义双区间 -->\n <el-col\n v-else-if=\"item.DateTimeDynamicFilteringValue.DateType === 1\"\n :span=\"24\"\n style=\"margin-top: 1rem\"\n data-test-id=\"EL-COL-eM8opS\"\n >\n <el-row :gutter=\"10\" data-test-id=\"EL-ROW-lcZ8pe\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-7j3j0p\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].PastOrFuture\"\n :placeholder=\"t('Syn_pastOrFuture')\"\n clearable\n data-test-id=\"EL-SELECT-FjHTpQ\"\n @change=\"\n (vel) => {\n if (vel === 2) {\n item.DateTimeDynamicFilteringCustomize[0].NumberValue = 1;\n }\n }\n \"\n >\n <el-option\n v-for=\"(it, ind) in optionFile.pastOrFutureOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-xpcYp5-${ind}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-JnQ12D\">\n <el-input-number\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].NumberValue\"\n :min=\"1\"\n :max=\"365\"\n :disabled=\"item.DateTimeDynamicFilteringCustomize[0].PastOrFuture === 2\"\n :precision=\"0\"\n :controls=\"false\"\n style=\"width: 100%\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-3lwksG\"\n />\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-ms7sgy\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[0].DayType\"\n :placeholder=\"t('Syn_unity')\"\n clearable\n data-test-id=\"EL-SELECT-fgZOLb\"\n >\n <el-option\n v-for=\"(it, ind) in optionFile.dayTypeOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-Q07Tx8-${ind}`\"\n />\n </el-select>\n </el-col>\n </el-row>\n <el-row :gutter=\"10\" style=\"margin-top: 1rem\" data-test-id=\"EL-ROW-XkOYka\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-dLQQRb\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[1].PastOrFuture\"\n :placeholder=\"t('Syn_pastOrFuture')\"\n clearable\n data-test-id=\"EL-SELECT-ZNyGMx\"\n @change=\"\n (vel) => {\n if (vel === 2) {\n item.DateTimeDynamicFilteringCustomize[1].NumberValue = 1;\n }\n }\n \"\n >\n <el-option\n v-for=\"(it, ind) in optionFile.pastOrFutureOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-nlnE2g-${ind}`\"\n />\n </el-select>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-3uTjYF\">\n <el-input-number\n v-model=\"item.DateTimeDynamicFilteringCustomize[1].NumberValue\"\n :min=\"1\"\n :max=\"365\"\n :disabled=\"item.DateTimeDynamicFilteringCustomize[1].PastOrFuture === 2\"\n :precision=\"0\"\n :controls=\"false\"\n style=\"width: 100%\"\n clearable\n data-test-id=\"EL-INPUT-NUMBER-w1GgpV\"\n />\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-wDLRGi\">\n <el-select\n v-model=\"item.DateTimeDynamicFilteringCustomize[1].DayType\"\n :placeholder=\"t('Syn_unity')\"\n clearable\n data-test-id=\"EL-SELECT-3d7Hyz\"\n >\n <el-option\n v-for=\"(it, ind) in optionFile.dayTypeOptions\"\n :key=\"it.value\"\n :label=\"t(it.label)\"\n :value=\"it.value\"\n :data-test-id=\"`EL-OPTION-wkFjZV-${ind}`\"\n />\n </el-select>\n </el-col>\n </el-row>\n </el-col>\n </el-form-item>\n </el-col>\n <el-col v-if=\"item.CloumnName !== defaultCreateTimeString\" :span=\"2\" data-test-id=\"EL-COL-7VbmTB\">\n <!-- 删除按钮 -->\n <el-button class=\"ml-2\" type=\"text\" data-test-id=\"EL-BUTTON-f9487D\" @click=\"removeFilter(index)\">\n <i class=\"mdi mdi-close\"></i>\n </el-button>\n </el-col>\n </el-row>\n </el-form>\n </div>\n</template>\n<script setup>\nimport { ref, nextTick, computed, onMounted, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { ElMessageBox, ElMessage } from 'element-plus';\nimport optionFile from './config.js';\nconst { t } = useI18n();\nconst props = defineProps({\n filterConditions: {\n type: Array,\n default: () => [],\n }, // 筛选条件\n fieldSetting: {\n type: Array,\n default: () => [],\n }, // 筛选条件内容的字段配置\n // tz新增:外部提供的下拉数据源\n selectOptions: {\n type: Object,\n default: () => ({}),\n },\n defaultCreateTimeString: {\n type: String,\n default: 'createTime',\n }, // 默认创建时间字符串\n});\nconst filterConditions = computed(() => props.filterConditions);\nconst filterForm = ref([]);\n// 工具函数:判断字段类型\nconst isTextLikeType = (type) => [1, 5, 6].includes(type); // 文本、附件、超链接\nconst isSelectType = (type) => [7, 8].includes(type); // 单选、多选\nconst isDateType = (type) => [3, 4].includes(type); // 日期、日期范围\nconst isTextOperator = (op) => [5, 6, 7, 8].includes(op); // 等于、包含等\n// 过滤选项\nconst filteredOptionsMap = ref({});\n// 搜索关键词\nconst searchKeywords = ref({});\n// 字段选择下拉框数据源处理 - 新增\nconst fieldSelectDataSource = computed(() => {\n return props.fieldSetting;\n});\n\n// 验证规则动态生成\nconst getRules = (item) => {\n const rules = {\n CloumnName: [{ required: true, message: t('Syn_selectField'), trigger: 'change' }],\n Operator: [{ required: true, message: t('Syn_selectOperator'), trigger: 'change' }],\n };\n\n if (![9, 10].includes(item.Operator)) {\n if (isTextLikeType(item.ColumnType) && isTextOperator(item.Operator)) {\n rules.TextValue = [\n { required: true, message: t('Syn_inputText'), trigger: 'blur' },\n {\n validator: (rule, value, callback) => {\n if (value !== value.trim()) {\n return callback(new Error(t('Syn_haveSpace')));\n }\n callback();\n },\n trigger: 'blur',\n },\n ];\n }\n\n if ((item.ColumnType === 2 || item.ColumnType === 9) && [13, 14].includes(item.Operator)) {\n rules.NumberRangeValue = [\n { required: true, message: t('Syn_inputRangeValue'), trigger: 'change' },\n {\n validator: (rule, value, callback) => {\n const NumberReg = /^(([1-9]{1}[0-9]{0,9})|([0]{1}))((\\.{1}[0-9]{1,6}$)|$)/;\n if (!value || !Array.isArray(value) || value.some((v) => v == null) || value.length !== 2) {\n return callback(new Error(t('Syn_inputValidRange')));\n }\n if ((!NumberReg.test(value[0]) && value[0]) || (!NumberReg.test(value[1]) && value[1])) {\n return callback(new Error(t('Syn_numIntegerExceedTen') + ',' + t('Syn_numDecimalExceedSix')));\n }\n if (+value[0] > +value[1]) {\n return callback(new Error(t('Syn_startValueCannotGreaterThanEndValue')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n }\n\n if (isSelectType(item.ColumnType) && [15, 16].includes(item.Operator)) {\n rules.SelectRangeValue = [{ required: true, message: t('Syn_selectOptions'), trigger: 'change' }];\n }\n\n if (isDateType(item.ColumnType) && [1, 2, 3, 4, 5].includes(item.Operator)) {\n rules.DateTimeOperatorValue = [\n { required: true, message: t('Syn_selectTime'), trigger: 'change' },\n {\n validator: (rule, value, callback) => {\n if (value?.TimeType === null || !value?.TimeValue) {\n return callback(new Error(t('Syn_selectTimeAndPrecision')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n }\n\n if (item.ColumnType === 4) {\n rules.StartOrEnd = [{ required: true, message: t('Syn_selectStartOrEnd'), trigger: 'change' }];\n }\n\n if (isDateType(item.ColumnType) && item.Operator === 11) {\n rules.DateTimeRangeValue = [\n { required: true, message: t('Syn_selectTimeRange'), trigger: 'change' },\n {\n validator: (rule, value, callback) => {\n if (value?.TimeType === null || !value?.TimeValue || value.TimeValue.length !== 2) {\n return callback(new Error(t('Syn_selectCompleteTimeRange')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n }\n\n if (isDateType(item.ColumnType) && item.Operator === 12) {\n rules.DateTimeDynamicFilteringValue = [\n { required: true, message: t('Syn_selectDynamicFilteringType'), trigger: 'change' },\n {\n validator: (rule, value, callback) => {\n if (value?.DateType === null) {\n return callback(new Error(t('Syn_selectDynamicFilteringType')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n rules.DateTimeDynamicFilteringCustomize = [\n {\n validator: (rule, value, callback) => {\n if (value[0]?.PastOrFuture === null || value[0]?.NumberValue === null || value[0]?.DayType === null) {\n return callback(new Error(t('Syn_pleaseInput')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n if (\n item?.DateTimeDynamicFilteringValue?.DateType !== null &&\n item?.DateTimeDynamicFilteringValue?.DateType === 0\n ) {\n rules.DateTimeDynamicFilteringCustomize = [\n {\n validator: (rule, value, callback) => {\n if (value[0]?.PastOrFuture === null || value[0]?.NumberValue === null || value[0]?.DayType === null) {\n return callback(new Error(t('Syn_pleaseInput')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n }\n if (\n item?.DateTimeDynamicFilteringValue?.DateType !== null &&\n item?.DateTimeDynamicFilteringValue?.DateType === 1\n ) {\n rules.DateTimeDynamicFilteringCustomize = [\n {\n validator: (rule, value, callback) => {\n if (\n value[0]?.PastOrFuture === null ||\n value[0]?.NumberValue === null ||\n value[0]?.DayType === null ||\n value[1]?.PastOrFuture === null ||\n value[1]?.NumberValue === null ||\n value[1]?.DayType === null\n ) {\n return callback(new Error(t('Syn_pleaseInput')));\n }\n callback();\n },\n trigger: 'change',\n },\n ];\n }\n }\n }\n\n return rules;\n};\n\n/**\n * 时间精度选项\n * @param timeType 时间精度\n * @returns 时间格式\n */\nconst timePrecisionOptionsFunction = (timeType) => {\n return optionFile.timePrecisionOptions.find((item) => item.value === timeType)?.timeFormat;\n};\n/**\n * 筛选条件内容的字段类型改变时,判断逻辑选项改变\n * @param fieldTypeId 筛选条件内容的字段类型\n * @returns 筛选条件内容的判断逻辑选项\n */\nconst operatorOptionsFunction = (fieldTypeId) => {\n const mapping = {\n 1: [5, 6, 7, 8, 9, 10], // 文本\n 2: [9, 10, 13, 14], // 数字\n 3: [1, 2, 3, 4, 5, 9, 10, 11, 12], // 日期\n 4: [1, 2, 3, 4, 5, 9, 10, 11, 12], // 日期范围\n 5: [5, 6, 7, 8, 9, 10], // 附件\n 6: [5, 6, 7, 8, 9, 10], // 超链接\n 7: [5], // 单选\n 8: [9, 10, 15, 16], // 多选\n 9: [9, 10, 13, 14], // 公式 按数字类型处理\n };\n const allowed = mapping[fieldTypeId] || [];\n return optionFile.operatorOptions.filter((op) => allowed.includes(op.value));\n};\n\n/**\n * 筛选条件内容的字段类型改变时,判断逻辑选项改变\n * @param columnName 筛选条件内容的字段类型\n * @returns 筛选条件内容的判断逻辑选项\n */\nconst fieldSelectOptionsFunction = (columnName) => {\n // 添加输入验证,确保columnName是有效的字符串\n if (columnName === null || columnName === undefined) {\n return [];\n }\n try {\n // 从字段配置中获取选项\n const dataSource = Array.isArray(fieldSelectDataSource.value) ? fieldSelectDataSource.value : [];\n const field = dataSource.find((f) => f && f.key === columnName);\n if (field && (field.fieldTypeId === 7 || field.fieldTypeId === 8)) {\n // 选择类型字段(单选/多选)\n if (field.fieldSelectOptions) {\n try {\n const opts = JSON.parse(field.fieldSelectOptions);\n return Array.isArray(opts)\n ? opts.map((opt) => ({\n label: field.isDoc ? opt : opt ? opt.key || opt.label || opt.value : '',\n value: field.isDoc ? opt : opt ? opt.value : '',\n }))\n : [];\n } catch (jsonError) {\n return [];\n }\n }\n }\n if (props.selectOptions && typeof props.selectOptions === 'object') {\n // 1.直接通过字段名配置\n if (props.selectOptions[columnName]) {\n return Array.isArray(props.selectOptions[columnName]) ? props.selectOptions[columnName] : [];\n }\n // 2.通过类型配置(例如xxxOptions)\n const typeOptionsKey = Object.keys(props.selectOptions).find(\n (key) => key.endsWith('Options') && columnName.includes(key.replace('Options', '')),\n );\n if (typeOptionsKey) {\n return Array.isArray(props.selectOptions[typeOptionsKey]) ? props.selectOptions[typeOptionsKey] : [];\n }\n }\n return [];\n } catch (e) {\n ElMessage.error(t('Syn_apiError'));\n }\n};\n/**\n * 筛选条件内容的字段类型改变时,判断逻辑选项改变\n * @param value 筛选条件内容的字段类型\n * @param index 筛选条件的索引\n */\nconst fieldTypeFun = (type) => {\n if ([1, 5, 6].includes(type)) {\n return 5;\n }\n if (type === 2) {\n return 13;\n }\n if ([3, 4].includes(type)) {\n return 11;\n }\n if (type === 7) {\n return 5;\n }\n if (type === 8) {\n return 15;\n }\n return null;\n};\nconst handleChangeColumn = (value, index) => {\n const field = fieldSelectDataSource.value.find((f) => f.key === value);\n // const field = props.fieldSetting.find((f) => f.key === value);\n const item = filterConditions.value[index];\n Object.assign(item, {\n CloumnName: value,\n ColumnType: field?.fieldTypeId,\n Operator: fieldTypeFun(field?.fieldTypeId),\n StartOrEnd: null,\n TextValue: null,\n IsCustomSetting: field?.isDoc,\n DocCustomId: field?.isDoc ? field.key : null,\n NumberRangeValue: [],\n SelectRangeValue: [],\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: [3, 4].includes(field?.fieldTypeId) ? 0 : null, TimeValue: [] },\n DateTimeDynamicFilteringValue: { DateType: null },\n DateTimeDynamicFilteringCustomize: [\n { PastOrFuture: null, NumberValue: null, DayType: null },\n { PastOrFuture: null, NumberValue: null, DayType: null },\n ],\n });\n};\n/**\n *\n * @param value 筛选条件内容的判断逻辑\n * @param index 筛选条件的索引\n */\nconst handleChangeOperator = (value, index) => {\n const item = filterConditions.value[index];\n // 清空无关字段\n Object.assign(item, {\n TextValue: null,\n NumberRangeValue: [],\n SelectRangeValue: [],\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: null, TimeValue: [] },\n DateTimeDynamicFilteringValue: { DateType: null },\n DateTimeDynamicFilteringCustomize: [\n { PastOrFuture: null, NumberValue: null, DayType: null },\n { PastOrFuture: null, NumberValue: null, DayType: null },\n ],\n });\n};\n/**\n * 动态筛选自定义筛选时间类型改变时,判断逻辑选项改变\n * @param value 动态筛选自定义筛选时间类型\n * @param index 筛选条件的索引\n */\nconst handleDateTimeDynamicFilteringValueChange = (value, index) => {\n const item = filterConditions.value[index];\n item.DateTimeDynamicFilteringCustomize = [\n { PastOrFuture: null, NumberValue: null, DayType: null },\n { PastOrFuture: null, NumberValue: null, DayType: null },\n ];\n};\n/**\n * 删除筛选条件\n * @param index 筛选条件的索引\n */\nconst removeFilter = (index) => {\n ElMessageBox.confirm(t('Syn_confirmToDelete'), t('Syn_confirmDelete'), {\n confirmButtonText: t('Syn_confirm'),\n cancelButtonText: t('Syn_cancel'),\n type: 'warning',\n }).then(() => {\n filterConditions.value.splice(index, 1);\n });\n};\n// 处理选择框过滤\nconst handleSelectFilter = (query, index) => {\n const item = filterConditions.value[index];\n const columnName = item.CloumnName;\n // 保存搜索关键词\n searchKeywords.value[columnName] = query;\n // 获取所有选项\n const allOptions = fieldSelectOptionsFunction(columnName);\n if (!query) {\n // 如果没有搜索关键词,只显示前100个选项\n filteredOptionsMap.value[columnName] = allOptions.slice(0, 100);\n } else {\n // 如果有搜索关键词,过滤并只显示前100个匹配的选项\n filteredOptionsMap.value[columnName] = allOptions\n .filter((option) => option.label.toLowerCase().includes(query.toLowerCase()))\n .slice(0, 100);\n }\n};\n\n// 监听字段变化,重置过滤选项\nwatch(\n () => filterConditions,\n (newConditions) => {\n newConditions.value.forEach((item, index) => {\n if (isSelectType(item.ColumnType)) {\n handleSelectFilter(searchKeywords.value[item.CloumnName] || '', index);\n }\n });\n },\n { deep: true },\n);\n\n// 初始化过滤选项\nconst initFilteredOptions = () => {\n filterConditions.value.forEach((item, index) => {\n if (isSelectType(item.ColumnType)) {\n handleSelectFilter('', index);\n }\n });\n};\n\nonMounted(() => {\n initFilteredOptions();\n});\n// 暴露提交方法\nconst validateAllForms = async () => {\n await nextTick();\n try {\n await Promise.all(filterForm.value.map((form) => form?.validate?.() || Promise.resolve()));\n return true;\n } catch (error) {\n ElMessage.error(t('Syn_checkForm'));\n return false;\n }\n};\ndefineExpose({ validateAllForms });\n</script>\n<style scoped lang=\"scss\">\n.filter-item {\n background-color: #f9fafb;\n border-radius: 6px;\n}\n</style>\n","export default {}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<<n) | (x>>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));","<template>\n <el-drawer\n v-model=\"visible\"\n :show-close=\"false\"\n size=\"calc(60% - 100px)\"\n :append-to-body=\"false\"\n :close-on-press-escape=\"false\"\n :modal=\"false\"\n :z-index=\"2000\"\n :with-header=\"false\"\n body-class=\"drawer-box\"\n data-test-id=\"EL-DRAWER-bQvmdU\"\n class=\"create-view-drawer\"\n >\n <template #default>\n <div class=\"view-box\" data-test-id=\"DIV-1N5GVN\">\n <div class=\"view-title\" data-test-id=\"DIV-RHdrZN\">\n <h3 data-test-id=\"H4-2vhWDY\">\n <span data-test-id=\"SPAN-vzUpbG\">\n <v-icon class=\"mdi mdi-book-open-variant\" data-test-id=\"V-ICON-52NN4f\" />&thinsp;{{ viewTypeTitle }}\n </span>\n </h3>\n <el-icon class=\"mdi mdi-close cursor\" :size=\"25\" data-test-id=\"EL-ICON-Y6FnRm\" @click=\"close\"> </el-icon>\n </div>\n <div class=\"view-content\" data-test-id=\"DIV-lpvhN1\">\n <el-menu\n v-model=\"activeMenu\"\n class=\"el-menu-vertical-demo\"\n background-color=\"#f5f7fa\"\n text-color=\"#333\"\n active-text-color=\"#125088\"\n :default-active=\"activeMenu\"\n unique-opened\n data-test-id=\"EL-MENU-zUc2Ka\"\n >\n <el-menu-item index=\"basicInfo\" data-test-id=\"EL-MENU-ITEM-e3jZsV\" @click=\"activeMenu = 'basicInfo'\">\n <span class=\"mdi mdi-note-text\" data-test-id=\"SPAN-FXgldN\" /> {{ t('Syn_basicInfo') }}\n </el-menu-item>\n <el-menu-item index=\"dataFilter\" data-test-id=\"EL-MENU-ITEM-FP0Pdh\" @click=\"activeMenu = 'dataFilter'\">\n <span class=\"mdi mdi-filter-cog\" data-test-id=\"SPAN-DvUe8j\" /> {{ t('Syn_dataFilter') }}\n </el-menu-item>\n </el-menu>\n <div class=\"drawer-content\" data-test-id=\"DIV-9dBeYG\">\n <div v-show=\"activeMenu === 'basicInfo'\" data-test-id=\"DIV-qkoKbM\">\n <h3 data-test-id=\"H3-95pW9X\">{{ t('Syn_basicInfo') }}</h3>\n <el-form\n ref=\"basicFormRef\"\n :model=\"formData\"\n :rules=\"rules\"\n label-width=\"auto\"\n data-test-id=\"EL-FORM-RLlvjp\"\n >\n <el-form-item :label=\"t('Syn_viewName')\" prop=\"viewName\" data-test-id=\"EL-FORM-ITEM-wwCvB7\">\n <el-input\n v-model=\"formData.viewName\"\n :placeholder=\"t('Syn_enter') + t('Syn_viewName')\"\n maxlength=\"20\"\n :disabled=\"viewId < 0\"\n show-word-limit\n clearable\n data-test-id=\"EL-INPUT-eTI2mw\"\n />\n </el-form-item>\n <el-form-item :label=\"t('Syn_viewIcon')\" data-test-id=\"EL-FORM-ITEM-UtKiIs\">\n <div class=\"icon-options\" data-test-id=\"DIV-OuotQS\">\n <el-button\n v-for=\"(option, index) in 7\"\n :key=\"index\"\n :class=\"{ active: formData.selectedIconIndex === index }\"\n :style=\"{\n color: iconColors[index],\n borderColor: formData.selectedIconIndex === index ? '#4665ad' : '#dcdcdc',\n }\"\n type=\"text\"\n data-test-id=\"EL-BUTTON-4Hyaga\"\n @click=\"formData.selectedIconIndex = index\"\n >\n <i class=\"mdi mdi-book-open-blank-variant radio-icon\" data-test-id=\"V-ICON-oBZKUA\" />\n </el-button>\n </div>\n </el-form-item>\n <el-form-item\n :label=\"t('Syn_viewPermission')\"\n prop=\"permission\"\n required\n data-test-id=\"EL-FORM-ITEM-Jb9jGY\"\n >\n <el-cascader\n v-model=\"formData.permission\"\n :options=\"options\"\n :props=\"cascadeProperty\"\n :show-all-levels=\"false\"\n show-checked-strategy=\"parent\"\n clearable\n data-test-id=\"EL-CASCADER-X0KLWz\"\n @change=\"handleChange\"\n />\n </el-form-item>\n </el-form>\n </div>\n <div v-show=\"activeMenu === 'dataFilter'\" data-test-id=\"DIV-ckP1yh\">\n <h3 data-test-id=\"H3-c1nKHQ\">\n {{ t('Syn_dataFilter') }}\n </h3>\n <filterCriteria\n ref=\"filterCriteriaRef\"\n :field-setting=\"fieldSetting\"\n :filter-conditions=\"dataFilterList\"\n :select-options=\"selectOptions\"\n :default-create-time-string=\"defaultCreateTimeString\"\n data-test-id=\"FILTERCRITERIA-ShqDeQ\"\n />\n <el-button link type=\"primary\" data-test-id=\"EL-BUTTON-W21EYJ\" @click=\"addFilterCondition\">\n <v-icon class=\"mdi mdi-plus\" style=\"margin-right: 0.5rem\" data-test-id=\"V-ICON-u6sfaW\" />\n {{ t('Syn_addFilterConditions') }}\n </el-button>\n </div>\n <div class=\"drawer-footer\" data-test-id=\"DIV-eCU0O7\">\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-xHRONm\" @click=\"saveView\">\n {{ t('Syn_save') }}\n </el-button>\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-CQwuMO\" @click=\"close\">\n {{ t('Syn_cancellation') }}\n </el-button>\n </div>\n </div>\n </div>\n </div>\n </template>\n </el-drawer>\n</template>\n\n<script setup>\nimport { ref, computed, reactive } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism.js';\nimport { ElMessage, ElLoading } from 'element-plus';\nimport dayjs from 'dayjs';\nimport filterCriteria from './filterCriteria.vue';\nimport optionFile from './config.js';\nimport CryptoJS from 'crypto-js';\nconst loadin = ref(null);\nconst loadingFun = (val) => {\n if (val && !loadin.value) {\n loadin.value = ElLoading.service({\n target: '.create-view-drawer',\n lock: true,\n });\n return;\n }\n loadin.value?.close();\n loadin.value = null;\n};\nconst props = defineProps({\n permissionData: Object,\n selectOptions: {\n type: Object,\n default: () => ({}),\n },\n defaultCreateTimeString: {\n type: String,\n default: 'createTime',\n }, // 默认创建时间字符串\n});\nconst fieldSetting = ref([]);\nconst emit = defineEmits(['updataView']);\nconst dataFilterList = ref([]);\nconst dataInfo = reactive({\n Operator: 12, // 操作内容\n IsCustomSetting: false, // 是否自定义\n DocCustomId: null, // 自定义id\n ColumnType: 3, // 字段类型\n TextValue: null, // 文本内容\n NumberValue: null, // 数字内容\n NumberRangeValue: [], // 最大值最小值\n CloumnName: props.defaultCreateTimeString, // 字段名\n SelectRangeValue: [], // 下拉选择内容\n // 单选日期\n DateTimeOperatorValue: {\n TimeType: null,\n TimeValue: null,\n },\n // 多选日期范围对应的值\n DateTimeRangeValue: {\n TimeType: null,\n TimeValue: [],\n },\n // 自定义区间1:双区间,0:单区间\n DateTimeDynamicFilteringValue: {\n DateType: 1,\n },\n // 自定义范围区间对应的值\n DateTimeDynamicFilteringCustomize: [\n {\n PastOrFuture: 0,\n NumberValue: 365,\n DayType: 1,\n },\n {\n PastOrFuture: 2,\n NumberValue: 1,\n DayType: 1,\n },\n ],\n StartOrEnd: null,\n});\nconst { t, locale } = useI18n();\nconst activeMenu = ref('basicInfo');\nconst viewId = ref(null); // 视图ID\nconst viewTypeTitle = ref(t('Syn_newView'));\nconst visible = ref(false); // 视图窗口\nconst isType = ref(1); // 1:新增 0:编辑\nconst formData = reactive({\n viewName: '', // 视图名称\n permission: ['-1'], // 查阅人员\n selectedIconIndex: 0, // 图标\n});\nconst filterCriteriaRef = ref(null);\nconst basicFormRef = ref(null);\n// 校验\nconst rules = computed(() => ({\n viewName: [\n { required: true, message: t('Syn_required'), trigger: ['change'] },\n {\n validator: async (rule, value, callback) => {\n const {\n data: { code },\n } = await apiFunction.checkViewName({\n viewName: value,\n permissionCode: props.permissionData.permissionCode,\n id: viewId.value,\n });\n if (code !== 0 && viewId.value >= 0) {\n return callback(new Error(t('Syn_duplicateViewNames')));\n }\n if (value !== value.trim()) {\n return callback(new Error(t('Syn_haveSpace')));\n }\n if (value.trim().length > 20) {\n return callback(new Error(t('Syn_no20Characters')));\n }\n callback();\n },\n trigger: ['change'],\n },\n ],\n permission: [{ required: true, message: t('Syn_required'), trigger: ['blur', 'change'] }],\n}));\n// 查询人员\n// 数据源 - 将\"所有人\"的value改为'1'保持一致性\nconst options = ref([]);\nconst queryDepartmentStaff = async () => {\n await apiFunction\n .getViewReadEmployeeList()\n .then((res) => {\n if (res.data.code === 0) {\n options.value = res.data.content;\n } else {\n ElMessage.error(t(res.data.message));\n }\n })\n .catch(() => {\n ElMessage.error(t('Syn_apiError'));\n });\n};\n// 图标选择配置\nconst iconColors = ref(['#125088', '#FF0000', '#F0D155', '#99C0E4', '#FF7A21', '#323338', '#34AA1A']);\n// 级联选择器配置\nconst cascadeProperty = {\n showPrefix: true,\n multiple: true,\n checkOnClickNode: true,\n renderTag: (obj) => obj.label,\n};\nconst handleChange = (newValues) => {\n if (newValues.length && newValues.length > 1) {\n if (newValues[0].includes('-1')) {\n formData.permission = formData.permission.filter((ite, i) => i > 0);\n } else {\n newValues.forEach((item) => {\n const isAll = item.some((el) => el === '-1');\n if (isAll) {\n formData.permission = ['-1'];\n }\n });\n }\n }\n};\n/* 筛选条件 */\nconst addFilterCondition = () => {\n dataFilterList.value.push({\n Operator: null,\n IsCustomSetting: null,\n DocCustomId: null,\n ColumnType: null,\n TextValue: null,\n NumberValue: null,\n NumberRangeValue: [],\n CloumnName: null,\n SelectRangeValue: [],\n DateTimeOperatorValue: { TimeType: null, TimeValue: null },\n DateTimeRangeValue: { TimeType: null, TimeValue: [] },\n DateTimeDynamicFilteringValue: {\n DateType: null,\n },\n DateTimeDynamicFilteringCustomize: [\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n {\n PastOrFuture: null,\n NumberValue: null,\n DayType: null,\n },\n ],\n });\n};\nconst setPerson = (List) => {\n if (!List.length) {\n return ['-1'];\n }\n let result = [];\n const allList = [];\n options.value.forEach((item) => {\n if (item.children.length) {\n item.children.forEach((el) => {\n allList.push(el.value);\n if (List.includes(Number(el.value))) {\n result.push([item.value, el.value]);\n }\n });\n }\n });\n if (allList.length === List.length) {\n result = [['-1']];\n }\n return result;\n};\n/* 查询自定义筛选字段内容 */\nconst getViewFilterList = async () => {\n try {\n const {\n data: { code, content, message },\n } = await apiFunction.getViewFilterList({ permissionCode: props.permissionData.permissionCode });\n const params = {\n docCode: props.permissionData.docCode,\n status: 1,\n fieldName: '',\n consDate: [],\n startIndex: 0,\n count: 100,\n };\n const custom = await apiFunction.querySetting(params);\n if (code !== 0) {\n ElMessage.error(t(message));\n return;\n }\n const fieldSettings = content.map((item) => ({\n fieldName: item.fieldKey,\n fieldTypeId: item.fieldTypeId,\n fieldSelectOptions: item.fieldSelectOptions,\n key: item.fieldKey,\n isDoc: false,\n }));\n let docCustomSettings = [];\n if (custom.data.code === 0) {\n docCustomSettings = custom.data.content.data\n .filter((it) => it.fieldTypeId !== 9)\n .map((item) => ({\n fieldName: item.fieldName,\n fieldTypeId: item.fieldTypeId,\n fieldSelectOptions: item.fieldSelectOptions,\n key: item.docCustomId,\n isDoc: true,\n }));\n }\n fieldSetting.value = [...fieldSettings, ...docCustomSettings];\n const createTimeSetting = fieldSetting.value.find((item) => item.key === props.defaultCreateTimeString);\n if (!createTimeSetting) {\n fieldSetting.value.unshift({\n fieldName: props.defaultCreateTimeString,\n fieldTypeId: 3,\n fieldSelectOptions: [],\n key: props.defaultCreateTimeString,\n isDoc: false,\n });\n }\n } catch (error) {\n ElMessage.error(t('Syn_apiError'));\n }\n};\nconst open = async (id, type) => {\n try {\n loadingFun(true);\n activeMenu.value = 'basicInfo';\n visible.value = true;\n await queryDepartmentStaff();\n await getViewFilterList();\n isType.value = type;\n if (id) {\n viewTypeTitle.value = type ? t('Syn_copyView') : t('Syn_editView');\n if (!isType.value) {\n viewId.value = id;\n }\n // 编辑逻辑待补充\n const { data } = await apiFunction.getViewDetail(id, !!type);\n if (data.code === 0) {\n dataFilterList.value = data.content.fieldString ? [...JSON.parse(data.content.fieldString)] : [{ ...dataInfo }];\n formData.viewName = type\n ? `${t('Syn_copy')}${['zh-cn', 'zh-tw'].includes(locale.value) ? '' : ' '}${data.content.id < 0 && (data.content.viewName === '全部' || data.content.viewName === 'all') ? t('Syn_all') : data.content.viewName}`\n : data.content.id < 0 && (data.content.viewName === '全部' || data.content.viewName === 'all')\n ? t('Syn_all')\n : data.content.viewName;\n formData.permission = setPerson(data.content.viewPermissionEmpId);\n formData.selectedIconIndex = Number(data.content.meta);\n }\n } else {\n dataFilterList.value = [{ ...dataInfo }];\n }\n } catch (error) {\n ElMessage.error(t('Syn_apiError'));\n } finally {\n loadingFun(false);\n basicFormRef.value.clearValidate();\n }\n};\nconst close = () => {\n viewTypeTitle.value = t('Syn_newView');\n viewId.value = null;\n visible.value = false;\n dataFilterList.value = [{ ...dataInfo }];\n formData.viewName = '';\n formData.permission = ['-1'];\n formData.selectedIconIndex = 0;\n basicFormRef.value.clearValidate();\n};\n// 部门人员\nconst getDepartmentStaff = (list) => {\n let result = [];\n if (list.length === 1 && list[0].includes('-1')) {\n options.value.forEach((item) => {\n if (item.children.length) {\n item.children.forEach((el) => result.push(el.value));\n }\n });\n return result;\n }\n list.forEach((item) => {\n if (item.length > 1) {\n result.push(item[1]);\n } else if (item.length === 1) {\n result.push(item[0]);\n }\n });\n return result;\n};\n// 解析数据筛选\nconst validateField = (val) => {\n if (val === null || (Array.isArray(val) && !val.length)) {\n return false;\n }\n return true;\n};\n// 时间经度处理\nconst getTimeLongitude = (val) => {\n const obj = optionFile.timePrecisionOptions.find((el) => el.value === val);\n return obj.label === 'daily' ? 'day' : obj.label;\n};\nconst getTimeFormat = (val) => optionFile.timePrecisionOptions.find((el) => el.value === val)?.timeFormat;\n// 动态筛选内容处理\nconst getDynamicFilter = (val, sql) => {\n const obj = optionFile.dynamicFilteringOptions.find((el) => el.value === val);\n return sql ? obj.sql : obj.label;\n};\n// 动态筛选过去、未来处理\nconst getFutureOptions = (val) => {\n const obj = optionFile.pastOrFutureOptions.find((el) => el.value === val);\n return obj.label;\n};\n// 动态筛选时间类型处理\nconst getDateType = (val) => {\n const obj = optionFile.dayTypeOptions.find((el) => el.value === val);\n return obj.label === 'daily' ? 'day' : obj.label;\n};\n\nfunction calculateTimestamp(timestamp, dimension) {\n // 定义各维度对应的毫秒数\n const millisecondsPerUnit = {\n 0: 24 * 60 * 60 * 1000,\n 1: 60 * 60 * 1000,\n 2: 60 * 1000,\n 3: 1000,\n };\n const unitMs = millisecondsPerUnit[dimension];\n return +timestamp + unitMs;\n}\n\n// 处理SQL语句\nconst getSqlInfo = (item) => {\n let title = fieldSetting.value.find((el) => el.key === item.CloumnName).fieldName;\n let sqlTitle = item.IsCustomSetting ? `\"${title}\"` : title;\n // 生产工单入库未完字段单独处理\n if (sqlTitle === 'inboundRemain') {\n sqlTitle = '(required_throughput-COALESCE(inboundQuantity,0)+COALESCE(returnQuantity,0))';\n }\n let sql = `${sqlTitle} ${optionFile.operatorOptions.find((el) => el.value === item.Operator)?.sql}`;\n let str = '';\n // 处理文本sql\n if ([1, 5, 6].includes(item.ColumnType)) {\n if (item.TextValue) {\n if (item.Operator === 5) {\n str = `${sql} '${item.TextValue}'`;\n } else if (item.Operator === 6) {\n str = `(${sql} '${item.TextValue}' or ${sqlTitle} is null)`;\n } else if (item.Operator === 8) {\n str = `(${sql} '%${item.TextValue}%' or ${sqlTitle} is null)`;\n } else {\n str = `${sql} '%${item.TextValue}%'`;\n }\n } else {\n if (item.Operator === 10) {\n str = `(${sql} null and ${sqlTitle} != '')`;\n } else if (item.Operator === 9) {\n str = `(${sql} null or ${sqlTitle} = '')`;\n } else {\n str = `${sql} null`;\n }\n }\n }\n // 处理下拉sql\n if ([7, 8].includes(item.ColumnType)) {\n if (item.SelectRangeValue.length) {\n if (item.IsCustomSetting && item.ColumnType === 8) {\n str = `STRING_TO_ARRAY(replace(replace(replace(${sqlTitle}, '\"', ''), '[', ''), ']', ''), ',')::text[] && STRING_TO_ARRAY('${item.SelectRangeValue.toString()}', ',')::text[] =${item.Operator === 15 ? true : false}`;\n } else {\n if (item.ColumnType === 7) {\n str = `${sql} '${item.SelectRangeValue}'`;\n } else {\n str = `${sql} (${item.SelectRangeValue.toString()})`;\n }\n }\n } else {\n if (item.Operator === 10 && item.IsCustomSetting) {\n str = `(${sql} null and ${sqlTitle} != '')`;\n } else if (item.Operator === 9 && item.IsCustomSetting) {\n str = `(${sql} null or ${sqlTitle} = '')`;\n } else {\n str = `${sql} null`;\n }\n }\n }\n // 处理数字sql\n if (item.ColumnType === 2 || item.ColumnType === 9) {\n if (item.NumberRangeValue.length) {\n if (item.Operator === 14) {\n str = `(${sql} ${item.NumberRangeValue[0]} AND ${item.NumberRangeValue[1]} or ${sqlTitle} is null)`;\n } else {\n str = `${sql} ${item.NumberRangeValue[0]} AND ${item.NumberRangeValue[1]}`;\n }\n } else {\n str = `${sql} null`;\n }\n }\n // 处理日期sql\n if ([3, 4].includes(item.ColumnType)) {\n // 处理日期区间\n let dateTitle = item.IsCustomSetting\n ? `\"${title}_${item.StartOrEnd ? 'end' : 'start'}\"`\n : `${title}_${item.StartOrEnd ? 'end' : 'start'}`;\n if (item.ColumnType === 4) {\n sql = `${dateTitle} ${optionFile.operatorOptions.find((el) => el.value === item.Operator)?.sql}`;\n }\n if ([1, 2, 3, 4].includes(item.Operator)) {\n str = `${sql} ${item.DateTimeOperatorValue.TimeValue}`;\n }\n if ([5].includes(item.Operator)) {\n const endTime = calculateTimestamp(item.DateTimeOperatorValue.TimeValue, item.DateTimeOperatorValue.TimeType);\n str =\n item.StartOrEnd === null\n ? `${sqlTitle} >= ${item.DateTimeOperatorValue.TimeValue} AND ${sqlTitle} < ${endTime}`\n : `${dateTitle} >= ${item.DateTimeOperatorValue.TimeValue} AND ${dateTitle} < ${endTime}`;\n }\n if ([9, 10].includes(item.Operator)) {\n str = `${sql} null`;\n }\n if (item.Operator === 11) {\n str = `${sql} ${dayjs(item.DateTimeRangeValue.TimeValue[0]).format('x')} AND ${calculateTimestamp(dayjs(item.DateTimeRangeValue.TimeValue[1]).format('x'), item.DateTimeRangeValue.TimeType)}`;\n }\n if (item.Operator === 12) {\n // 动态筛选不需要处理类型\n if ([4, 5, 6, 7, 8].includes(item.DateTimeDynamicFilteringValue.DateType)) {\n str = `${sql} ${getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType, true)}`;\n }\n // 天\n if (item.DateTimeDynamicFilteringValue.DateType === 2) {\n str = `${sql} currentday`;\n }\n // 昨天\n if (item.DateTimeDynamicFilteringValue.DateType === 3) {\n str = `${sql} past_day_1`;\n }\n if (item.DateTimeDynamicFilteringValue.DateType === 0) {\n let rangeSql = `${getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture)}_${getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType)}_${item.DateTimeDynamicFilteringCustomize[0].NumberValue}`;\n if (item.DateTimeDynamicFilteringCustomize[0].PastOrFuture) {\n str = `${sql} currentend AND ${rangeSql}`;\n } else {\n str = `${sql} ${rangeSql} AND currentstart`;\n }\n }\n // 自定义范围\n if (item.DateTimeDynamicFilteringValue.DateType === 1) {\n let startSql = `${getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture)}_${getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType)}_${item.DateTimeDynamicFilteringCustomize[0].NumberValue}`;\n let endSql = `${getFutureOptions(item.DateTimeDynamicFilteringCustomize[1].PastOrFuture)}_${getDateType(item.DateTimeDynamicFilteringCustomize[1].DayType)}_${item.DateTimeDynamicFilteringCustomize[1].NumberValue}`;\n if (item.DateTimeDynamicFilteringCustomize[0].PastOrFuture === 2) {\n startSql = `${getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture)}${getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType)}`;\n }\n if (item.DateTimeDynamicFilteringCustomize[1].PastOrFuture === 2) {\n endSql = `${getFutureOptions(item.DateTimeDynamicFilteringCustomize[1].PastOrFuture)}${getDateType(item.DateTimeDynamicFilteringCustomize[1].DayType)}`;\n }\n str = `${sql} ${startSql} AND ${endSql}`;\n }\n }\n }\n return str;\n};\n// 获取日期区间信息\nconst getIntervalInfo = (item) => {\n let obj = {};\n if ([1, 2, 3, 4, 5].includes(item.Operator)) {\n obj = {\n precision: getTimeLongitude(item.DateTimeOperatorValue.TimeType),\n value: item.DateTimeOperatorValue.TimeValue,\n judgeLogic: item.Operator,\n };\n }\n if ([9, 10].includes(item.Operator)) {\n obj = {\n value: '',\n judgeLogic: item.Operator,\n };\n }\n if (item.Operator === 11) {\n obj = {\n precision: getTimeLongitude(item.DateTimeRangeValue.TimeType),\n value: item.DateTimeRangeValue.TimeValue,\n judgeLogic: item.Operator,\n };\n }\n if (item.Operator === 12) {\n if (item.DateTimeDynamicFilteringValue.DateType === 0) {\n obj = {\n value: getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType),\n customType: getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture),\n customUnit: getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType),\n customUum: item.DateTimeDynamicFilteringCustomize[0].NumberValue,\n judgeLogic: item.Operator,\n };\n } else if (item.DateTimeDynamicFilteringValue.DateType === 1) {\n obj = {\n value: getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType),\n customTypeStart: getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture),\n customUnitStart: getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType),\n customNumStart: item.DateTimeDynamicFilteringCustomize[0].NumberValue,\n customTypeEnd: getFutureOptions(item.DateTimeDynamicFilteringCustomize[1].PastOrFuture),\n customUnitEnd: getDateType(item.DateTimeDynamicFilteringCustomize[1].DayType),\n customNumEnd: item.DateTimeDynamicFilteringCustomize[1].NumberValue,\n judgeLogic: item.Operator,\n };\n } else {\n obj = {\n value: getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType),\n judgeLogic: item.Operator,\n };\n }\n }\n return obj;\n};\n// 获取其余字段信息\nconst getInfo = (item) => {\n let obj = {};\n if ([1, 5, 6].includes(item.ColumnType) && item.TextValue) {\n obj = {\n first: item.TextValue,\n };\n }\n if ([7, 8].includes(item.ColumnType) && item.SelectRangeValue.length) {\n obj = {\n first: item.SelectRangeValue.toString(),\n };\n }\n if ((item.ColumnType === 2 || item.ColumnType === 9) && item.NumberRangeValue.length) {\n obj = {\n first: item.NumberRangeValue[0],\n second: item.NumberRangeValue[1],\n };\n }\n if ([3].includes(item.ColumnType)) {\n if ([1, 2, 3, 4, 5].includes(item.Operator)) {\n obj = {\n first: getTimeLongitude(item.DateTimeOperatorValue.TimeType),\n second: item.DateTimeOperatorValue.TimeValue,\n };\n }\n if (item.Operator === 11) {\n obj = {\n first: getTimeLongitude(item.DateTimeRangeValue.TimeType),\n second: item.DateTimeRangeValue.TimeValue[0],\n third: item.DateTimeRangeValue.TimeValue[1],\n };\n }\n if (item.Operator === 12) {\n if (item.DateTimeDynamicFilteringValue.DateType === 0) {\n obj = {\n first: getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType),\n second: getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture),\n four: getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType),\n third: item.DateTimeDynamicFilteringCustomize[0].NumberValue,\n judgeLogic: item.Operator,\n };\n } else if (item.DateTimeDynamicFilteringValue.DateType === 1) {\n obj = {\n first: getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType),\n second: getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture),\n third: item.DateTimeDynamicFilteringCustomize[0].NumberValue,\n four: getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType),\n five: getFutureOptions(item.DateTimeDynamicFilteringCustomize[1].PastOrFuture),\n six: item.DateTimeDynamicFilteringCustomize[1].NumberValue,\n seven: getDateType(item.DateTimeDynamicFilteringCustomize[1].DayType),\n judgeLogic: item.Operator,\n };\n } else {\n obj = {\n first: getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType),\n };\n }\n }\n }\n return { ...obj };\n};\nconst getFeild = (item) => {\n let str = {};\n if (item.ColumnType === 4) {\n const type = item.StartOrEnd ? 'end' : 'start';\n str[type] = { ...getIntervalInfo(item) };\n } else {\n str = { ...getInfo(item) };\n }\n return { ...str };\n};\n// 获取筛选字符串内容\nconst getStringInfo = (item) => {\n let str = [];\n let field = {};\n field = fieldSetting.value.find((el) => el.key === item.CloumnName);\n str.push(field.key === 'salesOrderNumber' ? field.key : field.fieldName);\n if (validateField(item.StartOrEnd)) {\n str.push(item.StartOrEnd ? 'intervalEnd' : 'intervalStart');\n }\n if (validateField(item.Operator)) {\n str.push(optionFile.operatorOptions.find((el) => el.value === item.Operator)?.label);\n }\n if (validateField(item.TextValue)) {\n str.push(item.TextValue);\n }\n if (validateField(item.SelectRangeValue)) {\n if (field.fieldSelectOptions) {\n if (item.IsCustomSetting) {\n str.push(item.SelectRangeValue.toString());\n } else {\n try {\n // 验证 fieldSelectOptions 是有效的 JSON 字符串\n if (\n typeof field.fieldSelectOptions === 'string' &&\n field.fieldSelectOptions.trim() &&\n ((field.fieldSelectOptions.trim().startsWith('[') && field.fieldSelectOptions.trim().endsWith(']')) ||\n (field.fieldSelectOptions.trim().startsWith('{') && field.fieldSelectOptions.trim().endsWith('}')))\n ) {\n const labelList = JSON.parse(field.fieldSelectOptions)\n .filter((el) => item.SelectRangeValue.includes(el.value))\n .map((el) => el.key);\n str.push(labelList.toString());\n } else {\n // 如果不是有效的 JSON 字符串,直接使用 SelectRangeValue\n str.push(item.SelectRangeValue.toString());\n }\n } catch (error) {\n // 解析失败时直接使用 SelectRangeValue\n str.push(item.SelectRangeValue.toString());\n }\n }\n } else {\n const list = [];\n // 从统一的selectOptions中获取字段选项\n const fieldOptions = props.selectOptions[item.CloumnName] || [];\n if (Array.isArray(fieldOptions)) {\n fieldOptions.forEach((el) => {\n if (item.SelectRangeValue.includes(el.value)) {\n list.push(el.label);\n }\n });\n }\n // 如果没有找到对应的选项,直接使用值\n str.push(list.length ? list.toString() : item.SelectRangeValue.toString());\n }\n }\n if (validateField(item.NumberRangeValue)) {\n str.push(item.NumberRangeValue.toString());\n }\n if (validateField(item.DateTimeOperatorValue.TimeType)) {\n str.push(\n getTimeLongitude(item.DateTimeOperatorValue.TimeType),\n dayjs(item.DateTimeOperatorValue.TimeValue).format(getTimeFormat(item.DateTimeOperatorValue.TimeType)),\n );\n }\n if (validateField(item.DateTimeRangeValue.TimeType)) {\n str.push(getTimeLongitude(item.DateTimeRangeValue.TimeType));\n }\n if (validateField(item.DateTimeRangeValue.TimeType)) {\n str.push(\n dayjs(item.DateTimeRangeValue.TimeValue[0]).format(getTimeFormat(item.DateTimeRangeValue.TimeType)),\n dayjs(item.DateTimeRangeValue.TimeValue[1]).format(getTimeFormat(item.DateTimeRangeValue.TimeType)),\n );\n }\n if (validateField(item.DateTimeDynamicFilteringValue.DateType)) {\n str.push(getDynamicFilter(item.DateTimeDynamicFilteringValue.DateType));\n }\n if (validateField(item.DateTimeDynamicFilteringCustomize[0].DayType)) {\n str.push(\n getFutureOptions(item.DateTimeDynamicFilteringCustomize[0].PastOrFuture),\n item.DateTimeDynamicFilteringCustomize[0].NumberValue,\n getDateType(item.DateTimeDynamicFilteringCustomize[0].DayType),\n );\n }\n if (validateField(item.DateTimeDynamicFilteringCustomize[1].DayType)) {\n str.push(\n getFutureOptions(item.DateTimeDynamicFilteringCustomize[1].PastOrFuture),\n item.DateTimeDynamicFilteringCustomize[1].NumberValue,\n getDateType(item.DateTimeDynamicFilteringCustomize[1].DayType),\n );\n }\n return str.toString();\n};\nconst parseDataFilter = () => {\n const filterObj = {\n viewField: [],\n filterString: [],\n whereSql: '',\n };\n const sqlList = [];\n dataFilterList.value.forEach((item) => {\n let fieldObj = fieldSetting.value.find((el) => el.key === item.CloumnName);\n sqlList.push(getSqlInfo(item));\n filterObj.filterString.push(getStringInfo(item));\n filterObj.viewField.push({\n fieldCode: fieldObj.fieldName,\n fieldKey: item.IsCustomSetting ? fieldObj.fieldName : fieldObj.key,\n docCustomId: item.DocCustomId || '',\n fieldTypeId: item.ColumnType,\n judgeLogic: item.ColumnType === 4 ? null : item.Operator,\n fieldValue: JSON.stringify(getFeild(item)),\n isCustom: item.IsCustomSetting ? 1 : 0,\n });\n });\n sqlList.forEach((ite, ind) => {\n filterObj.whereSql += ind ? ` AND ${ite}` : ite;\n });\n return { ...filterObj };\n};\nconst encryptionSql = (sql) => {\n const key = CryptoJS.enc.Utf8.parse('3847201956372841'); // 密钥,16字节\n const iv = CryptoJS.enc.Utf8.parse('3847201956372841'); // 偏移量,16字节\n const encrypted = CryptoJS.AES.encrypt(sql, key, {\n iv: iv,\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n });\n return encrypted.toString();\n};\nconst saveView = async () => {\n try {\n const filterValid = await filterCriteriaRef.value.validateAllForms();\n const valid = await basicFormRef.value.validate();\n if (valid && filterValid) {\n loadingFun(true);\n const { viewField, filterString, whereSql } = parseDataFilter();\n const params = {\n meta: String(formData.selectedIconIndex),\n viewName: formData.viewName,\n permissionCode: props.permissionData.permissionCode,\n viewPermissionEmpId: getDepartmentStaff(formData.permission),\n viewField: JSON.stringify(viewField),\n filterString: JSON.stringify(filterString),\n whereSql: encryptionSql(whereSql),\n fieldString: JSON.stringify(dataFilterList.value),\n };\n if (isType.value) {\n const {\n data: { code },\n } = await apiFunction.addView(params);\n if (code === 0) {\n ElMessage.success(t('Syn_addSuccess'));\n emit('updataView');\n close();\n }\n } else {\n params.id = viewId.value;\n const {\n data: { code },\n } = await apiFunction.editView(params);\n if (code === 0) {\n ElMessage.success(t('Syn_editSuccess'));\n emit('updataView');\n close();\n }\n }\n }\n } catch (err) {\n ElMessage.error(t('Syn_someColumnRequired'));\n } finally {\n loadingFun(false);\n }\n};\ndefineExpose({\n open,\n});\n</script>\n\n<style scoped lang=\"scss\">\n.drawer-box {\n width: 100%;\n}\n.view-box {\n margin-top: -2rem;\n margin-left: -1rem;\n width: 100%;\n height: 100%;\n}\n.view-title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.view-content {\n display: flex;\n width: 100%;\n height: calc(100% - 1.5rem);\n}\n.el-menu-vertical-demo {\n width: 150px;\n border-right: 1px solid #eee;\n}\n.drawer-content {\n width: 90%;\n height: 95%;\n overflow: auto;\n margin-left: 10px;\n}\n.icon-options {\n display: flex;\n gap: 12px;\n}\n.icon-options .el-button {\n width: 36px;\n height: 36px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.icon-options .el-button.active {\n border-width: 2px;\n}\n.radio-icon {\n font-size: 18px;\n}\n.drawer-footer {\n position: absolute;\n bottom: 1rem;\n right: 2rem;\n}\n.cursor {\n cursor: pointer;\n}\n</style>\n","<template>\n <el-drawer\n v-model=\"visible\"\n body-class=\"drawer_body_class\"\n style=\"margin-bottom: 0\"\n :z-index=\"2000\"\n size=\"45%\"\n :with-header=\"false\"\n :append-to-body=\"false\"\n :close-on-press-escape=\"false\"\n :before-close=\"closeViewListDrawer\"\n data-test-id=\"EL-DRAWER-jasb7C\"\n >\n <template #default>\n <div class=\"drawer_header_class_content\" data-test-id=\"DIV-rXpQmF\">\n <div class=\"drawer_title\" data-test-id=\"DIV-zQlq1H\">\n <span class=\"mdi mdi-list-box-outline\" data-test-id=\"SPAN-HFpXUh\" />\n <span class=\"title_text\" data-test-id=\"SPAN-0Iut9t\">\n {{ t('Syn_viewList') }}\n </span>\n <el-tooltip effect=\"dark\" :content=\"t('viewListTips')\" placement=\"right\" data-test-id=\"EL-TOOLTIP-hHb1YY\">\n <span class=\"mdi mdi-help-circle-outline title_text_right_icon\" data-test-id=\"SPAN-UENqYR\" />\n </el-tooltip>\n </div>\n <el-button link type=\"primary\" data-test-id=\"EL-BUTTON-4ZFjLQ\" @click=\"addView\">\n <el-icon class=\"mdi mdi-plus\" style=\"margin-right: 0.5rem; font-size: 18px\" data-test-id=\"EL-ICON-0ylmiQ\">\n </el-icon>\n {{ t('Syn_createView') }}\n </el-button>\n </div>\n <div class=\"list-body\" data-test-id=\"DIV-Xmx3qv\">\n <VueDraggable\n ref=\"draggableRef\"\n v-model=\"allViews\"\n :target=\"target\"\n :handle=\"handle\"\n data-test-id=\"VUEDRAGGABLE-dL4IT9\"\n @end=\"handleDragEnd\"\n >\n <el-table\n :data=\"allViews\"\n border\n class=\"commonTable sort-target\"\n header-cell-class-name=\"tableHeaderCell\"\n header-row-class-name=\"tableHeader\"\n height=\"100%\"\n data-test-id=\"EL-TABLE-jJswcP\"\n >\n <el-table-column :width=\"50\" align=\"center\" data-test-id=\"EL-TABLE-COLUMN-gVOhBD\">\n <template #default>\n <el-icon class=\"mdi mdi-drag dragindicator\" style=\"cursor: move\" data-test-id=\"EL-ICON-XVO0RZ\" />\n </template>\n </el-table-column>\n <el-table-column label=\"#\" :width=\"70\" align=\"center\" data-test-id=\"EL-TABLE-COLUMN-EGE1qk\">\n <template #default=\"{ $index }\">\n {{ $index + 1 }}\n </template>\n </el-table-column>\n <el-table-column\n :label=\"t('Syn_viewName')\"\n prop=\"name\"\n show-overflow-tooltip\n data-test-id=\"EL-TABLE-COLUMN-BX8fIe\"\n >\n <template #default=\"scope\">\n <el-icon\n class=\"mdi mdi-book-open-blank-variant\"\n :style=\"{ color: iconType(Number(scope.row.meta)).color }\"\n data-test-id=\"EL-ICON-IJLII3\"\n />\n {{\n scope.row.id < 0 && (scope.row.viewName === '全部' || scope.row.viewName === 'all')\n ? t('Syn_all')\n : scope.row.viewName\n }}\n </template>\n </el-table-column>\n <el-table-column :label=\"t('Syn_action')\" :width=\"150\" align=\"center\" data-test-id=\"EL-TABLE-COLUMN-15WeBo\">\n <template #default=\"scope\">\n <el-tooltip :content=\"t('Syn_edit')\" placement=\"top\" :enterable=\"false\" data-test-id=\"EL-TOOLTIP-NGVisW\">\n <el-button link type=\"primary\" data-test-id=\"EL-BUTTON-VVS5A0\" @click=\"editFun(scope.row)\">\n <v-icon class=\"mdi mdi-pencil\" style=\"font-size: 1.2rem\" data-test-id=\"V-ICON-8OzEal\" />\n </el-button>\n </el-tooltip>\n <el-tooltip :content=\"t('Syn_copy')\" placement=\"top\" :enterable=\"false\" data-test-id=\"EL-TOOLTIP-Ima4Dj\">\n <el-button link type=\"primary\" data-test-id=\"EL-BUTTON-NQswpy\" @click=\"copyItem(scope.row)\">\n <el-icon class=\"mdi mdi-content-copy\" style=\"font-size: 1.2rem\" data-test-id=\"EL-ICON-e2uFy4\" />\n </el-button>\n </el-tooltip>\n <el-tooltip :content=\"t('Syn_delete')\" placement=\"top\" :enterable=\"false\" data-test-id=\"EL-TOOLTIP-WlX0wi\">\n <el-button link type=\"primary\" data-test-id=\"EL-BUTTON-v6dR6f\" @click=\"deleteItem(scope.row)\">\n <el-icon class=\"mdi mdi-trash-can\" style=\"font-size: 1.2rem\" data-test-id=\"EL-ICON-TRfu6F\" />\n </el-button>\n </el-tooltip>\n </template>\n </el-table-column>\n </el-table>\n </VueDraggable>\n </div>\n <createView\n ref=\"createViewRef\"\n :permission-data=\"props.permissionData\"\n :select-options=\"props.selectOptions\"\n :default-create-time-string=\"defaultCreateTimeString\"\n data-test-id=\"CREATEVIEW-cCI5u5\"\n @updataView=\"getViewTabList('update')\"\n />\n </template>\n </el-drawer>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { VueDraggable } from 'vue-draggable-plus';\nimport createView from './createView.vue';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism.js';\nimport { ElMessage, ElMessageBox } from 'element-plus';\nimport { iconType } from './viewManageTool.js';\nconst props = defineProps({\n permissionData: Object,\n selectOptions: {\n type: Object,\n default: () => ({}),\n },\n defaultCreateTimeString: {\n type: String,\n default: 'createTime',\n },\n});\nconst { t } = useI18n();\nconst emit = defineEmits(['updateViewTabs']);\nconst visible = ref(false); // 视图窗口\nconst createViewRef = ref(null);\nconst draggableRef = ref(null);\nconst fieldSetting = ref([]);\n// 定义所有视图数据\nconst allViews = ref([]);\nconst idFromList = ref(null);\n//获取页面的视图列表\nasync function getViewTabList(type) {\n await apiFunction\n .getViewList({\n startIndex: 0,\n count: 20,\n permissionCode: props.permissionData.permissionCode,\n })\n .then((res) => {\n if (res.data.code === 0) {\n allViews.value = [...res.data.content.data];\n if (type === 'update') {\n emit('updateViewTabs', [...allViews.value], idFromList.value); //更新tab页面\n }\n } else {\n ElMessage.error(t(res.data.message));\n }\n })\n .catch(() => {\n ElMessage.error(t('Syn_apiError'));\n });\n}\n/**\n * 添加视图\n */\nfunction addView() {\n createViewRef.value.open(null, 1);\n}\n/**\n * 编辑视图\n */\nconst editFun = (row) => {\n const viewId = typeof row === 'object' && row.id !== undefined ? row.id : row;\n idFromList.value = viewId;\n createViewRef.value.open(viewId, 0, props.selectOptions);\n};\nconst copyItem = (row) => {\n const viewId = typeof row === 'object' && row.id !== undefined ? row.id : row;\n idFromList.value = viewId;\n createViewRef.value.open(viewId, 2, props.selectOptions);\n};\n// 定义拖拽相关配置\nconst target = ref('.list-body tbody');\nconst handle = ref('.dragindicator');\n/**\n * 拖拽结束事件\n */\nconst handleDragEnd = async () => {\n try {\n const res = await apiFunction.viewSortList({ viewJson: allViews.value });\n if (res.data.code === 0) {\n emit('updateViewTabs', [...allViews.value]);\n } else {\n ElMessage.error(t(res.data.message));\n }\n } catch (error) {\n ElMessage.error(t('Syn_apiError'));\n }\n};\n\n// 删除视图\nasync function doDeleteOperation(id) {\n await apiFunction\n .deleteView(id)\n .then((res) => {\n if (res.data?.code === 0) {\n getViewTabList('update');\n } else {\n ElMessage.error(t(res.data.message));\n }\n })\n .catch(() => {\n ElMessage.error(t('Syn_apiError'));\n });\n}\nconst deleteItem = (row) => {\n let dialogTitle = t('delReminder');\n let dialogAlertDetail = `${t('viewDeleteTip')}`;\n ElMessageBox.confirm(dialogAlertDetail, dialogTitle, {\n confirmButtonText: t('Syn_confirm'),\n cancelButtonText: t('Syn_cancel'),\n type: 'warning',\n })\n .then(async () => {\n await doDeleteOperation(row.id);\n })\n .catch(() => {\n return;\n });\n};\n/**\n * 打开视图列表抽屉\n */\nconst open = async () => {\n visible.value = true;\n getViewTabList();\n};\n\n/**\n * 打开视图列表抽屉并执行编辑或复制操作\n */\nconst openDrawer = async (data, type) => {\n visible.value = true;\n await getViewTabList();\n if (type === 0) {\n editFun(data, props.selectOptions);\n } else if (type === 2) {\n copyItem(data, props.selectOptions);\n }\n};\n\n/**\n * 关闭视图列表抽屉\n */\nconst closeViewListDrawer = () => {\n visible.value = false;\n fieldSetting.value = [];\n allViews.value = [];\n};\ndefineExpose({\n open,\n openDrawer,\n});\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.drawer_body_class) {\n margin: 0;\n padding: 5px;\n}\n.drawer_header_class_content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.drawer_title {\n display: flex;\n align-items: center;\n}\n.title_text_right_icon {\n color: #909399;\n font-size: 1rem;\n}\n.title_text {\n color: #165389;\n font-weight: bold;\n margin: 0 0.5rem;\n}\n.list-body {\n height: calc(100% - 40px);\n}\n</style>\n","/**\n * 物件轉excel header\n * @param {*} object 物件\n * @returns {Array} 回傳excel header\n */\nexport function objectToExcelTitle(object) {\n const title = [];\n const titleList = [];\n object.forEach((ele) => {\n titleList.push(ele.text);\n });\n title.push(titleList);\n return title;\n}\n\n/**\n * 物件轉excel body\n * @param {Array} table excel資料\n * @param {Array} header excel header\n * @param {string} stringReplaced 被替換字串\n * @param {string} replaceTo 替換字串\n * @returns {Array} 回傳excel body\n */\nexport function objectToExcelBodyWithoutMap(table, header, stringReplaced, replaceTo) {\n const bodyTemp = [];\n table.forEach((ele) => {\n const sortedObject = {};\n header.forEach((head) => {\n Object.entries(ele).forEach((key) => {\n if (key[0] === head.value.replace(stringReplaced, replaceTo)) {\n const value = key[1];\n sortedObject[key[0]] = value;\n }\n });\n });\n bodyTemp.push(sortedObject);\n });\n return bodyTemp;\n}\n\n/**\n * 物件轉下拉選單array\n * @param {object} object 物件\n * @returns {Array} 回傳下拉選單array\n */\nexport function objectToSelectList(object) {\n const list = [];\n Object.entries(object).forEach((key) => {\n list.push({\n text: key[0],\n value: parseInt(key[1], 10),\n });\n });\n return list;\n}\n\n/**\n * 取得物件特定key值\n * @param {object} obj 物件\n * @param {number} value 特定key的value\n * @returns {string} 回傳特定key\n */\nexport function getObjKeys(obj, value) {\n return Object.keys(obj).find((key) => obj[key] === value);\n}\n","import { utils } from 'xlsx';\nimport * as XLSX from 'xlsx';\n\nconst EXCEL = {\n // 輸出excel表單\n exportFromArray(option) {\n const config = { name: 'demo', suffix: 'xml', ...option };\n const {\n title, body, name, suffix, wscols,\n } = config;\n const array = [...title, ...body];\n const workBook = utils.book_new();\n const workSheet = utils.aoa_to_sheet(array, { raw: true });\n // 欄位寬度設定\n workSheet['!cols'] = wscols;\n const fileName = `${name}.${suffix}`;\n utils.book_append_sheet(workBook, workSheet, name);\n XLSX.writeFile(workBook, fileName, { bookType: suffix, type: 'buffer', writeFile: true });\n },\n // 輸出批量excel表單\n async exportBatchFromArray(arr, fileName) {\n const workBook = utils.book_new();\n for (let i = 0; i < arr.length; i += 1) {\n const config = { ...arr[i] };\n const {\n title, body, name, wscols, wsmerges, wsrow,\n } = config;\n const array = [...title, ...body];\n const workSheet = utils.aoa_to_sheet(array, { raw: true });\n // 欄位寬度設定\n workSheet['!cols'] = wscols;\n workSheet['!rows'] = wsrow;\n workSheet['!merges'] = wsmerges;\n // eslint-disable-next-line no-await-in-loop\n await utils.book_append_sheet(workBook, workSheet, name);\n }\n // eslint-disable-next-line max-len\n XLSX.writeFile(workBook, `${fileName}.xlsx`, { bookType: 'xlsx', type: 'buffer', writeFile: true });\n },\n // 解析表格數據,返回表格内容,目前不支援導入有單元格合併的表格,data.title為表头、data.body為表格數據\n async importFromLocal(file) {\n const workBook = await this.readerWorkBookFromLocal(file);\n const workSheet = workBook.Sheets[workBook.SheetNames[0]];\n const content = utils.sheet_to_json(workSheet, { defval: '' });\n const contentSort = utils.sheet_to_json(workSheet, { header: 1 });\n if (content.length === 0) {\n return content;\n }\n const data = {};\n data.title = Object.keys(content[0]);\n data.body = content;\n data.titleSort = [...contentSort[0]]; // 记录Excel中的顺序,不会因为数字而导致顺序错乱\n return data;\n },\n // 解析表格數據(第二张Sheet表数据),返回表格内容,目前不支援導入有單元格合併的表格,data.title為表头、data.body為表格數據\n async importInstructionsFromLocal(file) {\n const workBook = await this.readerWorkBookFromLocal(file);\n const workSheet = workBook.Sheets[workBook.SheetNames[1]];\n const content = utils.sheet_to_json(workSheet, { defval: '' });\n if (content.length === 0) {\n return content;\n }\n const data = {};\n data.title = Object.keys(content[0]);\n data.body = content;\n return data;\n },\n // 讀取文件的方法,file為文件Data\n readerWorkBookFromLocal(file) {\n const reader = new FileReader();\n reader.readAsBinaryString(file);\n return new Promise(((resolve, reject) => {\n reader.onload = function (e) {\n const fileData = e.target.result;\n if (reader.readyState === 2) {\n const workBook = XLSX.read(fileData, { type: 'binary' });\n resolve(workBook);\n } else {\n reject(new Error('讀取文件失敗'));\n }\n };\n }));\n },\n};\n\nexport default EXCEL;\n","<template>\n <el-drawer\n v-model=\"viewRecordDrawer\"\n :z-index=\"1000\"\n size=\"80%\"\n :with-header=\"false\"\n :before-close=\"closeViewRecordDrawer\"\n data-test-id=\"EL-DRAWER-yW3j6a\"\n >\n <div style=\"display: flex; align-items: center\" data-test-id=\"DIV-vOcYvj\">\n <span class=\"mdi mdi-post-outline\" data-test-id=\"SPAN-QcjZ2G\" />\n <span style=\"color: #165389; font-weight: bold; margin: 0 0.5rem\" data-test-id=\"SPAN-JLNrR8\">{{\n t('viewOperationRecordTxt')\n }}</span>\n <el-tooltip\n :content=\"t('viewOperationRecordTips')\"\n placement=\"right\"\n :enterable=\"false\"\n data-test-id=\"EL-TOOLTIP-r2lUDt\"\n >\n <span class=\"mdi mdi-help-circle-outline\" style=\"color: #909399; font-size: 1rem\" data-test-id=\"SPAN-DFDBGw\" />\n </el-tooltip>\n </div>\n <div class=\"view-operation-record\" data-test-id=\"DIV-Ig4Lp5\">\n <!-- 筛选区域 -->\n <div class=\"filter-card\" data-test-id=\"DIV-BY1ENL\">\n <el-form :model=\"queryForm\" label-width=\"auto\" class=\"query-form\" size=\"default\" data-test-id=\"EL-FORM-DQPNj7\">\n <el-row :gutter=\"20\" data-test-id=\"EL-ROW-XqFgSB\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-44Qf7a\">\n <el-form-item :label=\"t('operator')\" data-test-id=\"EL-FORM-ITEM-jhywJa\">\n <el-select\n v-model=\"queryForm.operators\"\n clearable\n multiple\n collapse-tags\n :collapse-tags-tooltip=\"true\"\n filterable\n :placeholder=\"t('PleaseSelect')\"\n data-test-id=\"EL-SELECT-2iKRMnl\"\n >\n <el-option\n v-for=\"(item, index) in operatorList\"\n :key=\"index\"\n :label=\"item.name + ' ( ' + item.empNumber + ' )'\"\n :value=\"item.id\"\n :data-test-id=\"`EL-OPTION-rIctaO-${index}`\"\n >\n </el-option>\n </el-select>\n </el-form-item>\n </el-col>\n\n <el-col :span=\"8\" data-test-id=\"EL-COL-JWN3c6\">\n <el-form-item :label=\"t('operationTimeRange')\" data-test-id=\"EL-FORM-ITEM-qGA6FG\">\n <el-date-picker\n v-model=\"queryForm.timeRange\"\n type=\"datetimerange\"\n range-separator=\"~\"\n :start-placeholder=\"t('PleaseSelect')\"\n :end-placeholder=\"t('PleaseSelect')\"\n clearable\n data-test-id=\"EL-DATE-PICKER-sXaAjJ\"\n />\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-7wsX67\">\n <div style=\"text-align: center\" data-test-id=\"DIV-ePTtCw\">\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-iepjfm\" @click=\"handleQuery\">{{\n t('query')\n }}</el-button>\n <el-button data-test-id=\"EL-BUTTON-misE7D\" @click=\"handleReset\">{{ t('Syn_reset') }}</el-button>\n <el-button link type=\"primary\" data-test-id=\"EL-BUTTON-a3sO22ZO\" @click=\"handleExport\">\n <v-icon style=\"margin-right: 0.5rem\" class=\"mdi mdi-file-export\" data-test-id=\"V-ICON-Mbdhkt\" />\n {{ $t('export') }}\n </el-button>\n </div>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-1mxuMy\">\n <el-form-item :label=\"t('operationType')\" data-test-id=\"EL-FORM-ITEM-HAaHnq\">\n <el-select\n v-model=\"queryForm.types\"\n :placeholder=\"t('PleaseSelect')\"\n clearable\n multiple\n collapse-tags\n :collapse-tags-tooltip=\"true\"\n data-test-id=\"EL-SELECT-mg4gIc\"\n >\n <el-option\n v-for=\"(item, index) in operationTypes\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n :data-test-id=\"`EL-OPTION-SDFctaO-${index}`\"\n />\n </el-select>\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n </div>\n\n <!-- 列表区域 -->\n <div class=\"table-container\" data-test-id=\"DIV-wGYn7a\">\n <div class=\"table-wrapper\" data-test-id=\"DIV-tableWrapper\">\n <el-table\n :data=\"tableData\"\n border\n :loading=\"tableLoading\"\n header-row-class-name=\"tableHeader\"\n header-cell-class-name=\"tableHeaderCell\"\n :scrollbar-always-on=\"true\"\n style=\"width: 100%\"\n size=\"default\"\n data-test-id=\"EL-TABLE-6CNtjP\"\n >\n <el-table-column type=\"index\" label=\"#\" width=\"60\" align=\"center\" data-test-id=\"EL-TABLE-COLUMN-O8UyCw\">\n <template #default=\"scope\">\n <span data-test-id=\"SPAN-HEnHjc\">{{ calcIndex(scope.$index) }}</span>\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"(item, index) in headers\"\n :key=\"index\"\n :label=\"item.text\"\n :prop=\"item.value\"\n :width=\"item.width\"\n align=\"center\"\n show-overflow-tooltip\n :data-test-id=\"`EL-TABLE-COLUMN-uzDbCR-${index}`\"\n >\n <template #default=\"{ row, column }\">\n <span v-if=\"column.property === 'operateDate'\" data-test-id=\"SPAN-Gd107Y\">\n {{ row.operateDate ? dayjs(row['operateDate']).format('YYYY-MM-DD HH:mm:ss') : '-' }}\n </span>\n <span v-if=\"column.property === 'operateType'\" data-test-id=\"SPAN-DiW6W9\">\n <el-text v-if=\"row.operateType === 1\" data-test-id=\"EL-TEXT-6b8Abr\">{{ t('Syn_newView') }}</el-text>\n <el-text v-if=\"row.operateType === 2\" data-test-id=\"EL-TEXT-XzqTuW\">{{ t('Syn_editView') }}</el-text>\n <!-- <el-text v-if=\"row.operateType===3\">{{t('Syn_copyView')}}</el-text> -->\n <el-text v-if=\"row.operateType === 4\" data-test-id=\"EL-TEXT-NrIXXs\">{{ t('deleteView') }}</el-text>\n </span>\n </template>\n </el-table-column>\n </el-table>\n </div>\n\n <!-- 分页 -->\n <div class=\"pagination-wrapper\" data-test-id=\"DIV-paginationWrapper\">\n <Pagination\n style=\"background-color: transparent; padding-bottom: 0.625rem; padding-top: 1.25rem\"\n :total=\"page.total\"\n :current-page=\"page.currentPage\"\n :page-type=\"2\"\n :page-size=\"page.pageSize\"\n :current-count=\"tableData.length\"\n :permission-code=\"pageData.permissionCode\"\n :has-selected=\"false\"\n data-test-id=\"PAGINATION-vcMBuD\"\n @changePage=\"changePage\"\n @fMounted=\"handleFMounted\"\n >\n </Pagination>\n </div>\n </div>\n </div>\n </el-drawer>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport { ElMessage } from 'element-plus';\nimport { objectToExcelTitle, objectToExcelBodyWithoutMap } from '@/scriptFiles/common/objectDataProcessing';\nimport Pagination from '@/components/Pagination.vue';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport { useI18n } from 'vue-i18n';\nimport dayjs from 'dayjs';\nimport EXCEL from '@/utils/excel.js';\nconst props = defineProps({\n pageData: {\n type: Object,\n default: () => ({}),\n },\n});\nconst viewRecordDrawer = ref(false);\nconst { t } = useI18n();\n// 分页\nconst page = ref({\n total: 0,\n currentPage: 1,\n pageSize: 20,\n});\n// 表标题\nconst headers = computed(() => [\n { text: t('operator'), value: 'operateUserName', width: 150 }, //操作人员\n { text: t('operationTime'), value: 'operateDate', width: 220 }, //操作时间区间\n { text: t('operationType'), value: 'operateType', width: 150 }, //操作类型\n { text: t('operationDetails'), value: 'detail', width: '' }, //操作详情\n]);\n\n// 操作类型配置\nconst operationTypes = computed(() => [\n { label: t('Syn_newView'), value: 1 },\n { label: t('Syn_editView'), value: 2 },\n // { label: t('Syn_copyView'), value: 3 },\n { label: t('deleteView'), value: 4 },\n]);\nconst operatorList = ref([]); //操作人员列表\n//获取操作人员\nasync function getEmployeeList() {\n return apiFunction\n .getViewEmployeeList({\n permissionCode: props.pageData.permissionCode,\n })\n .then(async (res) => {\n if (res.data.code === 0) {\n operatorList.value = res.data.content;\n } else {\n ElMessage.error(t(res.data.message));\n }\n });\n}\n// 查询表单\nconst queryForm = ref({\n operators: '',\n timeRange: [],\n types: [],\n});\n\nconst tableData = ref([]);\nconst tableLoading = ref(false);\n\n// 拆分operateDetail\nfunction getOperateDetail(fieldString, type) {\n const fields = fieldString.split(',').map((field) => field.replace(/'/g, '').replace(/\"/g, '').trim());\n while (fields.length < 4) fields.push('');\n const [first, second, third, fourth] = fields;\n const typeMap = {\n 1: () => t('addViewSuccessful', { name: first }),\n 4: () => t('deleteViewSuccessful', { name: first }),\n 2: () => {\n const operations = [];\n if (second) operations.push(t('adjustViewName', { name: first, newName: second }));\n if (third) operations.push(t('adjustDataFiltering', { name: first }));\n if (fourth) operations.push(t('adjustViewPermission', { name: first }));\n return operations.length > 0 ? `${t('viewEditSuccessful')}, ${operations.join(', ')}` : t('viewEditSuccessful');\n },\n };\n return typeMap[type] ? typeMap[type]() : '';\n}\n// 获取数据\nconst getViewLogList = async () => {\n await apiFunction\n .getViewOpLogList({\n permissionCode: props.pageData.permissionCode,\n operateUser: queryForm.value.operators || [],\n operateStartDate: queryForm.value.timeRange?.length\n ? dayjs(queryForm.value.timeRange[0]).format('YYYY-MM-DD HH:mm')\n : '',\n operateEndDate: queryForm.value.timeRange?.length\n ? dayjs(queryForm.value.timeRange[1]).format('YYYY-MM-DD HH:mm')\n : '',\n operateType: queryForm.value.types.length ? queryForm.value.types : [],\n startIndex: (page.value.currentPage - 1) * page.value.pageSize,\n count: page.value.pageSize,\n })\n .then((res) => {\n if (res.data.code === 0) {\n tableLoading.value = false;\n tableData.value = res.data.content.data.map((item) => {\n return {\n ...item,\n detail: getOperateDetail(item.operateDetail, item.operateType),\n };\n });\n page.value.total = res.data.content.totalCount;\n } else {\n ElMessage.error(t(res.data.message));\n tableLoading.value = false;\n }\n })\n .catch()\n .finally(() => {\n tableLoading.value = false;\n });\n};\n// 查询数据\nconst handleQuery = () => {\n page.value.currentPage = 1; // 重置到第一页\n tableLoading.value = true;\n getViewLogList();\n};\n\n// 重置\nconst handleReset = () => {\n queryForm.value = {\n operators: [],\n timeRange: [],\n types: [],\n };\n page.value = {\n currentPage: 1,\n pageSize: 20,\n };\n getViewLogList();\n};\n// 分页方法\nconst changePage = async (val) => {\n page.value.currentPage = val.page;\n page.value.pageSize = val.size;\n getViewLogList();\n};\n\nconst handleFMounted = (arg, pageParam) => {\n page.value.currentPage = pageParam.page;\n page.value.pageSize = pageParam.size;\n};\nconst calcIndex = (index) => {\n return Number(index) + 1 + (page.value.currentPage - 1) * page.value.pageSize;\n};\n// 获取全部视图记录数据\nconst getLogList = ref([]);\nconst getAllLogData = async (v) => {\n try {\n const {\n data: { code, content },\n } = await apiFunction.getViewOpLogList({\n permissionCode: props.pageData.permissionCode,\n operateUser: queryForm.value.operators || [],\n operateStartDate: queryForm.value.timeRange?.length\n ? dayjs(queryForm.value.timeRange[0]).format('YYYY-MM-DD HH:mm')\n : '',\n operateEndDate: queryForm.value.timeRange?.length\n ? dayjs(queryForm.value.timeRange[1]).format('YYYY-MM-DD HH:mm')\n : '',\n operateType: queryForm.value.types ? queryForm.value.types : [],\n startIndex: v,\n count: 200,\n });\n if (code === 0) {\n getLogList.value = getLogList.value.concat(content.data);\n if (content.totalCount > getLogList.value.length) {\n await getAllLogData((v += 200));\n }\n }\n } catch (error) {\n ElMessage.error(t(error.message));\n }\n};\n// 日期转换\nfunction dateConvert(time) {\n return time ? dayjs(time).format('YY-MM-DD HH:mm:ss') : '--';\n}\nfunction getOptypeName(val) {\n switch (val) {\n case 1:\n return 'Syn_newView';\n case 2:\n return 'Syn_editView';\n case 3:\n return 'Syn_copyView';\n case 4:\n return 'deleteView';\n }\n}\n// 导出\nconst handleExport = async () => {\n const title = objectToExcelTitle(headers.value);\n getLogList.value = [];\n await getAllLogData(0);\n const tempList = [];\n getLogList.value.forEach((element) => {\n const tempObject = {\n operateUserName: element.operateUserName,\n operateDate: dateConvert(element.operateDate),\n operateType: t(getOptypeName(element.operateType)),\n detail: getOperateDetail(element.operateDetail, element.operateType),\n };\n tempList.push(tempObject);\n });\n const bodyWithoutMap = objectToExcelBodyWithoutMap(tempList, headers.value, '', '');\n const body = [];\n bodyWithoutMap.map((item, index) => {\n const temp = { ...item };\n const arr = Object.values(temp);\n body[index] = arr;\n return body;\n });\n const wscols = Array.from({ length: headers.value.length }, () => ({ wch: 19 }));\n EXCEL.exportFromArray({\n title,\n body,\n name: t('Syn_viewOperationRecord'),\n suffix: 'xlsx',\n sheetName: t('Syn_viewOperationRecord'),\n wscols: wscols,\n });\n};\n// 打开视图列表抽屉\nfunction open() {\n viewRecordDrawer.value = true;\n getEmployeeList();\n handleQuery();\n}\n\n// 关闭视图列表抽屉\nfunction closeViewRecordDrawer() {\n viewRecordDrawer.value = false;\n tableData.value = [];\n queryForm.value = {\n operators: [],\n timeRange: [],\n types: [],\n };\n page.value.total = 0;\n}\ndefineExpose({\n open,\n});\n</script>\n\n<style scoped>\n.view-operation-record {\n padding: 16px 0;\n height: calc(100% - 26px);\n display: flex;\n flex-direction: column;\n}\n\n.filter-card {\n background-color: #fff;\n flex-shrink: 0;\n /* 防止筛选区域被压缩 */\n}\n\n.query-form {\n margin-bottom: 0;\n}\n\n.button-group {\n margin-top: 10px;\n}\n\n/* 新增的表格容器样式 */\n.table-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: #fff;\n margin-top: 16px;\n min-height: 0;\n /* 重要:防止flex item溢出 */\n}\n\n.table-wrapper {\n flex: 1;\n min-height: 0;\n /* 重要:防止flex item溢出 */\n}\n\n/* 确保表格填满容器 */\n.table-wrapper :deep(.el-table) {\n height: 100% !important;\n}\n\n.pagination-wrapper {\n flex-shrink: 0;\n /* 分页区域不被压缩 */\n background-color: #fff;\n border-top: 1px solid #ebeef5;\n /* 可选:添加分割线 */\n}\n</style>\n","<template>\n <div class=\"view-manager-container\" :data-test-id=\"`${dataTextId}-DIV-XGm3Sf`\">\n <!-- 视图标签页 -->\n <viewTabs\n ref=\"viewTabsRef\"\n :key=\"permissionData.viewId\"\n :tabs=\"allViewTabs\"\n :view-type=\"true\"\n :view-id-from-list=\"null\"\n :select-options=\"selectOptions\"\n :data-test-id=\"`${dataTextId}-VIEWTABS-7oMOT6`\"\n @tab-update=\"handleTabUpdate\"\n @open-view-drawer=\"openViewListDrawer\"\n @tabClick=\"handleTabClick\"\n @open-log-drawer=\"openViewRecordDrawer\"\n />\n <!-- 视图列表抽屉 -->\n <viewList\n ref=\"viewListRef\"\n :permission-data=\"permissionData\"\n :select-options=\"selectOptions\"\n :data-test-id=\"`${dataTextId}-VIEWLIST-cyMJsA`\"\n :default-create-time-string=\"defaultCreateTimeString\"\n @update-view-tabs=\"updateViewTabs\"\n />\n <!-- 视图操作记录抽屉 -->\n <viewRecord ref=\"viewRecordRef\" :page-data=\"permissionData\" :data-test-id=\"`${dataTextId}-VIEWRECORD-2RlrfD`\" />\n <!-- 视图创建/编辑/复制抽屉 -->\n <createView\n ref=\"createViewRef\"\n :permission-data=\"permissionData\"\n :select-options=\"selectOptions\"\n :data-test-id=\"`${dataTextId}-CREATEVIEW-uTu1Xa`\"\n :default-create-time-string=\"defaultCreateTimeString\"\n @updataView=\"handleTabUpdate\"\n />\n </div>\n</template>\n<script setup>\nimport { ref, onMounted } from 'vue';\nimport viewTabs from '../../../Layout/modules/viewFile/viewTabs.vue';\nimport viewList from '../../../Layout/modules/viewFile/viewList.vue';\nimport viewRecord from '../../../Layout/modules/viewFile/viewRecord.vue';\nimport createView from '../../../Layout/modules/viewFile/createView.vue';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism.js';\nimport { ElMessage } from 'element-plus';\nimport { useI18n } from 'vue-i18n';\nconst { t } = useI18n();\n\n// Props\nconst props = defineProps({\n permissionData: {\n type: Object,\n default: () => ({}),\n },\n selectOptions: {\n type: Object,\n default: () => ({}),\n },\n dataTextId: String,\n defaultCreateTimeString: {\n type: String,\n default: 'createTime',\n },\n});\n// Emits\nconst emit = defineEmits(['update:permissionData']);\n// Refs\nconst viewTabsRef = ref(null);\nconst viewListRef = ref(null);\nconst viewRecordRef = ref(null);\nconst createViewRef = ref(null);\n// 视图标签列表(内部管理)\nconst allViewTabs = ref([]);\n\n// 获取视图标签列表\nconst getViewTabs = async () => {\n try {\n const res = await apiFunction.getViewOnlyReadList({\n permissionCode: props.permissionData.permissionCode,\n });\n if (res.data?.code === 0) {\n allViewTabs.value = [...res.data.content];\n return res.data.content;\n } else {\n ElMessage.error(t(res.data.message));\n }\n } catch (error) {\n ElMessage.error(error);\n }\n};\n\n// 处理标签页更新\nconst handleTabUpdate = () => {\n // 重新获取视图列表\n getViewTabs();\n};\n\n// 打开视图列表抽屉\nconst openViewListDrawer = () => {\n if (viewListRef.value) {\n viewListRef.value.open();\n }\n};\n\n// 处理标签页点击\nconst handleTabClick = (data, type) => {\n // 处理编辑/复制视图及常规切换逻辑\n if (type === 0 || type === 2) {\n // 编辑或复制视图逻辑 - 直接打开createView组件\n if (createViewRef.value) {\n // type: 0=编辑, 2=复制\n createViewRef.value.open(data, type === 2);\n }\n } else {\n // 直接调用emit,不等待其他操作\n emit('update:permissionData', {\n ...props.permissionData,\n viewId: data,\n });\n }\n};\n\n// 打开视图记录抽屉\nconst openViewRecordDrawer = () => {\n if (viewRecordRef.value) {\n viewRecordRef.value.open();\n }\n};\n\n// 更新视图标签\nconst updateViewTabs = (newTabOrderList, viewId) => {\n // 更新本地视图标签列表\n allViewTabs.value = [...newTabOrderList];\n // 如果有新的视图ID,更新permissionData\n if (viewId) {\n emit('update:permissionData', {\n ...props.permissionData,\n viewId: viewId,\n });\n }\n // 重新获取最新的视图列表\n getViewTabs();\n};\n\n// 组件挂载时执行\nonMounted(() => {\n // 获取视图标签列表\n getViewTabs();\n});\n\ndefineExpose({\n // 打开视图列表抽屉\n openViewList: () => {\n openViewListDrawer();\n },\n // 打开视图操作记录抽屉\n openViewRecord: () => {\n openViewRecordDrawer();\n },\n});\n</script>\n\n<style scoped>\n.view-manager-container {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n}\n</style>\n","<template>\n <div class=\"syn-header-buttons-container\" :style=\"{\n justifyContent: justifyContentString,\n }\" :data-test-id=\"`${dataTestId}-DIV-eobZrN`\"\n>\n <div\n v-for=\"(button, index) in buttons\"\n :key=\"button.key\"\n class=\"header-button-item\"\n :data-test-id=\"`${dataTestId}-DIV-Y656ZM-${index}`\"\n >\n <!-- 普通按钮 -->\n <el-button\n v-if=\"!button.dropdownItems\"\n :class=\"!button.link ? 'margin_right_1rem' : ''\"\n :type=\"button.type || 'primary'\"\n :plain=\"button.plain || false\"\n :round=\"button.round || false\"\n :circle=\"button.circle || false\"\n :link=\"button.link || false\"\n :size=\"button.size\"\n :data-test-id=\"`${dataTestId}-EL-BUTTON-mi1dnO-${index}`\"\n :loading=\"button.loading || false\"\n @click=\"button.func()\"\n >\n <v-icon\n v-if=\"button.icon\"\n :class=\"button.icon\"\n style=\"margin-right: 0.25rem\"\n :data-test-id=\"`${dataTestId}-V-ICON-GpCo9D-${index}`\"\n />\n <template v-if=\"!button.circle && button.label\">\n {{ t(button.label) }}\n </template>\n </el-button>\n <!-- 下拉按钮 -->\n <el-dropdown\n v-else\n ref=\"dropdownRef\"\n :hide-on-click=\"false\"\n trigger=\"click\"\n :data-test-id=\"`${dataTestId}-EL-DROPDOWN-WliCoC-${index}`\"\n >\n <el-button\n :type=\"button.type || 'primary'\"\n :plain=\"button.plain || false\"\n :round=\"button.round || false\"\n :circle=\"button.circle || false\"\n :link=\"button.link || false\"\n :size=\"button.size\"\n :data-test-id=\"`${dataTestId}-EL-BUTTON-0bdOsM-${index}`\"\n :loading=\"button.loading || false\"\n >\n <v-icon\n v-if=\"button.icon\"\n :class=\"button.icon\"\n style=\"margin-right: 0.5rem\"\n :data-test-id=\"`${dataTestId}-V-ICON-gQZNcf-${index}`\"\n />\n {{ t(button.label) }}\n <!-- <v-icon v-if=\"!button.circle\" class=\"mdi mdi-chevron-down\" style=\"margin-left: 0.25rem\"></v-icon> -->\n </el-button>\n <template #dropdown>\n <el-dropdown-menu :data-test-id=\"`${dataTestId}-EL-DROPDOWN-MENU-ZwOGul-${index}`\">\n <el-dropdown-item\n v-for=\"(item, index) in button.dropdownItems\"\n :key=\"item.key\"\n :data-test-id=\"`${dataTestId}-EL-DROPDOWN-ITEM-QbT4TZ-${index}`\"\n >\n <el-button\n :data-test-id=\"`${dataTestId}-EL-BUTTON-B8WbcZ-${index}`\"\n :type=\"item.type || 'primary'\"\n :plain=\"item.plain || false\"\n :round=\"item.round || false\"\n :link=\"item.link || false\"\n :size=\"item.size\"\n :loading=\"item.loading || false\"\n @click=\"item.func()\"\n >\n <v-icon\n v-if=\"item.icon\"\n :class=\"item.icon\"\n style=\"margin-right: 0.25rem\"\n :data-test-id=\"`${dataTestId}-V-ICON-lmPYuR-${index}`\"\n />\n <template v-if=\"!item.circle && item.label\">\n {{ t(item.label) }}\n </template>\n </el-button>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n\ndefineProps({\n // 按钮数据\n buttons: {\n type: Array,\n required: true,\n default: () => [],\n },\n // 按钮display:flex的位置\n justifyContentString: {\n type: String,\n default: 'flex-start',\n },\n // 自定义唯一标识符\n dataTestId: String,\n});\nconst dropdownRef = ref(null);\n</script>\n\n<style scoped>\n.syn-header-buttons-container {\n display: flex;\n justify-content: flex-start;\n box-sizing: border-box;\n}\n\n.header-button-item {\n display: flex;\n align-items: center;\n}\n.margin_right_1rem {\n margin-right: 1rem;\n}\n</style>\n","<template>\n <!-- table组件 -->\n <div class=\"table-wrapper\" :data-test-id=\"`${dataTestId}-DIV-To1wh5`\">\n <div class=\"table-content\" :data-test-id=\"`${dataTestId}-DIV-cL2A1K`\">\n <el-table\n ref=\"tableRef\"\n v-loading=\"loading\"\n v-shift-select:tableRef\n :data=\"tableData\"\n height=\"100%\"\n style=\"width: 100%\"\n border\n highlight-current-row\n scrollbar-always-on\n stripe\n :show-summary=\"showSummary\"\n :summary-method=\"summaryMethod\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-YQ7at9`\"\n :default-sort=\"defaultSort\"\n v-bind=\"$attrs\"\n @cell-click=\"onCellClick\"\n @selection-change=\"handleSelectionChange(1, $event)\"\n @sort-change=\"onSortChange\"\n @expand-change=\"onExpandChange\"\n >\n <el-table-column\n v-if=\"hasChildTable\"\n :width=\"showSummary ? 60 : 50\"\n type=\"expand\"\n fixed=\"left\"\n data-test-id=\"EL-TABLE-COLUMN-PHFTil\"\n >\n <template #header>\n <el-button\n v-if=\"showAllExpend\"\n size=\"small\"\n :icon=\"isAllExpanded ? 'ArrowDown' : 'ArrowRight'\"\n style=\"padding: 5px\"\n link\n data-test-id=\"EL-BUTTON-Z0GtQd\"\n @click=\"toggleAllExpand\"\n />\n </template>\n <template #default=\"{ row, $index }\">\n <div class=\"secondary-table-wrapper\" data-test-id=\"DIV-y2G2S4\">\n <el-table\n :data=\"row.childrenList\"\n border\n :data-test-id=\"`EL-TABLE-4862wz-${$index}`\"\n v-bind=\"childAttrs\"\n @selection-change=\"handleSelectionChange(2, $event, $index)\"\n >\n <!-- 选择列 -->\n <el-table-column\n v-if=\"showChildSelection\"\n type=\"selection\"\n :width=\"showSummary ? 60 : 50\"\n :selectable=\"selectable\"\n align=\"center\"\n fixed=\"left\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-COLUMN-Sc8zKF`\"\n />\n <!-- 序号列 -->\n <el-table-column\n v-if=\"showChildIndex\"\n type=\"index\"\n label=\"#\"\n width=\"50\"\n align=\"center\"\n fixed=\"left\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-COLUMN-vQ3j6j`\"\n >\n <template #default=\"{ $index }\">\n {{ $index + 1 }}\n </template>\n </el-table-column>\n <!-- 子集动态列 -->\n <el-table-column\n v-for=\"(column, cut) in childItems.filter((item) => !!item.isShown)\"\n :key=\"cut\"\n :label=\"column.text\"\n :prop=\"String(column.value)\"\n :fixed=\"column.isFixed ? 'left' : false\"\n align=\"center\"\n show-overflow-tooltip\n :sortable=\"column.sortable\"\n :min-width=\"column.minWidth || columnMinWidth || 120\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-COLUMN-vQ3j6j-${cut}`\"\n :sort-params=\"column.sortParams\"\n v-bind=\"column.attrs\"\n >\n <!-- \n 表头列有规则描述(tooltipSlot/tooltipContent同时存在时优先显示columnSlot)\n {\n tooltipIcon: 'icon图标用于触发tooltip',\n tooltipSlot: 'tooltip显示内容,用于自定义组件显示内容',\n tooltipContent: 'tooltip显示内容,默认的文本字符串'\n }\n -->\n <template #header>\n <div\n style=\"display: inline-flex; justify-content: center; align-items: center\"\n :data-test-id=\"`${dataTestId}-DIV-asjQke`\"\n >\n <!-- 左侧插槽 -->\n <component\n :is=\"column.leftSlot\"\n v-if=\"column.leftSlot\"\n :data-test-id=\"`${dataTestId}-COMPONENT-pgSWCu`\"\n />\n <span :data-test-id=\"`${dataTestId}-SPAN-iBEcrY`\">{{ column.text }}</span>\n <!-- 右侧插槽 -->\n <component\n :is=\"column.rightSlot\"\n v-if=\"column.rightSlot\"\n :data-test-id=\"`${dataTestId}-COMPONENT-WYbm6e`\"\n />\n </div>\n </template>\n <!-- 需要格式化的table项 -->\n <!-- 自定义列, 当格式化无法满足时可以使用自定义列 -->\n <template v-if=\"column.columntSlot\" #default=\"{ row, $index }\">\n <component\n :is=\"column.columntSlot\"\n :row=\"row\"\n :index=\"$index\"\n :data-test-id=\"`${dataTestId}-COMPONENT-24Y9n6`\"\n />\n </template>\n <template v-else-if=\"column.formatter\" #default=\"{ row }\">\n <!-- \n tags格式化格式: {\n bgColor: 'tag背景颜色',\n textColor: 'tag文字颜色',\n text: '国际化后的文本',\n } \n -->\n <el-tag\n v-if=\"column.formatterType === 'tags'\"\n :style=\"`color:${column.formatter(row, column).bgColor}`\"\n style=\"margin-left: 4px\"\n :color=\"column.formatter(row, column).textColor\"\n :data-test-id=\"`${dataTestId}-EL-TAG-mfRiQa`\"\n >\n {{ column.formatter(row, column).text || column.holders || holders }}\n </el-tag>\n <div v-else-if=\"column.formatterType === 'icon'\" :data-test-id=\"`${dataTestId}-DIV-bLxOMG`\">\n <!-- \n icon格式化格式: {\n icon: '需要显示v-icon图标', \n color: '图标的颜色', \n text: '国际化后的文本'\n } \n text配置的话会显示tooltip,不配置则不显示 \n -->\n <el-tooltip\n v-if=\"column.formatter(row, column).text\"\n class=\"box-item\"\n effect=\"dark\"\n :content=\"column.formatter(row, column).text\"\n placement=\"top\"\n :data-test-id=\"`${dataTestId}-EL-TOOLTIP-LsKqgG`\"\n >\n <v-icon\n v-if=\"column.formatter(row, column) && column.formatter(row, column).icon\"\n :class=\"column.formatter(row, column).icon\"\n :style=\"`color: ${column.formatter(row, column).color};`\"\n :data-test-id=\"`${dataTestId}-V-ICON-qSsT49`\"\n />\n <span v-else>{{ column.holders || holders }}</span>\n </el-tooltip>\n <v-icon\n v-else-if=\"column.formatter(row, column) && column.formatter(row, column).icon\"\n :class=\"column.formatter(row, column).icon\"\n :style=\"`color: ${column.formatter(row, column).color};`\"\n :data-test-id=\"`${dataTestId}-V-ICON-qSsT49`\"\n />\n <span v-else>{{ column.holders || holders }}</span>\n </div>\n <!-- \n file格式化格式: [{\n file: '文件地址', \n name: '文件名称,用于列表显示', \n }]\n 如果没有name则显示file,如果都没有则显示占位符\n -->\n <div v-else-if=\"column.formatterType === 'file'\" :data-test-id=\"`${dataTestId}-DIV-6Qg7rD`\">\n <template v-if=\"column.formatter(row, column) && column.formatter(row, column).length > 0\">\n <div\n v-for=\"(file, cut) in column.formatter(row, column)\"\n :key=\"cut\"\n class=\"file-name\"\n :style=\"`color: ${file.color || '#409eff'};`\"\n :data-test-id=\"`${dataTestId}-DIV-Et2BFU-${cut}`\"\n >\n {{ file.name || file.file }}\n <span\n v-if=\"cut < column.formatter(row, column).length - 1\"\n :data-test-id=\"`${dataTestId}-SPAN-wLZkzY`\"\n >\n ,\n </span>\n </div>\n </template>\n <template v-else>\n <span>{{ column.holders || holders }}</span>\n </template>\n </div>\n <!-- \n link格式化格式: {\n link: '链接地址', \n name: '链接名称,用于列表显示', \n }\n 如果没有name则显示link,如果都没有则显示占位符\n -->\n <div v-else-if=\"column.formatterType === 'link'\" :data-test-id=\"`${dataTestId}-DIV-54trNN`\">\n <el-link\n :href=\"column.formatter(row, column).link\"\n :underline=\"column.formatter(row, column).underline\"\n target=\"_blank\"\n :style=\"formatterLinkStyle(row, column)\"\n :data-test-id=\"`${dataTestId}-EL-LINK-8g2RDk`\"\n >\n {{\n column.formatter(row, column).name ||\n column.formatter(row, column).link ||\n column.holders ||\n holders\n }}\n </el-link>\n </div>\n <span v-else :data-test-id=\"`${dataTestId}-SPAN-rCQPnk`\">{{\n column.formatter(row, column) || holders\n }}</span>\n </template>\n <template v-else #default=\"{ row }\">\n <span>{{ row[column.value] || column.holders || holders }}</span>\n </template>\n </el-table-column>\n </el-table>\n </div>\n </template>\n </el-table-column>\n <!-- 选择列 -->\n <el-table-column\n v-if=\"showSelection\"\n type=\"selection\"\n :width=\"showSummary && !hasChildTable ? 60 : 50\"\n :selectable=\"selectable\"\n align=\"center\"\n fixed=\"left\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-COLUMN-Sc8zKF`\"\n />\n <!-- 序号列 -->\n <el-table-column\n v-if=\"showIndex\"\n type=\"index\"\n label=\"#\"\n :width=\"showSummary && !hasChildTable && !showSelection ? 60 : 50\"\n align=\"center\"\n fixed=\"left\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-COLUMN-vQ3j6j`\"\n >\n <template #default=\"{ $index }\">\n {{ getRowIndex($index) }}\n </template>\n </el-table-column>\n <!-- 动态列 -->\n <el-table-column\n v-for=\"(column, index) in tableColumns\"\n :key=\"column.value\"\n :label=\"column.text\"\n :prop=\"String(column.value)\"\n :fixed=\"column.isFixed ? 'left' : false\"\n align=\"center\"\n show-overflow-tooltip\n :sortable=\"column.sortable\"\n :min-width=\"column.minWidth || columnMinWidth || 120\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-COLUMN-vQ3j6j-${index}`\"\n :sort-params=\"column.sortParams\"\n v-bind=\"column.attrs\"\n >\n <!-- \n 表头列有规则描述(tooltipSlot/tooltipContent同时存在时优先显示columnSlot)\n {\n tooltipIcon: 'icon图标用于触发tooltip',\n tooltipSlot: 'tooltip显示内容,用于自定义组件显示内容',\n tooltipContent: 'tooltip显示内容,默认的文本字符串'\n }\n -->\n <template #header>\n <div\n style=\"display: inline-flex; justify-content: center; align-items: center\"\n :data-test-id=\"`${dataTestId}-DIV-asjQke`\"\n >\n <!-- 左侧插槽 -->\n <component\n :is=\"column.leftSlot\"\n v-if=\"column.leftSlot\"\n :data-test-id=\"`${dataTestId}-COMPONENT-pgSWCu`\"\n />\n <span :data-test-id=\"`${dataTestId}-SPAN-iBEcrY`\">{{ t(column.text) }}</span>\n <!-- 右侧插槽 -->\n <component\n :is=\"column.rightSlot\"\n v-if=\"column.rightSlot\"\n :data-test-id=\"`${dataTestId}-COMPONENT-WYbm6e`\"\n />\n </div>\n </template>\n <!-- 需要格式化的table项 -->\n <!-- 自定义列, 当格式化无法满足时可以使用自定义列 -->\n <template v-if=\"column.columntSlot\" #default=\"{ row, $index }\">\n <component\n :is=\"column.columntSlot\"\n :row=\"row\"\n :index=\"$index\"\n :data-test-id=\"`${dataTestId}-COMPONENT-24Y9n6`\"\n />\n </template>\n <template v-else-if=\"column.formatter\" #default=\"{ row }\">\n <!-- \n tags格式化格式: {\n bgColor: 'tag背景颜色',\n textColor: 'tag文字颜色',\n text: '国际化后的文本',\n } \n -->\n <el-tag\n v-if=\"column.formatterType === 'tags'\"\n :style=\"`color:${column.formatter(row, column).bgColor}`\"\n style=\"margin-left: 4px\"\n :color=\"column.formatter(row, column).textColor\"\n :data-test-id=\"`${dataTestId}-EL-TAG-mfRiQa`\"\n >\n {{ t(column.formatter(row, column).text || column.holders || holders) }}\n </el-tag>\n <div v-else-if=\"column.formatterType === 'icon'\" :data-test-id=\"`${dataTestId}-DIV-bLxOMG`\">\n <!-- \n icon格式化格式: {\n icon: '需要显示v-icon图标', \n color: '图标的颜色', \n text: '国际化后的文本'\n } \n text配置的话会显示tooltip,不配置则不显示 \n -->\n <el-tooltip\n v-if=\"column.formatter(row, column).text\"\n class=\"box-item\"\n effect=\"dark\"\n :content=\"column.formatter(row, column).text\"\n placement=\"top\"\n :data-test-id=\"`${dataTestId}-EL-TOOLTIP-LsKqgG`\"\n >\n <v-icon\n v-if=\"column.formatter(row, column) && column.formatter(row, column).icon\"\n :class=\"column.formatter(row, column).icon\"\n :style=\"`color: ${column.formatter(row, column).color};`\"\n :data-test-id=\"`${dataTestId}-V-ICON-qSsT49`\"\n />\n <span v-else>{{ t(column.holders || holders) }}</span>\n </el-tooltip>\n <v-icon\n v-else-if=\"column.formatter(row, column) && column.formatter(row, column).icon\"\n :class=\"column.formatter(row, column).icon\"\n :style=\"`color: ${column.formatter(row, column).color};`\"\n :data-test-id=\"`${dataTestId}-V-ICON-qSsT49`\"\n />\n <span v-else>{{ t(column.holders || holders) }}</span>\n </div>\n <!-- \n file格式化格式: [{\n file: '文件地址', \n name: '文件名称,用于列表显示', \n }]\n 如果没有name则显示file,如果都没有则显示占位符\n -->\n <div v-else-if=\"column.formatterType === 'file'\" :data-test-id=\"`${dataTestId}-DIV-6Qg7rD`\">\n <template v-if=\"column.formatter(row, column) && column.formatter(row, column).length > 0\">\n <div\n v-for=\"(file, cut) in column.formatter(row, column)\"\n :key=\"cut\"\n class=\"file-name\"\n :style=\"`color: ${file.color || '#409eff'};`\"\n :data-test-id=\"`${dataTestId}-DIV-Et2BFU-${cut}`\"\n >\n {{ file.name || file.file }}\n <span\n v-if=\"cut < column.formatter(row, column).length - 1\"\n :data-test-id=\"`${dataTestId}-SPAN-wLZkzY`\"\n >\n ,\n </span>\n </div>\n </template>\n <template v-else>\n <span>{{ t(column.holders || holders) }}</span>\n </template>\n </div>\n <!-- \n link格式化格式: {\n link: '链接地址', \n name: '链接名称,用于列表显示', \n }\n 如果没有name则显示link,如果都没有则显示占位符\n -->\n <div v-else-if=\"column.formatterType === 'link'\" :data-test-id=\"`${dataTestId}-DIV-54trNN`\">\n <el-link\n :href=\"column.formatter(row, column).link\"\n :underline=\"column.formatter(row, column).underline\"\n target=\"_blank\"\n :style=\"formatterLinkStyle(row, column)\"\n :data-test-id=\"`${dataTestId}-EL-LINK-8g2RDk`\"\n >\n {{\n column.formatter(row, column).name || column.formatter(row, column).link || column.holders || holders\n }}\n </el-link>\n </div>\n <span v-else :data-test-id=\"`${dataTestId}-SPAN-rCQPnk`\">{{\n column.formatter(row, column) || holders\n }}</span>\n </template>\n <template v-else #default=\"{ row }\">\n <span>{{ t(row[column.value] || column.holders || holders) }}</span>\n </template>\n </el-table-column>\n <!-- 操作列(固定) -->\n <el-table-column\n v-if=\"tableActionsWidth > 0\"\n :label=\"t('Syn_action')\"\n :min-width=\"tableActionsWidth\"\n :fixed=\"actionsFixed\"\n align=\"center\"\n :data-test-id=\"`${dataTestId}-EL-TABLE-COLUMN-gLrVJL`\"\n >\n <template #default=\"{ row, $index }\">\n <!-- 直接使用父组件传递的 slot,并传递数据 -->\n <slot name=\"tableActions\" :row=\"row\" :index=\"$index\" />\n </template>\n </el-table-column>\n </el-table>\n </div>\n <!-- 分页组件 -->\n <div v-if=\"showPagination\" class=\"pagination-content\" :data-test-id=\"`${dataTestId}-DIV-UYLlzi`\">\n <pagination\n style=\"background-color: transparent; padding-bottom: 0.625rem; padding-top: 1.25rem\"\n :total=\"total\"\n :current-page=\"currentPage\"\n :page-size=\"pageSize\"\n :selected-num=\"selectedRows.length\"\n :current-count=\"tableData.length\"\n :has-selected=\"hasSelected\"\n :permission-code=\"permissionCode\"\n :data-test-id=\"`${dataTestId}-PAGINATION-msjXvX`\"\n :page-type=\"pageType\"\n :pager-count=\"pagerCount\"\n @changePage=\"handlePageChange\"\n />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport pagination from '@/components/Pagination.vue';\n\nconst props = defineProps({\n // 表格数据\n tableData: {\n type: Array,\n default: () => [],\n },\n // 列配置\n columns: {\n type: Array,\n default: () => [],\n },\n // 操作列的最小宽度,设置为0则不显示\n tableActionsWidth: {\n type: Number,\n default: 120,\n },\n // 分页信息\n currentPage: {\n type: Number,\n default: 1,\n },\n pageSize: {\n type: Number,\n default: 20,\n },\n // table的loading状态\n loading: {\n type: Boolean,\n default: false,\n },\n // 功能开关\n showSelection: {\n type: Boolean,\n default: true,\n },\n // 是否显示序号列\n showIndex: {\n type: Boolean,\n default: true,\n },\n // 操作列固定规则\n actionsFixed: {\n type: [Boolean, String],\n default: 'right',\n },\n // 列的最小宽度\n columnMinWidth: {\n type: Number,\n default: 200,\n },\n permissionCode: {\n type: String,\n default: '',\n },\n total: {\n // table数据总数量,用于分页\n type: Number,\n default: 0,\n },\n // 复选框选择的数据长度,用于分页组件回显已选中条数\n selectedNum: {\n type: Number,\n default: 0,\n },\n // 默认的排序列的 prop 和顺序。\n defaultSort: {\n type: Object,\n default: () => ({}),\n },\n // 是否显示合计行\n showSummary: {\n type: Boolean,\n default: false,\n },\n // 合并格式方法\n summaryMethod: Function,\n // 选择列禁用规则\n selectable: Function,\n pageType: Number,\n // 是否显示分页组件\n showPagination: {\n type: Boolean,\n default: true,\n },\n dataTestId: String,\n hasChildTable: {\n type: Boolean,\n default: false,\n },\n childItems: {\n type: Array,\n default: () => [],\n },\n // 是否显示子集选中框\n showChildSelection: {\n type: Boolean,\n default: false,\n },\n // 是否显示子集序号列\n showChildIndex: {\n type: Boolean,\n default: false,\n },\n childAttrs: {\n type: Object,\n default: () => ({}),\n },\n hasSelected: {\n type: Boolean,\n default: false,\n },\n pagerCount: {\n type: Number,\n default: 7,\n },\n // 数据为空时的占位符\n holders: {\n type: String,\n default: '--',\n },\n // 展开列是否显示全部展开图标\n showAllExpend: {\n type: Boolean,\n default: false,\n },\n});\n\nconst $emit = defineEmits([\n 'selectionChange', // 选中行\n 'sortChange', // 自定义排序\n 'cellClick', // 单元格点击\n 'pageChange',\n]);\nconst { t } = useI18n();\nconst tableRef = ref();\nconst selectedRows = ref([]);\nconst childSelections = ref([]);\n\nconst isAllExpanded = ref(false);\n// 切换全部展开/折叠\nconst toggleAllExpand = () => {\n if (!tableRef.value) return;\n\n if (isAllExpanded.value) {\n // 折叠全部\n props.tableData.forEach((row) => {\n tableRef.value.toggleRowExpansion(row, false);\n });\n } else {\n // 展开全部\n props.tableData.forEach((row) => {\n tableRef.value.toggleRowExpansion(row, true);\n });\n }\n};\n// 监听二级table的展开/收起状态修改全部展开/收起的状态\nconst onExpandChange = (rows, expandedRows) => {\n if (expandedRows.length === props.tableData.length && !isAllExpanded.value) {\n isAllExpanded.value = true;\n } else {\n isAllExpanded.value = false;\n }\n};\n// 监听表格数据变化,如果数据变化则重置展开状态\nwatch(props.tableData, () => {\n isAllExpanded.value = false;\n});\nconst tableColumns = computed(() => {\n return props.columns.filter((item) => !!item.isShown);\n});\n// 计算行索引\nconst getRowIndex = (index) => {\n return (props.currentPage - 1) * props.pageSize + index + 1;\n};\n// 排序\nfunction onSortChange(e) {\n if (e.column.sortable === 'custom') {\n $emit('sortChange', e);\n } else {\n tableRef.value.sort(e.prop, e.order);\n }\n}\nfunction formatterLinkStyle(row, column) {\n const obj = column.formatter(row, column);\n return `\n --el-link-hover-text-color: ${obj.hoverColor || '#409eff'};\n --el-link-text-color: ${obj.color || '#606266'}\n `;\n}\n// 选择变化事件\nconst handleSelectionChange = (type, selection, index) => {\n if (type === 1) {\n selectedRows.value = selection;\n } else if (type === 2) {\n childSelections.value[index] = selection;\n }\n $emit('selectionChange', {\n parent: selectedRows.value,\n child: childSelections.value,\n });\n};\n\n// 清空选择\nconst clearSelection = () => {\n tableRef.value?.clearSelection();\n};\n\n// 切换选择行\nconst toggleRowSelection = (row, selected) => {\n tableRef.value?.toggleRowSelection(row, selected);\n};\nconst handlePageChange = (val) => {\n $emit('pageChange', val);\n};\n// 单元格点击事件,返回row和cell\nfunction onCellClick(row, cell) {\n $emit('cellClick', {\n row,\n cell,\n });\n}\n// 暴露方法\ndefineExpose({\n tableRef,\n getTableRef: () => tableRef.value,\n clearSelection,\n toggleRowSelection,\n selectedRows,\n});\n</script>\n\n<style lang=\"scss\" scoped>\n@use '@/scss/base/table.scss';\n.table-wrapper {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n .table-content {\n flex: 1;\n overflow: hidden;\n }\n .file-name {\n color: rgb(18, 80, 136);\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n :deep(.el-table) {\n --el-table-header-bg-color: #edf3f8;\n --el-table-header-text-color: #303133;\n --el-table-border-color: #ebeef5;\n --el-table-row-hover-bg-color: #f5f7fa;\n\n height: 100%;\n\n .el-table__body-wrapper {\n scrollbar-width: thin;\n\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #c0c4cc;\n border-radius: 3px;\n }\n }\n\n // 操作列样式\n .el-table__fixed-right {\n .el-button-group {\n :deep(.el-button) {\n padding: 4px 8px;\n\n &:hover {\n color: var(--el-color-primary);\n background-color: var(--el-fill-color-light);\n }\n }\n }\n }\n }\n}\n</style>\n","<template>\n <div :data-test-id=\"`${dataTestId}-DIV-CHFzZk`\">\n <pageContent\n v-loading=\"pageLoading\"\n :is-tab=\"false\"\n :is-view=\"true\"\n :data-test-id=\"`${dataTestId}-PAGECONTENT-izX8Nl`\"\n >\n <template #viewContent>\n <!-- 顶部tabs操作栏 -->\n <header-tabs\n v-if=\"hasHeaderTabs\"\n ref=\"viewManagerRef\"\n :permission-data=\"permissionData\"\n :data-test-id=\"`${dataTestId}-DIV-9lfM7M`\"\n :select-options=\"selectOptions\"\n :default-create-time-string=\"defaultCreateTimeString\"\n @update:permissionData=\"handlePermissionDataUpdate\"\n />\n </template>\n <template #headerContent>\n <!-- 操作按钮区域 -->\n <header-operation\n v-if=\"hasHeaderOperation\"\n :buttons=\"topButtons\"\n :justify-content-sting=\"justifyContentString\"\n :data-test-id=\"`${dataTestId}-HEADER-OPERATION-XO8TJP`\"\n />\n </template>\n <template #searchContent>\n <!-- 搜索表单区域 -->\n <customFilter\n v-if=\"hasSearchContent\"\n ref=\"querySearchRef\"\n :can-edit-headers=\"tableColumns\"\n :data-test-id=\"`${dataTestId}-CUSTOMFILTER-7SqxcZ`\"\n :permission-code=\"permissionCode\"\n :has-column-config=\"hasColumnConfig\"\n :select-options=\"selectOptions\"\n :child-items=\"childItems\"\n :is-parent-checkbox=\"isParentCheckbox\"\n :is-child-checkbox=\"isChildCheckbox\"\n :is-child=\"isChild\"\n :parent-label=\"parentLabel\"\n :child-label=\"childLabel\"\n :disabled-column-config=\"disabledColumnConfig\"\n @filterSearch=\"query\"\n @parentSaveData=\"parentSaveData\"\n @childSaveData=\"childSaveData\"\n />\n </template>\n <template #tableContent>\n <table-content\n ref=\"tableContentRef\"\n :loading=\"tableLoading\"\n :table-data=\"dataList\"\n :columns=\"tableColumns\"\n :total=\"total\"\n :current-page=\"currentPage\"\n :page-size=\"pageSize\"\n :table-actions-width=\"tableActionsWidth\"\n :show-selection=\"showSelection\"\n :show-index=\"showIndex\"\n :column-min-width=\"columnMinWidth\"\n :permission-code=\"permissionCode\"\n :page-type=\"pageType\"\n :show-pagination=\"showPagination\"\n :data-test-id=\"`${dataTestId}-TABLE-CONTENT-NH3XBf`\"\n :default-sort=\"defaultSort\"\n :show-summary=\"showSummary\"\n :summary-method=\"summaryMethod\"\n :selectable=\"selectable\"\n :child-items=\"childItems\"\n :show-child-selection=\"showChildSelection\"\n :show-child-index=\"showChildIndex\"\n v-bind=\"$attrs\"\n :child-attrs=\"{\n ...childAttrs,\n onHeaderDragend: onChildHeaderDragend,\n }\"\n :has-child-table=\"hasChildTable\"\n :has-selected=\"hasSelected\"\n :pager-count=\"pagerCount\"\n :holders=\"holders\"\n :show-all-expend=\"showAllExpend\"\n @header-dragend=\"onHeaderDragend\"\n @cellClick=\"$emit('cellClick', $event)\"\n @sortChange=\"$emit('sortChange', $event)\"\n @selectionChange=\"onSelectionChange\"\n @pageChange=\"onPageChange\"\n >\n <template #customColumn=\"{ row, index }\">\n <slot name=\"customColumn\" :row=\"row\" :index=\"index\" />\n </template>\n <template #tableActions=\"{ row, index }\">\n <slot name=\"tableActions\" :row=\"row\" :index=\"index\" />\n </template>\n </table-content>\n </template>\n </pageContent>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\n\n// 组件导入\nimport pageContent from '@/components/pageContent.vue';\nimport HeaderTabs from '@/components/customTable/components/headerTabs/index.vue';\nimport HeaderOperation from '@/components/customTable/components/headerOperation/index.vue';\nimport TableContent from '@/components/customTable/components/tableContent/index.vue';\nimport customFilter from '@/components/customFilter/customFilter.vue';\n\nconst props = defineProps({\n hasHeaderTabs: {\n // 是否显示顶部tabs\n type: Boolean,\n default: true,\n },\n hasHeaderOperation: {\n // 是否显示顶部操作按钮组\n type: Boolean,\n default: true,\n },\n justifyContentString: {\n // 按钮display:flex的位置\n type: String,\n default: 'flex-start',\n },\n hasSearchContent: {\n // 是否显示搜索表单\n type: Boolean,\n default: true,\n },\n hasColumnConfig: {\n // 是否显示列配置,由于列配置存在于customFilter中,前提必须要hasSearchContent=true\n // 分开控制的话看是否需要调整搜索组件的比例\n type: Boolean,\n default: true,\n },\n auto: {\n // 是否自动加载数据\n type: Boolean,\n default: true,\n },\n pageLoading: {\n // 页面加载状态\n type: Boolean,\n default: false,\n },\n tableLoading: {\n // table加载状态\n type: Boolean,\n default: false,\n },\n total: {\n // table数据总数量,用于分页\n type: Number,\n default: 0,\n },\n tableColumns: {\n // 定义的table列数据\n type: Array,\n default: () => [],\n },\n // 分页所需请求页面权限code码\n permissionCode: {\n type: String,\n default: '',\n },\n // 操作列的最小宽度,设置为0则不显示\n tableActionsWidth: {\n type: Number,\n default: 120,\n },\n // 功能开关,选择列\n showSelection: {\n type: Boolean,\n default: true,\n },\n // 是否显示序号列\n showIndex: {\n type: Boolean,\n default: true,\n },\n // 列的最小宽度,如果固定列配置中配置了minWidth则配置列优先使用minWidth,其他未配置的则使用columnMinWidth\n columnMinWidth: {\n type: Number,\n default: 200,\n },\n // 是否显示合计行\n showSummary: {\n type: Boolean,\n default: false,\n },\n // 合并格式方法\n summaryMethod: Function,\n // 选择列禁用规则\n selectable: Function,\n // 视图组件数据\n permissionData: {\n type: Object,\n default: () => ({}),\n },\n selectOptions: {\n type: Object,\n default: () => ({}),\n },\n defaultCreateTimeString: {\n type: String,\n default: 'createTime',\n },\n // 顶部按钮组--固定在右边\n topButtons: {\n type: Array,\n default: () => [],\n },\n // 默认的排序列的 prop 和顺序。\n defaultSort: {\n type: Object,\n default: () => ({}),\n },\n pageType: Number,\n // 是否显示分页组件\n showPagination: {\n type: Boolean,\n default: true,\n },\n dataTestId: String,\n childItems: Array,\n // 是否禁用列配置\n disabledColumnConfig: {\n type: Boolean,\n default: false,\n },\n // 父表头是否显示复选框\n isParentCheckbox: {\n type: Boolean,\n default: true,\n },\n parentLabel: String, // 父表头名称\n childLabel: String, // 子表头名称\n isChildCheckbox: Boolean, // 子表头是否显示复选框\n isChild: Boolean, // 是否子表头列配置\n hasChildTable: {\n type: Boolean,\n default: false,\n },\n // 是否显示子集选中框\n showChildSelection: {\n type: Boolean,\n default: false,\n },\n // 是否显示子集序号列\n showChildIndex: {\n type: Boolean,\n default: false,\n },\n childAttrs: {\n type: Object,\n default: () => ({}),\n },\n hasSelected: {\n type: Boolean,\n default: false,\n },\n pagerCount: {\n type: Number,\n default: 7,\n },\n // 数据为空时的占位符\n holders: {\n type: String,\n default: '--',\n },\n // 展开列是否显示全部展开图标\n showAllExpend: {\n type: Boolean,\n default: false,\n },\n});\nconst $emit = defineEmits([\n 'update:modelValue',\n 'reload', // 表格请求数据\n 'sortChange', // 自定义排序\n 'selectionChange', // 选中行\n 'columnsSaveData', // 列配置更改\n 'columnsChildSaveData', // 子级列配置更改\n 'cellClick', // 单元格点击\n 'update:permissionData',\n]);\nconst tableContentRef = ref();\nconst dataList = ref([]);\nconst selectList = ref([]);\nconst currentPage = ref(1);\nconst pageSize = ref(20);\nconst total = computed(() => {\n return props.total;\n});\n\n// 筛选条件\nconst paginationParams = computed(() => ({\n startIndex: (currentPage.value - 1) * pageSize.value,\n count: pageSize.value,\n}));\nfunction query(e) {\n currentPage.value = 1;\n // 将filterSearch事件传递给父组件\n $emit('filterSearch', e);\n}\n// table数据赋值\nfunction complete(data) {\n dataList.value = data;\n $emit('update:modelValue', data);\n}\n// 数据刷新,用于首次数据请求,刷新数据等\nfunction reload() {\n $emit('reload', paginationParams.value);\n}\n\nconst tableColumns = computed(() => {\n return props.tableColumns;\n});\n// 列宽变化监听,上报列配置数据\nfunction onHeaderDragend(newWidth, _oldWidth, column) {\n const columns = tableColumns.value.map((elem) => {\n if (elem.value === column.rawColumnKey) {\n elem.minWidth = newWidth;\n }\n return elem;\n });\n $emit('columnsSaveData', columns);\n}\nfunction onChildHeaderDragend(newWidth, _oldWidth, column) {\n const columns = props.childItems.map((elem) => {\n if (elem.value === column.property) {\n elem.minWidth = newWidth;\n }\n return elem;\n });\n $emit('columnsChildSaveData', columns);\n}\nconst parentSaveData = async (val) => {\n $emit('columnsSaveData', val);\n};\n// 子级数据保存\nconst childSaveData = async (val) => {\n $emit('columnsChildSaveData', val);\n};\n// 页码切换\nconst onPageChange = (val) => {\n currentPage.value = val.page;\n pageSize.value = val.size;\n $emit('reload', paginationParams.value);\n};\n// 选择行变化\nfunction onSelectionChange(e) {\n selectList.value = e;\n $emit('selectionChange', e);\n}\n// 处理权限数据更新\nfunction handlePermissionDataUpdate(data) {\n currentPage.value = 1;\n $emit('update:permissionData', data);\n}\n// 暴露方法给父组件\ndefineExpose({\n tableContentRef,\n complete,\n reload,\n getTableData: () => dataList.value,\n});\n</script>\n\n<style lang=\"scss\" scoped>\n@use '@/scss/base/table.scss';\n\n.statusColor {\n min-width: 100px;\n height: 40px;\n text-align: center;\n line-height: 40px;\n}\n\n.a-text-class {\n color: #409eff;\n cursor: pointer;\n text-decoration: underline;\n}\n\n.ellipsis-single-line {\n white-space: nowrap;\n /* 禁止换行 */\n overflow: hidden;\n /* 隐藏超出内容 */\n text-overflow: ellipsis;\n /* 显示省略号 */\n}\n</style>\n","<template>\n <div data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-DIV-zxwplc\">\n <div data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-DIV-Hm6NAJ\">\n <el-form label-width=\"auto\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-FORM-czGUUO\">\n <el-row :gutter=\"20\" justify=\"space-between\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-ROW-CikUiL\">\n <el-col :span=\"8\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-COL-esHfYl\">\n <el-form-item\n :label=\"t('manufacturerIDOfPOM')\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-FORM-ITEM-HSF1oU\"\n >\n <el-input\n v-model=\"manufacturerCode\"\n clearable\n :placeholder=\"t('pleaseEnter')\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-INPUT-dlRMIQ\"\n />\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-COL-4mhNKU\">\n <el-form-item\n :label=\"t('businessName')\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-FORM-ITEM-lW758Z\"\n >\n <el-input\n v-model=\"manufacturerName\"\n clearable\n :placeholder=\"t('pleaseEnter')\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-INPUT-dWDvdr\"\n />\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-COL-ZJakAr\">\n <div style=\"text-align: center\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-DIV-M8tHsd\">\n <el-button\n type=\"primary\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-BUTTON-oQLblc\"\n @click=\"search\"\n >\n {{ t('query') }}\n </el-button>\n <el-button data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-BUTTON-mYXWmS\" @click=\"reset\">{{\n t('Syn_reset')\n }}</el-button>\n <ColumnConfig\n :parent-items=\"draggableItems\"\n :is-parent-checkbox=\"true\"\n :is-child=\"false\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-COLUMNCONFIG-PYR6Ao\"\n @parentSaveData=\"saveData\"\n >\n </ColumnConfig>\n </div>\n </el-col>\n </el-row>\n <el-collapse-transition data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-COLLAPSE-TRANSITION-vxeyGr\">\n <div v-show=\"show\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-DIV-O2Yqgg\">\n <el-row :gutter=\"20\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-ROW-7A2IXy\">\n <el-col :span=\"8\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-COL-ewgZ1a\">\n <el-form-item\n :label=\"t('manufacturerAbbreviationOfPOM')\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-FORM-ITEM-39HG37\"\n >\n <el-input\n v-model=\"manufacturerAbbreviation\"\n clearable\n :placeholder=\"t('pleaseEnter')\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-INPUT-sH3i1A\"\n />\n </el-form-item>\n </el-col>\n </el-row>\n </div>\n </el-collapse-transition>\n </el-form>\n </div>\n <el-divider style=\"margin: 4px 0 24px 0\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-DIVIDER-dqCrw9\">\n <el-icon data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-ICON-6NE00y\" @click=\"show = !show\">\n <ArrowUpBold v-if=\"show\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-ARROWUPBOLD-VstZiP\" />\n <ArrowDownBold v-else data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-ARROWDOWNBOLD-fG5Y3y\" />\n </el-icon>\n </el-divider>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue';\nimport ColumnConfig from '@/components/columnConfigNext.vue';\n\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps({\n canEditHeaders: Array,\n});\nconst emit = defineEmits(['filterSearch', 'saveData']);\nconst { t } = useI18n();\n// 搜索维度字段定义\nconst manufacturerCode = ref(''); // 厂商编号\nconst manufacturerName = ref(''); // 厂商名称\nconst status = ref(1); // 状态\nconst manufacturerAbbreviation = ref(''); // 厂商简称\n// 搜索维度展开绑定\nconst show = ref(false);\nconst reset = () => {\n manufacturerCode.value = '';\n manufacturerName.value = '';\n status.value = 1;\n manufacturerAbbreviation.value = '';\n};\nconst search = () => {\n const searchData = {\n manufacturerCode: manufacturerCode.value,\n manufacturerName: manufacturerName.value,\n manufacturerAbbreviation: manufacturerAbbreviation.value,\n status: status.value,\n };\n emit('filterSearch', searchData);\n};\nconst draggableItems = ref([]);\nconst saveData = (val) => {\n emit('saveData', val);\n};\nwatch(\n () => props.canEditHeaders,\n () => {\n draggableItems.value = props.canEditHeaders;\n },\n { immediate: true },\n);\ndefineExpose({\n search,\n reset,\n});\n</script>\n\n<style scoped>\n.button-container {\n min-width: 240px;\n}\n</style>\n","<template>\n <el-dialog\n v-model=\"showDialog\"\n :before-close=\"dialogOptions.beforeClose\"\n :width=\"`${dialogOptions.width}%`\"\n :close-on-click-modal=\"closeOnClickModal\"\n :btn_array=\"dialogOptions.btns\"\n :scope=\"dialogOptions.scope\"\n :append-to-body=\"true\"\n :modal-append-to-body=\"true\"\n center\n align-center\n class=\"globalDialog\"\n style=\"border-radius: 6px\"\n :data-test-id=\"`${dataTestId}-EL-DIALOG-cQVOLz`\"\n @optionClick=\"optionClick\"\n >\n <template #header>\n {{ $t(dialogOptions.title) }}\n </template>\n <div :style=\"{ height: defHeight + 'rem' }\" :data-test-id=\"`${dataTestId}-DIV-9zutsg`\">\n <div class=\"bodydivcontent\" :data-test-id=\"`${dataTestId}-DIV-KWYRpI`\">\n <slot />\n </div>\n </div>\n <template v-if=\"!dialogOptions.isReadonly\" #footer>\n <div v-if=\"!dialogOptions.customFooter\" class=\"dialog-footer\" :data-test-id=\"`${dataTestId}-DIV-YsulBT`\">\n <el-button\n v-show=\"!dialogOptions.detail && !loading\"\n type=\"primary\"\n :data-test-id=\"`${dataTestId}-EL-BUTTON-atr1gR`\"\n @click=\"dialogEvent('submit')\"\n >{{ $t('Syn_confirm') }}\n </el-button>\n <el-button\n v-show=\"!dialogOptions.detail && loading\"\n type=\"primary\"\n :loading=\"loading\"\n :data-test-id=\"`${dataTestId}-EL-BUTTON-Kjdhyk`\"\n @click=\"dialogEvent('submit')\"\n >{{ $t('Syn_confirm') }}\n </el-button>\n <!-- <el-button style=\"color: #595959\" @click=\"dialogEvent('close')\">{{ $t('cancel') }}</el-button> -->\n </div>\n <span v-else class=\"dialog-footer\" :data-test-id=\"`${dataTestId}-SPAN-bKKXSO`\">\n <slot name=\"footer\" />\n </span>\n </template>\n </el-dialog>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue';\n// eslint-disable-next-line vue/valid-define-emits\nconst emit = defineEmits();\nconst props = defineProps({\n dialogOptions: {\n type: Object,\n required: true,\n width: {\n type: String,\n default: '30%',\n },\n title: {\n type: String,\n default: '标题',\n },\n appendBody: {\n type: Boolean,\n default: false,\n },\n dialogStatus: {\n type: Boolean,\n required: true,\n default: false,\n },\n isReadonly: {\n type: Boolean,\n default: false,\n },\n },\n dataTestId: {\n type: String,\n default: '',\n },\n});\nconst loading = ref(false);\nconst closeOnClickModal = ref(false);\nconst defHeight = ref(props.dialogOptions.height);\n\nfunction optionClick(name, obj, btns, scope) {\n emit(name, obj, btns, scope);\n}\nfunction dialogEvent(type) {\n loading.value = true;\n emit(type);\n setTimeout(function () {\n loading.value = false;\n }, 2000);\n}\nconst showDialog = ref(false);\nwatch(\n () => props.dialogOptions.dialogStatus,\n (val) => {\n showDialog.value = val;\n },\n);\n</script>\n\n<style scoped lang=\"scss\">\n.bodydivcontent {\n height: 100%;\n}\n.dialog-footer {\n margin: 0 auto;\n text-align: center;\n height: 40px;\n}\n</style>\n","const getTextWidth = (text) => {\n const span = document.createElement('span');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.top = '-9999px';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '16px';\n span.innerText = text;\n document.body.appendChild(span);\n const width = span.offsetWidth + 16;\n document.body.removeChild(span);\n return width;\n};\nexport function getColumnWidth(label, prop, tableData, minWidth = 80) {\n //label表头名称\n //prop对应的内容\n //tableData表格数据\n //minWidth最小宽度\n const padding = 10; // 列内边距\n let arr = tableData.map((item) => item[prop]);\n arr.push(label); //拼接内容和表头数据\n const contentWidths = arr.map((item) => {\n const value = item ? String(item) : '';\n const textWidth = getTextWidth(value);\n return textWidth + padding > 300 ? 300 : textWidth + padding;\n });\n const maxWidth = Math.max(...contentWidths);\n return Math.max(minWidth, maxWidth);\n}\n","<template>\n <global-dialog\n :dialog-options=\"dialogOptions\"\n data-test-id=\"POM-MANUFACTURERLIST-GLOBAL-DIALOG-B1IELc\"\n @close=\"close\"\n @submit=\"submit\"\n >\n <div style=\"height: 100%\" data-test-id=\"POM-MANUFACTURERLIST-DIV-u8vNlA\">\n <div v-loading=\"isShowlading\" style=\"height: 100%\" data-test-id=\"POM-MANUFACTURERLIST-DIV-ZGHYIZ\">\n <el-row :gutter=\"24\" style=\"height: 100%\" data-test-id=\"POM-MANUFACTURERLIST-EL-ROW-FLYneH\">\n <el-col :span=\"24\" style=\"height: 100%\" data-test-id=\"POM-MANUFACTURERLIST-EL-COL-2yPUWl\">\n <componentView style=\"height: 100%\" data-test-id=\"POM-MANUFACTURERLIST-COMPONENTVIEW-L1X9yq\">\n <template #searchContent>\n <querySearch\n ref=\"searchRef\"\n :can-edit-headers=\"canEditHeaders\"\n data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-FO7eTg\"\n @saveData=\"saveData\"\n @filterSearch=\"search\"\n />\n </template>\n <template #tableContent>\n <el-table\n ref=\"multipleTableRef\"\n v-loading=\"tableLoading\"\n :data=\"tableData\"\n border\n height=\"100%\"\n :header-row-class-name=\"leftheaderStyle\"\n header-cell-class-name=\"tableHeaderCell\"\n row-key=\"manufacturerId\"\n class=\"commonTable\"\n data-test-id=\"POM-MANUFACTURERLIST-EL-TABLE-aJSZ6v\"\n @selection-change=\"handleSelectionChange\"\n >\n <el-table-column\n fixed\n type=\"selection\"\n width=\"55\"\n reserve-selection\n data-test-id=\"POM-MANUFACTURERLIST-EL-TABLE-COLUMN-rh99sy\"\n />\n <el-table-column\n label=\"#\"\n type=\"index\"\n fixed\n width=\"70\"\n align=\"center\"\n data-test-id=\"POM-MANUFACTURERLIST-EL-TABLE-COLUMN-KPHAlg\"\n >\n <template #default=\"scope\">\n <span data-test-id=\"POM-MANUFACTURERLIST-SPAN-zhC9on\">{{ calcIndex(scope.$index) }}</span>\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"coulmnData in tableHeaders\"\n :key=\"coulmnData.value\"\n :label=\"coulmnData.text\"\n :prop=\"coulmnData.value\"\n :fixed=\"coulmnData.freeze\"\n :width=\"getColumnWidth(coulmnData.text, coulmnData.value, tableData, 200)\"\n show-overflow-tooltip\n align=\"center\"\n data-test-id=\"POM-MANUFACTURERLIST-EL-TABLE-COLUMN-AfdwUX\"\n >\n <template #header>\n <span v-if=\"String(coulmnData.text).length > 16\" data-test-id=\"POM-MANUFACTURERLIST-SPAN-HWmw4C\">\n <el-tooltip\n :content=\"coulmnData.text\"\n placement=\"top\"\n :enterable=\"false\"\n data-test-id=\"POM-MANUFACTURERLIST-EL-TOOLTIP-4lIfdb\"\n >\n {{ coulmnData.text.slice(0, 16) }}...\n </el-tooltip>\n </span>\n <span v-else data-test-id=\"POM-MANUFACTURERLIST-SPAN-xmRWDt\"> {{ coulmnData.text }} </span>\n </template>\n <template #default=\"scope\">\n <el-tag\n v-if=\"coulmnData.value === 'status'\"\n :type=\"scope.row[coulmnData.value] === 1 ? 'success' : 'danger'\"\n disable-transitions\n data-test-id=\"POM-MANUFACTURERLIST-EL-TAG-vjiMOM\"\n >{{ scope.row[coulmnData.value] === 1 ? t('enable') : t('disable') }}\n </el-tag>\n <span\n v-else-if=\"\n scope.row[coulmnData.value] &&\n (coulmnData.value === 'modiDate' || coulmnData.value === 'consDate')\n \"\n data-test-id=\"POM-MANUFACTURERLIST-SPAN-NhP42E\"\n >{{ dayjs(scope.row[coulmnData.value]).format('YYYY-MM-DD HH:mm:ss') }}\n </span>\n <span v-else data-test-id=\"POM-MANUFACTURERLIST-SPAN-gZHHdW\">{{\n scope.row[coulmnData.value] || '--'\n }}</span>\n </template>\n </el-table-column>\n </el-table>\n <pagination\n style=\"background-color: transparent; padding-bottom: 0.625rem; padding-top: 1.25rem\"\n :total=\"page.total\"\n :current-page=\"page.currentPage\"\n :page-size=\"page.pageSize\"\n :selected-num=\"selectData.length\"\n :has-selected=\"true\"\n :current-count=\"tableData.length\"\n data-test-id=\"POM-MANUFACTURERLIST-PAGINATION-xlga8X\"\n permission-code=\"DML_110024\"\n @changePage=\"changePage\"\n >\n </pagination>\n </template>\n </componentView>\n </el-col>\n </el-row>\n <el-image-viewer\n v-if=\"showImage\"\n hide-on-click-modal\n :url-list=\"[imageSrc]\"\n data-test-id=\"POM-MANUFACTURERLIST-EL-IMAGE-VIEWER-ShEOSh\"\n @close=\"\n () => {\n showImage = false;\n }\n \"\n />\n </div>\n </div>\n </global-dialog>\n</template>\n\n<script setup>\nimport { computed, ref, nextTick, reactive } from 'vue';\nimport pagination from '@/components/Pagination.vue';\nimport querySearch from './querySearch.vue';\nimport backendApiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport dayjs from 'dayjs';\nimport { useI18n } from 'vue-i18n';\nimport componentView from '@/components/pageContent.vue';\nimport { ElMessage } from 'element-plus';\nimport globalDialog from '../../Layout/tools/GlobalDialog.vue';\nimport { getColumnWidth } from '@/utils/tableWidth.js';\n\nconst { t } = useI18n();\nconst tableLoading = ref(false); // table loading\nconst isShowlading = ref(false); // 整体 loading\n// 更多資料\nconst tableData = ref([]);\nconst page = ref({\n total: null,\n currentPage: 1,\n pageSize: 20,\n});\n// 表格固定字段\nconst headerList = computed(() => [\n {\n text: t('manufacturerIDOfPOM'),\n value: 'manufacturerCode',\n width: '100px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('businessName'),\n value: 'manufacturerName',\n width: '80px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('manufacturerAbbreviationOfPOM'),\n value: 'manufacturerAbbreviation',\n width: '80px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('status'),\n value: 'status',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('contactOfPOM'),\n value: 'manufacturerContactPerson',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('contactNumberOfPOM'),\n value: 'manufacturerContactPhone',\n width: '80px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('emailOfPOM'),\n value: 'manufacturerContactEmail',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('faxOfPOM'),\n value: 'manufacturerFax',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('contactAddressOfPOM'),\n value: 'manufacturerContactAddress',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('remarksOfPOM'),\n value: 'remark',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('createEmpName'),\n value: 'consUserName',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('createTime'),\n value: 'consDate',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('updatePerson'),\n value: 'modiUserName',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('updateTime'),\n value: 'modiDate',\n width: '120px',\n isFixed: false,\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n]);\n\nconst searchRef = ref(null); // 初始化搜索维度调用方法\nconst searchData = ref({}); // 记录搜索维度的数据\nconst selectData = ref([]); // 表格行选择内容绑定\nconst multipleTableRef = ref(null); // 表格\nconst getCustomList = ref([]); // 记录当前登陆者绑定了那些自定义字段\n// 列配置\nconst canEditHeaders = computed(() => {\n // 将表格固定字段以及自定义字段添加到对应的数组里面\n let allHeaderList = [\n ...headerList.value.map((ite) => ({\n ...ite,\n hideable: ite.isShown,\n })),\n ];\n const list = [];\n // 更新列配置是否勾选以及位置逻辑\n if (getCustomList.value?.length) {\n getCustomList.value.forEach((item) => {\n const filterItem = allHeaderList.find((i) => i.value === item.columnKey);\n if (filterItem) {\n list.push({\n ...filterItem,\n ...item,\n text: filterItem.text,\n });\n }\n });\n return [...list];\n }\n // 更新列配置是否勾选以及位置逻辑结束\n return allHeaderList;\n});\n// 页面表头\nconst tableHeaders = computed(() => {\n // 拼接表格固定字段以及自定义字段\n const allHeaderList = [...headerList.value];\n // 字段显隐逻辑\n const list = [];\n\n if (getCustomList.value?.length) {\n getCustomList.value.forEach((item) => {\n if (item.isShown) {\n const element = allHeaderList.find((el) => el.value === item.columnKey);\n if (element) {\n list.push({\n ...element,\n ...item,\n text: element.text,\n });\n }\n }\n });\n return [...list];\n }\n // 字段显隐逻辑结束\n return [...allHeaderList];\n});\n// 查询页面表格数据\nconst getManufacturerList = async () => {\n multipleTableRef.value.clearSelection();\n selectData.value = [];\n tableData.value = [];\n tableLoading.value = true;\n const body = searchData.value;\n body.count = page.value.pageSize;\n body.startIndex = page.value.currentPage !== 1 ? (page.value.currentPage - 1) * page.value.pageSize : 0;\n await backendApiFunction\n .getManufacturerList(body)\n .then(async (res) => {\n if (res.data.code === 0) {\n if (res.data.content.data.length !== 0) {\n // 查詢成功,顯示列表與總數\n page.value.total = res.data.content.totalCount;\n tableData.value = res.data.content.data;\n }\n } else {\n ElMessage.error(t('requestError'));\n }\n })\n .finally(() => {\n tableLoading.value = false;\n })\n .catch(() => {\n ElMessage.error(t('apiError'));\n });\n};\n// 序号列\nconst calcIndex = (index) => {\n return Number(index) + 1 + Number(page.value.pageSize * (page.value.currentPage - 1));\n};\nconst search = async (val) => {\n searchData.value = val;\n await getManufacturerList();\n};\n// 分页方法\nconst changePage = async (val) => {\n page.value.currentPage = val.page;\n page.value.pageSize = val.size;\n await getManufacturerList();\n};\n// 列配置信息获取\nconst getColumnSetting = async () => {\n getCustomList.value = [];\n // const params = {\n // displayIds: [110024201],\n // };\n await backendApiFunction\n .queryColumnSettingNext({ displayIds: [110024201] })\n .then((res) => {\n if (res.data.code === 0) {\n if (res.data.content) {\n getCustomList.value = res.data.content?.data[0]?.configJson?.columnSetting;\n }\n } else {\n getCustomList.value = [];\n }\n })\n .catch(() => {\n isShowlading.value = false;\n getCustomList.value = [];\n });\n};\nconst saveData = async (val) => {\n tableLoading.value = true;\n\n const list = val.map((item, index) => {\n return {\n ...item,\n order: index + 1,\n columnKey: item.isCustom ? item.columnKey : item.value,\n isShown: item.isShown,\n };\n });\n await backendApiFunction\n .updateColumnSettingNext({\n data: [\n {\n configJson: {\n displayId: 110024201,\n columnSetting: list,\n },\n displayId: 110024201,\n },\n ],\n })\n .then((res) => {\n tableLoading.value = false;\n if (res.data.code === 0) {\n getCustomList.value = list;\n }\n })\n .catch(() => {\n tableLoading.value = false;\n });\n};\nconst passPartNumber = ref('');\nconst getQueryString = () => {\n const passUrl = new URL(window.location.href);\n passPartNumber.value = passUrl.searchParams.get('partNumber');\n};\nconst dialogOptions = reactive({\n title: '',\n dialogStatus: false,\n width: '85',\n height: '50',\n loading: false,\n buttonValue: 'confirm',\n isClose: false,\n});\nconst isOnlySelect = ref(false);\nconst open = async (flag) => {\n isShowlading.value = true;\n dialogOptions.dialogStatus = true;\n dialogOptions.title = t('manufacturerListOfPOM');\n page.value.currentPage = 1;\n getQueryString();\n await getColumnSetting();\n isShowlading.value = false;\n nextTick(async () => {\n if (flag) {\n isOnlySelect.value = true;\n } else {\n isOnlySelect.value = false;\n }\n searchRef.value.search();\n });\n};\nconst leftheaderStyle = () => {\n if (isOnlySelect.value) {\n return 'seltAllbtnDis';\n } else {\n return 'tableHeader';\n }\n};\nconst handleSelectionChange = (item) => {\n selectData.value = item;\n // 单选\n if (isOnlySelect.value && item.length > 1) {\n multipleTableRef.value.clearSelection();\n multipleTableRef.value.toggleRowSelection(item.pop());\n }\n};\nconst emit = defineEmits(['selectedMate']);\nconst close = () => {\n dialogOptions.dialogStatus = false;\n selectData.value = [];\n searchRef.value.reset();\n multipleTableRef.value.clearSelection();\n};\n// 获取所选物料对应的productId\nconst submit = () => {\n if (selectData.value.length) {\n isShowlading.value = true;\n emit('selectedData', selectData.value);\n close();\n isShowlading.value = false;\n } else {\n ElMessage.error(t('pleaseSelectData'));\n }\n};\ndefineExpose({ open });\n</script>\n\n<style scoped>\n.title_name {\n float: left;\n /* width: 1rem; */\n height: 1.5rem;\n text-align: center;\n font-size: 15px;\n font-weight: 600;\n line-height: 1.5rem;\n border-left: 5px solid rgb(3, 3, 151);\n}\n</style>\n<style scoped lang=\"scss\">\n@use '@/scss/base/table.scss';\n:deep(.seltAllbtnDis > th > .cell > .el-checkbox) {\n visibility: hidden;\n}\n</style>\n","<template>\n <div data-test-id=\"DIV-1dfSUl\">\n <div data-test-id=\"DIV-84MEHk\">\n <el-form label-width=\"auto\" data-test-id=\"EL-FORM-U7lj1y\">\n <el-row :gutter=\"20\" justify=\"space-between\" data-test-id=\"EL-ROW-Ud0oNx\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-30K83S\">\n <el-form-item :label=\"t('productPartNumber')\" data-test-id=\"EL-FORM-ITEM-XOXM2W\">\n <el-input v-model=\"materialPartNumber\" :placeholder=\"t('pleaseEnter')\" data-test-id=\"EL-INPUT-jWhnPP\" />\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-AeC3C2\">\n <el-form-item :label=\"t('productName')\" data-test-id=\"EL-FORM-ITEM-y1CMDB\">\n <el-input v-model=\"materialPartName\" :placeholder=\"t('pleaseEnter')\" data-test-id=\"EL-INPUT-uS4lur\" />\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-rB8E89\">\n <div style=\"text-align: center\" data-test-id=\"DIV-dVYexi\">\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-JQxZt4\" @click=\"search()\">{{ t('query') }}</el-button>\n <el-button data-test-id=\"EL-BUTTON-Y19Qhj\" @click=\"reset\">{{ t('Syn_reset') }}</el-button>\n <el-dropdown\n ref=\"dropdownMaterial\"\n size=\"default\"\n type=\"primary\"\n trigger=\"click\"\n :hide-on-click=\"false\"\n style=\"margin-left: 15px\"\n data-test-id=\"EL-DROPDOWN-GExBgM\"\n >\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-lpnYWs\" @click=\"showClick\">\n {{ t('columnConfiguration') }}<el-icon class=\"mdi mdi-chevron-down\" data-test-id=\"EL-ICON-cgYm6A\" />\n </el-button>\n <template #dropdown>\n <el-dropdown-menu style=\"max-height: 400px\" data-test-id=\"EL-DROPDOWN-MENU-xbbwJT\">\n <VueDraggable v-model=\"draggableItems\" data-test-id=\"VUEDRAGGABLE-1hAnUN\" @end=\"saveData\">\n <el-dropdown-item\n v-for=\"item in draggableItems\"\n :key=\"item.value\"\n :command=\"item\"\n data-test-id=\"EL-DROPDOWN-ITEM-EXspar\"\n >\n <v-icon class=\"mdi mdi-drag\" style=\"margin-right: 10px\" data-test-id=\"V-ICON-gm9297\" />\n <el-checkbox\n v-model=\"item.isShown\"\n :label=\"item.text\"\n size=\"large\"\n :disabled=\"item.isFixed\"\n data-test-id=\"EL-CHECKBOX-e52Vdo\"\n @change=\"saveData\"\n />\n </el-dropdown-item>\n </VueDraggable>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n </el-col>\n </el-row>\n <el-collapse-transition data-test-id=\"EL-COLLAPSE-TRANSITION-LX5yTb\">\n <div v-show=\"show\" data-test-id=\"DIV-GHzfqn\">\n <el-row :gutter=\"20\" data-test-id=\"EL-ROW-uobqqm\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-aJLPAr\">\n <el-form-item :label=\"t('materialStatus')\" data-test-id=\"EL-FORM-ITEM-HlYeDC\">\n <el-select v-model=\"materialState\" clearable disabled data-test-id=\"EL-SELECT-XY7INU\"><el-option\n v-for=\"item in selectStateList\"\n :key=\"item.value\"\n :label=\"item.text\"\n :value=\"item.value\"\n data-test-id=\"EL-OPTION-IhLqjD\"\n >\n </el-option></el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-cyPD8b\">\n <el-form-item :label=\"t('materialType')\" data-test-id=\"EL-FORM-ITEM-6VkGxQ\">\n <el-select v-model=\"materialType\" clearable data-test-id=\"EL-SELECT-fNuo96\"><el-option\n v-for=\"item in selectTypeList\"\n :key=\"item.materialTypeID\"\n :label=\"item.materialTypeName\"\n :value=\"item.materialTypeID\"\n data-test-id=\"EL-OPTION-8HkfGZ\"\n >\n </el-option></el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-pi9ImD\">\n <el-form-item :label=\"t('materialProperties')\" data-test-id=\"EL-FORM-ITEM-yZSwEK\">\n <el-select v-model=\"materialProperty\" clearable data-test-id=\"EL-SELECT-DB3NNw\"><el-option\n v-for=\"item in selectPropertyList\"\n :key=\"item.value\"\n :label=\"item.text\"\n :value=\"item.value\"\n data-test-id=\"EL-OPTION-ipf6Tt\"\n >\n </el-option></el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-YYIPD8\">\n <el-form-item :label=\"t('manufacturer')\" data-test-id=\"EL-FORM-ITEM-1rGMIf\">\n <el-input\n v-model=\"mainSupplierName\"\n :placeholder=\"t('PleaseSelect')\"\n clearable\n readonly\n data-test-id=\"EL-INPUT-gA88SV\"\n >\n <template #suffix>\n <v-icon\n class=\"mdi mdi-magnify custom-suffix\"\n style=\"font-size: 1.5rem\"\n data-test-id=\"V-ICON-49OiYI-businessName-pom\"\n @click=\"openManufacturerListDialog\"\n />\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-SonvQU\">\n <el-form-item :label=\"t('stockModel')\" data-test-id=\"EL-FORM-ITEM-36Wqva\">\n <el-select v-model=\"stockModelID\" clearable data-test-id=\"EL-SELECT-CpIiYy\"><el-option\n v-for=\"item in stockModelList\"\n :key=\"item.value\"\n :label=\"item.text\"\n :value=\"item.value\"\n data-test-id=\"EL-OPTION-8tg77Z\"\n >\n </el-option></el-select>\n </el-form-item>\n </el-col>\n </el-row>\n </div>\n </el-collapse-transition>\n </el-form>\n </div>\n <el-divider style=\"margin: 4px 0 24px 0\" data-test-id=\"EL-DIVIDER-0nksyE\">\n <el-icon data-test-id=\"EL-ICON-mJJqGi\" @click=\"show = !show\">\n <ArrowUpBold v-if=\"show\" data-test-id=\"ARROWUPBOLD-xUmZ3x\" />\n <ArrowDownBold v-else data-test-id=\"ARROWDOWNBOLD-XWfjPz\"/></el-icon>\n </el-divider>\n <manufacturerListDialog\n ref=\"manufacturerListRef\"\n data-test-id=\"MANUFACTURERLISTDIALOG-UInkjdkHJK-POM\"\n @selectedData=\"selectedManuFacturerData\"\n />\n </div>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue';\nimport { VueDraggable } from 'vue-draggable-plus';\nimport { useI18n } from 'vue-i18n';\nimport manufacturerListDialog from './manufacturerList/index.vue';\n\nconst props = defineProps({\n selectTypeList: Array,\n selectStateList: Array,\n stockModelList: Array,\n selectPropertyList: Array,\n responseHeaders: Array,\n canEditHeaders: Array,\n isManufacturerOnlySelect: {\n type: Boolean,\n default: false,\n },\n});\nconst emit = defineEmits(['filterSearch', 'saveData']);\nconst { t } = useI18n();\n// 搜索维度字段定义\nconst materialPartNumber = ref(''); // 物料编号\nconst materialPartName = ref(''); // 物料名称\nconst materialState = ref(1); // 物料状态\nconst materialType = ref(null); // 物料类型\nconst materialProperty = ref(null); // 物料属性\nconst mainSupplierName = ref(null); // 主供应商名称\nconst stockModelID = ref(null); // 库存模式\n// 搜索维度展开绑定\nconst show = ref(false);\nconst reset = () => {\n materialPartNumber.value = '';\n materialPartName.value = '';\n materialState.value = 1;\n materialType.value = null;\n materialProperty.value = null;\n mainSupplierName.value = null;\n stockModelID.value = null;\n};\nconst search = (val = '') => {\n if (val) {\n materialPartName.value = val;\n }\n const searchData = {\n fuzzySearchCondition: {\n materialPartNumber: materialPartNumber.value,\n materialName: materialPartName.value,\n mainSupplierName: mainSupplierName.value,\n },\n preciseSearchCondition: {\n materialType: materialType.value,\n materialProperty: materialProperty.value,\n materialState: materialState.value,\n stockModelID: stockModelID.value,\n },\n };\n emit('filterSearch', searchData);\n};\nconst dropdownMaterial = ref(null);\nconst showClick = () => {\n if (!dropdownMaterial.value) return;\n dropdownMaterial.value.handleOpen();\n};\nconst draggableItems = ref([]);\nconst saveData = () => {\n emit('saveData', draggableItems.value);\n};\nwatch(\n () => props.canEditHeaders,\n () => {\n draggableItems.value = props.canEditHeaders;\n },\n { immediate: true },\n);\n// 定义厂商列表弹窗ref\nconst manufacturerListRef = ref(null);\n/**\n * 打开厂商列表弹窗\n */\nfunction openManufacturerListDialog() {\n manufacturerListRef.value.open(props.isManufacturerOnlySelect);\n}\n/**\n * 选择厂商数据\n * @param {Array} list 选择的厂商数据(只能选择单行)\n */\nfunction selectedManuFacturerData(list) {\n mainSupplierName.value = list[0].manufacturerName;\n}\ndefineExpose({\n search,\n reset,\n});\n</script>\n\n<style scoped>\n.button-container {\n min-width: 240px;\n}\n</style>\n","<template>\n <el-dialog\n v-model=\"showDialog\"\n :title=\"t('filePreview')\"\n width=\"50%\"\n destroy-on-close\n center\n align-center\n :close-on-click-modal=\"false\"\n :close-on-press-escape=\"false\"\n :modal-append-to-body=\"true\"\n :append-to-body=\"true\"\n style=\"border-radius: 6px\"\n data-test-id=\"EL-DIALOG-ACOVX2\"\n >\n <div data-test-id=\"DIV-E6QfR5\">\n <el-table\n v-loading=\"tableLoading\"\n :data=\"previewData\"\n height=\"60vh\"\n header-row-class-name=\"tableHeader\"\n header-cell-class-name=\"tableHeaderCell\"\n :border=\"true\"\n scrollbar-always-on\n show-overflow-tooltip\n data-test-id=\"EL-TABLE-Sonemz\"\n >\n <el-table-column width=\"60\" :align=\"tableAlign\" label=\"#\" data-test-id=\"EL-TABLE-COLUMN-eiSqtA\">\n <template #default=\"scope\">{{ scope.$index + 1 }}</template>\n </el-table-column>\n <el-table-column\n :align=\"tableAlign\"\n prop=\"fileName\"\n :label=\"t('fileName')\"\n data-test-id=\"EL-TABLE-COLUMN-tGzWAO\"\n >\n </el-table-column>\n <el-table-column width=\"100\" :align=\"tableAlign\" :label=\"t('Syn_action')\" data-test-id=\"EL-TABLE-COLUMN-uSygLF\">\n <template #default=\"scope\">\n <el-tooltip :content=\"t('preview')\" placement=\"top\" :enterable=\"false\" data-test-id=\"EL-TOOLTIP-gVWeHJ\">\n <el-button\n type=\"primary\"\n link\n :disabled=\"scope.row.isDisabled\"\n data-test-id=\"EL-BUTTON-9WTY8H\"\n @click=\"handleClickPreview(scope.row)\"\n >\n <v-icon class=\"mdi mdi-file-eye\" data-test-id=\"V-ICON-LcKNgS\"></v-icon>\n </el-button>\n </el-tooltip>\n </template>\n </el-table-column>\n </el-table>\n </div>\n <template #footer>\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-2VXcx3\" @click=\"showDialog = false\">\n {{ $t('close') }}\n </el-button>\n </template>\n <el-image\n ref=\"imgViewRef\"\n style=\"width: 100px; height: 100px; display: none\"\n :src=\"previewUrl\"\n :zoom-rate=\"1.2\"\n :preview-teleported=\"true\"\n :preview-src-list=\"[previewUrl]\"\n :initial-index=\"1\"\n fit=\"cover\"\n data-test-id=\"EL-IMAGE-33C2PQ\"\n />\n </el-dialog>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport { ElMessage } from 'element-plus';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism.js';\nimport { useI18n } from 'vue-i18n';\nconst { t } = useI18n();\n\nconst tableLoading = ref(false);\nconst previewUrl = ref('');\nconst imgViewRef = ref(null);\nconst previewData = ref([]);\nconst tableAlign = ref('center');\nconst showDialog = ref(false);\n\n// 打开弹窗\nconst handleOpenDialog = (data, docCustomId) => {\n previewUrl.value = '';\n tableLoading.value = false;\n previewData.value =\n data && data.length\n ? data.map((item) => {\n const fileType = item.fileName\n ? item.fileName.includes('.')\n ? item.fileName.split('.').pop().toLowerCase()\n : ''\n : '';\n const isDisabled = !['jpeg', 'gif', 'jpg', 'png', 'pdf'].includes(fileType);\n return { ...item, fileType, isDisabled, docCustomId };\n })\n : [];\n showDialog.value = true;\n};\n\n// 预览\nconst handleClickPreview = async ({ fileId: plmFileVersionId, fileName, fileType, docCustomId }) => {\n tableLoading.value = true;\n previewUrl.value = '';\n const data = {\n docCode: 'doc_5',\n docCustomId: docCustomId,\n fileId: plmFileVersionId,\n };\n let res;\n if (fileType === 'pdf') {\n res = await apiFunction\n .docDownloadFile(data)\n .finally(() => (tableLoading.value = false))\n .catch(() => ElMessage.error(t('Syn_apiError')));\n } else {\n res = await apiFunction\n .docViewFile(data)\n .finally(() => (tableLoading.value = false))\n .catch(() => ElMessage.error(t('Syn_apiError')));\n }\n if (res.status === 200) {\n tableLoading.value = false;\n // const blob = new Blob([res.data], { type: res.data.type });\n if (['jpeg', 'gif', 'jpg', 'png'].includes(fileType)) {\n // previewUrl.value = URL.createObjectURL(blob);\n previewUrl.value = `data:image/${fileName};base64,${res.data.content.fileContent}`;\n setTimeout(() => imgViewRef.value.$el.children[0].click(), 0);\n }\n if (fileType === 'pdf') {\n const pdfBlob = new Blob([res.data], { type: 'application/pdf' });\n const tempUrl = URL.createObjectURL(pdfBlob);\n window.open(tempUrl, fileName);\n }\n }\n};\n\ndefineExpose({ handleOpenDialog });\n</script>\n<style scoped lang=\"scss\">\n@use '/src/scss/base/table.scss';\n</style>\n","<template>\n <el-input\n v-if=\"isFilter\"\n v-model=\"filterText\"\n :placeholder=\"$t(placeholder)\"\n class=\"mb-2\"\n :data-test-id=\"`${dataTestId}-EL-INPUT-1n9Xo5`\"\n @input=\"changeFilter\"\n />\n <div class=\"tree-structure-box\" :data-test-id=\"`${dataTestId}-DIV-8rXSn2`\">\n <el-tree\n ref=\"treeRef\"\n :data=\"treeData\"\n node-key=\"id\"\n :draggable=\"props.draggable\"\n :allow-drop=\"allowDrop\"\n :default-expanded-keys=\"expanded\"\n :auto-expand-parent=\"false\"\n :props=\"props.defaultProps\"\n class=\"custom-tree\"\n :filter-node-method=\"filterNode\"\n :data-test-id=\"`${dataTestId}-EL-TREE-GtAJhw`\"\n @node-drag-start=\"handleDragStart\"\n @node-drag-enter=\"handleDragEnter\"\n @node-drag-leave=\"handleDragLeave\"\n @node-drag-over=\"handleDragOver\"\n @node-drag-end=\"handleDragEnd\"\n @node-drop=\"handleDrop\"\n @node-click=\"handleNodeClick\"\n @node-expand=\"handleNodeExpand\"\n @node-collapse=\"handleNodeCollapse\"\n >\n <template #default=\"{ node, data }\">\n <span\n :class=\"{ highlighted: highlightedNodeId === data.id }\"\n :data-test-id=\"`${dataTestId}-SPAN-znTFEw`\"\n @click.stop=\"handleNodeClick(data, node, $refs.treeRef)\"\n >\n {{ data.label }}\n </span>\n </template>\n </el-tree>\n </div>\n</template>\n<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\nconst props = defineProps({\n updateNode: Array,\n defaultExpanded: Array,\n defaultProps: Object,\n defaultSelection: Number, // 默认选择内容\n draggable: Boolean, // 是否可拖拽\n isFilter: Boolean, // 是否显示搜索框\n placeholder: String, // 搜索框提示\n dataCy: {\n type: String,\n default: '',\n },\n dataTestId: {\n type: String,\n default: '',\n }, \n});\nconst emits = defineEmits(['handleNodeClick', 'handleDrop']);\nconst expanded = computed({\n get() {\n return [0, ...props.defaultExpanded];\n },\n});\nconst treeData = computed(() => {\n return [\n {\n label: t('Syn_all'),\n id: 0,\n childrenList: props.updateNode,\n level: 0,\n },\n ];\n});\nconst filterText = ref('');\nconst treeRef = ref(null);\nconst highlightedNodeId = computed({\n get() {\n return props.defaultSelection;\n },\n});\nconst draggingNode = ref(null);\nconst dropTargetNode = ref(null);\nconst handleDragStart = (draggingNodeData) => {\n draggingNode.value = draggingNodeData;\n};\n\nconst handleDragEnter = (draggingNodeData, dropNodeData) => {\n dropTargetNode.value = dropNodeData;\n};\n\nconst handleDragLeave = () => {\n dropTargetNode.value = null;\n};\n\nconst handleDragOver = (draggingNodeData, dropNodeData, event) => {\n event.preventDefault();\n};\n\nconst handleDragEnd = () => {\n draggingNode.value = null;\n dropTargetNode.value = null;\n};\nconst handleNodeExpand = (data) => {\n expanded.value.push(data.id);\n};\n// 关闭时将ID 从defaultExpanded中移除\nconst handleNodeCollapse = (data) => {\n expanded.value = expanded.value.filter((id) => id !== data.id);\n};\nconst allowDrop = (draggingNodeData, dropNodeData, type) => {\n // 确保拖拽节点和目标节点的父节点都已定义\n if (!draggingNodeData.parent || !dropNodeData.parent) {\n return false; // 如果任一父节点未定义,则不允许放置\n }\n\n // 确保拖拽节点和目标节点有相同的父节点\n if (draggingNodeData.parent !== dropNodeData.parent) {\n return false; // 如果它们有不同的父节点,则不允许放置\n }\n\n // 确保拖拽节点不是目标节点本身\n if (draggingNodeData === dropNodeData) {\n return false; // 如果它们是同一个节点,则不允许放置\n }\n\n // 确保拖拽节点不是目标节点的子节点\n if (dropNodeData.children && dropNodeData.children.some((child) => child === draggingNodeData)) {\n return false; // 如果拖拽节点是目标节点的子节点之一,则不允许放置\n }\n\n // 仅当不是内部放置时才允许放置(防止放置到子节点中)\n // 注意:这里的 'inner' 类型可能是您的应用程序中定义的特定放置类型\n return type !== 'inner'; // 如果放置类型不是 'inner',则允许放置\n};\nconst handleDrop = async (draggingNodeData, dropNodeData) => {\n emits('handleDrop', dropNodeData.parent.data);\n};\n// 树节点筛选\nconst filterNode = (value, data) => {\n if (!value) return true;\n return data.label.includes(value);\n};\n\nfunction changeFilter(val) {\n treeRef.value.filter(val);\n}\n\n// 树节点点击、高亮\nconst handleNodeClick = (data) => {\n highlightedNodeId.value = data.id;\n emits('handleNodeClick', data);\n};\n</script>\n\n<style scoped lang=\"scss\">\n@use '@/scss/base/commom.scss';\n@use '@/scss/base/table.scss';\n\n.tree-structure-box {\n overflow: auto;\n height: 100%;\n background-color: #f4f7fa;\n\n .el-tree {\n background-color: #f4f7fa;\n }\n\n border: 1px;\n}\n\n:deep(.el-tree-node) {\n display: table;\n min-width: 100%;\n}\n\n::v-deep .tree-structure-box::-webkit-scrollbar {\n height: 6px;\n}\n\n/* 滚动条的轨道背景 */\n::v-deep .tree-structure-box::-webkit-scrollbar-track {\n // background: #909399; /* 轨道颜色 */\n border-radius: 10px; /* 圆角 */\n}\n\n/* 滚动条滑块(可拖动部分) */\n::v-deep .tree-structure-box::-webkit-scrollbar-thumb {\n background: #dddee0; /* 滑块颜色 */\n border-radius: 10px; /* 圆角与轨道保持一致 */\n cursor: pointer;\n}\n\n::v-deep .el-tree-node:focus > .el-tree-node__content {\n // background-color: #ecf5ff;\n color: #409eff;\n}\n\n.el-tree-node__content span {\n cursor: pointer;\n}\n\n::v-deep .el-tree-node__content:hover {\n // background-color: #ecf5ff;\n cursor: pointer;\n color: #409eff;\n}\n\n::v-deep .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {\n color: #409eff;\n}\n\n::v-deep .el-tree-node:focus > .el-tree-node__content {\n color: #606266;\n}\n\n.highlighted {\n color: #409eff;\n}\n\n.tree-structure-box .el-input {\n position: relative;\n left: 50%;\n margin-top: 1rem;\n transform: translateX(-50%);\n width: 90%;\n}\n</style>\n","const workOrderStatus = {\n noDispatch: 1,\n noStart: 2,\n workStart: 3,\n suspendProcess: 4,\n workEnd: 5,\n closed: 6,\n overdueStart: 7,\n overdueEnd: 8,\n adjustMachine: 9,\n statusError: 10,\n};\n\nconst processOrderStatus = {\n noDispatch: 1,\n noStart: 2,\n workStart: 3,\n workEnd: 4,\n closed: 5,\n overdueStart: 6,\n overdueEnd: 7,\n};\n\nconst productionOrderStatus = {\n noDispatch: 0,\n noStart: 1,\n inProgress: 2,\n workEnd: 3,\n};\n\nconst priorityStatus = {\n topPriority: 4,\n priority: 3,\n normal: 2,\n secondary: 1,\n leastImportant: 0,\n};\n\nconst processingType = {\n noSelect: 0,\n firstItem: 1,\n batch: 2,\n};\n\nconst softwareSnStatus = {\n normal: 1,\n expired: 2,\n abnormal: 3,\n};\nconst stockModel = {\n finishedProductMarket: 1,\n // patchInventory: 2,\n // bsInventory: 3,\n // adjustedInventory: 4,\n // batchRollingInventory: 5,\n // batchInventory: 6,\n // rollingInventory: 7,\n};\nconst materialType = {\n finishedMaterial: 0,\n semiFinishedMaterial: 1,\n rawMaterial: 2,\n cuttingTool: 3,\n moldTool: 4,\n};\nconst materialProperty = {\n createBySelf: 0,\n purchasedParts: 1,\n none: 2,\n};\n\nconst materialState = {\n disable: 0,\n enable: 1,\n};\nexport default {\n materialState,\n materialProperty,\n materialType,\n workOrderStatus,\n processOrderStatus,\n priorityStatus,\n processingType,\n softwareSnStatus,\n productionOrderStatus,\n stockModel,\n};\n","export default {\n addZero(num) {\n if (num < 10) {\n return `0${num}`;\n }\n return `${num}`;\n },\n addZeroThreeDigit(num) {\n if (num < 10) {\n return `00${num}`;\n }\n if (num >= 10 && num < 100) {\n return `0${num}`;\n }\n return num;\n },\n isFloat(num) {\n if (Number.parseInt(num, 10) === num) {\n return false;\n }\n return true;\n },\n};\n","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n var len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n var n; /* iterates over tree elements */\n var bits; /* bit counter */\n var length; /* length value */\n var code; /* code value */\n var dist; /* distance index */\n var bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar inflate_fast = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar c = require('./zlib/constants');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\nvar GZheader = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = require('./lib/utils/common').assign;\n\nvar deflate = require('./lib/deflate');\nvar inflate = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n","\n\n\n\n;(function(){\nvar UTIF = {};\n\n// Make available for import by `require()`\nif (typeof module == \"object\") {module.exports = UTIF;}\nelse {self.UTIF = UTIF;}\n\nvar pako;\nif (typeof require == \"function\") {pako = require(\"pako\");}\nelse {pako = self.pako;}\n\nfunction log() { if (typeof process==\"undefined\" || process.env.NODE_ENV==\"development\") console.log.apply(console, arguments); }\n\n(function(UTIF, pako){\n\t\n// Following lines add a JPEG decoder to UTIF.JpegDecoder\n(function(){var V=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol.iterator?function(g){return typeof g}:function(g){return g&&\"function\"===typeof Symbol&&g.constructor===Symbol&&g!==Symbol.prototype?\"symbol\":typeof g},D=function(){function g(g){this.message=\"JPEG error: \"+g}g.prototype=Error();g.prototype.name=\"JpegError\";return g.constructor=g}(),P=function(){function g(g,D){this.message=g;this.g=D}g.prototype=Error();g.prototype.name=\"DNLMarkerError\";return g.constructor=g}();(function(){function g(){this.M=\nnull;this.B=-1}function W(a,d){for(var f=0,e=[],b,B,k=16;0<k&&!a[k-1];)k--;e.push({children:[],index:0});var l=e[0],r;for(b=0;b<k;b++){for(B=0;B<a[b];B++){l=e.pop();for(l.children[l.index]=d[f];0<l.index;)l=e.pop();l.index++;for(e.push(l);e.length<=b;)e.push(r={children:[],index:0}),l.children[l.index]=r.children,l=r;f++}b+1<k&&(e.push(r={children:[],index:0}),l.children[l.index]=r.children,l=r)}return e[0].children}function X(a,d,f,e,b,B,k,l,r){function n(){if(0<x)return x--,z>>x&1;z=a[d++];if(255===\nz){var c=a[d++];if(c){if(220===c&&g){d+=2;var b=a[d++]<<8|a[d++];if(0<b&&b!==f.g)throw new P(\"Found DNL marker (0xFFDC) while parsing scan data\",b);}throw new D(\"unexpected marker \"+(z<<8|c).toString(16));}}x=7;return z>>>7}function q(a){for(;;){a=a[n()];if(\"number\"===typeof a)return a;if(\"object\"!==(\"undefined\"===typeof a?\"undefined\":V(a)))throw new D(\"invalid huffman sequence\");}}function h(a){for(var c=0;0<a;)c=c<<1|n(),a--;return c}function c(a){if(1===a)return 1===n()?1:-1;var c=h(a);return c>=\n1<<a-1?c:c+(-1<<a)+1}function C(a,b){var d=q(a.D);d=0===d?0:c(d);a.a[b]=a.m+=d;for(d=1;64>d;){var h=q(a.o),k=h&15;h>>=4;if(0===k){if(15>h)break;d+=16}else d+=h,a.a[b+J[d]]=c(k),d++}}function w(a,d){var b=q(a.D);b=0===b?0:c(b)<<r;a.a[d]=a.m+=b}function p(a,c){a.a[c]|=n()<<r}function m(a,b){if(0<A)A--;else for(var d=B;d<=k;){var e=q(a.o),f=e&15;e>>=4;if(0===f){if(15>e){A=h(e)+(1<<e)-1;break}d+=16}else d+=e,a.a[b+J[d]]=c(f)*(1<<r),d++}}function t(a,d){for(var b=B,e=0,f;b<=k;){f=d+J[b];var l=0>a.a[f]?\n-1:1;switch(E){case 0:e=q(a.o);f=e&15;e>>=4;if(0===f)15>e?(A=h(e)+(1<<e),E=4):(e=16,E=1);else{if(1!==f)throw new D(\"invalid ACn encoding\");Q=c(f);E=e?2:3}continue;case 1:case 2:a.a[f]?a.a[f]+=l*(n()<<r):(e--,0===e&&(E=2===E?3:0));break;case 3:a.a[f]?a.a[f]+=l*(n()<<r):(a.a[f]=Q<<r,E=0);break;case 4:a.a[f]&&(a.a[f]+=l*(n()<<r))}b++}4===E&&(A--,0===A&&(E=0))}var g=9<arguments.length&&void 0!==arguments[9]?arguments[9]:!1,u=f.P,v=d,z=0,x=0,A=0,E=0,Q,K=e.length,F,L,M,I;var R=f.S?0===B?0===l?w:p:0===l?\nm:t:C;var G=0;var O=1===K?e[0].c*e[0].l:u*f.O;for(var S,T;G<O;){var U=b?Math.min(O-G,b):O;for(F=0;F<K;F++)e[F].m=0;A=0;if(1===K){var y=e[0];for(I=0;I<U;I++)R(y,64*((y.c+1)*(G/y.c|0)+G%y.c)),G++}else for(I=0;I<U;I++){for(F=0;F<K;F++)for(y=e[F],S=y.h,T=y.j,L=0;L<T;L++)for(M=0;M<S;M++)R(y,64*((y.c+1)*((G/u|0)*y.j+L)+(G%u*y.h+M)));G++}x=0;(y=N(a,d))&&y.f&&((0,_util.warn)(\"decodeScan - unexpected MCU data, current marker is: \"+y.f),d=y.offset);y=y&&y.F;if(!y||65280>=y)throw new D(\"marker was not found\");\nif(65488<=y&&65495>=y)d+=2;else break}(y=N(a,d))&&y.f&&((0,_util.warn)(\"decodeScan - unexpected Scan data, current marker is: \"+y.f),d=y.offset);return d-v}function Y(a,d){for(var f=d.c,e=d.l,b=new Int16Array(64),B=0;B<e;B++)for(var k=0;k<f;k++){var l=64*((d.c+1)*B+k),r=b,n=d.G,q=d.a;if(!n)throw new D(\"missing required Quantization Table.\");for(var h=0;64>h;h+=8){var c=q[l+h];var C=q[l+h+1];var w=q[l+h+2];var p=q[l+h+3];var m=q[l+h+4];var t=q[l+h+5];var g=q[l+h+6];var u=q[l+h+7];c*=n[h];if(0===(C|\nw|p|m|t|g|u))c=5793*c+512>>10,r[h]=c,r[h+1]=c,r[h+2]=c,r[h+3]=c,r[h+4]=c,r[h+5]=c,r[h+6]=c,r[h+7]=c;else{C*=n[h+1];w*=n[h+2];p*=n[h+3];m*=n[h+4];t*=n[h+5];g*=n[h+6];u*=n[h+7];var v=5793*c+128>>8;var z=5793*m+128>>8;var x=w;var A=g;m=2896*(C-u)+128>>8;u=2896*(C+u)+128>>8;p<<=4;t<<=4;v=v+z+1>>1;z=v-z;c=3784*x+1567*A+128>>8;x=1567*x-3784*A+128>>8;A=c;m=m+t+1>>1;t=m-t;u=u+p+1>>1;p=u-p;v=v+A+1>>1;A=v-A;z=z+x+1>>1;x=z-x;c=2276*m+3406*u+2048>>12;m=3406*m-2276*u+2048>>12;u=c;c=799*p+4017*t+2048>>12;p=4017*\np-799*t+2048>>12;t=c;r[h]=v+u;r[h+7]=v-u;r[h+1]=z+t;r[h+6]=z-t;r[h+2]=x+p;r[h+5]=x-p;r[h+3]=A+m;r[h+4]=A-m}}for(n=0;8>n;++n)c=r[n],C=r[n+8],w=r[n+16],p=r[n+24],m=r[n+32],t=r[n+40],g=r[n+48],u=r[n+56],0===(C|w|p|m|t|g|u)?(c=5793*c+8192>>14,c=-2040>c?0:2024<=c?255:c+2056>>4,q[l+n]=c,q[l+n+8]=c,q[l+n+16]=c,q[l+n+24]=c,q[l+n+32]=c,q[l+n+40]=c,q[l+n+48]=c,q[l+n+56]=c):(v=5793*c+2048>>12,z=5793*m+2048>>12,x=w,A=g,m=2896*(C-u)+2048>>12,u=2896*(C+u)+2048>>12,v=(v+z+1>>1)+4112,z=v-z,c=3784*x+1567*A+2048>>\n12,x=1567*x-3784*A+2048>>12,A=c,m=m+t+1>>1,t=m-t,u=u+p+1>>1,p=u-p,v=v+A+1>>1,A=v-A,z=z+x+1>>1,x=z-x,c=2276*m+3406*u+2048>>12,m=3406*m-2276*u+2048>>12,u=c,c=799*p+4017*t+2048>>12,p=4017*p-799*t+2048>>12,t=c,c=v+u,u=v-u,C=z+t,g=z-t,w=x+p,t=x-p,p=A+m,m=A-m,c=16>c?0:4080<=c?255:c>>4,C=16>C?0:4080<=C?255:C>>4,w=16>w?0:4080<=w?255:w>>4,p=16>p?0:4080<=p?255:p>>4,m=16>m?0:4080<=m?255:m>>4,t=16>t?0:4080<=t?255:t>>4,g=16>g?0:4080<=g?255:g>>4,u=16>u?0:4080<=u?255:u>>4,q[l+n]=c,q[l+n+8]=C,q[l+n+16]=w,q[l+n+24]=\np,q[l+n+32]=m,q[l+n+40]=t,q[l+n+48]=g,q[l+n+56]=u)}return d.a}function N(a,d){var f=2<arguments.length&&void 0!==arguments[2]?arguments[2]:d,e=a.length-1;f=f<d?f:d;if(d>=e)return null;var b=a[d]<<8|a[d+1];if(65472<=b&&65534>=b)return{f:null,F:b,offset:d};for(var B=a[f]<<8|a[f+1];!(65472<=B&&65534>=B);){if(++f>=e)return null;B=a[f]<<8|a[f+1]}return{f:b.toString(16),F:B,offset:f}}var J=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,\n57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]);g.prototype={parse:function(a){function d(){var d=a[k]<<8|a[k+1];k+=2;return d}function f(){var b=d();b=k+b-2;var c=N(a,b,k);c&&c.f&&((0,_util.warn)(\"readDataBlock - incorrect length, current marker is: \"+c.f),b=c.offset);b=a.subarray(k,b);k+=b.length;return b}function e(a){for(var b=Math.ceil(a.v/8/a.s),c=Math.ceil(a.g/8/a.u),d=0;d<a.b.length;d++){v=a.b[d];var e=Math.ceil(Math.ceil(a.v/8)*v.h/a.s),f=Math.ceil(Math.ceil(a.g/\n8)*v.j/a.u);v.a=new Int16Array(64*c*v.j*(b*v.h+1));v.c=e;v.l=f}a.P=b;a.O=c}var b=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).N,B=void 0===b?null:b,k=0,l=null,r=0;b=[];var n=[],q=[],h=d();if(65496!==h)throw new D(\"SOI not found\");for(h=d();65497!==h;){switch(h){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var c=f();65518===h&&65===c[0]&&100===\nc[1]&&111===c[2]&&98===c[3]&&101===c[4]&&(l={version:c[5]<<8|c[6],Y:c[7]<<8|c[8],Z:c[9]<<8|c[10],W:c[11]});break;case 65499:h=d()+k-2;for(var g;k<h;){var w=a[k++],p=new Uint16Array(64);if(0===w>>4)for(c=0;64>c;c++)g=J[c],p[g]=a[k++];else if(1===w>>4)for(c=0;64>c;c++)g=J[c],p[g]=d();else throw new D(\"DQT - invalid table spec\");b[w&15]=p}break;case 65472:case 65473:case 65474:if(m)throw new D(\"Only single frame JPEGs supported\");d();var m={};m.X=65473===h;m.S=65474===h;m.precision=a[k++];h=d();m.g=\nB||h;m.v=d();m.b=[];m.C={};c=a[k++];for(h=p=w=0;h<c;h++){g=a[k];var t=a[k+1]>>4;var H=a[k+1]&15;w<t&&(w=t);p<H&&(p=H);t=m.b.push({h:t,j:H,T:a[k+2],G:null});m.C[g]=t-1;k+=3}m.s=w;m.u=p;e(m);break;case 65476:g=d();for(h=2;h<g;){w=a[k++];p=new Uint8Array(16);for(c=t=0;16>c;c++,k++)t+=p[c]=a[k];H=new Uint8Array(t);for(c=0;c<t;c++,k++)H[c]=a[k];h+=17+t;(0===w>>4?q:n)[w&15]=W(p,H)}break;case 65501:d();var u=d();break;case 65498:c=1===++r&&!B;d();w=a[k++];g=[];for(h=0;h<w;h++){p=m.C[a[k++]];var v=m.b[p];\np=a[k++];v.D=q[p>>4];v.o=n[p&15];g.push(v)}h=a[k++];w=a[k++];p=a[k++];try{var z=X(a,k,m,g,u,h,w,p>>4,p&15,c);k+=z}catch(x){if(x instanceof P)return(0,_util.warn)('Attempting to re-parse JPEG image using \"scanLines\" parameter found in DNL marker (0xFFDC) segment.'),this.parse(a,{N:x.g});throw x;}break;case 65500:k+=4;break;case 65535:255!==a[k]&&k--;break;default:if(255===a[k-3]&&192<=a[k-2]&&254>=a[k-2])k-=3;else if((c=N(a,k-2))&&c.f)(0,_util.warn)(\"JpegImage.parse - unexpected data, current marker is: \"+\nc.f),k=c.offset;else throw new D(\"unknown marker \"+h.toString(16));}h=d()}this.width=m.v;this.height=m.g;this.A=l;this.b=[];for(h=0;h<m.b.length;h++){v=m.b[h];if(u=b[v.T])v.G=u;this.b.push({R:Y(m,v),U:v.h/m.s,V:v.j/m.u,c:v.c,l:v.l})}this.i=this.b.length},L:function(a,d){var f=this.width/a,e=this.height/d,b,g,k=this.b.length,l=a*d*k,r=new Uint8ClampedArray(l),n=new Uint32Array(a);for(g=0;g<k;g++){var q=this.b[g];var h=q.U*f;var c=q.V*e;var C=g;var w=q.R;var p=q.c+1<<3;for(b=0;b<a;b++)q=0|b*h,n[b]=\n(q&4294967288)<<3|q&7;for(h=0;h<d;h++)for(q=0|h*c,q=p*(q&4294967288)|(q&7)<<3,b=0;b<a;b++)r[C]=w[q+n[b]],C+=k}if(e=this.M)for(g=0;g<l;)for(f=q=0;q<k;q++,g++,f+=2)r[g]=(r[g]*e[f]>>8)+e[f+1];return r},w:function(){return this.A?!!this.A.W:3===this.i?0===this.B?!1:!0:1===this.B?!0:!1},I:function(a){for(var d,f,e,b=0,g=a.length;b<g;b+=3)d=a[b],f=a[b+1],e=a[b+2],a[b]=d-179.456+1.402*e,a[b+1]=d+135.459-.344*f-.714*e,a[b+2]=d-226.816+1.772*f;return a},K:function(a){for(var d,f,e,b,g=0,k=0,l=a.length;k<l;k+=\n4)d=a[k],f=a[k+1],e=a[k+2],b=a[k+3],a[g++]=-122.67195406894+f*(-6.60635669420364E-5*f+4.37130475926232E-4*e-5.4080610064599E-5*d+4.8449797120281E-4*b-.154362151871126)+e*(-9.57964378445773E-4*e+8.17076911346625E-4*d-.00477271405408747*b+1.53380253221734)+d*(9.61250184130688E-4*d-.00266257332283933*b+.48357088451265)+b*(-3.36197177618394E-4*b+.484791561490776),a[g++]=107.268039397724+f*(2.19927104525741E-5*f-6.40992018297945E-4*e+6.59397001245577E-4*d+4.26105652938837E-4*b-.176491792462875)+e*(-7.78269941513683E-4*\ne+.00130872261408275*d+7.70482631801132E-4*b-.151051492775562)+d*(.00126935368114843*d-.00265090189010898*b+.25802910206845)+b*(-3.18913117588328E-4*b-.213742400323665),a[g++]=-20.810012546947+f*(-5.70115196973677E-4*f-2.63409051004589E-5*e+.0020741088115012*d-.00288260236853442*b+.814272968359295)+e*(-1.53496057440975E-5*e-1.32689043961446E-4*d+5.60833691242812E-4*b-.195152027534049)+d*(.00174418132927582*d-.00255243321439347*b+.116935020465145)+b*(-3.43531996510555E-4*b+.24165260232407);return a.subarray(0,\ng)},J:function(a){for(var d,f,e,b=0,g=a.length;b<g;b+=4)d=a[b],f=a[b+1],e=a[b+2],a[b]=434.456-d-1.402*e,a[b+1]=119.541-d+.344*f+.714*e,a[b+2]=481.816-d-1.772*f;return a},H:function(a){for(var d,f,e,b,g=0,k=1/255,l=0,r=a.length;l<r;l+=4)d=a[l]*k,f=a[l+1]*k,e=a[l+2]*k,b=a[l+3]*k,a[g++]=255+d*(-4.387332384609988*d+54.48615194189176*f+18.82290502165302*e+212.25662451639585*b-285.2331026137004)+f*(1.7149763477362134*f-5.6096736904047315*e-17.873870861415444*b-5.497006427196366)+e*(-2.5217340131683033*\ne-21.248923337353073*b+17.5119270841813)-b*(21.86122147463605*b+189.48180835922747),a[g++]=255+d*(8.841041422036149*d+60.118027045597366*f+6.871425592049007*e+31.159100130055922*b-79.2970844816548)+f*(-15.310361306967817*f+17.575251261109482*e+131.35250912493976*b-190.9453302588951)+e*(4.444339102852739*e+9.8632861493405*b-24.86741582555878)-b*(20.737325471181034*b+187.80453709719578),a[g++]=255+d*(.8842522430003296*d+8.078677503112928*f+30.89978309703729*e-.23883238689178934*b-14.183576799673286)+\nf*(10.49593273432072*f+63.02378494754052*e+50.606957656360734*b-112.23884253719248)+e*(.03296041114873217*e+115.60384449646641*b-193.58209356861505)-b*(22.33816807309886*b+180.12613974708367);return a.subarray(0,g)},getData:function(a,d,f){if(4<this.i)throw new D(\"Unsupported color mode\");a=this.L(a,d);if(1===this.i&&f){f=a.length;d=new Uint8ClampedArray(3*f);for(var e=0,b=0;b<f;b++){var g=a[b];d[e++]=g;d[e++]=g;d[e++]=g}return d}if(3===this.i&&this.w())return this.I(a);if(4===this.i){if(this.w())return f?\nthis.K(a):this.J(a);if(f)return this.H(a)}return a}}; UTIF.JpegDecoder=g})()})();\n\n//UTIF.JpegDecoder = PDFJS.JpegImage;\n\n\nUTIF.encodeImage = function(rgba, w, h, metadata)\n{\n\tvar idf = { \"t256\":[w], \"t257\":[h], \"t258\":[8,8,8,8], \"t259\":[1], \"t262\":[2], \"t273\":[1000], // strips offset\n\t\t\t\t\"t277\":[4], \"t278\":[h], /* rows per strip */ \"t279\":[w*h*4], // strip byte counts\n\t\t\t\t\"t282\":[1], \"t283\":[1], \"t284\":[1], \"t286\":[0], \"t287\":[0], \"t296\":[1], \"t305\": [\"Photopea (UTIF.js)\"], \"t338\":[1]\n\t\t};\n\tif (metadata) for (var i in metadata) idf[i] = metadata[i];\n\t\n\tvar prfx = new Uint8Array(UTIF.encode([idf]));\n\tvar img = new Uint8Array(rgba);\n\tvar data = new Uint8Array(1000+w*h*4);\n\tfor(var i=0; i<prfx.length; i++) data[i] = prfx[i];\n\tfor(var i=0; i<img .length; i++) data[1000+i] = img[i];\n\treturn data.buffer;\n}\n\nUTIF.encode = function(ifds)\n{\n\tvar data = new Uint8Array(20000), offset = 4, bin = UTIF._binBE;\n\tdata[0]=77; data[1]=77; data[3]=42;\n\n\tvar ifdo = 8;\n\tbin.writeUint(data, offset, ifdo); offset+=4;\n\tfor(var i=0; i<ifds.length; i++)\n\t{\n\t\tvar noffs = UTIF._writeIFD(bin, data, ifdo, ifds[i]);\n\t\tifdo = noffs[1];\n\t\tif(i<ifds.length-1) bin.writeUint(data, noffs[0], ifdo);\n\t}\n\treturn data.slice(0, ifdo).buffer;\n}\n//UTIF.encode._writeIFD\n\nUTIF.decode = function(buff)\n{\n\tUTIF.decode._decodeG3.allow2D = null;\n\tvar data = new Uint8Array(buff), offset = 0;\n\n\tvar id = UTIF._binBE.readASCII(data, offset, 2); offset+=2;\n\tvar bin = id==\"II\" ? UTIF._binLE : UTIF._binBE;\n\tvar num = bin.readUshort(data, offset); offset+=2;\n\n\tvar ifdo = bin.readUint(data, offset); offset+=4;\n\tvar ifds = [];\n\twhile(true) {\n\t\tvar noff = UTIF._readIFD(bin, data, ifdo, ifds, 0, false);\n\t\tifdo = bin.readUint(data, noff);\n\t\tif(ifdo==0) break;\n\t}\n\treturn ifds;\n}\n\nUTIF.decodeImage = function(buff, img, ifds)\n{\n\tvar data = new Uint8Array(buff);\n\tvar id = UTIF._binBE.readASCII(data, 0, 2);\n\n\tif(img[\"t256\"]==null) return;\t// No width => probably not an image\n\timg.isLE = id==\"II\";\n\timg.width = img[\"t256\"][0]; //delete img[\"t256\"];\n\timg.height = img[\"t257\"][0]; //delete img[\"t257\"];\n\n\tvar cmpr = img[\"t259\"] ? img[\"t259\"][0] : 1; //delete img[\"t259\"];\n\tvar fo = img[\"t266\"] ? img[\"t266\"][0] : 1; //delete img[\"t266\"];\n\tif(img[\"t284\"] && img[\"t284\"][0]==2) log(\"PlanarConfiguration 2 should not be used!\");\n\n\tvar bipp; // bits per pixel\n\tif(img[\"t258\"]) bipp = Math.min(32,img[\"t258\"][0])*img[\"t258\"].length;\n\telse bipp = (img[\"t277\"]?img[\"t277\"][0]:1); \n\t// Some .NEF files have t258==14, even though they use 16 bits per pixel\n\tif(cmpr==1 && img[\"t279\"]!=null && img[\"t278\"] && img[\"t262\"][0]==32803) {\n\t\tbipp = Math.round((img[\"t279\"][0]*8)/(img.width*img[\"t278\"][0]));\n\t}\n\tvar bipl = Math.ceil(img.width*bipp/8)*8;\n\tvar soff = img[\"t273\"]; if(soff==null) soff = img[\"t324\"];\n\tvar bcnt = img[\"t279\"]; if(cmpr==1 && soff.length==1) bcnt = [img.height*(bipl>>>3)]; if(bcnt==null) bcnt = img[\"t325\"];\n\tvar bytes = new Uint8Array(img.height*(bipl>>>3)), bilen = 0;\n\n\tif(img[\"t322\"]!=null) // tiled\n\t{\n\t\tvar tw = img[\"t322\"][0], th = img[\"t323\"][0];\n\t\tvar tx = Math.floor((img.width + tw - 1) / tw);\n\t\tvar ty = Math.floor((img.height + th - 1) / th);\n\t\tvar tbuff = new Uint8Array(Math.ceil(tw*th*bipp/8)|0);\n\t\tfor(var y=0; y<ty; y++)\n\t\t\tfor(var x=0; x<tx; x++)\n\t\t\t{\n\t\t\t\tvar i = y*tx+x; for(var j=0; j<tbuff.length; j++) tbuff[j]=0;\n\t\t\t\tUTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, tbuff, 0, fo);\n\t\t\t\t// Might be required for 7 too. Need to check\n\t\t\t\tif (cmpr==6) bytes = tbuff;\n\t\t\t\telse UTIF._copyTile(tbuff, Math.ceil(tw*bipp/8)|0, th, bytes, Math.ceil(img.width*bipp/8)|0, img.height, Math.ceil(x*tw*bipp/8)|0, y*th);\n\t\t\t}\n\t\tbilen = bytes.length*8;\n\t}\n\telse\t// stripped\n\t{\n\t\tvar rps = img[\"t278\"] ? img[\"t278\"][0] : img.height; rps = Math.min(rps, img.height);\n\t\tfor(var i=0; i<soff.length; i++)\n\t\t{\n\t\t\tUTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen/8)|0, fo);\n\t\t\tbilen += bipl * rps;\n\t\t}\n\t\tbilen = Math.min(bilen, bytes.length*8);\n\t}\n\timg.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen/8)|0);\n}\n\nUTIF.decode._decompress = function(img,ifds, data, off, len, cmpr, tgt, toff, fo) // fill order\n{\n\t//console.log(\"compression\", cmpr);\n\t//var time = Date.now();\n\tif(false) {}\n\telse if(cmpr==1 || (len==tgt.length && cmpr!=32767)) for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];\n\telse if(cmpr==3) UTIF.decode._decodeG3 (data, off, len, tgt, toff, img.width, fo);\n\telse if(cmpr==4) UTIF.decode._decodeG4 (data, off, len, tgt, toff, img.width, fo);\n\telse if(cmpr==5) UTIF.decode._decodeLZW(data, off, tgt, toff);\n\telse if(cmpr==6) UTIF.decode._decodeOldJPEG(img, data, off, len, tgt, toff);\n\telse if(cmpr==7) UTIF.decode._decodeNewJPEG(img, data, off, len, tgt, toff);\n\telse if(cmpr==8) { var src = new Uint8Array(data.buffer,off,len); var bin = pako[\"inflate\"](src); for(var i=0; i<bin.length; i++) tgt[toff+i]=bin[i]; }\n\telse if(cmpr==32767) UTIF.decode._decodeARW(img, data, off, len, tgt, toff);\n\telse if(cmpr==32773) UTIF.decode._decodePackBits(data, off, len, tgt, toff);\n\telse if(cmpr==32809) UTIF.decode._decodeThunder (data, off, len, tgt, toff);\n\telse if(cmpr==34713) //for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];\n\t\tUTIF.decode._decodeNikon (img,ifds, data, off, len, tgt, toff);\n\telse log(\"Unknown compression\", cmpr);\n\t\n\t//console.log(Date.now()-time);\n\t\n\tvar bps = (img[\"t258\"]?Math.min(32,img[\"t258\"][0]):1);\n\tvar noc = (img[\"t277\"]?img[\"t277\"][0]:1), bpp=(bps*noc)>>>3, h = (img[\"t278\"] ? img[\"t278\"][0] : img.height), bpl = Math.ceil(bps*noc*img.width/8);\n\t\n\t// convert to Little Endian /*\n\tif(bps==16 && !img.isLE && img[\"t33422\"]==null) // not DNG\n\t\tfor(var y=0; y<h; y++) {\n\t\t\t//console.log(\"fixing endianity\");\n\t\t\tvar roff = toff+y*bpl;\n\t\t\tfor(var x=1; x<bpl; x+=2) { var t=tgt[roff+x]; tgt[roff+x]=tgt[roff+x-1]; tgt[roff+x-1]=t; }\n\t\t} //*/\n\n\tif(img[\"t317\"] && img[\"t317\"][0]==2)\n\t{\n\t\tfor(var y=0; y<h; y++)\n\t\t{\n\t\t\tvar ntoff = toff+y*bpl;\n\t\t\tif(bps==16) for(var j=bpp; j<bpl; j+=2) {\n\t\t\t\tvar nv = ((tgt[ntoff+j+1]<<8)|tgt[ntoff+j]) + ((tgt[ntoff+j-bpp+1]<<8)|tgt[ntoff+j-bpp]);\n\t\t\t\ttgt[ntoff+j] = nv&255; tgt[ntoff+j+1] = (nv>>>8)&255; \n\t\t\t}\n\t\t\telse if(noc==3) for(var j= 3; j<bpl; j+=3)\n\t\t\t{\n\t\t\t\ttgt[ntoff+j ] = (tgt[ntoff+j ] + tgt[ntoff+j-3])&255;\n\t\t\t\ttgt[ntoff+j+1] = (tgt[ntoff+j+1] + tgt[ntoff+j-2])&255;\n\t\t\t\ttgt[ntoff+j+2] = (tgt[ntoff+j+2] + tgt[ntoff+j-1])&255;\n\t\t\t}\n\t\t\telse for(var j=bpp; j<bpl; j++) tgt[ntoff+j] = (tgt[ntoff+j] + tgt[ntoff+j-bpp])&255;\n\t\t}\n\t}\n}\n\nUTIF.decode._ljpeg_diff = function(data, prm, huff) {\n\tvar getbithuff = UTIF.decode._getbithuff;\n\tvar len, diff;\n\tlen = getbithuff(data, prm, huff[0], huff);\n\tdiff = getbithuff(data, prm, len, 0);\n\tif ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1;\n\treturn diff;\n}\nUTIF.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) {\n\tvar raw_width = img[\"t256\"][0], height=img[\"t257\"][0], tiff_bps=img[\"t258\"][0];\n\tvar bin=(img.isLE ? UTIF._binLE : UTIF._binBE);\n\t//console.log(raw_width, height, tiff_bps, raw_width*height, src_length);\n\tvar arw2 = (raw_width*height == src_length) || (raw_width*height*1.5 == src_length);\n\t//arw2 = true;\n\t//console.log(\"ARW2: \", arw2, raw_width*height, src_length, tgt.length);\n\tif(!arw2) { //\"sony_arw_load_raw\"; // not arw2\n\t\theight+=8;\n\t\tvar prm = [off,0,0,0];\n\t\tvar huff = new Uint16Array(32770);\n\t\tvar tab = [ 0xf11,0xf10,0xe0f,0xd0e,0xc0d,0xb0c,0xa0b,0x90a,0x809,\n\t\t\t0x708,0x607,0x506,0x405,0x304,0x303,0x300,0x202,0x201 ];\n\t\tvar i, c, n, col, row, sum=0;\n\t\tvar ljpeg_diff = UTIF.decode._ljpeg_diff;\n\n\t\thuff[0] = 15;\n\t\tfor (n=i=0; i < 18; i++) {\n\t\t\tvar lim = 32768 >>> (tab[i] >>> 8);\n\t\t\tfor(var c=0; c<lim; c++) huff[++n] = tab[i];\n\t\t}\n\t\tfor (col = raw_width; col--; )\n\t\t\tfor (row=0; row < height+1; row+=2) {\n\t\t\t\tif (row == height) row = 1;\n\t\t\t\tsum += ljpeg_diff(inp, prm, huff);\n\t\t\t\tif (row < height) {\n\t\t\t\t\tvar clr = (sum)&4095;\n\t\t\t\t\tUTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));\n\t\t\t\t}\n\t\t\t}\n\t\treturn;\n\t}\n\tif(raw_width*height*1.5==src_length) {\n\t\t//console.log(\"weird compression\");\n\t\tfor(var i=0; i<src_length; i+=3) { var b0=inp[off+i+0], b1=inp[off+i+1], b2=inp[off+i+2]; \n\t\t\ttgt[toff+i]=(b1<<4)|(b0>>>4); tgt[toff+i+1]=(b0<<4)|(b2>>>4); tgt[toff+i+2]=(b2<<4)|(b1>>>4); }\n\t\treturn;\n\t}\n\t\n\tvar pix = new Uint16Array(16);\n\tvar row, col, val, max, min, imax, imin, sh, bit, i, dp;\n\t\n\tvar data = new Uint8Array(raw_width+1);\n\tfor (row=0; row < height; row++) {\n\t\t//fread (data, 1, raw_width, ifp);\n\t\tfor(var j=0; j<raw_width; j++) data[j]=inp[off++];\n\t\tfor (dp=0, col=0; col < raw_width-30; dp+=16) {\n\t\t\tmax = 0x7ff & (val = bin.readUint(data,dp));\n\t\t\tmin = 0x7ff & (val >>> 11);\n\t\t\timax = 0x0f & (val >>> 22);\n\t\t\timin = 0x0f & (val >>> 26);\n\t\t\tfor (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++);\n\t\t\tfor (bit=30, i=0; i < 16; i++)\n\t\t\t\tif (i == imax) pix[i] = max;\n\t\t\t\telse if (i == imin) pix[i] = min;\n\t\t\t\telse {\n\t\t\t\t\tpix[i] = ((bin.readUshort(data, dp+(bit >> 3)) >>> (bit & 7) & 0x7f) << sh) + min;\n\t\t\t\t\tif (pix[i] > 0x7ff) pix[i] = 0x7ff;\n\t\t\t\t\tbit += 7;\n\t\t\t\t}\n\t\t\tfor (i=0; i < 16; i++, col+=2) {\n\t\t\t\t//RAW(row,col) = curve[pix[i] << 1] >> 2;\n\t\t\t\tvar clr = pix[i]<<1; //clr = 0xffff;\n\t\t\t\tUTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));\n\t\t\t}\n\t\t\tcol -= col & 1 ? 1:31;\n\t\t}\n\t}\n}\n\nUTIF.decode._decodeNikon = function(img,imgs, data, off, src_length, tgt, toff)\n{\n\tvar nikon_tree = [\n [ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0,\t/* 12-bit lossy */\n 5,4,3,6,2,7,1,0,8,9,11,10,12 ],\n [ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0,\t/* 12-bit lossy after split */\n 0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 ],\n [ 0, 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, /* 12-bit lossless */\n 5,4,6,3,7,2,8,1,9,0,10,11,12 ],\n [ 0, 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0,\t/* 14-bit lossy */\n 5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 ],\n [ 0, 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0,\t/* 14-bit lossy after split */\n 8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 ],\n [ 0, 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0,\t/* 14-bit lossless */\n 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 ] ];\n\t \n\tvar raw_width = img[\"t256\"][0], height=img[\"t257\"][0], tiff_bps=img[\"t258\"][0];\n\t\n\tvar tree = 0, split = 0;\n\tvar make_decoder = UTIF.decode._make_decoder;\n\tvar getbithuff = UTIF.decode._getbithuff;\n\t\n\tvar mn = imgs[0].exifIFD.makerNote, md = mn[\"t150\"]?mn[\"t150\"]:mn[\"t140\"], mdo=0; //console.log(mn,md);\n\t//console.log(md[0].toString(16), md[1].toString(16), tiff_bps);\n\tvar ver0 = md[mdo++], ver1 = md[mdo++];\n\tif (ver0 == 0x49 || ver1 == 0x58) mdo+=2110;\n\tif (ver0 == 0x46) tree = 2;\n\tif (tiff_bps == 14) tree += 3;\n\t\n\tvar vpred = [[0,0],[0,0]], bin=(img.isLE ? UTIF._binLE : UTIF._binBE);\n\tfor(var i=0; i<2; i++) for(var j=0; j<2; j++) { vpred[i][j] = bin.readShort(md,mdo); mdo+=2; } // not sure here ... [i][j] or [j][i]\n\t//console.log(vpred);\n\t\n\t\n\tvar max = 1 << tiff_bps & 0x7fff, step=0;\n\tvar csize = bin.readShort(md,mdo); mdo+=2;\n\tif (csize > 1) step = Math.floor(max / (csize-1));\n\tif (ver0 == 0x44 && ver1 == 0x20 && step > 0) split = bin.readShort(md,562);\n\t\n\t\n\tvar i;\n\tvar row, col;\n\tvar len, shl, diff;\n\tvar min_v = 0;\n\tvar hpred = [0,0];\n\tvar huff = make_decoder(nikon_tree[tree]);\n\t\n\t//var g_input_offset=0, bitbuf=0, vbits=0, reset=0;\n\tvar prm = [off,0,0,0];\n\t//console.log(split); split = 170;\n\t\n\tfor (min_v=row=0; row < height; row++) {\n\t\tif (split && row == split) {\n\t\t\t//free (huff);\n\t\t\thuff = make_decoder (nikon_tree[tree+1]);\n\t\t\t//max_v += (min_v = 16) << 1;\n\t\t}\n\t\tfor (col=0; col < raw_width; col++) {\n\t\t\ti = getbithuff(data,prm,huff[0],huff);\n\t\t\tlen = i & 15;\n\t\t\tshl = i >>> 4;\n\t\t\tdiff = (((getbithuff(data,prm,len-shl,0) << 1) + 1) << shl) >>> 1;\n\t\t\tif ((diff & (1 << (len-1))) == 0)\n\t\t\t\tdiff -= (1 << len) - (shl==0?1:0);\n\t\t\tif (col < 2) hpred[col] = vpred[row & 1][col] += diff;\n\t\t\telse hpred[col & 1] += diff;\n\t\t\t\n\t\t\tvar clr = Math.min(Math.max(hpred[col & 1],0),(1<<tiff_bps)-1);\n\t\t\tvar bti = (row*raw_width+col)*tiff_bps; \n\t\t\tUTIF.decode._putsF(tgt, bti, clr<<(16-tiff_bps));\n\t\t}\n\t}\n}\n// put 16 bits\nUTIF.decode._putsF= function(dt, pos, val) { val = val<<(8-(pos&7)); var o=(pos>>>3); dt[o]|=val>>>16; dt[o+1]|=val>>>8; dt[o+2]|=val; }\n\n\nUTIF.decode._getbithuff = function(data,prm,nbits, huff) {\n\tvar zero_after_ff = 0;\n\tvar get_byte = UTIF.decode._get_byte;\n\tvar c;\n \n\tvar off=prm[0], bitbuf=prm[1], vbits=prm[2], reset=prm[3];\n\n\t//if (nbits > 25) return 0;\n\t//if (nbits < 0) return bitbuf = vbits = reset = 0;\n\tif (nbits == 0 || vbits < 0) return 0; \n\twhile (!reset && vbits < nbits && (c = data[off++]) != -1 &&\n\t\t!(reset = zero_after_ff && c == 0xff && data[off++])) {\n\t\t//console.log(\"byte read into c\");\n\t\tbitbuf = (bitbuf << 8) + c;\n\t\tvbits += 8;\n\t} \n\tc = (bitbuf << (32-vbits)) >>> (32-nbits);\n\tif (huff) {\n\t\tvbits -= huff[c+1] >>> 8; //console.log(c, huff[c]>>8);\n\t\tc = huff[c+1]&255;\n\t} else\n\t\tvbits -= nbits;\n\tif (vbits < 0) throw \"e\";\n \n\tprm[0]=off; prm[1]=bitbuf; prm[2]=vbits; prm[3]=reset;\n \n\treturn c;\n}\n\nUTIF.decode._make_decoder = function(source) {\n\tvar max, len, h, i, j;\n\tvar huff = [];\n\n\tfor (max=16; max!=0 && !source[max]; max--);\n\tvar si=17;\n\t\n\thuff[0] = max;\n\tfor (h=len=1; len <= max; len++)\n\t\tfor (i=0; i < source[len]; i++, ++si)\n\t\t\tfor (j=0; j < 1 << (max-len); j++)\n\t\t\t\tif (h <= 1 << max)\n\t\t\t\t\thuff[h++] = (len << 8) | source[si];\n\treturn huff;\n}\n\nUTIF.decode._decodeNewJPEG = function(img, data, off, len, tgt, toff)\n{\n\tvar tables = img[\"t347\"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len);\n\t\n\tif (tables) {\n\t\tvar SOI = 216, EOI = 217, boff = 0;\n\t\tfor (var i=0; i<(tlen-1); i++)\n\t\t{\n\t\t\t// Skip EOI marker from JPEGTables\n\t\t\tif (tables[i]==255 && tables[i+1]==EOI) break;\n\t\t\tbuff[boff++] = tables[i];\n\t\t}\n\n\t\t// Skip SOI marker from data\n\t\tvar byte1 = data[off], byte2 = data[off + 1];\n\t\tif (byte1!=255 || byte2!=SOI)\n\t\t{\n\t\t\tbuff[boff++] = byte1;\n\t\t\tbuff[boff++] = byte2;\n\t\t}\n\t\tfor (var i=2; i<len; i++) buff[boff++] = data[off+i];\n\t}\n\telse for (var i=0; i<len; i++) buff[i] = data[off+i];\n\n\tif(img[\"t262\"][0]==32803 || img[\"t262\"][0]==34892) // lossless JPEG and lossy JPEG (used in DNG files)\n\t{\n\t\tvar bps = img[\"t258\"][0];//, dcdr = new LosslessJpegDecoder();\n\t\tvar out = UTIF.LosslessJpegDecode(buff), olen=out.length; //console.log(olen);\n\t\t\n\t\tif(false) {}\n\t\telse if(bps==16) {\n\t\t\tif(img.isLE) for(var i=0; i<olen; i++ ) { tgt[toff+(i<<1)] = (out[i]&255); tgt[toff+(i<<1)+1] = (out[i]>>>8); }\n\t\t\telse for(var i=0; i<olen; i++ ) { tgt[toff+(i<<1)] = (out[i]>>>8); tgt[toff+(i<<1)+1] = (out[i]&255); }\n\t\t}\n\t\telse if(bps==14 || bps==12) { // 4 * 14 == 56 == 7 * 8\n\t\t\tvar rst = 16-bps;\n\t\t\tfor(var i=0; i<olen; i++) UTIF.decode._putsF(tgt, i*bps, out[i]<<rst);\n\t\t}\n\t\telse throw new Error(\"unsupported bit depth \"+bps);\n\t}\n\telse\n\t{\n\t\tvar parser = new UTIF.JpegDecoder(); parser.parse(buff);\n\t\tvar decoded = parser.getData(parser.width, parser.height);\n\t\tfor (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];\n\t}\n\n\t// PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\n\t// RGB format, so updating the tag value\n\tif(img[\"t262\"][0] == 6) img[\"t262\"][0] = 2;\n}\n\nUTIF.decode._decodeOldJPEGInit = function(img, data, off, len)\n{\n\tvar SOI = 216, EOI = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS = 218;\n\tvar joff = 0, soff = 0, tables, sosMarker, isTiled = false, i, j, k;\n\tvar jpgIchgFmt = img[\"t513\"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0;\n\tvar jpgIchgFmtLen = img[\"t514\"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0;\n\tvar soffTag = img[\"t324\"] || img[\"t273\"] || jpgIchgFmt;\n\tvar ycbcrss = img[\"t530\"], ssx = 0, ssy = 0;\n\tvar spp = img[\"t277\"]?img[\"t277\"][0]:1;\n\tvar jpgresint = img[\"t515\"];\n\n\tif(soffTag)\n\t{\n\t\tsoff = soffTag[0];\n\t\tisTiled = (soffTag.length > 1);\n\t}\n\n\tif(!isTiled)\n\t{\n\t\tif(data[off]==255 && data[off+1]==SOI) return { jpegOffset: off };\n\t\tif(jpgIchgFmt!=null)\n\t\t{\n\t\t\tif(data[off+jifoff]==255 && data[off+jifoff+1]==SOI) joff = off+jifoff;\n\t\t\telse log(\"JPEGInterchangeFormat does not point to SOI\");\n\n\t\t\tif(jpgIchgFmtLen==null) log(\"JPEGInterchangeFormatLength field is missing\");\n\t\t\telse if(jifoff >= soff || (jifoff+jiflen) <= soff) log(\"JPEGInterchangeFormatLength field value is invalid\");\n\n\t\t\tif(joff != null) return { jpegOffset: joff };\n\t\t}\n\t}\n\n\tif(ycbcrss!=null) { ssx = ycbcrss[0]; ssy = ycbcrss[1]; }\n\n\tif(jpgIchgFmt!=null)\n\t\tif(jpgIchgFmtLen!=null)\n\t\t\tif(jiflen >= 2 && (jifoff+jiflen) <= soff)\n\t\t\t{\n\t\t\t\tif(data[off+jifoff+jiflen-2]==255 && data[off+jifoff+jiflen-1]==SOI) tables = new Uint8Array(jiflen-2);\n\t\t\t\telse tables = new Uint8Array(jiflen);\n\n\t\t\t\tfor(i=0; i<tables.length; i++) tables[i] = data[off+jifoff+i];\n\t\t\t\tlog(\"Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables\");\n\t\t\t}\n\t\t\telse log(\"JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile\");\n\n\tif(tables == null)\n\t{\n\t\tvar ooff = 0, out = [];\n\t\tout[ooff++] = 255; out[ooff++] = SOI;\n\n\t\tvar qtables = img[\"t519\"];\n\t\tif(qtables==null) throw new Error(\"JPEGQTables tag is missing\");\n\t\tfor(i=0; i<qtables.length; i++)\n\t\t{\n\t\t\tout[ooff++] = 255; out[ooff++] = DQT; out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;\n\t\t\tfor(j=0; j<64; j++) out[ooff++] = data[off+qtables[i]+j];\n\t\t}\n\n\t\tfor(k=0; k<2; k++)\n\t\t{\n\t\t\tvar htables = img[(k == 0) ? \"t520\" : \"t521\"];\n\t\t\tif(htables==null) throw new Error(((k == 0) ? \"JPEGDCTables\" : \"JPEGACTables\") + \" tag is missing\");\n\t\t\tfor(i=0; i<htables.length; i++)\n\t\t\t{\n\t\t\t\tout[ooff++] = 255; out[ooff++] = DHT;\n\t\t\t\t//out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;\n\t\t\t\tvar nc = 19;\n\t\t\t\tfor(j=0; j<16; j++) nc += data[off+htables[i]+j];\n\n\t\t\t\tout[ooff++] = (nc >>> 8); out[ooff++] = nc & 255;\n\t\t\t\tout[ooff++] = (i | (k << 4));\n\t\t\t\tfor(j=0; j<16; j++) out[ooff++] = data[off+htables[i]+j];\n\t\t\t\tfor(j=0; j<nc; j++) out[ooff++] = data[off+htables[i]+16+j];\n\t\t\t}\n\t\t}\n\n\t\tout[ooff++] = 255; out[ooff++] = SOF0;\n\t\tout[ooff++] = 0; out[ooff++] = 8 + 3*spp; out[ooff++] = 8;\n\t\tout[ooff++] = (img.height >>> 8) & 255; out[ooff++] = img.height & 255;\n\t\tout[ooff++] = (img.width >>> 8) & 255; out[ooff++] = img.width & 255;\n\t\tout[ooff++] = spp;\n\t\tif(spp==1) { out[ooff++] = 1; out[ooff++] = 17; out[ooff++] = 0; }\n\t\telse for(i=0; i<3; i++)\n\t\t{\n\t\t\tout[ooff++] = i + 1;\n\t\t\tout[ooff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\n\t\t\tout[ooff++] = i;\n\t\t}\n\n\t\tif(jpgresint!=null && jpgresint[0]!=0)\n\t\t{\n\t\t\tout[ooff++] = 255; out[ooff++] = DRI; out[ooff++] = 0; out[ooff++] = 4;\n\t\t\tout[ooff++] = (jpgresint[0] >>> 8) & 255;\n\t\t\tout[ooff++] = jpgresint[0] & 255;\n\t\t}\n\n\t\ttables = new Uint8Array(out);\n\t}\n\n\tvar sofpos = -1;\n\ti = 0;\n\twhile(i < (tables.length - 1)) {\n\t\tif(tables[i]==255 && tables[i+1]==SOF0) { sofpos = i; break; }\n\t\ti++;\n\t}\n\n\tif(sofpos == -1)\n\t{\n\t\tvar tmptab = new Uint8Array(tables.length + 10 + 3*spp);\n\t\ttmptab.set(tables);\n\t\tvar tmpoff = tables.length;\n\t\tsofpos = tables.length;\n\t\ttables = tmptab;\n\n\t\ttables[tmpoff++] = 255; tables[tmpoff++] = SOF0;\n\t\ttables[tmpoff++] = 0; tables[tmpoff++] = 8 + 3*spp; tables[tmpoff++] = 8;\n\t\ttables[tmpoff++] = (img.height >>> 8) & 255; tables[tmpoff++] = img.height & 255;\n\t\ttables[tmpoff++] = (img.width >>> 8) & 255; tables[tmpoff++] = img.width & 255;\n\t\ttables[tmpoff++] = spp;\n\t\tif(spp==1) { tables[tmpoff++] = 1; tables[tmpoff++] = 17; tables[tmpoff++] = 0; }\n\t\telse for(i=0; i<3; i++)\n\t\t{\n\t\t\ttables[tmpoff++] = i + 1;\n\t\t\ttables[tmpoff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\n\t\t\ttables[tmpoff++] = i;\n\t\t}\n\t}\n\n\tif(data[soff]==255 && data[soff+1]==SOS)\n\t{\n\t\tvar soslen = (data[soff+2]<<8) | data[soff+3];\n\t\tsosMarker = new Uint8Array(soslen+2);\n\t\tsosMarker[0] = data[soff]; sosMarker[1] = data[soff+1]; sosMarker[2] = data[soff+2]; sosMarker[3] = data[soff+3];\n\t\tfor(i=0; i<(soslen-2); i++) sosMarker[i+4] = data[soff+i+4];\n\t}\n\telse\n\t{\n\t\tsosMarker = new Uint8Array(2 + 6 + 2*spp);\n\t\tvar sosoff = 0;\n\t\tsosMarker[sosoff++] = 255; sosMarker[sosoff++] = SOS;\n\t\tsosMarker[sosoff++] = 0; sosMarker[sosoff++] = 6 + 2*spp; sosMarker[sosoff++] = spp;\n\t\tif(spp==1) { sosMarker[sosoff++] = 1; sosMarker[sosoff++] = 0; }\n\t\telse for(i=0; i<3; i++)\n\t\t{\n\t\t\tsosMarker[sosoff++] = i+1; sosMarker[sosoff++] = (i << 4) | i;\n\t\t}\n\t\tsosMarker[sosoff++] = 0; sosMarker[sosoff++] = 63; sosMarker[sosoff++] = 0;\n\t}\n\n\treturn { jpegOffset: off, tables: tables, sosMarker: sosMarker, sofPosition: sofpos };\n}\n\nUTIF.decode._decodeOldJPEG = function(img, data, off, len, tgt, toff)\n{\n\tvar i, dlen, tlen, buff, buffoff;\n\tvar jpegData = UTIF.decode._decodeOldJPEGInit(img, data, off, len);\n\n\tif(jpegData.jpegOffset!=null)\n\t{\n\t\tdlen = off+len-jpegData.jpegOffset;\n\t\tbuff = new Uint8Array(dlen);\n\t\tfor(i=0; i<dlen; i++) buff[i] = data[jpegData.jpegOffset+i];\n\t}\n\telse\n\t{\n\t\ttlen = jpegData.tables.length;\n\t\tbuff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2);\n\t\tbuff.set(jpegData.tables);\n\t\tbuffoff = tlen;\n\n\t\tbuff[jpegData.sofPosition+5] = (img.height >>> 8) & 255; buff[jpegData.sofPosition+6] = img.height & 255;\n\t\tbuff[jpegData.sofPosition+7] = (img.width >>> 8) & 255; buff[jpegData.sofPosition+8] = img.width & 255;\n\n\t\tif(data[off]!=255 || data[off+1]!=SOS)\n\t\t{\n\t\t\tbuff.set(jpegData.sosMarker, buffoff);\n\t\t\tbuffoff += sosMarker.length;\n\t\t}\n\t\tfor(i=0; i<len; i++) buff[buffoff++] = data[off+i];\n\t\tbuff[buffoff++] = 255; buff[buffoff++] = EOI;\n\t}\n\n\tvar parser = new UTIF.JpegDecoder(); parser.parse(buff);\n\tvar decoded = parser.getData(parser.width, parser.height);\n\tfor (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];\n\n\t// PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\n\t// RGB format, so updating the tag value\n\tif(img[\"t262\"] && img[\"t262\"][0] == 6) img[\"t262\"][0] = 2;\n}\n\nUTIF.decode._decodePackBits = function(data, off, len, tgt, toff)\n{\n\tvar sa = new Int8Array(data.buffer), ta = new Int8Array(tgt.buffer), lim = off+len;\n\twhile(off<lim)\n\t{\n\t\tvar n = sa[off]; off++;\n\t\tif(n>=0 && n<128) for(var i=0; i< n+1; i++) { ta[toff]=sa[off]; toff++; off++; }\n\t\tif(n>=-127 && n<0) { for(var i=0; i<-n+1; i++) { ta[toff]=sa[off]; toff++; } off++; }\n\t}\n}\n\nUTIF.decode._decodeThunder = function(data, off, len, tgt, toff)\n{\n\tvar d2 = [ 0, 1, 0, -1 ], d3 = [ 0, 1, 2, 3, 0, -3, -2, -1 ];\n\tvar lim = off+len, qoff = toff*2, px = 0;\n\twhile(off<lim)\n\t{\n\t\tvar b = data[off], msk = (b>>>6), n = (b&63); off++;\n\t\tif(msk==3) { px=(n&15); tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; }\n\t\tif(msk==0) for(var i=0; i<n; i++) { tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; }\n\t\tif(msk==2) for(var i=0; i<2; i++) { var d=(n>>>(3*(1-i)))&7; if(d!=4) { px+=d3[d]; tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; } }\n\t\tif(msk==1) for(var i=0; i<3; i++) { var d=(n>>>(2*(2-i)))&3; if(d!=2) { px+=d2[d]; tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; } }\n\t}\n}\n\nUTIF.decode._dmap = { \"1\":0,\"011\":1,\"000011\":2,\"0000011\":3, \"010\":-1,\"000010\":-2,\"0000010\":-3 };\nUTIF.decode._lens = ( function()\n{\n\tvar addKeys = function(lens, arr, i0, inc) { for(var i=0; i<arr.length; i++) lens[arr[i]] = i0 + i*inc; }\n\n\tvar termW = \"00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101,\" // 15\n\t+ \"101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010,\" // 31\n\t+ \"00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010,\" // 47\n\t+ \"00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100\";\n\n\tvar termB = \"0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000,\" // 15\n\t+ \"0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001,\" // 31\n\t+ \"000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111,\" // 47\n\t+ \"000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111\";\n\n\tvar makeW = \"11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,\"\n\t+ \"011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011\";\n\n\tvar makeB = \"0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,\"\n\t+ \"0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,\"\n\t+ \"0000001011011,0000001100100,0000001100101\";\n\n\tvar makeA = \"00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111\";\n\n\ttermW = termW.split(\",\"); termB = termB.split(\",\"); makeW = makeW.split(\",\"); makeB = makeB.split(\",\"); makeA = makeA.split(\",\");\n\n\tvar lensW = {}, lensB = {};\n\taddKeys(lensW, termW, 0, 1); addKeys(lensW, makeW, 64,64); addKeys(lensW, makeA, 1792,64);\n\taddKeys(lensB, termB, 0, 1); addKeys(lensB, makeB, 64,64); addKeys(lensB, makeA, 1792,64);\n\treturn [lensW, lensB];\n} )();\n\nUTIF.decode._decodeG4 = function(data, off, slen, tgt, toff, w, fo)\n{\n\tvar U = UTIF.decode, boff=off<<3, len=0, wrd=\"\";\t// previous starts with 1\n\tvar line=[], pline=[]; for(var i=0; i<w; i++) pline.push(0); pline=U._makeDiff(pline);\n\tvar a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;\n\tvar y=0, mode=\"\", toRead=0;\n\tvar bipl = Math.ceil(w/8)*8;\n\n\twhile((boff>>>3)<off+slen)\n\t{\n\t\tb1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\n\t\tvar bit =0;\n\t\tif(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;\n\t\tif(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;\n\t\tboff++; wrd+=bit;\n\t\tif(mode==\"H\")\n\t\t{\n\t\t\tif(U._lens[clr][wrd]!=null)\n\t\t\t{\n\t\t\t\tvar dl=U._lens[clr][wrd]; wrd=\"\"; len+=dl;\n\t\t\t\tif(dl<64) { U._addNtimes(line,len,clr); a0+=len; clr=1-clr; len=0; toRead--; if(toRead==0) mode=\"\"; }\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(wrd==\"0001\") { wrd=\"\"; U._addNtimes(line,b2-a0,clr); a0=b2; }\n\t\t\tif(wrd==\"001\" ) { wrd=\"\"; mode=\"H\"; toRead=2; }\n\t\t\tif(U._dmap[wrd]!=null) { a1 = b1+U._dmap[wrd]; U._addNtimes(line, a1-a0, clr); a0=a1; wrd=\"\"; clr=1-clr; }\n\t\t}\n\t\tif(line.length==w && mode==\"\")\n\t\t{\n\t\t\tU._writeBits(line, tgt, toff*8+y*bipl);\n\t\t\tclr=0; y++; a0=0;\n\t\t\tpline=U._makeDiff(line); line=[];\n\t\t}\n\t\t//if(wrd.length>150) { log(wrd); break; throw \"e\"; }\n\t}\n}\n\nUTIF.decode._findDiff = function(line, x, clr) { for(var i=0; i<line.length; i+=2) if(line[i]>=x && line[i+1]==clr) return line[i]; }\n\nUTIF.decode._makeDiff = function(line)\n{\n\tvar out = []; if(line[0]==1) out.push(0,1);\n\tfor(var i=1; i<line.length; i++) if(line[i-1]!=line[i]) out.push(i, line[i]);\n\tout.push(line.length,0,line.length,1); return out;\n}\n\nUTIF.decode._decodeG3 = function(data, off, slen, tgt, toff, w, fo)\n{\n\tvar U = UTIF.decode, boff=off<<3, len=0, wrd=\"\";\n\tvar line=[], pline=[]; for(var i=0; i<w; i++) line.push(0);\n\tvar a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;\n\tvar y=-1, mode=\"\", toRead=0, is1D=false;\n\tvar bipl = Math.ceil(w/8)*8;\n\twhile((boff>>>3)<off+slen)\n\t{\n\t\tb1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\n\t\tvar bit =0;\n\t\tif(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;\n\t\tif(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;\n\t\tboff++; wrd+=bit;\n\n\t\tif(is1D)\n\t\t{\n\t\t\tif(U._lens[clr][wrd]!=null)\n\t\t\t{\n\t\t\t\tvar dl=U._lens[clr][wrd]; wrd=\"\"; len+=dl;\n\t\t\t\tif(dl<64) { U._addNtimes(line,len,clr); clr=1-clr; len=0; }\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(mode==\"H\")\n\t\t\t{\n\t\t\t\tif(U._lens[clr][wrd]!=null)\n\t\t\t\t{\n\t\t\t\t\tvar dl=U._lens[clr][wrd]; wrd=\"\"; len+=dl;\n\t\t\t\t\tif(dl<64) { U._addNtimes(line,len,clr); a0+=len; clr=1-clr; len=0; toRead--; if(toRead==0) mode=\"\"; }\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(wrd==\"0001\") { wrd=\"\"; U._addNtimes(line,b2-a0,clr); a0=b2; }\n\t\t\t\tif(wrd==\"001\" ) { wrd=\"\"; mode=\"H\"; toRead=2; }\n\t\t\t\tif(U._dmap[wrd]!=null) { a1 = b1+U._dmap[wrd]; U._addNtimes(line, a1-a0, clr); a0=a1; wrd=\"\"; clr=1-clr; }\n\t\t\t}\n\t\t}\n\t\tif(wrd.endsWith(\"000000000001\")) // needed for some files\n\t\t{\n\t\t\tif(y>=0) U._writeBits(line, tgt, toff*8+y*bipl);\n\t\t\tif(fo==1) is1D = ((data[boff>>>3]>>>(7-(boff&7)))&1)==1;\n\t\t\tif(fo==2) is1D = ((data[boff>>>3]>>>( (boff&7)))&1)==1;\n\t\t\tboff++;\n\t\t\tif(U._decodeG3.allow2D==null) U._decodeG3.allow2D=is1D;\n\t\t\tif(!U._decodeG3.allow2D) { is1D = true; boff--; }\n\t\t\t//log(\"EOL\",y, \"next 1D:\", is1D);\n\t\t\twrd=\"\"; clr=0; y++; a0=0;\n\t\t\tpline=U._makeDiff(line); line=[];\n\t\t}\n\t}\n\tif(line.length==w) U._writeBits(line, tgt, toff*8+y*bipl);\n}\n\nUTIF.decode._addNtimes = function(arr, n, val) { for(var i=0; i<n; i++) arr.push(val); }\n\nUTIF.decode._writeBits = function(bits, tgt, boff)\n{\n\tfor(var i=0; i<bits.length; i++) tgt[(boff+i)>>>3] |= (bits[i]<<(7-((boff+i)&7)));\n}\n\nUTIF.decode._decodeLZW = function(data, off, tgt, toff)\n{\n\tif(UTIF.decode._lzwTab==null)\n\t{\n\t\tvar tb=new Uint32Array(0xffff), tn=new Uint16Array(0xffff), chr=new Uint8Array(2e6);\n\t\tfor(var i=0; i<256; i++) { chr[i<<2]=i; tb[i]=i<<2; tn[i]=1; }\n\t\tUTIF.decode._lzwTab = [tb,tn,chr];\n\t}\n\tvar copy = UTIF.decode._copyData;\n\tvar tab = UTIF.decode._lzwTab[0], tln=UTIF.decode._lzwTab[1], chr=UTIF.decode._lzwTab[2], totl = 258, chrl = 258<<2;\n\tvar bits = 9, boff = off<<3; // offset in bits\n\n\tvar ClearCode = 256, EoiCode = 257;\n\tvar v = 0, Code = 0, OldCode = 0;\n\twhile(true)\n\t{\n\t\tv = (data[boff>>>3]<<16) | (data[(boff+8)>>>3]<<8) | data[(boff+16)>>>3];\n\t\tCode = ( v>>(24-(boff&7)-bits) ) & ((1<<bits)-1); boff+=bits;\n\n\t\tif(Code==EoiCode) break;\n\t\tif(Code==ClearCode)\n\t\t{\n\t\t\tbits=9; totl = 258; chrl = 258<<2;\n\n\t\t\tv = (data[boff>>>3]<<16) | (data[(boff+8)>>>3]<<8) | data[(boff+16)>>>3];\n\t\t\tCode = ( v>>(24-(boff&7)-bits) ) & ((1<<bits)-1); boff+=bits;\n\t\t\tif(Code==EoiCode) break;\n\t\t\ttgt[toff]=Code; toff++;\n\t\t}\n\t\telse if(Code<totl)\n\t\t{\n\t\t\tvar cd = tab[Code], cl = tln[Code];\n\t\t\tcopy(chr,cd,tgt,toff,cl); toff += cl;\n\n\t\t\tif(OldCode>=totl) { tab[totl] = chrl; chr[tab[totl]] = cd[0]; tln[totl]=1; chrl=(chrl+1+3)&~0x03; totl++; }\n\t\t\telse\n\t\t\t{\n\t\t\t\ttab[totl] = chrl;\n\t\t\t\tvar nit = tab[OldCode], nil = tln[OldCode];\n\t\t\t\tcopy(chr,nit,chr,chrl,nil);\n\t\t\t\tchr[chrl+nil]=chr[cd]; nil++;\n\t\t\t\ttln[totl]=nil; totl++;\n\n\t\t\t\tchrl=(chrl+nil+3)&~0x03;\n\t\t\t}\n\t\t\tif(totl+1==(1<<bits)) bits++;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(OldCode>=totl) { tab[totl] = chrl; tln[totl]=0; totl++; }\n\t\t\telse\n\t\t\t{\n\t\t\t\ttab[totl] = chrl;\n\t\t\t\tvar nit = tab[OldCode], nil = tln[OldCode];\n\t\t\t\tcopy(chr,nit,chr,chrl,nil);\n\t\t\t\tchr[chrl+nil]=chr[chrl]; nil++;\n\t\t\t\ttln[totl]=nil; totl++;\n\n\t\t\t\tcopy(chr,chrl,tgt,toff,nil); toff += nil;\n\t\t\t\tchrl=(chrl+nil+3)&~0x03;\n\t\t\t}\n\t\t\tif(totl+1==(1<<bits)) bits++;\n\t\t}\n\t\tOldCode = Code;\n\t}\n}\n\nUTIF.decode._copyData = function(s,so,t,to,l) { for(var i=0;i<l;i+=4) { t[to+i]=s[so+i]; t[to+i+1]=s[so+i+1]; t[to+i+2]=s[so+i+2]; t[to+i+3]=s[so+i+3]; } }\n\nUTIF.tags = {};\nUTIF.ttypes = { 256:3,257:3,258:3, 259:3, 262:3, 273:4, 274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4 };\n\nUTIF._readIFD = function(bin, data, offset, ifds, depth, debug)\n{\n\tvar cnt = bin.readUshort(data, offset); offset+=2;\n\tvar ifd = {}; ifds.push(ifd);\n\n\tif(debug) log(\" \".repeat(depth),ifds.length-1,\">>>----------------\");\n\tfor(var i=0; i<cnt; i++)\n\t{\n\t\tvar tag = bin.readUshort(data, offset); offset+=2;\n\t\tvar type = bin.readUshort(data, offset); offset+=2;\n\t\tvar num = bin.readUint (data, offset); offset+=4;\n\t\tvar voff = bin.readUint (data, offset); offset+=4;\n\t\t//if(tag==33723) {type=1; num*=4;}//console.log(type,num,voff);//type = 1; // IPTC/NAA\n\n\t\tvar arr = [];\n\t\t//ifd[\"t\"+tag+\"-\"+UTIF.tags[tag]] = arr;\n\t\tif(type== 1 || type==7) { arr = new Uint8Array(data.buffer, (num<5 ? offset-4 : voff), num); }\n\t\tif(type== 2) { var o0 = (num<5 ? offset-4 : voff), c=data[o0]; \n\t\t\t\t\t\tif(c<128) arr.push( bin.readASCII(data, o0, num-1) );\n\t\t\t\t\t\telse arr = new Uint8Array(data.buffer, o0, num-1); }\n\t\tif(type== 3) { for(var j=0; j<num; j++) arr.push(bin.readUshort(data, (num<3 ? offset-4 : voff)+2*j)); }\n\t\tif(type== 4) { for(var j=0; j<num; j++) arr.push(bin.readUint (data, (num<2 ? offset-4 : voff)+4*j)); }\n\t\tif(type== 5) { for(var j=0; j<num; j++) arr.push(bin.readUint (data, voff+j*8) / bin.readUint(data,voff+j*8+4)); }\n\t\tif(type== 8) { for(var j=0; j<num; j++) arr.push(bin.readShort (data, (num<3 ? offset-4 : voff)+2*j)); }\n\t\tif(type== 9) { for(var j=0; j<num; j++) arr.push(bin.readInt (data, (num<2 ? offset-4 : voff)+4*j)); }\n\t\tif(type==10) { for(var j=0; j<num; j++) arr.push(bin.readInt (data, voff+j*8) / bin.readInt (data,voff+j*8+4)); }\n\t\tif(type==11) { for(var j=0; j<num; j++) arr.push(bin.readFloat (data, voff+j*4)); }\n\t\tif(type==12) { for(var j=0; j<num; j++) arr.push(bin.readDouble(data, voff+j*8)); }\n\t\t\n\t\tifd[\"t\"+tag] = arr;\n\t\t\n\t\tif(num!=0 && arr.length==0) { log(\"unknown TIFF tag type: \", type, \"num:\",num); }\n\t\tif(debug) log(\" \".repeat(depth), tag, type, UTIF.tags[tag], arr);\n\t\t\n\t\tif(tag==330 && ifd[\"t272\"] && ifd[\"t272\"][0]==\"DSLR-A100\") { } \n\t\t// ifd[\"t258\"]=[12]; ifd[\"t259\"]=[32767]; ifd[\"t273\"]=[offset+arr[0]]; ifd[\"t277\"]=[1]; ifd[\"t279\"]=[1]; ifd[\"t33421\"]=[2,2]; ifd[\"t33422\"]=[0,1,1,2];\n\t\telse if(tag==330 || tag==34665 || (tag==50740 && bin.readUshort(data,bin.readUint(arr,0))<300 )) {\n\t\t\tvar oarr = tag==50740 ? [bin.readUint(arr,0)] : arr;\n\t\t\tvar subfd = [];\n\t\t\tfor(var j=0; j<oarr.length; j++) UTIF._readIFD(bin, data, oarr[j], subfd, depth+1, debug);\n\t\t\tif(tag== 330) ifd.subIFD = subfd;\n\t\t\tif(tag==34665) ifd.exifIFD = subfd[0];\n\t\t\tif(tag==50740) ifd.dngPrvt = subfd[0];\n\t\t}\n\t\tif(tag==37500) {\n\t\t\tvar mn = arr;\n\t\t\t//console.log(bin.readASCII(mn,0,mn.length), mn);\n\t\t\tif(bin.readASCII(mn,0,5)==\"Nikon\") ifd.makerNote = UTIF[\"decode\"](mn.slice(10).buffer)[0];\n\t\t\telse if(bin.readUshort(data,voff)<300){\n\t\t\t\tvar subsub=[]; UTIF._readIFD(bin, data, voff, subsub, depth+1, debug);\n\t\t\t\tifd.makerNote = subsub[0];\n\t\t\t}\n\t\t}\n\t}\n\tif(debug) log(\" \".repeat(depth),\"<<<---------------\");\n\treturn offset;\n}\n\nUTIF._writeIFD = function(bin, data, offset, ifd)\n{\n\tvar keys = Object.keys(ifd);\n\tbin.writeUshort(data, offset, keys.length); offset+=2;\n\n\tvar eoff = offset + keys.length*12 + 4;\n\n\tfor(var ki=0; ki<keys.length; ki++)\n\t{\n\t\tvar key = keys[ki];\n\t\tvar tag = parseInt(key.slice(1)), type = UTIF.ttypes[tag]; if(type==null) throw new Error(\"unknown type of tag: \"+tag);\n\t\tvar val = ifd[key]; if(type==2) val=val[0]+\"\\u0000\"; var num = val.length;\n\t\tbin.writeUshort(data, offset, tag ); offset+=2;\n\t\tbin.writeUshort(data, offset, type); offset+=2;\n\t\tbin.writeUint (data, offset, num ); offset+=4;\n\n\t\tvar dlen = [-1, 1, 1, 2, 4, 8, 0, 0, 0, 0, 0, 0, 8][type] * num;\n\t\tvar toff = offset;\n\t\tif(dlen>4) { bin.writeUint(data, offset, eoff); toff=eoff; }\n\n\t\tif(type==2) { bin.writeASCII(data, toff, val); }\n\t\tif(type==3) { for(var i=0; i<num; i++) bin.writeUshort(data, toff+2*i, val[i]); }\n\t\tif(type==4) { for(var i=0; i<num; i++) bin.writeUint (data, toff+4*i, val[i]); }\n\t\tif(type==5) { for(var i=0; i<num; i++) { bin.writeUint(data, toff+8*i, Math.round(val[i]*10000)); bin.writeUint(data, toff+8*i+4, 10000); } }\n\t\tif (type == 12) { for (var i = 0; i < num; i++) bin.writeDouble(data, toff + 8 * i, val[i]); }\n\n\t\tif(dlen>4) { dlen += (dlen&1); eoff += dlen; }\n\t\toffset += 4;\n\t}\n\treturn [offset, eoff];\n}\n\nUTIF.toRGBA8 = function(out)\n{\n\tvar w = out.width, h = out.height, area = w*h, qarea = area*4, data = out.data;\n\tvar img = new Uint8Array(area*4);\n\t//console.log(out);\n\t// 0: WhiteIsZero, 1: BlackIsZero, 2: RGB, 3: Palette color, 4: Transparency mask, 5: CMYK\n\tvar intp = (out[\"t262\"] ? out[\"t262\"][0]: 2), bps = (out[\"t258\"]?Math.min(32,out[\"t258\"][0]):1);\n\t//log(\"interpretation: \", intp, \"bps\", bps, out);\n\tif(false) {}\n\telse if(intp==0)\n\t{\n\t\tvar bpl = Math.ceil(bps*w/8);\n\t\tfor(var y=0; y<h; y++) {\n\t\t\tvar off = y*bpl, io = y*w;\n\t\t\tif(bps== 1) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7- (i&7)))& 1; img[qi]=img[qi+1]=img[qi+2]=( 1-px)*255; img[qi+3]=255; }\n\t\t\tif(bps== 4) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>1)])>>(4-4*(i&1)))&15; img[qi]=img[qi+1]=img[qi+2]=(15-px)* 17; img[qi+3]=255; }\n\t\t\tif(bps== 8) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=data[off+i]; img[qi]=img[qi+1]=img[qi+2]=255-px; img[qi+3]=255; }\n\t\t}\n\t}\n\telse if(intp==1)\n\t{\n\t\tvar bpl = Math.ceil(bps*w/8);\n\t\tfor(var y=0; y<h; y++) {\n\t\t\tvar off = y*bpl, io = y*w;\n\t\t\tif(bps== 1) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7- (i&7)))&1; img[qi]=img[qi+1]=img[qi+2]=(px)*255; img[qi+3]=255; }\n\t\t\tif(bps== 2) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>2)])>>(6-2*(i&3)))&3; img[qi]=img[qi+1]=img[qi+2]=(px)* 85; img[qi+3]=255; }\n\t\t\tif(bps== 8) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=data[off+i]; img[qi]=img[qi+1]=img[qi+2]= px; img[qi+3]=255; }\n\t\t\tif(bps==16) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=data[off+(2*i+1)]; img[qi]=img[qi+1]=img[qi+2]= Math.min(255,px); img[qi+3]=255; } // ladoga.tif\n\t\t}\n\t}\n\telse if(intp==2)\n\t{\n\t\tvar smpls = out[\"t258\"]?out[\"t258\"].length : 3;\n\t\t\n\t\tif(bps== 8) \n\t\t{\n\t\t\tif(smpls==4) for(var i=0; i<qarea; i++) img[i] = data[i];\n\t\t\tif(smpls==3) for(var i=0; i< area; i++) { var qi=i<<2, ti=i*3; img[qi]=data[ti]; img[qi+1]=data[ti+1]; img[qi+2]=data[ti+2]; img[qi+3]=255; }\n\t\t}\n\t\telse{ // 3x 16-bit channel\n\t\t\tif(smpls==4) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*8+1; img[qi]=data[ti]; img[qi+1]=data[ti+2]; img[qi+2]=data[ti+4]; img[qi+3]=data[ti+6]; }\n\t\t\tif(smpls==3) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*6+1; img[qi]=data[ti]; img[qi+1]=data[ti+2]; img[qi+2]=data[ti+4]; img[qi+3]=255; }\n\t\t}\n\t}\n\telse if(intp==3)\n\t{\n\t\tvar map = out[\"t320\"];\n\t\tfor(var i=0; i<area; i++) { var qi=i<<2, mi=data[i]; img[qi]=(map[mi]>>8); img[qi+1]=(map[256+mi]>>8); img[qi+2]=(map[512+mi]>>8); img[qi+3]=255; }\n\t}\n\telse if(intp==5) \n\t{\n\t\tvar smpls = out[\"t258\"]?out[\"t258\"].length : 4;\n\t\tvar gotAlpha = smpls>4 ? 1 : 0;\n\t\tfor(var i=0; i<area; i++) {\n\t\t\tvar qi=i<<2, si=i*smpls; var C=255-data[si], M=255-data[si+1], Y=255-data[si+2], K=(255-data[si+3])*(1/255);\n\t\t\timg[qi]=~~(C*K+0.5); img[qi+1]=~~(M*K+0.5); img[qi+2]=~~(Y*K+0.5); img[qi+3]=255*(1-gotAlpha)+data[si+4]*gotAlpha;\n\t\t}\n\t}\n\telse log(\"Unknown Photometric interpretation: \"+intp);\n\treturn img;\n}\n\nUTIF.replaceIMG = function(imgs)\n{\n\tif(imgs==null) imgs = document.getElementsByTagName(\"img\");\n\tvar sufs = [\"tif\",\"tiff\",\"dng\",\"cr2\",\"nef\"]\n\tfor (var i=0; i<imgs.length; i++)\n\t{\n\t\tvar img=imgs[i], src=img.getAttribute(\"src\"); if(src==null) continue;\n\t\tvar suff=src.split(\".\").pop().toLowerCase();\n\t\tif(sufs.indexOf(suff)==-1) continue;\n\t\tvar xhr = new XMLHttpRequest(); UTIF._xhrs.push(xhr); UTIF._imgs.push(img);\n\t\txhr.open(\"GET\", src); xhr.responseType = \"arraybuffer\";\n\t\txhr.onload = UTIF._imgLoaded; xhr.send();\n\t}\n}\n\nUTIF._xhrs = []; UTIF._imgs = [];\nUTIF._imgLoaded = function(e)\n{\n\tvar buff = e.target.response;\n\tvar ifds = UTIF.decode(buff); //console.log(ifds);\n\tvar vsns = ifds, ma=0, page=vsns[0]; if(ifds[0].subIFD) vsns = vsns.concat(ifds[0].subIFD);\n\tfor(var i=0; i<vsns.length; i++) {\n\t\tvar img = vsns[i];\n\t\tif(img[\"t258\"]==null || img[\"t258\"].length<3) continue;\n\t\tvar ar = img[\"t256\"]*img[\"t257\"];\n\t\tif(ar>ma) { ma=ar; page=img; }\n\t}\n\tUTIF.decodeImage(buff, page, ifds);\n\tvar rgba = UTIF.toRGBA8(page), w=page.width, h=page.height;\n\tvar ind = UTIF._xhrs.indexOf(e.target), img = UTIF._imgs[ind];\n\tUTIF._xhrs.splice(ind,1); UTIF._imgs.splice(ind,1);\n\tvar cnv = document.createElement(\"canvas\"); cnv.width=w; cnv.height=h;\n\tvar ctx = cnv.getContext(\"2d\"), imgd = ctx.createImageData(w,h);\n\tfor(var i=0; i<rgba.length; i++) imgd.data[i]=rgba[i]; ctx.putImageData(imgd,0,0);\n\timg.setAttribute(\"src\",cnv.toDataURL());\n}\n\n\nUTIF._binBE =\n{\n\tnextZero : function(data, o) { while(data[o]!=0) o++; return o; },\n\treadUshort : function(buff, p) { return (buff[p]<< 8) | buff[p+1]; },\n\treadShort : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+1]; a[1]=buff[p+0]; return UTIF._binBE. i16[0]; },\n\treadInt : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+3]; a[1]=buff[p+2]; a[2]=buff[p+1]; a[3]=buff[p+0]; return UTIF._binBE. i32[0]; },\n\treadUint : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+3]; a[1]=buff[p+2]; a[2]=buff[p+1]; a[3]=buff[p+0]; return UTIF._binBE.ui32[0]; },\n\treadASCII : function(buff, p, l) { var s = \"\"; for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]); return s; },\n\treadFloat : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<4;i++) a[i]=buff[p+3-i]; return UTIF._binBE.fl32[0]; },\n\treadDouble : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<8;i++) a[i]=buff[p+7-i]; return UTIF._binBE.fl64[0]; },\n\n\twriteUshort: function(buff, p, n) { buff[p] = (n>> 8)&255; buff[p+1] = n&255; },\n\twriteUint : function(buff, p, n) { buff[p] = (n>>24)&255; buff[p+1] = (n>>16)&255; buff[p+2] = (n>>8)&255; buff[p+3] = (n>>0)&255; },\n\twriteASCII : function(buff, p, s) { for(var i = 0; i < s.length; i++) buff[p+i] = s.charCodeAt(i); },\n\twriteDouble: function(buff, p, n)\n\t{\n\t\tUTIF._binBE.fl64[0] = n;\n\t\tfor (var i = 0; i < 8; i++) buff[p + i] = UTIF._binBE.ui8[7 - i];\n\t}\n}\nUTIF._binBE.ui8 = new Uint8Array (8);\nUTIF._binBE.i16 = new Int16Array (UTIF._binBE.ui8.buffer);\nUTIF._binBE.i32 = new Int32Array (UTIF._binBE.ui8.buffer);\nUTIF._binBE.ui32 = new Uint32Array (UTIF._binBE.ui8.buffer);\nUTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer);\nUTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer);\n\nUTIF._binLE =\n{\n\tnextZero : UTIF._binBE.nextZero,\n\treadUshort : function(buff, p) { return (buff[p+1]<< 8) | buff[p]; },\n\treadShort : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; return UTIF._binBE. i16[0]; },\n\treadInt : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; a[2]=buff[p+2]; a[3]=buff[p+3]; return UTIF._binBE. i32[0]; },\n\treadUint : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; a[2]=buff[p+2]; a[3]=buff[p+3]; return UTIF._binBE.ui32[0]; },\n\treadASCII : UTIF._binBE.readASCII,\n\treadFloat : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<4;i++) a[i]=buff[p+ i]; return UTIF._binBE.fl32[0]; },\n\treadDouble : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<8;i++) a[i]=buff[p+ i]; return UTIF._binBE.fl64[0]; }\n}\nUTIF._copyTile = function(tb, tw, th, b, w, h, xoff, yoff)\n{\n\t//log(\"copyTile\", tw, th, w, h, xoff, yoff);\n\tvar xlim = Math.min(tw, w-xoff);\n\tvar ylim = Math.min(th, h-yoff);\n\tfor(var y=0; y<ylim; y++)\n\t{\n\t\tvar tof = (yoff+y)*w+xoff;\n\t\tvar sof = y*tw;\n\t\tfor(var x=0; x<xlim; x++) b[tof+x] = tb[sof+x];\n\t}\n}\n\nUTIF.LosslessJpegDecode = (function(){function t(Z){this.w=Z;this.N=0;this._=0;this.G=0}t.prototype={t:function(Z){this.N=Math.max(0,Math.min(this.w.length,Z))},i:function(){return this.w[this.N++]},l:function(){var Z=this.N;\nthis.N+=2;return this.w[Z]<<8|this.w[Z+1]},J:function(){if(this._==0){this.G=this.w[this.N];this.N+=1+(this.G+1>>>8);\nthis._=8}return this.G>>>--this._&1},Z:function(Z){var X=this._,s=this.G,E=Math.min(X,Z);Z-=E;X-=E;var Y=s>>>X&(1<<E)-1;\nwhile(Z>0){s=this.w[this.N];this.N+=1+(s+1>>>8);E=Math.min(8,Z);Z-=E;X=8-E;Y<<=E;Y|=s>>>X&(1<<E)-1}this._=X;\nthis.G=s;return Y}};var i={};i.X=function(){return[0,0,-1]};i.s=function(Z,X,s){Z[i.Y(Z,0,s)+2]=X};i.Y=function(Z,X,s){if(Z[X+2]!=-1)return 0;\nif(s==0)return X;for(var E=0;E<2;E++){if(Z[X+E]==0){Z[X+E]=Z.length;Z.push(0);Z.push(0);Z.push(-1)}var Y=i.Y(Z,Z[X+E],s-1);\nif(Y!=0)return Y}return 0};i.B=function(Z,X){var s=0,E=0,Y=0,B=X._,$=X.G,e=X.N;while(!0){if(B==0){$=X.w[e];\ne+=1+($+1>>>8);B=8}Y=$>>>--B&1;s=Z[s+Y];E=Z[s+2];if(E!=-1){X._=B;X.G=$;X.N=e;return E}}return-1};function l(Z){this.z=new t(Z);\nthis.D(this.z)}l.prototype={$:function(Z,X){this.Q=Z.i();this.F=Z.l();this.o=Z.l();var s=this.O=Z.i();\nthis.L=[];for(var E=0;E<s;E++){var Y=Z.i(),B=Z.i();Z.i();this.L[Y]=E}Z.t(Z.N+X-(6+s*3))},e:function(){var Z=0,X=this.z.i();\nif(this.H==null)this.H={};var s=this.H[X]=i.X(),E=[];for(var Y=0;Y<16;Y++){E[Y]=this.z.i();Z+=E[Y]}for(var Y=0;\nY<16;Y++)for(var B=0;B<E[Y];B++)i.s(s,this.z.i(),Y+1);return Z+17},W:function(Z){while(Z>0)Z-=this.e()},p:function(Z,X){var s=Z.i();\nif(!this.U){this.U=[]}for(var E=0;E<s;E++){var Y=Z.i(),B=Z.i();this.U[this.L[Y]]=this.H[B>>>4]}this.g=Z.i();\nZ.t(Z.N+X-(2+s*2))},D:function(Z){var X=!1,s=Z.l();if(s!==l.q)return;do{var s=Z.l(),E=Z.l()-2;switch(s){case l.m:this.$(Z,E);\nbreak;case l.K:this.W(E);break;case l.V:this.p(Z,E);X=!0;break;default:Z.t(Z.N+E);break}}while(!X)},I:function(Z,X){var s=i.B(X,Z);\nif(s==16)return-32768;var E=Z.Z(s);if((E&1<<s-1)==0)E-=(1<<s)-1;return E},B:function(Z,X){var s=this.z,E=this.O,Y=this.F,B=this.I,$=this.g,e=this.o*E,W=this.U;\nfor(var p=0;p<E;p++){Z[p]=B(s,W[p])+(1<<this.Q-1)}for(var D=E;D<e;D+=E){for(var p=0;p<E;p++)Z[D+p]=B(s,W[p])+Z[D+p-E]}var I=X;\nfor(var m=1;m<Y;m++){for(var p=0;p<E;p++){Z[I+p]=B(s,W[p])+Z[I+p-X]}for(var D=E;D<e;D+=E){for(var p=0;\np<E;p++){var K=I+D+p,q=Z[K-E];if($==6)q=Z[K-X]+(q-Z[K-E-X]>>>1);Z[K]=q+B(s,W[p])}}I+=X}}};l.m=65475;\nl.K=65476;l.q=65496;l.V=65498;function J(Z){var X=new l(Z),s=X.Q>8?Uint16Array:Uint8Array,E=new s(X.o*X.F*X.O),Y=X.o*X.O;\nX.B(E,Y);return E}return J}())\n\n\n\n\n})(UTIF, pako);\n})();","export default \"data:image/png;base64,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\"","export default {\n /**\n * 转化拿到Excel单元格输入的日期值\n * @param {*} numb 值\n * @param {*} format 年月日分隔符\n */\n formatDateOfExcelIn: function (numb, format = '/') {\n if (typeof numb !== 'number') {\n return numb;\n }\n //参数numb是间隔天数,format是自定义的日期分隔符\n //打印出来的结果是44563,表示1900年1月1日到当前日期的天数\n const getDay = numb - 1;\n const t = Math.round((getDay - Math.floor(getDay)) * 24 * 60 * 60);\n //当导入的excel日期中包含了时分秒,t则表示小数点后面的时间\n const time = new Date(1900, 0, getDay, 0, 0, t);\n //getDay是从1900开始计算的,因此new Date()的第一个参数是1900\n const year = time.getFullYear();\n const month = time.getMonth() + 1;\n const date = time.getDate();\n const hours = time.getHours();\n const minutes = time.getMinutes();\n const seconds = time.getSeconds();\n return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date) + ' ' + (hours < 10 ? '0' + hours : hours) + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);\n },\n /**\n * 测试log函数\n * @param {*} val log内容\n */\n logFun: function (val) {\n console.log('log inner is:', val);\n },\n /**\n * 根据传入宽度字符串判断范围返回合适值\n * @param {string} width 数字型宽度字符串\n * @returns 返回最终宽度字符串\n */\n getTableColumnMinWidth: function (width = '120') {\n let wid = width;\n if (width.includes('px')) {\n wid = width.replace('px', '');\n }\n if (Number(wid) <= 130) {\n return '120';\n }\n if (Number(wid) > 130 && Number(wid) < 300) {\n return wid;\n }\n return '300';\n },\n\n /**\n * 动态展示表头宽度\n * @param {*} param0 \n * @returns \n */\n tableHeadLength: function ({ column }) {\n try {\n let l = column.label?.length;\n let f = 16;\n let widthNum = f * (l + 2); //加上一个文字长度\n if (widthNum <= 130) {\n column.minWidth = 130;\n } else if (widthNum > 130 && widthNum < 300) {\n column.minWidth = widthNum;\n } else {\n column.minWidth = 300;\n }\n return ('div', { class: 'table-head', style: { width: '100%' } }, [column.label]);\n } catch (error) {\n console.log('error:', error);\n }\n },\n /**\n * 判断输入内容是否是url\n * @param {*} url 输入值\n * @returns \n */\n isValidURL: function (url) {\n try {\n // 使用URL对象进行初步校验\n new URL(url);\n return true;\n } catch (_) {\n // 使用正则表达式进行进一步校验\n const urlPattern = /^(https?:\\/\\/)?(www\\.)?[a-zA-Z0-9-.]+\\.[a-zA-Z]{2,6}(\\/[a-zA-Z0-9-._~:/?#@!$&'()*+,;=]*)?$/;\n if (urlPattern.test(url)) {\n return true;\n }\n return false; \n }\n },\n};","<template>\n <el-form ref=\"cfForm\" :model=\"formData\" label-width=\"auto\" data-test-id=\"EL-FORM-jZ9dHq\">\n <el-row :gutter=\"2\" data-test-id=\"EL-ROW-lQgBOo\">\n <el-col v-for=\"(item, index) in formData\" :key=\"item[itemId]\" :span=\"12\" data-test-id=\"EL-COL-d4PUSu\">\n <el-form-item :prop=\"String(item[itemId])\" :rules=\"getRules(item)\" data-test-id=\"EL-FORM-ITEM-i1hi6i\">\n <template #label>\n <el-tooltip\n v-if=\"item[itemName].length > 10\"\n effect=\"dark\"\n :content=\"item[itemName]\"\n placement=\"top\"\n data-test-id=\"EL-TOOLTIP-TA4KAI\"\n >\n <template #default>\n <span v-if=\"item[itemRequired]\" data-test-id=\"SPAN-UrjBo1\">\n <span style=\"color: #f56c6c\" data-test-id=\"SPAN-Zaz6CH\">* </span>{{ `${item[itemName].slice(0, 10)}...` }}\n </span>\n <span v-else data-test-id=\"SPAN-1IdLTh\">{{ `${item[itemName].slice(0, 10)}...` }}</span>\n </template>\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-NCZh44\">\n <span v-if=\"item[itemRequired]\" style=\"color: #f56c6c\" data-test-id=\"SPAN-2RpVTi\">* </span>{{ item[itemName] }}\n </span>\n </template>\n <!-- 文本 -->\n <el-input\n v-if=\"getType(item[itemTypeId]) === 'text'\"\n v-model=\"item.value\"\n :placeholder=\"item[itemPlaceholder]\"\n maxlength=\"50\"\n clearable\n show-word-limit\n data-test-id=\"EL-INPUT-L0n8nA\"\n />\n <!-- 数字 -->\n <el-input\n v-if=\"getType(item[itemTypeId]) === 'number'\"\n v-model=\"item.value\"\n :placeholder=\"item[itemPlaceholder]\"\n maxlength=\"15\"\n type=\"number\"\n clearable\n show-word-limit\n data-test-id=\"EL-INPUT-Wbo4dz\"\n />\n <!-- 日期 -->\n <el-date-picker\n v-if=\"getType(item[itemTypeId]) === 'date'\"\n v-model=\"item.value\"\n :placeholder=\"item[itemPlaceholder]\"\n type=\"datetime\"\n clearable\n show-word-limit\n style=\"width: 100%\"\n data-test-id=\"EL-DATE-PICKER-ejAaut\"\n />\n <!-- 日期区间 -->\n <el-date-picker\n v-if=\"getType(item[itemTypeId]) === 'dateRange'\"\n v-model=\"item.value\"\n :placeholder=\"item[itemPlaceholder]\"\n type=\"datetimerange\"\n clearable\n show-word-limit\n style=\"width: 100%\"\n data-test-id=\"EL-DATE-PICKER-BkipO6\"\n />\n <!-- 附件 -->\n <div v-if=\"getType(item[itemTypeId]) === 'attachment'\" style=\"width: 100%\" data-test-id=\"DIV-2LIX7Q\">\n <el-upload\n ref=\"uploadRef\"\n v-model=\"item.value\"\n class=\"upload-attachment\"\n clearable\n drag\n :on-change=\"\n (file) => {\n uploadHandleChange(file, item, index);\n }\n \"\n :auto-upload=\"false\"\n :show-file-list=\"false\"\n data-test-id=\"EL-UPLOAD-iU6GgZ\"\n >\n <el-icon class=\"el-icon--upload\" data-test-id=\"EL-ICON-9ilcRv\"><upload-filled data-test-id=\"UPLOAD-FILLED-8yr5Kb\"/></el-icon>\n <div class=\"el-upload__text\" data-test-id=\"DIV-IH9kdS\">\n {{ t('dragFileHereOr') }} <em data-test-id=\"EM-V4VckY\">{{ t('clickToUpload') }}</em>\n </div>\n </el-upload>\n <div style=\"width: 100%\" data-test-id=\"DIV-rymHq2\">\n <div v-for=\"ite in item.value\" :key=\"ite.uid\" class=\"file-list-show-text\" data-test-id=\"DIV-PfaQyD\">\n <span class=\"mdi mdi-file-document-outline mr-2\" data-test-id=\"SPAN-1mhaGF\" />\n <el-tooltip effect=\"dark\" :content=\"ite.name\" placement=\"bottom\" data-test-id=\"EL-TOOLTIP-Q8lu96\">\n <span class=\"ellipsis-single-line file-list-show-text-name\" data-test-id=\"SPAN-r1WlCy\">{{\n ite.name\n }}</span>\n </el-tooltip>\n <span\n v-if=\"isShowViewIconFun(ite)\"\n class=\"mdi mdi-eye eye-icon\"\n data-test-id=\"SPAN-tWUp2N\"\n @click=\"viewFileItem(ite, item)\"\n />\n <span\n v-if=\"!isShowViewIconFun(ite)\"\n class=\"mdi mdi-arrow-down down-icon\"\n data-test-id=\"SPAN-EzmM2u\"\n @click=\"dowFileItem(ite, item)\"\n />\n <span class=\"mdi mdi-close close-icon\" data-test-id=\"SPAN-LL3IMZ\" @click=\"clearFileItem(ite, index)\" />\n </div>\n </div>\n </div>\n <!-- 超链接 -->\n <el-input\n v-if=\"getType(item[itemTypeId]) === 'hyperLink'\"\n v-model=\"item.value\"\n :placeholder=\"item[itemPlaceholder]\"\n maxlength=\"200\"\n clearable\n show-word-limit\n data-test-id=\"EL-INPUT-tmMsGL\"\n />\n <!-- 单选框 -->\n <el-select\n v-if=\"getType(item[itemTypeId]) === 'radio'\"\n v-model=\"item.value\"\n :placeholder=\"item[itemPlaceholder]\"\n clearable\n show-word-limit\n data-test-id=\"EL-SELECT-GHaf8A\"\n >\n <el-option\n v-for=\"(ite, ind) in getArrOfJSONStr(item.fieldSelectOptions)\"\n :key=\"ind\"\n :label=\"ite\"\n :value=\"ite\"\n data-test-id=\"EL-OPTION-BzXbEo\"\n />\n </el-select>\n <!-- 多选框 -->\n <el-select\n v-if=\"getType(item[itemTypeId]) === 'checkBox'\"\n v-model=\"item.value\"\n multiple\n :placeholder=\"item[itemPlaceholder]\"\n clearable\n collapse-tags\n collapse-tags-tooltip\n :max-collapse-tags=\"2\"\n show-word-limit\n data-test-id=\"EL-SELECT-r8og6F\"\n >\n <el-option\n v-for=\"(ite, ind) in getArrOfJSONStr(item.fieldSelectOptions)\"\n :key=\"ind\"\n :label=\"ite\"\n :value=\"ite\"\n data-test-id=\"EL-OPTION-makEqN\"\n />\n </el-select>\n </el-form-item>\n </el-col>\n </el-row>\n <el-image-viewer\n v-if=\"showImage\"\n hide-on-click-modal\n :url-list=\"[imageSrc]\"\n data-test-id=\"EL-IMAGE-VIEWER-ctuWOy\"\n @close=\"\n () => {\n showImage = false;\n }\n \"\n />\n </el-form>\n</template>\n\n<script>\nimport { ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport dayjs from 'dayjs';\nimport { UploadFilled } from '@element-plus/icons-vue';\nimport apiFunction from '@/scriptFiles/checkApiErrorMechanism.js';\nimport { ElLoading, ElMessage } from 'element-plus';\nimport toolFun from '@/utils/toolFun.js';\n\nexport default {\n props: {\n isEdit: {\n type: Boolean,\n default: false,\n },\n items: {\n type: Array,\n default: () => [],\n },\n cols: {\n type: Number,\n default: 4,\n },\n outlined: {\n type: Boolean,\n default: false,\n },\n itemId: {\n type: String,\n default: 'customFieldId',\n },\n itemName: {\n type: String,\n default: 'customFieldName',\n },\n itemTypeId: {\n type: String,\n default: 'fieldTypeId',\n },\n itemPlaceholder: {\n type: String,\n default: 'placeHolder',\n },\n itemEnable: {\n type: String,\n default: 'isEnable',\n },\n itemRequired: {\n type: String,\n default: 'fieldProperty',\n },\n },\n components: {\n UploadFilled,\n },\n setup(props, { expose }) {\n const { t } = useI18n();\n const cfForm = ref(null);\n const formData = ref([]);\n const uploadFileMaxSize = 20 * 1024 * 1024; // 设置最大文件大小为20MB\n const uploadRef = ref(null);\n const customFieldIdConfig = [\n {\n id: 1,\n type: 'text',\n },\n {\n id: 2,\n type: 'number',\n },\n {\n id: 3,\n type: 'date',\n },\n {\n id: 4,\n type: 'dateRange',\n },\n {\n id: 5,\n type: 'attachment',\n },\n {\n id: 6,\n type: 'hyperLink',\n },\n {\n id: 7,\n type: 'radio',\n },\n {\n id: 8,\n type: 'checkBox',\n },\n ];\n /**\n * loading加载框方法\n * @param {boolean} type 类型:true->打开,false->关闭\n */\n function loadingFun(type = false) {\n const loading = ElLoading.service({\n lock: true,\n text: '',\n background: 'rgba(255, 255, 255, 0.7)',\n });\n if (!type) {\n loading.close();\n }\n }\n function getType(id) {\n return customFieldIdConfig.find((item) => item.id === id)?.type;\n }\n function getRules(item) {\n return [\n {\n validator: (rule, val, callback) => {\n const v = item.value;\n if (typeof v === 'string' && v !== v.trim()) {\n callback(t('haveSpace'));\n }\n if (getType(item[props.itemTypeId]) === 'text' && v !== null && v !== '' && v?.length > 50) {\n callback(t('strLengthLimit50'));\n }\n if (item[props.itemRequired] && getType(item[props.itemTypeId]) !== 'attachment') {\n if (!v && (v !== 0 || v?.length === 0)) {\n callback(t('requiredField'));\n }\n if (Array.isArray(v) && Object.keys(v)?.length === 0) {\n callback(t('requiredField'));\n }\n }\n if (getType(item[props.itemTypeId]) === 'number') {\n if (v !== null && v !== '' && v?.toString()?.length > 15) {\n callback(t('strLengthLimit15'));\n }\n if (!/^-?\\d+(\\.\\d+)?$/.test(v) && v !== '' && v !== null) {\n callback(t('mustNumber'));\n }\n }\n if (v !== null && v !== '' && getType(item[props.itemTypeId]) === 'hyperLink') {\n if (v?.length > 200) {\n callback(t('strLengthLimit200'));\n }\n // 使用正则表达式来校验URL\n if (!toolFun.isValidURL(v)) {\n callback(t('pleaseEnterQualifiedHyperlink'));\n }\n }\n callback();\n },\n trigger: ['blur', 'change'],\n },\n ];\n }\n function getItemValue(item) {\n let returnValue = null;\n if (!item.value && item.value !== 0) {\n return returnValue;\n }\n switch (getType(item[props.itemTypeId])) {\n case 'date':\n returnValue = dayjs(JSON.parse(item.value)).format('YYYY-MM-DD HH:mm:ss');\n break;\n case 'dateRange':\n returnValue = JSON.parse(item.value);\n break;\n case 'attachment':\n if (props.isEdit) {\n returnValue = item.fileData?.map((ite) => ({\n ...ite,\n name: ite.fileName,\n }));\n } else {\n returnValue = item.value;\n }\n break;\n case 'checkBox':\n returnValue = JSON.parse(item.value);\n break;\n default:\n returnValue = item.value || null;\n break;\n }\n return returnValue;\n }\n function formatItemValue(item) {\n let returnValue = '';\n switch (getType(item[props.itemTypeId])) {\n case 'date':\n if (item.value) {\n returnValue = Number(dayjs(item.value).format('x'));\n } else {\n returnValue = '';\n }\n break;\n case 'dateRange':\n if (item.value?.length) {\n returnValue = JSON.stringify([\n Number(dayjs(item.value[0]).format('x')),\n Number(dayjs(item.value[1]).format('x')),\n ]);\n } else {\n returnValue = '';\n }\n break;\n case 'attachment':\n if (item.value?.length) {\n returnValue = JSON.stringify(item.value);\n } else {\n returnValue = '';\n }\n break;\n case 'checkBox':\n if (item.value?.length) {\n returnValue = JSON.stringify(item.value);\n } else {\n returnValue = '';\n }\n break;\n default:\n returnValue = item.value || '';\n break;\n }\n return returnValue;\n }\n /**\n * 检验附件必填方法\n */\n function inspectionAttachmentsAreRequired() {\n const attachmentArr = formData.value.filter((item) => item.fieldTypeId === 5);\n if (attachmentArr.length) {\n let flag = false;\n for (let index = 0; index < attachmentArr.length; index += 1) {\n const ite = attachmentArr[index];\n if (ite.fieldProperty) {\n if (!ite.value) {\n flag = true;\n break;\n }\n if (!ite.value?.length) {\n flag = true;\n break;\n }\n }\n }\n if (flag) {\n return false;\n }\n }\n return true;\n }\n async function getData() {\n let cfFormValidate = false;\n const flag = inspectionAttachmentsAreRequired();\n await cfForm.value?.validate((valid) => {\n if (valid) {\n cfFormValidate = true;\n if (!flag) {\n cfFormValidate = false;\n ElMessage.error(t('pleaseCheckUploaded'));\n }\n } else {\n cfFormValidate = false;\n }\n });\n if (cfFormValidate) {\n return formData.value.map((item) => ({\n ...item,\n value: formatItemValue(item),\n }));\n }\n return false;\n }\n function resetFields() {\n cfForm.value.resetFields();\n }\n expose({ getData, resetFields });\n watch(\n () => props.items,\n () => {\n formData.value = JSON.parse(\n JSON.stringify(\n props.items.map((item) => ({\n ...item,\n value: getItemValue(item),\n })),\n ),\n );\n },\n {\n immediate: true,\n deep: true,\n },\n );\n /**\n * JSON字符串序列话方法\n * @param {string} JSONStr JSON字符串\n */\n function getArrOfJSONStr(JSONStr) {\n if (JSONStr) {\n return JSON.parse(JSONStr);\n }\n return [];\n }\n\n /**\n * 附件上传接口\n * @param {file} uploadFile 当前上传的附件\n * @param {object} customItem 自定义字段对象\n * @param {number} index 自定义字段索引\n */\n async function uploadHandleChange(uploadFile, customItem, index) {\n loadingFun(true);\n if (formData.value[index].value?.length === 5) {\n ElMessage.error(t('numberUploadsCannotExceed5'));\n loadingFun(false);\n return;\n }\n // 在这里可以进行文件验证\n const isLt20MB = uploadFile.size < uploadFileMaxSize;\n if (!isLt20MB) {\n ElMessage.error(t('uploadFileSize20MB'));\n loadingFun(false);\n } else {\n const params = {\n DocCode: 'doc_1',\n DocCustomId: customItem.customFieldId,\n file: {\n file: uploadFile.raw,\n },\n };\n await apiFunction\n .docCustomUpload(params)\n .then((res) => {\n loadingFun(false);\n if (res.data.code === 0) {\n ElMessage.success(t('uploadSuccess'));\n if (!formData.value[index].value) {\n formData.value[index].value = [];\n }\n formData.value[index].value.push({\n ...uploadFile,\n fileId: res.data.content.fileID,\n });\n } else {\n ElMessage.error(t(res.data.message));\n }\n console.log('formData.value:', formData.value);\n })\n .catch(() => {\n loadingFun(false);\n ElMessage.error(t('apiError'));\n });\n }\n loadingFun(false);\n }\n /**\n * 下载附件序列化方法\n * @param {string} fileName 文件名\n * @param {object} res 请求响应对象\n */\n function fileDownSerialize(fileName, res) {\n // 创建一个 Blob URL 指向这个 Blob 对象\n const url = window.URL.createObjectURL(new Blob([res.data], { type: res.headers['content-type'] }));\n\n // 创建一个临时的 <a> 元素\n const link = document.createElement('a');\n link.href = url;\n\n // 设置下载的文件名(可选,但推荐)\n // 如果服务器没有在响应头中提供 Content-Disposition,你需要手动设置文件名\n link.setAttribute('download', fileName);\n\n // 将 <a> 元素添加到文档中(不需要真正添加到可视区域)\n document.body.appendChild(link);\n\n // 触发点击事件以下载文件\n link.click();\n\n // 释放 Blob URL(可选,但推荐)\n // 注意:这应该在确保文件下载已经开始之后进行,否则在某些浏览器中可能会导致下载失败\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(link);\n }, 0);\n }\n // 控制是否打开预览图片插件\n const showImage = ref(false);\n // 预览图片地址\n const imageSrc = ref('');\n /**\n * 图片预览方法\n * @param {object} item 附件对象\n * @param {object} outItem 自定义字段对象\n */\n async function viewFileItem(item, outItem) {\n const data = {\n docCode: 'doc_1',\n docCustomId: outItem.docCustomId,\n fileId: item.fileId,\n };\n const fileExtension = item.name?.toLowerCase().split('.').pop();\n await apiFunction\n .docViewFile(data)\n .then((res) => {\n loadingFun(false);\n if (res.data.code === 0) {\n imageSrc.value = `data:image/${fileExtension};base64,${res.data.content.fileContent}`;\n showImage.value = true;\n } else {\n ElMessage.error(t('apiError'));\n }\n })\n .catch(() => {\n loadingFun(false);\n ElMessage.error(t('apiError'));\n });\n }\n /**\n * 附件下载方法\n * @param {object} item 附件对象\n * @param {object} outItem 自定义字段对象\n */\n async function dowFileItem(item, outItem) {\n loadingFun(true);\n const fileName = item.name;\n if (item) {\n const data = {\n docCode: 'doc_1',\n docCustomId: outItem.docCustomId,\n fileId: item.fileId,\n };\n await apiFunction\n .docDownloadFile(data)\n .then((res) => {\n loadingFun(false);\n if (res.status === 200) {\n fileDownSerialize(fileName, res);\n ElMessage.success(t('downloadSuccessful'));\n } else {\n ElMessage.error(t('apiError'));\n }\n })\n .catch(() => {\n loadingFun(false);\n ElMessage.error(t('apiError'));\n });\n }\n loadingFun(false);\n }\n /**\n * 删除附件方法\n * @param {object} item 附件对象\n * @param {number} index 自定义字段索引\n */\n function clearFileItem(item, index) {\n formData.value[index].value = formData.value[index].value.filter((ite) => ite.fileId !== item.fileId);\n }\n /**\n * 附件是否是图片标识方法\n * @param {object} item 附件对象\n */\n function isShowViewIconFun(item) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'jfif'];\n const fileExtension = item.name?.toLowerCase().split('.').pop();\n return imageExtensions.includes(fileExtension);\n }\n return {\n t,\n formData,\n cfForm,\n getType,\n getRules,\n getArrOfJSONStr,\n uploadHandleChange,\n uploadRef,\n clearFileItem,\n dowFileItem,\n viewFileItem,\n isShowViewIconFun,\n showImage,\n imageSrc,\n };\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n::v-deep.upload-attachment {\n .el-upload.el-upload--text.is-drag {\n padding: 0;\n width: 10rem;\n height: 10rem;\n .el-upload-dragger {\n padding: 0;\n width: 10rem;\n height: 10rem;\n .el-icon--upload {\n width: 2rem;\n margin: 0;\n line-height: 2rem;\n }\n .el-upload__text {\n line-height: 2rem;\n }\n }\n }\n}\n.file-list-show-text {\n position: relative;\n color: rgb(96, 98, 102);\n padding-left: 5px;\n margin-bottom: 5px;\n box-sizing: border-box;\n .file-list-show-text-name {\n display: inline-block;\n vertical-align: top;\n width: 82%;\n }\n}\n.file-list-show-text:hover {\n background-color: rgb(245, 247, 250);\n border-radius: 4px;\n .eye-icon,\n .down-icon,\n .close-icon {\n opacity: 1;\n }\n}\n.eye-icon,\n.close-icon,\n.down-icon {\n position: absolute;\n cursor: pointer;\n right: 0;\n margin: 0 0 0 5px;\n opacity: 0;\n}\n.eye-icon {\n margin-right: 5px;\n right: 20px;\n}\n.close-icon {\n margin-right: 5px;\n}\n.down-icon {\n right: 20px;\n}\n.eye-icon:hover,\n.down-icon:hover,\n.close-icon:hover {\n color: rgb(64, 158, 255);\n}\n.ellipsis-single-line {\n white-space: nowrap; /* 禁止换行 */\n overflow: hidden; /* 隐藏超出内容 */\n text-overflow: ellipsis; /* 显示省略号 */\n}\n</style>\n","<template>\n <el-dialog\n v-model=\"showDialog\"\n class=\"unitsDialog\"\n width=\"70rem\"\n align-center\n center\n custom-class=\"demo\"\n :close-on-click-modal=\"false\"\n :close-on-press-escape=\"false\"\n :modal-append-to-body=\"true\"\n :append-to-body=\"true\"\n :show-close=\"false\"\n data-test-id=\"EL-DIALOG-uafI2m\"\n >\n <!-- 新增单位 -->\n <template #title>\n <v-icon class=\"mdi mdi-format-list-bulleted-type mr-1\" data-test-id=\"V-ICON-4yLtOg\" />\n <span style=\"font-size: 18px\" data-test-id=\"SPAN-Wc16HW\">{{ t('unitSetting') }}</span>\n </template>\n <div style=\"max-height: calc(70vh - 30px); overflow-y: auto\" data-test-id=\"DIV-AMVwcI\">\n <el-card shadow=\"never\" class=\"card-body\" data-test-id=\"EL-CARD-O83t0p\">\n <template #header>\n <div class=\"card-header\" data-test-id=\"DIV-W72auT\">\n <span data-test-id=\"SPAN-Y71v6q\">{{ t('Syn_unity') }}</span>\n </div>\n </template>\n <el-form ref=\"form\" data-test-id=\"EL-FORM-OES00o\">\n <el-row data-test-id=\"EL-ROW-Dncapw\">\n <el-col :span=\"18\" data-test-id=\"EL-COL-ZISn22\">\n <el-form-item :label=\"t('Syn_unity')\" required data-test-id=\"EL-FORM-ITEM-HkWHpi\">\n <el-input\n v-model=\"newunits\"\n :placeholder=\"t('pleaseEnter')\"\n maxlength=\"20\"\n show-word-limit\n data-test-id=\"EL-INPUT-TU67uZ\"\n />\n </el-form-item>\n </el-col>\n <el-col :span=\"6\" data-test-id=\"EL-COL-qcIWAY\">\n <el-button\n type=\"primary\"\n style=\"margin-left: 1rem\"\n data-test-id=\"EL-BUTTON-ycoQjI\"\n @click=\"addMaterialType\"\n >\n <v-icon class=\"mdi mdi-plus\" style=\"margin-right: 0.5rem\" data-test-id=\"V-ICON-WqDSqu\" />\n {{ t('add') }}\n </el-button>\n </el-col>\n </el-row>\n </el-form>\n </el-card>\n <el-card shadow=\"never\" class=\"card-body\" data-test-id=\"EL-CARD-2dv8J0\">\n <template #header>\n <div class=\"card-header\" data-test-id=\"DIV-esmbBy\">\n <span data-test-id=\"SPAN-Jq6HZi\">{{ t('unitList') }}</span>\n </div>\n </template>\n <el-row data-test-id=\"EL-ROW-YSUqHv\">\n <el-col :span=\"24\" data-test-id=\"EL-COL-G2myBj\">\n <el-table\n :data=\"tableData\"\n border\n fit\n style=\"width: 100%\"\n header-row-class-name=\"tableHeader\"\n header-cell-class-name=\"tableHeaderCell\"\n data-test-id=\"EL-TABLE-Uox6EP\"\n >\n <el-table-column label=\"#\" type=\"index\" align=\"center\" data-test-id=\"EL-TABLE-COLUMN-LlgzpP\">\n <template #default=\"scope\">\n <span data-test-id=\"SPAN-FacEKC\">{{ calcIndex(scope.$index) }}</span>\n </template>\n </el-table-column>\n <el-table-column\n :label=\"t('unitName')\"\n align=\"center\"\n prop=\"materialUnitName\"\n data-test-id=\"EL-TABLE-COLUMN-ALn4ER\"\n />\n <el-table-column\n :label=\"t('actions')\"\n align=\"center\"\n scoped-slots=\"{ row }\"\n data-test-id=\"EL-TABLE-COLUMN-YgZFhd\"\n >\n <template #default=\"scope\">\n <el-tooltip\n :content=\"t('delete')\"\n placement=\"top\"\n :enterable=\"false\"\n data-test-id=\"EL-TOOLTIP-wjutnX\"\n >\n <el-button link data-test-id=\"EL-BUTTON-lOO7rg\" @click=\"deleteRow(scope.row)\">\n <v-icon class=\"mdi mdi-delete\" data-test-id=\"V-ICON-ltewR4\" />\n </el-button>\n </el-tooltip>\n </template>\n </el-table-column>\n </el-table>\n </el-col>\n <el-col :span=\"24\" data-test-id=\"EL-COL-ZdB7aa\">\n <pagination\n style=\"padding-top: 1.25rem\"\n :total=\"page.total\"\n :current-page=\"page.currentPage\"\n :page-size=\"page.pageSize\"\n :current-count=\"tableData.length\"\n data-test-id=\"PAGINATION-IcpWsn\"\n @changePage=\"changePage\"\n >\n </pagination>\n </el-col>\n </el-row>\n </el-card>\n </div>\n <template #footer>\n <el-button data-test-id=\"EL-BUTTON-uS3DR5\" @click=\"closePage\">{{ t('Syn_cancel') }}</el-button>\n </template>\n </el-dialog>\n</template>\n\n<script setup>\nimport { ref, nextTick } from 'vue';\nimport backendApiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport pagination from '@/components/Pagination.vue';\nimport { useI18n } from 'vue-i18n';\nimport { ElMessage, ElMessageBox, ElLoading } from 'element-plus';\n\nconst { t } = useI18n();\nconst emit = defineEmits(['refreshData']);\nconst tableData = ref([]);\nconst newunits = ref('');\nconst page = ref({\n total: null,\n currentPage: 1,\n pageSize: 20,\n});\nconst loadin = ref(null);\nconst loadingFun = (val) => {\n if (val && !loadin.value) {\n loadin.value = ElLoading.service({\n target: '.unitsDialog',\n lock: true,\n });\n return;\n }\n loadin.value?.close();\n loadin.value = null;\n};\nconst showDialog = ref(false);\nconst queryUnit = async () => {\n try {\n loadingFun(true);\n const queryStartIndex = page.value.currentPage !== 1 ? (page.value.currentPage - 1) * page.value.pageSize : 0;\n const { data } = await backendApiFunction.queryUnit({\n startIndex: queryStartIndex,\n count: page.value.pageSize,\n });\n if (data.code === 0) {\n tableData.value = data.content.data;\n page.value.total = data.content.totalCount;\n loadingFun(false);\n } else {\n loadingFun(false);\n tableData.value = [];\n ElMessage.error(t('requestError'));\n }\n } catch (error) {\n loadingFun(false);\n console.log(error);\n ElMessage.error(t('apiError'));\n }\n};\n// 序号列\nconst calcIndex = (index) => {\n return Number(index) + 1 + Number(page.value.pageSize * (page.value.currentPage - 1));\n};\n// 分页方法\nconst changePage = async (val) => {\n page.value.currentPage = val.page;\n page.value.pageSize = val.size;\n await queryUnit();\n};\n// 新增类型\nconst addMaterialType = async () => {\n try {\n const regex = /^[^@#$%^&*()_+]+$/;\n if (newunits.value === '' || newunits.value === null) {\n ElMessage.error(t('requiredNotEmpty'));\n return;\n }\n if (!regex.test(newunits.value)) {\n ElMessage.error(t('unitVerify'));\n return;\n }\n loadingFun(true);\n const { data } = await backendApiFunction.newUnit({\n materialUnitName: newunits.value,\n });\n loadingFun(false);\n if (data.code === 0) {\n newunits.value = '';\n await queryUnit();\n ElMessage.success(t('addSuccess'));\n return;\n }\n if (data.code === 140021) {\n ElMessage.error(t('unitRepeat'));\n return;\n }\n ElMessage.error(t('failed'));\n } catch (error) {\n console.log(error);\n loadingFun(false);\n ElMessage.error(t('apiError'));\n }\n};\nconst closePage = () => {\n showDialog.value = false;\n emit('refreshData');\n};\nconst deleteRow = (item) => {\n try {\n ElMessageBox.confirm(item.materialTypeName, t('deleteUnit'), {\n confirmButtonText: t('Syn_confirm'),\n cancelButtonText: t('Syn_cancel'),\n confirmButtonClass: 'el-button--warning',\n type: 'warning',\n center: true,\n showClose: false,\n })\n .then(async () => {\n loadingFun(true);\n const { data } = await backendApiFunction.deleteUnit(item.materialUnitId);\n if (data.code === 0) {\n await queryUnit();\n ElMessage.success(t('delSuccess'));\n return;\n }\n if (data.code === 140021) {\n loadingFun(false);\n ElMessage.error(t('unitUsed'));\n return;\n }\n loadingFun(false);\n ElMessage.error(t('delFail'));\n })\n .catch(() => {\n console.log();\n });\n } catch (error) {\n console.log(error);\n ElMessage.error(t('apiError'));\n return;\n }\n};\nconst show = async () => {\n showDialog.value = true;\n nextTick(async () => {\n loadingFun(true);\n await queryUnit();\n });\n};\ndefineExpose({\n show,\n});\n</script>\n\n<style>\n.card-body {\n margin-bottom: 1rem;\n}\n</style>\n<style scoped lang=\"scss\">\n@use '@/scss/base/table.scss';\n</style>\n","<template>\n <el-dialog v-model=\"showDialog\" class=\"global-dialog\" :width=\"`${width}rem`\" center align-center :close-on-click-modal=\"false\" :close-on-press-escape=\"false\" :modal-append-to-body=\"true\" :append-to-body=\"true\" style=\"border-radius: 6px\" :show-close=\"isClose\" data-test-id=\"productionWorkOrder----EL-DIALOG-Uv1Pv8\">\n <template #header>\n {{ title }}\n </template>\n <div style=\"max-height: calc(60vh - 30px); overflow-y: auto\" data-test-id=\"productionWorkOrder----DIV-pnzdy3\">\n <slot/>\n </div>\n\n <div class=\"dialog-footer\" data-test-id=\"productionWorkOrder----DIV-Fjmfci\">\n <slot name=\"footer\"/>\n </div>\n </el-dialog>\n</template>\n\n<script setup>\n import {\n defineProps,\n computed,\n } from 'vue';\n\n const props = defineProps({\n title: String,\n value: Boolean,\n isClose: {\n type: Boolean,\n default: true,\n },\n width: {\n type: Number,\n default: 50,\n },\n });\n const showDialog = computed(() => {\n return props.value;\n });\n</script>\n\n<style scoped lang=\"scss\">\n @use \"@/scss/base/table.scss\";\n .dialog-footer {\n text-align: center;\n margin: 0 auto;\n margin-top: 1rem;\n }\n\n /**修改全局的滚动条*/\n /**滚动条的宽度*/\n ::-webkit-scrollbar {\n width: 8px;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #eaecf1;\n border-radius: 3px;\n }\n /*表格*/\n .el-table__body-wrapper::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n }\n .el-table__body-wrapper::-webkit-scrollbar-thumb {\n background-color: #a1a3a9;\n border-radius: 3px;\n }\n :deep(.el-card__body) {\n padding-bottom: 0px;\n }\n</style>\n","<template>\n <div data-test-id=\"productionWorkOrder----DIV-6ZfTg8\">\n <globalDialog v-model=\"showDialog\" :title=\"t('preview')\" :width=\"60\" data-test-id=\"productionWorkOrder----GLOBALDIALOG-YDu0gA\">\n <pre data-test-id=\"productionWorkOrder----PRE-xTTvC4\">{{ fileData }}</pre>\n </globalDialog>\n </div>\n</template>\n<script setup>\nimport {\n ref, computed, defineProps, defineEmits, watch,\n} from 'vue';\nimport { ElLoading } from 'element-plus';\nimport globalDialog from './dialog.vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps({\n value: Boolean,\n fileObj: Object,\n});\nconst { t } = useI18n();\nconst emit = defineEmits(['input']);\nconst showDialog = computed({\n get() {\n return props.value;\n },\n set(value) {\n emit('input', value);\n },\n});\nconst loadingFun = (val) => {\n let loading = ElLoading.service({\n lock: true,\n text: '',\n background: 'rgba(255, 255, 255, 0.7)',\n });\n if (!val) {\n loading.close();\n }\n};\nconst fileData = ref();\nasync function previewFile(item) {\n loadingFun(true);\n const blob = new Blob([item.fileData.data], { type: item.fileData.data.type });\n if (item.itemFileType === 'pdf') {\n emit('input', false);\n // const tempUrl = URL.createObjectURL(blob);\n const pdfBlob = new Blob([item.fileData.data], { type: 'application/pdf' });\n const tempUrl = URL.createObjectURL(pdfBlob);\n window.open(tempUrl, item.fileName);\n loadingFun(false);\n return;\n }\n const reader = new FileReader();\n if (item.itemFileType === 'nc' || item.itemFileType === 'txt' || item.itemFileType === 'csv' || !item.itemFileType) {\n reader.readAsText(blob, 'UTF-8');\n }\n reader.onload = () => {\n fileData.value = reader.result;\n loadingFun(false);\n };\n reader.onerror = () => {\n console.log(reader.error);\n };\n}\nwatch(\n () => props.value,\n async (val) => {\n if (val) {\n fileData.value = '';\n loadingFun(true);\n previewFile(props.fileObj);\n }\n },\n);\n</script>\n\n<style scoped lang=\"scss\">\n @use \"@/scss/base/table.scss\";\n</style>\n","<template>\n <div class=\"batch-uploader\" data-test-id=\"productionWorkOrder----DIV-QWStxv\">\n <!-- 上传区域(支持拖放和点击选择) -->\n <el-upload :file-list=\"selectedFiles\" class=\"upload-area\" action :multiple=\"true\" :limit=\"remainingQuota\" :on-exceed=\"handleExceed\" :auto-upload=\"false\" :show-file-list=\"false\" list-type=\"text\" drag :on-change=\"materialFileUploadHandleChange\" data-test-id=\"productionWorkOrder----EL-UPLOAD-SUsSpF\" @click=\"handleUploadClick\" @dragover=\"handleDragOver\">\n <!-- 拖放区域提示 -->\n <el-icon class=\"el-icon--upload\" data-test-id=\"productionWorkOrder----EL-ICON-4lc6KX\"><upload-filled data-test-id=\"productionWorkOrder----UPLOAD-FILLED-NcM72a\"/></el-icon>\n <div class=\"el-upload__text\" data-test-id=\"productionWorkOrder----DIV-3ZbJc5\">\n {{ t('dragFileHereOr') }} <em data-test-id=\"productionWorkOrder----EM-Trfnqw\">{{ t('clickToUpload') }}</em>\n </div>\n </el-upload>\n\n <!-- 已选文件列表 -->\n <div v-if=\"materialFileUploadValue.length\" style=\"width: 100%\" data-test-id=\"productionWorkOrder----DIV-li2Xjg\">\n <div v-for=\"(ite, ind) in materialFileUploadValue\" :key=\"ite.uid\" class=\"file-list-show-text\" :data-test-id=\"`productionWorkOrder----DIV-QKejnN-${ind}`\">\n <span class=\"mdi mdi-file-document-outline mr-2\" :data-test-id=\"`productionWorkOrder----SPAN-0IlaE2-${ind}`\"/>\n <el-tooltip effect=\"dark\" :content=\"ite.fileName\" placement=\"bottom\" :data-test-id=\"`productionWorkOrder----EL-TOOLTIP-YWkCx2-${ind}`\">\n <span class=\"ellipsis-single-line file-list-show-text-name\" :data-test-id=\"`productionWorkOrder----SPAN-p9ikcZ-${ind}`\">{{\n ite.fileName\n }}</span>\n </el-tooltip>\n <span v-if=\"isShowViewIconFun(ite.fileName)\" class=\"mdi mdi-eye eye-icon\" :data-test-id=\"`productionWorkOrder----SPAN-m6D5mA-${ind}`\" @click=\"viewFileItem(ite)\"/>\n <span v-if=\"!isShowViewIconFun(ite.fileName)\" class=\"mdi mdi-arrow-down down-icon\" :data-test-id=\"`SPAN-73Grqi-${ind}`\" @click=\"dowFileItem(ite)\"/>\n <span class=\"mdi mdi-close close-icon\" :data-test-id=\"`productionWorkOrder----SPAN-xV24p8-${ind}`\" @click=\"clearFileItem(ite)\"/>\n </div>\n </div>\n <previewView :value=\"showPreview\" :file-obj=\"fileDataObj\" data-test-id=\"productionWorkOrder----PREVIEWVIEW-E4dOmv\" @input=\"showPreview = false\"/>\n <el-image ref=\"imgViewRef\" style=\"width: 100px; height: 100px; display: none\" :src=\"previewUrl\" :zoom-rate=\"1.2\" :preview-teleported=\"true\" :preview-src-list=\"[previewUrl]\" :initial-index=\"1\" fit=\"cover\" data-test-id=\"productionWorkOrder----EL-IMAGE-4p3y27\"/>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue';\nimport { ElMessage, ElLoading, ElMessageBox } from 'element-plus';\nimport { UploadFilled } from '@element-plus/icons-vue';\nimport backendApiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport { useI18n } from 'vue-i18n';\nimport previewView from './previewView.vue';\n\nconst props = defineProps({\n fileList: {\n type: Array,\n default: () => [],\n },\n});\nconst emit = defineEmits(['updateFileList']);\nconst { t } = useI18n();\nconst loading = ref(null);\nconst loadingFun = (val) => {\n if (val && !loading.value) {\n loading.value = ElLoading.service({\n target: '.orderDialog',\n lock: true,\n });\n return;\n }\n loading.value?.close();\n loading.value = null;\n};\n// 存储选中的文件列表\nconst selectedFiles = ref([]);\nlet changeTimer = null; // 防抖计时器\n// 最终上传成功后的文件列表\nconst materialFileUploadValue = ref([]);\nlet isProcessing = false; // 防止重复清空\n// 计算剩余可上传数量\nconst remainingQuota = computed(() => 10 - materialFileUploadValue.value.length);\n\nfunction addPlmFile(file, index) {\n loadingFun(true);\n const fileData = new FormData();\n fileData.append('fileTypeId', file[index].fileType);\n fileData.append('uploader', file[index].uploader);\n fileData.append('file', file[index].file.raw);\n backendApiFunction\n .addPlmFile(fileData)\n .then((ress) => {\n if (ress.data.code === 0) {\n const isHasFile = materialFileUploadValue.value.find(\n (item) => item.fileId === ress.data.content.fileId,\n );\n if (!isHasFile) {\n materialFileUploadValue.value.push({\n ...file[index],\n fileId: ress.data.content.fileId,\n plmFileVersionId: ress.data.content.fileVersionId,\n });\n } else {\n materialFileUploadValue.value = materialFileUploadValue.value.filter(\n (item) => item.fileId !== ress.data.content.fileId,\n );\n materialFileUploadValue.value.push({\n ...isHasFile,\n fileId: ress.data.content.fileId,\n plmFileVersionId: ress.data.content.fileVersionId,\n });\n }\n if (index < file.length - 1) {\n addPlmFile(file, index + 1);\n } else {\n loadingFun(false);\n }\n } else {\n if (index < file.length - 1) {\n addPlmFile(file, index + 1);\n } else {\n loadingFun(false);\n }\n }\n }).catch((err)=>{\n console.log(err);\n ElMessage.error(t('apiError'));\n loadingFun(false);\n });\n}\n\n// 统一提交所有文件\nconst submitAllFiles = async () => {\n if (selectedFiles.value.length) {\n let uploadList = [];\n for (let i = 0; i < selectedFiles.value.length; i += 1) {\n let fileSize = parseInt(selectedFiles.value[i].size / 1024, 10);\n let tenMKB = 1024 * 10;\n const isLt = fileSize < tenMKB; // 小于10MB\n if (!isLt) {\n ElMessage({\n message: t('sizeLimitSingleFileIs10MB'),\n type: 'error',\n });\n loadingFun(false);\n return;\n } else {\n uploadList.push({\n file: selectedFiles.value[i],\n fileType: 6, // 6代表物料类型(文件档案管理页面)\n fileName: selectedFiles.value[i].name,\n fileSize: `${fileSize}(KB)`,\n uploader: localStorage.getItem('synFactoryUserName') || 'admin',\n state: 0,\n });\n }\n }\n if (uploadList.length) {\n loadingFun(true);\n const param = uploadList.map(it=>{\n return {\n fileName: encodeURIComponent(it.fileName),\n fileTypeId: it.fileType,\n };\n });\n backendApiFunction.plmFileIsExistBatch({ files:param }).\n then((res) => {\n loadingFun(false);\n if(res.data.content && res.data.content.length){\n const repeatFiles = res.data.content.filter(it=>it.exists === true);\n if(repeatFiles.length){\n const fileNameList = repeatFiles.map(item=>`【${decodeURIComponent(item.fileName)}】`).join(',');\n ElMessageBox.confirm(`${fileNameList}${t('fileIsExitTooltip')}`, t('fileUpdataTooltip'), {\n confirmButtonText: t('Syn_confirm'),\n cancelButtonText: t('Syn_cancel'),\n confirmButtonClass: 'el-button--warning',\n type: 'warning',\n center: true,\n },\n ).then(() => {\n addPlmFile(uploadList, 0);\n }).catch(()=>{\n const noRepeatFiles = uploadList.filter(it=> !repeatFiles.some(item=>item.fileName===it.fileName));\n if(noRepeatFiles.length) {\n addPlmFile(noRepeatFiles, 0);\n }\n });\n }else{\n addPlmFile(uploadList, 0);\n }\n }\n })\n .catch((err)=>{\n loadingFun(false);\n console.log(err);\n });\n }\n }\n};\n/**\n * 附件上传接口,处理文件变化事件(每个文件选择都会触发)\n */\nasync function materialFileUploadHandleChange(_, fileList) {\n isProcessing = true;\n // 非首次选择:只保留本次新增的文件(清空历史)\n // 从 newFiles 中过滤出本次新增的文件(通过 status 为 'ready' 判断)\n const latestFiles = fileList.filter(f => f.status === 'ready');\n loadingFun(true);\n // 1. 更新文件列表(实时同步)\n selectedFiles.value = [];\n selectedFiles.value = latestFiles;\n // 2. 清除上一次的计时器(防抖核心)\n if (changeTimer) {\n clearTimeout(changeTimer);\n }\n // 3. 延迟 300ms 执行,若 300ms 内无新文件选择,则认为选择结束\n changeTimer = setTimeout(() => {\n isProcessing = false;\n if (materialFileUploadValue.value.length < 10) {\n submitAllFiles(); // 执行选择结束后的逻辑\n } else {\n loadingFun(false);\n ElMessage.error(t('numberUploadsCannotExceed10'));\n }\n }, 300); // 300ms 是经验值,可根据需求调整\n}\n// 处理文件超出限制\nfunction handleExceed() {\n ElMessage.error(t('numberUploadsCannotExceed10'));\n}\n// 点击上传区域时清空之前的文件\nfunction handleUploadClick() {\n if (!isProcessing && selectedFiles.value.length > 0) {\n selectedFiles.value = [];\n }\n}\n\n// 拖拽文件到区域时清空之前的文件\nfunction handleDragOver() {\n if (!isProcessing && selectedFiles.value.length > 0) {\n selectedFiles.value = [];\n }\n}\n\n// 预览按钮是否可以点击\nconst supportPreview = ['nc', 'jpeg', 'gif', 'jpg', 'png', 'pdf', 'csv'];\nfunction isShowViewIconFun(name) {\n // check if name is empty\n if (!name) return false;\n // check if name has no extension\n if (name.indexOf('.') === -1) return true;\n // get file extension\n let extension = name.split('.').pop().toLowerCase();\n // remove (xxx) in extension\n if (extension.indexOf('(') !== -1) {\n extension = extension.split('(')[0].toLowerCase();\n }\n // check if extension is in supportPreview\n return supportPreview.includes(extension);\n}\nconst previewUrl = ref('');\nconst imgViewRef = ref(null);\nconst showPreview = ref(false);\nconst fileDataObj = ref({});\n/**\n * 图片预览方法\n * @param {object} item 附件对象\n */\nasync function viewFileItem(item) {\n loadingFun(true);\n const itemFileType = item.fileName.split('.').at(-1).toLowerCase();\n if (supportPreview.indexOf(itemFileType) === -1 && itemFileType) {\n loadingFun(false);\n return;\n }\n const res = await backendApiFunction.getPlmFilePreviewStream({\n plmFileVersionId: item.plmFileVersionId,\n });\n if (res.status === 200) {\n loadingFun(false);\n const blob = new Blob([res.data], { type: res.data.type });\n // const reader = new FileReader();\n if (itemFileType === 'jpeg' || itemFileType === 'gif' || itemFileType === 'jpg' || itemFileType === 'png') {\n previewUrl.value = URL.createObjectURL(blob);\n setTimeout(() => {\n imgViewRef.value.$el.children[0].click();\n }, 0);\n } else {\n showPreview.value = true;\n fileDataObj.value = {\n fileData: res,\n itemFileType,\n ...item,\n };\n }\n }\n}\n/**\n * 附件下载方法\n * @param {object} item 附件对象\n */\nasync function dowFileItem(item) {\n loadingFun(true);\n if (item) {\n backendApiFunction\n .downloadPlm({ plmFileVersionId: item.plmFileVersionId })\n .then((res) => {\n const fileName = item.fileName;\n const filestream = res.data; // 返回的文件流\n const blob = new Blob([filestream]);\n const a = document.createElement('a');\n const href = window.URL.createObjectURL(blob); // 创建下载连接\n a.href = href;\n a.download = window.decodeURI(fileName);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a); // 下载完移除元素\n window.URL.revokeObjectURL(href); // 释放掉blob对象\n })\n .finally(() => {\n loadingFun(false);\n })\n .catch(() => {\n ElMessage({\n message: t('apiError'),\n type: 'error',\n });\n });\n }\n loadingFun(false);\n}\n/**\n * 删除附件方法\n * @param {object} item 附件对象\n */\nfunction clearFileItem(item) {\n materialFileUploadValue.value = materialFileUploadValue.value.filter((ite) => ite.plmFileVersionId !== item.plmFileVersionId);\n}\nwatch(() => props.fileList, () => {\n materialFileUploadValue.value = JSON.parse(JSON.stringify(props.fileList));\n});\nwatch(() => materialFileUploadValue.value, () => {\n emit('updateFileList', JSON.parse(JSON.stringify(materialFileUploadValue.value)));\n}, { deep: true });\n// 向外界暴露数据\ndefineExpose({\n materialFileUploadValue: materialFileUploadValue.value,\n});\n</script>\n\n<style lang=\"scss\" scoped>\n::v-deep.batch-uploader {\n width: 100%;\n .el-upload.el-upload--text.is-drag {\n padding: 0;\n width: 10rem;\n height: 10rem;\n .el-upload-dragger {\n padding: 0;\n width: 10rem;\n height: 10rem;\n .el-icon--upload {\n width: 2rem;\n margin: 0;\n line-height: 2rem;\n }\n .el-upload__text {\n line-height: 2rem;\n }\n }\n }\n}\n.file-list-show-text {\n position: relative;\n color: rgb(96, 98, 102);\n padding-left: 5px;\n margin-bottom: 5px;\n box-sizing: border-box;\n .file-list-show-text-name {\n display: inline-block;\n vertical-align: top;\n width: 82%;\n }\n}\n.file-list-show-text:hover {\n background-color: rgb(245, 247, 250);\n border-radius: 4px;\n .eye-icon,\n .down-icon,\n .close-icon {\n opacity: 1;\n }\n}\n.eye-icon,\n.close-icon,\n.down-icon {\n position: absolute;\n cursor: pointer;\n right: 0;\n margin: 0 0 0 5px;\n opacity: 0;\n}\n.eye-icon {\n margin-right: 5px;\n right: 20px;\n}\n.close-icon {\n margin-right: 5px;\n}\n.down-icon {\n right: 20px;\n}\n.eye-icon:hover,\n.down-icon:hover,\n.close-icon:hover {\n color: rgb(64, 158, 255);\n}\n.ellipsis-single-line {\n white-space: nowrap; /* 禁止换行 */\n overflow: hidden; /* 隐藏超出内容 */\n text-overflow: ellipsis; /* 显示省略号 */\n}\n\n.submit-btn {\n margin-top: 10px;\n}\n</style>\n","<template>\n <div data-test-id=\"DIV-wI6m5B\">\n <el-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n class=\"orderDialog\"\n width=\"80rem\"\n align-center\n center\n :close-on-click-modal=\"false\"\n :close-on-press-escape=\"false\"\n :modal-append-to-body=\"true\"\n :append-to-body=\"true\"\n :show-close=\"false\"\n data-test-id=\"EL-DIALOG-DiBRG6\"\n >\n <template #title>\n <v-icon :class=\"dialogIcon\" style=\"margin-right: 0.5rem\" data-test-id=\"V-ICON-hOUZN0\" />\n <span style=\"font-size: 18px\" data-test-id=\"SPAN-kopefz\">{{ dialogTitle }}</span>\n </template>\n <el-steps :active=\"activeStep\" process-status=\"success\" simple data-test-id=\"EL-STEPS-T0Qb7C\">\n <el-step\n :title=\"t('productData')\"\n style=\"cursor: pointer\"\n data-test-id=\"EL-STEP-O8kWmQ\"\n @click=\"activeStep = 0\"\n />\n <el-step\n :title=\"t('inventorySetting')\"\n style=\"cursor: pointer\"\n data-test-id=\"EL-STEP-yhmQTk\"\n @click=\"activeStep = 1\"\n />\n <el-step\n :title=\"t('mrpSetting')\"\n style=\"cursor: pointer\"\n data-test-id=\"EL-STEP-KzBsnk\"\n @click=\"activeStep = 2\"\n />\n </el-steps>\n <transition name=\"fade\" mode=\"out-in\">\n <div v-if=\"activeStep === 0\" style=\"max-height: calc(60vh - 30px); overflow-y: auto\" data-test-id=\"DIV-ZVrmkk\">\n <el-card shadow=\"never\" class=\"card-body\" data-test-id=\"EL-CARD-2YDOqp\">\n <template #header>\n <div class=\"card-header\" data-test-id=\"DIV-54dsaS\">\n <span data-test-id=\"SPAN-qQz6u2\">{{ t('basicField') }}</span>\n </div>\n </template>\n <el-form ref=\"addOrEditFormRef\" :model=\"formData\" label-width=\"20%\" :rules=\"formRules\" data-test-id=\"EL-FORM-Bd26HU\">\n <el-row :gutter=\"20\" data-test-id=\"EL-ROW-FHl3zD\">\n <el-col :span=\"12\" data-test-id=\"EL-COL-EajiBv\">\n <el-form-item :label=\"t('productPartNumber')\" required data-test-id=\"EL-FORM-ITEM-Ryb7dO\">\n <el-input v-model.trim=\"formData.materialPartNumber\" :placeholder=\"t('materialNumberGeneration')\" maxlength=\"50\" show-word-limit :disabled=\"disableText\" data-test-id=\"EL-INPUT-nY4zHd\" @keydown.space.prevent/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-CUskge\">\n <el-form-item :label=\"t('materialProperties')\" required prop=\"materialProperty\" data-test-id=\"EL-FORM-ITEM-7Xl8HW\">\n <el-select v-model=\"formData.materialProperty\" :placeholder=\"t('pleaseSelect')\" data-test-id=\"EL-SELECT-hrEZec\"><el-option v-for=\"(item, index) in selectPropertyList\" :key=\"item.value\" filterable :label=\"t(item.text)\" :value=\"item.value\" :data-test-id=\"`EL-OPTION-1RvhHH-${index}`\">\n </el-option>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-mLkAGP\">\n <el-form-item :label=\"t('productName')\" required prop=\"materialName\" data-test-id=\"EL-FORM-ITEM-UR02jK\">\n <el-input v-model=\"formData.materialName\" :placeholder=\"t('pleaseEnter')\" maxlength=\"200\" show-word-limit data-test-id=\"EL-INPUT-y8lMYn\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-pMiu2v\">\n <el-form-item :label=\"t('materialStatus')\" required prop=\"materialState\" data-test-id=\"EL-FORM-ITEM-X3q9xW\">\n <el-select v-model=\"formData.materialState\" :placeholder=\"t('pleaseSelect')\" data-test-id=\"EL-SELECT-lunbUk\"><el-option v-for=\"(item, index) in selectStateList\" :key=\"item.value\" filterable :label=\"t(item.text)\" :value=\"item.value\" :data-test-id=\"`EL-OPTION-uoiwKf-${index}`\">\n </el-option>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-JLURQk\">\n <el-form-item :label=\"t('spec')\" data-test-id=\"EL-FORM-ITEM-JY4vtY\">\n <el-input v-model=\"materialSpec\" :placeholder=\"t('pleaseEnter')\" maxlength=\"200\" show-word-limit data-test-id=\"EL-INPUT-vdJ3vk\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-02LOQ8\">\n <el-form-item :label=\"t('processTemplate')\" data-test-id=\"EL-FORM-ITEM-YABQEU\">\n <el-select\n v-model=\"formData.processTemplate\"\n filterable\n clearable\n remote\n remote-show-suffix\n :remote-method=\"queryProcessTemplateDataRemoteMethod\"\n :placeholder=\"t('pleaseSelect')\"\n data-test-id=\"EL-SELECT-3ZjBCC\"\n >\n <el-option\n v-for=\"(item, tempIndex) in processTemplateList\"\n :key=\"item.processTemplateId\"\n :label=\"item.templateName\"\n :value=\"item.processTemplateId\"\n :data-test-id=\"`EL-OPTION-ur4dre-${tempIndex}`\"\n >\n </el-option>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-pSm37p\">\n <el-form-item :label=\"t('materialCategory')\" required data-test-id=\"EL-FORM-ITEM-2VX3Jp\">\n <el-input v-model=\"parentCategory\" readonly data-test-id=\"EL-INPUT-ptrkgs\" @click=\"categoryFun\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-9RX2kt\">\n <el-form-item :label=\"t('customer')\" data-test-id=\"EL-FORM-ITEM-SckATS\">\n <el-select\n v-model=\"formData.customer\"\n filterable\n clearable\n remote\n remote-show-suffix\n :remote-method=\"queryCustomerDataRemoteMethod\"\n :placeholder=\"t('pleaseSelect')\"\n data-test-id=\"EL-SELECT-tB6hz4\"\n >\n <el-option\n v-for=\"(item, customerIndex) in customerList\"\n :key=\"item.customerId\"\n :label=\"item.customerName\"\n :value=\"item.customerId\"\n :data-test-id=\"`EL-OPTION-G9aRgj-${customerIndex}`\"\n >\n </el-option>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-mbp2vs\">\n <el-form-item :label=\"t('Syn_unity')\" required prop=\"materialUnit\" data-test-id=\"EL-FORM-ITEM-nA2UHE\">\n <div style=\"display: flex; width: 100%\" data-test-id=\"DIV-FEAJEF\">\n <div style=\"width: 80%\" data-test-id=\"DIV-CjI98d\">\n <el-select\n v-model=\"formData.materialUnit\"\n :placeholder=\"t('pleaseSelect')\"\n filterable\n remote\n :remote-method=\"queryUnit\"\n data-test-id=\"EL-SELECT-eafWlm\"\n >\n <el-option\n v-for=\"(item, index) in unitList\"\n :key=\"item.materialUnitId\"\n :label=\"item.materialUnitName\"\n :value=\"item.materialUnitId\"\n :data-test-id=\"`EL-OPTION-V8O7WV-${index}`\"\n >\n </el-option>\n </el-select>\n </div>\n <el-button\n type=\"primary\"\n class=\"ml-2\"\n data-test-id=\"EL-BUTTON-kuaBUY\"\n @click=\"newUnitsRef.show()\"\n >\n {{ t('unitSetting') }}\n </el-button>\n </div>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-OoikS8\">\n <el-form-item :label=\"t('manufacturer')\" data-test-id=\"EL-FORM-ITEM-BT5Lau\">\n <el-input v-model=\"mainSupplierName\" :placeholder=\"t('PleaseSelect')\" clearable readonly data-test-id=\"EL-INPUT-gA88SV\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify custom-suffix\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-49OiYI-businessName-pom\" @click=\"openManufacturerListDialog\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-fM7cTS\">\n <el-form-item :label=\"t('materialFile')\" data-test-id=\"EL-FORM-ITEM-Gc4JSX\">\n <template #label>\n {{ t('materialFile') }}\n <el-tooltip\n effect=\"dark\"\n :content=\"t('upTo10MaterialFilesButFileNotExceed10MB')\"\n placement=\"top\"\n data-test-id=\"EL-TOOLTIP-Dpgtgj\"\n >\n <span\n class=\"mdi mdi-help-circle-outline\"\n style=\"margin-left: 0.5rem\"\n data-test-id=\"SPAN-YaPDMI\"\n />\n </el-tooltip>\n </template>\n <!-- 物料档案上传组件 -->\n <materialFileBatchUploader\n :file-list=\"editDialogFileList\"\n data-test-id=\"MATERIALFILEBATCHUPLOADER-1ziHRG\"\n @updateFileList=\"updateFileList\"\n />\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-UfmYeN\">\n <el-form-item :label=\"t('materialPicture')\" data-test-id=\"EL-FORM-ITEM-ijl5Uj\">\n <template #label>\n {{ t('materialPicture') }}\n <el-tooltip\n effect=\"dark\"\n :content=\"t('materialImages10MBHaveOneImage')\"\n placement=\"top\"\n data-test-id=\"EL-TOOLTIP-u1aMqN\"\n >\n <span\n class=\"mdi mdi-help-circle-outline\"\n style=\"margin-left: 0.5rem\"\n data-test-id=\"SPAN-GE3W3x\"\n />\n </el-tooltip>\n </template>\n <div style=\"display: flex\" data-test-id=\"DIV-JodaY6\">\n <el-upload ref=\"fileupload\" :file-list=\"[{ url }]\" action=\"#\" list-type=\"picture-card\" :auto-upload=\"false\" :limit=\"1\" :accept=\"acceptType\" :on-exceed=\"handleExceed\" data-test-id=\"EL-UPLOAD-sfalYc\" @change=\"previewImage\">\n <v-icon class=\"mdi mdi-plus\" data-test-id=\"V-ICON-HXRhNu\"/>\n <template #tip>\n <div data-test-id=\"DIV-OnTPQp\">\n {{ materialImageName }}\n </div>\n </template>\n <template #file=\"{ file }\">\n <div data-test-id=\"DIV-OVxhnT\">\n <img class=\"el-upload-list__item-thumbnail\" :src=\"file.url\" data-test-id=\"IMG-wka9sT\"/>\n <span v-if=\"filesImageFlag !== 3\" class=\"el-upload-list__item-actions\" data-test-id=\"SPAN-JimLb7\">\n <span data-test-id=\"SPAN-QcfVy4\" @click=\"handlePictureCardPreview(file)\">\n <v-icon class=\"mdi mdi-magnify-plus-outline\" data-test-id=\"V-ICON-96Faj0\"/>\n </span>\n <span v-if=\"filesImageFlag !== 2\" data-test-id=\"SPAN-8mLahk\" @click=\"handleRemove(file)\">\n <v-icon class=\"mdi mdi-delete\" data-test-id=\"V-ICON-G8IrOC\"/>\n </span>\n </span>\n </div>\n </template>\n </el-upload>\n </div>\n </el-form-item>\n </el-col>\n <!-- <el-col :span=\"12\" data-test-id=\"EL-COL-hkKLZE\">\n <el-form-item :label=\"t('batchNumberRule')\" data-test-id=\"EL-FORM-ITEM-9kuwQ2\">\n <el-select v-model=\"batchNumberSettingID\" :placeholder=\"t('pleaseSelect')\" filterable clearable data-test-id=\"EL-SELECT-TTBht9\" @change=\"batchShutdown = false\"><el-option v-for=\"(item, index) in batchRuleList\" :key=\"item.batchNumberSettingID\" :label=\"item.name\" :value=\"item.batchNumberSettingID\" :data-test-id=\"`EL-OPTION-4Q9Rb7-${index}`\">\n </el-option>\n </el-select>\n <span v-if=\"batchShutdown\" style=\"color: #919192\" data-test-id=\"SPAN-qwwdeJ\">{{\n t('batchShutdown')\n }}</span>\n </el-form-item>\n </el-col> -->\n <el-col :span=\"24\" data-test-id=\"EL-COL-hTrO4G\">\n <el-form-item :label=\"t('illustrate')\" data-test-id=\"EL-FORM-ITEM-qPRZ5V\" label-width=\"10%\">\n <el-input v-model=\"materialDescribe\" maxlength=\"100\" :placeholder=\"t('pleaseEnter')\" show-word-limit type=\"textarea\" data-test-id=\"EL-INPUT-45TkUa\"/>\n </el-form-item>\n </el-col> \n </el-row>\n <div style=\"width:100%;display:flex;justify-content:center;\">\n <el-divider style=\"margin: 4px 0 24px 0;width:70%;\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-DIVIDER-dqCrw9\">\n <span style=\"display:inline-block;cursor:pointer\" @click=\"showFlag = !showFlag\">\n <span>展开更多信息</span>\n <el-icon style=\"margin-left:0.5rem\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-EL-ICON-6NE00y\">\n <ArrowUpBold v-if=\"showFlag\" data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-ARROWUPBOLD-VstZiP\" />\n <ArrowDownBold v-else data-test-id=\"POM-MANUFACTURERLIST-QUERYSEARCH-ARROWDOWNBOLD-fG5Y3y\" />\n </el-icon>\n </span>\n </el-divider>\n </div>\n \n <el-collapse-transition data-test-id=\"POM-MANUFAC-QUERYSEARCH-EL-COLLAPSE-TRANSITION-vxeyGr\">\n <div v-show=\"showFlag\" data-test-id=\"POM-MANUFAC-QUERYSEARCH-DIV-O2Yqgg\" style=\"width:100%\">\n <el-row :gutter=\"20\" data-test-id=\"POM-MANUFAC-QUERYSEARCH-EL-ROW-7A2IXy\">\n <el-col :span=\"12\" data-test-id=\"EL-COL-qkaxU4\">\n <el-form-item :label=\"t('materialType')\" data-test-id=\"EL-FORM-ITEM-UdFbnc\">\n <el-select v-model=\"formData.materialType\" placeholder=\"\" disabled data-test-id=\"EL-SELECT-C3KMiw\"><el-option v-for=\"(item, index) in selectTypeList\" :key=\"item.materialTypeID\" filterable :label=\"item.materialTypeName\" :value=\"item.materialTypeID\" :data-test-id=\"`EL-OPTION-V8O7WV-${index}`\">\n </el-option>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-Tnk8co\">\n <el-form-item :label=\"t('reorderPoint')\" prop=\"reorderPoint\" data-test-id=\"EL-FORM-ITEM-uUbfll\">\n <el-input v-model.number=\"formData.reorderPoint\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-mgjuXe\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-4v9woD\">\n <el-form-item :label=\"t('inventoryReplenishmentAmount')\" prop=\"inventoryReplenishmentAmount\" data-test-id=\"EL-FORM-ITEM-iBfLvm\">\n <el-input v-model.number=\"formData.inventoryReplenishmentAmount\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-e0WQ7w\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-EgraGy\">\n <el-form-item :label=\"t('consumptionAmount')\" prop=\"consumptionAmount\" data-test-id=\"EL-FORM-ITEM-Cl45UI\">\n <el-input v-model.number=\"formData.consumptionAmount\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-txVQv3\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-lyN7k4\">\n <el-form-item :label=\"t('procurementNotProgress')\" prop=\"procurementNotProgress\" data-test-id=\"EL-FORM-ITEM-Svk6h3\">\n <el-input v-model.number=\"formData.procurementNotProgress\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-2U1b0i\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-HipOVo\">\n <el-form-item :label=\"t('deliveryDate')\" prop=\"deliveryDay\" data-test-id=\"EL-FORM-ITEM-0f8TTS\">\n <el-input v-model.number=\"formData.deliveryDay\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-OiNvom\">\n <template #append>{{ t('day') }}</template>\n </el-input>\n </el-form-item>\n </el-col>\n <template v-if=\"props.showSupportUnit\">\n <el-col :span=\"12\">\n <el-form-item :label=\"t('supportUnit')\" prop=\"supportUnit\">\n <div style=\"display: flex; width: 100%\">\n <div style=\"width: 80%\">\n <el-select\n v-model=\"formData.supportUnit\"\n clearable\n :placeholder=\"t('pleaseSelect')\"\n filterable\n @clear=\"clearSupportUnit\"\n >\n <el-option\n v-for=\"(item) in unitList\"\n :key=\"item.materialUnitId\"\n :label=\"item.materialUnitName\"\n :value=\"item.materialUnitId\"\n >\n </el-option>\n </el-select>\n </div>\n <el-button\n type=\"primary\"\n class=\"ml-2\"\n data-test-id=\"EL-BUTTON-kuaBUY\"\n @click=\"newUnitsRef.show()\"\n >\n {{ t('unitSetting') }}\n </el-button>\n </div>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n </el-col>\n <el-col :span=\"12\">\n <el-form-item :label=\"t('Syn_unitConversion')\">\n <template #label>\n {{ t('Syn_unitConversion') }}\n <el-tooltip\n effect=\"dark\"\n placement=\"top\"\n >\n <template #content> {{ t('Syn_unitConversionTip1') }}<br />{{ t('Syn_unitConversionTip2') }}<br />{{ t('Syn_unitConversionTip3') }} <br />{{ t('Syn_unitConversionTip4') }} </template>\n <span\n class=\"mdi mdi-help-circle-outline\"\n style=\"margin-left: 0.5rem\"\n />\n </el-tooltip>\n </template>\n <el-form ref=\"unitFormRef\" :rules=\"unitFormRules\" :model=\"unitFormData\" :disabled=\"!formData.supportUnit\" label-position=\"left\" label-width=\"auto\" >\n <el-form-item :label=\"`${t('Syn_mainUnit')}:`\" style=\"margin-bottom: 1rem;\">\n {{ materialUnitName || '-' }}\n </el-form-item>\n <el-form-item :label=\"`${t('Syn_materialUnitRatio')}:`\" prop=\"materialUnitRatio\" style=\"margin-bottom: 1rem;\">\n <el-input v-model=\"unitFormData.materialUnitRatio\"></el-input>\n </el-form-item>\n <el-form-item :label=\"`${t('Syn_auxiliaryUnit')}:`\" style=\"margin-bottom: 1rem;\">\n {{ supportUnitName || '-' }}\n </el-form-item>\n <el-form-item :label=\"`${t('Syn_supportUnitRatio')}:`\" prop=\"supportUnitRatio\">\n <el-input v-model=\"unitFormData.supportUnitRatio\"></el-input>\n </el-form-item>\n </el-form>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n </el-col>\n <el-col :span=\"12\">\n <el-form-item :label=\"t('Syn_decimalProcessing')\">\n <el-radio-group v-model=\"formData.computeMode\" :disabled=\"!formData.supportUnit\">\n <el-radio :value=\"1\">\n {{ t('roundOff') }}\n <el-tooltip\n effect=\"dark\"\n placement=\"top\"\n >\n <template #content> {{ t('Syn_unitConversionTip5') }}<br />{{ t('Syn_unitConversionTip6') }} </template>\n <span\n class=\"mdi mdi-help-circle-outline\"\n style=\"margin-left: 0.5rem;color: #606266;\"\n />\n </el-tooltip>\n </el-radio>\n <el-radio :value=\"2\">\n {{ t('tailRemoval') }}\n <el-tooltip\n effect=\"dark\"\n placement=\"top\"\n >\n <template #content> {{ t('Syn_unitConversionTip7') }}<br />{{ t('Syn_unitConversionTip8') }} </template>\n <span\n class=\"mdi mdi-help-circle-outline\"\n style=\"margin-left: 0.5rem;color: #606266;\"\n />\n </el-tooltip>\n </el-radio>\n <el-radio :value=\"3\">\n {{ t('Syn_enterOneMethod') }}\n <el-tooltip\n effect=\"dark\"\n placement=\"top\"\n >\n <template #content> {{ t('Syn_unitConversionTip9') }}<br />{{ t('Syn_unitConversionTip10') }} </template>\n <span\n class=\"mdi mdi-help-circle-outline\"\n style=\"margin-left: 0.5rem;color: #606266;\"\n />\n </el-tooltip>\n </el-radio>\n </el-radio-group>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n </el-col>\n </template>\n </el-row>\n </div>\n </el-collapse-transition>\n </el-form>\n </el-card>\n <el-card shadow=\"never\" class=\"card-body\" data-test-id=\"EL-CARD-2m0pnI\">\n <template #header>\n <div class=\"card-header\" data-test-id=\"DIV-YsZfYO\">\n <span data-test-id=\"SPAN-luZbbD\">{{ t('customField') }}</span>\n </div>\n </template>\n <div data-test-id=\"DIV-OG7M23\">\n <docCustomFieldForm v-if=\"customColumnsData.length\" ref=\"docCustomFieldFormRef\" :items=\"customColumnsData\" :is-edit=\"Boolean(editStatus)\" data-test-id=\"DOCCUSTOMFIELDFORM-RmuOBh\">\n </docCustomFieldForm>\n </div>\n </el-card>\n </div>\n <el-card v-else-if=\"activeStep === 1\" shadow=\"never\" class=\"card-body\" style=\"max-height: calc(60vh - 30px); overflow-y: auto\" data-test-id=\"EL-CARD-DESQdJ\">\n <template #header>\n <div class=\"card-header\" data-test-id=\"DIV-0O3oKO\">\n <span data-test-id=\"SPAN-u3A0x0\">{{ t('basicField') }}</span>\n </div>\n </template>\n <el-form label-width=\"37%\" :model=\"formData\" :rules=\"formRules\" data-test-id=\"EL-FORM-A4FDFo\">\n <el-row :gutter=\"20\" data-test-id=\"EL-ROW-W31U5s\">\n <el-col :span=\"8\" data-test-id=\"EL-COL-8RUrX4\">\n <el-form-item :label=\"t('')\" data-test-id=\"EL-FORM-ITEM-0lFBA8\">\n <el-checkbox v-model=\"formData.isEnableDefaultWarehouse\" data-test-id=\"EL-CHECKBOX-cqwKlK\" @change=\"isEnableDefaultWarehouseChange\">\n {{ t('enableDefaultRepository') }}\n </el-checkbox>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-fQa2J3\">\n <el-form-item :label=\"t('')\" data-test-id=\"EL-FORM-ITEM-eR7JTU\">\n <el-checkbox v-model=\"formData.isEnableShelfLifeManagement\" data-test-id=\"EL-CHECKBOX-TdNDbA\" @change=\"isEnableShelfLifeManagementChange\">\n {{ t('enableShelfLifeManagement') }}\n </el-checkbox>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-zVim8S\"> </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-az9Lh3\">\n <el-form-item ref=\"outboundWarehouseRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('outboundWarehouse')\" prop=\"outboundWarehouse\" data-test-id=\"EL-FORM-ITEM-kgLCHz\">\n <template #label>\n <el-tooltip v-if=\"t('outboundWarehouse').length > 5\" effect=\"dark\" :content=\"t('outboundWarehouse')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-G4xnwu\">\n <span data-test-id=\"SPAN-IYBNe9\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-NIZoYC\">*</span>\n {{ `${t('outboundWarehouse').slice(0, 5)}...` }}\n </span>\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-XHfaPw\">\n <span data-test-id=\"SPAN-mhyu5v\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-GLbJs2\">*</span>\n {{ t('outboundWarehouse') }}\n </span>\n </span>\n </template>\n <el-input :value=\"formData.outboundWarehouse\" :disabled=\"!formData.isEnableDefaultWarehouse\" readonly data-test-id=\"EL-INPUT-628Qdh\" @click=\"outboundWarehouseClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-49OiYI\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-ecoOaA\">\n <el-form-item ref=\"shelfLifeUnitRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('shelfLifeUnit')\" prop=\"shelfLifeUnit\" data-test-id=\"EL-FORM-ITEM-lBUea6\">\n <template #label>\n <el-tooltip v-if=\"t('shelfLifeUnit').length > 5\" effect=\"dark\" :content=\"t('shelfLifeUnit')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-QHELRn\">\n <span data-test-id=\"SPAN-vBKy47\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-8dqB9v\">*</span>\n {{ `${t('shelfLifeUnit').slice(0, 5)}...` }}\n </span>\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-1c4dWf\">\n <span data-test-id=\"SPAN-yL5tkh\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-aCF34A\">*</span>\n {{ t('shelfLifeUnit') }}\n </span>\n </span>\n </template>\n <el-select v-model=\"formData.shelfLifeUnit\" :placeholder=\"t('pleaseSelect')\" clearable :disabled=\"!formData.isEnableShelfLifeManagement\" show-word-limit data-test-id=\"EL-SELECT-KGRsXl\">\n <el-option v-for=\"(ite, index) in shelfLifeUnitData\" :key=\"ite.value\" :label=\"t(ite.text)\" :value=\"ite.value\" :data-test-id=\"`EL-OPTION-MmWok3-${index}`\"/>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-L0z7oC\">\n <el-form-item ref=\"safetyStockInventorySettingRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('safetyStock')\" prop=\"safetyStockInventorySetting\" data-test-id=\"EL-FORM-ITEM-vMimLt\">\n <template #label>\n <el-tooltip v-if=\"t('safetyStock').length > 5\" effect=\"dark\" :content=\"t('safetyStock')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-d1YxQJ\">\n {{ `${t('safetyStock').slice(0, 5)}...` }}\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-YkwoLa\">\n {{ t('safetyStock') }}\n </span>\n </template>\n <el-input v-model=\"formData.safetyStockInventorySetting\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-KiahAe\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-SKftoh\">\n <el-form-item :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('outboundWarehouseLocation')\" prop=\"outboundWarehouseLocation\" data-test-id=\"EL-FORM-ITEM-oY0FDE\">\n <template #label>\n <el-tooltip v-if=\"t('outboundWarehouseLocation').length > 5\" effect=\"dark\" :content=\"t('outboundWarehouseLocation')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-INzEA1\">\n {{ `${t('outboundWarehouseLocation').slice(0, 5)}...` }}\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-jBSY9S\">\n {{ t('outboundWarehouseLocation') }}\n </span>\n </template>\n <el-input v-model=\"formData.outboundWarehouseLocation\" readonly :disabled=\"outboundWarehouseLocationIsDis\" data-test-id=\"EL-INPUT-X5e6CD\" @click=\"outboundWarehouseLocationClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-yivnnv\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-fDisqk\">\n <el-form-item ref=\"qualityGuaranteePeriodRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('qualityGuaranteePeriod')\" prop=\"qualityGuaranteePeriod\" data-test-id=\"EL-FORM-ITEM-MWhoyQ\">\n <template #label>\n <el-tooltip v-if=\"t('qualityGuaranteePeriod').length > 5\" effect=\"dark\" :content=\"t('qualityGuaranteePeriod')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-cZz7A0\">\n <span data-test-id=\"SPAN-e7dtvH\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-r3BkXf\">*</span>\n {{ `${t('qualityGuaranteePeriod').slice(0, 5)}...` }}\n </span>\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-ZrX8ap\">\n <span data-test-id=\"SPAN-RHcykH\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-sokuAu\">*</span>\n {{ t('qualityGuaranteePeriod') }}\n </span>\n </span>\n </template>\n <el-input v-model=\"formData.qualityGuaranteePeriod\" :disabled=\"!formData.isEnableShelfLifeManagement\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-rIjCxV\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-aLnNhQ\">\n <el-form-item ref=\"reorderPointInventorySettingRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('reorderPoints')\" prop=\"reorderPointInventorySetting\" data-test-id=\"EL-FORM-ITEM-Bze6qy\">\n <template #label>\n <el-tooltip v-if=\"t('reorderPoints').length > 5\" effect=\"dark\" :content=\"t('reorderPoints')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-JxiQEp\">\n {{ `${t('reorderPoints').slice(0, 5)}...` }}\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-0inqlI\">\n {{ t('reorderPoints') }}\n </span>\n </template>\n <el-input v-model=\"formData.reorderPointInventorySetting\" :placeholder=\"t('pleaseEnter')\" type=\"number\" min=\"0\" data-test-id=\"EL-INPUT-IYWJJJ\"/>\n </el-form-item>\n </el-col>\n <!-- 良品入库仓库 -->\n <el-col :span=\"8\" data-test-id=\"EL-COL-WeG4WQ\">\n <el-form-item ref=\"storageWarehouseRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('goodStorageWarehouse')\" prop=\"storageWarehouse\" data-test-id=\"EL-FORM-ITEM-5Yx6za\">\n <template #label>\n <el-tooltip v-if=\"t('goodStorageWarehouse').length > 7\" effect=\"dark\" :content=\"t('goodStorageWarehouse')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-kzMMSR\">\n <span data-test-id=\"SPAN-uwHMiZ\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-1m9nZj\">*</span>\n {{ `${t('goodStorageWarehouse').slice(0, 7)}...` }}\n </span>\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-0EKWPh\">\n <span data-test-id=\"SPAN-o0eBVp\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-zLerhX\">*</span>\n {{ t('goodStorageWarehouse') }}\n </span>\n </span>\n </template>\n <el-input v-model=\"formData.storageWarehouse\" readonly :disabled=\"!formData.isEnableDefaultWarehouse\" data-test-id=\"EL-INPUT-CRALgr\" @click=\"storageWarehouseClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-ywLmoY\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-yxjPOB1\"> </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-jz1g3i1\"/>\n <!-- 良品入库仓位 -->\n <el-col :span=\"8\" data-test-id=\"EL-COL-8N5OTF1\">\n <el-form-item :label=\"t('goodStorageSpace')\" prop=\"storageSpace\" data-test-id=\"EL-FORM-ITEM-ZFBmsO1\">\n <template #label>\n <el-tooltip v-if=\"t('goodStorageSpace').length > 7\" effect=\"dark\" :content=\"t('goodStorageSpace')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-gtu9LG\">\n {{ `${t('goodStorageSpace').slice(0, 7)}...` }}\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-igEbvJ\">\n {{ t('goodStorageSpace') }}\n </span>\n </template>\n <el-input v-model=\"formData.storageSpace\" readonly :disabled=\"storageSpaceIsDis\" data-test-id=\"EL-INPUT-FqqaR7\" @click=\"storageSpaceClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-X3uNJp\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-tpKK14\"> </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-Ak2IZr\"/>\n <!-- 不良品入库仓库 -->\n <el-col :span=\"8\" data-test-id=\"EL-COL-KsvULn\">\n <el-form-item ref=\"defectiveStorageWarehouseRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('defectiveStorageWarehouse')\" prop=\"defectiveStorageWarehouse\" data-test-id=\"EL-FORM-ITEM-LqVUpK\">\n <template #label>\n <el-tooltip v-if=\"t('defectiveStorageWarehouse').length > 8\" effect=\"dark\" :content=\"t('defectiveStorageWarehouse')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-wsc0H6\">\n <span data-test-id=\"SPAN-uwHMiZ\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-HVbeKQ\">*</span>\n {{ `${t('defectiveStorageWarehouse').slice(0, 8)}...` }}\n </span>\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-pUuwUx\">\n <span data-test-id=\"SPAN-VTw28H\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-A1em3Y\">*</span>\n {{ t('defectiveStorageWarehouse') }}\n </span>\n </span>\n </template>\n <el-input v-model=\"formData.defectiveStorageWarehouse\" readonly :disabled=\"!formData.isEnableDefaultWarehouse\" data-test-id=\"EL-INPUT-CRALgr\" @click=\"defectiveStorageWarehouseClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-ywLmoY\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-J62N7o\"> </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-5Aby0W\"/>\n <!-- 不良品入库仓位 -->\n <el-col :span=\"8\" data-test-id=\"EL-COL-rU9f5M\">\n <el-form-item :label=\"t('defectiveStorageSpace')\" prop=\"defectiveStorageSpace\" data-test-id=\"EL-FORM-ITEM-HQjuKb\">\n <template #label>\n <el-tooltip v-if=\"t('defectiveStorageSpace').length > 8\" effect=\"dark\" :content=\"t('defectiveStorageSpace')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-ERsFzi\">\n {{ `${t('defectiveStorageSpace').slice(0, 8)}...` }}\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-XKehaD\">\n {{ t('defectiveStorageSpace') }}\n </span>\n </template>\n <el-input v-model=\"formData.defectiveStorageSpace\" readonly :disabled=\"defectiveStorageSpaceIsDis\" data-test-id=\"EL-INPUT-7NXl84\" @click=\"defectiveStorageSpaceClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-GdPtDT\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-dw0fOF\"> </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-kAl6oK\"/>\n <!-- 采购入库仓库 -->\n <el-col :span=\"8\" data-test-id=\"EL-COL-nILdda\">\n <el-form-item ref=\"purchaseStorageWarehouseRef\" :style=\"{ marginBottom: locale === 'en' ? '40px' : '30px' }\" :label=\"t('purchaseStorage')\" prop=\"purchaseStorageIdIn\" data-test-id=\"EL-FORM-ITEM-GKQvnE\">\n <template #label>\n <el-tooltip v-if=\"t('purchaseStorage').length > 7\" effect=\"dark\" :content=\"t('purchaseStorage')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-OO4dpe\">\n <span data-test-id=\"SPAN-KLKUif\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-anZ3pG\">*</span>\n {{ `${t('purchaseStorage').slice(0, 7)}...` }}\n </span>\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-TnymF3\">\n <span data-test-id=\"SPAN-Ix5k6u\">\n <span style=\"color: var(--el-color-danger)\" data-test-id=\"SPAN-B1zwWp\">*</span>\n {{ t('purchaseStorage') }}\n </span>\n </span>\n </template>\n <el-input v-model=\"formData.purchaseStorageIdIn\" readonly :disabled=\"!formData.isEnableDefaultWarehouse\" data-test-id=\"EL-INPUT-gfoNyw\" @click=\"purchaseStorageIdInClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-gcptSp\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-PVU0AV\"> </el-col>\n <el-col :span=\"8\" data-test-id=\"EL-COL-cmMNT5\"/>\n <!-- 采购入库仓位 -->\n <el-col :span=\"8\" data-test-id=\"EL-COL-c86p3w\">\n <el-form-item :label=\"t('purchaseStorageSpace')\" prop=\"purchaseStorageSpace\" data-test-id=\"EL-FORM-ITEM-qW3sdp\">\n <template #label>\n <el-tooltip v-if=\"t('purchaseStorageSpace').length > 7\" effect=\"dark\" :content=\"t('purchaseStorageSpace')\" placement=\"top\" data-test-id=\"EL-TOOLTIP-lmdyLf\">\n {{ `${t('purchaseStorageSpace').slice(0, 7)}...` }}\n </el-tooltip>\n <span v-else data-test-id=\"SPAN-wZ1oAD\">\n {{ t('purchaseStorageSpace') }}\n </span>\n </template>\n <el-input v-model=\"formData.purchaseStockSpaceIdIn\" readonly :disabled=\"purchaseStockSpaceIsDis\" data-test-id=\"EL-INPUT-Az1zzD\" @click=\"purchaseStockSpaceClick\">\n <template #suffix>\n <v-icon class=\"mdi mdi-magnify\" style=\"font-size: 1.5rem\" data-test-id=\"V-ICON-XmJHm1\"/>\n </template>\n </el-input>\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n </el-card>\n <el-card v-else shadow=\"never\" class=\"card-body\" style=\"max-height: calc(60vh - 30px); overflow-y: auto\" data-test-id=\"EL-CARD-0LNE5c\">\n <template #header>\n <div class=\"card-header\" data-test-id=\"DIV-kED0ny\">\n <span data-test-id=\"SPAN-blN8XA\">{{ t('basicField') }}</span>\n </div>\n </template>\n <el-form label-width=\"20%\" :model=\"formData\" :rules=\"formRules\" data-test-id=\"EL-FORM-kezkA1\">\n <el-row :gutter=\"20\" data-test-id=\"EL-ROW-Tto3pd\">\n <el-col :span=\"12\" data-test-id=\"EL-COL-BgT0vR\">\n <el-form-item :label=\"t('stockModel')\" prop=\"sex\" data-test-id=\"EL-FORM-ITEM-tQnsVb\">\n <el-select v-model=\"stockModelID\" :placeholder=\"t('pleaseSelect')\" clearable data-test-id=\"EL-SELECT-8aGtqn\"><el-option v-for=\"(item, index) in stockModelList\" :key=\"item.value\" filterable :label=\"t(item.text)\" :value=\"item.value\" :data-test-id=\"`EL-OPTION-l4kEec-${index}`\">\n </el-option>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-Vjr630\">\n <el-form-item :label=\"t('replenishment')\" prop=\"replenishment\" data-test-id=\"EL-FORM-ITEM-6xrsZW\">\n <el-input v-model=\"formData.replenishment\" type=\"number\" :disabled=\"stockModelID !== status.stockModel.finishedProductMarket\" data-test-id=\"EL-INPUT-htIzvz\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-7ZI4r3\">\n <el-form-item :label=\"t('turnoverDays')\" prop=\"turnoverDays\" data-test-id=\"EL-FORM-ITEM-cbkgmR\">\n <el-input v-model=\"formData.turnoverDays\" :disabled=\"stockModelID !== status.stockModel.finishedProductMarket\" data-test-id=\"EL-INPUT-8U0pG2\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-kdua4G\">\n <el-form-item :label=\"t('adjustMagnification')\" prop=\"adjustMagnification\" data-test-id=\"EL-FORM-ITEM-ZEQjUE\">\n <el-input v-model=\"formData.adjustMagnification\" disabled data-test-id=\"EL-INPUT-trBj8Z\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-GmIflG\">\n <el-form-item :label=\"t('minimumOrderQuantity')\" prop=\"minimumOrderQuantity\" data-test-id=\"EL-FORM-ITEM-ZFLbRj\">\n <el-input v-model=\"formData.minimumOrderQuantity\" disabled data-test-id=\"EL-INPUT-fve5c4\"/>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\" data-test-id=\"EL-COL-YwRDuh\">\n <el-form-item :label=\"t('minimumPackQuantity')\" prop=\"minimumPackQuantity\" data-test-id=\"EL-FORM-ITEM-UzSdZV\">\n <el-input v-model=\"formData.minimumPackQuantity\" disabled data-test-id=\"EL-INPUT-O2FpWq\"/>\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n </el-card>\n </transition>\n <template #footer>\n <span class=\"dialog-footer\" data-test-id=\"SPAN-WAtAIO\">\n <el-button data-test-id=\"EL-BUTTON-HbFNKe\" @click=\"closePage(closeType.close)\">{{ t('Syn_cancel') }}</el-button>\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-0ldOSQ\" @click=\"confirmData\">\n {{ t('Syn_confirm') }}\n </el-button>\n </span>\n </template>\n </el-dialog>\n <el-image-viewer\n v-if=\"dialogVisible\"\n hide-on-click-modal\n :url-list=\"[url]\"\n data-test-id=\"EL-IMAGE-VIEWER-CAEtTS\"\n @close=\"\n () => {\n dialogVisible = false;\n }\n \"\n />\n <el-dialog\n v-if=\"categoryDialog\"\n v-model=\"categoryDialog\"\n class=\"editbomDialog\"\n width=\"40rem\"\n align-center\n center\n custom-class=\"demo\"\n :close-on-click-modal=\"false\"\n :close-on-press-escape=\"false\"\n :modal-append-to-body=\"true\"\n :append-to-body=\"true\"\n :show-close=\"false\"\n data-test-id=\"EL-DIALOG-5usEzJ\"\n >\n <template #title>\n <span style=\"font-size: 18px\" data-test-id=\"SPAN-IqNbTu\">{{ t('parentCategory') }}</span>\n </template>\n <div style=\"max-height: calc(70vh - 30px); overflow-y: auto\" data-test-id=\"DIV-t0CUa0\">\n <el-card shadow=\"never\" class=\"card-body\" data-test-id=\"EL-CARD-TcZVUT\">\n <dragDropTree\n :default-props=\"defaultProps\"\n :default-expanded=\"defaultExpanded\"\n :update-node=\"updateNode\"\n :default-selection=\"handleNodeItemId\"\n :draggable=\"false\"\n :is-filter=\"false\"\n placeholder=\"menuName\"\n data-test-id=\"DRAGDROPTREE-LCQfZQ\"\n @handleNodeClick=\"handleNodeClick\"\n />\n </el-card>\n </div>\n <template #footer>\n <span class=\"dialog-footer\" data-test-id=\"SPAN-JhF2D3\">\n <el-button data-test-id=\"EL-BUTTON-5k2hWU\" @click=\"categoryDialog = false\">{{ t('Syn_cancel') }}</el-button>\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-xFDpA6\" @click=\"confirmCategory\">\n {{ t('Syn_confirm') }}\n </el-button>\n </span>\n </template>\n </el-dialog>\n <el-dialog\n v-model=\"warehouseOrStorageLocationDialog\"\n class=\"editbomDialog\"\n width=\"80rem\"\n align-center\n center\n custom-class=\"demo\"\n :close-on-click-modal=\"false\"\n :close-on-press-escape=\"false\"\n :modal-append-to-body=\"true\"\n :append-to-body=\"true\"\n :show-close=\"false\"\n data-test-id=\"EL-DIALOG-Mv4pMa\"\n >\n <template #title>\n <span style=\"font-size: 18px\" data-test-id=\"SPAN-g26ro2\">{{\n warehouseOrStorageLocationDialogType === 1 || warehouseOrStorageLocationDialogType === 3 ||\n warehouseOrStorageLocationDialogType === 5 || warehouseOrStorageLocationDialogType === 7\n ? t('warehouseSelection')\n : t('positionSelection')\n }}</span>\n </template>\n <div style=\"max-height: calc(70vh - 30px); overflow-y: auto\" data-test-id=\"DIV-8hXUWk\">\n <el-card v-loading=\"loading\" shadow=\"never\" class=\"card-body\" data-test-id=\"EL-CARD-JnZJyp\">\n <el-table\n ref=\"tableRef\"\n border\n class=\"commonTable\"\n :data=\"tableData\"\n height=\"35rem\"\n scrollbar-always-on\n header-row-class-name=\"tableHeader\"\n header-cell-class-name=\"tableHeaderCell\"\n row-key=\"id\"\n data-test-id=\"EL-TABLE-EShJ6C\"\n @select=\"handleSelect\"\n >\n <el-table-column\n fixed\n type=\"selection\"\n width=\"55\"\n reserve-selection\n data-test-id=\"EL-TABLE-COLUMN-4QzZr3\"\n />\n <el-table-column label=\"#\" type=\"index\" width=\"70\" align=\"center\" data-test-id=\"EL-TABLE-COLUMN-IpnIAa\">\n <template #default=\"scope\">\n <span data-test-id=\"SPAN-ynVfrU\">{{\n Number(scope.$index) + 1 + Number(pageSize * (currentPage - 1))\n }}</span>\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"(coulmnData, index) in tableHeaders\"\n :key=\"index\"\n :label=\"coulmnData.text\"\n :prop=\"coulmnData.value\"\n show-overflow-tooltip\n align=\"center\"\n min-width=\"200\"\n :data-test-id=\"`EL-TABLE-COLUMN-TRmes6-${index}`\"\n >\n <template #default=\"scope\">\n <span v-if=\"coulmnData.value === 'storage_type'\" :data-test-id=\"`SPAN-l0XZgl-${index}`\">\n {{ getI18nText(scope.row) }}\n </span>\n <span v-if=\"coulmnData.value === 'storage_name'\" :data-test-id=\"`SPAN-eSSNxB-${index}`\">\n {{\n scope.row.storage_id === 'default_storage' ? t('defaultStoragePreset') : scope.row.storage_name\n }}</span>\n <span v-if=\"coulmnData.value === 'inuse'\" :data-test-id=\"`SPAN-fNGsBE-${index}`\">\n {{ scope.row.inuse === 1 ? t('enable') : t('disable') }}\n </span>\n <span v-if=\"coulmnData.value === 'inUse'\" :data-test-id=\"`SPAN-hLxXyj-${index}`\">\n {{ scope.row.inUse === 1 ? t('enable') : t('disable') }}\n </span>\n </template>\n </el-table-column>\n </el-table>\n <pagination\n style=\"margin-top: 1rem\"\n :total=\"totalCount\"\n :current-page=\"currentPage\"\n :page-size=\"pageSize\"\n :selected-num=\"selectTableData ? 1 : 0\"\n :current-count=\"tableData.length\"\n has-selected\n data-test-id=\"PAGINATION-SO5Ktt\"\n @changePage=\"changePage\"\n />\n </el-card>\n </div>\n <template #footer>\n <span class=\"dialog-footer\" data-test-id=\"SPAN-0lUCz2\">\n <el-button data-test-id=\"EL-BUTTON-oXwkeh\" @click=\"warehouseOrStorageLocationDialogCancel\">{{\n t('Syn_cancel')\n }}</el-button>\n <el-button type=\"primary\" data-test-id=\"EL-BUTTON-q5SVLe\" @click=\"warehouseOrStorageLocationDialogConfirm\">\n {{ t('Syn_confirm') }}\n </el-button>\n </span>\n </template>\n </el-dialog>\n <newUnitsDialog ref=\"newUnitsRef\" data-test-id=\"NEWUNITSDIALOG-ANgpij\" @refreshData=\"refreshData\" />\n <manufacturerListDialog\n ref=\"manufacturerListRef\"\n data-test-id=\"MANUFACTURERLISTDIALOG-UInkjdkHJK-POM\"\n @selectedData=\"selectedManuFacturerData\"\n />\n </div>\n</template>\n<script setup>\nimport { ref, computed, watch, defineProps, defineEmits, reactive, nextTick } from 'vue';\nimport status from '../status';\nimport { objectToSelectList, getObjKeys } from '@/scriptFiles/common/objectDataProcessing';\nimport backendApiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport digitalRelated from '@/scriptFiles/common/digitalRelated';\nimport errorCode from '@/configFiles/errorCode.json';\nimport UTIF from 'utif';\nimport { ElMessage, ElMessageBox, ElLoading } from 'element-plus';\nimport defaultImage from '@/assets/image/defaultImage.png';\nimport { useI18n } from 'vue-i18n';\nimport { useRouter } from 'vue-router';\nimport dragDropTree from './../DragDropTree.vue';\nimport docCustomFieldForm from './docCustomFieldForm.vue';\nimport pagination from '@/components/Pagination.vue';\nimport newUnitsDialog from './newUnits.vue';\nimport manufacturerListDialog from '../manufacturerList/index.vue';\nimport materialFileBatchUploader from './materialFileBatchUploader.vue';\nimport axios from 'axios';\n\nconst props = defineProps({\n editStatus: Number,\n materialData: Object,\n passPartNumber: String,\n customColumnsReqData: Array,\n defaultSelection: Number,\n showSupportUnit: {\n type: Boolean,\n default: false,\n },\n isManufacturerOnlySelect: {\n type: Boolean,\n default: false,\n },\n});\nconst { t, locale } = useI18n();\nconst router = useRouter();\nconst emit = defineEmits(['updateData']);\nconst dialogIcon = ref('');\nconst dialogTitle = ref('');\nconst newUnitsRef = ref(null); // 新增单位\nconst activeStep = ref(0);\nconst closeType = {\n confirm: 0,\n close: 1,\n};\n\n// 获取仓库类别对应的i18n文本\nfunction getI18nText(row) {\n if(row.storage_type === '默认仓(预设)'){\n return t('defaultStoragePreset');\n }\n else if(row.storage_type === '在制品仓(预设)'){\n return t('Syn_inProcessWarehousePreset');\n }\n else if(row.storage_type === '非可用仓(预设-不计入可用库存)'){\n return t('Syn_nonAvailableWarehousePreset');\n }\n else{\n return row.storage_type;\n }\n}\n\n// 物料类别弹窗部分\nconst categoryDialog = ref(false);\nconst updateNode = ref([]); // 物料类别内容记录\nconst defaultProps = ref({\n children: 'childrenList',\n label: 'label',\n});\nconst defaultExpanded = ref([]); // 物料类别默认展开部分\nconst defaultSelection = ref(); // 物料类别默认选中内容\nconst loading = ref(null);\nconst loadingFun = (val) => {\n if (val && !loading.value) {\n loading.value = ElLoading.service({\n target: '.orderDialog',\n lock: true,\n });\n return;\n }\n loading.value?.close();\n loading.value = null;\n};\n\n// 物料档案组件更新的档案\nconst materialFileBatchUploaderUpdateFileList = ref([]);\nconst showFlag = ref(false);\nconst showDialog = ref(false);\nconst stockModelID = ref(null);\nconst stockModelList = ref(objectToSelectList(status.stockModel));\nconst customColumnsData = ref([]);\n// 表單資料\nconst formData = reactive({\n materialPartNumber: '', // 物料编号\n materialName: '', // 物料名称\n materialUnit: '', // 单位\n materialType: '', // 物料类型\n materialProperty: 0, // 物料属性\n processTemplate: null, // 工艺模板\n customer: null, // 客户\n materialState: 1, // 物料状态\n reorderPoint: '', // 在订购点\n inventoryReplenishmentAmount: '', // 库存回补量\n deliveryDay: '', // 交期\n consumptionAmount: '', // 耗用量\n replenishment: '', // 回补数量\n turnoverDays: '', // 周期天数\n adjustMagnification: '', // 调整倍率\n minimumOrderQuantity: '', // 批量倍数生产\n minimumPackQuantity: '', // 最小批量生产\n procurementNotProgress: '', // 采购未进\n\n isEnableDefaultWarehouse: false, // 库存设定-启用默认仓库\n isEnableShelfLifeManagement: false, // 库存设定-启用保质期管理\n outboundWarehouse: '', // 库存设定-出库仓库\n shelfLifeUnit: null, // 库存设定-保质期单位\n safetyStockInventorySetting: null, // 库存设定-安全库存\n outboundWarehouseLocation: '', // 库存设定-出库仓位\n qualityGuaranteePeriod: null, // 库存设定-保质期\n reorderPointInventorySetting: null, // 库存设定-再订货点\n storageWarehouse: '', // 库存设定-入库仓库\n storageSpace: '', // 库存设定-入库仓位\n defectiveStorageWarehouse: '',\n defectiveStorageSpace: '', // 库存设定-入库仓位\n purchaseStorageIdIn: '', //采购入库仓库\n purchaseStockSpaceIdIn: '', //采购入库仓位\n supportUnit: '', //辅助单位\n computeMode: 1, //小数处理\n});\nconst unitFormData = reactive({\n materialUnitRatio: 1,\n supportUnitRatio: 1,\n});\n// 库存设定-出库仓库数据对象\nconst outboundWarehouseObj = ref(null);\n// 库存设定-出库仓位数据对象\nconst outboundWarehouseLocationObj = ref(null);\n// 库存设定-入库仓库数据对象\nconst storageWarehouseObj = ref(null);\n// 库存设定-入库仓位数据对象\nconst storageSpaceObj = ref(null);\n// 库存设定-不良入库仓库数据对象\nconst defectiveStorageWarehouseObj = ref(null);\n// 库存设定-不良入库仓位数据对象\nconst defectiveStorageSpaceObj = ref(null);\n// 采购入库仓库数据对象\nconst purchaseStorageObj = ref(null);\n// 采购入库仓位数据对象\nconst purchaseStorageSpaceObj = ref(null);\n// 保质期单位数据\nconst shelfLifeUnitData = ref([\n {\n text: 'sun',\n value: 1,\n },\n {\n text: 'month',\n value: 2,\n },\n {\n text: 'year',\n value: 3,\n },\n]);\n// 出库仓位数据\nconst outboundWarehouseLocationData = ref([]);\n// 入库仓位数据\nconst storageSpaceData = ref([]);\n// 不良入库仓位数据\nconst defectiveStorageSpaceData = ref([]);\n// 采购入库仓位数据\nconst purchaseStorageSpaceData = ref([]);\nconst parentCategory = ref(t('')); // 物料类别名称\nconst materialSpec = ref(''); // 规格型号\nconst mainSupplierName = ref(''); // 主供应商商\nconst manufacturerId = ref(null); // 厂商ID\nconst batchNumberSettingID = ref(null); // 批次号\nconst materialDescribe = ref(''); // 说明\nconst disableText = ref(false);\nconst callApiSuccess = ref(false);\nconst selectTypeList = ref([]);\nconst requiredValidatePass = ref({\n trigger: ['blur', 'change'],\n validator: (rule, value, callback) => {\n if ((value && value < 0) || value === 0) {\n callback(new Error(t('valueNotBeNegativeAndZero')));\n }\n callback();\n },\n});\nconst numberRule = ref({\n trigger: ['blur', 'change'],\n validator: (rule, value, callback) => {\n if (value && value < 0) {\n callback(new Error(t('valueNotBeNegative')));\n }\n callback();\n },\n});\nconst requiredRules = ref({\n validator: (rule, value, callback) => {\n if (!value && value !== 0) {\n callback(new Error(t('requiredItemsNotEmpty')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n});\n\nconst warehouseRules = ref({\n validator: (rule, value, callback) => {\n if (formData.isEnableDefaultWarehouse && !value) {\n callback(new Error(t('requiredItemsNotEmpty')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n});\nconst shelfLifeUnitRules = ref({\n validator: (rule, value, callback) => {\n if (formData.isEnableShelfLifeManagement && !value) {\n callback(new Error(t('requiredItemsNotEmpty')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n});\nconst qualityGuaranteePeriodRules = ref({\n validator: (rule, value, callback) => {\n if (formData.isEnableShelfLifeManagement && !value) {\n callback(new Error(t('requiredItemsNotEmpty')));\n }\n if (formData.isEnableShelfLifeManagement && !/^[1-9]\\d{0,9}$/.test(value)) {\n callback(new Error(t('qualityGuaranteePeriodRulesText')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n});\nconst sixDigitDecimalVerificationRules = ref({\n validator: (rule, value, callback) => {\n if (value && !/^([1-9]\\d{0,9}|0)(\\.\\d{1,6})?$/.test(value)) {\n callback(new Error(t('sixDigitDecimalVerificationRulesText')));\n }\n if (value && value === '0') {\n callback(new Error(t('sixDigitDecimalVerificationRulesText')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n});\nconst conversionFactorRule = ref({\n trigger: ['blur', 'change'],\n validator: (rule, value, callback) => {\n if (!/^([1-9]\\d*(\\.\\d{1,3})?|([0](\\.([0][1-9]|[1-9]|[1-9]\\d{0,2}))))$/.test(value)) {\n callback(new Error(t('Syn_factorRuleText')));\n }\n callback();\n },\n});\nconst unitFormRules = computed({\n get() {\n return {\n materialUnitRatio: [conversionFactorRule.value],\n supportUnitRatio: [conversionFactorRule.value],\n };\n },\n});\nconst formRules = computed({\n get() {\n return {\n materialName: [\n {\n validator: (rule, value, callback) => {\n if (!value && value !== 0) {\n callback(new Error(t('requiredItemsNotEmpty')));\n }\n if (value !== value.trim()) {\n callback(new Error(t('materialNameNoSpace')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n },\n ],\n materialUnit: [requiredRules.value],\n materialType: [requiredRules.value],\n materialProperty: [requiredRules.value],\n materialState: [requiredRules.value],\n inventoryReplenishmentAmount: [requiredValidatePass.value],\n reorderPoint: [requiredValidatePass.value],\n minimumPackQuantity: [numberRule.value],\n minimumOrderQuantity: [numberRule.value],\n adjustMagnification: [numberRule.value],\n turnoverDays: [numberRule.value],\n replenishment: [numberRule.value],\n consumptionAmount: [numberRule.value],\n procurementNotProgress: [numberRule.value],\n deliveryDay: [\n {\n validator: (rule, value, callback) => {\n if ((value && value < 0) || value === 0) {\n callback(new Error(t('valueNotBeNegativeAndZero')));\n }\n if (value && digitalRelated.isFloat(parseFloat(value))) {\n callback(new Error(t('valueNotBeFloat')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n },\n ],\n\n outboundWarehouse: [warehouseRules.value],\n storageWarehouse: [warehouseRules.value],\n defectiveStorageWarehouse: [warehouseRules.value],\n purchaseStorageIdIn: [warehouseRules.value],\n shelfLifeUnit: [shelfLifeUnitRules.value],\n qualityGuaranteePeriod: [qualityGuaranteePeriodRules.value],\n safetyStockInventorySetting: [sixDigitDecimalVerificationRules.value],\n reorderPointInventorySetting: [sixDigitDecimalVerificationRules.value],\n \n supportUnit: [\n {\n validator: (rule, value, callback) => {\n if (value && value === formData.materialUnit) {\n callback(new Error(t('Syn_supportUnitCannotDuplicated')));\n }\n callback();\n },\n trigger: ['blur', 'change'],\n },\n ],\n };\n },\n});\n/**\n * 取得物料類型列表\n * @returns {Promise<void>}\n */\nasync function getMaterialTypeList() {\n await backendApiFunction.getMaterialType({}).then((res) => {\n if (res.data.code === errorCode.Success) {\n selectTypeList.value = res.data.content.data;\n selectTypeList.value.forEach((element) => {\n if (element.isSystemSetting) {\n Object.assign(element, {\n materialTypeName: t(`${getObjKeys(status.materialType, element.materialTypeID)}`),\n });\n }\n });\n }\n });\n}\n// 获取单位列表\nconst unitList = ref([]); // 下拉列表内的单位\nconst queryUnit = async (v) => {\n try {\n unitList.value = [];\n const { data } = await backendApiFunction.queryUnit({\n startIndex: 0,\n count: 20,\n materialUnitName: v,\n });\n if (data.code === 0) {\n unitList.value = data.content.data;\n return unitList.value;\n }\n } catch (error) {\n loadingFun(false);\n console.log(error);\n ElMessage.error(t('apiError'));\n }\n};\nconst materialUnitName = computed(() => {\n if (formData.materialUnit) {\n return unitList.value.find((item) => item.materialUnitId === formData.materialUnit)?.materialUnitName;\n } else {\n return '';\n }\n}); \nconst supportUnitName = computed(() => {\n if (formData.supportUnit) {\n return unitList.value.find((item) => item.materialUnitId === formData.supportUnit)?.materialUnitName;\n } else {\n return '';\n }\n});\n// 监听单位是否还存在系统\nconst refreshData = async () => {\n const unit = unitList.value.find((item) => item.materialUnitId === formData.materialUnit);\n const list = await queryUnit(unit?.materialUnitName);\n if (list.length === 0) {\n formData.materialUnit = null;\n }\n if (!materialUnitName.value) {\n formData.materialUnit = null;\n }\n if (!supportUnitName.value) {\n formData.supportUnit = null;\n }\n};\nconst docCustomFieldFormRef = ref(null);\n/**\n * 处理自定义栏位数据\n */\nasync function processingCustomData() {\n customColumnsData.value = props.customColumnsReqData.map((item) => ({\n ...item,\n value: null,\n options: [],\n }));\n if (props.materialData.docCustomFieldAndValues?.length) {\n for (let index = 0; index < customColumnsData.value.length; index += 1) {\n const element = customColumnsData.value[index];\n const findValItem = props.materialData.docCustomFieldAndValues.find(\n (ite) => ite.docCustomId === element.docCustomId,\n );\n if (findValItem) {\n element.value = findValItem.writeValue;\n element.fileData = [];\n if (findValItem.fieldTypeId === 5) {\n element.fileData = findValItem.fileData;\n }\n }\n }\n }\n docCustomFieldFormRef.value?.resetFields();\n}\nconst selectPropertyList = ref(objectToSelectList(status.materialProperty));\nconst selectStateList = ref(objectToSelectList(status.materialState));\n\nconst batchRuleList = ref([]);\n\nconst enabledIds = computed(() => batchRuleList.value.map((rule) => rule.batchNumberSettingID));\nconst batchShutdown = ref(false); // 记录原有的批次号是否停用\nconst batchFlagFun = (val) => {\n if (val === 0 || val) {\n return !enabledIds.value.includes(val);\n }\n return false;\n};\n/**\n * 取得批次號規則列表\n * @returns {Promise<void>}\n */\nasync function getBatchRuleList() {\n // showLoad.value = true;\n const input = {\n startIndex: batchRuleList.value.length,\n count: 200,\n isEnable: true,\n };\n await backendApiFunction.getBatchRuleList(input).then(async (res) => {\n if (res.data.code === errorCode.Success) {\n batchRuleList.value = [...res.data.content.data, ...batchRuleList.value];\n if (res.data.content.totalCount > batchRuleList.value.length) {\n await getBatchRuleList();\n }\n } else {\n ElMessage.error(t('batchQueryFailed'));\n }\n });\n}\n// 图片\nconst materialImage = ref(null);\nconst materialImageName = ref('');\n/*\n1:遮罩层存在预览/删除图标\n2:遮罩层存在预览图标\n3:不存在遮罩层\n*/\nconst filesImageFlag = ref(1);\nconst url = ref(defaultImage);\nconst acceptType = 'image/png, image/jpeg, .heic, image/bmp, image/gif, image/tiff, image/tif';\nconst imageFormat = ref('');\nconst fileImport = ref(null);\nfunction convertTiffBufferToDataURL(picBuffer) {\n // IFDs\" (image file directories)\n const imageFileDirectories = UTIF.decode(picBuffer);\n let images = imageFileDirectories;\n\n // find the largest image\n let maxArea = 0;\n let largestImage = images[0];\n if (imageFileDirectories[0].subIFD) images = images.concat(imageFileDirectories[0].subIFD);\n images.forEach((img) => {\n if (img.t258 !== null && img.t258.length >= 3) {\n const currentArea = img.t256 * img.t257;\n if (currentArea > maxArea) {\n maxArea = currentArea;\n largestImage = img;\n }\n }\n });\n\n UTIF.decodeImage(picBuffer, largestImage, imageFileDirectories);\n const rgbaData = UTIF.toRGBA8(largestImage);\n\n // transfer to canvas to retrieve dataURL\n const canvasWidth = largestImage.width;\n const canvasHeight = largestImage.height;\n const imageCanvas = document.createElement('canvas');\n imageCanvas.width = canvasWidth;\n imageCanvas.height = canvasHeight;\n const canvasContext = imageCanvas.getContext('2d');\n const uint8Array = new Uint8ClampedArray(rgbaData.buffer);\n const imageData = new ImageData(uint8Array, canvasWidth, canvasHeight);\n canvasContext.putImageData(imageData, 0, 0);\n return imageCanvas.toDataURL();\n}\nconst fileupload = ref(null);\nconst handleRemove = () => {\n filesImageFlag.value = 3;\n materialImage.value = null;\n materialImageName.value = '';\n fileupload.value.clearFiles();\n};\nconst dialogVisible = ref(false);\nconst handlePictureCardPreview = () => {\n dialogVisible.value = true;\n};\n/**\n * 預覽圖片\n */\nfunction previewImage(file) {\n filesImageFlag.value = 1;\n materialImage.value = file.raw;\n materialImageName.value = materialImage.value.name;\n imageFormat.value = '';\n if (materialImage.value !== null && materialImage.value !== undefined) {\n const tenMb = 10 * 1024 * 1024;\n if (materialImage.value.size > tenMb) {\n // openErrorDialog(t('mms_submitFail'), t('mms_tenMbLimit'));\n ElMessage.error(t('tenMbLimit'));\n fileImport.value = null;\n materialImage.value = null;\n return;\n }\n\n if (\n materialImage.value.type !== 'image/png' &&\n materialImage.value.type !== 'image/jpeg' &&\n materialImage.value.type !== 'image/tiff' &&\n materialImage.value.type !== 'image/tif' &&\n materialImage.value.type !== 'image/bmp' &&\n materialImage.value.type !== 'image/gif' &&\n materialImage.value.name.split('.')[1] !== 'HEIC'\n ) {\n // openErrorDialog(t('mms_submitFail'), t('mms_imgFormatError'));\n ElMessage.error(t('imgFormatError'));\n fileImport.value = null;\n materialImage.value = null;\n return;\n }\n\n if (materialImage.value.type === 'image/tiff' || materialImage.value.type === 'image/tif') {\n // transfer tiff to another formate that browser can support by UTIF.js\n\n // first we need \"array buffer\" from file,so use FileReader to read file\n const fileReader = new FileReader();\n fileReader.onload = (event) => {\n const arrayBuffer = event.target.result;\n // now we get arraybuffer ,then transfer it to dataURL\n url.value = convertTiffBufferToDataURL(arrayBuffer);\n };\n fileReader.onerror = (event) => {\n // openErrorDialog(t('mms_submitFail'), t('mms_imgFormatError'));\n ElMessage.error(t('imgFormatError'));\n fileImport.value = null;\n materialImage.value = null;\n console.error('FileReader error:', event.target.error);\n };\n fileReader.readAsArrayBuffer(materialImage.value);\n return;\n }\n if (materialImage.value.type === 'application/pdf') {\n const tempUrl = URL.createObjectURL(materialImage.value);\n window.open(tempUrl, materialImage.value.name);\n url.value = defaultImage;\n filesImageFlag.value = 3;\n // eslint-disable-next-line prefer-destructuring\n imageFormat.value = materialImage.value.type.split('/')[1];\n return;\n }\n if (\n materialImage.value.type !== 'image/jpg' &&\n materialImage.value.type !== 'image/jpeg' &&\n materialImage.value.type !== 'image/bmp' &&\n materialImage.value.type !== 'image/png' &&\n materialImage.value.type !== 'image/gif'\n ) {\n url.value = defaultImage;\n filesImageFlag.value = 3;\n // eslint-disable-next-line prefer-destructuring\n imageFormat.value = materialImage.value.type.split('/')[1];\n return;\n }\n url.value = URL.createObjectURL(materialImage.value);\n } else {\n url.value = defaultImage;\n filesImageFlag.value = 3;\n }\n}\nconst handleExceed = (files) => {\n previewImage({ raw: files[0] });\n};\n/**\n * 顯示圖片預覽\n */\nasync function showImagePreview() {\n imageFormat.value = '';\n const res = await backendApiFunction.getMaterialImage({\n materialPartNumber: props.materialData.materialPartNumber,\n });\n if (res.data.type === 'application/json') {\n url.value = defaultImage;\n filesImageFlag.value = 3;\n imageFormat.value = '';\n return;\n }\n if (\n res.data.type !== 'image/jpg' &&\n res.data.type !== 'image/jpeg' &&\n res.data.type !== 'image/bmp' &&\n res.data.type !== 'image/png' &&\n res.data.type !== 'image/gif'\n ) {\n url.value = defaultImage;\n filesImageFlag.value = 3;\n // eslint-disable-next-line prefer-destructuring\n imageFormat.value = res.data.type.split('/')[1];\n return;\n }\n const temp = res.headers['content-disposition'].split('=');\n const tempSplit = temp[1].split(';');\n const fileName = tempSplit[0];\n const blob = new Blob([res.data], { type: res.data.type });\n if (res.data.type === 'application/pdf') {\n const tempUrl = URL.createObjectURL(blob);\n window.open(tempUrl, fileName);\n return;\n }\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => {\n url.value = reader.result;\n filesImageFlag.value = 2;\n };\n}\nwatch(\n () => materialImage.value,\n () => {\n if (materialImage.value === null) {\n materialImageName.value = '';\n url.value = defaultImage;\n filesImageFlag.value = 3;\n }\n },\n);\n// 物料类别树状查询\nconst setKey = (val) => {\n if (val.expandStatus) {\n defaultExpanded.value.push(val.id);\n }\n if (val.childrenList.length !== 0) {\n val['label'] = val.materialCategoryName;\n val.childrenList.forEach((item) => {\n setKey(item);\n });\n } else {\n val['label'] = val.materialCategoryName;\n }\n return val;\n};\nconst queryCategory = async () => {\n const res = await backendApiFunction.materialCategoryTreeStructure();\n if (res.data.code === 0) {\n const arr = [];\n res.data.content.forEach((el) => {\n arr.push(setKey(el));\n });\n updateNode.value = arr;\n }\n};\n// 查询物料类别具体信息\nconst materialCategoryList = ref([]);\nconst queryMaterialCategory = async () => {\n const data = {\n startIndex: materialCategoryList.value.length,\n count: 200,\n };\n await backendApiFunction.getMaterialCategory(data).then(async (res) => {\n if (res.data.code === 0) {\n materialCategoryList.value = materialCategoryList.value.concat(res.data.content.data);\n if (res.data.content.totalCount > materialCategoryList.value.length) {\n await queryMaterialCategory();\n }\n }\n });\n};\n// 父级类别弹窗展示\nconst handleNodeItemId = ref(0); // 记录父级弹窗选择内容\nconst categoryFun = () => {\n categoryDialog.value = true;\n handleNodeItemId.value = defaultSelection.value;\n};\n// 物料类别弹窗点击事件\nconst handleNodeClick = (val) => {\n handleNodeItemId.value = val.id;\n};\n// 物料类别弹窗确认事件\nconst confirmCategory = () => {\n if (updateNode.value.length) {\n if (!handleNodeItemId.value) {\n ElMessage.error(t('chooseFinalCategory'));\n return;\n }\n defaultSelection.value = handleNodeItemId.value;\n const obj = materialCategoryList.value.find((el) => el.id === defaultSelection.value);\n if (obj.isLastLevel) {\n categoryDialog.value = false;\n parentCategory.value = obj.materialCategoryName;\n formData.materialType = obj.materialTypeId;\n } else {\n ElMessage.error(t('chooseFinalCategory'));\n }\n } else {\n categoryDialog.value = false;\n parentCategory.value = t('all');\n }\n};\n/**\n * 初始資料\n */\nasync function initialData() {\n disableText.value = true;\n dialogVisible.value = false;\n formData.materialPartNumber = props.materialData.materialPartNumber;\n formData.materialName = props.materialData.materialName;\n materialSpec.value = props.materialData.materialSpec;\n formData.materialUnit = props.materialData.materialUnit;\n formData.materialType = props.materialData.materialType;\n formData.materialProperty = props.materialData.materialProperty;\n formData.materialState = props.materialData.materialState;\n formData.reorderPoint = props.materialData.reorderPoint;\n formData.inventoryReplenishmentAmount = props.materialData.inventoryReplenishmentAmount;\n mainSupplierName.value = props.materialData.mainSupplierName;\n manufacturerId.value = props.materialData.manufacturerId;\n formData.deliveryDay = props.materialData.deliveryDay;\n materialDescribe.value = props.materialData.materialDescribe;\n batchNumberSettingID.value = enabledIds.value.includes(props.materialData.batchNumberSettingID)\n ? props.materialData.batchNumberSettingID\n : null;\n batchShutdown.value = batchFlagFun(props.materialData.batchNumberSettingID);\n formData.consumptionAmount = props.materialData.consumptionAmount;\n formData.procurementNotProgress = props.materialData.procurementNotProgress;\n stockModelID.value = props.materialData.stockModelID;\n formData.replenishment =\n props.materialData.replenishment === null ? null : await Number(props.materialData.replenishment);\n formData.turnoverDays =\n props.materialData.turnoverDays === null ? null : await Number(props.materialData.turnoverDays);\n formData.adjustMagnification =\n props.materialData.adjustMagnification === null ? null : await Number(props.materialData.adjustMagnification);\n formData.minimumOrderQuantity =\n props.materialData.minimumOrderQuantity === null ? null : await Number(props.materialData.minimumOrderQuantity);\n formData.minimumPackQuantity =\n props.materialData.minimumPackQuantity === null ? null : await Number(props.materialData.minimumPackQuantity);\n props.materialData.customValues?.forEach((ite) => {\n const index = customColumnsData.value.findIndex(\n (ele) => ele.customAttributeId === ite.customAttribute.customAttributeId,\n );\n if (index !== -1) {\n if (ite.customAttribute.displayType !== 1) {\n customColumnsData.value[index].value = ite.attributeValue;\n } else {\n customColumnsData.value[index].value = ite.attributeValue ? Number(ite.attributeValue) : null;\n }\n }\n });\n await showImagePreview();\n}\n/**\n * 更新物料圖片\n * @returns {Promise<void>}\n */\nasync function updateMaterialImage() {\n const fileData = new FormData();\n fileData.append('materialPartNumber', formData.materialPartNumber);\n fileData.append('materialPicture', materialImage.value);\n callApiSuccess.value = false;\n const res = await backendApiFunction.updateMaterialImage(fileData);\n if (res.data.code === errorCode.Success) {\n callApiSuccess.value = true;\n } else {\n ElMessage.error(t(res.data.message));\n // openErrorDialog(t('mms_submitFail'), t(res.data.message));\n }\n // showLoad.value = false;\n}\n/**\n * 新增物料\n * @param {object} input 物料資料\n * @returns {Promise<void>}\n */\nasync function addNewMaterial(input) {\n callApiSuccess.value = false;\n const res = await backendApiFunction.addMaterial(input);\n if (res.data.code === errorCode.Success) {\n callApiSuccess.value = true;\n } else {\n if (res.data.code === 140022) {\n formData.materialUnit = null;\n }\n ElMessage.error(t(res.data.message));\n // openErrorDialog(t('mms_submitFail'), t(res.data.message));\n }\n // showLoad.value = false;\n}\n/**\n * 編輯物料\n * @param {object} input 物料資料\n * @returns {Promise<void>}\n */\nasync function editMaterial(input) {\n callApiSuccess.value = false;\n const res = await backendApiFunction.editMaterial(input);\n if (res.data.code === errorCode.Success) {\n callApiSuccess.value = true;\n } else {\n ElMessage.error(t(res.data.message));\n // openErrorDialog(t('mms_submitFail'), t(res.data.message));\n }\n // showLoad.value = false;\n}\n/**\n * 關閉頁面\n * @param {number} value 關閉類型\n */\nconst materialName = ref('');\nfunction closePage(value) {\n showFlag.value = false;\n batchShutdown.value = false;\n activeStep.value = 0;\n filesImageFlag.value = 3;\n disableText.value = false;\n parentCategory.value = '';\n materialCategoryList.value = [];\n formData.materialPartNumber = '';\n formData.materialName = '';\n materialSpec.value = '';\n formData.materialUnit = '';\n formData.materialType = null;\n formData.materialProperty = 0;\n formData.materialState = 1;\n formData.reorderPoint = '';\n formData.inventoryReplenishmentAmount = '';\n mainSupplierName.value = '';\n manufacturerId.value = null;\n formData.deliveryDay = '';\n materialDescribe.value = '';\n materialImage.value = null;\n materialImageName.value = '';\n url.value = defaultImage;\n imageFormat.value = '';\n callApiSuccess.value = false;\n showDialog.value = false;\n batchNumberSettingID.value = null;\n // MRP\n formData.consumptionAmount = '';\n formData.procurementNotProgress = '';\n stockModelID.value = null;\n formData.replenishment = '';\n formData.turnoverDays = '';\n formData.adjustMagnification = null;\n formData.minimumOrderQuantity = null;\n formData.minimumPackQuantity = null;\n formData.isEnableDefaultWarehouse = false;\n formData.isEnableShelfLifeManagement = false;\n outboundWarehouseObj.value = null;\n outboundWarehouseLocationObj.value = null;\n storageWarehouseObj.value = null;\n storageSpaceObj.value = null;\n formData.shelfLifeUnit = null;\n formData.qualityGuaranteePeriod = null;\n formData.safetyStockInventorySetting = '';\n formData.reorderPointInventorySetting = '';\n formData.supportUnit = null;\n unitFormData.supportUnitRatio = 1;\n unitFormData.materialUnitRatio = 1;\n formData.computeMode = 1;\n if (fileupload.value) {\n fileupload.value.clearFiles();\n }\n if (value === closeType.confirm) {\n emit('updateData', materialName.value);\n }\n}\n/**\n * 將字串轉為字串,若不存在則回傳null\n * @param {string} value 要轉換的值\n * @returns {string} 轉換後的值\n */\nfunction toStringIfExist(value) {\n if (value === null || value === '') {\n return null;\n }\n return value.toString();\n}\n/**\n * 將數字轉為浮點數,若不存在則回傳null\n * @param {number} value 要轉換的值\n * @param {number} fractionDigits 小數點位數,預設為3\n * @returns {number} 轉換後的值\n */\nfunction toFloatIfExist(value, fractionDigits = 3) {\n if (value === null || value === '') {\n return null;\n }\n return parseFloat(value.toFixed(fractionDigits));\n}\n\nfunction getWriteValue(itemObj, value) {\n const valueStr = String(value);\n if (valueStr) {\n if (itemObj.fieldTypeId === 1) {\n if (valueStr.length <= 50) {\n return valueStr;\n }\n return '';\n }\n if (itemObj.fieldTypeId === 2) {\n if (valueStr.length <= 15) {\n return valueStr;\n }\n return '';\n }\n if (itemObj.fieldTypeId === 3) {\n if (valueStr && value > 0) {\n return JSON.stringify(Number(valueStr));\n }\n return '';\n }\n if (itemObj.fieldTypeId === 4) {\n if (!valueStr) return '';\n return value;\n }\n if (itemObj.fieldTypeId === 5) {\n return JSON.stringify(value);\n }\n return valueStr;\n }\n return '';\n}\n// 库存设定-出库仓库ref\nconst outboundWarehouseRef = ref(null);\n// 库存设定-保质期单位ref\nconst shelfLifeUnitRef = ref(null);\n// 库存设定-保质期ref\nconst qualityGuaranteePeriodRef = ref(null);\n// 库存设定-入库仓库ref\nconst storageWarehouseRef = ref(null);\n// 不良品入库仓库 ref\nconst defectiveStorageWarehouseRef = ref(null);\n// 采购入库仓库 ref\nconst purchaseStorageWarehouseRef = ref(null);\n// 库存设定-安全库存ref\nconst safetyStockInventorySettingRef = ref(null);\n// 库存设定-再订货点ref\nconst reorderPointInventorySettingRef = ref(null);\n// 库存设定-提交校验\nfunction inventorySettingSubmissionVerification() {\n outboundWarehouseRef.value?.validate();\n shelfLifeUnitRef.value?.validate();\n qualityGuaranteePeriodRef.value?.validate();\n storageWarehouseRef.value?.validate();\n purchaseStorageWarehouseRef.value?.validate();\n defectiveStorageWarehouseRef.value?.validate();\n safetyStockInventorySettingRef.value?.validate();\n reorderPointInventorySettingRef.value?.validate();\n if (formData.isEnableDefaultWarehouse) {\n if (!formData.outboundWarehouse) {\n return false;\n }\n if (!formData.storageWarehouse) {\n return false;\n }\n if (!formData.defectiveStorageWarehouse) {\n return false;\n }\n if (!formData.purchaseStorageIdIn) {\n return false;\n }\n }\n if (formData.isEnableShelfLifeManagement) {\n if (!formData.shelfLifeUnit) {\n return false;\n }\n if (!formData.qualityGuaranteePeriod) {\n return false;\n } else {\n if (!/^[1-9]\\d{0,9}$/.test(formData.qualityGuaranteePeriod)) {\n return false;\n }\n }\n }\n if (formData.safetyStockInventorySetting) {\n if (!/^([1-9]\\d{0,9}|0)(\\.\\d{1,6})?$/.test(formData.safetyStockInventorySetting)) {\n return false;\n }\n if (formData.safetyStockInventorySetting === '0') {\n return false;\n }\n }\n if (formData.reorderPointInventorySetting) {\n if (!/^([1-9]\\d{0,9}|0)(\\.\\d{1,6})?$/.test(formData.reorderPointInventorySetting)) {\n return false;\n }\n if (formData.reorderPointInventorySetting === '0') {\n return false;\n }\n }\n return true;\n}\n/**\n * 確認資料\n * @returns {Promise<void>}\n */\nconst addOrEditFormRef = ref(null);\nconst unitFormRef = ref(null);\nasync function confirmData() {\n const materialStockSetting = {}; // 库存设定参数对象\n const upsertDmlDocCustomValue = {\n docCode: 'doc_1',\n data: [],\n };\n if (addOrEditFormRef.value && docCustomFieldFormRef.value) {\n const rules = await addOrEditFormRef.value.validate((flag) => flag);\n const docCustomData = await docCustomFieldFormRef.value?.getData();\n if (!rules) {\n return;\n }\n if (props.showSupportUnit && formData.supportUnit) {\n const valideFactor = await unitFormRef.value.validate((flag) => flag);\n if (!valideFactor) {\n return;\n }\n }\n if (docCustomFieldFormRef.value?.getData) {\n if (!docCustomData) {\n return;\n } else {\n docCustomData.forEach((item) => {\n if (item.value || item.value === 0) {\n upsertDmlDocCustomValue.data.push({\n docCustomId: item.docCustomId,\n writeValue: getWriteValue(item, item.value),\n fileIds: item.fieldTypeId === 5 ? JSON.parse(item.value).map((ite) => ite.fileId) : [],\n isWorkReportReviewData: false,\n });\n }\n });\n }\n }\n }\n\n // 库存设定start\n if (!inventorySettingSubmissionVerification()) {\n return;\n }\n function getShelfLifeUnitParams(val) {\n if (val === 1) {\n return 2;\n }\n if (val === 2) {\n return 1;\n }\n if (val === 3) {\n return 0;\n }\n return null;\n }\n function getNumberTypeParams(val) {\n if (val && val !== '0') {\n return Number(val);\n }\n return null;\n }\n materialStockSetting.enableDefaultStorage = formData.isEnableDefaultWarehouse;\n materialStockSetting.storageIdFrom = outboundWarehouseObj.value ? outboundWarehouseObj.value.storage_id : null;\n materialStockSetting.storageNameFrom = outboundWarehouseObj.value ? outboundWarehouseObj.value.storage_name : null;\n materialStockSetting.stockSpaceIdFrom = outboundWarehouseLocationObj.value\n ? outboundWarehouseLocationObj.value.stockSpaceId\n : null;\n materialStockSetting.stockSpaceNameFrom = outboundWarehouseLocationObj.value\n ? outboundWarehouseLocationObj.value.stockSpace\n : null;\n materialStockSetting.storageIdTo = storageWarehouseObj.value ? storageWarehouseObj.value.storage_id : null;\n materialStockSetting.storageNameTo = storageWarehouseObj.value ? storageWarehouseObj.value.storage_name : null;\n materialStockSetting.stockSpaceIdTo = storageSpaceObj.value ? storageSpaceObj.value.stockSpaceId : null;\n materialStockSetting.stockSpaceNameTo = storageSpaceObj.value ? storageSpaceObj.value.stockSpace : null;\n materialStockSetting.defectiveStorageIdIn = defectiveStorageWarehouseObj.value ? defectiveStorageWarehouseObj.value.storage_id : null;\n materialStockSetting.defectiveStorageNameIn = defectiveStorageWarehouseObj.value ? defectiveStorageWarehouseObj.value.storage_name : null;\n materialStockSetting.defectiveStockSpaceIdIn = defectiveStorageSpaceObj.value ? defectiveStorageSpaceObj.value.stockSpaceId : null;\n materialStockSetting.defectiveStockSpaceNameIn = defectiveStorageSpaceObj.value ? defectiveStorageSpaceObj.value.stockSpace : null;\n \n materialStockSetting.purchaseStorageIdIn = purchaseStorageObj.value ? purchaseStorageObj.value.storage_id : null;\n materialStockSetting.purchaseStorageNameIn = purchaseStorageObj.value ? purchaseStorageObj.value.storage_name : null;\n materialStockSetting.purchaseStockSpaceIdIn = purchaseStorageSpaceObj.value ? purchaseStorageSpaceObj.value.stockSpaceId : null;\n materialStockSetting.purchaseStockSpaceNameIn = purchaseStorageSpaceObj.value ? purchaseStorageSpaceObj.value.stockSpace : null;\n materialStockSetting.enableExpSetting = formData.isEnableShelfLifeManagement;\n materialStockSetting.expUnit = getShelfLifeUnitParams(formData.shelfLifeUnit);\n materialStockSetting.expLength = getNumberTypeParams(formData.qualityGuaranteePeriod);\n materialStockSetting.saftyStock = getNumberTypeParams(formData.safetyStockInventorySetting);\n materialStockSetting.reorderPoint = getNumberTypeParams(formData.reorderPointInventorySetting);\n // 库存设定end\n\n loadingFun(true);\n const requireExpectedList = [\n formData.materialName,\n formData.materialUnit,\n formData.materialProperty,\n formData.materialState,\n ];\n if (requireExpectedList.some((value) => value === null || value === '')) {\n loadingFun(false);\n ElMessage.error(t('requiredNotEmpty'));\n return;\n }\n\n const positiveExpectedList = [\n formData.reorderPoint,\n formData.inventoryReplenishmentAmount,\n formData.deliveryDay,\n formData.consumptionAmount,\n formData.procurementNotProgress < 0,\n ];\n if (positiveExpectedList.some((value) => value < 0)) {\n ElMessage.error(t('negative'));\n loadingFun(false);\n return;\n }\n if (\n digitalRelated.isFloat(parseFloat(formData.deliveryDay)) === true &&\n formData.deliveryDay !== '' &&\n formData.deliveryDay !== null\n ) {\n ElMessage.error(t('valueNotBeFloat'));\n loadingFun(false);\n return;\n }\n if (formData.materialName !== formData.materialName.trim()) {\n ElMessage.error(t('materialNameNoSpace'));\n loadingFun(false);\n return;\n }\n if (stockModelID.value === status.stockModel.finishedProductMarket) {\n if (\n (!formData.replenishment && formData.replenishment !== 0) ||\n (!formData.turnoverDays && formData.turnoverDays !== 0)\n ) {\n ElMessage.error(`${t('replenishment')},${t('turnoverDays')}${t('requiredField')}`);\n loadingFun(false);\n return;\n }\n }\n // if (\n // // (\n // stockModelID.value === status.stockModel.finishedProductMarket && // 成品超市\n // (!formData.replenishment || !formData.turnoverDays)\n // // )\n // // || (\n // // stockModelID.value === status.stockModel.patchInventory // 尾數庫存\n // // && !formData.adjustMagnification\n // // )\n // // || (\n // // stockModelID.value === status.stockModel.adjustedInventory // 調節庫存\n // // && (!formData.minimumOrderQuantity || !formData.minimumPackQuantity)\n // // )\n // ) {\n // }\n materialName.value = formData.materialName;\n const input = {\n materialCategoryId: defaultSelection.value,\n materialPartNumber: formData.materialPartNumber,\n materialName: formData.materialName,\n materialSpec: toStringIfExist(materialSpec.value),\n materialUnit: unitList.value.find((ite) => ite.materialUnitId === formData.materialUnit)?.materialUnitName,\n materialType: formData.materialType || formData.materialType === 0 ? String(formData.materialType) : null,\n materialProperty: formData.materialProperty,\n materialState: formData.materialState,\n reorderPoint: toFloatIfExist(formData.reorderPoint),\n inventoryReplenishmentAmount: toFloatIfExist(formData.inventoryReplenishmentAmount),\n mainSupplierName: toStringIfExist(mainSupplierName.value),\n manufacturerId: manufacturerId.value,\n deliveryDay: !formData.deliveryDay ? null : formData.deliveryDay,\n materialDescribe: toStringIfExist(materialDescribe.value),\n empID: parseInt(localStorage.getItem('synFactoryEmpID'), 10),\n batchNumberSettingID:\n !batchNumberSettingID.value && batchShutdown.value\n ? props.materialData.batchNumberSettingID\n : batchNumberSettingID.value,\n consumptionAmount: !formData.consumptionAmount ? null : parseFloat(formData.consumptionAmount.toFixed(3)),\n procurementNotProgress: !formData.procurementNotProgress\n ? null\n : parseFloat(formData.procurementNotProgress.toFixed(3)),\n mrpInfo: {\n stockModelID: stockModelID.value,\n replenishment:\n formData.replenishment || formData.replenishment === 0\n ? parseFloat(Number(formData.replenishment).toFixed(3))\n : null,\n turnoverDays: formData.turnoverDays === '' ? null : formData.turnoverDays,\n // adjustMagnification: !formData.adjustMagnification\n // \t? null\n // \t: parseFloat(formData.adjustMagnification.toFixed(3)),\n adjustMagnification: 0,\n minimumOrderQuantity: !formData.minimumOrderQuantity\n ? null\n : parseFloat(formData.minimumOrderQuantity.toFixed(3)),\n minimumPackQuantity: !formData.minimumPackQuantity ? null : parseFloat(formData.minimumPackQuantity.toFixed(3)),\n },\n customValues: [],\n upsertDmlDocCustomValue,\n materialStockSetting,\n processTemplateId: formData.processTemplate || null, // 工序模板ID\n customerId: formData.customer || null, // 客户ID\n plmFildIds: materialFileBatchUploaderUpdateFileList.value.length\n ? materialFileBatchUploaderUpdateFileList.value.map((ite) => ite.fileId)\n : [], // 物料档案ID列表\n };\n if(props.showSupportUnit) {\n input.supportUnit = supportUnitName.value;\n input.materialUnitRatio = formData.supportUnit ? Number(unitFormData.materialUnitRatio) : 1;\n input.supportUnitRatio = formData.supportUnit ? Number(unitFormData.supportUnitRatio) : 1;\n input.computeMode = formData.supportUnit ? formData.computeMode : 1;\n }\n if (props.editStatus === 1) {\n await editMaterial(input);\n } else {\n await addNewMaterial(input);\n }\n\n if (callApiSuccess.value === true && materialImage.value !== null) {\n await updateMaterialImage();\n }\n\n if (callApiSuccess.value === false) {\n loadingFun(false);\n return;\n }\n\n if (props.editStatus === 2) {\n loadingFun(false);\n ElMessageBox.confirm(t('continueAddInfo'), t('requestSuccess'), {\n confirmButtonText: t('Syn_confirm'),\n cancelButtonText: t('Syn_cancel'),\n confirmButtonClass: 'el-button--success',\n type: 'success',\n center: true,\n showClose: false,\n })\n .then(() => {\n router.push({ path: `/productProcessManage?partNumber=${formData.materialPartNumber}` });\n })\n .catch(() => {\n closePage(closeType.confirm);\n });\n } else {\n loadingFun(false);\n ElMessage({\n message: t('requestSuccess'),\n type: 'success',\n });\n closePage(closeType.confirm);\n }\n}\n\n// 出库仓位禁用计算属性\nconst outboundWarehouseLocationIsDis = computed(() => {\n if (outboundWarehouseObj.value) {\n if (outboundWarehouseLocationData.value.length) {\n return false;\n }\n return true;\n }\n return true;\n});\n// 入库仓位禁用计算属性\nconst storageSpaceIsDis = computed(() => {\n if (formData.storageWarehouse) {\n if (storageSpaceData.value.length) {\n return false;\n }\n return true;\n }\n return true;\n});\n// 不良入库禁用计算属性\nconst defectiveStorageSpaceIsDis = computed(() => {\n if (formData.defectiveStorageWarehouse) {\n if (defectiveStorageSpaceData.value.length) {\n return false;\n }\n return true;\n }\n return true;\n});\n// 采购入库禁用计算属性\nconst purchaseStockSpaceIsDis = computed(() => {\n if (formData.purchaseStorageIdIn) {\n if (purchaseStorageSpaceData.value.length) {\n return false;\n }\n return true;\n }\n return true;\n});\n/**\n * 启用默认仓库的改变事件\n */\nfunction isEnableDefaultWarehouseChange() {\n outboundWarehouseObj.value = null;\n outboundWarehouseLocationObj.value = null;\n storageWarehouseObj.value = null;\n storageSpaceObj.value = null;\n defectiveStorageWarehouseObj.value = null;\n defectiveStorageSpaceObj.value = null;\n purchaseStorageObj.value = null;\n purchaseStorageSpaceObj.value = null;\n outboundWarehouseRef.value?.clearValidate();\n storageWarehouseRef.value?.clearValidate();\n defectiveStorageWarehouseRef.value?.clearValidate();\n purchaseStorageWarehouseRef.value?.clearValidate();\n}\n/**\n * 启用保质期管理的改变事件\n */\nfunction isEnableShelfLifeManagementChange() {\n formData.shelfLifeUnit = null;\n formData.qualityGuaranteePeriod = null;\n shelfLifeUnitRef.value?.clearValidate();\n qualityGuaranteePeriodRef.value?.clearValidate();\n}\n// 控制仓库或仓位列表弹框是否展示\nconst warehouseOrStorageLocationDialog = ref(false);\n// 标识打开仓库或仓位列表弹框的类型:1:出库仓库,2:出库仓位,3:入库仓库,4:入库仓位 5.不良品入库仓库 6.不良品入库仓位 7.采购入库仓库 8.采购入库仓位\nconst warehouseOrStorageLocationDialogType = ref(1);\n\nconst tableDataAll = ref([]);\nconst selectTableData = ref({});\nconst totalCount = ref(0);\nconst currentPage = ref(1);\nconst pageSize = ref(20);\nconst tableData = computed(() => {\n const list = JSON.parse(JSON.stringify(tableDataAll.value));\n const startIndex = (currentPage.value - 1) * pageSize.value;\n return list.splice(startIndex, pageSize.value);\n});\nconst typeHeader = ref([]);\nconst tableHeaders = computed(() => {\n if (warehouseOrStorageLocationDialogType.value === 1 || warehouseOrStorageLocationDialogType.value === 3 || warehouseOrStorageLocationDialogType.value === 5 || warehouseOrStorageLocationDialogType.value === 7) {\n // 出库/入库仓库\n return [\n {\n text: t('storageType'),\n value: 'storage_type',\n },\n {\n text: t('storage_id'),\n value: 'storage_id',\n },\n {\n text: t('storage_name'),\n value: 'storage_name',\n },\n {\n text: t('storage_address'),\n value: 'storage_address',\n },\n {\n text: t('storage_manager'),\n value: 'storage_manager_name',\n },\n {\n text: t('storage_phone'),\n value: 'storage_phone',\n },\n {\n text: t('isInUse'),\n value: 'inuse',\n },\n {\n text: t('remark'),\n value: 'remarks',\n },\n ];\n }\n // 出库/入库仓位\n if(props.showSupportUnit) {\n return [\n {\n text: t('storage_id'),\n value: 'storageId',\n },\n {\n text: t('storage_name'),\n value: 'storageName',\n },\n {\n text: t('storageLocationNumber'),\n value: 'stockSpaceId',\n },\n {\n text: t('storageLocationName'),\n value: 'stockSpace',\n },\n {\n text: t('Syn_inUse'),\n value: 'inUse',\n },\n ];\n } else {\n return [\n {\n text: t('storage'),\n value: 'storageName',\n },\n ...typeHeader.value,\n {\n text: t('isInUse'),\n value: 'inUse',\n },\n ];\n }\n});\nconst tableRef = ref(null);\nfunction handleSelect(selection, row) {\n tableRef.value.clearSelection(); // 清空所有选中\n if (selection.includes(row)) {\n // 当前行被选中\n tableRef.value.toggleRowSelection(row, true); // 重新选中当前行\n selectTableData.value = row;\n } else {\n selectTableData.value = null;\n }\n}\nfunction changePage(val) {\n currentPage.value = val.page;\n pageSize.value = val.size;\n}\n/**\n * 仓库或仓位列表弹框取消事件\n */\nfunction warehouseOrStorageLocationDialogCancel() {\n tableRef.value.clearSelection(); // 清空所有选中\n selectTableData.value = null;\n warehouseOrStorageLocationDialog.value = false;\n}\n/**\n * 仓库或仓位列表弹框确认事件\n */\nfunction warehouseOrStorageLocationDialogConfirm() {\n if (warehouseOrStorageLocationDialogType.value === 1) {\n outboundWarehouseObj.value = selectTableData.value;\n outboundWarehouseRef.value?.validate();\n } else if (warehouseOrStorageLocationDialogType.value === 2) {\n outboundWarehouseLocationObj.value = selectTableData.value;\n } else if (warehouseOrStorageLocationDialogType.value === 3) {\n storageWarehouseObj.value = selectTableData.value;\n storageWarehouseRef.value?.validate();\n } else if (warehouseOrStorageLocationDialogType.value === 4){\n storageSpaceObj.value = selectTableData.value;\n } else if (warehouseOrStorageLocationDialogType.value === 5) {\n defectiveStorageWarehouseObj.value = selectTableData.value;\n defectiveStorageWarehouseRef.value?.validate();\n } else if (warehouseOrStorageLocationDialogType.value === 6){\n defectiveStorageSpaceObj.value = selectTableData.value;\n } else if (warehouseOrStorageLocationDialogType.value === 7) {\n purchaseStorageObj.value = selectTableData.value;\n purchaseStorageWarehouseRef.value?.validate();\n } else if (warehouseOrStorageLocationDialogType.value === 8){\n purchaseStorageSpaceObj.value = selectTableData.value;\n }\n warehouseOrStorageLocationDialogCancel();\n}\n/**\n * 获取仓库数据方法\n */\nasync function StoreCountGetStorageSetting(isEditFeedback = false) {\n tableDataAll.value = [];\n totalCount.value = [];\n const params = {\n inUse: 1,\n storageId: '',\n storageManager: '',\n };\n try {\n const { data } = await backendApiFunction.StoreCountGetStorageSetting(params);\n if (data.code === 0) {\n tableDataAll.value = data.content;\n totalCount.value = data.content.length;\n }\n if (isEditFeedback) {\n outboundWarehouseObj.value =\n data.content.find((item) => item.storage_id === props.materialData.storageIdFrom) || null;\n storageWarehouseObj.value =\n data.content.find((item) => item.storage_id === props.materialData.storageIdTo) || null;\n defectiveStorageWarehouseObj.value =\n data.content.find((item) => item.storage_id === props.materialData.defectiveStorageIdIn) || null;\n purchaseStorageObj.value =\n data.content.find((item) => item.storage_id === props.materialData.purchaseStorageIdIn) || null;\n }\n } catch (e) {\n ElMessage.error(t('apiError'));\n }\n}\nasync function getLocationTable(storageId, isEditFeedback = false, type = null) {\n tableDataAll.value = [];\n totalCount.value = [];\n try {\n const { data } = await backendApiFunction.getLocationTable({\n storageSpaceId: 0,\n storageId,\n levelId: 0,\n });\n const dataList = [];\n if (data.code === 0) {\n data.content.forEach((listItem) => {\n const obj = {};\n Object.keys(listItem).forEach((key) => {\n if (key === 'inUse') {\n obj[key] = listItem[key];\n } else {\n obj[key] = listItem[key] || listItem[key] === 0 ? listItem[key] : '-';\n }\n });\n dataList.push(obj);\n });\n }\n if (warehouseOrStorageLocationDialogType.value === 1) {\n outboundWarehouseLocationData.value = dataList;\n } else if (warehouseOrStorageLocationDialogType.value === 3) {\n storageSpaceData.value = dataList;\n } else if (warehouseOrStorageLocationDialogType.value === 5) {\n defectiveStorageSpaceData.value = dataList;\n } else if (warehouseOrStorageLocationDialogType.value === 7) {\n purchaseStorageSpaceData.value = dataList;\n }\n tableDataAll.value = dataList;\n totalCount.value = dataList.length;\n if (isEditFeedback) {\n if (type === 1) {\n outboundWarehouseLocationObj.value =\n dataList.find((item) => item.stockSpaceId === props.materialData.stockSpaceIdFrom) || null;\n }\n if (type === 2) {\n storageSpaceObj.value =\n dataList.find((item) => item.stockSpaceId === props.materialData.stockSpaceIdTo) || null;\n }\n if (type === 3) {\n defectiveStorageSpaceObj.value =\n dataList.find((item) => item.stockSpaceId === props.materialData.defectiveStockSpaceIdIn) || null;\n }\n if (type === 4) {\n purchaseStorageSpaceObj.value =\n dataList.find((item) => item.stockSpaceId === props.materialData.purchaseStockSpaceIdIn) || null;\n }\n }\n } catch (error) {\n ElMessage.error(t('apiError'));\n }\n}\n/**\n * 获取仓位类型,得到仓位表头\n */\nconst getStorageLocationType = async () => {\n try {\n const { data } = await backendApiFunction.queryStorageSpaceType();\n if (data.code === 0) {\n typeHeader.value = data.content\n .filter((el) => el.in_use)\n .map((item) => ({\n text: item.storage_space_type,\n value: item.storage_space_type,\n }));\n }\n } catch (e) {\n console.log(e);\n }\n};\n/**\n * 出库仓库点击事件\n */\nasync function outboundWarehouseClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 1;\n loading.value = true;\n await StoreCountGetStorageSetting();\n loading.value = false;\n nextTick(() => {\n if (outboundWarehouseObj.value) {\n tableRef.value?.toggleRowSelection(outboundWarehouseObj.value, true); // 重新选中当前行\n }\n selectTableData.value = outboundWarehouseObj.value;\n });\n}\n/**\n * 出库仓位点击事件\n */\nfunction outboundWarehouseLocationClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 2;\n tableDataAll.value = outboundWarehouseLocationData.value;\n totalCount.value = tableDataAll.value.length;\n if (outboundWarehouseLocationObj.value) {\n tableRef.value?.toggleRowSelection(outboundWarehouseLocationObj.value, true); // 重新选中当前行\n }\n selectTableData.value = outboundWarehouseLocationObj.value;\n}\n/**\n * 入库仓库点击事件\n */\nasync function storageWarehouseClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 3;\n loading.value = true;\n await StoreCountGetStorageSetting();\n loading.value = false;\n nextTick(() => {\n if (storageWarehouseObj.value) {\n tableRef.value.toggleRowSelection(storageWarehouseObj.value, true); // 重新选中当前行\n selectTableData.value = storageWarehouseObj.value;\n }\n });\n}\n/**\n * 入库仓位点击事件\n */\nfunction storageSpaceClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 4;\n tableDataAll.value = storageSpaceData.value;\n totalCount.value = tableDataAll.value.length;\n if (storageSpaceObj.value) {\n tableRef.value?.toggleRowSelection(storageSpaceObj.value, true); // 重新选中当前行\n }\n selectTableData.value = storageSpaceObj.value;\n}\n// 不良品入库仓库点击\nasync function defectiveStorageWarehouseClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 5;\n loading.value = true;\n await StoreCountGetStorageSetting();\n loading.value = false;\n nextTick(() => {\n if (defectiveStorageWarehouseObj.value) {\n tableRef.value.toggleRowSelection(defectiveStorageWarehouseObj.value, true); // 重新选中当前行\n selectTableData.value = defectiveStorageWarehouseObj.value;\n }\n });\n}\n// 不良入库仓位\nfunction defectiveStorageSpaceClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 6;\n tableDataAll.value = defectiveStorageSpaceData.value;\n totalCount.value = tableDataAll.value.length;\n if (defectiveStorageSpaceObj.value) {\n tableRef.value?.toggleRowSelection(defectiveStorageSpaceObj.value, true); // 重新选中当前行\n }\n selectTableData.value = defectiveStorageSpaceObj.value;\n}\n// 采购入库仓库点击\nasync function purchaseStorageIdInClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 7;\n loading.value = true;\n await StoreCountGetStorageSetting();\n loading.value = false;\n nextTick(() => {\n if (purchaseStorageObj.value) {\n tableRef.value.toggleRowSelection(purchaseStorageObj.value, true); // 重新选中当前行\n selectTableData.value = purchaseStorageObj.value;\n }\n });\n \n}\n// 采购入库仓位\nfunction purchaseStockSpaceClick() {\n warehouseOrStorageLocationDialog.value = true;\n warehouseOrStorageLocationDialogType.value = 8;\n tableDataAll.value = purchaseStorageSpaceData.value;\n totalCount.value = tableDataAll.value.length;\n if (purchaseStorageSpaceObj.value) {\n tableRef.value?.toggleRowSelection(purchaseStorageSpaceObj.value, true); // 重新选中当前行\n }\n selectTableData.value = purchaseStorageSpaceObj.value;\n}\nwatch(\n () => outboundWarehouseObj.value,\n (val) => {\n outboundWarehouseLocationObj.value = null;\n if (val) {\n formData.outboundWarehouse = val.storage_id === 'default_storage' ? t('defaultStoragePreset') : val.storage_name;\n getLocationTable(val.storage_id);\n } else {\n formData.outboundWarehouse = '';\n outboundWarehouseLocationData.value = [];\n }\n },\n);\n\nwatch(\n () => outboundWarehouseLocationObj.value,\n (val) => {\n if (val) {\n formData.outboundWarehouseLocation = val.stockSpace;\n } else {\n formData.outboundWarehouseLocation = '';\n }\n },\n);\n\nwatch(\n () => storageWarehouseObj.value,\n (val) => {\n storageSpaceObj.value = null;\n if (val) {\n formData.storageWarehouse = val.storage_id === 'default_storage' ? t('defaultStoragePreset') : val.storage_name;\n getLocationTable(val.storage_id);\n } else {\n formData.storageWarehouse = '';\n storageSpaceData.value = [];\n }\n },\n);\n\nwatch(\n () => storageSpaceObj.value,\n (val) => {\n if (val) {\n formData.storageSpace = val.stockSpace;\n } else {\n formData.storageSpace = '';\n }\n },\n);\nwatch(\n () => defectiveStorageSpaceObj.value,\n (val) => {\n if (val) {\n formData.defectiveStorageSpace = val.stockSpace;\n } else {\n formData.defectiveStorageSpace = '';\n }\n },\n);\n\nwatch(\n () => defectiveStorageWarehouseObj.value,\n (val) => {\n defectiveStorageSpaceObj.value = null;\n if (val) {\n formData.defectiveStorageWarehouse = val.storage_id === 'default_storage' ? t('defaultStoragePreset') : val.storage_name;\n getLocationTable(val.storage_id);\n } else {\n formData.defectiveStorageWarehouse = '';\n defectiveStorageSpaceData.value = [];\n }\n },\n);\n\nwatch(\n () => purchaseStorageSpaceObj.value,\n (val) => {\n if (val) {\n formData.purchaseStockSpaceIdIn = val.stockSpace;\n } else {\n formData.purchaseStockSpaceIdIn = '';\n }\n },\n);\n\nwatch(\n () => purchaseStorageObj.value,\n (val) => {\n purchaseStorageSpaceObj.value = null;\n if (val) {\n formData.purchaseStorageIdIn = val.storage_id === 'default_storage' ? t('defaultStoragePreset') : val.storage_name;\n getLocationTable(val.storage_id);\n } else {\n formData.purchaseStorageIdIn = '';\n purchaseStorageSpaceData.value = [];\n }\n },\n);\nconst cancelTokenSource = ref(null); // 用于存储CancelToken的source\n// 工艺模板数据\nconst processTemplateList = ref([]);\n// 查询工艺模板数据方法\nasync function queryProcessTemplateDataRemoteMethod(query = '') {\n // 取消上一个请求(如果存在)\n if (cancelTokenSource.value) {\n cancelTokenSource.value.cancel('用户取消网络请求');\n }\n // 创建一个新的CancelToken的source\n cancelTokenSource.value = axios.CancelToken.source();\n processTemplateList.value = [];\n const data = {\n materialName: '',\n templateName: query,\n count: 200,\n startIndex: 0,\n };\n await backendApiFunction\n .queryTemplate(data, cancelTokenSource.value.token)\n .then((res) => {\n if (res.data.code === 0 && res.data.content.totalCount) {\n res.data.content.items.forEach((item) => {\n processTemplateList.value.push({ ...item });\n });\n }\n })\n .catch((error) => {\n if (axios.isCancel(error)) {\n console.warn('请求取消:', error.message);\n }\n });\n}\n\n// 客户数据\nconst customerList = ref([]);\n// 查询客户数据方法\nasync function queryCustomerDataRemoteMethod(query = '') {\n // 取消上一个请求(如果存在)\n if (cancelTokenSource.value) {\n cancelTokenSource.value.cancel('用户取消网络请求');\n }\n // 创建一个新的CancelToken的source\n cancelTokenSource.value = axios.CancelToken.source();\n customerList.value = [];\n const data = {\n customerCode: null,\n customerName: query,\n customerAbbreviation: null,\n count: 200,\n startIndex: 0,\n status: 1,\n };\n await backendApiFunction\n .getCustomerList(data, cancelTokenSource.value.token)\n .then((res) => {\n if (res.data.code === 0 && res.data.content.totalCount) {\n res.data.content.data.forEach((item) => {\n customerList.value.push({ ...item });\n });\n }\n })\n .catch((error) => {\n if (axios.isCancel(error)) {\n console.warn('请求取消:', error.message);\n }\n });\n}\nfunction updateFileList(fileList) {\n materialFileBatchUploaderUpdateFileList.value = fileList;\n}\n// 定义厂商列表弹窗ref\nconst manufacturerListRef = ref(null);\n/**\n * 打开厂商列表弹窗\n */\nfunction openManufacturerListDialog() {\n manufacturerListRef.value.open(props.isManufacturerOnlySelect);\n}\n/**\n * 选择厂商数据\n * @param {Array} list 选择的厂商数据(只能选择单行)\n */\nfunction selectedManuFacturerData(list) {\n mainSupplierName.value = list[0].manufacturerName;\n manufacturerId.value = list[0].manufacturerId;\n}\nconst editDialogFileList = ref([]); // 绑定的物料档案文件列表\nconst show = (flag) => {\n showDialog.value = true;\n nextTick(async () => {\n batchRuleList.value = [];\n formData.processTemplate = null;\n processTemplateList.value = [];\n formData.customer = null;\n customerList.value = [];\n editDialogFileList.value = [];\n loadingFun(true);\n await queryUnit();\n await queryCategory();\n await queryMaterialCategory();\n await getMaterialTypeList();\n await processingCustomData();\n await getBatchRuleList();\n if(!props.showSupportUnit) {\n await getStorageLocationType();\n }\n materialName.value = '';\n filesImageFlag.value = 3;\n formData.adjustMagnification = null;\n formData.minimumOrderQuantity = null;\n formData.minimumPackQuantity = null;\n\n formData.isEnableDefaultWarehouse = false;\n formData.isEnableShelfLifeManagement = false;\n outboundWarehouseObj.value = null;\n outboundWarehouseLocationObj.value = null;\n storageWarehouseObj.value = null;\n storageSpaceObj.value = null;\n defectiveStorageWarehouseObj.value = null;\n defectiveStorageSpaceObj.value = null;\n purchaseStorageObj.value = null;\n purchaseStorageSpaceObj.value = null;\n formData.shelfLifeUnit = null;\n formData.qualityGuaranteePeriod = null;\n if (props.editStatus === 1) {\n dialogIcon.value = 'mdi mdi-pencil';\n dialogTitle.value = t('editMaterial');\n defaultSelection.value = props.materialData.categoryId;\n // 回显工艺模板数据\n await queryProcessTemplateDataRemoteMethod(props.materialData.templateName);\n formData.processTemplate = props.materialData.processTemplateId;\n // 回显客户数据\n await queryCustomerDataRemoteMethod(props.materialData.customerName);\n formData.customer = props.materialData.customerId;\n // 回显物料档案数据\n editDialogFileList.value = props.materialData.materialFilePreferences.map((ite) => ({\n fileName: ite.plmFileName,\n fileId: ite.plmFileId,\n ...ite,\n }));\n if (props.materialData.categoryId === 0) {\n parentCategory.value = t('all');\n } else {\n const obj = materialCategoryList.value.find((el) => el.id === props.materialData.categoryId);\n parentCategory.value = obj.materialCategoryName;\n formData.materialType = obj.materialTypeId;\n }\n\n // 库存设定start\n formData.isEnableDefaultWarehouse = props.materialData.enableDefaultStorage;\n formData.isEnableShelfLifeManagement = props.materialData.enableExpSetting;\n // 如果开启“启用默认仓库”\n if (formData.isEnableDefaultWarehouse) {\n await StoreCountGetStorageSetting(true);\n warehouseOrStorageLocationDialogType.value = 1;\n await getLocationTable(props.materialData.storageIdFrom, true, 1);\n warehouseOrStorageLocationDialogType.value = 3;\n await getLocationTable(props.materialData.storageIdTo, true, 2);\n warehouseOrStorageLocationDialogType.value = 5;\n await getLocationTable(props.materialData.defectiveStorageIdIn, true, 3);\n warehouseOrStorageLocationDialogType.value = 7;\n await getLocationTable(props.materialData.purchaseStorageIdIn, true, 4);\n }\n const shelfLifeUnitMap = {\n 0: 3,\n 1: 2,\n 2: 1,\n };\n // 如果开启“启用保质期管理“\n if (formData.isEnableShelfLifeManagement) {\n formData.shelfLifeUnit = shelfLifeUnitMap[props.materialData.expUnit];\n formData.qualityGuaranteePeriod = String(props.materialData.expLength);\n }\n if (props.materialData.stockSettingSaftyStock) {\n formData.safetyStockInventorySetting = String(props.materialData.stockSettingSaftyStock);\n }\n if (props.materialData.stockSettingReorderPoint) {\n formData.reorderPointInventorySetting = String(props.materialData.stockSettingReorderPoint);\n }\n // 辅助单位\n if (props.materialData.supportUnitId) {\n formData.supportUnit = Number(props.materialData.supportUnitId);\n unitFormData.materialUnitRatio = props.materialData.materialUnitRatio || 1;\n unitFormData.supportUnitRatio = props.materialData.supportUnitRatio || 1;\n formData.computeMode = props.materialData.computeMode || 1;\n }\n // 库存设定end\n } else if (props.editStatus === 0) {\n dialogIcon.value = 'mdi mdi-plus-box';\n dialogTitle.value = t('addMaterial');\n if (flag) {\n defaultSelection.value = props.defaultSelection;\n if (props.defaultSelection === 0) {\n parentCategory.value = t('all');\n } else {\n const obj = materialCategoryList.value.find((el) => el.id === props.defaultSelection);\n parentCategory.value = obj.materialCategoryName;\n formData.materialType = obj.materialTypeId;\n }\n }\n formData.materialUnit = unitList.value.length ? unitList.value[0].materialUnitId : '';\n } else {\n dialogIcon.value = 'mdi mdi-plus-box';\n dialogTitle.value = t('addMaterial');\n formData.materialPartNumber = props.passPartNumber;\n }\n if (props.materialData.materialPartNumber !== undefined) {\n initialData();\n }\n loadingFun(false);\n });\n};\nwatch(\n () => stockModelID.value,\n (val) => {\n if (val) {\n formData.adjustMagnification = 0;updateFileList;\n formData.minimumOrderQuantity = 1;\n formData.minimumPackQuantity = 1;\n } else {\n formData.adjustMagnification = null;\n formData.minimumOrderQuantity = null;\n formData.minimumPackQuantity = null;\n }\n },\n);\n// 清除辅助校验\nfunction clearSupportUnit() {\n unitFormRef.value?.clearValidate();\n}\ndefineExpose({\n show,\n});\n</script>\n<style scoped>\n.dialog-footer button:first-child {\n margin-right: 10px;\n}\n\n.card-body {\n margin-bottom: 1rem;\n}\n\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s;\n}\n\n.fade-enter,\n.fade-leave-to {\n opacity: 0;\n}\n::v-deep .el-table__header .el-checkbox {\n display: none; /* 隐藏表头的 CheckBox */\n}\n</style>\n","<template>\n <global-dialog :dialog-options=\"dialogOptions\" data-test-id=\"GLOBAL-DIALOG-54p6ID\" @close=\"close\" @submit=\"submit\">\n <div style=\"height: 70vh\" data-test-id=\"DIV-hpiSxO\">\n <div v-loading=\"isShowlading\" style=\"height: 100%\" data-test-id=\"DIV-awKdvC\">\n <el-row :gutter=\"24\" style=\"height: 100%\" data-test-id=\"EL-ROW-SEp98B\">\n <el-col :span=\"4\" style=\"height: 100%\" data-test-id=\"EL-COL-fYvrUx\">\n <dragDropTree\n :default-props=\"defaultProps\"\n :default-expanded=\"defaultExpanded\"\n :update-node=\"updateNode\"\n :default-selection=\"defaultSelection\"\n :draggable=\"false\"\n :is-filter=\"false\"\n placeholder=\"menuName\"\n data-cy=\"DRAGDROPTREE-3Hj5uk\"\n data-test-id=\"DRAGDROPTREE-uYlqwu\"\n @handleNodeClick=\"handleNodeClick\"\n />\n </el-col>\n <el-col :span=\"20\" style=\"height: 100%\" data-test-id=\"EL-COL-HPB9U8\">\n <componentView style=\"height: 100%\" data-test-id=\"COMPONENTVIEW-OBJuuM\">\n <template #searchContent>\n <querySearch\n ref=\"searchRef\"\n :select-type-list=\"selectTypeList\"\n :select-state-list=\"selectStateList\"\n :select-property-list=\"selectPropertyList\"\n :stock-model-list=\"stockModelList\"\n :can-edit-headers=\"canEditHeaders\"\n :is-manufacturer-only-select=\"props.isManufacturerOnlySelect\"\n data-test-id=\"QUERYSEARCH-t7bX5y\"\n @saveData=\"saveData\"\n @filterSearch=\"search\"\n />\n </template>\n <template #headerContent>\n <el-button v-if=\"props.showAddMaterial\" link type=\"primary\" class=\"mr-2\" @click=\"addNewMaterial\">\n <i class=\"mdi mdi-plus\" style=\"margin-right: 0.5rem\" />\n {{ t('newMaterial') }}\n </el-button>\n </template>\n <template #tableContent>\n <el-table\n ref=\"multipleTableRef\"\n v-loading=\"tableLoading\"\n v-shift-select:multipleTableRef\n :data=\"tableData\"\n border\n height=\"100%\"\n :header-row-class-name=\"leftheaderStyle\"\n header-cell-class-name=\"tableHeaderCell\"\n row-key=\"materialID\"\n class=\"commonTable\"\n data-test-id=\"EL-TABLE-KxO26o\"\n @selection-change=\"handleSelectionChange\"\n @row-click=\"handleRowClick\"\n >\n <el-table-column\n fixed\n type=\"selection\"\n width=\"55\"\n reserve-selection\n data-test-id=\"EL-TABLE-COLUMN-7kTqie\"\n />\n <el-table-column\n label=\"#\"\n type=\"index\"\n width=\"70\"\n align=\"center\"\n show-overflow-tooltip\n data-test-id=\"EL-TABLE-COLUMN-lpcqqh\"\n >\n <template #default=\"scope\">\n <span data-test-id=\"SPAN-9IBuQg\">{{ calcIndex(scope.$index) }}</span>\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"coulmnData in tableHeaders\"\n :key=\"coulmnData.value\"\n :label=\"coulmnData.fieldProperty ? `${coulmnData.text}*` : coulmnData.text\"\n :fixed=\"coulmnData.freeze ? 'left' : false\"\n :prop=\"coulmnData.value\"\n :width=\"getColumnWidth(coulmnData.text, coulmnData.value, tableData, 200)\"\n show-overflow-tooltip\n align=\"center\"\n data-test-id=\"EL-TABLE-COLUMN-gdNToN\"\n >\n <template #header>\n <span v-if=\"String(coulmnData.text).length > 16\" data-test-id=\"SPAN-wDlahS\">\n <el-tooltip\n :content=\"coulmnData.text\"\n placement=\"top\"\n :enterable=\"false\"\n data-test-id=\"EL-TOOLTIP-beukGd\"\n >\n {{ coulmnData.text.slice(0, 16) }}...\n </el-tooltip>\n </span>\n <span v-else data-test-id=\"SPAN-NAQA99\"> {{ coulmnData.text }} </span>\n </template>\n <template #default=\"scope\">\n <el-tag\n v-if=\"coulmnData.value === 'materialState'\"\n :type=\"scope.row[coulmnData.value] ? 'success' : ''\"\n disable-transitions\n :data-test-id=\"`EL-TAG-EGp1Gz-${scope.$index}`\"\n >{{ scope.row[coulmnData.value] ? t('enable') : t('disable') }}</el-tag>\n <span v-else-if=\"coulmnData.value === 'materialCategoryName'\" :data-test-id=\"`SPAN-X05WYp-${scope.$index}`\">\n {{ scope.row[coulmnData.value] || t('all') }}\n </span>\n <span v-else-if=\"coulmnData.value === 'materialProperty'\" data-test-id=\"SPAN-VQU9Cj\">{{\n getMaterialAttribute(scope.row[coulmnData.value])\n }}</span>\n <span v-else-if=\"coulmnData.value === 'materialType'\" data-test-id=\"SPAN-LCz5KM\">{{\n scope.row[coulmnData.value] || scope.row[coulmnData.value] === 0\n ? getMaterialType(scope.row[coulmnData.value])\n : '--'\n }}</span>\n <span v-else-if=\"coulmnData.value === 'stockModelID'\" data-test-id=\"SPAN-3N7lIp\">\n {{ stockModelList.find((ite) => ite.value === scope.row[coulmnData.value])?.text || '--' }}\n </span>\n <span\n v-else-if=\"coulmnData.value === 'modiDate' || coulmnData.value === 'consDate'\"\n data-test-id=\"SPAN-dXLkvz\"\n >{{ dayjs(scope.row[coulmnData.value]).format('YYYY-MM-DD HH:mm:ss') }}</span>\n <span v-else-if=\"coulmnData.value === 'adjustMagnification'\" data-test-id=\"SPAN-dL2HKx\">{{\n tableItem(scope.row[coulmnData.value])\n }}</span>\n <span\n v-else-if=\"coulmnData.value === 'materialFilePreferences'\"\n :data-test-id=\"`SPAN-SrFzQ8-${scope.$index}`\"\n >\n <span\n v-if=\"getMaterialFileValue(scope.row.materialFilePreferences) !== '-'\"\n :data-test-id=\"`SPAN-AtTCmZ-${scope.$index}`\"\n @click=\"handleClickPreview(scope.row.materialFilePreferences)\"\n >\n <div\n v-for=\"(fileItem, fileItemIndex) in getMaterialFileValue(scope.row.materialFilePreferences)\"\n :key=\"fileItemIndex\"\n :style=\"\n getMaterialFileValue(scope.row.materialFilePreferences) === '-'\n ? {}\n : { color: '#125088', cursor: 'pointer' }\n \"\n class=\"ellipsis-single-line\"\n :data-test-id=\"`DIV-YHhYGn-${scope.$index}-${fileItemIndex}`\"\n >\n {{ fileItem }}\n <span\n v-if=\"fileItemIndex < getMaterialFileValue(scope.row.materialFilePreferences).length - 1\"\n :data-test-id=\"`SPAN-rY5kit-${scope.$index}-${fileItemIndex}`\"\n >\n ,\n </span>\n </div>\n </span>\n <span v-else :data-test-id=\"`SPAN-nTsmtc-${scope.$index}`\">--</span>\n </span>\n <span v-else-if=\"customHeader(coulmnData.value)\" span :data-test-id=\"`SPAN-EtUo3T-${scope.$index}`\">\n <span\n v-if=\"\n coulmnData.fieldTypeId === 5 &&\n getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues)\n \"\n :data-test-id=\"`SPAN-M1ENb2-${scope.$index}`\"\n >\n <div\n v-for=\"(fileItem, fileItemIndex) in getValue(\n coulmnData.customFieldId,\n scope.row.docCustomFieldAndValues,\n )\"\n :key=\"fileItemIndex\"\n class=\"ellipsis-single-line\"\n :data-test-id=\"`DIV-GDAhTa--${scope.$index}`\"\n >\n {{ fileItem\n }}<span\n v-if=\"\n fileItemIndex <\n getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues).length - 1\n \"\n :data-test-id=\"`SPAN-fih7DN-${scope.$index}`\"\n >,\n </span>\n </div>\n </span>\n <span\n v-else-if=\"\n coulmnData.fieldTypeId === 6 &&\n getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues) !== ''\n \"\n class=\"a-text-class\"\n :data-test-id=\"`SPAN-m8P9u2-${scope.$index}`\"\n @click=\"hyperLinkClick(coulmnData, scope.row.docCustomFieldAndValues)\"\n >\n {{ getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues) }}\n </span>\n <span\n v-else-if=\"\n coulmnData.fieldTypeId === 7 &&\n getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues) !== ''\n \"\n :data-test-id=\"`SPAN-OBlEbq-${scope.$index}`\"\n >\n <el-tag type=\"info\" style=\"margin-right: 0.5rem\" round :data-test-id=\"`EL-TAG-HiFEL5-${scope.$index}`\">\n {{ getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues) }}\n </el-tag>\n </span>\n <span\n v-else-if=\"\n coulmnData.fieldTypeId === 8 &&\n getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues) !== ''\n \"\n :data-test-id=\"`SPAN-pQsLHQ-${scope.$index}`\"\n >\n <el-tag\n v-for=\"(multipleItem, multipleItemIndex) in getValue(\n coulmnData.customFieldId,\n scope.row.docCustomFieldAndValues,\n )\"\n :key=\"multipleItemIndex\"\n type=\"info\"\n style=\"margin-right: 0.5rem\"\n round\n :data-test-id=\"`EL-TAG-bUZmu8-${scope.$index}`\"\n >\n {{ multipleItem }}\n </el-tag>\n </span>\n <span v-else :data-test-id=\"`SPAN-8vKJlI-${scope.$index}`\">\n {{ getValue(coulmnData.customFieldId, scope.row.docCustomFieldAndValues) || '--' }}\n </span>\n </span>\n <span v-else :data-test-id=\"`SPAN-La9Sw5-${scope.$index}`\">\n <span\n v-if=\"\n scope.row[coulmnData.value] === 0 &&\n coulmnData.value !== 'materialFounder' &&\n coulmnData.value !== 'modiUser'\n \"\n :data-test-id=\"`SPAN-fjdOV2-${scope.$index}`\"\n >\n 0\n </span>\n <span v-else :data-test-id=\"`SPAN-9oe7eR-${scope.$index}`\">{{ scope.row[coulmnData.value] || '--' }}</span>\n </span>\n </template>\n </el-table-column>\n <el-table-column\n fixed=\"right\"\n :label=\"t('Syn_action')\"\n min-width=\"120\"\n align=\"center\"\n data-test-id=\"EL-TABLE-COLUMN-mgu7ZR\"\n >\n <template #default=\"scope\">\n <el-tooltip\n :content=\"t('preview')\"\n placement=\"top\"\n :enterable=\"false\"\n data-test-id=\"EL-TOOLTIP-3eenCJ\"\n >\n <el-button link data-test-id=\"EL-BUTTON-CXmUBG\" @click=\"showImagePreview(item, scope.row)\">\n <v-icon class=\"mdi mdi-image\" data-test-id=\"V-ICON-N6ba3p\" />\n </el-button>\n </el-tooltip>\n </template>\n </el-table-column>\n </el-table>\n <pagination\n style=\"background-color: transparent; padding-bottom: 0.625rem; padding-top: 1.25rem\"\n :total=\"page.total\"\n :current-page=\"page.currentPage\"\n :page-size=\"page.pageSize\"\n :selected-num=\"selectPartNumber.length\"\n :has-selected=\"true\"\n :current-count=\"tableData.length\"\n :data-test-id=\"'PAGINATION-czpY5c'\"\n @changePage=\"changePage\"\n >\n </pagination>\n </template>\n </componentView>\n </el-col>\n </el-row>\n <el-image-viewer\n v-if=\"showImage\"\n hide-on-click-modal\n :url-list=\"[imageSrc]\"\n data-test-id=\"EL-IMAGE-VIEWER-8J5sCB\"\n @close=\"\n () => {\n showImage = false;\n }\n \"\n />\n <editAddDialog\n ref=\"editAddRef\"\n :edit-status=\"editStatus\"\n :material-data=\"materialData\"\n :pass-part-number=\"passPartNumber\"\n :custom-columns-req-data=\"customFieldsList\"\n :default-selection=\"defaultSelection\"\n :show-support-unit=\"props.showSupportUnit\"\n :is-manufacturer-only-select=\"props.isManufacturerOnlySelect\"\n data-test-id=\"EDITADDDIALOG-q6tYEw\"\n v-on:update-data=\"updateData\"\n />\n <!-- 物料档案预览弹窗组件 -->\n <FilePreview ref=\"PreviewDialogRef\" data-test-id=\"FILEPREVIEW-3LGgKa\" />\n </div>\n </div>\n </global-dialog>\n</template>\n\n<script setup>\nimport { computed, ref, nextTick, reactive, toRaw } from 'vue';\nimport pagination from '@/components/Pagination.vue';\nimport querySearch from './querySearch.vue';\nimport backendApiFunction from '@/scriptFiles/checkApiErrorMechanism';\nimport dayjs from 'dayjs';\nimport { useI18n } from 'vue-i18n';\nimport componentView from '@/components/pageContent.vue';\nimport { ElMessage } from 'element-plus';\nimport FilePreview from './component/filePreview.vue';\nimport dragDropTree from './DragDropTree.vue';\nimport editAddDialog from './component/editAndAddOrderDialog.vue';\nimport globalDialog from '../Layout/tools/GlobalDialog.vue';\nimport { getColumnWidth } from '@/utils/tableWidth.js';\n\nconst props = defineProps({\n // 编辑时传入的物料信息和操作类型(0:新增,1:编辑)\n editMaterialItem: {\n type: Object,\n default: () => ({\n materialItem: {},\n type: 0,\n }),\n },\n /**\n * 已经被选中的物料编号数组。\n * 用于防止重复选择物料,或做校验时使用。\n */\n editMaterialList: {\n type: Array,\n default: () => [],\n },\n /**\n * 父级物料编号。\n * 用于校验子物料不能选择为父物料自身。\n */\n parentMaterial: {\n type: String,\n default: () => '',\n },\n // 是否显示新增物料按钮\n showAddMaterial: {\n type: Boolean,\n default: false,\n },\n // 选择行是否单选\n isOnlySelect: {\n type: Boolean,\n default: false,\n },\n // 新增物料时,是否显示辅助单位\n showSupportUnit: {\n type: Boolean,\n default: false,\n },\n // 厂商是否单选\n isManufacturerOnlySelect: {\n type: Boolean,\n default: false,\n },\n});\nconst { t } = useI18n();\nconst tableLoading = ref(false); // table loading\nconst isShowlading = ref(false); // 整体 loading\n// 物料类别树状节点部分\nconst updateNode = ref([]); // 树状节点对应的列表内容\nconst defaultExpanded = ref([0]); // 列表是否默认展开\nconst defaultSelection = ref(0); // 默认选择内容\nconst defaultProps = ref({\n children: 'childrenList',\n label: 'label',\n});\n// 更多資料\nconst tableData = ref([]);\nconst page = ref({\n total: null,\n currentPage: 1,\n pageSize: 20,\n});\n// 表格固定字段\nconst headerList = computed(() => [\n {\n text: `${t('materialCategory')}*`,\n value: 'materialCategoryName',\n width: '100',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: `${t('productPartNumber')}*`,\n value: 'materialPartNumber',\n width: '100',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: `${t('productName')}*`,\n value: 'materialName',\n width: '100px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('spec'),\n value: 'materialSpec',\n width: '100px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: `${t('Syn_unity')}*`,\n value: 'materialUnit',\n width: '80px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: `${t('materialType')}`,\n value: 'materialType',\n width: '100px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: `${t('materialProperties')}*`,\n value: 'materialProperty',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: `${t('materialStatus')}*`,\n value: 'materialState',\n width: '90px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('processTemplate'),\n value: 'templateName',\n width: '120px',\n isShown: false,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('customer'),\n value: 'customerName',\n width: '120px',\n isShown: false,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('reorderPoint'),\n value: 'reorderPoint',\n width: '80px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('safetyStock'),\n value: 'stockSettingSaftyStock',\n width: '80px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('inventoryReplenishmentAmount'),\n value: 'inventoryReplenishmentAmount',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('manufacturer'),\n value: 'mainSupplierName',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('deliveryDate'),\n value: 'deliveryDay',\n width: '80px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('consumptionAmount'),\n value: 'consumptionAmount',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('procurementNotProgress'),\n value: 'procurementNotProgress',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('createTime'),\n value: 'consDate',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('creator'),\n value: 'materialFounder',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('updateTime'),\n value: 'modiDate',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('updatePerson'),\n value: 'modiUser',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n // {\n // text: t('batchNumberRule'),\n // value: 'batchRuleName',\n // width: '120px',\n // isShown: true,\n // disabled: false,\n // freeze: false,\n // customizeFields: false,\n // },\n {\n text: t('illustrate'),\n value: 'materialDescribe',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('materialFile'),\n value: 'materialFilePreferences',\n width: '120px',\n isShown: false,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('stockModel'),\n value: 'stockModelID',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('replenishment'),\n value: 'replenishment',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('turnoverDays'),\n value: 'turnoverDays',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('adjustMagnification'),\n value: 'adjustMagnification',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('minimumOrderQuantity'),\n value: 'minimumOrderQuantity',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n {\n text: t('minimumPackQuantity'),\n value: 'minimumPackQuantity',\n width: '120px',\n isShown: true,\n disabled: false,\n freeze: false,\n customizeFields: false,\n },\n]);\nconst searchRef = ref(null); // 初始化搜索维度调用方法\nconst searchData = ref({}); // 记录搜索维度的数据\nconst selectPartNumber = ref([]); // 表格行选择内容绑定\nconst multipleTableRef = ref(null); // 表格\nconst customFieldsList = ref([]); // 记录查询到的所有自定义字段\nconst getCustomList = ref([]); // 记录当前登陆者绑定了那些自定义字段\n// 列配置\nconst canEditHeaders = computed(() => {\n // 将表格固定字段以及自定义字段添加到对应的数组里面\n let allHeaderList = [...headerList.value, ...toRaw(customFieldsList.value)];\n const list = [];\n if (!getCustomList.value.length) {\n return allHeaderList;\n }\n allHeaderList.forEach((item) => {\n if (item.isCustom) {\n const filterItem = getCustomList.value.find((i) => i.columnKey === item.value);\n if (filterItem) {\n list.push({ ...item, ...filterItem });\n }else{\n list.push({\n columnKey: item.value,\n hideable: false,\n freeze: false,\n text: item.text,\n value: item.value,\n });\n }\n } else {\n const filterItem = getCustomList.value.find((i) => i.columnKey === item.value);\n if (filterItem) {\n list.push({ ...item, ...filterItem });\n } else {\n list.push({\n columnKey: item.value,\n hideable: false,\n freeze: false,\n text: item.text,\n value: item.value,\n });\n }\n }\n });\n return list.sort((a, b) => a.order - b.order);\n});\n// 页面表头\nconst tableHeaders = computed(() => {\n // 拼接表格固定字段以及自定义字段\n const allHeaderList = [...headerList.value, ...customFieldsList.value];\n // 字段显隐逻辑\n const list = [];\n if (getCustomList.value.length) {\n getCustomList.value.forEach((item) => {\n if (item.isShown) {\n const element = allHeaderList.find((el) => el.value === item.columnKey);\n list.push({\n ...element,\n });\n }\n });\n return [...list];\n }\n // 字段显隐逻辑结束\n return [...allHeaderList];\n});\n\nconst tempEmpList = ref([]);\n/**\n * 取得人員資訊\n * @param {Array} input 人員ID\n * @returns {Promise<void>}\n */\nconst getEmployeeInfo = async (input) => {\n console.log('input', input);\n return backendApiFunction\n .getCommonStaffList({\n empIDList: input,\n })\n .then((res) => {\n if (res.data.code === 0) {\n tempEmpList.value = res.data.content.data;\n }\n });\n};\nconst mapEmpID = async () => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const mapInputList = [];\n tableData.value.forEach((ele) => {\n if (\n ele.materialFounder !== null &&\n ele.materialFounder !== '' &&\n mapInputList.indexOf(ele.materialFounder) === -1\n ) {\n mapInputList.push(ele.materialFounder);\n }\n if (ele.modiUser !== null && ele.modiUser !== '' && mapInputList.indexOf(ele.modiUser) === -1) {\n mapInputList.push(ele.modiUser);\n }\n });\n await getEmployeeInfo(mapInputList);\n for (let i = 0; i < tempEmpList.value.length; i += 1) {\n for (let j = 0; j < tableData.value.length; j += 1) {\n if (tempEmpList.value[i].empID === tableData.value[j].materialFounder) {\n tableData.value[j].materialFounder = `${tempEmpList.value[i].empNumber} / ${tempEmpList.value[i].name}`;\n }\n if (tempEmpList.value[i].empID === tableData.value[j].modiUser) {\n tableData.value[j].modiUser = `${tempEmpList.value[i].empNumber} / ${tempEmpList.value[i].name}`;\n }\n }\n }\n resolve();\n });\n};\nconst materialName = ref(''); // 新增物料後傳回物料名稱\n// 查询页面表格数据\nconst getMaterialList = async () => {\n tableLoading.value = true;\n const body = searchData.value;\n body.count = page.value.pageSize;\n body.preciseSearchCondition.categoryId = defaultSelection.value;\n body.startIndex = page.value.currentPage !== 1 ? (page.value.currentPage - 1) * page.value.pageSize : 0;\n await backendApiFunction\n .getMaterialList(body)\n .then(async (res) => {\n if (res.data.code === 0) {\n if (res.data.content.data.length === 0 && page.value.currentPage !== 1) {\n // 如果該頁面不存在,回到第一頁\n page.value.currentPage = 1;\n await getMaterialList();\n } else {\n // 查詢成功,顯示列表與總數\n page.value.total = res.data.content.totalCount;\n tableData.value = [];\n res.data.content.data.forEach((item) => {\n if (materialName.value === item.materialName) {\n selectPartNumber.value = item;\n multipleTableRef.value.toggleRowSelection(item);\n }\n const customObj = {};\n item.customValues?.forEach((ite) => {\n let valueStr = ite.attributeValue;\n if (ite.customAttribute.displayType === 1) {\n valueStr = ite.attributeOptionName;\n }\n customObj[String(ite.customAttribute.customAttributeNumber)] = valueStr;\n });\n tableData.value.push({\n ...item,\n ...customObj,\n });\n });\n // 回显:如果外部传入了 editMaterialList(物料编号数组或对象数组),则在表格加载后选中对应行\n if (props.editMaterialList && props.editMaterialList.length && multipleTableRef.value) {\n const editList = props.editMaterialList.map((v) => (v && typeof v === 'object' ? v.materialPartNumber : v));\n multipleTableRef.value.clearSelection();\n tableData.value.forEach((row) => {\n if (editList.includes(row.materialPartNumber)) {\n multipleTableRef.value.toggleRowSelection(row);\n }\n });\n selectPartNumber.value = tableData.value.filter((row) => editList.includes(row.materialPartNumber));\n }\n materialName.value = '';\n await mapEmpID();\n tableLoading.value = false;\n }\n } else {\n tableLoading.value = false;\n ElMessage.error(t('requestError'));\n }\n })\n .catch(() => {\n tableLoading.value = false;\n ElMessage.error(t('apiError'));\n });\n};\nconst updateData = (val) => {\n materialName.value = val;\n searchRef.value.search(val);\n};\n// 序号列\nconst calcIndex = (index) => {\n return Number(index) + 1 + Number(page.value.pageSize * (page.value.currentPage - 1));\n};\nconst tableItem = (item) => {\n if (item || item === 0) {\n return item;\n }\n return '--';\n};\nconst customHeader = (v) => {\n return customFieldsList.value.find((el) => el.value === v);\n};\nconst search = async (val) => {\n searchData.value = val;\n await getMaterialList();\n};\n// 分页方法\nconst changePage = async (val) => {\n page.value.currentPage = val.page;\n page.value.pageSize = val.size;\n await getMaterialList();\n};\n\n// 物料类型\nconst selectTypeList = ref([]);\nconst getMaterialTypeList = async () => {\n await backendApiFunction\n .getAllMatreialTypeList({})\n .then((res) => {\n if (res.data.code === 0) {\n selectTypeList.value = res.data.content.data;\n }\n })\n .catch(() => {\n isShowlading.value = false;\n });\n};\n// 物料状态\nconst selectStateList = computed(() => [\n {\n text: t('deactivated'),\n value: 0,\n },\n {\n text: t('enable'),\n value: 1,\n },\n]);\n// 物料属性\nconst selectPropertyList = computed(() => [\n {\n text: t('selfMadePart'),\n value: 0,\n },\n {\n text: t('purchasePart'),\n value: 1,\n },\n {\n text: t('notHave'),\n value: 2,\n },\n]);\n// 库存模式\nconst stockModelList = computed(() => [\n {\n text: t('finishedProductMarket'),\n value: 1,\n },\n]);\n// 物料类型转换\nconst getMaterialType = (key) => {\n const obj = selectTypeList.value.find((el) => el.materialTypeID === Number(key));\n return obj.materialTypeName;\n};\n// 物料属性转换\nconst getMaterialAttribute = (key) => {\n const obj = selectPropertyList.value.find((el) => el.value === key);\n return obj.text;\n};\nconst showImage = ref(false);\nconst imageSrc = ref('');\n/**\n * 圖片瀏覽\n * @param {event} event 點擊事件\n * @param {object} item 資料\n * @param {object} item.item 資料\n */\nconst showImagePreview = async (event, item) => {\n tableLoading.value = true;\n const res = await backendApiFunction.getMaterialImage({\n materialPartNumber: item.materialPartNumber,\n });\n if (res.data.type === 'application/json') {\n tableLoading.value = false;\n ElMessage.error(t('materialNoImage'));\n return;\n }\n if (res.data.type.match(/image/) === null && res.data.type !== 'application/pdf') {\n tableLoading.value = false;\n ElMessage.error(t('typeNotSupport'));\n return;\n }\n tableLoading.value = false;\n const temp = res.headers['content-disposition'].split('=');\n const tempSplit = temp[1].split(';');\n const fileName = tempSplit[0];\n const blob = new Blob([res.data], { type: res.data.type });\n if (res.data.type === 'application/pdf') {\n const tempUrl = URL.createObjectURL(blob);\n window.open(tempUrl, fileName);\n return;\n }\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => {\n imageSrc.value = reader.result;\n showImage.value = true;\n };\n};\nfunction getValue(fieldId, list) {\n const field = customFieldsList.value.find((item) => item.customFieldId === fieldId);\n const i = list?.find((item) => item.docCustomId === fieldId);\n if (list && field && i) {\n // 日期\n if (field.fieldTypeId === 3) {\n if (i.writeValue && i.writeValue !== 'null') {\n return dayjs(Number(i.writeValue)).format('YYYY-MM-DD HH:mm:ss');\n }\n return '';\n }\n // 日期区间\n if (field.fieldTypeId === 4) {\n try {\n if (i.writeValue) {\n const val = JSON.parse(i.writeValue);\n return `${dayjs(val[0]).format('YYYY-MM-DD HH:mm:ss')} ~ ${dayjs(val[1]).format('YYYY-MM-DD HH:mm:ss')}`;\n }\n return '';\n } catch (error) {\n return '';\n }\n }\n // 附件\n if (field.fieldTypeId === 5) {\n return i.fileData.map((ite) => ite.fileName).length ? i.fileData.map((ite) => ite.fileName) : '';\n }\n // 复选框\n if (field.fieldTypeId === 8) {\n return i.writeValue ? JSON.parse(i.writeValue) : '';\n }\n return i.writeValue || '';\n }\n return '';\n}\n/**\n * 自定义字段是超链接时的点击事件\n * @param {object} item 自定义字段对象\n * @param {array} docCustomFieldAndValues 自定义字段所有数据\n */\n function hyperLinkClick(item, docCustomFieldAndValues) {\n const hyperLinkUrlStr = docCustomFieldAndValues.filter((ite) => ite.docCustomId === item.customFieldId)[0].writeValue;\n window.open(hyperLinkUrlStr, '_blank');\n}\n// 自定义字段查询\nconst getCustomColumns = async () => {\n const columnRes = await backendApiFunction.querySetting({\n docCode: 'doc_1',\n status: 1,\n fieldName: '',\n consDate: [],\n startIndex: 0,\n count: 100,\n });\n if (columnRes.data.code === 0) {\n customFieldsList.value = columnRes.data.content.data.map((item) => ({\n ...item,\n text: item.fieldName,\n value: String(item.docCustomId),\n width: '120px',\n isShown: true,\n isCustom: true,\n customFieldName: item.fieldName,\n customFieldId: item.docCustomId,\n displayType: item.fieldTypeId,\n customAttributeId: item.docCustomId,\n columnKey: String(item.docCustomId),\n }));\n }\n};\n// 列配置信息获取\nconst getColumnSetting = async () => {\n getCustomList.value = [];\n await backendApiFunction\n .queryColumnSettingNext({\n displayIds: [110001201],\n })\n .then((res) => {\n if (res.data.code === 0) {\n const dataList = res.data.content.data;\n if (dataList[0].displayId === 110001201 && dataList[0].configJson) {\n getCustomList.value = dataList[0].configJson.columnSetting;\n }\n } else {\n getCustomList.value = [];\n }\n })\n .catch(() => {\n isShowlading.value = false;\n getCustomList.value = [];\n });\n};\nconst saveData = async (val) => {\n tableLoading.value = true;\n const list = val.map((item, index) => ({\n ...item,\n order: index + 1,\n columnKey: item.isCustom ? item.columnKey : item.value,\n isShown: item.isShown,\n }));\n await backendApiFunction\n .updateColumnSettingNext({\n data: [\n {\n displayId: 110001201,\n configJson: {\n displayId: 110001201,\n columnSetting: list,\n },\n },\n ],\n })\n .then((res) => {\n tableLoading.value = false;\n if (res.data.code !== 0) {\n ElMessage.error(t(res.data.massage));\n } else {\n getCustomList.value = list;\n }\n })\n .catch(() => {\n tableLoading.value = false;\n });\n};\nconst passPartNumber = ref('');\nconst getQueryString = () => {\n const passUrl = new URL(window.location.href);\n passPartNumber.value = passUrl.searchParams.get('partNumber');\n};\n// 查询物料类别具体信息\nconst materialCategoryList = ref([]);\nconst queryMaterialCategory = async () => {\n const data = {\n startIndex: materialCategoryList.value.length,\n count: 20,\n };\n await backendApiFunction.getMaterialCategory(data).then(async (res) => {\n if (res.data.code === 0) {\n materialCategoryList.value = materialCategoryList.value.concat(res.data.content.data);\n if (res.data.content.totalCount > materialCategoryList.value.length) {\n await queryMaterialCategory();\n }\n }\n });\n};\n// 树状列表\n// 物料类别树状查询\nconst setKey = (val) => {\n if (val.expandStatus) {\n defaultExpanded.value.push(val.id);\n }\n if (val.childrenList.length !== 0) {\n val['label'] = val.materialCategoryName;\n val.childrenList.forEach((item) => {\n setKey(item);\n });\n } else {\n val['label'] = val.materialCategoryName;\n }\n return val;\n};\nconst queryCategory = async () => {\n isShowlading.value = true;\n const res = await backendApiFunction.materialCategoryTreeStructure();\n if (res.data.code === 0) {\n const arr = [];\n res.data.content.forEach((el) => {\n arr.push(setKey(el));\n });\n updateNode.value = arr;\n }\n isShowlading.value = false;\n};\nconst handleNodeClick = async (val) => {\n defaultSelection.value = val.id;\n await getMaterialList();\n};\nconst dialogOptions = reactive({\n title: '',\n dialogStatus: false,\n width: '85',\n height: '50',\n loading: false,\n});\nconst open = async (title) => {\n isShowlading.value = true;\n dialogOptions.dialogStatus = true;\n if(title) {\n dialogOptions.title = t(title);\n } else {\n dialogOptions.title = props.editMaterialItem.type ? t('selectMaterials') : t('modifyMaterial');\n }\n await queryCategory();\n getQueryString();\n await getMaterialTypeList();\n await getCustomColumns();\n await getColumnSetting();\n await queryMaterialCategory();\n isShowlading.value = false;\n nextTick(async () => {\n searchRef.value.search();\n });\n};\n// 得到物料档案显示值\nfunction getMaterialFileValue(list) {\n // 附件\n if (list?.length) {\n return list.map((ite) => ite.plmFileName).length ? list.map((ite) => ite.plmFileName) : '-';\n }\n return '-';\n}\n// 物料档案预览\nconst PreviewDialogRef = ref(null);\nconst handleClickPreview = (list) => {\n if (list && list.length) {\n PreviewDialogRef.value.handleOpenDialog(list);\n }\n};\nconst leftheaderStyle = () => {\n if (props.isOnlySelect) {\n return 'seltAllbtnDis';\n } else {\n return 'tableHeader';\n }\n};\nconst handleSelectionChange = (item) => {\n selectPartNumber.value = item;\n // 单选\n if (props.isOnlySelect && item.length > 1) {\n multipleTableRef.value.clearSelection();\n multipleTableRef.value.toggleRowSelection(item.pop());\n }\n};\n/**\n * 行点击\n * @param row 行数据\n */\nconst handleRowClick = (row) => {\n if (row) {\n multipleTableRef.value.toggleRowSelection(row, undefined, false);\n } else {\n multipleTableRef.value.clearSelection();\n }\n};\n// 新增\nconst editAddRef = ref(null); // 新增编辑\nconst editStatus = ref(0); // 新增编辑弹窗\nconst materialData = ref({});\nconst addNewMaterial = () => {\n const obj = materialCategoryList.value.find((el) => el.id === defaultSelection.value);\n materialData.value = {};\n editStatus.value = 0;\n materialName.value = '';\n if (obj?.isLastLevel) {\n editAddRef.value.show(true);\n return;\n }\n editAddRef.value.show(false);\n};\nconst emit = defineEmits(['selectedMate']);\nconst close = () => {\n dialogOptions.dialogStatus = false;\n selectPartNumber.value = [];\n searchRef.value.reset();\n multipleTableRef.value.clearSelection();\n};\n// 获取所选物料对应的productId\nconst submit = () => {\n if (selectPartNumber.value.length) {\n if (props.editMaterialList.length) {\n let errorDitle = [];\n selectPartNumber.value.forEach((el) => {\n if (props.editMaterialList.includes(el.materialPartNumber)) {\n errorDitle.push(el.materialPartNumber);\n }\n });\n if (errorDitle.includes(props.parentMaterial)) {\n ElMessage.error(`${props.parentMaterial}${t('parentMaterialNotAsChildMaterial')}`);\n return;\n }\n if (errorDitle.length) {\n ElMessage.error(`${errorDitle.toString()}${t('materialAlreadyExists')}`);\n return;\n }\n }\n isShowlading.value = true;\n emit('selectedMate', selectPartNumber.value, selectTypeList.value);\n close();\n isShowlading.value = false;\n } else {\n ElMessage.error(t('pleaseSelectData'));\n }\n};\ndefineExpose({ open });\n</script>\n\n<style scoped lang=\"scss\">\n@use '@/scss/base/table.scss';\n::v-deep .seltAllbtnDis > th > .cell > .el-checkbox {\n visibility: hidden;\n}\n.a-text-class {\n color: #409eff;\n cursor: pointer;\n text-decoration: underline;\n}\n.ellipsis-single-line {\n white-space: nowrap; /* 禁止换行 */\n overflow: hidden; /* 隐藏超出内容 */\n text-overflow: ellipsis; /* 显示省略号 */\n}\n</style>\n","// 组件库入口文件\n// 导入样式文件\nimport './scss/base/index.scss';\nimport './style.css';\n\n// 导出国际化配置\nexport * from './utils/i18n';\n\nimport SynColumnConfigNext from './components/columnConfigNext.vue';\nimport SynPageContent from './components/pageContent.vue';\nimport SynPagination from './components/Pagination.vue';\nimport SynCustomFilter from './components/customFilter/customFilter.vue';\nimport SynMainPageContent from './components/customTable/index.vue';\nimport SynTheWholeViewContent from './components/customTable/components/headerTabs/index.vue';\nimport SynButtonBlockContent from './components/customTable/components/headerOperation/index.vue';\nimport SynTableContent from './components/customTable/components/tableContent/index.vue';\nimport SynMaterialSelectDialog from './components/materialSelectDialog/index.vue';\n\n// 所有组件列表\nconst components = [\n SynColumnConfigNext,\n SynPageContent,\n SynPagination,\n SynCustomFilter,\n SynMainPageContent,\n SynTheWholeViewContent,\n SynButtonBlockContent,\n SynTableContent,\n SynMaterialSelectDialog,\n];\n\n// 组件名称列表(与 components 数组顺序对应)\nconst componentNames = [\n 'SynColumnConfigNext',\n 'SynPageContent',\n 'SynPagination',\n 'SynCustomFilter',\n 'SynMainPageContent',\n 'SynTheWholeViewContent',\n 'SynButtonBlockContent',\n 'SynTableContent',\n 'SynMaterialSelectDialog',\n];\n\n// 定义 install 方法,用于 Vue.use() 安装\nconst install = (app) => {\n components.forEach((component, index) => {\n const componentName = componentNames[index];\n // 尝试多种方式获取组件名,优先使用组件自身的 name\n const name = component.name || component.__name || componentName;\n if (name) {\n app.component(name, component);\n }\n });\n};\n\n// 如果通过 script 标签引入,自动安装\nif (typeof window !== 'undefined' && window.Vue) {\n install(window.Vue);\n}\n\n// 导出所有组件和 install 方法\nexport {\n SynColumnConfigNext,\n SynPageContent,\n SynPagination,\n SynCustomFilter,\n SynMainPageContent,\n SynTheWholeViewContent,\n SynButtonBlockContent,\n SynTableContent,\n SynMaterialSelectDialog,\n install,\n};\n\n// 默认导出,支持 Vue.use()\nexport default {\n install,\n};"],"names":["zhCn","English","zhTw","errorCodeTranslate","messages","zhCnFiles","elementZhCn","zhTwFiles","elementZhTw","enUsFiles","elementEn","i18n","createI18n","t","useI18n","props","__props","emit","__emit","parentDraggableItems","ref","childDraggableItems","handle","watch","parentSaveData","val","item","ElMessage","childSaveData","isFrozen","data","event","frozenCount","currentIndex","removed","firstNonFrozenIndex","i","lastFrozenIndex","dynamicClasses","onDragMove","evt","draggedIndex","draggedItem","relatedIndex","BUILD_TYPE","serviceRoute","productionRoute","devRoute","localDevRoute","originPath","protocol","hostname","port","getBaseApi","axios","privateCloudCoreApiFunction","config","getCoreBaseApi","coreApiList","params","id","type","baseApiFun","baseApi","baseApiList","permissionCode","mesApiFun","mesApi","mesApiList","mmsApiFun","mmsApi","mmsApiList","materialUnitID","sfcApiFun","sfcApi","sfcApiList","cancelTokenSource","ppmApiFun","ppmApi","ppmApiList","wmsApiFun","wmsApi","wmsApiList","pdmApiFun","str","pdmApi","pdmApiList","basicURL","body","apiFunction","delay","times","resolve","timeAddTime","JumpLogin","callRefreshAPI","action","prop","apiResult","response","errorCode","res","err","timeAdd","retryExecute","parameter","shouldAlert","result","error","createApiProxy","apis","args","allFunction","param","proxyObj","emits","pageInfo","changePage","handleSizeChange","handleCurrentChange","onMounted","componentKey","filterConditions","fieldSetting","isItDefault","otherFilterConditions","isTextLikeType","isSelectType","isDateType","isTextOperator","op","filterForm","filteredOptionsMap","searchKeywords","getRules","rules","rule","value","callback","handleNumberValidate","index","timePrecisionOptions","timePrecisionOptionsFunction","timeType","_a","dynamicFilteringOptions","pastOrFutureOptions","dayTypeOptions","startOrEndOptions","operatorOptions","operatorOptionsFunction","fieldTypeId","allowed","fieldSelectOptionsFunction","columnName","field","f","opts","opt","typeOptionsKey","key","fieldTypeFun","handleChangeColumn","handleChangeOperator","handleDateTimeDynamicFilteringValueChange","removeFilter","ElMessageBox","handleSelectFilter","query","allOptions","option","newConditions","initFilteredOptions","__expose","nextTick","form","isLoad","visible","canEditHeaders","computed","defaultFilterConditions","extraFilterConditions","fetchFilterConditions","code","message","content","addFilterCondition","getFieldSetting","docCustomSettings","fieldSettings","defaultFilterRef","extraFilterRef","loading","validate","defaultValidate","extraValidate","_b","handleSaveExtraFilter","it","num","handleSearch","defaultConditions","extraConditions","handleMoreFilter","popoverRef","referenceRef","handleClickOutside","popoverEl","referenceEl","isClickInside","isClickOnPopper","target","_c","_d","_f","_e","_h","_g","isClickInFilterCriteria","newVal","handleReset","stockViewQueryDataObj","searchObj","onBeforeUnmount","iconType","processFilterData","editableTabs","parsedArray","twoDimensionalArray","subItem","part","viewId","isShowClickTab","clickViewName","iconColors","moreTabs","editableTabsValue","drawerInitData","isEditing","isParsedFilterValid","parsedFilter","subArr","handleTabClick","tab","tabName","clickedTab","handleTabOperation2","tabItem","doDeleteOperation","handleViewOption","command","getEditableTabsValue","foundInArray1","foundInArray2","newTabs","safeTabs","optionFile","fieldSelectDataSource","NumberReg","v","__viteBrowserExternal","root","factory","module","this","CryptoJS","Math","undefined","crypto","global","require","require$$0","cryptoSecureRandomInt","create","F","obj","subtype","C","C_lib","Base","overrides","instance","properties","propertyName","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","thatByte","j","clone","nBytes","C_enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","doFlush","processedWords","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","nWordsReady","nBytesReady","offset","cfg","messageUpdate","hash","hasher","C_algo","X32WordArray","C_x64","high","low","x64Words","x64WordsLength","x32Words","x64Word","wordsLength","superInit","subInit","typedArray","typedArrayByteLength","utf16Chars","codePoint","utf16Str","utf16StrLength","swapEndian","word","map","base64Chars","byte1","byte2","byte3","triplet","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","bits1","bits2","bitsCombined","urlSafe","Hasher","T","MD5","M","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","a","b","c","d","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","x","s","n","W","SHA1","e","K","isPrime","sqrtN","factor","getFractionalBits","nPrime","SHA256","g","h","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","t1","t2","undef","require$$1","SHA224","X64Word","X64WordArray","X64Word_create","SHA512","H0","H1","H2","H3","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","ah","al","bh","bl","cl","dh","dl","eh","el","fh","fl","gh","gl","hh","hl","Wil","Wih","Wi","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Ki","Kih","Kil","t1l","t1h","t2l","t2h","require$$2","SHA384","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","y","newX","newY","LFSR","roundConstantMsw","roundConstantLsw","bitPosition","SHA3","state","nBlockSizeLanes","M2i","M2i1","lane","round","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","hr","zl","zr","sl","sr","ar","br","cr","dr","er","f1","f2","f3","f4","f5","rotl","z","hasherBlockSize","hasherBlockSizeBytes","oKey","iKey","oKeyWords","iKeyWords","innerHash","hmac","HMAC","PBKDF2","password","salt","derivedKey","blockIndex","derivedKeyWords","blockIndexWords","keySize","iterations","block","blockWords","blockWordsLength","intermediate","intermediateWords","EvpKDF","Base64","Cipher","xformMode","dataUpdate","finalProcessedData","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","ciphertext","finalProcessedBlocks","C_mode","BlockCipherMode","iv","CBC","xorBlock","thisBlock","C_pad","Pkcs7","nPaddingBytes","paddingWord","paddingWords","padding","modeCreator","mode","CipherParams","cipherParams","formatter","C_format","OpenSSLFormatter","openSSLStr","ciphertextWords","encryptor","cipherCfg","plaintext","format","C_kdf","OpenSSLKdf","ivSize","derivedParams","CFB","generateKeystreamAndEncrypt","keystream","CTR","Encryptor","counter","CTRGladman","incWord","b1","b2","b3","incCounter","OFB","ECB","lastBytePos","input","require$$3","require$$4","BlockCipher","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","x2","x4","x8","RCON","AES","keyWords","nRounds","ksRows","keySchedule","ksRow","invKeySchedule","invKsRow","s0","s1","s2","s3","t0","t3","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","keyBits","keyBitPos","subKeys","nSubKey","subKey","bitShift","invSubKeys","exchangeLR","exchangeRL","lBlock","rBlock","mask","TripleDES","key1","key2","key3","StreamCipher","RC4","keySigBytes","S","keyByteIndex","keyByte","generateKeystreamWord","keystreamWord","RC4Drop","C_","G","Rabbit","X","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","gx","ga","gb","RabbitLegacy","N","ORIG_P","ORIG_S","BLOWFISH_CTX","ctx","BlowFish_Encrypt","left","right","Xl","Xr","temp","BlowFish_Decrypt","BlowFishInit","keysize","Row","Col","keyIndex","Data1","Data2","Blowfish","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","loadin","loadingFun","ElLoading","dataFilterList","dataInfo","reactive","locale","activeMenu","viewTypeTitle","isType","formData","filterCriteriaRef","basicFormRef","options","queryDepartmentStaff","cascadeProperty","handleChange","newValues","ite","setPerson","List","allList","getViewFilterList","custom","open","close","getDepartmentStaff","list","validateField","getTimeLongitude","getTimeFormat","getDynamicFilter","sql","getFutureOptions","getDateType","calculateTimestamp","timestamp","dimension","unitMs","getSqlInfo","title","sqlTitle","dateTitle","endTime","dayjs","rangeSql","startSql","endSql","getIntervalInfo","getInfo","getFeild","getStringInfo","labelList","fieldOptions","parseDataFilter","filterObj","sqlList","fieldObj","ind","encryptionSql","saveView","filterValid","viewField","filterString","whereSql","createViewRef","draggableRef","allViews","idFromList","getViewTabList","addView","editFun","row","copyItem","handleDragEnd","deleteItem","dialogTitle","dialogAlertDetail","openDrawer","closeViewListDrawer","objectToExcelTitle","object","titleList","ele","objectToExcelBodyWithoutMap","table","header","stringReplaced","replaceTo","bodyTemp","sortedObject","head","objectToSelectList","getObjKeys","EXCEL","name","suffix","wscols","array","workBook","utils","workSheet","fileName","XLSX","arr","wsmerges","wsrow","file","contentSort","reader","reject","fileData","viewRecordDrawer","page","headers","operationTypes","operatorList","getEmployeeList","queryForm","tableData","tableLoading","getOperateDetail","fieldString","fields","first","second","third","fourth","typeMap","operations","getViewLogList","handleQuery","handleFMounted","arg","pageParam","calcIndex","getLogList","getAllLogData","dateConvert","time","getOptypeName","handleExport","tempList","element","tempObject","bodyWithoutMap","closeViewRecordDrawer","viewTabsRef","viewListRef","viewRecordRef","allViewTabs","getViewTabs","handleTabUpdate","openViewListDrawer","openViewRecordDrawer","updateViewTabs","newTabOrderList","dropdownRef","$emit","tableRef","selectedRows","childSelections","isAllExpanded","toggleAllExpand","onExpandChange","rows","expandedRows","tableColumns","getRowIndex","onSortChange","formatterLinkStyle","column","handleSelectionChange","selection","clearSelection","toggleRowSelection","selected","handlePageChange","onCellClick","cell","tableContentRef","dataList","selectList","currentPage","pageSize","total","paginationParams","complete","reload","onHeaderDragend","newWidth","_oldWidth","columns","elem","onChildHeaderDragend","onPageChange","onSelectionChange","handlePermissionDataUpdate","manufacturerCode","manufacturerName","status","manufacturerAbbreviation","show","reset","search","searchData","draggableItems","saveData","closeOnClickModal","defHeight","optionClick","btns","scope","dialogEvent","showDialog","getTextWidth","text","span","width","getColumnWidth","label","minWidth","contentWidths","textWidth","maxWidth","isShowlading","headerList","searchRef","selectData","multipleTableRef","getCustomList","allHeaderList","filterItem","tableHeaders","getManufacturerList","backendApiFunction","getColumnSetting","passPartNumber","getQueryString","passUrl","dialogOptions","isOnlySelect","flag","leftheaderStyle","submit","materialPartNumber","materialPartName","materialState","materialType","materialProperty","mainSupplierName","stockModelID","dropdownMaterial","showClick","manufacturerListRef","openManufacturerListDialog","selectedManuFacturerData","previewUrl","imgViewRef","previewData","tableAlign","handleOpenDialog","docCustomId","fileType","isDisabled","handleClickPreview","plmFileVersionId","pdfBlob","tempUrl","expanded","treeData","filterText","treeRef","highlightedNodeId","draggingNode","dropTargetNode","handleDragStart","draggingNodeData","handleDragEnter","dropNodeData","handleDragLeave","handleDragOver","handleNodeExpand","handleNodeCollapse","allowDrop","child","handleDrop","filterNode","changeFilter","handleNodeClick","workOrderStatus","processOrderStatus","productionOrderStatus","priorityStatus","processingType","softwareSnStatus","stockModel","digitalRelated","TYPED_OK","_has","exports","sources","source","p","buf","size","fnTyped","dest","src","src_offs","len","dest_offs","chunks","l","pos","chunk","fnUntyped","on","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","zero","STORED_BLOCK","STATIC_TREES","DYN_TREES","MIN_MATCH","MAX_MATCH","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","d_code","dist","put_short","w","send_bits","length","send_code","tree","bi_reverse","bi_flush","gen_bitlen","desc","max_code","stree","has_stree","extra","base","m","bits","xbits","overflow","gen_codes","bl_count","next_code","tr_static_init","init_block","bi_windup","copy_block","smaller","depth","_n2","_m2","pqdownheap","k","compress_block","ltree","dtree","lc","lx","build_tree","node","scan_tree","prevlen","curlen","nextlen","count","max_count","min_count","send_tree","build_bl_tree","max_blindex","send_all_trees","lcodes","dcodes","blcodes","rank","detect_data_type","black_mask","static_init_done","_tr_init","_tr_stored_block","stored_len","last","_tr_align","_tr_flush_block","opt_lenb","static_lenb","_tr_tally","trees","adler32","adler","adler32_1","makeTable","crcTable","crc32","crc","end","crc32_1","msg","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_OK","Z_STREAM_END","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_DEFAULT_STRATEGY","Z_DEFLATED","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","strm","flush_pending","flush_block_only","put_byte","putShortMSB","read_buf","start","longest_match","cur_match","chain_length","scan","match","best_len","nice_match","limit","_win","wmask","prev","strend","scan_end1","scan_end","fill_window","_w_size","more","deflate_stored","flush","max_block_size","max_start","deflate_fast","hash_head","bflush","deflate_slow","max_insert","deflate_rle","deflate_huff","Config","good_length","max_lazy","nice_length","max_chain","func","configuration_table","lm_init","DeflateState","deflateResetKeep","deflateReset","ret","deflateSetHeader","deflateInit2","level","method","windowBits","memLevel","strategy","wrap","deflateInit","deflate","old_flush","beg","level_flags","bstate","deflateEnd","deflateSetDictionary","dictionary","dictLength","avail","next","tmpDict","deflate_1","STR_APPLY_OK","STR_APPLY_UIA_OK","_utf8len","q","strings","c2","m_pos","str_len","buf_len","buf2binstring","max","out","c_len","utf16buf","ZStream","zstream","zlib_deflate","toString","Z_SYNC_FLUSH","Deflate","dict","chunkSize","_mode","deflator","deflateRaw","gzip","BAD","TYPE","inffast","_in","_out","dmax","wsize","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","from","from_source","output","top","dolen","dodist","MAXBITS","ENOUGH_LENS","ENOUGH_DISTS","CODES","LENS","DISTS","lbase","lext","dbase","dext","inftrees","lens","lens_index","codes","table_index","work","sym","min","curr","drop","used","huff","incr","fill","base_index","offs","extra_index","here_bits","here_op","here_val","inflate_fast","inflate_table","Z_TREES","Z_NEED_DICT","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","DEF_WBITS","zswap32","InflateState","inflateResetKeep","inflateReset","inflateReset2","inflateInit2","inflateInit","virgin","lenfix","distfix","fixedtables","updatewindow","copy","inflate","put","have","last_bits","last_op","last_val","hbuf","order","inf_leave","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","inflate_1","constants","GZheader","gzheader","zlib_inflate","Inflate","next_out_utf8","tail","utf8str","allowBufError","inflator","inflateRaw","assign","pako","pako_1","UTIF","log","V","D","P","B","r","J","A","E","Q","u","L","I","R","O","U","Y","rgba","metadata","idf","prfx","img","ifds","bin","ifdo","noffs","buff","noff","cmpr","fo","bipp","bipl","soff","bcnt","bytes","bilen","tw","th","tx","ty","tbuff","rps","off","tgt","toff","bps","noc","bpp","bpl","roff","ntoff","nv","prm","getbithuff","diff","inp","src_length","raw_width","height","tiff_bps","arw2","col","sum","ljpeg_diff","lim","clr","b0","pix","imax","imin","sh","bit","dp","imgs","nikon_tree","split","make_decoder","mn","md","mdo","ver0","ver1","vpred","step","csize","shl","hpred","bti","dt","o","nbits","zero_after_ff","bitbuf","vbits","si","tables","tlen","SOI","EOI","boff","olen","rst","parser","decoded","DQT","DHT","DRI","SOF0","SOS","joff","sosMarker","isTiled","jpgIchgFmt","jifoff","jpgIchgFmtLen","jiflen","soffTag","ycbcrss","ssx","ssy","spp","jpgresint","ooff","qtables","htables","nc","sofpos","tmptab","tmpoff","soslen","sosoff","dlen","buffoff","jpegData","sa","ta","d2","d3","qoff","px","msk","addKeys","inc","termW","termB","makeW","makeB","makeA","lensW","lensB","slen","wrd","line","pline","a0","a1","toRead","is1D","tb","tn","chr","tln","totl","chrl","ClearCode","EoiCode","Code","OldCode","cd","nit","nil","so","to","debug","cnt","ifd","tag","voff","o0","oarr","subfd","subsub","keys","eoff","ki","area","qarea","intp","io","qi","smpls","ti","mi","gotAlpha","sufs","suff","xhr","vsns","ma","cnv","imgd","xoff","yoff","xlim","ylim","tof","sof","Z","$","defaultImage","toolFun","numb","getDay","year","month","date","hours","minutes","seconds","wid","widthNum","url","_sfc_main","UploadFilled","expose","cfForm","uploadFileMaxSize","uploadRef","customFieldIdConfig","getType","getItemValue","returnValue","formatItemValue","inspectionAttachmentsAreRequired","attachmentArr","getData","cfFormValidate","valid","resetFields","getArrOfJSONStr","JSONStr","uploadHandleChange","uploadFile","customItem","fileDownSerialize","link","showImage","imageSrc","viewFileItem","outItem","fileExtension","dowFileItem","clearFileItem","isShowViewIconFun","imageExtensions","_hoisted_7","_hoisted_10","_hoisted_11","_hoisted_12","_createBlock","_component_el_form","$setup","_withCtx","_createVNode","_component_el_row","_openBlock","_createElementBlock","_Fragment","_renderList","_component_el_col","$props","_component_el_form_item","_component_el_tooltip","_hoisted_1","_createElementVNode","_createTextVNode","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_createCommentVNode","_component_el_input","$event","_component_el_date_picker","_hoisted_5","_component_el_upload","_component_el_icon","_component_upload_filled","_hoisted_6","_hoisted_8","_hoisted_9","_component_el_select","_component_el_option","_component_el_image_viewer","_cache","newunits","queryUnit","queryStartIndex","addMaterialType","regex","closePage","deleteRow","previewFile","blob","selectedFiles","changeTimer","materialFileUploadValue","isProcessing","remainingQuota","addPlmFile","ress","isHasFile","submitAllFiles","uploadList","fileSize","tenMKB","repeatFiles","fileNameList","noRepeatFiles","materialFileUploadHandleChange","_","fileList","latestFiles","handleExceed","handleUploadClick","supportPreview","extension","showPreview","fileDataObj","itemFileType","filestream","href","acceptType","router","useRouter","dialogIcon","newUnitsRef","activeStep","closeType","getI18nText","categoryDialog","updateNode","defaultProps","defaultExpanded","defaultSelection","materialFileBatchUploaderUpdateFileList","showFlag","stockModelList","customColumnsData","unitFormData","outboundWarehouseObj","outboundWarehouseLocationObj","storageWarehouseObj","storageSpaceObj","defectiveStorageWarehouseObj","defectiveStorageSpaceObj","purchaseStorageObj","purchaseStorageSpaceObj","shelfLifeUnitData","outboundWarehouseLocationData","storageSpaceData","defectiveStorageSpaceData","purchaseStorageSpaceData","parentCategory","materialSpec","manufacturerId","batchNumberSettingID","materialDescribe","disableText","callApiSuccess","selectTypeList","requiredValidatePass","numberRule","requiredRules","warehouseRules","shelfLifeUnitRules","qualityGuaranteePeriodRules","sixDigitDecimalVerificationRules","conversionFactorRule","unitFormRules","formRules","getMaterialTypeList","unitList","materialUnitName","supportUnitName","refreshData","unit","docCustomFieldFormRef","processingCustomData","findValItem","selectPropertyList","selectStateList","batchRuleList","enabledIds","batchShutdown","batchFlagFun","getBatchRuleList","materialImage","materialImageName","filesImageFlag","imageFormat","fileImport","convertTiffBufferToDataURL","picBuffer","imageFileDirectories","images","maxArea","largestImage","currentArea","rgbaData","canvasWidth","canvasHeight","imageCanvas","canvasContext","uint8Array","imageData","fileupload","handleRemove","dialogVisible","handlePictureCardPreview","previewImage","fileReader","arrayBuffer","files","showImagePreview","setKey","queryCategory","materialCategoryList","queryMaterialCategory","handleNodeItemId","categoryFun","confirmCategory","initialData","updateMaterialImage","addNewMaterial","editMaterial","materialName","toStringIfExist","toFloatIfExist","fractionDigits","getWriteValue","itemObj","valueStr","outboundWarehouseRef","shelfLifeUnitRef","qualityGuaranteePeriodRef","storageWarehouseRef","defectiveStorageWarehouseRef","purchaseStorageWarehouseRef","safetyStockInventorySettingRef","reorderPointInventorySettingRef","inventorySettingSubmissionVerification","addOrEditFormRef","unitFormRef","confirmData","materialStockSetting","upsertDmlDocCustomValue","docCustomData","getShelfLifeUnitParams","getNumberTypeParams","outboundWarehouseLocationIsDis","storageSpaceIsDis","defectiveStorageSpaceIsDis","purchaseStockSpaceIsDis","isEnableDefaultWarehouseChange","isEnableShelfLifeManagementChange","warehouseOrStorageLocationDialog","warehouseOrStorageLocationDialogType","tableDataAll","selectTableData","totalCount","startIndex","typeHeader","handleSelect","warehouseOrStorageLocationDialogCancel","warehouseOrStorageLocationDialogConfirm","StoreCountGetStorageSetting","isEditFeedback","getLocationTable","storageId","listItem","getStorageLocationType","outboundWarehouseClick","outboundWarehouseLocationClick","storageWarehouseClick","storageSpaceClick","defectiveStorageWarehouseClick","defectiveStorageSpaceClick","purchaseStorageIdInClick","purchaseStockSpaceClick","processTemplateList","queryProcessTemplateDataRemoteMethod","customerList","queryCustomerDataRemoteMethod","updateFileList","editDialogFileList","shelfLifeUnitMap","clearSupportUnit","selectPartNumber","customFieldsList","toRaw","tempEmpList","getEmployeeInfo","mapEmpID","mapInputList","getMaterialList","customObj","editList","updateData","tableItem","customHeader","getMaterialType","getMaterialAttribute","getValue","fieldId","hyperLinkClick","docCustomFieldAndValues","hyperLinkUrlStr","getCustomColumns","columnRes","getMaterialFileValue","PreviewDialogRef","handleRowClick","editAddRef","editStatus","materialData","errorDitle","components","SynColumnConfigNext","SynPageContent","SynPagination","SynCustomFilter","SynMainPageContent","SynTheWholeViewContent","SynButtonBlockContent","SynTableContent","SynMaterialSelectDialog","componentNames","install","app","component","componentName"],"mappings":";;;;;;;;;;AAAA,IAAIA,KAAO;AAAA,EACT,MAAM;AAAA,EACN,IAAI;AAAA,IACF,YAAY;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACD,aAAa;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY;AAAA,IACb;AAAA,IACD,YAAY;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACD,WAAW;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACD,QAAQ;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACD,aAAa;AAAA,MACX,UAAU;AAAA,MACV,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,IACd;AAAA,IACD,UAAU;AAAA,MACR,gBAAgB;AAAA,IACjB;AAAA,IACD,SAAS;AAAA,MACP,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,MACb,QAAQ;AAAA,IACT;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,WAAW;AAAA,MACX,WAAW;AAAA,MACX,oBAAoB;AAAA,IACrB;AAAA,IACD,QAAQ;AAAA,MACN,OAAO;AAAA,IACR;AAAA,IACD,QAAQ;AAAA,MACN,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,IACR;AAAA,IACD,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,wBAAwB;AAAA,MACxB,sBAAsB;AAAA,IACvB;AAAA,IACD,OAAO;AAAA,MACL,WAAW;AAAA,MACX,eAAe;AAAA,MACf,aAAa;AAAA,MACb,aAAa;AAAA,MACb,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,MAAM;AAAA,MACJ,WAAW;AAAA,IACZ;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ,CAAC,QAAkB,MAAgB;AAAA,MAC3C,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,IACnB;AAAA,IACD,OAAO;AAAA,MACL,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IACnB;AAAA,IACD,UAAU;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,IACZ;AAAA,EACF;AACH,GCjLIC,KAAU;AAAA,EACZ,MAAM;AAAA,EACN,IAAI;AAAA,IACF,YAAY;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACD,aAAa;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY;AAAA,IACb;AAAA,IACD,YAAY;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACD,WAAW;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACD,QAAQ;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACD,aAAa;AAAA,MACX,UAAU;AAAA,MACV,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,IACd;AAAA,IACD,SAAS;AAAA,MACP,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,gBAAgB;AAAA,IACjB;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,MACb,QAAQ;AAAA,IACT;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,WAAW;AAAA,MACX,WAAW;AAAA,MACX,oBAAoB;AAAA,IACrB;AAAA,IACD,QAAQ;AAAA,MACN,OAAO;AAAA,IACR;AAAA,IACD,QAAQ;AAAA,MACN,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,IACR;AAAA,IACD,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,wBAAwB;AAAA,MACxB,sBAAsB;AAAA,IACvB;AAAA,IACD,OAAO;AAAA,MACL,WAAW;AAAA,MACX,eAAe;AAAA,MACf,aAAa;AAAA,MACb,aAAa;AAAA,MACb,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,MAAM;AAAA,MACJ,WAAW;AAAA,IACZ;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ,CAAC,UAAU,QAAQ;AAAA,MAC3B,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,IACnB;AAAA,IACD,OAAO;AAAA,MACL,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IACnB;AAAA,IACD,UAAU;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,IACZ;AAAA,EACF;AACH,GClLIC,KAAO;AAAA,EACT,MAAM;AAAA,EACN,IAAI;AAAA,IACF,YAAY;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACD,aAAa;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY;AAAA,IACb;AAAA,IACD,YAAY;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACD,WAAW;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACD,QAAQ;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACD,aAAa;AAAA,MACX,UAAU;AAAA,MACV,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,IACd;AAAA,IACD,SAAS;AAAA,MACP,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,gBAAgB;AAAA,IACjB;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,MACb,QAAQ;AAAA,IACT;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,WAAW;AAAA,MACX,WAAW;AAAA,MACX,oBAAoB;AAAA,IACrB;AAAA,IACD,QAAQ;AAAA,MACN,OAAO;AAAA,IACR;AAAA,IACD,QAAQ;AAAA,MACN,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,IACR;AAAA,IACD,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,wBAAwB;AAAA,MACxB,sBAAsB;AAAA,IACvB;AAAA,IACD,OAAO;AAAA,MACL,WAAW;AAAA,MACX,eAAe;AAAA,MACf,aAAa;AAAA,MACb,aAAa;AAAA,MACb,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,MAAM;AAAA,MACJ,WAAW;AAAA,IACZ;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ,CAAC,QAAkB,MAAgB;AAAA,MAC3C,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,IACnB;AAAA,IACD,OAAO;AAAA,MACL,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACD,YAAY;AAAA,MACV,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IACnB;AAAA,IACD,UAAU;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,IACZ;AAAA,EACF;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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A,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,SAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,WAAY,UAAU;AAAA,UAAGA,EAAe,WAAY,SAAU;AAAA,UAC7EA,EAAe,WAAY,UAAU;AAAA,UAAGA,EAAe,WAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,SAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,SAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,WAAY,SAAU;AAAA,UAC7EA,EAAe,WAAY,UAAU;AAAA,UAAGA,EAAe,WAAY,UAAU;AAAA,UAC7EA,EAAe,WAAY,UAAU;AAAA,UAAGA,EAAe,WAAY,UAAU;AAAA,UAC7EA,EAAe,WAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,SAAU;AAAA,UAC7EA,EAAe,YAAY,SAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,UAAU;AAAA,UAC7EA,EAAe,YAAY,UAAU;AAAA,UAAGA,EAAe,YAAY,SAAU;AAAA,UAC7EA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AA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAc;AAAA,UACtD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAc;AAAA,UACtD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAa;AAAA,UACrD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[0,1,2,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103]}