import __vite__cjsImport0_lodash from "/node_modules/.vite/deps/lodash.js?v=0e19d92d"; const set = __vite__cjsImport0_lodash["set"]; import loading from "/src/components/Provider/Loading.tsx"; import { message } from "/node_modules/.vite/deps/ant-design-vue.js?v=f7d2fa05"; import __vite__cjsImport3_aliOss from "/node_modules/.vite/deps/ali-oss.js?v=a26e0da8"; const OSS = __vite__cjsImport3_aliOss.__esModule ? __vite__cjsImport3_aliOss.default : __vite__cjsImport3_aliOss; export class UploadController { request; blobURLMaps = /* @__PURE__ */ new Map(); constructor(request) { this.request = request; } getBlobURLName(url) { return this.blobURLMaps.get(url)?.name; } createObjectURL(obj) { const url = URL.createObjectURL(obj); this.blobURLMaps.set(url, obj); return url; } revokeObjectURL(url) { URL.revokeObjectURL(url); this.blobURLMaps.delete(url); } selectFile(opts) { return new Promise((resolve, reject) => { const fileInput = document.createElement("input"); fileInput.type = "file"; fileInput.accept = opts?.accept || "images/*"; fileInput.multiple = opts?.multiple || false; fileInput.onchange = function() { resolve([...this.files]); }; window.addEventListener( "focus", () => { setTimeout(() => { reject(console.warn("select file cancel")); }, 300); }, { once: true } ); fileInput.click(); }); } async uploadBlobImages(data) { const todoMap = /* @__PURE__ */ new Map(); addBlobToList(data); const todoList = todoMap.entries(); let err = ""; for (const item of todoList) { const [blobUrl, path] = item; const file = this.blobURLMaps.get(blobUrl); if (file) { const paths = path.split(","); loading.show("上传中"); const ret = await this.uploadFiles(file); if (ret.url) { paths.forEach((p) => { set(data, p, ret.url); }); this.revokeObjectURL(blobUrl); } else { err = ret.error || `上传文件失败[${path}]`; break; } } else { err = `上传文件为空[${path}]`; } } loading.hidden(); if (err) { message.error(err); throw err; } function addBlobToList(data2, path = "") { if (data2 instanceof Object) { if (data2 instanceof Array) { data2.forEach((item, i) => { addBlobToList(item, path ? path + "." + i : i.toString()); }); } else { Object.entries(data2).forEach(([key, value]) => { addBlobToList(value, path ? path + "." + key : key); }); } } if (typeof data2 === "string" && /^blob:/.test(data2)) { if (todoMap.has(data2)) { path = todoMap.get(data2) + "," + path; } todoMap.set(data2, path); } } } async getPolicy() { try { const res = await this.request("/upload/policy", { method: "GET" }); console.log(res); if (res.errorNo != 200) { return { error: "获取上传签名失败!" }; } const policy = res.result.body.Credentials; return policy; } catch (e) { return { error: "获取上传签名失败!" }; } } async uploadFiles(file, path = "/images/") { const res = await this.getPolicy(); if (res.error) { return res.error; } const ext = file.name.split("."); if (ext.length === 1) return { error: "上传失败!" }; const fileExt = ext[ext.length - 1].toLowerCase(); const fileName = this.randomName(12) + "." + fileExt; const client = new OSS({ region: "oss-cn-chengdu", accessKeyId: res.AccessKeyId, accessKeySecret: res.AccessKeySecret, // 从STS服务获取的安全令牌(SecurityToken)。 stsToken: res.SecurityToken, bucket: "baishuihu" }); try { const options = { timeout: 6e5 }; const result = await client.put(path + fileName, file, options); return { url: result.url }; } catch (e) { console.log(e); return { error: "上传失败!" }; } } // async uploadFile(file: File): Promise<{ url?: string; error?: string }> { // const fromData = new FormData(); // fromData.append("file", file); // try { // const ret = await this.request("/upload/file", { // method: "POST", // data: fromData, // headers: { // "Content-Type": "multipart/form-data", // }, // }); // if (ret.errorNo != 200) { // return { error: "上传失败!" }; // } // const url = ret.result.url; // return { url }; // } catch (e) { // return { error: "上传失败!" }; // } // } getFileExt(file) { let ext = "unkown"; if (file) { const exp = /^.+\.(.+)$/; if (file.name && exp.test(file.name)) { ext = exp.exec(file.name)[1]; } else if (file.type) { ext = file.type.split("/").pop(); } return ext.toLowerCase(); } else { return ext; } } randomName(length) { const data = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" ]; let nums = ""; for (let i = 0; i < length; i++) { const r = parseInt(Math.random() * 61 + ""); nums += data[r]; } return nums; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVwbG9hZENvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2V0IH0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgbG9hZGluZyBmcm9tIFwiQC9jb21wb25lbnRzL1Byb3ZpZGVyL0xvYWRpbmdcIjtcclxuaW1wb3J0IHsgbWVzc2FnZSB9IGZyb20gXCJhbnQtZGVzaWduLXZ1ZVwiO1xyXG5pbXBvcnQgT1NTIGZyb20gXCJhbGktb3NzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVXBsb2FkQ29udHJvbGxlciB7XHJcbiAgcmVxdWVzdDogYW55O1xyXG4gIGJsb2JVUkxNYXBzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBhbnkpIHtcclxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XHJcbiAgfVxyXG4gIGdldEJsb2JVUkxOYW1lKHVybDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ibG9iVVJMTWFwcy5nZXQodXJsKT8ubmFtZTtcclxuICB9XHJcbiAgY3JlYXRlT2JqZWN0VVJMKG9iajogQmxvYik6IHN0cmluZyB7XHJcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG9iaik7XHJcbiAgICB0aGlzLmJsb2JVUkxNYXBzLnNldCh1cmwsIG9iaik7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuICByZXZva2VPYmplY3RVUkwodXJsOiBzdHJpbmcpIHtcclxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgIHRoaXMuYmxvYlVSTE1hcHMuZGVsZXRlKHVybCk7XHJcbiAgfVxyXG4gIHNlbGVjdEZpbGUob3B0cz86IHsgYWNjZXB0Pzogc3RyaW5nOyBtdWx0aXBsZT86IGJvb2xlYW4gfSk6IFByb21pc2U8RmlsZVtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgIGZpbGVJbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgIGZpbGVJbnB1dC5hY2NlcHQgPSBvcHRzPy5hY2NlcHQgfHwgXCJpbWFnZXMvKlwiO1xyXG4gICAgICBmaWxlSW5wdXQubXVsdGlwbGUgPSBvcHRzPy5tdWx0aXBsZSB8fCBmYWxzZTtcclxuXHJcbiAgICAgIGZpbGVJbnB1dC5vbmNoYW5nZSA9IGZ1bmN0aW9uICh0aGlzOiBhbnkpIHtcclxuICAgICAgICByZXNvbHZlKFsuLi50aGlzLmZpbGVzXSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICBcImZvY3VzXCIsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChjb25zb2xlLndhcm4oXCJzZWxlY3QgZmlsZSBjYW5jZWxcIikpO1xyXG4gICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgb25jZTogdHJ1ZSB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBmaWxlSW5wdXQuY2xpY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyB1cGxvYWRCbG9iSW1hZ2VzKGRhdGE6IG9iamVjdCkge1xyXG4gICAgY29uc3QgdG9kb01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICBhZGRCbG9iVG9MaXN0KGRhdGEpO1xyXG4gICAgY29uc3QgdG9kb0xpc3QgPSB0b2RvTWFwLmVudHJpZXMoKTtcclxuXHJcbiAgICBsZXQgZXJyID0gXCJcIjtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdG9kb0xpc3QpIHtcclxuICAgICAgY29uc3QgW2Jsb2JVcmwsIHBhdGhdID0gaXRlbTtcclxuICAgICAgY29uc3QgZmlsZSA9IHRoaXMuYmxvYlVSTE1hcHMuZ2V0KGJsb2JVcmwpO1xyXG4gICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdGhzID0gcGF0aC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgbG9hZGluZy5zaG93KFwi5LiK5Lyg5LitXCIpO1xyXG4gICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZXMoZmlsZSk7XHJcbiAgICAgICAgaWYgKHJldC51cmwpIHtcclxuICAgICAgICAgIHBhdGhzLmZvckVhY2goKHApID0+IHtcclxuICAgICAgICAgICAgc2V0KGRhdGEsIHAsIHJldC51cmwpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXJyID0gcmV0LmVycm9yIHx8IGDkuIrkvKDmlofku7blpLHotKVbJHtwYXRofV1gO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVyciA9IGDkuIrkvKDmlofku7bkuLrnqbpbJHtwYXRofV1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsb2FkaW5nLmhpZGRlbigpO1xyXG4gICAgaWYgKGVycikge1xyXG4gICAgICBtZXNzYWdlLmVycm9yKGVycik7XHJcbiAgICAgIHRocm93IGVycjtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZEJsb2JUb0xpc3QoZGF0YTogYW55LCBwYXRoID0gXCJcIikge1xyXG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBhZGRCbG9iVG9MaXN0KGl0ZW0sIHBhdGggPyBwYXRoICsgXCIuXCIgKyBpIDogaS50b1N0cmluZygpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgYWRkQmxvYlRvTGlzdCh2YWx1ZSwgcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICYmIC9eYmxvYjovLnRlc3QoZGF0YSkpIHtcclxuICAgICAgICBpZiAodG9kb01hcC5oYXMoZGF0YSkpIHtcclxuICAgICAgICAgIHBhdGggPSB0b2RvTWFwLmdldChkYXRhKSArIFwiLFwiICsgcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdG9kb01hcC5zZXQoZGF0YSwgcGF0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgZ2V0UG9saWN5KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3VwbG9hZC9wb2xpY3lcIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgIGlmIChyZXMuZXJyb3JObyAhPSAyMDApIHtcclxuICAgICAgICByZXR1cm4geyBlcnJvcjogXCLojrflj5bkuIrkvKDnrb7lkI3lpLHotKUhXCIgfTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb2xpY3kgPSByZXMucmVzdWx0LmJvZHkuQ3JlZGVudGlhbHM7XHJcbiAgICAgIHJldHVybiBwb2xpY3k7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiB7IGVycm9yOiBcIuiOt+WPluS4iuS8oOetvuWQjeWksei0pSFcIiB9O1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyB1cGxvYWRGaWxlcyhcclxuICAgIGZpbGU6IEZpbGUsXHJcbiAgICBwYXRoOiBzdHJpbmcgPSBcIi9pbWFnZXMvXCJcclxuICApOiBQcm9taXNlPHsgdXJsPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9PiB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFBvbGljeSgpO1xyXG4gICAgaWYgKHJlcy5lcnJvcikge1xyXG4gICAgICByZXR1cm4gcmVzLmVycm9yO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0ID0gZmlsZS5uYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgIGlmIChleHQubGVuZ3RoID09PSAxKSByZXR1cm4geyBlcnJvcjogXCLkuIrkvKDlpLHotKUhXCIgfTtcclxuICAgIGNvbnN0IGZpbGVFeHQgPSBleHRbZXh0Lmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMucmFuZG9tTmFtZSgxMikgKyBcIi5cIiArIGZpbGVFeHQ7XHJcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgT1NTKHtcclxuICAgICAgcmVnaW9uOiBcIm9zcy1jbi1jaGVuZ2R1XCIsXHJcbiAgICAgIGFjY2Vzc0tleUlkOiByZXMuQWNjZXNzS2V5SWQsXHJcbiAgICAgIGFjY2Vzc0tleVNlY3JldDogcmVzLkFjY2Vzc0tleVNlY3JldCxcclxuICAgICAgLy8g5LuOU1RT5pyN5Yqh6I635Y+W55qE5a6J5YWo5Luk54mM77yIU2VjdXJpdHlUb2tlbu+8ieOAglxyXG4gICAgICBzdHNUb2tlbjogcmVzLlNlY3VyaXR5VG9rZW4sXHJcbiAgICAgIGJ1Y2tldDogXCJiYWlzaHVpaHVcIixcclxuICAgIH0pO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICB0aW1lb3V0OiA2MDAwMDAsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5wdXQocGF0aCArIGZpbGVOYW1lLCBmaWxlLCBvcHRpb25zKTtcclxuICAgICAgcmV0dXJuIHsgdXJsOiByZXN1bHQudXJsIH07XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICByZXR1cm4geyBlcnJvcjogXCLkuIrkvKDlpLHotKUhXCIgfTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gYXN5bmMgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogUHJvbWlzZTx7IHVybD86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfT4ge1xyXG4gIC8vICAgY29uc3QgZnJvbURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAvLyAgIGZyb21EYXRhLmFwcGVuZChcImZpbGVcIiwgZmlsZSk7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvdXBsb2FkL2ZpbGVcIiwge1xyXG4gIC8vICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgLy8gICAgICAgZGF0YTogZnJvbURhdGEsXHJcbiAgLy8gICAgICAgaGVhZGVyczoge1xyXG4gIC8vICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXHJcbiAgLy8gICAgICAgfSxcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICAgIGlmIChyZXQuZXJyb3JObyAhPSAyMDApIHtcclxuICAvLyAgICAgICByZXR1cm4geyBlcnJvcjogXCLkuIrkvKDlpLHotKUhXCIgfTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBjb25zdCB1cmwgPSByZXQucmVzdWx0LnVybDtcclxuICAvLyAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgLy8gICB9IGNhdGNoIChlKSB7XHJcbiAgLy8gICAgIHJldHVybiB7IGVycm9yOiBcIuS4iuS8oOWksei0pSFcIiB9O1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBnZXRGaWxlRXh0KGZpbGU6IEZpbGUpIHtcclxuICAgIGxldCBleHQ6IGFueSA9IFwidW5rb3duXCI7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCBleHAgPSAvXi4rXFwuKC4rKSQvO1xyXG4gICAgICBpZiAoZmlsZS5uYW1lICYmIGV4cC50ZXN0KGZpbGUubmFtZSkpIHtcclxuICAgICAgICBleHQgPSAoZXhwLmV4ZWMoZmlsZS5uYW1lKSBhcyBhbnkpWzFdO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpbGUudHlwZSkge1xyXG4gICAgICAgIGV4dCA9IGZpbGUudHlwZS5zcGxpdChcIi9cIikucG9wKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhbmRvbU5hbWUobGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGRhdGEgPSBbXHJcbiAgICAgIFwiMFwiLFxyXG4gICAgICBcIjFcIixcclxuICAgICAgXCIyXCIsXHJcbiAgICAgIFwiM1wiLFxyXG4gICAgICBcIjRcIixcclxuICAgICAgXCI1XCIsXHJcbiAgICAgIFwiNlwiLFxyXG4gICAgICBcIjdcIixcclxuICAgICAgXCI4XCIsXHJcbiAgICAgIFwiOVwiLFxyXG4gICAgICBcIkFcIixcclxuICAgICAgXCJCXCIsXHJcbiAgICAgIFwiQ1wiLFxyXG4gICAgICBcIkRcIixcclxuICAgICAgXCJFXCIsXHJcbiAgICAgIFwiRlwiLFxyXG4gICAgICBcIkdcIixcclxuICAgICAgXCJIXCIsXHJcbiAgICAgIFwiSVwiLFxyXG4gICAgICBcIkpcIixcclxuICAgICAgXCJLXCIsXHJcbiAgICAgIFwiTFwiLFxyXG4gICAgICBcIk1cIixcclxuICAgICAgXCJOXCIsXHJcbiAgICAgIFwiT1wiLFxyXG4gICAgICBcIlBcIixcclxuICAgICAgXCJRXCIsXHJcbiAgICAgIFwiUlwiLFxyXG4gICAgICBcIlNcIixcclxuICAgICAgXCJUXCIsXHJcbiAgICAgIFwiVVwiLFxyXG4gICAgICBcIlZcIixcclxuICAgICAgXCJXXCIsXHJcbiAgICAgIFwiWFwiLFxyXG4gICAgICBcIllcIixcclxuICAgICAgXCJaXCIsXHJcbiAgICAgIFwiYVwiLFxyXG4gICAgICBcImJcIixcclxuICAgICAgXCJjXCIsXHJcbiAgICAgIFwiZFwiLFxyXG4gICAgICBcImVcIixcclxuICAgICAgXCJmXCIsXHJcbiAgICAgIFwiZ1wiLFxyXG4gICAgICBcImhcIixcclxuICAgICAgXCJpXCIsXHJcbiAgICAgIFwialwiLFxyXG4gICAgICBcImtcIixcclxuICAgICAgXCJsXCIsXHJcbiAgICAgIFwibVwiLFxyXG4gICAgICBcIm5cIixcclxuICAgICAgXCJvXCIsXHJcbiAgICAgIFwicFwiLFxyXG4gICAgICBcInFcIixcclxuICAgICAgXCJyXCIsXHJcbiAgICAgIFwic1wiLFxyXG4gICAgICBcInRcIixcclxuICAgICAgXCJ1XCIsXHJcbiAgICAgIFwidlwiLFxyXG4gICAgICBcIndcIixcclxuICAgICAgXCJ4XCIsXHJcbiAgICAgIFwieVwiLFxyXG4gICAgICBcInpcIixcclxuICAgIF07XHJcbiAgICBsZXQgbnVtcyA9IFwiXCI7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHIgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogNjEgKyBcIlwiKTtcclxuICAgICAgbnVtcyArPSBkYXRhW3JdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bXM7XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxXQUFXO0FBQ3BCLE9BQU8sYUFBYTtBQUNwQixTQUFTLGVBQWU7QUFDeEIsT0FBTyxTQUFTO0FBRVQsYUFBTSxpQkFBaUI7QUFBQSxFQUM1QjtBQUFBLEVBQ0EsY0FBYyxvQkFBSSxJQUFpQjtBQUFBLEVBQ25DLFlBQVksU0FBYztBQUN4QixTQUFLLFVBQVU7QUFBQSxFQUNqQjtBQUFBLEVBQ0EsZUFBZSxL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