mirror of
https://github.com/thedotmack/claude-mem.git
synced 2026-09-20 04:23:02 +08:00
7186eb5608
Mechanical package-facing bump so 13.24.21 ships the session rehydration fix now on main after v13.24.20. Rebuilds plugin bundles so the injected version matches. Does not npm publish. Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Alex Newman <thedotmack@users.noreply.github.com>
10126 lines
2.1 MiB
Executable File
10126 lines
2.1 MiB
Executable File
#!/usr/bin/env bun
|
||
var __CM_FILENAME__ = typeof __filename !== "undefined" ? __filename : require("node:path").resolve(process.argv[1] || "");
|
||
var __CM_DIRNAME__ = typeof __dirname !== "undefined" ? __dirname : require("node:path").dirname(__CM_FILENAME__);
|
||
"use strict";var rW=Object.create;var ap=Object.defineProperty;var nW=Object.getOwnPropertyDescriptor;var iW=Object.getOwnPropertyNames;var sW=Object.getPrototypeOf,oW=Object.prototype.hasOwnProperty;var R=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var h=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}},io=(t,e)=>{for(var r in e)ap(t,r,{get:e[r],enumerable:!0})},VA=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of iW(e))!oW.call(t,i)&&i!==r&&ap(t,i,{get:()=>e[i],enumerable:!(n=nW(e,i))||n.enumerable});return t};var tt=(t,e,r)=>(r=t!=null?rW(sW(t)):{},VA(e||!t||!t.__esModule?ap(r,"default",{value:t,enumerable:!0}):r,t)),Pt=t=>VA(ap({},"__esModule",{value:!0}),t);var pv=h((YRe,WA)=>{var Sa=1e3,xa=Sa*60,wa=xa*60,so=wa*24,aW=so*7,cW=so*365.25;WA.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return lW(t);if(r==="number"&&isFinite(t))return e.long?dW(t):uW(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function lW(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*cW;case"weeks":case"week":case"w":return r*aW;case"days":case"day":case"d":return r*so;case"hours":case"hour":case"hrs":case"hr":case"h":return r*wa;case"minutes":case"minute":case"mins":case"min":case"m":return r*xa;case"seconds":case"second":case"secs":case"sec":case"s":return r*Sa;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function uW(t){var e=Math.abs(t);return e>=so?Math.round(t/so)+"d":e>=wa?Math.round(t/wa)+"h":e>=xa?Math.round(t/xa)+"m":e>=Sa?Math.round(t/Sa)+"s":t+"ms"}function dW(t){var e=Math.abs(t);return e>=so?cp(t,e,so,"day"):e>=wa?cp(t,e,wa,"hour"):e>=xa?cp(t,e,xa,"minute"):e>=Sa?cp(t,e,Sa,"second"):t+" ms"}function cp(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}});var fv=h((QRe,YA)=>{function pW(t){r.debug=r,r.default=r,r.coerce=c,r.disable=o,r.enable=i,r.enabled=a,r.humanize=pv(),r.destroy=l,Object.keys(t).forEach(u=>{r[u]=t[u]}),r.names=[],r.skips=[],r.formatters={};function e(u){let d=0;for(let p=0;p<u.length;p++)d=(d<<5)-d+u.charCodeAt(p),d|=0;return r.colors[Math.abs(d)%r.colors.length]}r.selectColor=e;function r(u){let d,p=null,f,m;function y(...b){if(!y.enabled)return;let v=y,E=Number(new Date),S=E-(d||E);v.diff=S,v.prev=d,v.curr=E,d=E,b[0]=r.coerce(b[0]),typeof b[0]!="string"&&b.unshift("%O");let k=0;b[0]=b[0].replace(/%([a-zA-Z%])/g,(O,N)=>{if(O==="%%")return"%";k++;let ee=r.formatters[N];if(typeof ee=="function"){let q=b[k];O=ee.call(v,q),b.splice(k,1),k--}return O}),r.formatArgs.call(v,b),(v.log||r.log).apply(v,b)}return y.namespace=u,y.useColors=r.useColors(),y.color=r.selectColor(u),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:()=>p!==null?p:(f!==r.namespaces&&(f=r.namespaces,m=r.enabled(u)),m),set:b=>{p=b}}),typeof r.init=="function"&&r.init(y),y}function n(u,d){let p=r(this.namespace+(typeof d>"u"?":":d)+u);return p.log=this.log,p}function i(u){r.save(u),r.namespaces=u,r.names=[],r.skips=[];let d=(typeof u=="string"?u:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}function s(u,d){let p=0,f=0,m=-1,y=0;for(;p<u.length;)if(f<d.length&&(d[f]===u[p]||d[f]==="*"))d[f]==="*"?(m=f,y=p,f++):(p++,f++);else if(m!==-1)f=m+1,y++,p=y;else return!1;for(;f<d.length&&d[f]==="*";)f++;return f===d.length}function o(){let u=[...r.names,...r.skips.map(d=>"-"+d)].join(",");return r.enable(""),u}function a(u){for(let d of r.skips)if(s(u,d))return!1;for(let d of r.names)if(s(u,d))return!0;return!1}function c(u){return u instanceof Error?u.stack||u.message:u}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}YA.exports=pW});var QA=h((gr,lp)=>{gr.formatArgs=mW;gr.save=hW;gr.load=yW;gr.useColors=fW;gr.storage=gW();gr.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();gr.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function fW(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function mW(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+lp.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}gr.log=console.debug||console.log||(()=>{});function hW(t){try{t?gr.storage.setItem("debug",t):gr.storage.removeItem("debug")}catch{}}function yW(){let t;try{t=gr.storage.getItem("debug")||gr.storage.getItem("DEBUG")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}function gW(){try{return localStorage}catch{}}lp.exports=fv()(gr);var{formatters:bW}=lp.exports;bW.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var ZA={};io(ZA,{createSupportsColor:()=>hv,default:()=>wW});function Gr(t,e=globalThis.Deno?globalThis.Deno.args:dp.default.argv){let r=t.startsWith("-")?"":t.length===1?"-":"--",n=e.indexOf(r+t),i=e.indexOf("--");return n!==-1&&(i===-1||n<i)}function vW(){if(!("FORCE_COLOR"in Xe))return;if(Xe.FORCE_COLOR==="true")return 1;if(Xe.FORCE_COLOR==="false")return 0;if(Xe.FORCE_COLOR.length===0)return 1;let t=Math.min(Number.parseInt(Xe.FORCE_COLOR,10),3);if([0,1,2,3].includes(t))return t}function EW(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function SW(t,{streamIsTTY:e,sniffFlags:r=!0}={}){let n=vW();n!==void 0&&(up=n);let i=r?up:n;if(i===0)return 0;if(r){if(Gr("color=16m")||Gr("color=full")||Gr("color=truecolor"))return 3;if(Gr("color=256"))return 2}if("TF_BUILD"in Xe&&"AGENT_NAME"in Xe)return 1;if(t&&!e&&i===void 0)return 0;let s=i||0;if(Xe.TERM==="dumb")return s;if(dp.default.platform==="win32"){let o=XA.default.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in Xe)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(o=>o in Xe)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(o=>o in Xe)||Xe.CI_NAME==="codeship"?1:s;if("TEAMCITY_VERSION"in Xe)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Xe.TEAMCITY_VERSION)?1:0;if(Xe.COLORTERM==="truecolor"||Xe.TERM==="xterm-kitty"||Xe.TERM==="xterm-ghostty"||Xe.TERM==="wezterm")return 3;if("TERM_PROGRAM"in Xe){let o=Number.parseInt((Xe.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Xe.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Xe.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Xe.TERM)||"COLORTERM"in Xe?1:s}function hv(t,e={}){let r=SW(t,{streamIsTTY:t&&t.isTTY,...e});return EW(r)}var dp,XA,mv,Xe,up,xW,wW,eR=R(()=>{dp=tt(require("node:process"),1),XA=tt(require("node:os"),1),mv=tt(require("node:tty"),1);({env:Xe}=dp.default);Gr("no-color")||Gr("no-colors")||Gr("color=false")||Gr("color=never")?up=0:(Gr("color")||Gr("colors")||Gr("color=true")||Gr("color=always"))&&(up=1);xW={stdout:hv({isTTY:mv.default.isatty(1)}),stderr:hv({isTTY:mv.default.isatty(2)})},wW=xW});var rR=h((It,fp)=>{var _W=require("tty"),pp=require("util");It.init=CW;It.log=AW;It.formatArgs=TW;It.save=RW;It.load=OW;It.useColors=IW;It.destroy=pp.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");It.colors=[6,2,3,4,5,1];try{let t=(eR(),Pt(ZA));t&&(t.stderr||t).level>=2&&(It.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}It.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,s)=>s.toUpperCase()),n=process.env[e];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),t[r]=n,t},{});function IW(){return"colors"in It.inspectOpts?!!It.inspectOpts.colors:_W.isatty(process.stderr.fd)}function TW(t){let{namespace:e,useColors:r}=this;if(r){let n=this.color,i="\x1B[3"+(n<8?n:"8;5;"+n),s=` ${i};1m${e} \x1B[0m`;t[0]=s+t[0].split(`
|
||
`).join(`
|
||
`+s),t.push(i+"m+"+fp.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=kW()+e+" "+t[0]}function kW(){return It.inspectOpts.hideDate?"":new Date().toISOString()+" "}function AW(...t){return process.stderr.write(pp.formatWithOptions(It.inspectOpts,...t)+`
|
||
`)}function RW(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function OW(){return process.env.DEBUG}function CW(t){t.inspectOpts={};let e=Object.keys(It.inspectOpts);for(let r=0;r<e.length;r++)t.inspectOpts[e[r]]=It.inspectOpts[e[r]]}fp.exports=fv()(It);var{formatters:tR}=fp.exports;tR.o=function(t){return this.inspectOpts.colors=this.useColors,pp.inspect(t,this.inspectOpts).split(`
|
||
`).map(e=>e.trim()).join(" ")};tR.O=function(t){return this.inspectOpts.colors=this.useColors,pp.inspect(t,this.inspectOpts)}});var Tr=h((XRe,yv)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?yv.exports=QA():yv.exports=rR()});var kl=h((ZRe,oR)=>{var jW=require("path").relative;oR.exports=NW;var PW=process.cwd();function iR(t,e){for(var r=t.split(/[ ,]+/),n=String(e).toLowerCase(),i=0;i<r.length;i++){var s=r[i];if(s&&(s==="*"||s.toLowerCase()===n))return!0}return!1}function KW(t,e,r){var n=Object.getOwnPropertyDescriptor(t,e),i=n.value;return n.get=function(){return i},n.writable&&(n.set=function(o){return i=o}),delete n.value,delete n.writable,Object.defineProperty(t,e,n),n}function DW(t){for(var e="",r=0;r<t;r++)e+=", arg"+r;return e.substr(2)}function MW(t){var e=this.name+": "+this.namespace;this.message&&(e+=" deprecated "+this.message);for(var r=0;r<t.length;r++)e+=`
|
||
at `+t[r].toString();return e}function NW(t){if(!t)throw new TypeError("argument namespace is required");var e=hp(),r=_a(e[1]),n=r[0];function i(s){mp.call(i,s)}return i._file=n,i._ignored=qW(t),i._namespace=t,i._traced=FW(t),i._warned=Object.create(null),i.function=zW,i.property=GW,i}function LW(t,e){var r=typeof t.listenerCount!="function"?t.listeners(e).length:t.listenerCount(e);return r>0}function qW(t){if(process.noDeprecation)return!0;var e=process.env.NO_DEPRECATION||"";return iR(e,t)}function FW(t){if(process.traceDeprecation)return!0;var e=process.env.TRACE_DEPRECATION||"";return iR(e,t)}function mp(t,e){var r=LW(process,"deprecation");if(!(!r&&this._ignored)){var n,i,s,o,a=0,c=!1,l=hp(),u=this._file;for(e?(o=e,s=_a(l[1]),s.name=o.name,u=s[0]):(a=2,o=_a(l[a]),s=o);a<l.length;a++)if(n=_a(l[a]),i=n[0],i===u)c=!0;else if(i===this._file)u=this._file;else if(c)break;var d=n?o.join(":")+"__"+n.join(":"):void 0;if(!(d!==void 0&&d in this._warned)){this._warned[d]=!0;var p=t;if(p||(p=s===o||!s.name?nR(o):nR(s)),r){var f=sR(this._namespace,p,l.slice(a));process.emit("deprecation",f);return}var m=process.stderr.isTTY?UW:$W,y=m.call(this,p,n,l.slice(a));process.stderr.write(y+`
|
||
`,"utf8")}}}function _a(t){var e=t.getFileName()||"<anonymous>",r=t.getLineNumber(),n=t.getColumnNumber();t.isEval()&&(e=t.getEvalOrigin()+", "+e);var i=[e,r,n];return i.callSite=t,i.name=t.getFunctionName(),i}function nR(t){var e=t.callSite,r=t.name;r||(r="<anonymous@"+gv(t)+">");var n=e.getThis(),i=n&&e.getTypeName();return i==="Object"&&(i=void 0),i==="Function"&&(i=n.name||i),i&&e.getMethodName()?i+"."+r:r}function $W(t,e,r){var n=new Date().toUTCString(),i=n+" "+this._namespace+" deprecated "+t;if(this._traced){for(var s=0;s<r.length;s++)i+=`
|
||
at `+r[s].toString();return i}return e&&(i+=" at "+gv(e)),i}function UW(t,e,r){var n="\x1B[36;1m"+this._namespace+"\x1B[22;39m \x1B[33;1mdeprecated\x1B[22;39m \x1B[0m"+t+"\x1B[39m";if(this._traced){for(var i=0;i<r.length;i++)n+=`
|
||
\x1B[36mat `+r[i].toString()+"\x1B[39m";return n}return e&&(n+=" \x1B[36m"+gv(e)+"\x1B[39m"),n}function gv(t){return jW(PW,t[0])+":"+t[1]+":"+t[2]}function hp(){var t=Error.stackTraceLimit,e={},r=Error.prepareStackTrace;Error.prepareStackTrace=JW,Error.stackTraceLimit=Math.max(10,t),Error.captureStackTrace(e);var n=e.stack.slice(1);return Error.prepareStackTrace=r,Error.stackTraceLimit=t,n}function JW(t,e){return e}function zW(t,e){if(typeof t!="function")throw new TypeError("argument fn must be a function");var r=DW(t.length),n=hp(),i=_a(n[1]);i.name=t.name;var s=new Function("fn","log","deprecate","message","site",`"use strict"
|
||
return function (`+r+`) {log.call(deprecate, message, site)
|
||
return fn.apply(this, arguments)
|
||
}`)(t,mp,this,e,i);return s}function GW(t,e,r){if(!t||typeof t!="object"&&typeof t!="function")throw new TypeError("argument obj must be object");var n=Object.getOwnPropertyDescriptor(t,e);if(!n)throw new TypeError("must call property on owner object");if(!n.configurable)throw new TypeError("property must be configurable");var i=this,s=hp(),o=_a(s[1]);o.name=e,"value"in n&&(n=KW(t,e,r));var a=n.get,c=n.set;typeof a=="function"&&(n.get=function(){return mp.call(i,r,o),a.apply(this,arguments)}),typeof c=="function"&&(n.set=function(){return mp.call(i,r,o),c.apply(this,arguments)}),Object.defineProperty(t,e,n)}function sR(t,e,r){var n=new Error,i;return Object.defineProperty(n,"constructor",{value:sR}),Object.defineProperty(n,"message",{configurable:!0,enumerable:!1,value:e,writable:!0}),Object.defineProperty(n,"name",{enumerable:!1,configurable:!0,value:"DeprecationError",writable:!0}),Object.defineProperty(n,"namespace",{configurable:!0,enumerable:!1,value:t,writable:!0}),Object.defineProperty(n,"stack",{configurable:!0,enumerable:!1,get:function(){return i!==void 0?i:i=MW.call(this,r)},set:function(o){i=o}}),n}});var cR=h((eOe,aR)=>{"use strict";aR.exports=Object.setPrototypeOf||({__proto__:[]}instanceof Array?BW:HW);function BW(t,e){return t.__proto__=e,t}function HW(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e[r]);return t}});var lR=h((tOe,VW)=>{VW.exports={"100":"Continue","101":"Switching Protocols","102":"Processing","103":"Early Hints","200":"OK","201":"Created","202":"Accepted","203":"Non-Authoritative Information","204":"No Content","205":"Reset Content","206":"Partial Content","207":"Multi-Status","208":"Already Reported","226":"IM Used","300":"Multiple Choices","301":"Moved Permanently","302":"Found","303":"See Other","304":"Not Modified","305":"Use Proxy","307":"Temporary Redirect","308":"Permanent Redirect","400":"Bad Request","401":"Unauthorized","402":"Payment Required","403":"Forbidden","404":"Not Found","405":"Method Not Allowed","406":"Not Acceptable","407":"Proxy Authentication Required","408":"Request Timeout","409":"Conflict","410":"Gone","411":"Length Required","412":"Precondition Failed","413":"Payload Too Large","414":"URI Too Long","415":"Unsupported Media Type","416":"Range Not Satisfiable","417":"Expectation Failed","418":"I'm a Teapot","421":"Misdirected Request","422":"Unprocessable Entity","423":"Locked","424":"Failed Dependency","425":"Too Early","426":"Upgrade Required","428":"Precondition Required","429":"Too Many Requests","431":"Request Header Fields Too Large","451":"Unavailable For Legal Reasons","500":"Internal Server Error","501":"Not Implemented","502":"Bad Gateway","503":"Service Unavailable","504":"Gateway Timeout","505":"HTTP Version Not Supported","506":"Variant Also Negotiates","507":"Insufficient Storage","508":"Loop Detected","509":"Bandwidth Limit Exceeded","510":"Not Extended","511":"Network Authentication Required"}});var Al=h((rOe,dR)=>{"use strict";var bv=lR();dR.exports=vn;vn.message=bv;vn.code=WW(bv);vn.codes=YW(bv);vn.redirect={300:!0,301:!0,302:!0,303:!0,305:!0,307:!0,308:!0};vn.empty={204:!0,205:!0,304:!0};vn.retry={502:!0,503:!0,504:!0};function WW(t){var e={};return Object.keys(t).forEach(function(n){var i=t[n],s=Number(n);e[i.toLowerCase()]=s}),e}function YW(t){return Object.keys(t).map(function(r){return Number(r)})}function QW(t){var e=t.toLowerCase();if(!Object.prototype.hasOwnProperty.call(vn.code,e))throw new Error('invalid status message: "'+t+'"');return vn.code[e]}function uR(t){if(!Object.prototype.hasOwnProperty.call(vn.message,t))throw new Error("invalid status code: "+t);return vn.message[t]}function vn(t){if(typeof t=="number")return uR(t);if(typeof t!="string")throw new TypeError("code must be a number or string");var e=parseInt(t,10);return isNaN(e)?QW(t):uR(e)}});var pR=h((nOe,vv)=>{typeof Object.create=="function"?vv.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:vv.exports=function(e,r){if(r){e.super_=r;var n=function(){};n.prototype=r.prototype,e.prototype=new n,e.prototype.constructor=e}}});var fR=h((iOe,Sv)=>{try{if(Ev=require("util"),typeof Ev.inherits!="function")throw"";Sv.exports=Ev.inherits}catch{Sv.exports=pR()}var Ev});var hR=h((sOe,mR)=>{"use strict";mR.exports=XW;function XW(t){return t.split(" ").map(function(e){return e.slice(0,1).toUpperCase()+e.slice(1)}).join("").replace(/[^ _0-9a-z]/gi,"")}});var Ta=h((oOe,oo)=>{"use strict";var ZW=kl()("http-errors"),yR=cR(),Ia=Al(),xv=fR(),eY=hR();oo.exports=yp;oo.exports.HttpError=tY();oo.exports.isHttpError=nY(oo.exports.HttpError);sY(oo.exports,Ia.codes,oo.exports.HttpError);function gR(t){return+(String(t).charAt(0)+"00")}function yp(){for(var t,e,r=500,n={},i=0;i<arguments.length;i++){var s=arguments[i],o=typeof s;if(o==="object"&&s instanceof Error)t=s,r=t.status||t.statusCode||r;else if(o==="number"&&i===0)r=s;else if(o==="string")e=s;else if(o==="object")n=s;else throw new TypeError("argument #"+(i+1)+" unsupported type "+o)}typeof r=="number"&&(r<400||r>=600)&&ZW("non-error status code; use only 4xx or 5xx status codes"),(typeof r!="number"||!Ia.message[r]&&(r<400||r>=600))&&(r=500);var a=yp[r]||yp[gR(r)];t||(t=a?new a(e):new Error(e||Ia.message[r]),Error.captureStackTrace(t,yp)),(!a||!(t instanceof a)||t.status!==r)&&(t.expose=r<500,t.status=t.statusCode=r);for(var c in n)c!=="status"&&c!=="statusCode"&&(t[c]=n[c]);return t}function tY(){function t(){throw new TypeError("cannot construct abstract class")}return xv(t,Error),t}function rY(t,e,r){var n=vR(e);function i(s){var o=s??Ia.message[r],a=new Error(o);return Error.captureStackTrace(a,i),yR(a,i.prototype),Object.defineProperty(a,"message",{enumerable:!0,configurable:!0,value:o,writable:!0}),Object.defineProperty(a,"name",{enumerable:!1,configurable:!0,value:n,writable:!0}),a}return xv(i,t),bR(i,n),i.prototype.status=r,i.prototype.statusCode=r,i.prototype.expose=!0,i}function nY(t){return function(r){return!r||typeof r!="object"?!1:r instanceof t?!0:r instanceof Error&&typeof r.expose=="boolean"&&typeof r.statusCode=="number"&&r.status===r.statusCode}}function iY(t,e,r){var n=vR(e);function i(s){var o=s??Ia.message[r],a=new Error(o);return Error.captureStackTrace(a,i),yR(a,i.prototype),Object.defineProperty(a,"message",{enumerable:!0,configurable:!0,value:o,writable:!0}),Object.defineProperty(a,"name",{enumerable:!1,configurable:!0,value:n,writable:!0}),a}return xv(i,t),bR(i,n),i.prototype.status=r,i.prototype.statusCode=r,i.prototype.expose=!1,i}function bR(t,e){var r=Object.getOwnPropertyDescriptor(t,"name");r&&r.configurable&&(r.value=e,Object.defineProperty(t,"name",r))}function sY(t,e,r){e.forEach(function(i){var s,o=eY(Ia.message[i]);switch(gR(i)){case 400:s=rY(r,o,i);break;case 500:s=iY(r,o,i);break}s&&(t[i]=s,t[o]=s)})}function vR(t){return t.slice(-5)==="Error"?t:t+"Error"}});var wv=h((aOe,gp)=>{"use strict";gp.exports=lY;gp.exports.format=ER;gp.exports.parse=SR;var oY=/\B(?=(\d{3})+(?!\d))/g,aY=/(?:\.0*|(\.[^0]+)0+)$/,is={b:1,kb:1024,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)},cY=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function lY(t,e){return typeof t=="string"?SR(t):typeof t=="number"?ER(t,e):null}function ER(t,e){if(!Number.isFinite(t))return null;var r=Math.abs(t),n=e&&e.thousandsSeparator||"",i=e&&e.unitSeparator||"",s=e&&e.decimalPlaces!==void 0?e.decimalPlaces:2,o=!!(e&&e.fixedDecimals),a=e&&e.unit||"";(!a||!is[a.toLowerCase()])&&(r>=is.pb?a="PB":r>=is.tb?a="TB":r>=is.gb?a="GB":r>=is.mb?a="MB":r>=is.kb?a="KB":a="B");var c=t/is[a.toLowerCase()],l=c.toFixed(s);return o||(l=l.replace(aY,"$1")),n&&(l=l.split(".").map(function(u,d){return d===0?u.replace(oY,n):u}).join(".")),l+i+a}function SR(t){if(typeof t=="number"&&!isNaN(t))return t;if(typeof t!="string")return null;var e=cY.exec(t),r,n="b";return e?(r=parseFloat(e[1]),n=e[4].toLowerCase()):(r=parseInt(t,10),n="b"),isNaN(r)?null:Math.floor(is[n]*r)}});var bi=h((cOe,xR)=>{"use strict";var bp=require("buffer"),ka=bp.Buffer,Br={},Hr;for(Hr in bp)bp.hasOwnProperty(Hr)&&(Hr==="SlowBuffer"||Hr==="Buffer"||(Br[Hr]=bp[Hr]));var Aa=Br.Buffer={};for(Hr in ka)ka.hasOwnProperty(Hr)&&(Hr==="allocUnsafe"||Hr==="allocUnsafeSlow"||(Aa[Hr]=ka[Hr]));Br.Buffer.prototype=ka.prototype;(!Aa.from||Aa.from===Uint8Array.from)&&(Aa.from=function(t,e,r){if(typeof t=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof t);if(t&&typeof t.length>"u")throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);return ka(t,e,r)});Aa.alloc||(Aa.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof t);if(t<0||t>=2*(1<<30))throw new RangeError('The value "'+t+'" is invalid for option "size"');var n=ka(t);return!e||e.length===0?n.fill(0):typeof r=="string"?n.fill(e,r):n.fill(e),n});if(!Br.kStringMaxLength)try{Br.kStringMaxLength=process.binding("buffer").kStringMaxLength}catch{}Br.constants||(Br.constants={MAX_LENGTH:Br.kMaxLength},Br.kStringMaxLength&&(Br.constants.MAX_STRING_LENGTH=Br.kStringMaxLength));xR.exports=Br});var _R=h(Tv=>{"use strict";var wR="\uFEFF";Tv.PrependBOM=_v;function _v(t,e){this.encoder=t,this.addBOM=!0}_v.prototype.write=function(t){return this.addBOM&&(t=wR+t,this.addBOM=!1),this.encoder.write(t)};_v.prototype.end=function(){return this.encoder.end()};Tv.StripBOM=Iv;function Iv(t,e){this.decoder=t,this.pass=!1,this.options=e||{}}Iv.prototype.write=function(t){var e=this.decoder.write(t);return this.pass||!e||(e[0]===wR&&(e=e.slice(1),typeof this.options.stripBOM=="function"&&this.options.stripBOM()),this.pass=!0),e};Iv.prototype.end=function(){return this.decoder.end()}});var kv=h((uOe,IR)=>{"use strict";var uY=typeof Object.hasOwn>"u"?Function.call.bind(Object.prototype.hasOwnProperty):Object.hasOwn;function dY(t,e){for(var r in e)uY(e,r)&&(t[r]=e[r])}IR.exports=dY});var kR=h((dOe,TR)=>{"use strict";var vi=bi().Buffer;TR.exports={utf8:{type:"_internal",bomAware:!0},cesu8:{type:"_internal",bomAware:!0},unicode11utf8:"utf8",ucs2:{type:"_internal",bomAware:!0},utf16le:"ucs2",binary:{type:"_internal"},base64:{type:"_internal"},hex:{type:"_internal"},_internal:Av};function Av(t,e){this.enc=t.encodingName,this.bomAware=t.bomAware,this.enc==="base64"?this.encoder=Cv:this.enc==="utf8"?this.encoder=Kv:this.enc==="cesu8"&&(this.enc="utf8",this.encoder=jv,vi.from("eda0bdedb2a9","hex").toString()!=="\u{1F4A9}"&&(this.decoder=Pv,this.defaultCharUnicode=e.defaultCharUnicode))}Av.prototype.encoder=Ov;Av.prototype.decoder=Rv;var pY=require("string_decoder").StringDecoder;function Rv(t,e){this.decoder=new pY(e.enc)}Rv.prototype.write=function(t){return vi.isBuffer(t)||(t=vi.from(t)),this.decoder.write(t)};Rv.prototype.end=function(){return this.decoder.end()};function Ov(t,e){this.enc=e.enc}Ov.prototype.write=function(t){return vi.from(t,this.enc)};Ov.prototype.end=function(){};function Cv(t,e){this.prevStr=""}Cv.prototype.write=function(t){t=this.prevStr+t;var e=t.length-t.length%4;return this.prevStr=t.slice(e),t=t.slice(0,e),vi.from(t,"base64")};Cv.prototype.end=function(){return vi.from(this.prevStr,"base64")};function jv(t,e){}jv.prototype.write=function(t){for(var e=vi.alloc(t.length*3),r=0,n=0;n<t.length;n++){var i=t.charCodeAt(n);i<128?e[r++]=i:i<2048?(e[r++]=192+(i>>>6),e[r++]=128+(i&63)):(e[r++]=224+(i>>>12),e[r++]=128+(i>>>6&63),e[r++]=128+(i&63))}return e.slice(0,r)};jv.prototype.end=function(){};function Pv(t,e){this.acc=0,this.contBytes=0,this.accBytes=0,this.defaultCharUnicode=e.defaultCharUnicode}Pv.prototype.write=function(t){for(var e=this.acc,r=this.contBytes,n=this.accBytes,i="",s=0;s<t.length;s++){var o=t[s];(o&192)!==128?(r>0&&(i+=this.defaultCharUnicode,r=0),o<128?i+=String.fromCharCode(o):o<224?(e=o&31,r=1,n=1):o<240?(e=o&15,r=2,n=1):i+=this.defaultCharUnicode):r>0?(e=e<<6|o&63,r--,n++,r===0&&(n===2&&e<128&&e>0?i+=this.defaultCharUnicode:n===3&&e<2048?i+=this.defaultCharUnicode:i+=String.fromCharCode(e))):i+=this.defaultCharUnicode}return this.acc=e,this.contBytes=r,this.accBytes=n,i};Pv.prototype.end=function(){var t=0;return this.contBytes>0&&(t+=this.defaultCharUnicode),t};function Kv(t,e){this.highSurrogate=""}Kv.prototype.write=function(t){if(this.highSurrogate&&(t=this.highSurrogate+t,this.highSurrogate=""),t.length>0){var e=t.charCodeAt(t.length-1);e>=55296&&e<56320&&(this.highSurrogate=t[t.length-1],t=t.slice(0,t.length-1))}return vi.from(t,this.enc)};Kv.prototype.end=function(){if(this.highSurrogate){var t=this.highSurrogate;return this.highSurrogate="",vi.from(t,this.enc)}}});var OR=h(ss=>{"use strict";var vp=bi().Buffer;ss._utf32=Dv;function Dv(t,e){this.iconv=e,this.bomAware=!0,this.isLE=t.isLE}ss.utf32le={type:"_utf32",isLE:!0};ss.utf32be={type:"_utf32",isLE:!1};ss.ucs4le="utf32le";ss.ucs4be="utf32be";Dv.prototype.encoder=Mv;Dv.prototype.decoder=Nv;function Mv(t,e){this.isLE=e.isLE,this.highSurrogate=0}Mv.prototype.write=function(t){for(var e=vp.from(t,"ucs2"),r=vp.alloc(e.length*2+4),n=this.isLE?r.writeUInt32LE:r.writeUInt32BE,i=0,s=0;s<e.length;s+=2){var o=e.readUInt16LE(s),a=o>=55296&&o<56320,c=o>=56320&&o<57344;if(this.highSurrogate)if(a||!c)n.call(r,this.highSurrogate,i),i+=4;else{var l=(this.highSurrogate-55296<<10|o-56320)+65536;n.call(r,l,i),i+=4,this.highSurrogate=0;continue}a?this.highSurrogate=o:(n.call(r,o,i),i+=4,this.highSurrogate=0)}return i<r.length&&(r=r.slice(0,i)),r};Mv.prototype.end=function(){if(this.highSurrogate){var t=vp.alloc(4);return this.isLE?t.writeUInt32LE(this.highSurrogate,0):t.writeUInt32BE(this.highSurrogate,0),this.highSurrogate=0,t}};function Nv(t,e){this.isLE=e.isLE,this.badChar=e.iconv.defaultCharUnicode.charCodeAt(0),this.overflow=[]}Nv.prototype.write=function(t){if(t.length===0)return"";var e=0,r=0,n=vp.alloc(t.length+4),i=0,s=this.isLE,o=this.overflow,a=this.badChar;if(o.length>0){for(;e<t.length&&o.length<4;e++)o.push(t[e]);o.length===4&&(s?r=o[0]|o[1]<<8|o[2]<<16|o[3]<<24:r=o[3]|o[2]<<8|o[1]<<16|o[0]<<24,o.length=0,i=AR(n,i,r,a))}for(;e<t.length-3;e+=4)s?r=t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24:r=t[e+3]|t[e+2]<<8|t[e+1]<<16|t[e]<<24,i=AR(n,i,r,a);for(;e<t.length;e++)o.push(t[e]);return n.slice(0,i).toString("ucs2")};function AR(t,e,r,n){if((r<0||r>1114111)&&(r=n),r>=65536){r-=65536;var i=55296|r>>10;t[e++]=i&255,t[e++]=i>>8;var r=56320|r&1023}return t[e++]=r&255,t[e++]=r>>8,e}Nv.prototype.end=function(){if(this.overflow.length!==0)return this.overflow.length=0,String.fromCharCode(this.badChar)};ss.utf32=Lv;ss.ucs4="utf32";function Lv(t,e){this.iconv=e}Lv.prototype.encoder=qv;Lv.prototype.decoder=Fv;function qv(t,e){t=t||{},t.addBOM===void 0&&(t.addBOM=!0),this.encoder=e.iconv.getEncoder(t.defaultEncoding||"utf-32le",t)}qv.prototype.write=function(t){return this.encoder.write(t)};qv.prototype.end=function(){return this.encoder.end()};function Fv(t,e){this.decoder=null,this.initialBufs=[],this.initialBufsLen=0,this.options=t||{},this.iconv=e.iconv}Fv.prototype.write=function(t){if(!this.decoder){if(this.initialBufs.push(t),this.initialBufsLen+=t.length,this.initialBufsLen<32)return"";var e=RR(this.initialBufs,this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(e,this.options);for(var r="",n=0;n<this.initialBufs.length;n++)r+=this.decoder.write(this.initialBufs[n]);return this.initialBufs.length=this.initialBufsLen=0,r}return this.decoder.write(t)};Fv.prototype.end=function(){if(!this.decoder){var t=RR(this.initialBufs,this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(t,this.options);for(var e="",r=0;r<this.initialBufs.length;r++)e+=this.decoder.write(this.initialBufs[r]);var n=this.decoder.end();return n&&(e+=n),this.initialBufs.length=this.initialBufsLen=0,e}return this.decoder.end()};function RR(t,e){var r=[],n=0,i=0,s=0,o=0,a=0;e:for(var c=0;c<t.length;c++)for(var l=t[c],u=0;u<l.length;u++)if(r.push(l[u]),r.length===4){if(n===0){if(r[0]===255&&r[1]===254&&r[2]===0&&r[3]===0)return"utf-32le";if(r[0]===0&&r[1]===0&&r[2]===254&&r[3]===255)return"utf-32be"}if((r[0]!==0||r[1]>16)&&s++,(r[3]!==0||r[2]>16)&&i++,r[0]===0&&r[1]===0&&(r[2]!==0||r[3]!==0)&&a++,(r[0]!==0||r[1]!==0)&&r[2]===0&&r[3]===0&&o++,r.length=0,n++,n>=100)break e}return a-s>o-i?"utf-32be":a-s<o-i?"utf-32le":e||"utf-32le"}});var PR=h(Bv=>{"use strict";var CR=bi().Buffer;Bv.utf16be=Ep;function Ep(){}Ep.prototype.encoder=$v;Ep.prototype.decoder=Uv;Ep.prototype.bomAware=!0;function $v(){}$v.prototype.write=function(t){for(var e=CR.from(t,"ucs2"),r=0;r<e.length;r+=2){var n=e[r];e[r]=e[r+1],e[r+1]=n}return e};$v.prototype.end=function(){};function Uv(){this.overflowByte=-1}Uv.prototype.write=function(t){if(t.length==0)return"";var e=CR.alloc(t.length+1),r=0,n=0;for(this.overflowByte!==-1&&(e[0]=t[0],e[1]=this.overflowByte,r=1,n=2);r<t.length-1;r+=2,n+=2)e[n]=t[r+1],e[n+1]=t[r];return this.overflowByte=r==t.length-1?t[t.length-1]:-1,e.slice(0,n).toString("ucs2")};Uv.prototype.end=function(){this.overflowByte=-1};Bv.utf16=Jv;function Jv(t,e){this.iconv=e}Jv.prototype.encoder=zv;Jv.prototype.decoder=Gv;function zv(t,e){t=t||{},t.addBOM===void 0&&(t.addBOM=!0),this.encoder=e.iconv.getEncoder("utf-16le",t)}zv.prototype.write=function(t){return this.encoder.write(t)};zv.prototype.end=function(){return this.encoder.end()};function Gv(t,e){this.decoder=null,this.initialBufs=[],this.initialBufsLen=0,this.options=t||{},this.iconv=e.iconv}Gv.prototype.write=function(t){if(!this.decoder){if(this.initialBufs.push(t),this.initialBufsLen+=t.length,this.initialBufsLen<16)return"";var e=jR(this.initialBufs,this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(e,this.options);for(var r="",n=0;n<this.initialBufs.length;n++)r+=this.decoder.write(this.initialBufs[n]);return this.initialBufs.length=this.initialBufsLen=0,r}return this.decoder.write(t)};Gv.prototype.end=function(){if(!this.decoder){var t=jR(this.initialBufs,this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(t,this.options);for(var e="",r=0;r<this.initialBufs.length;r++)e+=this.decoder.write(this.initialBufs[r]);var n=this.decoder.end();return n&&(e+=n),this.initialBufs.length=this.initialBufsLen=0,e}return this.decoder.end()};function jR(t,e){var r=[],n=0,i=0,s=0;e:for(var o=0;o<t.length;o++)for(var a=t[o],c=0;c<a.length;c++)if(r.push(a[c]),r.length===2){if(n===0){if(r[0]===255&&r[1]===254)return"utf-16le";if(r[0]===254&&r[1]===255)return"utf-16be"}if(r[0]===0&&r[1]!==0&&s++,r[0]!==0&&r[1]===0&&i++,r.length=0,n++,n>=100)break e}return s>i?"utf-16be":s<i?"utf-16le":e||"utf-16le"}});var DR=h(wp=>{"use strict";var Fn=bi().Buffer;wp.utf7=Sp;wp.unicode11utf7="utf7";function Sp(t,e){this.iconv=e}Sp.prototype.encoder=Vv;Sp.prototype.decoder=Wv;Sp.prototype.bomAware=!0;var fY=/[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;function Vv(t,e){this.iconv=e.iconv}Vv.prototype.write=function(t){return Fn.from(t.replace(fY,function(e){return"+"+(e==="+"?"":this.iconv.encode(e,"utf16-be").toString("base64").replace(/=+$/,""))+"-"}.bind(this)))};Vv.prototype.end=function(){};function Wv(t,e){this.iconv=e.iconv,this.inBase64=!1,this.base64Accum=""}var mY=/[A-Za-z0-9\/+]/,Yv=[];for(Rl=0;Rl<256;Rl++)Yv[Rl]=mY.test(String.fromCharCode(Rl));var Rl,hY=43,ao=45,Hv=38;Wv.prototype.write=function(t){for(var e="",r=0,n=this.inBase64,i=this.base64Accum,s=0;s<t.length;s++)if(!n)t[s]==hY&&(e+=this.iconv.decode(t.slice(r,s),"ascii"),r=s+1,n=!0);else if(!Yv[t[s]]){if(s==r&&t[s]==ao)e+="+";else{var o=i+this.iconv.decode(t.slice(r,s),"ascii");e+=this.iconv.decode(Fn.from(o,"base64"),"utf16-be")}t[s]!=ao&&s--,r=s+1,n=!1,i=""}if(!n)e+=this.iconv.decode(t.slice(r),"ascii");else{var o=i+this.iconv.decode(t.slice(r),"ascii"),a=o.length-o.length%8;i=o.slice(a),o=o.slice(0,a),e+=this.iconv.decode(Fn.from(o,"base64"),"utf16-be")}return this.inBase64=n,this.base64Accum=i,e};Wv.prototype.end=function(){var t="";return this.inBase64&&this.base64Accum.length>0&&(t=this.iconv.decode(Fn.from(this.base64Accum,"base64"),"utf16-be")),this.inBase64=!1,this.base64Accum="",t};wp.utf7imap=xp;function xp(t,e){this.iconv=e}xp.prototype.encoder=Qv;xp.prototype.decoder=Xv;xp.prototype.bomAware=!0;function Qv(t,e){this.iconv=e.iconv,this.inBase64=!1,this.base64Accum=Fn.alloc(6),this.base64AccumIdx=0}Qv.prototype.write=function(t){for(var e=this.inBase64,r=this.base64Accum,n=this.base64AccumIdx,i=Fn.alloc(t.length*5+10),s=0,o=0;o<t.length;o++){var a=t.charCodeAt(o);a>=32&&a<=126?(e&&(n>0&&(s+=i.write(r.slice(0,n).toString("base64").replace(/\//g,",").replace(/=+$/,""),s),n=0),i[s++]=ao,e=!1),e||(i[s++]=a,a===Hv&&(i[s++]=ao))):(e||(i[s++]=Hv,e=!0),e&&(r[n++]=a>>8,r[n++]=a&255,n==r.length&&(s+=i.write(r.toString("base64").replace(/\//g,","),s),n=0)))}return this.inBase64=e,this.base64AccumIdx=n,i.slice(0,s)};Qv.prototype.end=function(){var t=Fn.alloc(10),e=0;return this.inBase64&&(this.base64AccumIdx>0&&(e+=t.write(this.base64Accum.slice(0,this.base64AccumIdx).toString("base64").replace(/\//g,",").replace(/=+$/,""),e),this.base64AccumIdx=0),t[e++]=ao,this.inBase64=!1),t.slice(0,e)};function Xv(t,e){this.iconv=e.iconv,this.inBase64=!1,this.base64Accum=""}var KR=Yv.slice();KR[44]=!0;Xv.prototype.write=function(t){for(var e="",r=0,n=this.inBase64,i=this.base64Accum,s=0;s<t.length;s++)if(!n)t[s]==Hv&&(e+=this.iconv.decode(t.slice(r,s),"ascii"),r=s+1,n=!0);else if(!KR[t[s]]){if(s==r&&t[s]==ao)e+="&";else{var o=i+this.iconv.decode(t.slice(r,s),"ascii").replace(/,/g,"/");e+=this.iconv.decode(Fn.from(o,"base64"),"utf16-be")}t[s]!=ao&&s--,r=s+1,n=!1,i=""}if(!n)e+=this.iconv.decode(t.slice(r),"ascii");else{var o=i+this.iconv.decode(t.slice(r),"ascii").replace(/,/g,"/"),a=o.length-o.length%8;i=o.slice(a),o=o.slice(0,a),e+=this.iconv.decode(Fn.from(o,"base64"),"utf16-be")}return this.inBase64=n,this.base64Accum=i,e};Xv.prototype.end=function(){var t="";return this.inBase64&&this.base64Accum.length>0&&(t=this.iconv.decode(Fn.from(this.base64Accum,"base64"),"utf16-be")),this.inBase64=!1,this.base64Accum="",t}});var NR=h(MR=>{"use strict";var _p=bi().Buffer;MR._sbcs=Zv;function Zv(t,e){if(!t)throw new Error("SBCS codec is called without the data.");if(!t.chars||t.chars.length!==128&&t.chars.length!==256)throw new Error("Encoding '"+t.type+"' has incorrect 'chars' (must be of len 128 or 256)");if(t.chars.length===128){for(var r="",n=0;n<128;n++)r+=String.fromCharCode(n);t.chars=r+t.chars}this.decodeBuf=_p.from(t.chars,"ucs2");for(var i=_p.alloc(65536,e.defaultCharSingleByte.charCodeAt(0)),n=0;n<t.chars.length;n++)i[t.chars.charCodeAt(n)]=n;this.encodeBuf=i}Zv.prototype.encoder=e0;Zv.prototype.decoder=t0;function e0(t,e){this.encodeBuf=e.encodeBuf}e0.prototype.write=function(t){for(var e=_p.alloc(t.length),r=0;r<t.length;r++)e[r]=this.encodeBuf[t.charCodeAt(r)];return e};e0.prototype.end=function(){};function t0(t,e){this.decodeBuf=e.decodeBuf}t0.prototype.write=function(t){for(var e=this.decodeBuf,r=_p.alloc(t.length*2),n=0,i=0,s=0;s<t.length;s++)n=t[s]*2,i=s*2,r[i]=e[n],r[i+1]=e[n+1];return r.toString("ucs2")};t0.prototype.end=function(){}});var qR=h((yOe,LR)=>{"use strict";LR.exports={10029:"maccenteuro",maccenteuro:{type:"_sbcs",chars:"\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7"},808:"cp808",ibm808:"cp808",cp808:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\u20AC\u25A0\xA0"},mik:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\xA7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},cp720:{type:"_sbcs",chars:"\x80\x81\xE9\xE2\x84\xE0\x86\xE7\xEA\xEB\xE8\xEF\xEE\x8D\x8E\x8F\x90\u0651\u0652\xF4\xA4\u0640\xFB\xF9\u0621\u0622\u0623\u0624\xA3\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0636\u0637\u0638\u0639\u063A\u0641\xB5\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u2261\u064B\u064C\u064D\u064E\u064F\u0650\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ascii8bit:"ascii",usascii:"ascii",ansix34:"ascii",ansix341968:"ascii",ansix341986:"ascii",csascii:"ascii",cp367:"ascii",ibm367:"ascii",isoir6:"ascii",iso646us:"ascii",iso646irv:"ascii",us:"ascii",latin1:"iso88591",latin2:"iso88592",latin3:"iso88593",latin4:"iso88594",latin5:"iso88599",latin6:"iso885910",latin7:"iso885913",latin8:"iso885914",latin9:"iso885915",latin10:"iso885916",csisolatin1:"iso88591",csisolatin2:"iso88592",csisolatin3:"iso88593",csisolatin4:"iso88594",csisolatincyrillic:"iso88595",csisolatinarabic:"iso88596",csisolatingreek:"iso88597",csisolatinhebrew:"iso88598",csisolatin5:"iso88599",csisolatin6:"iso885910",l1:"iso88591",l2:"iso88592",l3:"iso88593",l4:"iso88594",l5:"iso88599",l6:"iso885910",l7:"iso885913",l8:"iso885914",l9:"iso885915",l10:"iso885916",isoir14:"iso646jp",isoir57:"iso646cn",isoir100:"iso88591",isoir101:"iso88592",isoir109:"iso88593",isoir110:"iso88594",isoir144:"iso88595",isoir127:"iso88596",isoir126:"iso88597",isoir138:"iso88598",isoir148:"iso88599",isoir157:"iso885910",isoir166:"tis620",isoir179:"iso885913",isoir199:"iso885914",isoir203:"iso885915",isoir226:"iso885916",cp819:"iso88591",ibm819:"iso88591",cyrillic:"iso88595",arabic:"iso88596",arabic8:"iso88596",ecma114:"iso88596",asmo708:"iso88596",greek:"iso88597",greek8:"iso88597",ecma118:"iso88597",elot928:"iso88597",hebrew:"iso88598",hebrew8:"iso88598",iso88598i:"iso88598",iso88598e:"iso88598",turkish:"iso88599",turkish8:"iso88599",thai:"iso885911",thai8:"iso885911",celtic:"iso885914",celtic8:"iso885914",isoceltic:"iso885914",tis6200:"tis620",tis62025291:"tis620",tis62025330:"tis620",1e4:"macroman",10006:"macgreek",10007:"maccyrillic",10079:"maciceland",10081:"macturkish",cspc8codepage437:"cp437",cspc775baltic:"cp775",cspc850multilingual:"cp850",cspcp852:"cp852",cspc862latinhebrew:"cp862",cpgr:"cp869",msee:"cp1250",mscyrl:"cp1251",msansi:"cp1252",msgreek:"cp1253",msturk:"cp1254",mshebr:"cp1255",msarab:"cp1256",winbaltrim:"cp1257",cp20866:"koi8r",20866:"koi8r",ibm878:"koi8r",cskoi8r:"koi8r",cp21866:"koi8u",21866:"koi8u",ibm1168:"koi8u",strk10482002:"rk1048",tcvn5712:"tcvn",tcvn57121:"tcvn",gb198880:"iso646cn",cn:"iso646cn",csiso14jisc6220ro:"iso646jp",jisc62201969ro:"iso646jp",jp:"iso646jp",cshproman8:"hproman8",r8:"hproman8",roman8:"hproman8",xroman8:"hproman8",ibm1051:"hproman8",mac:"macintosh",csmacintosh:"macintosh"}});var $R=h((gOe,FR)=>{"use strict";FR.exports={437:"cp437",737:"cp737",775:"cp775",850:"cp850",852:"cp852",855:"cp855",856:"cp856",857:"cp857",858:"cp858",860:"cp860",861:"cp861",862:"cp862",863:"cp863",864:"cp864",865:"cp865",866:"cp866",869:"cp869",874:"windows874",922:"cp922",1046:"cp1046",1124:"cp1124",1125:"cp1125",1129:"cp1129",1133:"cp1133",1161:"cp1161",1162:"cp1162",1163:"cp1163",1250:"windows1250",1251:"windows1251",1252:"windows1252",1253:"windows1253",1254:"windows1254",1255:"windows1255",1256:"windows1256",1257:"windows1257",1258:"windows1258",28591:"iso88591",28592:"iso88592",28593:"iso88593",28594:"iso88594",28595:"iso88595",28596:"iso88596",28597:"iso88597",28598:"iso88598",28599:"iso88599",28600:"iso885910",28601:"iso885911",28603:"iso885913",28604:"iso885914",28605:"iso885915",28606:"iso885916",windows874:{type:"_sbcs",chars:"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"},win874:"windows874",cp874:"windows874",windows1250:{type:"_sbcs",chars:"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\xA0\u02C7\u02D8\u0141\xA4\u0104\xA6\xA7\xA8\xA9\u015E\xAB\xAC\xAD\xAE\u017B\xB0\xB1\u02DB\u0142\xB4\xB5\xB6\xB7\xB8\u0105\u015F\xBB\u013D\u02DD\u013E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"},win1250:"windows1250",cp1250:"windows1250",windows1251:{type:"_sbcs",chars:"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\xA0\u040E\u045E\u0408\xA4\u0490\xA6\xA7\u0401\xA9\u0404\xAB\xAC\xAD\xAE\u0407\xB0\xB1\u0406\u0456\u0491\xB5\xB6\xB7\u0451\u2116\u0454\xBB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"},win1251:"windows1251",cp1251:"windows1251",windows1252:{type:"_sbcs",chars:"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"},win1252:"windows1252",cp1252:"windows1252",windows1253:{type:"_sbcs",chars:"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0385\u0386\xA3\xA4\xA5\xA6\xA7\xA8\xA9\uFFFD\xAB\xAC\xAD\xAE\u2015\xB0\xB1\xB2\xB3\u0384\xB5\xB6\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"},win1253:"windows1253",cp1253:"windows1253",windows1254:{type:"_sbcs",chars:"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"},win1254:"windows1254",cp1254:"windows1254",windows1255:{type:"_sbcs",chars:"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\xA1\xA2\xA3\u20AA\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\xBF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"},win1255:"windows1255",cp1255:"windows1255",windows1256:{type:"_sbcs",chars:"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\xA0\u060C\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\u06BE\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\u061B\xBB\xBC\xBD\xBE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\xD7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\xE0\u0644\xE2\u0645\u0646\u0647\u0648\xE7\xE8\xE9\xEA\xEB\u0649\u064A\xEE\xEF\u064B\u064C\u064D\u064E\xF4\u064F\u0650\xF7\u0651\xF9\u0652\xFB\xFC\u200E\u200F\u06D2"},win1256:"windows1256",cp1256:"windows1256",windows1257:{type:"_sbcs",chars:"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\xA8\u02C7\xB8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\xAF\u02DB\uFFFD\xA0\uFFFD\xA2\xA3\xA4\uFFFD\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u02D9"},win1257:"windows1257",cp1257:"windows1257",windows1258:{type:"_sbcs",chars:"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"},win1258:"windows1258",cp1258:"windows1258",iso88591:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"},cp28591:"iso88591",iso88592:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u02D8\u0141\xA4\u013D\u015A\xA7\xA8\u0160\u015E\u0164\u0179\xAD\u017D\u017B\xB0\u0105\u02DB\u0142\xB4\u013E\u015B\u02C7\xB8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"},cp28592:"iso88592",iso88593:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0126\u02D8\xA3\xA4\uFFFD\u0124\xA7\xA8\u0130\u015E\u011E\u0134\xAD\uFFFD\u017B\xB0\u0127\xB2\xB3\xB4\xB5\u0125\xB7\xB8\u0131\u015F\u011F\u0135\xBD\uFFFD\u017C\xC0\xC1\xC2\uFFFD\xC4\u010A\u0108\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\uFFFD\xD1\xD2\xD3\xD4\u0120\xD6\xD7\u011C\xD9\xDA\xDB\xDC\u016C\u015C\xDF\xE0\xE1\xE2\uFFFD\xE4\u010B\u0109\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\uFFFD\xF1\xF2\xF3\xF4\u0121\xF6\xF7\u011D\xF9\xFA\xFB\xFC\u016D\u015D\u02D9"},cp28593:"iso88593",iso88594:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0138\u0156\xA4\u0128\u013B\xA7\xA8\u0160\u0112\u0122\u0166\xAD\u017D\xAF\xB0\u0105\u02DB\u0157\xB4\u0129\u013C\u02C7\xB8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\u012A\u0110\u0145\u014C\u0136\xD4\xD5\xD6\xD7\xD8\u0172\xDA\xDB\xDC\u0168\u016A\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\u012B\u0111\u0146\u014D\u0137\xF4\xF5\xF6\xF7\xF8\u0173\xFA\xFB\xFC\u0169\u016B\u02D9"},cp28594:"iso88594",iso88595:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"},cp28595:"iso88595",iso88596:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\uFFFD\uFFFD\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\xAD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"},cp28596:"iso88596",iso88597:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u2018\u2019\xA3\u20AC\u20AF\xA6\xA7\xA8\xA9\u037A\xAB\xAC\xAD\uFFFD\u2015\xB0\xB1\xB2\xB3\u0384\u0385\u0386\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"},cp28597:"iso88597",iso88598:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"},cp28598:"iso88598",iso88599:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"},cp28599:"iso88599",iso885910:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0112\u0122\u012A\u0128\u0136\xA7\u013B\u0110\u0160\u0166\u017D\xAD\u016A\u014A\xB0\u0105\u0113\u0123\u012B\u0129\u0137\xB7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\xCF\xD0\u0145\u014C\xD3\xD4\xD5\xD6\u0168\xD8\u0172\xDA\xDB\xDC\xDD\xDE\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\xEF\xF0\u0146\u014D\xF3\xF4\xF5\xF6\u0169\xF8\u0173\xFA\xFB\xFC\xFD\xFE\u0138"},cp28600:"iso885910",iso885911:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"},cp28601:"iso885911",iso885913:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u201D\xA2\xA3\xA4\u201E\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\u201C\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u2019"},cp28603:"iso885913",iso885914:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u1E02\u1E03\xA3\u010A\u010B\u1E0A\xA7\u1E80\xA9\u1E82\u1E0B\u1EF2\xAD\xAE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\xB6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0174\xD1\xD2\xD3\xD4\xD5\xD6\u1E6A\xD8\xD9\xDA\xDB\xDC\xDD\u0176\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0175\xF1\xF2\xF3\xF4\xF5\xF6\u1E6B\xF8\xF9\xFA\xFB\xFC\xFD\u0177\xFF"},cp28604:"iso885914",iso885915:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\u0160\xA7\u0161\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u017D\xB5\xB6\xB7\u017E\xB9\xBA\xBB\u0152\u0153\u0178\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"},cp28605:"iso885915",iso885916:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0105\u0141\u20AC\u201E\u0160\xA7\u0161\xA9\u0218\xAB\u0179\xAD\u017A\u017B\xB0\xB1\u010C\u0142\u017D\u201D\xB6\xB7\u017E\u010D\u0219\xBB\u0152\u0153\u0178\u017C\xC0\xC1\xC2\u0102\xC4\u0106\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0110\u0143\xD2\xD3\xD4\u0150\xD6\u015A\u0170\xD9\xDA\xDB\xDC\u0118\u021A\xDF\xE0\xE1\xE2\u0103\xE4\u0107\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0111\u0144\xF2\xF3\xF4\u0151\xF6\u015B\u0171\xF9\xFA\xFB\xFC\u0119\u021B\xFF"},cp28606:"iso885916",cp437:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ibm437:"cp437",csibm437:"cp437",cp737:{type:"_sbcs",chars:"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ibm737:"cp737",csibm737:"cp737",cp775:{type:"_sbcs",chars:"\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0"},ibm775:"cp775",csibm775:"cp775",cp850:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"},ibm850:"cp850",csibm850:"cp850",cp852:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0"},ibm852:"cp852",csibm852:"cp852",cp855:{type:"_sbcs",chars:"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0"},ibm855:"cp855",csibm855:"cp855",cp856:{type:"_sbcs",chars:"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\xA3\uFFFD\xD7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAE\xAC\xBD\xBC\uFFFD\xAB\xBB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\xA6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xB5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"},ibm856:"cp856",csibm856:"cp856",cp857:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\u0131\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\u0130\xD6\xDC\xF8\xA3\xD8\u015E\u015F\xE1\xED\xF3\xFA\xF1\xD1\u011E\u011F\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xBA\xAA\xCA\xCB\xC8\uFFFD\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\uFFFD\xD7\xDA\xDB\xD9\xEC\xFF\xAF\xB4\xAD\xB1\uFFFD\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"},ibm857:"cp857",csibm857:"cp857",cp858:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"},ibm858:"cp858",csibm858:"cp858",cp860:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ibm860:"cp860",csibm860:"cp860",cp861:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ibm861:"cp861",csibm861:"cp861",cp862:{type:"_sbcs",chars:"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ibm862:"cp862",csibm862:"cp862",cp863:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ibm863:"cp863",csibm863:"cp863",cp864:{type:"_sbcs",chars:`\0\x07\b
|
||
\v\f\r\x1B !"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xB0\xB7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\xB1\xBD\xBC\u2248\xAB\xBB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\xA0\xAD\uFE82\xA3\xA4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\xA2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\xA6\xAC\xF7\xD7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD`},ibm864:"cp864",csibm864:"cp864",cp865:{type:"_sbcs",chars:"\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"},ibm865:"cp865",csibm865:"cp865",cp866:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"},ibm866:"cp866",csibm866:"cp866",cp869:{type:"_sbcs",chars:"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\xB7\xAC\xA6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\xA9\u038F\xB2\xB3\u03AC\xA3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\xBD\u0398\u0399\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\xAD\xB1\u03C5\u03C6\u03C7\xA7\u03C8\u0385\xB0\xA8\u03C9\u03CB\u03B0\u03CE\u25A0\xA0"},ibm869:"cp869",csibm869:"cp869",cp922:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\u203E\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0160\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\u017D\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0161\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\u017E\xFF"},ibm922:"cp922",csibm922:"cp922",cp1046:{type:"_sbcs",chars:"\uFE88\xD7\xF7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\x88\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\xA0\uF8FA\uF8F9\uF8F8\xA4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\xAD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD"},ibm1046:"cp1046",csibm1046:"cp1046",cp1124:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"},ibm1124:"cp1124",csibm1124:"cp1124",cp1125:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\xB7\u221A\u2116\xA4\u25A0\xA0"},ibm1125:"cp1125",csibm1125:"cp1125",cp1129:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"},ibm1129:"cp1129",csibm1129:"cp1129",cp1133:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\xA2\xAC\xA6\uFFFD"},ibm1133:"cp1133",csibm1133:"cp1133",cp1161:{type:"_sbcs",chars:"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\xA2\xAC\xA6\xA0"},ibm1161:"cp1161",csibm1161:"cp1161",cp1162:{type:"_sbcs",chars:"\u20AC\x81\x82\x83\x84\u2026\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"},ibm1162:"cp1162",csibm1162:"cp1162",cp1163:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"},ibm1163:"cp1163",csibm1163:"cp1163",maccroatian:{type:"_sbcs",chars:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u2126\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uFFFD\xA9\u2044\xA4\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7"},maccyrillic:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\xA2\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"},macgreek:{type:"_sbcs",chars:"\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\xAD\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\u0387\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD"},maciceland:{type:"_sbcs",chars:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"},macroman:{type:"_sbcs",chars:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"},macromania:{type:"_sbcs",chars:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u015E\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\u0103\u015F\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\u0162\u0163\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"},macthai:{type:"_sbcs",chars:"\xAB\xBB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\xAE\xA9\uFFFD\uFFFD\uFFFD\uFFFD"},macturkish:{type:"_sbcs",chars:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\uFFFD\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"},macukraine:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"},koi8r:{type:"_sbcs",chars:"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"},koi8u:{type:"_sbcs",chars:"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"},koi8ru:{type:"_sbcs",chars:"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"},koi8t:{type:"_sbcs",chars:"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\xA4\u04E3\xA6\xA7\uFFFD\uFFFD\uFFFD\xAB\xAC\xAD\xAE\uFFFD\xB0\xB1\xB2\u0401\uFFFD\u04E2\xB6\xB7\uFFFD\u2116\uFFFD\xBB\uFFFD\uFFFD\uFFFD\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"},armscii8:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\u0587\u0589)(\xBB\xAB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD"},rk1048:{type:"_sbcs",chars:"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\xA0\u04B0\u04B1\u04D8\xA4\u04E8\xA6\xA7\u0401\xA9\u0492\xAB\xAC\xAD\xAE\u04AE\xB0\xB1\u0406\u0456\u04E9\xB5\xB6\xB7\u0451\u2116\u0493\xBB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"},tcvn:{type:"_sbcs",chars:`\0\xDA\u1EE4\u1EEA\u1EEC\u1EEE\x07\b
|
||
\v\f\r\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\xDD\u1EF4\x1B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC0\u1EA2\xC3\xC1\u1EA0\u1EB6\u1EAC\xC8\u1EBA\u1EBC\xC9\u1EB8\u1EC6\xCC\u1EC8\u0128\xCD\u1ECA\xD2\u1ECE\xD5\xD3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\xD9\u1EE6\u0168\xA0\u0102\xC2\xCA\xD4\u01A0\u01AF\u0110\u0103\xE2\xEA\xF4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\xE0\u1EA3\xE3\xE1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\xE8\u1EC2\u1EBB\u1EBD\xE9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\xEC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\xED\u1ECB\xF2\u1ED4\u1ECF\xF5\xF3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\xF9\u1ED6\u1EE7\u0169\xFA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\xFD\u1EF5\u1ED0`},georgianacademy:{type:"_sbcs",chars:"\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"},georgianps:{type:"_sbcs",chars:"\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"},pt154:{type:"_sbcs",chars:"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\xA0\u040E\u045E\u0408\u04E8\u0498\u04B0\xA7\u0401\xA9\u04D8\xAB\xAC\u04EF\xAE\u049C\xB0\u04B1\u0406\u0456\u0499\u04E9\xB6\xB7\u0451\u2116\u04D9\xBB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"},viscii:{type:"_sbcs",chars:`\0\u1EB2\u1EB4\u1EAA\x07\b
|
||
\v\f\r\u1EF6\u1EF8\x1B\u1EF4 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\xD5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\xC0\xC1\xC2\xC3\u1EA2\u0102\u1EB3\u1EB5\xC8\xC9\xCA\u1EBA\xCC\xCD\u0128\u1EF3\u0110\u1EE9\xD2\xD3\xD4\u1EA1\u1EF7\u1EEB\u1EED\xD9\xDA\u1EF9\u1EF5\xDD\u1EE1\u01B0\xE0\xE1\xE2\xE3\u1EA3\u0103\u1EEF\u1EAB\xE8\xE9\xEA\u1EBB\xEC\xED\u0129\u1EC9\u0111\u1EF1\xF2\xF3\xF4\xF5\u1ECF\u1ECD\u1EE5\xF9\xFA\u0169\u1EE7\xFD\u1EE3\u1EEE`},iso646cn:{type:"_sbcs",chars:`\0\x07\b
|
||
\v\f\r\x1B !"#\xA5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD`},iso646jp:{type:"_sbcs",chars:`\0\x07\b
|
||
\v\f\r\x1B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\xA5]^_\`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD`},hproman8:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xC0\xC2\xC8\xCA\xCB\xCE\xCF\xB4\u02CB\u02C6\xA8\u02DC\xD9\xDB\u20A4\xAF\xDD\xFD\xB0\xC7\xE7\xD1\xF1\xA1\xBF\xA4\xA3\xA5\xA7\u0192\xA2\xE2\xEA\xF4\xFB\xE1\xE9\xF3\xFA\xE0\xE8\xF2\xF9\xE4\xEB\xF6\xFC\xC5\xEE\xD8\xC6\xE5\xED\xF8\xE6\xC4\xEC\xD6\xDC\xC9\xEF\xDF\xD4\xC1\xC3\xE3\xD0\xF0\xCD\xCC\xD3\xD2\xD5\xF5\u0160\u0161\xDA\u0178\xFF\xDE\xFE\xB7\xB5\xB6\xBE\u2014\xBC\xBD\xAA\xBA\xAB\u25A0\xBB\xB1\uFFFD"},macintosh:{type:"_sbcs",chars:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"},ascii:{type:"_sbcs",chars:"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"},tis620:{type:"_sbcs",chars:"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"}}});var zR=h(JR=>{"use strict";var r0=bi().Buffer;JR._dbcs=Ei;var Kt=-1,UR=-2,Vr=-10,ar=-1e3,Ra=new Array(256),Ol=-1;for(Ip=0;Ip<256;Ip++)Ra[Ip]=Kt;var Ip;function Ei(t,e){if(this.encodingName=t.encodingName,!t)throw new Error("DBCS codec is called without the data.");if(!t.table)throw new Error("Encoding '"+this.encodingName+"' has no data.");var r=t.table();this.decodeTables=[],this.decodeTables[0]=Ra.slice(0),this.decodeTableSeq=[];for(var n=0;n<r.length;n++)this._addDecodeChunk(r[n]);if(typeof t.gb18030=="function"){this.gb18030=t.gb18030();var i=this.decodeTables.length;this.decodeTables.push(Ra.slice(0));var s=this.decodeTables.length;this.decodeTables.push(Ra.slice(0));for(var o=this.decodeTables[0],n=129;n<=254;n++)for(var a=this.decodeTables[ar-o[n]],c=48;c<=57;c++){if(a[c]===Kt)a[c]=ar-i;else if(a[c]>ar)throw new Error("gb18030 decode tables conflict at byte 2");for(var l=this.decodeTables[ar-a[c]],u=129;u<=254;u++){if(l[u]===Kt)l[u]=ar-s;else{if(l[u]===ar-s)continue;if(l[u]>ar)throw new Error("gb18030 decode tables conflict at byte 3")}for(var d=this.decodeTables[ar-l[u]],p=48;p<=57;p++)d[p]===Kt&&(d[p]=UR)}}}this.defaultCharUnicode=e.defaultCharUnicode,this.encodeTable=[],this.encodeTableSeq=[];var f={};if(t.encodeSkipVals)for(var n=0;n<t.encodeSkipVals.length;n++){var m=t.encodeSkipVals[n];if(typeof m=="number")f[m]=!0;else for(var c=m.from;c<=m.to;c++)f[c]=!0}if(this._fillEncodeTable(0,0,f),t.encodeAdd)for(var y in t.encodeAdd)Object.prototype.hasOwnProperty.call(t.encodeAdd,y)&&this._setEncodeChar(y.charCodeAt(0),t.encodeAdd[y]);this.defCharSB=this.encodeTable[0][e.defaultCharSingleByte.charCodeAt(0)],this.defCharSB===Kt&&(this.defCharSB=this.encodeTable[0]["?"]),this.defCharSB===Kt&&(this.defCharSB=63)}Ei.prototype.encoder=Tp;Ei.prototype.decoder=n0;Ei.prototype._getDecodeTrieNode=function(t){for(var e=[];t>0;t>>>=8)e.push(t&255);e.length==0&&e.push(0);for(var r=this.decodeTables[0],n=e.length-1;n>0;n--){var i=r[e[n]];if(i==Kt)r[e[n]]=ar-this.decodeTables.length,this.decodeTables.push(r=Ra.slice(0));else if(i<=ar)r=this.decodeTables[ar-i];else throw new Error("Overwrite byte in "+this.encodingName+", addr: "+t.toString(16))}return r};Ei.prototype._addDecodeChunk=function(t){var e=parseInt(t[0],16),r=this._getDecodeTrieNode(e);e=e&255;for(var n=1;n<t.length;n++){var i=t[n];if(typeof i=="string")for(var s=0;s<i.length;){var o=i.charCodeAt(s++);if(o>=55296&&o<56320){var a=i.charCodeAt(s++);if(a>=56320&&a<57344)r[e++]=65536+(o-55296)*1024+(a-56320);else throw new Error("Incorrect surrogate pair in "+this.encodingName+" at chunk "+t[0])}else if(o>4080&&o<=4095){for(var c=4095-o+2,l=[],u=0;u<c;u++)l.push(i.charCodeAt(s++));r[e++]=Vr-this.decodeTableSeq.length,this.decodeTableSeq.push(l)}else r[e++]=o}else if(typeof i=="number")for(var d=r[e-1]+1,s=0;s<i;s++)r[e++]=d++;else throw new Error("Incorrect type '"+typeof i+"' given in "+this.encodingName+" at chunk "+t[0])}if(e>255)throw new Error("Incorrect chunk in "+this.encodingName+" at addr "+t[0]+": too long"+e)};Ei.prototype._getEncodeBucket=function(t){var e=t>>8;return this.encodeTable[e]===void 0&&(this.encodeTable[e]=Ra.slice(0)),this.encodeTable[e]};Ei.prototype._setEncodeChar=function(t,e){var r=this._getEncodeBucket(t),n=t&255;r[n]<=Vr?this.encodeTableSeq[Vr-r[n]][Ol]=e:r[n]==Kt&&(r[n]=e)};Ei.prototype._setEncodeSequence=function(t,e){var r=t[0],n=this._getEncodeBucket(r),i=r&255,s;n[i]<=Vr?s=this.encodeTableSeq[Vr-n[i]]:(s={},n[i]!==Kt&&(s[Ol]=n[i]),n[i]=Vr-this.encodeTableSeq.length,this.encodeTableSeq.push(s));for(var o=1;o<t.length-1;o++){var a=s[r];typeof a=="object"?s=a:(s=s[r]={},a!==void 0&&(s[Ol]=a))}r=t[t.length-1],s[r]=e};Ei.prototype._fillEncodeTable=function(t,e,r){for(var n=this.decodeTables[t],i=!1,s={},o=0;o<256;o++){var a=n[o],c=e+o;if(!r[c])if(a>=0)this._setEncodeChar(a,c),i=!0;else if(a<=ar){var l=ar-a;if(!s[l]){var u=c<<8>>>0;this._fillEncodeTable(l,u,r)?i=!0:s[l]=!0}}else a<=Vr&&(this._setEncodeSequence(this.decodeTableSeq[Vr-a],c),i=!0)}return i};function Tp(t,e){this.leadSurrogate=-1,this.seqObj=void 0,this.encodeTable=e.encodeTable,this.encodeTableSeq=e.encodeTableSeq,this.defaultCharSingleByte=e.defCharSB,this.gb18030=e.gb18030}Tp.prototype.write=function(t){for(var e=r0.alloc(t.length*(this.gb18030?4:3)),r=this.leadSurrogate,n=this.seqObj,i=-1,s=0,o=0;;){if(i===-1){if(s==t.length)break;var a=t.charCodeAt(s++)}else{var a=i;i=-1}if(a>=55296&&a<57344)if(a<56320)if(r===-1){r=a;continue}else r=a,a=Kt;else r!==-1?(a=65536+(r-55296)*1024+(a-56320),r=-1):a=Kt;else r!==-1&&(i=a,a=Kt,r=-1);var c=Kt;if(n!==void 0&&a!=Kt){var l=n[a];if(typeof l=="object"){n=l;continue}else typeof l=="number"?c=l:l==null&&(l=n[Ol],l!==void 0&&(c=l,i=a));n=void 0}else if(a>=0){var u=this.encodeTable[a>>8];if(u!==void 0&&(c=u[a&255]),c<=Vr){n=this.encodeTableSeq[Vr-c];continue}if(c==Kt&&this.gb18030){var d=i0(this.gb18030.uChars,a);if(d!=-1){var c=this.gb18030.gbChars[d]+(a-this.gb18030.uChars[d]);e[o++]=129+Math.floor(c/12600),c=c%12600,e[o++]=48+Math.floor(c/1260),c=c%1260,e[o++]=129+Math.floor(c/10),c=c%10,e[o++]=48+c;continue}}}c===Kt&&(c=this.defaultCharSingleByte),c<256?e[o++]=c:c<65536?(e[o++]=c>>8,e[o++]=c&255):c<16777216?(e[o++]=c>>16,e[o++]=c>>8&255,e[o++]=c&255):(e[o++]=c>>>24,e[o++]=c>>>16&255,e[o++]=c>>>8&255,e[o++]=c&255)}return this.seqObj=n,this.leadSurrogate=r,e.slice(0,o)};Tp.prototype.end=function(){if(!(this.leadSurrogate===-1&&this.seqObj===void 0)){var t=r0.alloc(10),e=0;if(this.seqObj){var r=this.seqObj[Ol];r!==void 0&&(r<256?t[e++]=r:(t[e++]=r>>8,t[e++]=r&255)),this.seqObj=void 0}return this.leadSurrogate!==-1&&(t[e++]=this.defaultCharSingleByte,this.leadSurrogate=-1),t.slice(0,e)}};Tp.prototype.findIdx=i0;function n0(t,e){this.nodeIdx=0,this.prevBytes=[],this.decodeTables=e.decodeTables,this.decodeTableSeq=e.decodeTableSeq,this.defaultCharUnicode=e.defaultCharUnicode,this.gb18030=e.gb18030}n0.prototype.write=function(t){for(var e=r0.alloc(t.length*2),r=this.nodeIdx,n=this.prevBytes,i=this.prevBytes.length,s=-this.prevBytes.length,o,a=0,c=0;a<t.length;a++){var l=a>=0?t[a]:n[a+i],o=this.decodeTables[r][l];if(!(o>=0))if(o===Kt)o=this.defaultCharUnicode.charCodeAt(0),a=s;else if(o===UR){if(a>=3)var u=(t[a-3]-129)*12600+(t[a-2]-48)*1260+(t[a-1]-129)*10+(l-48);else var u=(n[a-3+i]-129)*12600+((a-2>=0?t[a-2]:n[a-2+i])-48)*1260+((a-1>=0?t[a-1]:n[a-1+i])-129)*10+(l-48);var d=i0(this.gb18030.gbChars,u);o=this.gb18030.uChars[d]+u-this.gb18030.gbChars[d]}else if(o<=ar){r=ar-o;continue}else if(o<=Vr){for(var p=this.decodeTableSeq[Vr-o],f=0;f<p.length-1;f++)o=p[f],e[c++]=o&255,e[c++]=o>>8;o=p[p.length-1]}else throw new Error("iconv-lite internal error: invalid decoding table value "+o+" at "+r+"/"+l);if(o>=65536){o-=65536;var m=55296|o>>10;e[c++]=m&255,e[c++]=m>>8,o=56320|o&1023}e[c++]=o&255,e[c++]=o>>8,r=0,s=a+1}return this.nodeIdx=r,this.prevBytes=s>=0?Array.prototype.slice.call(t,s):n.slice(s+i).concat(Array.prototype.slice.call(t)),e.slice(0,c).toString("ucs2")};n0.prototype.end=function(){for(var t="";this.prevBytes.length>0;){t+=this.defaultCharUnicode;var e=this.prevBytes.slice(1);this.prevBytes=[],this.nodeIdx=0,e.length>0&&(t+=this.write(e))}return this.prevBytes=[],this.nodeIdx=0,t};function i0(t,e){if(t[0]>e)return-1;for(var r=0,n=t.length;r<n-1;){var i=r+(n-r+1>>1);t[i]<=e?r=i:n=i}return r}});var GR=h((vOe,yY)=>{yY.exports=[["0","\0",128],["a1","\uFF61",62],["8140","\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008",9,"\uFF0B\uFF0D\xB1\xD7"],["8180","\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],["81b8","\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],["81c8","\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],["81da","\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],["81f0","\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],["81fc","\u25EF"],["824f","\uFF10",9],["8260","\uFF21",25],["8281","\uFF41",25],["829f","\u3041",82],["8340","\u30A1",62],["8380","\u30E0",22],["839f","\u0391",16,"\u03A3",6],["83bf","\u03B1",16,"\u03C3",6],["8440","\u0410",5,"\u0401\u0416",25],["8470","\u0430",5,"\u0451\u0436",7],["8480","\u043E",17],["849f","\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],["8740","\u2460",19,"\u2160",9],["875f","\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],["877e","\u337B"],["8780","\u301D\u301F\u2116\u33CD\u2121\u32A4",4,"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],["889f","\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],["8940","\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186"],["8980","\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],["8a40","\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B"],["8a80","\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],["8b40","\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551"],["8b80","\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],["8c40","\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8"],["8c80","\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],["8d40","\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D"],["8d80","\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],["8e40","\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62"],["8e80","\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],["8f40","\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3"],["8f80","\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],["9040","\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8"],["9080","\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],["9140","\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB"],["9180","\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],["9240","\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4"],["9280","\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],["9340","\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC"],["9380","\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],["9440","\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885"],["9480","\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],["9540","\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577"],["9580","\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],["9640","\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6"],["9680","\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],["9740","\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32"],["9780","\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],["9840","\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],["989f","\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],["9940","\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED"],["9980","\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],["9a40","\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638"],["9a80","\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],["9b40","\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80"],["9b80","\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],["9c40","\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060"],["9c80","\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],["9d40","\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B"],["9d80","\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],["9e40","\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E"],["9e80","\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],["9f40","\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF"],["9f80","\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],["e040","\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD"],["e080","\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],["e140","\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF"],["e180","\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],["e240","\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0"],["e280","\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],["e340","\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37"],["e380","\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],["e440","\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264"],["e480","\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],["e540","\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC"],["e580","\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],["e640","\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7"],["e680","\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],["e740","\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C"],["e780","\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],["e840","\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599"],["e880","\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],["e940","\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43"],["e980","\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],["ea40","\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF"],["ea80","\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199"],["ed40","\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F"],["ed80","\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],["ee40","\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559"],["ee80","\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],["eeef","\u2170",9,"\uFFE2\uFFE4\uFF07\uFF02"],["f040","\uE000",62],["f080","\uE03F",124],["f140","\uE0BC",62],["f180","\uE0FB",124],["f240","\uE178",62],["f280","\uE1B7",124],["f340","\uE234",62],["f380","\uE273",124],["f440","\uE2F0",62],["f480","\uE32F",124],["f540","\uE3AC",62],["f580","\uE3EB",124],["f640","\uE468",62],["f680","\uE4A7",124],["f740","\uE524",62],["f780","\uE563",124],["f840","\uE5E0",62],["f880","\uE61F",124],["f940","\uE69C"],["fa40","\u2170",9,"\u2160",9,"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A"],["fa80","\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"],["fb40","\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19"],["fb80","\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"],["fc40","\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"]]});var BR=h((EOe,gY)=>{gY.exports=[["0","\0",127],["8ea1","\uFF61",62],["a1a1","\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008",9,"\uFF0B\uFF0D\xB1\xD7\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7"],["a2a1","\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],["a2ba","\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],["a2ca","\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],["a2dc","\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],["a2f2","\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],["a2fe","\u25EF"],["a3b0","\uFF10",9],["a3c1","\uFF21",25],["a3e1","\uFF41",25],["a4a1","\u3041",82],["a5a1","\u30A1",85],["a6a1","\u0391",16,"\u03A3",6],["a6c1","\u03B1",16,"\u03C3",6],["a7a1","\u0410",5,"\u0401\u0416",25],["a7d1","\u0430",5,"\u0451\u0436",25],["a8a1","\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],["ada1","\u2460",19,"\u2160",9],["adc0","\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],["addf","\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4",4,"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],["b0a1","\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],["b1a1","\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"],["b2a1","\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],["b3a1","\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431"],["b4a1","\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],["b5a1","\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"],["b6a1","\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],["b7a1","\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372"],["b8a1","\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],["b9a1","\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"],["baa1","\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],["bba1","\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642"],["bca1","\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],["bda1","\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"],["bea1","\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],["bfa1","\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE"],["c0a1","\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],["c1a1","\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"],["c2a1","\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],["c3a1","\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5"],["c4a1","\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],["c5a1","\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"],["c6a1","\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],["c7a1","\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6"],["c8a1","\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],["c9a1","\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"],["caa1","\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],["cba1","\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80"],["cca1","\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],["cda1","\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"],["cea1","\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],["cfa1","\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],["d0a1","\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],["d1a1","\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"],["d2a1","\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],["d3a1","\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709"],["d4a1","\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],["d5a1","\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"],["d6a1","\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],["d7a1","\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A"],["d8a1","\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],["d9a1","\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"],["daa1","\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],["dba1","\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD"],["dca1","\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],["dda1","\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"],["dea1","\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],["dfa1","\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC"],["e0a1","\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],["e1a1","\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"],["e2a1","\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],["e3a1","\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50"],["e4a1","\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],["e5a1","\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"],["e6a1","\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],["e7a1","\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9"],["e8a1","\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],["e9a1","\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"],["eaa1","\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],["eba1","\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B"],["eca1","\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],["eda1","\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"],["eea1","\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],["efa1","\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E"],["f0a1","\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],["f1a1","\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"],["f2a1","\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],["f3a1","\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0"],["f4a1","\u582F\u69C7\u9059\u7464\u51DC\u7199"],["f9a1","\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7"],["faa1","\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],["fba1","\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA"],["fca1","\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],["fcf1","\u2170",9,"\uFFE2\uFFE4\uFF07\uFF02"],["8fa2af","\u02D8\u02C7\xB8\u02D9\u02DD\xAF\u02DB\u02DA\uFF5E\u0384\u0385"],["8fa2c2","\xA1\xA6\xBF"],["8fa2eb","\xBA\xAA\xA9\xAE\u2122\xA4\u2116"],["8fa6e1","\u0386\u0388\u0389\u038A\u03AA"],["8fa6e7","\u038C"],["8fa6e9","\u038E\u03AB"],["8fa6ec","\u038F"],["8fa6f1","\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"],["8fa7c2","\u0402",10,"\u040E\u040F"],["8fa7f2","\u0452",10,"\u045E\u045F"],["8fa9a1","\xC6\u0110"],["8fa9a4","\u0126"],["8fa9a6","\u0132"],["8fa9a8","\u0141\u013F"],["8fa9ab","\u014A\xD8\u0152"],["8fa9af","\u0166\xDE"],["8fa9c1","\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\xF8\u0153\xDF\u0167\xFE"],["8faaa1","\xC1\xC0\xC4\xC2\u0102\u01CD\u0100\u0104\xC5\xC3\u0106\u0108\u010C\xC7\u010A\u010E\xC9\xC8\xCB\xCA\u011A\u0116\u0112\u0118"],["8faaba","\u011C\u011E\u0122\u0120\u0124\xCD\xCC\xCF\xCE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\xD1\xD3\xD2\xD6\xD4\u01D1\u0150\u014C\xD5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\xDA\xD9\xDC\xDB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\xDD\u0178\u0176\u0179\u017D\u017B"],["8faba1","\xE1\xE0\xE4\xE2\u0103\u01CE\u0101\u0105\xE5\xE3\u0107\u0109\u010D\xE7\u010B\u010F\xE9\xE8\xEB\xEA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F"],["8fabbd","\u0121\u0125\xED\xEC\xEF\xEE\u01D0"],["8fabc5","\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\xF1\xF3\xF2\xF6\xF4\u01D2\u0151\u014D\xF5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\xFA\xF9\xFC\xFB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\xFD\xFF\u0177\u017A\u017E\u017C"],["8fb0a1","\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"],["8fb1a1","\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090"],["8fb2a1","\u5092\u5093\u5094\u5096\u509B\u509C\u509E",4,"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2"],["8fb3a1","\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B"],["8fb4a1","\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"],["8fb5a1","\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2"],["8fb6a1","\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D",5,"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4",4,"\u56F1\u56EB\u56ED"],["8fb7a1","\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D",4,"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1"],["8fb8a1","\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D"],["8fb9a1","\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF"],["8fbaa1","\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6",4,"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69"],["8fbba1","\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4"],["8fbca1","\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A",4,"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"],["8fbda1","\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0",4,"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7"],["8fbea1","\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110",4,"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5"],["8fbfa1","\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375"],["8fc0a1","\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"],["8fc1a1","\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D"],["8fc2a1","\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D"],["8fc3a1","\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E",4,"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF"],["8fc4a1","\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"],["8fc5a1","\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D"],["8fc6a1","\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6"],["8fc7a1","\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E"],["8fc8a1","\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA"],["8fc9a1","\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094",4,"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103",4,"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160"],["8fcaa1","\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB"],["8fcba1","\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD"],["8fcca1","\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428",9,"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"],["8fcda1","\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579",5,"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639"],["8fcea1","\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2",6,"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762"],["8fcfa1","\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3"],["8fd0a1","\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"],["8fd1a1","\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30"],["8fd2a1","\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59",5],["8fd3a1","\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D"],["8fd4a1","\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2",4,"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"],["8fd5a1","\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE"],["8fd6a1","\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246"],["8fd7a1","\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378"],["8fd8a1","\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3"],["8fd9a1","\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F",4,"\u8556\u8559\u855C",6,"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC"],["8fdaa1","\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660",4,"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723"],["8fdba1","\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783",6,"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835"],["8fdca1","\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA",4,"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"],["8fdda1","\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4",4,"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3"],["8fdea1","\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42",4,"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86"],["8fdfa1","\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22"],["8fe0a1","\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"],["8fe1a1","\u8F43\u8F47\u8F4F\u8F51",4,"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3"],["8fe2a1","\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF"],["8fe3a1","\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC",5,"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275",4,"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297"],["8fe4a1","\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF",4,"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"],["8fe5a1","\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9",4,"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579"],["8fe6a1","\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702"],["8fe7a1","\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826"],["8fe8a1","\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931",4,"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5"],["8fe9a1","\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF",4],["8feaa1","\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A",4,"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8"],["8feba1","\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26",4,"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B"],["8feca1","\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"],["8feda1","\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43",4,"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D",4,"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5"]]});var kp=h((SOe,bY)=>{bY.exports=[["0","\0",127,"\u20AC"],["8140","\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A",5,"\u4E72\u4E74",9,"\u4E7F",6,"\u4E87\u4E8A"],["8180","\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02",6,"\u4F0B\u4F0C\u4F12",4,"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E",4,"\u4F44\u4F45\u4F47",5,"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2"],["8240","\u4FA4\u4FAB\u4FAD\u4FB0",4,"\u4FB6",8,"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2",4,"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF",11],["8280","\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F",10,"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050",4,"\u5056\u5057\u5058\u5059\u505B\u505D",7,"\u5066",5,"\u506D",8,"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E",20,"\u50A4\u50A6\u50AA\u50AB\u50AD",4,"\u50B3",6,"\u50BC"],["8340","\u50BD",17,"\u50D0",5,"\u50D7\u50D8\u50D9\u50DB",10,"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6",4,"\u50FC",9,"\u5108"],["8380","\u5109\u510A\u510C",5,"\u5113",13,"\u5122",28,"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D",4,"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6",4,"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2",5],["8440","\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5",5,"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244",5,"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258"],["8480","\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273",9,"\u527E\u5280\u5283",4,"\u5289",6,"\u5291\u5292\u5294",6,"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4",9,"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9",5,"\u52E0\u52E1\u52E2\u52E3\u52E5",10,"\u52F1",7,"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E"],["8540","\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F",9,"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F"],["8580","\u5390",4,"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF",6,"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3",4,"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D",4,"\u5463\u5465\u5467\u5469",7,"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1"],["8640","\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0",4,"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4",5,"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A",4,"\u5512\u5513\u5515",5,"\u551C\u551D\u551E\u551F\u5521\u5525\u5526"],["8680","\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B",4,"\u5551\u5552\u5553\u5554\u5557",4,"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F",5,"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0",6,"\u55A8",8,"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF",4,"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7",4,"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8",4,"\u55FF\u5602\u5603\u5604\u5605"],["8740","\u5606\u5607\u560A\u560B\u560D\u5610",7,"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640",11,"\u564F",4,"\u5655\u5656\u565A\u565B\u565D",4],["8780","\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D",7,"\u5687",6,"\u5690\u5691\u5692\u5694",14,"\u56A4",10,"\u56B0",6,"\u56B8\u56B9\u56BA\u56BB\u56BD",12,"\u56CB",8,"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5",5,"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B",6],["8840","\u5712",9,"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734",4,"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752",4,"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780"],["8880","\u5781\u5787\u5788\u5789\u578A\u578D",4,"\u5794",6,"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9",8,"\u57C4",6,"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5",7,"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825",4,"\u582B",4,"\u5831\u5832\u5833\u5834\u5836",7],["8940","\u583E",5,"\u5845",6,"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859",4,"\u585F",5,"\u5866",4,"\u586D",16,"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C"],["8980","\u588D",4,"\u5894",4,"\u589B\u589C\u589D\u58A0",7,"\u58AA",17,"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6",10,"\u58D2\u58D3\u58D4\u58D6",13,"\u58E5",5,"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA",7,"\u5903\u5905\u5906\u5908",4,"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B"],["8a40","\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B",4,"\u5961\u5963\u5964\u5966",12,"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6"],["8a80","\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3",5,"\u59BA\u59BC\u59BD\u59BF",6,"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE",4,"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED",11,"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A",6,"\u5A33\u5A35\u5A37",4,"\u5A3D\u5A3E\u5A3F\u5A41",4,"\u5A47\u5A48\u5A4B",9,"\u5A56\u5A57\u5A58\u5A59\u5A5B",5],["8b40","\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B",8,"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80",17,"\u5A93",6,"\u5A9C",13,"\u5AAB\u5AAC"],["8b80","\u5AAD",4,"\u5AB4\u5AB6\u5AB7\u5AB9",4,"\u5ABF\u5AC0\u5AC3",5,"\u5ACA\u5ACB\u5ACD",4,"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC",4,"\u5AF2",22,"\u5B0A",11,"\u5B18",25,"\u5B33\u5B35\u5B36\u5B38",7,"\u5B41",6],["8c40","\u5B48",7,"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF"],["8c80","\u5BD1\u5BD4",8,"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9",4,"\u5BEF\u5BF1",6,"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67",6,"\u5C70\u5C72",6,"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83",4,"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D",4,"\u5CA4",4],["8d40","\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5",5,"\u5CCC",5,"\u5CD3",5,"\u5CDA",6,"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1",9,"\u5CFC",4],["8d80","\u5D01\u5D04\u5D05\u5D08",5,"\u5D0F",4,"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F",4,"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F",4,"\u5D35",7,"\u5D3F",7,"\u5D48\u5D49\u5D4D",10,"\u5D59\u5D5A\u5D5C\u5D5E",10,"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75",12,"\u5D83",21,"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0"],["8e40","\u5DA1",21,"\u5DB8",12,"\u5DC6",6,"\u5DCE",12,"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED"],["8e80","\u5DF0\u5DF5\u5DF6\u5DF8",4,"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E",7,"\u5E28",4,"\u5E2F\u5E30\u5E32",4,"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46",5,"\u5E4D",6,"\u5E56",4,"\u5E5C\u5E5D\u5E5F\u5E60\u5E63",14,"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8",4,"\u5EAE",4,"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF",6],["8f40","\u5EC6\u5EC7\u5EC8\u5ECB",5,"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC",11,"\u5EE9\u5EEB",8,"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24"],["8f80","\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32",6,"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41",14,"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2",5,"\u5FA9\u5FAB\u5FAC\u5FAF",5,"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE",4,"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007"],["9040","\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030",4,"\u6036",4,"\u603D\u603E\u6040\u6044",6,"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080"],["9080","\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD",7,"\u60C7\u60C8\u60C9\u60CC",4,"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1",4,"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB",4,"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110",4,"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C",18,"\u6140",6],["9140","\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156",6,"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169",6,"\u6171\u6172\u6173\u6174\u6176\u6178",18,"\u618C\u618D\u618F",4,"\u6195"],["9180","\u6196",6,"\u619E",8,"\u61AA\u61AB\u61AD",9,"\u61B8",5,"\u61BF\u61C0\u61C1\u61C3",4,"\u61C9\u61CC",4,"\u61D3\u61D5",16,"\u61E7",13,"\u61F6",8,"\u6200",5,"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238",4,"\u6242\u6244\u6245\u6246\u624A"],["9240","\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C",6,"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B",5,"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1"],["9280","\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333",5,"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356",7,"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399",6,"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0"],["9340","\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7",6,"\u63DF\u63E2\u63E4",4,"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406",4,"\u640D\u640E\u6411\u6412\u6415",5,"\u641D\u641F\u6422\u6423\u6424"],["9380","\u6425\u6427\u6428\u6429\u642B\u642E",5,"\u6435",4,"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B",6,"\u6453\u6455\u6456\u6457\u6459",4,"\u645F",7,"\u6468\u646A\u646B\u646C\u646E",9,"\u647B",6,"\u6483\u6486\u6488",8,"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F",4,"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6",6,"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA"],["9440","\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7",24,"\u6501",7,"\u650A",7,"\u6513",4,"\u6519",8],["9480","\u6522\u6523\u6524\u6526",4,"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540",4,"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578",14,"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1",7,"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8",7,"\u65E1\u65E3\u65E4\u65EA\u65EB"],["9540","\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB",4,"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637",4,"\u663D\u663F\u6640\u6642\u6644",6,"\u664D\u664E\u6650\u6651\u6658"],["9580","\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669",4,"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698",4,"\u669E",8,"\u66A9",4,"\u66AF",4,"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF",25,"\u66DA\u66DE",7,"\u66E7\u66E8\u66EA",5,"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703"],["9640","\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720",5,"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757",4,"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776"],["9680","\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9",7,"\u67C2\u67C5",9,"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5",7,"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818",4,"\u681E\u681F\u6820\u6822",6,"\u682B",6,"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856",5],["9740","\u685C\u685D\u685E\u685F\u686A\u686C",7,"\u6875\u6878",8,"\u6882\u6884\u6887",7,"\u6890\u6891\u6892\u6894\u6895\u6896\u6898",9,"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8"],["9780","\u68B9",6,"\u68C1\u68C3",5,"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB",4,"\u68E1\u68E2\u68E4",9,"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906",4,"\u690C\u690F\u6911\u6913",11,"\u6921\u6922\u6923\u6925",7,"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943",16,"\u6955\u6956\u6958\u6959\u695B\u695C\u695F"],["9840","\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972",4,"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E",5,"\u6996\u6997\u6999\u699A\u699D",9,"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD"],["9880","\u69BE\u69BF\u69C0\u69C2",7,"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5",5,"\u69DC\u69DD\u69DE\u69E1",11,"\u69EE\u69EF\u69F0\u69F1\u69F3",9,"\u69FE\u6A00",9,"\u6A0B",11,"\u6A19",5,"\u6A20\u6A22",5,"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36",6,"\u6A3F",4,"\u6A45\u6A46\u6A48",7,"\u6A51",6,"\u6A5A"],["9940","\u6A5C",4,"\u6A62\u6A63\u6A64\u6A66",10,"\u6A72",6,"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85",8,"\u6A8F\u6A92",4,"\u6A98",7,"\u6AA1",5],["9980","\u6AA7\u6AA8\u6AAA\u6AAD",114,"\u6B25\u6B26\u6B28",6],["9a40","\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D",11,"\u6B5A",7,"\u6B68\u6B69\u6B6B",13,"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88"],["9a80","\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C",4,"\u6BA2",7,"\u6BAB",7,"\u6BB6\u6BB8",6,"\u6BC0\u6BC3\u6BC4\u6BC6",4,"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC",4,"\u6BE2",7,"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE",6,"\u6C08",4,"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B",4,"\u6C51\u6C52\u6C53\u6C56\u6C58"],["9b40","\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B",4,"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8"],["9b80","\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F",5,"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D",4,"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96",4,"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9",5,"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA"],["9c40","\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD",7,"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35"],["9c80","\u6E36\u6E37\u6E39\u6E3B",7,"\u6E45",7,"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60",10,"\u6E6C\u6E6D\u6E6F",14,"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A",4,"\u6E91",6,"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA",5],["9d40","\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA",7,"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A",4,"\u6F10\u6F11\u6F12\u6F16",9,"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37",6,"\u6F3F\u6F40\u6F41\u6F42"],["9d80","\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E",9,"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67",5,"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D",6,"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F",12,"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2",4,"\u6FA8",10,"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA",5,"\u6FC1\u6FC3",5,"\u6FCA",6,"\u6FD3",10,"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5"],["9e40","\u6FE6",7,"\u6FF0",32,"\u7012",7,"\u701C",6,"\u7024",6],["9e80","\u702B",9,"\u7036\u7037\u7038\u703A",17,"\u704D\u704E\u7050",13,"\u705F",11,"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E",12,"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB",12,"\u70DA"],["9f40","\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0",6,"\u70F8\u70FA\u70FB\u70FC\u70FE",10,"\u710B",4,"\u7111\u7112\u7114\u7117\u711B",10,"\u7127",7,"\u7132\u7133\u7134"],["9f80","\u7135\u7137",13,"\u7146\u7147\u7148\u7149\u714B\u714D\u714F",12,"\u715D\u715F",4,"\u7165\u7169",4,"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E",5,"\u7185",4,"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A",4,"\u71A1",6,"\u71A9\u71AA\u71AB\u71AD",5,"\u71B4\u71B6\u71B7\u71B8\u71BA",8,"\u71C4",9,"\u71CF",4],["a040","\u71D6",9,"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8",5,"\u71EF",9,"\u71FA",11,"\u7207",19],["a080","\u721B\u721C\u721E",9,"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240",6,"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285",4,"\u728C\u728E\u7290\u7291\u7293",11,"\u72A0",11,"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA",6,"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB"],["a1a1","\u3000\u3001\u3002\xB7\u02C9\u02C7\xA8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008",7,"\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013"],["a2a1","\u2170",9],["a2b1","\u2488",19,"\u2474",19,"\u2460",9],["a2e5","\u3220",9],["a2f1","\u2160",11],["a3a1","\uFF01\uFF02\uFF03\uFFE5\uFF05",88,"\uFFE3"],["a4a1","\u3041",82],["a5a1","\u30A1",85],["a6a1","\u0391",16,"\u03A3",6],["a6c1","\u03B1",16,"\u03C3",6],["a6e0","\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44"],["a6ee","\uFE3B\uFE3C\uFE37\uFE38\uFE31"],["a6f4","\uFE33\uFE34"],["a7a1","\u0410",5,"\u0401\u0416",25],["a7d1","\u0430",5,"\u0451\u0436",25],["a840","\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550",35,"\u2581",6],["a880","\u2588",7,"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E"],["a8a1","\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\u0251"],["a8bd","\u0144\u0148"],["a8c0","\u0261"],["a8c5","\u3105",36],["a940","\u3021",8,"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4"],["a959","\u2121\u3231"],["a95c","\u2010"],["a960","\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49",9,"\uFE54\uFE55\uFE56\uFE57\uFE59",8],["a980","\uFE62",4,"\uFE68\uFE69\uFE6A\uFE6B"],["a996","\u3007"],["a9a4","\u2500",75],["aa40","\u72DC\u72DD\u72DF\u72E2",5,"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304",5,"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340",8],["aa80","\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358",7,"\u7361",10,"\u736E\u7370\u7371"],["ab40","\u7372",11,"\u737F",4,"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3",5,"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3",4],["ab80","\u73CB\u73CC\u73CE\u73D2",6,"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3",4],["ac40","\u73F8",10,"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411",8,"\u741C",5,"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437",4,"\u743D\u743E\u743F\u7440\u7442",11],["ac80","\u744E",6,"\u7456\u7458\u745D\u7460",12,"\u746E\u746F\u7471",4,"\u7478\u7479\u747A"],["ad40","\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491",10,"\u749D\u749F",7,"\u74AA",15,"\u74BB",12],["ad80","\u74C8",9,"\u74D3",8,"\u74DD\u74DF\u74E1\u74E5\u74E7",6,"\u74F0\u74F1\u74F2"],["ae40","\u74F3\u74F5\u74F8",6,"\u7500\u7501\u7502\u7503\u7505",7,"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520",4,"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558"],["ae80","\u755D",7,"\u7567\u7568\u7569\u756B",6,"\u7573\u7575\u7576\u7577\u757A",4,"\u7580\u7581\u7582\u7584\u7585\u7587"],["af40","\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6",4,"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607"],["af80","\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644"],["b040","\u7645",6,"\u764E",5,"\u7655\u7657",4,"\u765D\u765F\u7660\u7661\u7662\u7664",6,"\u766C\u766D\u766E\u7670",7,"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B"],["b080","\u769C",7,"\u76A5",8,"\u76AF\u76B0\u76B3\u76B5",9,"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265"],["b140","\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0",4,"\u76E6",7,"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E",10,"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B"],["b180","\u772C\u772E\u7730",4,"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748",7,"\u7752",7,"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3"],["b240","\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D",11,"\u777A\u777B\u777C\u7781\u7782\u7783\u7786",5,"\u778F\u7790\u7793",11,"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6",4],["b280","\u77BC\u77BE\u77C0",12,"\u77CE",8,"\u77D8\u77D9\u77DA\u77DD",4,"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316"],["b340","\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803",5,"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A"],["b380","\u785B\u785C\u785E",11,"\u786F",7,"\u7878\u7879\u787A\u787B\u787D",6,"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A"],["b440","\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8",7,"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA",9],["b480","\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED",4,"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB",5,"\u7902\u7903\u7904\u7906",6,"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E"],["b540","\u790D",5,"\u7914",9,"\u791F",4,"\u7925",14,"\u7935",4,"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A",8,"\u7954\u7955\u7958\u7959\u7961\u7963"],["b580","\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970",6,"\u7979\u797B",4,"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0"],["b640","\u7993",6,"\u799B",11,"\u79A8",10,"\u79B4",4,"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9",5,"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA"],["b680","\u79EC\u79EE\u79F1",6,"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F",4,"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C"],["b740","\u7A1D\u7A1F\u7A21\u7A22\u7A24",14,"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40",5,"\u7A47",9,"\u7A52",4,"\u7A58",16],["b780","\u7A69",6,"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D"],["b840","\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE",4,"\u7AB4",10,"\u7AC0",10,"\u7ACC",9,"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7",5,"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3"],["b880","\u7AF4",4,"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9"],["b940","\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F",5,"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63",10,"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86",6,"\u7B8E\u7B8F"],["b980","\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9",7,"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8"],["ba40","\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4",4,"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2",4,"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF",7,"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10",5,"\u7C17\u7C18\u7C19"],["ba80","\u7C1A",4,"\u7C20",5,"\u7C28\u7C29\u7C2B",12,"\u7C39",5,"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56"],["bb40","\u7C43",9,"\u7C4E",36,"\u7C75",5,"\u7C7E",9],["bb80","\u7C88\u7C8A",6,"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4",4,"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95"],["bc40","\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE",6,"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1",6,"\u7CE9",5,"\u7CF0",7,"\u7CF9\u7CFA\u7CFC",13,"\u7D0B",5],["bc80","\u7D11",14,"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30",6,"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6"],["bd40","\u7D37",54,"\u7D6F",7],["bd80","\u7D78",32,"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78"],["be40","\u7D99",12,"\u7DA7",6,"\u7DAF",42],["be80","\u7DDA",32,"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB"],["bf40","\u7DFB",62],["bf80","\u7E3A\u7E3C",4,"\u7E42",4,"\u7E48",21,"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080"],["c040","\u7E5E",35,"\u7E83",23,"\u7E9C\u7E9D\u7E9E"],["c080","\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B",6,"\u7F43\u7F46",9,"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0"],["c140","\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63",4,"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82",7,"\u7F8B\u7F8D\u7F8F",4,"\u7F95",4,"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8",6,"\u7FB1"],["c180","\u7FB3",4,"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF",4,"\u7FD6\u7FD7\u7FD9",5,"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF"],["c240","\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4",6,"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B",5,"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057"],["c280","\u8059\u805B",13,"\u806B",5,"\u8072",11,"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B"],["c340","\u807E\u8081\u8082\u8085\u8088\u808A\u808D",5,"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7",4,"\u80CF",6,"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B"],["c380","\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F",12,"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139",4,"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478"],["c440","\u8140",5,"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B",4,"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183",4,"\u8189\u818B\u818C\u818D\u818E\u8190\u8192",5,"\u8199\u819A\u819E",4,"\u81A4\u81A5"],["c480","\u81A7\u81A9\u81AB",7,"\u81B4",5,"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD",6,"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81"],["c540","\u81D4",14,"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE",4,"\u81F5",5,"\u81FD\u81FF\u8203\u8207",4,"\u820E\u820F\u8211\u8213\u8215",5,"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F"],["c580","\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250",7,"\u8259\u825B\u825C\u825D\u825E\u8260",7,"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7"],["c640","\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8"],["c680","\u82FA\u82FC",4,"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D",9,"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390"],["c740","\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A",4,"\u8353\u8355",4,"\u835D\u8362\u8370",6,"\u8379\u837A\u837E",6,"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1",6,"\u83AC\u83AD\u83AE"],["c780","\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20"],["c840","\u83EE\u83EF\u83F3",4,"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412",5,"\u8419\u841A\u841B\u841E",5,"\u8429",7,"\u8432",5,"\u8439\u843A\u843B\u843E",7,"\u8447\u8448\u8449"],["c880","\u844A",6,"\u8452",4,"\u8458\u845D\u845E\u845F\u8460\u8462\u8464",4,"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1"],["c940","\u847D",4,"\u8483\u8484\u8485\u8486\u848A\u848D\u848F",7,"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2",12,"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7"],["c980","\u84D8",4,"\u84DE\u84E1\u84E2\u84E4\u84E7",4,"\u84ED\u84EE\u84EF\u84F1",10,"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3"],["ca40","\u8503",8,"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522",8,"\u852D",9,"\u853E",4,"\u8544\u8545\u8546\u8547\u854B",10],["ca80","\u8557\u8558\u855A\u855B\u855C\u855D\u855F",4,"\u8565\u8566\u8567\u8569",8,"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31"],["cb40","\u8582\u8583\u8586\u8588",6,"\u8590",10,"\u859D",6,"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1",5,"\u85B8\u85BA",6,"\u85C2",6,"\u85CA",4,"\u85D1\u85D2"],["cb80","\u85D4\u85D6",5,"\u85DD",6,"\u85E5\u85E6\u85E7\u85E8\u85EA",14,"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854"],["cc40","\u85F9\u85FA\u85FC\u85FD\u85FE\u8600",4,"\u8606",10,"\u8612\u8613\u8614\u8615\u8617",15,"\u8628\u862A",13,"\u8639\u863A\u863B\u863D\u863E\u863F\u8640"],["cc80","\u8641",11,"\u8652\u8653\u8655",4,"\u865B\u865C\u865D\u865F\u8660\u8661\u8663",7,"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3"],["cd40","\u866D\u866F\u8670\u8672",6,"\u8683",6,"\u868E",4,"\u8694\u8696",5,"\u869E",4,"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB",4,"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC"],["cd80","\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01"],["ce40","\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740",6,"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A",5,"\u8761\u8762\u8766",7,"\u876F\u8771\u8772\u8773\u8775"],["ce80","\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E",4,"\u8794\u8795\u8796\u8798",6,"\u87A0",4,"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A"],["cf40","\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1",4,"\u87C7\u87C8\u87C9\u87CC",4,"\u87D4",6,"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF",9],["cf80","\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804",5,"\u880B",7,"\u8814\u8817\u8818\u8819\u881A\u881C",4,"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653"],["d040","\u8824",13,"\u8833",5,"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846",5,"\u884E",5,"\u8855\u8856\u8858\u885A",6,"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A"],["d080","\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897",4,"\u889D",4,"\u88A3\u88A5",5,"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384"],["d140","\u88AC\u88AE\u88AF\u88B0\u88B2",4,"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA",4,"\u88E0\u88E1\u88E6\u88E7\u88E9",6,"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903",5],["d180","\u8909\u890B",4,"\u8911\u8914",4,"\u891C",4,"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476"],["d240","\u8938",8,"\u8942\u8943\u8945",24,"\u8960",5,"\u8967",19,"\u897C"],["d280","\u897D\u897E\u8980\u8982\u8984\u8985\u8987",26,"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690"],["d340","\u89A2",30,"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4",6],["d380","\u89FB",4,"\u8A01",5,"\u8A08",21,"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89"],["d440","\u8A1E",31,"\u8A3F",8,"\u8A49",21],["d480","\u8A5F",25,"\u8A7A",6,"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67"],["d540","\u8A81",7,"\u8A8B",7,"\u8A94",46],["d580","\u8AC3",32,"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F"],["d640","\u8AE4",34,"\u8B08",27],["d680","\u8B24\u8B25\u8B27",30,"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51"],["d740","\u8B46",31,"\u8B67",4,"\u8B6D",25],["d780","\u8B87",24,"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7"],["d840","\u8C38",8,"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D",7,"\u8C56\u8C57\u8C58\u8C59\u8C5B",5,"\u8C63",6,"\u8C6C",6,"\u8C74\u8C75\u8C76\u8C77\u8C7B",6,"\u8C83\u8C84\u8C86\u8C87"],["d880","\u8C88\u8C8B\u8C8D",6,"\u8C95\u8C96\u8C97\u8C99",20,"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D"],["d940","\u8CAE",62],["d980","\u8CED",32,"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC"],["da40","\u8D0E",14,"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78",8,"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C",4,"\u8D92\u8D93\u8D95",9,"\u8DA0\u8DA1"],["da80","\u8DA2\u8DA4",12,"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA"],["db40","\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE",6,"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15",7,"\u8E20\u8E21\u8E24",4,"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E"],["db80","\u8E3F\u8E43\u8E45\u8E46\u8E4C",4,"\u8E53",5,"\u8E5A",11,"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD"],["dc40","\u8E73\u8E75\u8E77",4,"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88",6,"\u8E91\u8E92\u8E93\u8E95",6,"\u8E9D\u8E9F",11,"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3",6,"\u8EBB",7],["dc80","\u8EC3",10,"\u8ECF",21,"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365"],["dd40","\u8EE5",62],["dd80","\u8F24",32,"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A"],["de40","\u8F45",32,"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6"],["de80","\u8FC9",4,"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496"],["df40","\u9019\u901C\u9023\u9024\u9025\u9027",5,"\u9030",4,"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048",4,"\u904E\u9054\u9055\u9056\u9059\u905A\u905C",5,"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F",4,"\u9076",6,"\u907E\u9081"],["df80","\u9084\u9085\u9086\u9087\u9089\u908A\u908C",4,"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C"],["e040","\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105",19,"\u911A\u911B\u911C"],["e080","\u911D\u911F\u9120\u9121\u9124",10,"\u9130\u9132",6,"\u913A",8,"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C"],["e140","\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180",4,"\u9186\u9188\u918A\u918E\u918F\u9193",6,"\u919C",5,"\u91A4",5,"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB"],["e180","\u91BC",10,"\u91C8\u91CB\u91D0\u91D2",9,"\u91DD",8,"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA"],["e240","\u91E6",62],["e280","\u9225",32,"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967",5,"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042"],["e340","\u9246",45,"\u9275",16],["e380","\u9286",7,"\u928F",24,"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE"],["e440","\u92A8",5,"\u92AF",24,"\u92C9",31],["e480","\u92E9",32,"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1"],["e540","\u930A",51,"\u933F",10],["e580","\u934A",31,"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3"],["e640","\u936C",34,"\u9390",27],["e680","\u93AC",29,"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9"],["e740","\u93CE",7,"\u93D7",54],["e780","\u940E",32,"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21",6,"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F",4,"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C"],["e840","\u942F",14,"\u943F",43,"\u946C\u946D\u946E\u946F"],["e880","\u9470",20,"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9"],["e940","\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577",7,"\u9580",42],["e980","\u95AB",32,"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B"],["ea40","\u95CC",27,"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623",6,"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657"],["ea80","\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D",4,"\u9673\u9678",12,"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0"],["eb40","\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D",9,"\u96A8",7,"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6",9,"\u96E1",6,"\u96EB"],["eb80","\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717",4,"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB"],["ec40","\u9721",8,"\u972B\u972C\u972E\u972F\u9731\u9733",4,"\u973A\u973B\u973C\u973D\u973F",18,"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A",7],["ec80","\u9772\u9775\u9777",4,"\u977D",7,"\u9786",4,"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799",4,"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0"],["ed40","\u979E\u979F\u97A1\u97A2\u97A4",6,"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5",46],["ed80","\u97E4\u97E5\u97E8\u97EE",4,"\u97F4\u97F7",23,"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768"],["ee40","\u980F",62],["ee80","\u984E",32,"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6",4,"\u94BC\u94BD\u94BF\u94C4\u94C8",6,"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA"],["ef40","\u986F",5,"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8",37,"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0",4],["ef80","\u98E5\u98E6\u98E9",30,"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512",4,"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564",8,"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14"],["f040","\u9908",4,"\u990E\u990F\u9911",28,"\u992F",26],["f080","\u994A",9,"\u9956",12,"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28",4,"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66",6,"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619"],["f140","\u998C\u998E\u999A",10,"\u99A6\u99A7\u99A9",47],["f180","\u99D9",32,"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883"],["f240","\u99FA",62],["f280","\u9A39",32,"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2"],["f340","\u9A5A",17,"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9",6,"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6",4,"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC"],["f380","\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0",8,"\u9AFA\u9AFC",6,"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B"],["f440","\u9B07\u9B09",5,"\u9B10\u9B11\u9B12\u9B14",10,"\u9B20\u9B21\u9B22\u9B24",10,"\u9B30\u9B31\u9B33",7,"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55",5],["f480","\u9B5B",32,"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164"],["f540","\u9B7C",62],["f580","\u9BBB",32,"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC"],["f640","\u9BDC",62],["f680","\u9C1B",32,"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85",5,"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E",5,"\u9CA5",4,"\u9CAB\u9CAD\u9CAE\u9CB0",7,"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB"],["f740","\u9C3C",62],["f780","\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE",4,"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC",4,"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44"],["f840","\u9CE3",62],["f880","\u9D22",32],["f940","\u9D43",62],["f980","\u9D82",32],["fa40","\u9DA3",62],["fa80","\u9DE2",32],["fb40","\u9E03",27,"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74",9,"\u9E80"],["fb80","\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C",5,"\u9E94",8,"\u9E9E\u9EA0",5,"\u9EA7\u9EA8\u9EA9\u9EAA"],["fc40","\u9EAB",8,"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF",4,"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0",8,"\u9EFA\u9EFD\u9EFF",6],["fc80","\u9F06",4,"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A",5,"\u9F21\u9F23",8,"\u9F2D\u9F2E\u9F30\u9F31"],["fd40","\u9F32",4,"\u9F38\u9F3A\u9F3C\u9F3F",4,"\u9F45",10,"\u9F52",38],["fd80","\u9F79",5,"\u9F81\u9F82\u9F8D",11,"\u9F9C\u9F9D\u9F9E\u9FA1",4,"\uF92C\uF979\uF995\uF9E7\uF9F1"],["fe40","\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29"]]});var s0=h((xOe,vY)=>{vY.exports=[["a140","\uE4C6",62],["a180","\uE505",32],["a240","\uE526",62],["a280","\uE565",32],["a2ab","\uE766",5],["a2e3","\u20AC\uE76D"],["a2ef","\uE76E\uE76F"],["a2fd","\uE770\uE771"],["a340","\uE586",62],["a380","\uE5C5",31,"\u3000"],["a440","\uE5E6",62],["a480","\uE625",32],["a4f4","\uE772",10],["a540","\uE646",62],["a580","\uE685",32],["a5f7","\uE77D",7],["a640","\uE6A6",62],["a680","\uE6E5",32],["a6b9","\uE785",7],["a6d9","\uE78D",6],["a6ec","\uE794\uE795"],["a6f3","\uE796"],["a6f6","\uE797",8],["a740","\uE706",62],["a780","\uE745",32],["a7c2","\uE7A0",14],["a7f2","\uE7AF",12],["a896","\uE7BC",10],["a8bc","\u1E3F"],["a8bf","\u01F9"],["a8c1","\uE7C9\uE7CA\uE7CB\uE7CC"],["a8ea","\uE7CD",20],["a958","\uE7E2"],["a95b","\uE7E3"],["a95d","\uE7E4\uE7E5\uE7E6"],["a989","\u303E\u2FF0",11],["a997","\uE7F4",12],["a9f0","\uE801",14],["aaa1","\uE000",93],["aba1","\uE05E",93],["aca1","\uE0BC",93],["ada1","\uE11A",93],["aea1","\uE178",93],["afa1","\uE1D6",93],["d7fa","\uE810",4],["f8a1","\uE234",93],["f9a1","\uE292",93],["faa1","\uE2F0",93],["fba1","\uE34E",93],["fca1","\uE3AC",93],["fda1","\uE40A",93],["fe50","\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843"],["fe80","\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13",6,"\u4DAE\uE864\uE468",93],["8135f437","\uE7C7"]]});var HR=h((wOe,EY)=>{EY.exports={uChars:[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],gbChars:[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189e3]}});var VR=h((_Oe,SY)=>{SY.exports=[["0","\0",127],["8141","\uAC02\uAC03\uAC05\uAC06\uAC0B",4,"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25",6,"\uAC2E\uAC32\uAC33\uAC34"],["8161","\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41",9,"\uAC4C\uAC4E",5,"\uAC55"],["8181","\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D",18,"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B",4,"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95",6,"\uAC9E\uACA2",5,"\uACAB\uACAD\uACAE\uACB1",6,"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD",7,"\uACD6\uACD8",7,"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7",4,"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07",4,"\uAD0E\uAD10\uAD12\uAD13"],["8241","\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21",7,"\uAD2A\uAD2B\uAD2E",5],["8261","\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D",6,"\uAD46\uAD48\uAD4A",5,"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57"],["8281","\uAD59",7,"\uAD62\uAD64",7,"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83",4,"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91",10,"\uAD9E",5,"\uADA5",17,"\uADB8",7,"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9",6,"\uADD2\uADD4",7,"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5",18],["8341","\uADFA\uADFB\uADFD\uADFE\uAE02",5,"\uAE0A\uAE0C\uAE0E",5,"\uAE15",7],["8361","\uAE1D",18,"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C"],["8381","\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57",4,"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71",6,"\uAE7A\uAE7E",5,"\uAE86",5,"\uAE8D",46,"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5",6,"\uAECE\uAED2",5,"\uAEDA\uAEDB\uAEDD",8],["8441","\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE",5,"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD",8],["8461","\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11",18],["8481","\uAF24",7,"\uAF2E\uAF2F\uAF31\uAF33\uAF35",6,"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A",5,"\uAF51",10,"\uAF5E",5,"\uAF66",18,"\uAF7A",5,"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89",6,"\uAF92\uAF93\uAF94\uAF96",5,"\uAF9D",26,"\uAFBA\uAFBB\uAFBD\uAFBE"],["8541","\uAFBF\uAFC1",5,"\uAFCA\uAFCC\uAFCF",4,"\uAFD5",6,"\uAFDD",4],["8561","\uAFE2",5,"\uAFEA",5,"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9",6,"\uB002\uB003"],["8581","\uB005",6,"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015",6,"\uB01E",9,"\uB029",26,"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E",29,"\uB07E\uB07F\uB081\uB082\uB083\uB085",6,"\uB08E\uB090\uB092",5,"\uB09B\uB09D\uB09E\uB0A3\uB0A4"],["8641","\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD",6,"\uB0C6\uB0CA",5,"\uB0D2"],["8661","\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9",6,"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6",10],["8681","\uB0F1",22,"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E",4,"\uB126\uB127\uB129\uB12A\uB12B\uB12D",6,"\uB136\uB13A",5,"\uB142\uB143\uB145\uB146\uB147\uB149",6,"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161",22,"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183",4,"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D"],["8741","\uB19E",9,"\uB1A9",15],["8761","\uB1B9",18,"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5"],["8781","\uB1D6",5,"\uB1DE\uB1E0",7,"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1",7,"\uB1FA\uB1FC\uB1FE",5,"\uB206\uB207\uB209\uB20A\uB20D",6,"\uB216\uB218\uB21A",5,"\uB221",18,"\uB235",6,"\uB23D",26,"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261",6,"\uB26A",4],["8841","\uB26F",4,"\uB276",5,"\uB27D",6,"\uB286\uB287\uB288\uB28A",4],["8861","\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B",4,"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7"],["8881","\uB2B8",15,"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3",4,"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309",6,"\uB312\uB316",5,"\uB31D",54,"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363"],["8941","\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379",6,"\uB382\uB386",5,"\uB38D"],["8961","\uB38E\uB38F\uB391\uB392\uB393\uB395",10,"\uB3A2",5,"\uB3A9\uB3AA\uB3AB\uB3AD"],["8981","\uB3AE",21,"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9",18,"\uB3FD",18,"\uB411",6,"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421",6,"\uB42A\uB42C",7,"\uB435",15],["8a41","\uB445",10,"\uB452\uB453\uB455\uB456\uB457\uB459",6,"\uB462\uB464\uB466"],["8a61","\uB467",4,"\uB46D",18,"\uB481\uB482"],["8a81","\uB483",4,"\uB489",19,"\uB49E",5,"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD",7,"\uB4B6\uB4B8\uB4BA",5,"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9",6,"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6",5,"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7",4,"\uB4EE\uB4F0\uB4F2",5,"\uB4F9",26,"\uB516\uB517\uB519\uB51A\uB51D"],["8b41","\uB51E",5,"\uB526\uB52B",4,"\uB532\uB533\uB535\uB536\uB537\uB539",6,"\uB542\uB546"],["8b61","\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555",6,"\uB55E\uB562",8],["8b81","\uB56B",52,"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6",4,"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5",6,"\uB5CE\uB5D2",5,"\uB5D9",18,"\uB5ED",18],["8c41","\uB600",15,"\uB612\uB613\uB615\uB616\uB617\uB619",4],["8c61","\uB61E",6,"\uB626",5,"\uB62D",6,"\uB635",5],["8c81","\uB63B",12,"\uB649",26,"\uB665\uB666\uB667\uB669",50,"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5",5,"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2",16],["8d41","\uB6C3",16,"\uB6D5",8],["8d61","\uB6DE",17,"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA"],["8d81","\uB6FB",4,"\uB702\uB703\uB704\uB706",33,"\uB72A\uB72B\uB72D\uB72E\uB731",6,"\uB73A\uB73C",7,"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D",6,"\uB756",9,"\uB761\uB762\uB763\uB765\uB766\uB767\uB769",6,"\uB772\uB774\uB776",5,"\uB77E\uB77F\uB781\uB782\uB783\uB785",6,"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E"],["8e41","\uB79F\uB7A1",6,"\uB7AA\uB7AE",5,"\uB7B6\uB7B7\uB7B9",8],["8e61","\uB7C2",4,"\uB7C8\uB7CA",19],["8e81","\uB7DE",13,"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5",6,"\uB7FE\uB802",4,"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811",6,"\uB81A\uB81C\uB81E",5,"\uB826\uB827\uB829\uB82A\uB82B\uB82D",6,"\uB836\uB83A",5,"\uB841\uB842\uB843\uB845",11,"\uB852\uB854",7,"\uB85E\uB85F\uB861\uB862\uB863\uB865",6,"\uB86E\uB870\uB872",5,"\uB879\uB87A\uB87B\uB87D",7],["8f41","\uB885",7,"\uB88E",17],["8f61","\uB8A0",7,"\uB8A9",6,"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9",4],["8f81","\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6",5,"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5",7,"\uB8DE\uB8E0\uB8E2",5,"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1",6,"\uB8FA\uB8FC\uB8FE",5,"\uB905",18,"\uB919",6,"\uB921",26,"\uB93E\uB93F\uB941\uB942\uB943\uB945",6,"\uB94D\uB94E\uB950\uB952",5],["9041","\uB95A\uB95B\uB95D\uB95E\uB95F\uB961",6,"\uB96A\uB96C\uB96E",5,"\uB976\uB977\uB979\uB97A\uB97B\uB97D"],["9061","\uB97E",5,"\uB986\uB988\uB98B\uB98C\uB98F",15],["9081","\uB99F",12,"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5",6,"\uB9BE\uB9C0\uB9C2",5,"\uB9CA\uB9CB\uB9CD\uB9D3",4,"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED",6,"\uB9F6\uB9FB",4,"\uBA02",5,"\uBA09",11,"\uBA16",33,"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46"],["9141","\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D",6,"\uBA66\uBA6A",5],["9161","\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79",9,"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D",5],["9181","\uBA93",20,"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3",4,"\uBABA\uBABC\uBABE",5,"\uBAC5\uBAC6\uBAC7\uBAC9",14,"\uBADA",33,"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05",7,"\uBB0E\uBB10\uBB12",5,"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21",6],["9241","\uBB28\uBB2A\uBB2C",7,"\uBB37\uBB39\uBB3A\uBB3F",4,"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52"],["9261","\uBB53\uBB55\uBB56\uBB57\uBB59",7,"\uBB62\uBB64",7,"\uBB6D",4],["9281","\uBB72",21,"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91",18,"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD",6,"\uBBB5\uBBB6\uBBB8",7,"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9",6,"\uBBD1\uBBD2\uBBD4",35,"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01"],["9341","\uBC03",4,"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35"],["9361","\uBC36\uBC37\uBC39",6,"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51",8],["9381","\uBC5A\uBC5B\uBC5C\uBC5E",37,"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F",4,"\uBC96\uBC98\uBC9B",4,"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9",6,"\uBCB2\uBCB6",5,"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5",7,"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD",22,"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD"],["9441","\uBCFE",5,"\uBD06\uBD08\uBD0A",5,"\uBD11\uBD12\uBD13\uBD15",8],["9461","\uBD1E",5,"\uBD25",6,"\uBD2D",12],["9481","\uBD3A",5,"\uBD41",6,"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51",6,"\uBD5A",9,"\uBD65\uBD66\uBD67\uBD69",22,"\uBD82\uBD83\uBD85\uBD86\uBD8B",4,"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D",6,"\uBDA5",10,"\uBDB1",6,"\uBDB9",24],["9541","\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD",11,"\uBDEA",5,"\uBDF1"],["9561","\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9",6,"\uBE01\uBE02\uBE04\uBE06",5,"\uBE0E\uBE0F\uBE11\uBE12\uBE13"],["9581","\uBE15",6,"\uBE1E\uBE20",35,"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F",4,"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B",4,"\uBE72\uBE76",4,"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85",6,"\uBE8E\uBE92",5,"\uBE9A",13,"\uBEA9",14],["9641","\uBEB8",23,"\uBED2\uBED3"],["9661","\uBED5\uBED6\uBED9",6,"\uBEE1\uBEE2\uBEE6",5,"\uBEED",8],["9681","\uBEF6",10,"\uBF02",5,"\uBF0A",13,"\uBF1A\uBF1E",33,"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49",6,"\uBF52\uBF53\uBF54\uBF56",44],["9741","\uBF83",16,"\uBF95",8],["9761","\uBF9E",17,"\uBFB1",7],["9781","\uBFB9",11,"\uBFC6",5,"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5",6,"\uBFDD\uBFDE\uBFE0\uBFE2",89,"\uC03D\uC03E\uC03F"],["9841","\uC040",16,"\uC052",5,"\uC059\uC05A\uC05B"],["9861","\uC05D\uC05E\uC05F\uC061",6,"\uC06A",15],["9881","\uC07A",21,"\uC092\uC093\uC095\uC096\uC097\uC099",6,"\uC0A2\uC0A4\uC0A6",5,"\uC0AE\uC0B1\uC0B2\uC0B7",4,"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1",6,"\uC0DA\uC0DE",5,"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED",6,"\uC0F6\uC0F8\uC0FA",5,"\uC101\uC102\uC103\uC105\uC106\uC107\uC109",6,"\uC111\uC112\uC113\uC114\uC116",5,"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E"],["9941","\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141",6,"\uC14A\uC14E",5,"\uC156\uC157"],["9961","\uC159\uC15A\uC15B\uC15D",6,"\uC166\uC16A",5,"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B"],["9981","\uC17C",8,"\uC186",5,"\uC18F\uC191\uC192\uC193\uC195\uC197",4,"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1",11,"\uC1BE",5,"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD",6,"\uC1D5\uC1D6\uC1D9",6,"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9",6,"\uC1F2\uC1F4",7,"\uC1FE\uC1FF\uC201\uC202\uC203\uC205",6,"\uC20E\uC210\uC212",5,"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223"],["9a41","\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235",16],["9a61","\uC246\uC247\uC249",6,"\uC252\uC253\uC255\uC256\uC257\uC259",6,"\uC261\uC262\uC263\uC264\uC266"],["9a81","\uC267",4,"\uC26E\uC26F\uC271\uC272\uC273\uC275",6,"\uC27E\uC280\uC282",5,"\uC28A",5,"\uC291",6,"\uC299\uC29A\uC29C\uC29E",5,"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE",5,"\uC2B6\uC2B8\uC2BA",33,"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5",5,"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301",6,"\uC30A\uC30B\uC30E\uC30F"],["9b41","\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D",6,"\uC326\uC327\uC32A",8],["9b61","\uC333",17,"\uC346",7],["9b81","\uC34E",25,"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373",4,"\uC37A\uC37B\uC37E",5,"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D",50,"\uC3C1",22,"\uC3DA"],["9c41","\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3",4,"\uC3EA\uC3EB\uC3EC\uC3EE",5,"\uC3F6\uC3F7\uC3F9",5],["9c61","\uC3FF",8,"\uC409",6,"\uC411",9],["9c81","\uC41B",8,"\uC425",6,"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435",6,"\uC43E",9,"\uC449",26,"\uC466\uC467\uC469\uC46A\uC46B\uC46D",6,"\uC476\uC477\uC478\uC47A",5,"\uC481",18,"\uC495",6,"\uC49D",12],["9d41","\uC4AA",13,"\uC4B9\uC4BA\uC4BB\uC4BD",8],["9d61","\uC4C6",25],["9d81","\uC4E0",8,"\uC4EA",5,"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502",9,"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515",6,"\uC51D",10,"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531",6,"\uC53A\uC53C\uC53E",5,"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569",6,"\uC572\uC576",5,"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594"],["9e41","\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1",7,"\uC5AA",9,"\uC5B6"],["9e61","\uC5B7\uC5BA\uC5BF",4,"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9",6,"\uC5E2\uC5E4\uC5E6\uC5E7"],["9e81","\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611",6,"\uC61A\uC61D",6,"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649",6,"\uC652\uC656",5,"\uC65E\uC65F\uC661",10,"\uC66D\uC66E\uC670\uC672",5,"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681",6,"\uC68A\uC68C\uC68E",5,"\uC696\uC697\uC699\uC69A\uC69B\uC69D",6,"\uC6A6"],["9f41","\uC6A8\uC6AA",5,"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB",4,"\uC6C2\uC6C4\uC6C6",5,"\uC6CE"],["9f61","\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5",6,"\uC6DE\uC6DF\uC6E2",5,"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2"],["9f81","\uC6F3",4,"\uC6FA\uC6FB\uC6FC\uC6FE",5,"\uC706\uC707\uC709\uC70A\uC70B\uC70D",6,"\uC716\uC718\uC71A",5,"\uC722\uC723\uC725\uC726\uC727\uC729",6,"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745",4,"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761",6,"\uC769\uC76A\uC76C",7,"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B",4,"\uC7A2\uC7A7",4,"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7"],["a041","\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2",5,"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1",6,"\uC7D9\uC7DA\uC7DB\uC7DC"],["a061","\uC7DE",5,"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED",13],["a081","\uC7FB",4,"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B",4,"\uC812\uC814\uC817",4,"\uC81E\uC81F\uC821\uC822\uC823\uC825",6,"\uC82E\uC830\uC832",5,"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841",6,"\uC84A\uC84B\uC84E",5,"\uC855",26,"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B",4,"\uC882\uC884\uC888\uC889\uC88A\uC88E",5,"\uC895",7,"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4"],["a141","\uC8A5\uC8A6\uC8A7\uC8A9",18,"\uC8BE\uC8BF\uC8C0\uC8C1"],["a161","\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD",6,"\uC8D6\uC8D8\uC8DA",5,"\uC8E2\uC8E3\uC8E5"],["a181","\uC8E6",14,"\uC8F6",5,"\uC8FE\uC8FF\uC901\uC902\uC903\uC907",4,"\uC90E\u3000\u3001\u3002\xB7\u2025\u2026\xA8\u3003\xAD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008",9,"\xB1\xD7\xF7\u2260\u2264\u2265\u221E\u2234\xB0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\xA7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2"],["a241","\uC910\uC912",5,"\uC919",18],["a261","\uC92D",6,"\uC935",18],["a281","\uC948",7,"\uC952\uC953\uC955\uC956\uC957\uC959",6,"\uC962\uC964",7,"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\xB4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\xB8\u02DB\xA1\xBF\u02D0\u222E\u2211\u220F\xA4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\xB6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\xAE"],["a341","\uC971\uC972\uC973\uC975",6,"\uC97D",10,"\uC98A\uC98B\uC98D\uC98E\uC98F"],["a361","\uC991",6,"\uC99A\uC99C\uC99E",16],["a381","\uC9AF",16,"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB",4,"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01",58,"\uFFE6\uFF3D",32,"\uFFE3"],["a441","\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2",5,"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04"],["a461","\uCA05\uCA06\uCA07\uCA0A\uCA0E",5,"\uCA15\uCA16\uCA17\uCA19",12],["a481","\uCA26\uCA27\uCA28\uCA2A",28,"\u3131",93],["a541","\uCA47",4,"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55",6,"\uCA5E\uCA62",5,"\uCA69\uCA6A"],["a561","\uCA6B",17,"\uCA7E",5,"\uCA85\uCA86"],["a581","\uCA87",16,"\uCA99",14,"\u2170",9],["a5b0","\u2160",9],["a5c1","\u0391",16,"\u03A3",6],["a5e1","\u03B1",16,"\u03C3",6],["a641","\uCAA8",19,"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5"],["a661","\uCAC6",5,"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA",5,"\uCAE1",6],["a681","\uCAE8\uCAE9\uCAEA\uCAEB\uCAED",6,"\uCAF5",18,"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543",7],["a741","\uCB0B",4,"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19",6,"\uCB22",7],["a761","\uCB2A",22,"\uCB42\uCB43\uCB44"],["a781","\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51",6,"\uCB5A\uCB5B\uCB5C\uCB5E",5,"\uCB65",7,"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399",9,"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0",9,"\u3380",4,"\u33BA",5,"\u3390",4,"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6"],["a841","\uCB6D",10,"\uCB7A",14],["a861","\uCB89",18,"\uCB9D",6],["a881","\uCBA4",19,"\uCBB9",11,"\xC6\xD0\xAA\u0126"],["a8a6","\u0132"],["a8a8","\u013F\u0141\xD8\u0152\xBA\xDE\u0166\u014A"],["a8b1","\u3260",27,"\u24D0",25,"\u2460",14,"\xBD\u2153\u2154\xBC\xBE\u215B\u215C\u215D\u215E"],["a941","\uCBC5",14,"\uCBD5",10],["a961","\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA",18],["a981","\uCBFD",14,"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15",6,"\uCC1E\uCC1F\uCC20\uCC23\uCC24\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0140\u0142\xF8\u0153\xDF\xFE\u0167\u014B\u0149\u3200",27,"\u249C",25,"\u2474",14,"\xB9\xB2\xB3\u2074\u207F\u2081\u2082\u2083\u2084"],["aa41","\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31",6,"\uCC3A\uCC3F",4,"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E"],["aa61","\uCC4F",4,"\uCC56\uCC5A",5,"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69",6,"\uCC71\uCC72"],["aa81","\uCC73\uCC74\uCC76",29,"\u3041",82],["ab41","\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1",6,"\uCCAA\uCCAE",5,"\uCCB6\uCCB7\uCCB9"],["ab61","\uCCBA\uCCBB\uCCBD",6,"\uCCC6\uCCC8\uCCCA",5,"\uCCD1\uCCD2\uCCD3\uCCD5",5],["ab81","\uCCDB",8,"\uCCE5",6,"\uCCED\uCCEE\uCCEF\uCCF1",12,"\u30A1",85],["ac41","\uCCFE\uCCFF\uCD00\uCD02",5,"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11",6,"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20"],["ac61","\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D",11,"\uCD3A",4],["ac81","\uCD3F",28,"\uCD5D\uCD5E\uCD5F\u0410",5,"\u0401\u0416",25],["acd1","\u0430",5,"\u0451\u0436",25],["ad41","\uCD61\uCD62\uCD63\uCD65",6,"\uCD6E\uCD70\uCD72",5,"\uCD79",7],["ad61","\uCD81",6,"\uCD89",10,"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F"],["ad81","\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA",5,"\uCDB1",18,"\uCDC5"],["ae41","\uCDC6",5,"\uCDCD\uCDCE\uCDCF\uCDD1",16],["ae61","\uCDE2",5,"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1",6,"\uCDFA\uCDFC\uCDFE",4],["ae81","\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D",6,"\uCE15\uCE16\uCE17\uCE18\uCE1A",5,"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B"],["af41","\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36",19],["af61","\uCE4A",13,"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62",5,"\uCE6A\uCE6C"],["af81","\uCE6E",5,"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D",6,"\uCE86\uCE88\uCE8A",5,"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99"],["b041","\uCE9A",5,"\uCEA2\uCEA6",5,"\uCEAE",12],["b061","\uCEBB",5,"\uCEC2",19],["b081","\uCED6",13,"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED",6,"\uCEF6\uCEFA",5,"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10",7,"\uAC19",4,"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06"],["b141","\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09",6,"\uCF12\uCF14\uCF16",5,"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23"],["b161","\uCF25",6,"\uCF2E\uCF32",5,"\uCF39",11],["b181","\uCF45",14,"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D",6,"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78"],["b241","\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79",6,"\uCF81\uCF82\uCF83\uCF84\uCF86",5,"\uCF8D"],["b261","\uCF8E",18,"\uCFA2",5,"\uCFA9"],["b281","\uCFAA",5,"\uCFB1",18,"\uCFC5",6,"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059"],["b341","\uCFCC",19,"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9"],["b361","\uCFEA",5,"\uCFF2\uCFF4\uCFF6",5,"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005",5],["b381","\uD00B",5,"\uD012",5,"\uD019",19,"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB",4,"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD"],["b441","\uD02E",5,"\uD036\uD037\uD039\uD03A\uD03B\uD03D",6,"\uD046\uD048\uD04A",5],["b461","\uD051\uD052\uD053\uD055\uD056\uD057\uD059",6,"\uD061",10,"\uD06E\uD06F"],["b481","\uD071\uD072\uD073\uD075",6,"\uD07E\uD07F\uD080\uD082",18,"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB",4,"\uB2F3\uB2F4\uB2F5\uB2F7",4,"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365"],["b541","\uD095",14,"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD",5],["b561","\uD0B3\uD0B6\uD0B8\uD0BA",5,"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA",5,"\uD0D2\uD0D6",4],["b581","\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5",6,"\uD0EE\uD0F2",5,"\uD0F9",11,"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538"],["b641","\uD105",7,"\uD10E",17],["b661","\uD120",15,"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E"],["b681","\uD13F\uD142\uD146",5,"\uD14E\uD14F\uD151\uD152\uD153\uD155",6,"\uD15E\uD160\uD162",5,"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797"],["b741","\uD16E",13,"\uD17D",6,"\uD185\uD186\uD187\uD189\uD18A"],["b761","\uD18B",20,"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7"],["b781","\uD1A9",6,"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1",14,"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969"],["b841","\uD1D0",7,"\uD1D9",17],["b861","\uD1EB",8,"\uD1F5\uD1F6\uD1F7\uD1F9",13],["b881","\uD208\uD20A",5,"\uD211",24,"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE",4,"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC"],["b941","\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235",6,"\uD23E\uD240\uD242",5,"\uD249\uD24A\uD24B\uD24C"],["b961","\uD24D",14,"\uD25D",6,"\uD265\uD266\uD267\uD268"],["b981","\uD269",22,"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14",4,"\uBC1B",4,"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97"],["ba41","\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296",5,"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5",6,"\uD2AD"],["ba61","\uD2AE\uD2AF\uD2B0\uD2B2",5,"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3",4,"\uD2CA\uD2CC",5],["ba81","\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD",6,"\uD2E6",9,"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64"],["bb41","\uD2FB",4,"\uD302\uD304\uD306",5,"\uD30F\uD311\uD312\uD313\uD315\uD317",4,"\uD31E\uD322\uD323"],["bb61","\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331",6,"\uD33A\uD33E",5,"\uD346\uD347\uD348\uD349"],["bb81","\uD34A",31,"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4"],["bc41","\uD36A",17,"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387"],["bc61","\uD388\uD389\uD38A\uD38B\uD38E\uD392",5,"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1",6,"\uD3AA\uD3AC\uD3AE"],["bc81","\uD3AF",4,"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD",6,"\uD3C6\uD3C7\uD3CA",5,"\uD3D1",5,"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C",4,"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D"],["bd41","\uD3D7\uD3D9",7,"\uD3E2\uD3E4",7,"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7"],["bd61","\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402",5,"\uD409",13],["bd81","\uD417",5,"\uD41E",25,"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430"],["be41","\uD438",7,"\uD441\uD442\uD443\uD445",14],["be61","\uD454",7,"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465",7,"\uD46E\uD470\uD471\uD472"],["be81","\uD473",4,"\uD47A\uD47B\uD47D\uD47E\uD481\uD483",4,"\uD48A\uD48C\uD48E",5,"\uD495",8,"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4",6,"\uC5CC\uC5CE"],["bf41","\uD49E",10,"\uD4AA",14],["bf61","\uD4B9",18,"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5"],["bf81","\uD4D6",5,"\uD4DD\uD4DE\uD4E0",7,"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1",6,"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC",5,"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8"],["c041","\uD4FE",5,"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D",6,"\uD516\uD518",5],["c061","\uD51E",25],["c081","\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545",6,"\uD54E\uD550\uD552",5,"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751",7,"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A"],["c141","\uD564\uD566\uD567\uD56A\uD56C\uD56E",5,"\uD576\uD577\uD579\uD57A\uD57B\uD57D",6,"\uD586\uD58A\uD58B"],["c161","\uD58C\uD58D\uD58E\uD58F\uD591",19,"\uD5A6\uD5A7"],["c181","\uD5A8",31,"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3"],["c241","\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3",4,"\uD5DA\uD5DC\uD5DE",5,"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE"],["c261","\uD5EF",4,"\uD5F6\uD5F8\uD5FA",5,"\uD602\uD603\uD605\uD606\uD607\uD609",6,"\uD612"],["c281","\uD616",5,"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625",7,"\uD62E",9,"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B"],["c341","\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D",4],["c361","\uD662",4,"\uD668\uD66A",5,"\uD672\uD673\uD675",11],["c381","\uD681\uD682\uD684\uD686",5,"\uD68E\uD68F\uD691\uD692\uD693\uD695",7,"\uD69E\uD6A0\uD6A2",5,"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35"],["c441","\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1",7,"\uD6BA\uD6BC",7,"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB"],["c461","\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA",5,"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9",4],["c481","\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6",5,"\uD6FE\uD6FF\uD701\uD702\uD703\uD705",11,"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C"],["c541","\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721",6,"\uD72A\uD72C\uD72E",5,"\uD736\uD737\uD739"],["c561","\uD73A\uD73B\uD73D",6,"\uD745\uD746\uD748\uD74A",5,"\uD752\uD753\uD755\uD75A",4],["c581","\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775",6,"\uD77E\uD77F\uD780\uD782",5,"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C"],["c641","\uD78D\uD78E\uD78F\uD791",6,"\uD79A\uD79C\uD79E",5],["c6a1","\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401"],["c7a1","\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620"],["c8a1","\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D"],["caa1","\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95"],["cba1","\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2"],["cca1","\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0"],["cda1","\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC"],["cea1","\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE"],["cfa1","\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4"],["d0a1","\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3"],["d1a1","\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E",5,"\u90A3\uF914",4,"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925"],["d2a1","\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928",4,"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933",5,"\u99D1\uF939",10,"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A",7,"\u5AE9\u8A25\u677B\u7D10\uF952",5,"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336"],["d3a1","\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843"],["d4a1","\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85"],["d5a1","\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23"],["d6a1","\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC"],["d7a1","\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C"],["d8a1","\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5"],["d9a1","\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587"],["daa1","\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51"],["dba1","\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656"],["dca1","\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66"],["dda1","\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5"],["dea1","\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A"],["dfa1","\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72"],["e0a1","\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C"],["e1a1","\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101"],["e2a1","\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27"],["e3a1","\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81"],["e4a1","\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D"],["e5a1","\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982"],["e6a1","\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2"],["e7a1","\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3"],["e8a1","\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1"],["e9a1","\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553"],["eaa1","\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB"],["eba1","\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC"],["eca1","\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344"],["eda1","\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577"],["eea1","\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1"],["efa1","\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756"],["f0a1","\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B"],["f1a1","\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA"],["f2a1","\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F"],["f3a1","\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56"],["f4a1","\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2"],["f5a1","\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403"],["f6a1","\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17"],["f7a1","\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211"],["f8a1","\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43"],["f9a1","\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A"],["faa1","\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B"],["fba1","\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575"],["fca1","\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6"],["fda1","\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70"]]});var o0=h((IOe,xY)=>{xY.exports=[["0","\0",127],["a140","\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A"],["a1a1","\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\xA7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\xAF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\xD7\xF7\xB1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62",4,"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F"],["a240","\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\xB0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581",7,"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D"],["a2a1","\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10",9,"\u2160",9,"\u3021",8,"\u5341\u5344\u5345\uFF21",25,"\uFF41",21],["a340","\uFF57\uFF58\uFF59\uFF5A\u0391",16,"\u03A3",6,"\u03B1",16,"\u03C3",6,"\u3105",10],["a3a1","\u3110",25,"\u02D9\u02C9\u02CA\u02C7\u02CB"],["a3e1","\u20AC"],["a440","\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D"],["a4a1","\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19"],["a540","\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916"],["a5a1","\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168"],["a640","\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74"],["a6a1","\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63"],["a740","\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D"],["a7a1","\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760"],["a840","\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292"],["a8a1","\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475"],["a940","\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45"],["a9a1","\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A"],["aa40","\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0"],["aaa1","\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644"],["ab40","\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1"],["aba1","\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7"],["ac40","\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17"],["aca1","\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004"],["ad40","\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5"],["ada1","\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA"],["ae40","\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059"],["aea1","\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93"],["af40","\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837"],["afa1","\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343"],["b040","\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661"],["b0a1","\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40"],["b140","\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD"],["b1a1","\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA"],["b240","\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6"],["b2a1","\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C"],["b340","\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014"],["b3a1","\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960"],["b440","\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD"],["b4a1","\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB"],["b540","\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98"],["b5a1","\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41"],["b640","\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591"],["b6a1","\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC"],["b740","\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D"],["b7a1","\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763"],["b840","\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B"],["b8a1","\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A"],["b940","\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4"],["b9a1","\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147"],["ba40","\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22"],["baa1","\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC"],["bb40","\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4"],["bba1","\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC"],["bc40","\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182"],["bca1","\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483"],["bd40","\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF"],["bda1","\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E"],["be40","\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09"],["bea1","\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1"],["bf40","\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A"],["bfa1","\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A"],["c040","\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687"],["c0a1","\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC"],["c140","\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA"],["c1a1","\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01"],["c240","\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658"],["c2a1","\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6"],["c340","\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378"],["c3a1","\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E"],["c440","\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C"],["c4a1","\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74"],["c540","\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C"],["c5a1","\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92"],["c640","\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72"],["c940","\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15"],["c9a1","\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B"],["ca40","\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418"],["caa1","\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747"],["cb40","\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293"],["cba1","\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762"],["cc40","\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B"],["cca1","\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2"],["cd40","\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA"],["cda1","\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF"],["ce40","\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB"],["cea1","\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA"],["cf40","\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42"],["cfa1","\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80"],["d040","\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA"],["d0a1","\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1"],["d140","\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067"],["d1a1","\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4"],["d240","\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278"],["d2a1","\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10"],["d340","\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322"],["d3a1","\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150"],["d440","\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545"],["d4a1","\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F"],["d540","\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F"],["d5a1","\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9"],["d640","\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF"],["d6a1","\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F"],["d740","\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7"],["d7a1","\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA"],["d840","\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837"],["d8a1","\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114"],["d940","\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2"],["d9a1","\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E"],["da40","\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416"],["daa1","\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65"],["db40","\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3"],["dba1","\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA"],["dc40","\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688"],["dca1","\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6"],["dd40","\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424"],["dda1","\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC"],["de40","\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153"],["dea1","\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13"],["df40","\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F"],["dfa1","\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4"],["e040","\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F"],["e0a1","\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0"],["e140","\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0"],["e1a1","\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9"],["e240","\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A"],["e2a1","\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993"],["e340","\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE"],["e3a1","\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB"],["e440","\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D"],["e4a1","\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658"],["e540","\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189"],["e5a1","\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92"],["e640","\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359"],["e6a1","\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F"],["e740","\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662"],["e7a1","\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27"],["e840","\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3"],["e8a1","\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E"],["e940","\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA"],["e9a1","\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8"],["ea40","\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799"],["eaa1","\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558"],["eb40","\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0"],["eba1","\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C"],["ec40","\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95"],["eca1","\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E"],["ed40","\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6"],["eda1","\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E"],["ee40","\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E"],["eea1","\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C"],["ef40","\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30"],["efa1","\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376"],["f040","\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2"],["f0a1","\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67"],["f140","\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA"],["f1a1","\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70"],["f240","\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B"],["f2a1","\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55"],["f340","\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726"],["f3a1","\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2"],["f440","\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929"],["f4a1","\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF"],["f540","\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B"],["f5a1","\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625"],["f640","\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A"],["f6a1","\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A"],["f740","\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A"],["f7a1","\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE"],["f840","\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F"],["f8a1","\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A"],["f940","\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A"],["f9a1","\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593"]]});var WR=h((TOe,wY)=>{wY.exports=[["8740","\u43F0\u4C32\u4603\u45A6\u4578\u{27267}\u4D77\u45B3\u{27CB1}\u4CE2\u{27CC5}\u3B95\u4736\u4744\u4C47\u4C40\u{242BF}\u{23617}\u{27352}\u{26E8B}\u{270D2}\u4C57\u{2A351}\u474F\u45DA\u4C85\u{27C6C}\u4D07\u4AA4\u46A1\u{26B23}\u7225\u{25A54}\u{21A63}\u{23E06}\u{23F61}\u664D\u56FB"],["8767","\u7D95\u591D\u{28BB9}\u3DF4\u9734\u{27BEF}\u5BDB\u{21D5E}\u5AA4\u3625\u{29EB0}\u5AD1\u5BB7\u5CFC\u676E\u8593\u{29945}\u7461\u749D\u3875\u{21D53}\u{2369E}\u{26021}\u3EEC"],["87a1","\u{258DE}\u3AF5\u7AFC\u9F97\u{24161}\u{2890D}\u{231EA}\u{20A8A}\u{2325E}\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\u{25DB9}\u74C6\u9FC7\u57B3\u492F\u544C\u4131\u{2368E}\u5818\u7A72\u{27B65}\u8B8F\u46AE\u{26E88}\u4181\u{25D99}\u7BAE\u{224BC}\u9FC8\u{224C1}\u{224C9}\u{224CC}\u9FC9\u8504\u{235BB}\u40B4\u9FCA\u44E1\u{2ADFF}\u62C1\u706E\u9FCB"],["8840","\u31C0",4,"\u{2010C}\u31C5\u{200D1}\u{200CD}\u31C6\u31C7\u{200CB}\u{21FE8}\u31C8\u{200CA}\u31C9\u31CA\u31CB\u31CC\u{2010E}\u31CD\u31CE\u0100\xC1\u01CD\xC0\u0112\xC9\u011A\xC8\u014C\xD3\u01D1\xD2\u0FFF\xCA\u0304\u1EBE\u0FFF\xCA\u030C\u1EC0\xCA\u0101\xE1\u01CE\xE0\u0251\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA"],["88a1","\u01DC\xFC\u0FFF\xEA\u0304\u1EBF\u0FFF\xEA\u030C\u1EC1\xEA\u0261\u23DA\u23DB"],["8940","\u{2A3A9}\u{21145}"],["8943","\u650A"],["8946","\u4E3D\u6EDD\u9D4E\u91DF"],["894c","\u{27735}\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E"],["89a1","\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227"],["89ab","\u918C\u78B8\u915E\u80BC"],["89b0","\u8D0B\u80F6\u{209E7}"],["89b5","\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\u{29DF6}\u{2700E}\u9E0A\u{2A133}\u35C1"],["89c1","\u6E9A\u823E\u7519"],["89c5","\u4911\u9A6C\u9A8F\u9F99\u7987\u{2846C}\u{21DCA}\u{205D0}\u{22AE6}\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5"],["8a40","\u{27D84}\u5525"],["8a43","\u{20C42}\u{20D15}\u{2512B}\u5590\u{22CC6}\u39EC\u{20341}\u8E46\u{24DB8}\u{294E5}\u4053\u{280BE}\u777A\u{22C38}\u3A34\u47D5\u{2815D}\u{269F2}\u{24DEA}\u64DD\u{20D7C}\u{20FB4}\u{20CD5}\u{210F4}\u648D\u8E7E\u{20E96}\u{20C0B}\u{20F64}\u{22CA9}\u{28256}\u{244D3}"],["8a64","\u{20D46}\u{29A4D}\u{280E9}\u47F4\u{24EA7}\u{22CC2}\u9AB2\u3A67\u{295F4}\u3FED\u3506\u{252C7}\u{297D4}\u{278C8}\u{22D44}\u9D6E\u9815"],["8a76","\u43D9\u{260A5}\u64B4\u54E3\u{22D4C}\u{22BCA}\u{21077}\u39FB\u{2106F}"],["8aa1","\u{266DA}\u{26716}\u{279A0}\u64EA\u{25052}\u{20C43}\u8E68\u{221A1}\u{28B4C}\u{20731}"],["8aac","\u480B\u{201A9}\u3FFA\u5873\u{22D8D}"],["8ab2","\u{245C8}\u{204FC}\u{26097}\u{20F4C}\u{20D96}\u5579\u40BB\u43BA"],["8abb","\u4AB4\u{22A66}\u{2109D}\u81AA\u98F5\u{20D9C}\u6379\u39FE\u{22775}\u8DC0\u56A1\u647C\u3E43"],["8ac9","\u{2A601}\u{20E09}\u{22ACF}\u{22CC9}"],["8ace","\u{210C8}\u{239C2}\u3992\u3A06\u{2829B}\u3578\u{25E49}\u{220C7}\u5652\u{20F31}\u{22CB2}\u{29720}\u34BC\u6C3D\u{24E3B}"],["8adf","\u{27574}\u{22E8B}\u{22208}\u{2A65B}\u{28CCD}\u{20E7A}\u{20C34}\u{2681C}\u7F93\u{210CF}\u{22803}\u{22939}\u35FB\u{251E3}\u{20E8C}\u{20F8D}\u{20EAA}\u3F93\u{20F30}\u{20D47}\u{2114F}\u{20E4C}"],["8af6","\u{20EAB}\u{20BA9}\u{20D48}\u{210C0}\u{2113D}\u3FF9\u{22696}\u6432\u{20FAD}"],["8b40","\u{233F4}\u{27639}\u{22BCE}\u{20D7E}\u{20D7F}\u{22C51}\u{22C55}\u3A18\u{20E98}\u{210C7}\u{20F2E}\u{2A632}\u{26B50}\u{28CD2}\u{28D99}\u{28CCA}\u95AA\u54CC\u82C4\u55B9"],["8b55","\u{29EC3}\u9C26\u9AB6\u{2775E}\u{22DEE}\u7140\u816D\u80EC\u5C1C\u{26572}\u8134\u3797\u535F\u{280BD}\u91B6\u{20EFA}\u{20E0F}\u{20E77}\u{20EFB}\u35DD\u{24DEB}\u3609\u{20CD6}\u56AF\u{227B5}\u{210C9}\u{20E10}\u{20E78}\u{21078}\u{21148}\u{28207}\u{21455}\u{20E79}\u{24E50}\u{22DA4}\u5A54\u{2101D}\u{2101E}\u{210F5}\u{210F6}\u579C\u{20E11}"],["8ba1","\u{27694}\u{282CD}\u{20FB5}\u{20E7B}\u{2517E}\u3703\u{20FB6}\u{21180}\u{252D8}\u{2A2BD}\u{249DA}\u{2183A}\u{24177}\u{2827C}\u5899\u5268\u361A\u{2573D}\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\u{25B74}\u{2313D}\u55FB\u35F2\u5689\u4E28\u5902\u{21BC1}\u{2F878}\u9751\u{20086}\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\u{248E9}\u7F52\u793B\u7CF9\u7F53\u{2626A}\u34C1"],["8bde","\u{2634B}\u8002\u8080\u{26612}\u{26951}\u535D\u8864\u89C1\u{278B2}\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\u{28E0F}\u97E6\u9875\u98CE\u98DE\u9963\u{29810}\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\u{20087}\u961D\u6237\u94A2"],["8c40","\u503B\u6DFE\u{29C73}\u9FA6\u3DC9\u888F\u{2414E}\u7077\u5CF5\u4B20\u{251CD}\u3559\u{25D30}\u6122\u{28A32}\u8FA7\u91F6\u7191\u6719\u73BA\u{23281}\u{2A107}\u3C8B\u{21980}\u4B10\u78E4\u7402\u51AE\u{2870F}\u4009\u6A63\u{2A2BA}\u4223\u860F\u{20A6F}\u7A2A\u{29947}\u{28AEA}\u9755\u704D\u5324\u{2207E}\u93F4\u76D9\u{289E3}\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\u{21DB6}\u5E92\u5E99\u5FC2\u{22712}\u658B"],["8ca1","\u{233F9}\u6919\u6A43\u{23C63}\u6CFF"],["8ca7","\u7200\u{24505}\u738C\u3EDB\u{24A13}\u5B15\u74B9\u8B83\u{25CA4}\u{25695}\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\u{28DB9}\u{2143F}\u4071\u42A2\u5A1A"],["8cc9","\u9868\u676B\u4276\u573D"],["8cce","\u85D6\u{2497B}\u82BF\u{2710D}\u4C81\u{26D74}\u5D7B\u{26B15}\u{26FBE}\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\u{23256}\u{22796}\u439A\u4536"],["8ce6","\u5CD5\u{23B1A}\u8AF9\u5C78\u3D12\u{23551}\u5D78\u9FB2\u7157\u4558\u{240EC}\u{21E23}\u4C77\u3978\u344A\u{201A4}\u{26C41}\u8ACC\u4FB4\u{20239}\u59BF\u816C\u9856\u{298FA}\u5F3B"],["8d40","\u{20B9F}"],["8d42","\u{221C1}\u{2896D}\u4102\u46BB\u{29079}\u3F07\u9FB3\u{2A1B5}\u40F8\u37D6\u46F7\u{26C46}\u417C\u{286B2}\u{273FF}\u456D\u38D4\u{2549A}\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\u{24B0F}\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1"],["8da1","\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\u{289C0}\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\u{23F41}\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\u{20325}\u43C1\u35F1\u{20ED8}"],["8e40","\u{23ED7}\u57BE\u{26ED3}\u713E\u{257E0}\u364E\u69A2\u{28BE9}\u5B74\u7A49\u{258E1}\u{294D9}\u7A65\u7A7D\u{259AC}\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\u{2648D}\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\u{25C01}\u7B0B\u7B55\u7B29\u{2530E}\u{25CFE}\u7BA2\u7B6F\u839C\u{25BB4}\u{26C7F}\u7BD0\u8421\u7B92\u7BB8\u{25D20}\u3DAD\u{25C65}\u8492\u7BFA\u7C06\u7C35\u{25CC1}\u7C44\u7C83\u{24882}\u7CA6\u667D\u{24578}\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE"],["8ea1","\u7E67\u451D\u{26E44}\u7D5D\u{26ED6}\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\u{24057}\u{26029}\u7DE4\u3D13\u7DF5\u{217F9}\u7DE5\u{2836D}\u7E1D\u{26121}\u{2615A}\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\u{262D0}\u99E1\u7F97\u{26351}\u7FA3\u{21661}\u{20068}\u455C\u{23766}\u4503\u{2833A}\u7FFA\u{26489}\u8005\u8008\u801D\u8028\u802F\u{2A087}\u{26CC3}\u803B\u803C\u8061\u{22714}\u4989\u{26626}\u{23DE3}\u{266E8}\u6725\u80A7\u{28A48}\u8107\u811A\u58B0\u{226F6}\u6C7F\u{26498}\u{24FB8}\u64E7\u{2148A}\u8218\u{2185E}\u6A53\u{24A65}\u{24A95}\u447A\u8229\u{20B0D}\u{26A52}\u{23D7E}\u4FF9\u{214FD}\u84E2\u8362\u{26B0A}\u{249A7}\u{23530}\u{21773}\u{23DF8}\u82AA\u691B\u{2F994}\u41DB"],["8f40","\u854B\u82D0\u831A\u{20E16}\u{217B4}\u36C1\u{2317D}\u{2355A}\u827B\u82E2\u8318\u{23E8B}\u{26DA3}\u{26B05}\u{26B97}\u{235CE}\u3DBF\u831D\u55EC\u8385\u450B\u{26DA5}\u83AC\u83C1\u83D3\u347E\u{26ED4}\u6A57\u855A\u3496\u{26E42}\u{22EEF}\u8458\u{25BE4}\u8471\u3DD3\u44E4\u6AA7\u844A\u{23CB5}\u7958\u84A8\u{26B96}\u{26E77}\u{26E43}\u84DE\u840F\u8391\u44A0\u8493\u84E4\u{25C91}\u4240\u{25CC0}\u4543\u8534\u5AF2\u{26E99}\u4527\u8573\u4516\u67BF\u8616"],["8fa1","\u{28625}\u{2863B}\u85C1\u{27088}\u8602\u{21582}\u{270CD}\u{2F9B2}\u456A\u8628\u3648\u{218A2}\u53F7\u{2739A}\u867E\u8771\u{2A0F8}\u87EE\u{22C27}\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\u{275E0}\u{23DB9}\u{275E4}\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\u{2770F}\u8987\u898A\u89A6\u89A9\u89A7\u89BC\u{28A25}\u89E7\u{27924}\u{27ABD}\u8A9C\u7793\u91FE\u8A90\u{27A59}\u7AE9\u{27B3A}\u{23F8F}\u4713\u{27B38}\u717C\u8B0C\u8B1F\u{25430}\u{25565}\u8B3F\u8B4C\u8B4D\u8AA9\u{24A7A}\u8B90\u8B9B\u8AAF\u{216DF}\u4615\u884F\u8C9B\u{27D54}\u{27D8F}\u{2F9D4}\u3725\u{27D53}\u8CD6\u{27D98}\u{27DBD}\u8D12\u8D03\u{21910}\u8CDB\u705C\u8D11\u{24CC9}\u3ED0\u8D77"],["9040","\u8DA9\u{28002}\u{21014}\u{2498A}\u3B7C\u{281BC}\u{2710C}\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\u{28365}\u{28412}\u8FA5\u9303\u{2A29F}\u{20A50}\u8FB3\u492A\u{289DE}\u{2853D}\u{23DBB}\u5EF8\u{23262}\u8FF9\u{2A014}\u{286BC}\u{28501}\u{22325}\u3980\u{26ED7}\u9037\u{2853C}\u{27ABE}\u9061\u{2856C}\u{2860B}\u90A8\u{28713}\u90C4\u{286E6}\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\u{28933}\u{21E89}\u920E\u6C9F\u9241\u9262\u{255B9}\u92B9\u{28AC6}\u{23C9B}\u{28B0C}\u{255DB}"],["90a1","\u{20D31}\u932C\u936B\u{28AE1}\u{28BEB}\u708F\u5AC3\u{28AE2}\u{28AE5}\u4965\u9244\u{28BEC}\u{28C39}\u{28BFF}\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\u{2267A}\u{286D8}\u{2127C}\u{23E2E}\u49DF\u6C1C\u967B\u9696\u416C\u96A3\u{26ED5}\u61DA\u96B6\u78F5\u{28AE0}\u96BD\u53CC\u49A1\u{26CB8}\u{20274}\u{26410}\u{290AF}\u{290E5}\u{24AD1}\u{21915}\u{2330A}\u9731\u8642\u9736\u4A0F\u453D\u4585\u{24AE9}\u7075\u5B41\u971B\u975C\u{291D5}\u9757\u5B4A\u{291EB}\u975F\u9425\u50D0\u{230B7}\u{230BC}\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\u{2546C}\u97EE\u741C\u{29433}\u97FF\u97F5\u{2941D}\u{2797A}\u4AD1\u9834\u9833\u984B\u9866\u3B0E\u{27175}\u3D51\u{20630}\u{2415C}"],["9140","\u{25706}\u98CA\u98B7\u98C8\u98C7\u4AFF\u{26D27}\u{216D3}\u55B0\u98E1\u98E6\u98EC\u9378\u9939\u{24A29}\u4B72\u{29857}\u{29905}\u99F5\u9A0C\u9A3B\u9A10\u9A58\u{25725}\u36C4\u{290B1}\u{29BD5}\u9AE0\u9AE2\u{29B05}\u9AF4\u4C0E\u9B14\u9B2D\u{28600}\u5034\u9B34\u{269A8}\u38C3\u{2307D}\u9B50\u9B40\u{29D3E}\u5A45\u{21863}\u9B8E\u{2424B}\u9C02\u9BFF\u9C0C\u{29E68}\u9DD4\u{29FB7}\u{2A192}\u{2A1AB}\u{2A0E1}\u{2A123}\u{2A1DF}\u9D7E\u9D83\u{2A134}\u9E0E\u6888"],["91a1","\u9DC4\u{2215B}\u{2A193}\u{2A220}\u{2193B}\u{2A233}\u9D39\u{2A0B9}\u{2A2B4}\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\u{24364}\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\u{28C2B}\u9F02\u9F08\u4B96\u9424\u{26DA2}\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\u{2908B}\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\u{24975}\u{249BB}\u7177\u{249F8}\u{24348}\u{24A51}\u739E\u{28BDA}\u{218FA}\u799F\u{2897E}\u{28E36}\u9369\u93F3\u{28A44}\u92EC\u9381\u93CB\u{2896C}\u{244B9}\u7217\u3EEB\u7772\u7A43\u70D0\u{24473}\u{243F8}\u717E\u{217EF}\u70A3\u{218BE}\u{23599}\u3EC7\u{21885}\u{2542F}\u{217F8}\u3722\u{216FB}\u{21839}\u36E1\u{21774}\u{218D1}\u{25F4B}\u3723\u{216C0}\u575B\u{24A25}\u{213FE}\u{212A8}"],["9240","\u{213C6}\u{214B6}\u8503\u{236A6}\u8503\u8455\u{24994}\u{27165}\u{23E31}\u{2555C}\u{23EFB}\u{27052}\u44F4\u{236EE}\u{2999D}\u{26F26}\u67F9\u3733\u3C15\u3DE7\u586C\u{21922}\u6810\u4057\u{2373F}\u{240E1}\u{2408B}\u{2410F}\u{26C21}\u54CB\u569E\u{266B1}\u5692\u{20FDF}\u{20BA8}\u{20E0D}\u93C6\u{28B13}\u939C\u4EF8\u512B\u3819\u{24436}\u4EBC\u{20465}\u{2037F}\u4F4B\u4F8A\u{25651}\u5A68\u{201AB}\u{203CB}\u3999\u{2030A}\u{20414}\u3435\u4F29\u{202C0}\u{28EB3}\u{20275}\u8ADA\u{2020C}\u4E98"],["92a1","\u50CD\u510D\u4FA2\u4F03\u{24A0E}\u{23E8A}\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\u{23595}\u{23E39}\u{23EBF}\u6D72\u{21884}\u{23E89}\u51A8\u51C3\u{205E0}\u44DD\u{204A3}\u{20492}\u{20491}\u8D7A\u{28A9C}\u{2070E}\u5259\u52A4\u{20873}\u52E1\u936E\u467A\u718C\u{2438C}\u{20C20}\u{249AC}\u{210E4}\u69D1\u{20E1D}\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\u{24ABC}\u{2408D}\u53D0\u3584\u720F\u{240C9}\u55B4\u{20345}\u54CD\u{20BC6}\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\u{28A46}\u{216FA}\u{2176F}\u{21710}\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\u{25946}\u{219F3}\u{21861}\u{24295}\u36F5\u6D05\u7443\u5A21\u{25E83}"],["9340","\u5A81\u{28BD7}\u{20413}\u93E0\u748C\u{21303}\u7105\u4972\u9408\u{289FB}\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\u{21996}\u{2197C}\u{23AEE}\u5ECD\u5B4F\u{21903}\u{21904}\u3701\u{218A0}\u36DD\u{216FE}\u36D3\u812A\u{28A47}\u{21DBA}\u{23472}\u{289A8}\u5F0C\u5F0E\u{21927}\u{217AB}\u5A6B\u{2173B}\u5B44\u8614\u{275FD}\u8860\u607E\u{22860}\u{2262B}\u5FDB\u3EB8\u{225AF}\u{225BE}\u{29088}\u{26F73}\u61C0\u{2003E}\u{20046}\u{2261B}\u6199\u6198\u6075\u{22C9B}\u{22D07}\u{246D4}\u{2914D}"],["93a1","\u6471\u{24665}\u{22B6A}\u3A29\u{22B22}\u{23450}\u{298EA}\u{22E78}\u6337\u{2A45B}\u64B6\u6331\u63D1\u{249E3}\u{22D67}\u62A4\u{22CA1}\u643B\u656B\u6972\u3BF4\u{2308E}\u{232AD}\u{24989}\u{232AB}\u550D\u{232E0}\u{218D9}\u{2943F}\u66CE\u{23289}\u{231B3}\u3AE0\u4190\u{25584}\u{28B22}\u{2558F}\u{216FC}\u{2555B}\u{25425}\u78EE\u{23103}\u{2182A}\u{23234}\u3464\u{2320F}\u{23182}\u{242C9}\u668E\u{26D24}\u666B\u4B93\u6630\u{27870}\u{21DEB}\u6663\u{232D2}\u{232E1}\u661E\u{25872}\u38D1\u{2383A}\u{237BC}\u3B99\u{237A2}\u{233FE}\u74D0\u3B96\u678F\u{2462A}\u68B6\u681E\u3BC4\u6ABE\u3863\u{237D5}\u{24487}\u6A33\u6A52\u6AC9\u6B05\u{21912}\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\u{23FC0}\u{23C9A}\u93A0\u92F2\u{28BEA}\u{28ACB}"],["9440","\u9289\u{2801E}\u{289DC}\u9467\u6DA5\u6F0B\u{249EC}\u6D67\u{23F7F}\u3D8F\u6E04\u{2403C}\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\u{2431A}\u{24276}\u70F1\u7250\u7287\u7294\u{2478F}\u{24725}\u5179\u{24AA4}\u{205EB}\u747A\u{23EF8}\u{2365F}\u{24A4A}\u{24917}\u{25FE1}\u3F06\u3EB1\u{24ADF}\u{28C23}\u{23F35}\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\u{26DEA}\u4551\u7583\u3F63\u{24CD9}\u{24D06}\u3F58\u7555\u7673\u{2A5C6}\u3B19\u7468\u{28ACC}\u{249AB}\u{2498E}\u3AFB"],["94a1","\u3DCD\u{24A4E}\u3EFF\u{249C5}\u{248F3}\u91FA\u5732\u9342\u{28AE3}\u{21864}\u50DF\u{25221}\u{251E7}\u7778\u{23232}\u770E\u770F\u777B\u{24697}\u{23781}\u3A5E\u{248F0}\u7438\u749B\u3EBF\u{24ABA}\u{24AC7}\u40C8\u{24A96}\u{261AE}\u9307\u{25581}\u781E\u788D\u7888\u78D2\u73D0\u7959\u{27741}\u{256E3}\u410E\u799B\u8496\u79A5\u6A2D\u{23EFA}\u7A3A\u79F4\u416E\u{216E6}\u4132\u9235\u79F1\u{20D4C}\u{2498C}\u{20299}\u{23DBA}\u{2176E}\u3597\u556B\u3570\u36AA\u{201D4}\u{20C0D}\u7AE2\u5A59\u{226F5}\u{25AAF}\u{25A9C}\u5A0D\u{2025B}\u78F0\u5A2A\u{25BC6}\u7AFE\u41F9\u7C5D\u7C6D\u4211\u{25BB3}\u{25EBC}\u{25EA6}\u7CCD\u{249F9}\u{217B0}\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\u{26261}"],["9540","\u{2615C}\u{27B48}\u7D97\u{25E82}\u426A\u{26B75}\u{20916}\u67D6\u{2004E}\u{235CF}\u57C4\u{26412}\u{263F8}\u{24962}\u7FDD\u7B27\u{2082C}\u{25AE9}\u{25D43}\u7B0C\u{25E0E}\u99E6\u8645\u9A63\u6A1C\u{2343F}\u39E2\u{249F7}\u{265AD}\u9A1F\u{265A0}\u8480\u{27127}\u{26CD1}\u44EA\u8137\u4402\u80C6\u8109\u8142\u{267B4}\u98C3\u{26A42}\u8262\u8265\u{26A51}\u8453\u{26DA7}\u8610\u{2721B}\u5A86\u417F\u{21840}\u5B2B\u{218A1}\u5AE4\u{218D8}\u86A0\u{2F9BC}\u{23D8F}\u882D\u{27422}\u5A02"],["95a1","\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\u{25683}\u8954\u{27785}\u{27784}\u{28BF5}\u{28BD9}\u{28B9C}\u{289F9}\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\u{29448}\u5F4D\u922B\u{24284}\u65D4\u7129\u70C4\u{21845}\u9D6D\u8C9F\u8CE9\u{27DDC}\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\u{24C09}\u8F30\u8F4A\u42F4\u6C58\u6FBB\u{22321}\u489B\u6F79\u6E8B\u{217DA}\u9BE9\u36B5\u{2492F}\u90BB\u9097\u5571\u4906\u91BB\u9404\u{28A4B}\u4062\u{28AFC}\u9427\u{28C1D}\u{28C3B}\u84E5\u8A2B\u9599\u95A7\u9597\u9596\u{28D34}\u7445\u3EC2\u{248FF}\u{24A42}\u{243EA}\u3EE7\u{23225}\u968F\u{28EE7}\u{28E66}\u{28E65}\u3ECC\u{249ED}\u{24A78}\u{23FEE}\u7412\u746B\u3EFC\u9741\u{290B0}"],["9640","\u6847\u4A1D\u{29093}\u{257DF}\u975D\u9368\u{28989}\u{28C26}\u{28B2F}\u{263BE}\u92BA\u5B11\u8B69\u493C\u73F9\u{2421B}\u979B\u9771\u9938\u{20F26}\u5DC1\u{28BC5}\u{24AB2}\u981F\u{294DA}\u92F6\u{295D7}\u91E5\u44C0\u{28B50}\u{24A67}\u{28B64}\u98DC\u{28A45}\u3F00\u922A\u4925\u8414\u993B\u994D\u{27B06}\u3DFD\u999B\u4B6F\u99AA\u9A5C\u{28B65}\u{258C8}\u6A8F\u9A21\u5AFE\u9A2F\u{298F1}\u4B90\u{29948}\u99BC\u4BBD\u4B97\u937D\u5872\u{21302}\u5822\u{249B8}"],["96a1","\u{214E8}\u7844\u{2271F}\u{23DB8}\u68C5\u3D7D\u9458\u3927\u6150\u{22781}\u{2296B}\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\u{29E2D}\u9B9F\u{2A1F5}\u{2A0FE}\u9D21\u4CAE\u{24104}\u9E18\u4CB0\u9D0C\u{2A1B4}\u{2A0ED}\u{2A0F3}\u{2992F}\u9DA5\u84BD\u{26E12}\u{26FDF}\u{26B82}\u85FC\u4533\u{26DA4}\u{26E84}\u{26DF0}\u8420\u85EE\u{26E00}\u{237D7}\u{26064}\u79E2\u{2359C}\u{23640}\u492D\u{249DE}\u3D62\u93DB\u92BE\u9348\u{202BF}\u78B9\u9277\u944D\u4FE4\u3440\u9064\u{2555D}\u783D\u7854\u78B6\u784B\u{21757}\u{231C9}\u{24941}\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\u{241B5}\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\u{241AC}\u71EB\u{26C40}\u{24F97}\u5B28\u{217B5}\u{28A49}"],["9740","\u610C\u5ACE\u5A0B\u42BC\u{24488}\u372C\u4B7B\u{289FC}\u93BB\u93B8\u{218D6}\u{20F1D}\u8472\u{26CC0}\u{21413}\u{242FA}\u{22C26}\u{243C1}\u5994\u{23DB7}\u{26741}\u7DA8\u{2615B}\u{260A4}\u{249B9}\u{2498B}\u{289FA}\u92E5\u73E2\u3EE9\u74B4\u{28B63}\u{2189F}\u3EE1\u{24AB3}\u6AD8\u73F3\u73FB\u3ED6\u{24A3E}\u{24A94}\u{217D9}\u{24A66}\u{203A7}\u{21424}\u{249E5}\u7448\u{24916}\u70A5\u{24976}\u9284\u73E6\u935F\u{204FE}\u9331\u{28ACE}\u{28A16}\u9386\u{28BE7}\u{255D5}\u4935\u{28A82}\u716B"],["97a1","\u{24943}\u{20CFF}\u56A4\u{2061A}\u{20BEB}\u{20CB8}\u5502\u79C4\u{217FA}\u7DFE\u{216C2}\u{24A50}\u{21852}\u452E\u9401\u370A\u{28AC0}\u{249AD}\u59B0\u{218BF}\u{21883}\u{27484}\u5AA1\u36E2\u{23D5B}\u36B0\u925F\u5A79\u{28A81}\u{21862}\u9374\u3CCD\u{20AB4}\u4A96\u398A\u50F4\u3D69\u3D4C\u{2139C}\u7175\u42FB\u{28218}\u6E0F\u{290E4}\u44EB\u6D57\u{27E4F}\u7067\u6CAF\u3CD6\u{23FED}\u{23E2D}\u6E02\u6F0C\u3D6F\u{203F5}\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\u{28C1C}\u{26BC0}\u5812\u57C8\u36D6\u{21452}\u70FE\u{24362}\u{24A71}\u{22FE3}\u{212B0}\u{223BD}\u68B9\u6967\u{21398}\u{234E5}\u{27BF4}\u{236DF}\u{28A83}\u{237D6}\u{233FA}\u{24C9F}\u6A1A\u{236AD}\u{26CB7}\u843E\u44DF\u44CE"],["9840","\u{26D26}\u{26D51}\u{26C82}\u{26FDE}\u6F17\u{27109}\u833D\u{2173A}\u83ED\u{26C80}\u{27053}\u{217DB}\u5989\u5A82\u{217B3}\u5A61\u5A71\u{21905}\u{241FC}\u372D\u59EF\u{2173C}\u36C7\u718E\u9390\u669A\u{242A5}\u5A6E\u5A2B\u{24293}\u6A2B\u{23EF9}\u{27736}\u{2445B}\u{242CA}\u711D\u{24259}\u{289E1}\u4FB0\u{26D28}\u5CC2\u{244CE}\u{27E4D}\u{243BD}\u6A0C\u{24256}\u{21304}\u70A6\u7133\u{243E9}\u3DA5\u6CDF\u{2F825}\u{24A4F}\u7E65\u59EB\u5D2F\u3DF3\u5F5C\u{24A5D}\u{217DF}\u7DA4\u8426"],["98a1","\u5485\u{23AFA}\u{23300}\u{20214}\u577E\u{208D5}\u{20619}\u3FE5\u{21F9E}\u{2A2B6}\u7003\u{2915B}\u5D70\u738F\u7CD3\u{28A59}\u{29420}\u4FC8\u7FE7\u72CD\u7310\u{27AF4}\u7338\u7339\u{256F6}\u7341\u7348\u3EA9\u{27B18}\u906C\u71F5\u{248F2}\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\u{24F5C}\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\u{25535}\u7933\u6803\u7932\u4103"],["9940","\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\u{20CCF}\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A"],["99a1","\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\u{27967}\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF"],["9a40","\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\u{21BC2}\u9D49\u9C3A"],["9aa1","\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\u{20094}\u{202B7}\u{203A0}\u691A\u94C3\u59AC\u{204D7}\u5840\u94C1\u37B9\u{205D5}\u{20615}\u{20676}\u{216BA}\u5757\u7173\u{20AC2}\u{20ACD}\u{20BBF}\u546A\u{2F83B}\u{20BCB}\u549E\u{20BFB}\u{20C3B}\u{20C53}\u{20C65}\u{20C7C}\u60E7\u{20C8D}\u567A\u{20CB5}\u{20CDD}\u{20CED}\u{20D6F}\u{20DB2}\u{20DC8}\u6955\u9C2F\u87A5\u{20E04}\u{20E0E}\u{20ED7}\u{20F90}\u{20F2D}\u{20E73}\u5C20\u{20FBC}\u5E0B\u{2105C}\u{2104F}\u{21076}\u671E\u{2107B}\u{21088}\u{21096}\u3647\u{210BF}\u{210D3}\u{2112F}\u{2113B}\u5364\u84AD\u{212E3}\u{21375}\u{21336}\u8B81\u{21577}\u{21619}\u{217C3}\u{217C7}\u4E78\u70BB\u{2182D}\u{2196A}"],["9b40","\u{21A2D}\u{21A45}\u{21C2A}\u{21C70}\u{21CAC}\u{21EC8}\u62C3\u{21ED5}\u{21F15}\u7198\u6855\u{22045}\u69E9\u36C8\u{2227C}\u{223D7}\u{223FA}\u{2272A}\u{22871}\u{2294F}\u82FD\u{22967}\u{22993}\u{22AD5}\u89A5\u{22AE8}\u8FA0\u{22B0E}\u97B8\u{22B3F}\u9847\u9ABD\u{22C4C}"],["9b62","\u{22C88}\u{22CB7}\u{25BE8}\u{22D08}\u{22D12}\u{22DB7}\u{22D95}\u{22E42}\u{22F74}\u{22FCC}\u{23033}\u{23066}\u{2331F}\u{233DE}\u5FB1\u6648\u66BF\u{27A79}\u{23567}\u{235F3}\u7201\u{249BA}\u77D7\u{2361A}\u{23716}\u7E87\u{20346}\u58B5\u670E"],["9ba1","\u6918\u{23AA7}\u{27657}\u{25FE2}\u{23E11}\u{23EB9}\u{275FE}\u{2209A}\u48D0\u4AB8\u{24119}\u{28A9A}\u{242EE}\u{2430D}\u{2403B}\u{24334}\u{24396}\u{24A45}\u{205CA}\u51D2\u{20611}\u599F\u{21EA8}\u3BBE\u{23CFF}\u{24404}\u{244D6}\u5788\u{24674}\u399B\u{2472F}\u{285E8}\u{299C9}\u3762\u{221C3}\u8B5E\u{28B4E}\u99D6\u{24812}\u{248FB}\u{24A15}\u7209\u{24AC0}\u{20C78}\u5965\u{24EA5}\u{24F86}\u{20779}\u8EDA\u{2502C}\u528F\u573F\u7171\u{25299}\u{25419}\u{23F4A}\u{24AA7}\u55BC\u{25446}\u{2546E}\u{26B52}\u91D4\u3473\u{2553F}\u{27632}\u{2555E}\u4718\u{25562}\u{25566}\u{257C7}\u{2493F}\u{2585D}\u5066\u34FB\u{233CC}\u60DE\u{25903}\u477C\u{28948}\u{25AAE}\u{25B89}\u{25C06}\u{21D90}\u57A1\u7151\u6FB6\u{26102}\u{27C12}\u9056\u{261B2}\u{24F9A}\u8B62\u{26402}\u{2644A}"],["9c40","\u5D5B\u{26BF7}\u8F36\u{26484}\u{2191C}\u8AEA\u{249F6}\u{26488}\u{23FEF}\u{26512}\u4BC0\u{265BF}\u{266B5}\u{2271B}\u9465\u{257E1}\u6195\u5A27\u{2F8CD}\u4FBB\u56B9\u{24521}\u{266FC}\u4E6A\u{24934}\u9656\u6D8F\u{26CBD}\u3618\u8977\u{26799}\u{2686E}\u{26411}\u{2685E}\u71DF\u{268C7}\u7B42\u{290C0}\u{20A11}\u{26926}\u9104\u{26939}\u7A45\u9DF0\u{269FA}\u9A26\u{26A2D}\u365F\u{26469}\u{20021}\u7983\u{26A34}\u{26B5B}\u5D2C\u{23519}\u83CF\u{26B9D}\u46D0\u{26CA4}\u753B\u8865\u{26DAE}\u58B6"],["9ca1","\u371C\u{2258D}\u{2704B}\u{271CD}\u3C54\u{27280}\u{27285}\u9281\u{2217A}\u{2728B}\u9330\u{272E6}\u{249D0}\u6C39\u949F\u{27450}\u{20EF8}\u8827\u88F5\u{22926}\u{28473}\u{217B1}\u6EB8\u{24A2A}\u{21820}\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\u{29CAD}\u{298A4}\u8943\u{277CC}\u{27858}\u56D6\u40DF\u{2160A}\u39A1\u{2372F}\u{280E8}\u{213C5}\u71AD\u8366\u{279DD}\u{291A8}\u5A67\u4CB7\u{270AF}\u{289AB}\u{279FD}\u{27A0A}\u{27B0B}\u{27D66}\u{2417A}\u7B43\u797E\u{28009}\u6FB5\u{2A2DF}\u6A03\u{28318}\u53A2\u{26E07}\u93BF\u6836\u975D\u{2816F}\u{28023}\u{269B5}\u{213ED}\u{2322F}\u{28048}\u5D85\u{28C30}\u{28083}\u5715\u9823\u{28949}\u5DAB\u{24988}\u65BE\u69D5\u53D2\u{24AA5}\u{23F81}\u3C11\u6736\u{28090}\u{280F4}\u{2812E}\u{21FA1}\u{2814F}"],["9d40","\u{28189}\u{281AF}\u{2821A}\u{28306}\u{2832F}\u{2838A}\u35CA\u{28468}\u{286AA}\u48FA\u63E6\u{28956}\u7808\u9255\u{289B8}\u43F2\u{289E7}\u43DF\u{289E8}\u{28B46}\u{28BD4}\u59F8\u{28C09}\u8F0B\u{28FC5}\u{290EC}\u7B51\u{29110}\u{2913C}\u3DF7\u{2915E}\u{24ACA}\u8FD0\u728F\u568B\u{294E7}\u{295E9}\u{295B0}\u{295B8}\u{29732}\u{298D1}\u{29949}\u{2996A}\u{299C3}\u{29A28}\u{29B0E}\u{29D5A}\u{29D9B}\u7E9F\u{29EF8}\u{29F23}\u4CA4\u9547\u{2A293}\u71A2\u{2A2FF}\u4D91\u9012\u{2A5CB}\u4D9C\u{20C9C}\u8FBE\u55C1"],["9da1","\u8FBA\u{224B0}\u8FB9\u{24A93}\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\u{28B2C}\u{2789D}\u373A\u8E80\u{217F5}\u{28024}\u{28B6C}\u{28B99}\u{27A3E}\u{266AF}\u3DEB\u{27655}\u{23CB7}\u{25635}\u{25956}\u4E9A\u{25E81}\u{26258}\u56BF\u{20E6D}\u8E0E\u5B6D\u{23E88}\u{24C9E}\u63DE\u62D0\u{217F6}\u{2187B}\u6530\u562D\u{25C4A}\u541A\u{25311}\u3DC6\u{29D98}\u4C7D\u5622\u561E\u7F49\u{25ED8}\u5975\u{23D40}\u8770\u4E1C\u{20FEA}\u{20D49}\u{236BA}\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\u{20E9D}\u35CE\u5605\u55F1\u66F1\u{282E2}\u362D\u7534\u55F0\u55BA\u5497\u5572\u{20C41}\u{20C96}\u5ED0\u{25148}\u{20E76}\u{22C62}"],["9e40","\u{20EA2}\u9EAB\u7D5A\u55DE\u{21075}\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\u{22B43}\u9C72\u{22EB3}\u519A\u34DF\u{20DA7}\u51A7\u544D\u551E\u5513\u7666\u8E2D\u{2688A}\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\u{210C1}\u44EC\u7304\u{24706}\u5B90\u830B\u{26893}\u567B\u{226F4}\u{27D2F}\u{241A3}\u{27D73}\u{26ED0}\u{272B6}\u9170\u{211D9}\u9208\u{23CFC}\u{2A6A9}\u{20EAC}\u{20EF9}\u7266\u{21CA2}\u474E\u{24FC2}\u{27FF9}\u{20FEB}\u40FA"],["9ea1","\u9C5D\u651F\u{22DA0}\u48F3\u{247E0}\u{29D7C}\u{20FEC}\u{20E0A}\u6062\u{275A3}\u{20FED}"],["9ead","\u{26048}\u{21187}\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\u{24618}\u589A\u{24B6E}\u822D\u544B\u57AA\u{25A95}\u{20979}"],["9ec5","\u3A52\u{22465}\u7374\u{29EAC}\u4D09\u9BED\u{23CFE}\u{29F30}\u4C5B\u{24FA9}\u{2959E}\u{29FDE}\u845C\u{23DB6}\u{272B2}\u{267B3}\u{23720}\u632E\u7D25\u{23EF7}\u{23E2C}\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\u{2048E}\u7640\u5AF0\u{20EB6}\u787A\u{27F2E}\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\u{2A434}\u9E85\u4CE1\u75F9\u37FB\u6119\u{230DA}\u{243F2}"],["9ef5","\u565D\u{212A9}\u57A7\u{24963}\u{29E06}\u5234\u{270AE}\u35AD\u6C4A\u9D7C"],["9f40","\u7C56\u9B39\u57DE\u{2176C}\u5C53\u64D3\u{294D0}\u{26335}\u{27164}\u86AD\u{20D28}\u{26D22}\u{24AE2}\u{20D71}"],["9f4f","\u51FE\u{21F0F}\u5D8E\u9703\u{21DD1}\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\u{2493E}\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130"],["9fa1","\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\u{2176D}\u99DA\u5273"],["9fae","\u9159\u9681\u915C"],["9fb2","\u9151\u{28E97}\u637F\u{26D23}\u6ACA\u5611\u918E\u757A\u6285\u{203FC}\u734F\u7C70\u{25C21}\u{23CFD}"],["9fc1","\u{24919}\u76D6\u9B9D\u4E2A\u{20CD4}\u83BE\u8842"],["9fc9","\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\u{201F2}\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3"],["9fdb","\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14"],["9fe7","\u6BFA\u8818\u7F78"],["9feb","\u5620\u{2A64A}\u8E77\u9F53"],["9ff0","\u8DD4\u8E4F\u9E1C\u8E01\u6282\u{2837D}\u8E28\u8E75\u7AD3\u{24A77}\u7A3E\u78D8\u6CEA\u8A67\u7607"],["a040","\u{28A5A}\u9F26\u6CCE\u87D6\u75C3\u{2A2B2}\u7853\u{2F840}\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\u{24ABB}\u862F\u5FBA\u88A0\u44B7"],["a055","\u{2183B}\u{26E05}"],["a058","\u8A7E\u{2251B}"],["a05b","\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5"],["a063","\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\u{26159}\u6159\u4C04\u9E96\u617D"],["a073","\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\u{233F5}\u6364\u6802\u35D2"],["a0a1","\u5D57\u{28BC2}\u8FDA\u{28E39}"],["a0a6","\u50D9\u{21D46}\u7906\u5332\u9638\u{20F3B}\u4065"],["a0ae","\u77FE"],["a0b0","\u7CC2\u{25F1A}\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\u{27486}\u805B\u74F0\u8103\u7724\u8989\u{267CC}\u7553\u{26ED1}\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6"],["a0d4","\u89A9\u7468\u6DB9\u87C1\u{24011}\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077"],["a0e2","\u7F71\u{28B2D}\u7250\u60E9\u4B7E\u5220\u3C18\u{23CC7}\u{25ED7}\u{27656}\u{25531}\u{21944}\u{212FE}\u{29903}\u{26DDC}\u{270AD}\u5CC1\u{261AD}\u{28A0F}\u{23677}\u{200EE}\u{26846}\u{24F0E}\u4562\u5B1F\u{2634C}\u9F50\u9EA6\u{2626B}"],["a3c0","\u2400",31,"\u2421"],["c6a1","\u2460",9,"\u2474",9,"\u2170",9,"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\xA8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041",23],["c740","\u3059",58,"\u30A1\u30A2\u30A3\u30A4"],["c7a1","\u30A5",81,"\u0410",5,"\u0401\u0416",4],["c840","\u041B",26,"\u0451\u0436",25,"\u21E7\u21B8\u21B9\u31CF\u{200CC}\u4E5A\u{2008A}\u5202\u4491"],["c8a1","\u9FB0\u5188\u9FB1\u{27607}"],["c8cd","\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3"],["c8f5","\u0283\u0250\u025B\u0254\u0275\u0153\xF8\u014B\u028A\u026A"],["f9fe","\uFFED"],["fa40","\u{20547}\u92DB\u{205DF}\u{23FC5}\u854C\u42B5\u73EF\u51B5\u3649\u{24942}\u{289E4}\u9344\u{219DB}\u82EE\u{23CC8}\u783C\u6744\u62DF\u{24933}\u{289AA}\u{202A0}\u{26BB3}\u{21305}\u4FAB\u{224ED}\u5008\u{26D29}\u{27A84}\u{23600}\u{24AB1}\u{22513}\u5029\u{2037E}\u5FA4\u{20380}\u{20347}\u6EDB\u{2041F}\u507D\u5101\u347A\u510E\u986C\u3743\u8416\u{249A4}\u{20487}\u5160\u{233B4}\u516A\u{20BFF}\u{220FC}\u{202E5}\u{22530}\u{2058E}\u{23233}\u{21983}\u5B82\u877D\u{205B3}\u{23C99}\u51B2\u51B8"],["faa1","\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\u{24AA6}\u51B3\u51E2\u5342\u51ED\u83CD\u693E\u{2372D}\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\u{26B13}\u5305\u{28ADE}\u5549\u6ED9\u{23F80}\u{20954}\u{23FEC}\u5333\u5344\u{20BE2}\u6CCB\u{21726}\u681B\u73D5\u604A\u3EAA\u38CC\u{216E8}\u71DD\u44A2\u536D\u5374\u{286AB}\u537E\u537F\u{21596}\u{21613}\u77E6\u5393\u{28A9B}\u53A0\u53AB\u53AE\u73A7\u{25772}\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\u{20B8F}\u53E0\u{23FEB}\u{22DA3}\u53F6\u{20C77}\u5413\u7079\u552B\u6657\u6D5B\u546D\u{26B53}\u{20D74}\u555D\u548F\u54A4\u47A6\u{2170D}\u{20EDD}\u3DB4\u{20D4D}"],["fb40","\u{289BC}\u{22698}\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\u{218D7}\u{2403A}\u4552\u{24435}\u66B3\u{210B4}\u5637\u66CD\u{2328A}\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\u{28B66}\u3623\u{2124F}\u5746\u{241A5}\u6C6E\u708B\u5742\u36B1\u{26C7E}\u57E6\u{21416}\u5803\u{21454}\u{24363}\u5826\u{24BF5}\u585C\u58AA\u3561\u58E0\u58DC\u{2123C}\u58FB\u5BFF\u5743\u{2A150}\u{24278}\u93D3\u35A1\u591F\u68A6\u36C3\u6E59"],["fba1","\u{2163E}\u5A24\u5553\u{21692}\u8505\u59C9\u{20D4E}\u{26C81}\u{26D2A}\u{217DC}\u59D9\u{217FB}\u{217B2}\u{26DA6}\u6D71\u{21828}\u{216D5}\u59F9\u{26E45}\u5AAB\u5A63\u36E6\u{249A9}\u5A77\u3708\u5A96\u7465\u5AD3\u{26FA1}\u{22554}\u3D85\u{21911}\u3732\u{216B8}\u5E83\u52D0\u5B76\u6588\u5B7C\u{27A0E}\u4004\u485D\u{20204}\u5BD5\u6160\u{21A34}\u{259CC}\u{205A5}\u5BF3\u5B9D\u4D10\u5C05\u{21B44}\u5C13\u73CE\u5C14\u{21CA5}\u{26B28}\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\u{21DF9}\u{21E37}\u5D10\u5D18\u5D46\u{21EA4}\u5CBA\u5DD7\u82FC\u382D\u{24901}\u{22049}\u{22173}\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\u{244BC}\u{20CD3}\u53A6\u4EB7\u5ED0\u53A8\u{21771}\u5E09\u5EF4\u{28482}"],["fc40","\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\u{201C1}\u{2F894}\u3ADE\u48AE\u{2133A}\u5F3A\u{26888}\u{223D0}\u5F58\u{22471}\u5F63\u97BD\u{26E6E}\u5F72\u9340\u{28A36}\u5FA7\u5DB6\u3D5F\u{25250}\u{21F6A}\u{270F8}\u{22668}\u91D6\u{2029E}\u{28A29}\u6031\u6685\u{21877}\u3963\u3DC7\u3639\u5790\u{227B4}\u7971\u3E40\u609E\u60A4\u60B3\u{24982}\u{2498F}\u{27A53}\u74A4\u50E1\u5AA0\u6164\u8424\u6142\u{2F8A6}\u{26ED2}\u6181\u51F4\u{20656}\u6187\u5BAA\u{23FB7}"],["fca1","\u{2285F}\u61D3\u{28B9D}\u{2995D}\u61D0\u3932\u{22980}\u{228C1}\u6023\u615C\u651E\u638B\u{20118}\u62C5\u{21770}\u62D5\u{22E0D}\u636C\u{249DF}\u3A17\u6438\u63F8\u{2138E}\u{217FC}\u6490\u6F8A\u{22E36}\u9814\u{2408C}\u{2571D}\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\u{24A28}\u{24A23}\u6585\u656D\u655F\u{2307E}\u65B5\u{24940}\u4B37\u65D1\u40D8\u{21829}\u65E0\u65E3\u5FDF\u{23400}\u6618\u{231F7}\u{231F8}\u6644\u{231A4}\u{231A5}\u664B\u{20E75}\u6667\u{251E6}\u6673\u6674\u{21E3D}\u{23231}\u{285F4}\u{231C8}\u{25313}\u77C5\u{228F7}\u99A4\u6702\u{2439C}\u{24A21}\u3B2B\u69FA\u{237C2}\u675E\u6767\u6762\u{241CD}\u{290ED}\u67D7\u44E9\u6822\u6E50\u923C\u6801\u{233E6}\u{26DA0}\u685D"],["fd40","\u{2346F}\u69E1\u6A0B\u{28ADF}\u6973\u68C3\u{235CD}\u6901\u6900\u3D32\u3A01\u{2363C}\u3B80\u67AC\u6961\u{28A4A}\u42FC\u6936\u6998\u3BA1\u{203C9}\u8363\u5090\u69F9\u{23659}\u{2212A}\u6A45\u{23703}\u6A9D\u3BF3\u67B1\u6AC8\u{2919C}\u3C0D\u6B1D\u{20923}\u60DE\u6B35\u6B74\u{227CD}\u6EB5\u{23ADB}\u{203B5}\u{21958}\u3740\u5421\u{23B5A}\u6BE1\u{23EFC}\u6BDC\u6C37\u{2248B}\u{248F1}\u{26B51}\u6C5A\u8226\u6C79\u{23DBC}\u44C5\u{23DBD}\u{241A4}\u{2490C}\u{24900}"],["fda1","\u{23CC9}\u36E5\u3CEB\u{20D32}\u9B83\u{231F9}\u{22491}\u7F8F\u6837\u{26D25}\u{26DA1}\u{26DEB}\u6D96\u6D5C\u6E7C\u6F04\u{2497F}\u{24085}\u{26E72}\u8533\u{26F74}\u51C7\u6C9C\u6E1D\u842E\u{28B21}\u6E2F\u{23E2F}\u7453\u{23F82}\u79CC\u6E4F\u5A91\u{2304B}\u6FF8\u370D\u6F9D\u{23E30}\u6EFA\u{21497}\u{2403D}\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\u{29170}\u3D3B\u6F9F\u{24144}\u6FD3\u{24091}\u{24155}\u{24039}\u{23FF0}\u{23FB4}\u{2413F}\u51DF\u{24156}\u{24157}\u{24140}\u{261DD}\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\u{24277}\u712B\u7145\u5A88\u714A\u716E\u5C9C\u{24365}\u714F\u9362\u{242C1}\u712C\u{2445A}\u{24A27}\u{24A22}\u71BA\u{28BE8}\u70BD\u720E"],["fe40","\u9442\u7215\u5911\u9443\u7224\u9341\u{25605}\u722E\u7240\u{24974}\u68BD\u7255\u7257\u3E55\u{23044}\u680D\u6F3D\u7282\u732A\u732B\u{24823}\u{2882B}\u48ED\u{28804}\u7328\u732E\u73CF\u73AA\u{20C3A}\u{26A2E}\u73C9\u7449\u{241E2}\u{216E7}\u{24A24}\u6623\u36C5\u{249B7}\u{2498D}\u{249FB}\u73F7\u7415\u6903\u{24A26}\u7439\u{205C3}\u3ED7\u745C\u{228AD}\u7460\u{28EB2}\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\u{24A8C}"],["fea1","\u{2415F}\u{24A79}\u{28B8F}\u5B46\u{28C03}\u{2189E}\u74C8\u{21988}\u750E\u74E9\u751E\u{28ED9}\u{21A4B}\u5BD7\u{28EAC}\u9385\u754D\u754A\u7567\u756E\u{24F82}\u3F04\u{24D13}\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\u{263F5}\u7690\u81EF\u37F8\u{26911}\u{2690E}\u76A1\u76A5\u76B7\u76CC\u{26F9F}\u8462\u{2509D}\u{2517D}\u{21E1C}\u771E\u7726\u7740\u64AF\u{25220}\u7758\u{232AC}\u77AF\u{28964}\u{28968}\u{216C1}\u77F4\u7809\u{21376}\u{24A12}\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\u{255E0}\u78D7\u7934\u78B1\u{2760C}\u8FB8\u8884\u{28B2B}\u{26083}\u{2261C}\u7986\u8900\u6902\u7980\u{25857}\u799D\u{27B39}\u793C\u79A9\u6E2A\u{27126}\u3EA8\u79C6\u{2910D}\u79D4"]]});var QR=h((kOe,YR)=>{"use strict";YR.exports={shiftjis:{type:"_dbcs",table:function(){return GR()},encodeAdd:{"\xA5":92,"\u203E":126},encodeSkipVals:[{from:60736,to:63808}]},csshiftjis:"shiftjis",mskanji:"shiftjis",sjis:"shiftjis",windows31j:"shiftjis",ms31j:"shiftjis",xsjis:"shiftjis",windows932:"shiftjis",ms932:"shiftjis",932:"shiftjis",cp932:"shiftjis",eucjp:{type:"_dbcs",table:function(){return BR()},encodeAdd:{"\xA5":92,"\u203E":126}},gb2312:"cp936",gb231280:"cp936",gb23121980:"cp936",csgb2312:"cp936",csiso58gb231280:"cp936",euccn:"cp936",windows936:"cp936",ms936:"cp936",936:"cp936",cp936:{type:"_dbcs",table:function(){return kp()}},gbk:{type:"_dbcs",table:function(){return kp().concat(s0())}},xgbk:"gbk",isoir58:"gbk",gb18030:{type:"_dbcs",table:function(){return kp().concat(s0())},gb18030:function(){return HR()},encodeSkipVals:[128],encodeAdd:{"\u20AC":41699}},chinese:"gb18030",windows949:"cp949",ms949:"cp949",949:"cp949",cp949:{type:"_dbcs",table:function(){return VR()}},cseuckr:"cp949",csksc56011987:"cp949",euckr:"cp949",isoir149:"cp949",korean:"cp949",ksc56011987:"cp949",ksc56011989:"cp949",ksc5601:"cp949",windows950:"cp950",ms950:"cp950",950:"cp950",cp950:{type:"_dbcs",table:function(){return o0()}},big5:"big5hkscs",big5hkscs:{type:"_dbcs",table:function(){return o0().concat(WR())},encodeSkipVals:[36457,36463,36478,36523,36532,36557,36560,36695,36713,36718,36811,36862,36973,36986,37060,37084,37105,37311,37551,37552,37553,37554,37585,37959,38090,38361,38652,39285,39798,39800,39803,39878,39902,39916,39926,40002,40019,40034,40040,40043,40055,40124,40125,40144,40279,40282,40388,40431,40443,40617,40687,40701,40800,40907,41079,41180,41183,36812,37576,38468,38637,41636,41637,41639,41638,41676,41678]},cnbig5:"big5hkscs",csbig5:"big5hkscs",xxbig5:"big5hkscs"}});var eO=h((ZR,Rp)=>{"use strict";var _Y=kv(),XR=[kR(),OR(),PR(),DR(),NR(),qR(),$R(),zR(),QR()];for(Ap=0;Ap<XR.length;Ap++)Rp=XR[Ap],_Y(ZR,Rp);var Rp,Ap});var nO=h((AOe,rO)=>{"use strict";var tO=bi().Buffer;rO.exports=function(t){var e=t.Transform;function r(i,s){this.conv=i,s=s||{},s.decodeStrings=!1,e.call(this,s)}r.prototype=Object.create(e.prototype,{constructor:{value:r}}),r.prototype._transform=function(i,s,o){if(typeof i!="string")return o(new Error("Iconv encoding stream needs strings as its input."));try{var a=this.conv.write(i);a&&a.length&&this.push(a),o()}catch(c){o(c)}},r.prototype._flush=function(i){try{var s=this.conv.end();s&&s.length&&this.push(s),i()}catch(o){i(o)}},r.prototype.collect=function(i){var s=[];return this.on("error",i),this.on("data",function(o){s.push(o)}),this.on("end",function(){i(null,tO.concat(s))}),this};function n(i,s){this.conv=i,s=s||{},s.encoding=this.encoding="utf8",e.call(this,s)}return n.prototype=Object.create(e.prototype,{constructor:{value:n}}),n.prototype._transform=function(i,s,o){if(!tO.isBuffer(i)&&!(i instanceof Uint8Array))return o(new Error("Iconv decoding stream needs buffers as its input."));try{var a=this.conv.write(i);a&&a.length&&this.push(a,this.encoding),o()}catch(c){o(c)}},n.prototype._flush=function(i){try{var s=this.conv.end();s&&s.length&&this.push(s,this.encoding),i()}catch(o){i(o)}},n.prototype.collect=function(i){var s="";return this.on("error",i),this.on("data",function(o){s+=o}),this.on("end",function(){i(null,s)}),this},{IconvLiteEncoderStream:r,IconvLiteDecoderStream:n}}});var a0=h((ROe,re)=>{"use strict";var iO=bi().Buffer,sO=_R(),IY=kv();re.exports.encodings=null;re.exports.defaultCharUnicode="\uFFFD";re.exports.defaultCharSingleByte="?";re.exports.encode=function(e,r,n){e=""+(e||"");var i=re.exports.getEncoder(r,n),s=i.write(e),o=i.end();return o&&o.length>0?iO.concat([s,o]):s};re.exports.decode=function(e,r,n){typeof e=="string"&&(re.exports.skipDecodeWarning||(console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding"),re.exports.skipDecodeWarning=!0),e=iO.from(""+(e||""),"binary"));var i=re.exports.getDecoder(r,n),s=i.write(e),o=i.end();return o?s+o:s};re.exports.encodingExists=function(e){try{return re.exports.getCodec(e),!0}catch{return!1}};re.exports.toEncoding=re.exports.encode;re.exports.fromEncoding=re.exports.decode;re.exports._codecDataCache={__proto__:null};re.exports.getCodec=function(e){if(!re.exports.encodings){var r=eO();re.exports.encodings={__proto__:null},IY(re.exports.encodings,r)}for(var n=re.exports._canonicalizeEncoding(e),i={};;){var s=re.exports._codecDataCache[n];if(s)return s;var o=re.exports.encodings[n];switch(typeof o){case"string":n=o;break;case"object":for(var a in o)i[a]=o[a];i.encodingName||(i.encodingName=n),n=o.type;break;case"function":return i.encodingName||(i.encodingName=n),s=new o(i,re.exports),re.exports._codecDataCache[i.encodingName]=s,s;default:throw new Error("Encoding not recognized: '"+e+"' (searched as: '"+n+"')")}}};re.exports._canonicalizeEncoding=function(t){return(""+t).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g,"")};re.exports.getEncoder=function(e,r){var n=re.exports.getCodec(e),i=new n.encoder(r,n);return n.bomAware&&r&&r.addBOM&&(i=new sO.PrependBOM(i,r)),i};re.exports.getDecoder=function(e,r){var n=re.exports.getCodec(e),i=new n.decoder(r,n);return n.bomAware&&!(r&&r.stripBOM===!1)&&(i=new sO.StripBOM(i,r)),i};re.exports.enableStreamingAPI=function(e){if(!re.exports.supportsStreams){var r=nO()(e);re.exports.IconvLiteEncoderStream=r.IconvLiteEncoderStream,re.exports.IconvLiteDecoderStream=r.IconvLiteDecoderStream,re.exports.encodeStream=function(i,s){return new re.exports.IconvLiteEncoderStream(re.exports.getEncoder(i,s),s)},re.exports.decodeStream=function(i,s){return new re.exports.IconvLiteDecoderStream(re.exports.getDecoder(i,s),s)},re.exports.supportsStreams=!0}};var Op;try{Op=require("stream")}catch{}Op&&Op.Transform?re.exports.enableStreamingAPI(Op):re.exports.encodeStream=re.exports.decodeStream=function(){throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.")}});var aO=h((OOe,oO)=>{"use strict";oO.exports=kY;function TY(t){for(var e=t.listeners("data"),r=0;r<e.length;r++)if(e[r].name==="ondata")return!0;return!1}function kY(t){if(!t)throw new TypeError("argument stream is required");if(typeof t.unpipe=="function"){t.unpipe();return}if(TY(t))for(var e,r=t.listeners("close"),n=0;n<r.length;n++)e=r[n],!(e.name!=="cleanup"&&e.name!=="onclose")&&e.call(t)}});var dO=h((COe,uO)=>{"use strict";var cO=DY(),AY=wv(),co=Ta(),RY=a0(),OY=aO();uO.exports=PY;var CY=/^Encoding not recognized: /;function jY(t){if(!t)return null;try{return RY.getDecoder(t)}catch(e){throw CY.test(e.message)?co(415,"specified encoding unsupported",{encoding:t,type:"encoding.unsupported"}):e}}function PY(t,e,r){var n=r,i=e||{};if(t===void 0)throw new TypeError("argument stream is required");if(typeof t!="object"||t===null||typeof t.on!="function")throw new TypeError("argument stream must be a stream");if((e===!0||typeof e=="string")&&(i={encoding:e}),typeof e=="function"&&(n=e,i={}),n!==void 0&&typeof n!="function")throw new TypeError("argument callback must be a function");if(!n&&!global.Promise)throw new TypeError("argument callback is required");var s=i.encoding!==!0?i.encoding:"utf-8",o=AY.parse(i.limit),a=i.length!=null&&!isNaN(i.length)?parseInt(i.length,10):null;return n?lO(t,s,a,o,MY(n)):new Promise(function(l,u){lO(t,s,a,o,function(p,f){if(p)return u(p);l(f)})})}function KY(t){OY(t),typeof t.pause=="function"&&t.pause()}function lO(t,e,r,n,i){var s=!1,o=!0;if(n!==null&&r!==null&&r>n)return d(co(413,"request entity too large",{expected:r,length:r,limit:n,type:"entity.too.large"}));var a=t._readableState;if(t._decoder||a&&(a.encoding||a.decoder))return d(co(500,"stream encoding should not be set",{type:"stream.encoding.set"}));if(typeof t.readable<"u"&&!t.readable)return d(co(500,"stream is not readable",{type:"stream.not.readable"}));var c=0,l;try{l=jY(e)}catch(b){return d(b)}var u=l?"":[];t.on("aborted",p),t.on("close",y),t.on("data",f),t.on("end",m),t.on("error",m),o=!1;function d(){for(var b=new Array(arguments.length),v=0;v<b.length;v++)b[v]=arguments[v];s=!0,o?process.nextTick(E):E();function E(){y(),b[0]&&KY(t),i.apply(null,b)}}function p(){s||d(co(400,"request aborted",{code:"ECONNABORTED",expected:r,length:r,received:c,type:"request.aborted"}))}function f(b){s||(c+=b.length,n!==null&&c>n?d(co(413,"request entity too large",{limit:n,received:c,type:"entity.too.large"})):l?u+=l.write(b):u.push(b))}function m(b){if(!s){if(b)return d(b);if(r!==null&&c!==r)d(co(400,"request size did not match content length",{expected:r,length:r,received:c,type:"request.size.invalid"}));else{var v=l?u+(l.end()||""):Buffer.concat(u);d(null,v)}}}function y(){u=null,t.removeListener("aborted",p),t.removeListener("data",f),t.removeListener("end",m),t.removeListener("error",m),t.removeListener("close",y)}}function DY(){try{return require("async_hooks")}catch{return{}}}function MY(t){var e;return cO.AsyncResource&&(e=new cO.AsyncResource(t.name||"bound-anonymous-fn")),!e||!e.runInAsyncScope?t:e.runInAsyncScope.bind(e,t,null)}});var fO=h((jOe,pO)=>{"use strict";pO.exports=NY;function NY(t,e){if(!Array.isArray(t))throw new TypeError("arg must be an array of [ee, events...] arrays");for(var r=[],n=0;n<t.length;n++){var i=t[n];if(!Array.isArray(i)||i.length<2)throw new TypeError("each array member must be [ee, events...]");for(var s=i[0],o=1;o<i.length;o++){var a=i[o],c=LY(a,l);s.on(a,c),r.push({ee:s,event:a,fn:c})}}function l(){u(),e.apply(null,arguments)}function u(){for(var p,f=0;f<r.length;f++)p=r[f],p.ee.removeListener(p.event,p.fn)}function d(p){e=p}return d.cancel=u,d}function LY(t,e){return function(n){for(var i=new Array(arguments.length),s=this,o=t==="error"?n:null,a=0;a<i.length;a++)i[a]=arguments[a];e(o,s,t,i)}}});var Cl=h((POe,c0)=>{"use strict";c0.exports=FY;c0.exports.isFinished=yO;var mO=GY(),hO=fO(),qY=typeof setImmediate=="function"?setImmediate:function(t){process.nextTick(t.bind.apply(t,arguments))};function FY(t,e){return yO(t)!==!1?(qY(e,null,t),t):(UY(t,BY(e)),t)}function yO(t){var e=t.socket;if(typeof t.finished=="boolean")return!!(t.finished||e&&!e.writable);if(typeof t.complete=="boolean")return!!(t.upgrade||!e||!e.readable||t.complete&&!t.readable)}function $Y(t,e){var r,n,i=!1;function s(a){r.cancel(),n.cancel(),i=!0,e(a)}r=n=hO([[t,"end","finish"]],s);function o(a){t.removeListener("socket",o),!i&&r===n&&(n=hO([[a,"error","close"]],s))}if(t.socket){o(t.socket);return}t.on("socket",o),t.socket===void 0&&zY(t,o)}function UY(t,e){var r=t.__onFinished;(!r||!r.queue)&&(r=t.__onFinished=JY(t),$Y(t,r)),r.queue.push(e)}function JY(t){function e(r){if(t.__onFinished===e&&(t.__onFinished=null),!!e.queue){var n=e.queue;e.queue=null;for(var i=0;i<n.length;i++)n[i](r,t)}}return e.queue=[],e}function zY(t,e){var r=t.assignSocket;typeof r=="function"&&(t.assignSocket=function(i){r.call(this,i),e(i)})}function GY(){try{return require("async_hooks")}catch{return{}}}function BY(t){var e;return mO.AsyncResource&&(e=new mO.AsyncResource(t.name||"bound-anonymous-fn")),!e||!e.runInAsyncScope?t:e.runInAsyncScope.bind(e,t,null)}});var wO=h(Cp=>{"use strict";Object.defineProperty(Cp,"__esModule",{value:!0});Cp.format=YY;Cp.parse=QY;var HY=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,bO=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,VY=/[\\"]/g,WY=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,vO=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function YY(t){let{type:e,parameters:r}=t;if(!e||!WY.test(e))throw new TypeError(`Invalid type: ${e}`);let n=e;if(r)for(let i of Object.keys(r)){if(!bO.test(i))throw new TypeError(`Invalid parameter name: ${i}`);n+=`; ${i}=${r7(r[i])}`}return n}function QY(t,e){let r=e?.comma===!0?e7:65536,n=t.length,i=u0(t,e?.start??0,n),s=i;i=l0(t,i,n,r);let o=d0(t,s,i),a=t.slice(s,o).toLowerCase();return e?.parameters===!1?{type:a,index:i,parameters:new vO}:t7(t,a,i,n,r)}var EO=32,SO=9,xO=59,XY=61,gO=34,ZY=92,e7=44;function t7(t,e,r,n,i){let s=new vO;e:for(;r<n&&t.charCodeAt(r)!==i;){r=u0(t,r+1,n);let o=r;for(;r<n;){let a=t.charCodeAt(r);if(a===i)break e;if(a===xO)continue e;if(a===XY){let c=d0(t,o,r),l=t.slice(o,c).toLowerCase();if(r=u0(t,r+1,n),r<n&&t.charCodeAt(r)===gO){r++;let d="";for(;r<n;){let p=t.charCodeAt(r++);if(p===gO){r=l0(t,r,n,i),s[l]===void 0&&(s[l]=d);break}if(p===ZY&&r<n){d+=t[r++];continue}d+=String.fromCharCode(p)}continue e}let u=r;if(r=l0(t,r,n,i),s[l]===void 0){let d=d0(t,u,r);s[l]=t.slice(u,d)}continue e}r++}}return{type:e,index:r,parameters:s}}function l0(t,e,r,n){for(;e<r;){let i=t.charCodeAt(e);if(i===xO||i===n)break;e++}return e}function u0(t,e,r){for(;e<r;){let n=t.charCodeAt(e);if(n!==EO&&n!==SO)break;e++}return e}function d0(t,e,r){for(;r>e;){let n=t.charCodeAt(r-1);if(n!==EO&&n!==SO)break;r--}return r}function r7(t){if(bO.test(t))return t;if(HY.test(t))return`"${t.replace(VY,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var _O=h((DOe,n7)=>{n7.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/ace+json":{source:"iana",compressible:!0},"application/ace-groupcomm+cbor":{source:"iana"},"application/ace-trl+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/aif+cbor":{source:"iana"},"application/aif+json":{source:"iana",compressible:!0},"application/alto-cdni+json":{source:"iana",compressible:!0},"application/alto-cdnifilter+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-propmap+json":{source:"iana",compressible:!0},"application/alto-propmapparams+json":{source:"iana",compressible:!0},"application/alto-tips+json":{source:"iana",compressible:!0},"application/alto-tipsparams+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/appinstaller":{compressible:!1,extensions:["appinstaller"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/appx":{compressible:!1,extensions:["appx"]},"application/appxbundle":{compressible:!1,extensions:["appxbundle"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/automationml-aml+xml":{source:"iana",compressible:!0,extensions:["aml"]},"application/automationml-amlx+zip":{source:"iana",compressible:!1,extensions:["amlx"]},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/bufr":{source:"iana"},"application/c2pa":{source:"iana"},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/ce+cbor":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/cid-edhoc+cbor-seq":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/city+json-seq":{source:"iana"},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-eap":{source:"iana"},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/concise-problem-details+cbor":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cose-x509":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwl":{source:"iana",extensions:["cwl"]},"application/cwl+json":{source:"iana",compressible:!0},"application/cwl+yaml":{source:"iana"},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana",extensions:["dcm"]},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dpop+jwt":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/eat+cwt":{source:"iana"},"application/eat+jwt":{source:"iana"},"application/eat-bun+cbor":{source:"iana"},"application/eat-bun+json":{source:"iana",compressible:!0},"application/eat-ucs+cbor":{source:"iana"},"application/eat-ucs+json":{source:"iana",compressible:!0},"application/ecmascript":{source:"apache",compressible:!0,extensions:["ecma"]},"application/edhoc+cbor-seq":{source:"iana"},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.legacyesn+json":{source:"iana",compressible:!0},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/entity-statement+jwt":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdf":{source:"iana",extensions:["fdf"]},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geopose+json":{source:"iana",compressible:!0},"application/geoxacml+json":{source:"iana",compressible:!0},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gnap-binding-jws":{source:"iana"},"application/gnap-binding-jwsd":{source:"iana"},"application/gnap-binding-rotation-jws":{source:"iana"},"application/gnap-binding-rotation-jwsd":{source:"iana"},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/grib":{source:"iana"},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"iana",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"apache",charset:"UTF-8",compressible:!0,extensions:["js"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/jscontact+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jsonpath":{source:"iana"},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwk-set+jwt":{source:"iana"},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/linkset":{source:"iana"},"application/linkset+json":{source:"iana",compressible:!0},"application/load-control+xml":{source:"iana",compressible:!0},"application/logout+jwt":{source:"iana"},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4","mpg4","mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msix":{compressible:!1,extensions:["msix"]},"application/msixbundle":{compressible:!1,extensions:["msixbundle"]},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!0,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/ohttp-keys":{source:"iana"},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg","one","onea"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["sig","asc"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/private-token-issuer-directory":{source:"iana"},"application/private-token-request":{source:"iana"},"application/private-token-response":{source:"iana"},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/provided-claims+jwt":{source:"iana"},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.implied-document+xml":{source:"iana",compressible:!0},"application/prs.implied-executable":{source:"iana"},"application/prs.implied-object+json":{source:"iana",compressible:!0},"application/prs.implied-object+json-seq":{source:"iana"},"application/prs.implied-object+yaml":{source:"iana"},"application/prs.implied-structure":{source:"iana"},"application/prs.mayfile":{source:"iana"},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.vcfbzip2":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0,extensions:["xsf"]},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"apache"},"application/reputon+json":{source:"iana",compressible:!0},"application/resolve-response+jwt":{source:"iana"},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-checklist":{source:"iana"},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-signed-tal":{source:"iana"},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"apache"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana",extensions:["sql"]},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/sslkeylogfile":{source:"iana"},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/st2110-41":{source:"iana"},"application/stix+json":{source:"iana",compressible:!0},"application/stratum":{source:"iana"},"application/swid+cbor":{source:"iana"},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tm+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/toc+cbor":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{source:"iana",compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/trust-chain+json":{source:"iana",compressible:!0},"application/trust-mark+jwt":{source:"iana"},"application/trust-mark-delegation+jwt":{source:"iana"},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/uccs+cbor":{source:"iana"},"application/ujcs+json":{source:"iana",compressible:!0},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vc":{source:"iana"},"application/vc+cose":{source:"iana"},"application/vc+jwt":{source:"iana"},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.1ob":{source:"iana"},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3a+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ach+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc8+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.5gsa2x":{source:"iana"},"application/vnd.3gpp.5gsa2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gsv2x":{source:"iana"},"application/vnd.3gpp.5gsv2x-local-service-information":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.crs+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.current-location-discovery+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.pinapp-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.seal-group-doc+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-network-qos-management-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-ue-config-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-unicast-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-user-profile-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.v2x":{source:"iana"},"application/vnd.3gpp.vae-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acm.addressxfer+json":{source:"iana",compressible:!0},"application/vnd.acm.chatbot+json":{source:"iana",compressible:!0},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"apache",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"apache"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.parquet":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.apexlang":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"apache"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autodesk.fbx":{extensions:["fbx"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.belightsoft.lhzd+zip":{source:"iana",compressible:!1},"application/vnd.belightsoft.lhzl+zip":{source:"iana",compressible:!1},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.bzip3":{source:"iana"},"application/vnd.c3voc.schedule+xml":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.cncf.helm.chart.content.v1.tar+gzip":{source:"iana"},"application/vnd.cncf.helm.chart.provenance.v1.prov":{source:"iana"},"application/vnd.cncf.helm.config.v1+json":{source:"iana",compressible:!0},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datalog":{source:"iana"},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.dcmp+xml":{source:"iana",compressible:!0,extensions:["dcmp"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.eln+zip":{source:"iana",compressible:!1},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.erofs":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"apache",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.fdsn.stationxml+xml":{source:"iana",charset:"XML-BASED",compressible:!0},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.freelog.comic":{source:"iana"},"application/vnd.frogans.fnc":{source:"apache",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"apache",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.ga4gh.passport+jwt":{source:"iana"},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.genozip":{source:"iana"},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.gentoo.catmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.ebuild":{source:"iana"},"application/vnd.gentoo.eclass":{source:"iana"},"application/vnd.gentoo.gpkg":{source:"iana"},"application/vnd.gentoo.manifest":{source:"iana"},"application/vnd.gentoo.pkgmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.xpak":{source:"iana"},"application/vnd.geo+json":{source:"apache",compressible:!0},"application/vnd.geocube+xml":{source:"apache",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.pinboard":{source:"iana"},"application/vnd.geogebra.slides":{source:"iana",extensions:["ggs"]},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.gnu.taler.exchange+json":{source:"iana",compressible:!0},"application/vnd.gnu.taler.merchant+json":{source:"iana",compressible:!0},"application/vnd.google-apps.audio":{},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.drawing":{compressible:!1,extensions:["gdraw"]},"application/vnd.google-apps.drive-sdk":{compressible:!1},"application/vnd.google-apps.file":{},"application/vnd.google-apps.folder":{compressible:!1},"application/vnd.google-apps.form":{compressible:!1,extensions:["gform"]},"application/vnd.google-apps.fusiontable":{},"application/vnd.google-apps.jam":{compressible:!1,extensions:["gjam"]},"application/vnd.google-apps.mail-layout":{},"application/vnd.google-apps.map":{compressible:!1,extensions:["gmap"]},"application/vnd.google-apps.photo":{},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.script":{compressible:!1,extensions:["gscript"]},"application/vnd.google-apps.shortcut":{},"application/vnd.google-apps.site":{compressible:!1,extensions:["gsite"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-apps.unknown":{},"application/vnd.google-apps.video":{},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"apache",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0,extensions:["xdcf"]},"application/vnd.gpxsee.map+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.hsl":{source:"iana"},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"apache"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"apache",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"apache"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.ipfs.ipns-record":{source:"iana"},"application/vnd.ipld.car":{source:"iana"},"application/vnd.ipld.dag-cbor":{source:"iana"},"application/vnd.ipld.dag-json":{source:"iana"},"application/vnd.ipld.raw":{source:"iana"},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kdl":{source:"iana"},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.keyman.kmp+zip":{source:"iana",compressible:!1},"application/vnd.keyman.kmx":{source:"iana"},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.ldev.productlicensing":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.mdl":{source:"iana"},"application/vnd.mdl-mbsdf":{source:"iana"},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.medicalholodeck.recordxr":{source:"iana"},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mermaid":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.modl":{source:"iana"},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-visio.viewer":{extensions:["vdx"]},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msgpack":{source:"iana"},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.nato.bindingdataobject+cbor":{source:"iana"},"application/vnd.nato.bindingdataobject+json":{source:"iana",compressible:!0},"application/vnd.nato.bindingdataobject+xml":{source:"iana",compressible:!0,extensions:["bdo"]},"application/vnd.nato.openxmlformats-package.iepd+zip":{source:"iana",compressible:!1},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"apache",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oai.workflows":{source:"iana"},"application/vnd.oai.workflows+json":{source:"iana",compressible:!0},"application/vnd.oai.workflows+yaml":{source:"iana"},"application/vnd.oasis.opendocument.base":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"apache",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-master-template":{source:"iana"},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.onvif.metadata":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openvpi.dspx+json":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.procrate.brushset":{extensions:["brushset"]},"application/vnd.procreate.brush":{extensions:["brush"]},"application/vnd.procreate.dream":{extensions:["drm"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.pt.mundusmundi":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0,extensions:["xhtm"]},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.relpipe":{source:"iana"},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.sketchometry":{source:"iana"},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.smintio.portals.archive":{source:"iana"},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sybyl.mol2":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uic.osdm+json":{source:"iana",compressible:!0},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml","uo"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.veraison.tsm-report+cbor":{source:"iana"},"application/vnd.veraison.tsm-report+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw","vsdx","vtx"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vocalshaper.vsp4":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.wasmflow.wafl":{source:"iana"},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordlift":{source:"iana"},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xarin.cpj":{source:"iana"},"application/vnd.xecrets-encrypted":{source:"iana"},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/voucher-jws+json":{source:"iana",compressible:!0},"application/vp":{source:"iana"},"application/vp+cose":{source:"iana"},"application/vp+jwt":{source:"iana"},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blender":{extensions:["blend"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-compressed":{extensions:["rar"]},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-ipynb+json":{compressible:!0,extensions:["ipynb"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zip-compressed":{extensions:["zip"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xfdf":{source:"iana",extensions:["xfdf"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yaml":{source:"iana"},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+cbor":{source:"iana"},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yang-sid+json":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zip+dotlottie":{extensions:["lottie"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana",extensions:["adts","aac"]},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flac":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/matroska":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/midi-clip":{source:"iana"},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a","m4b"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"apache"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{source:"iana",compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp","dib"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/dpx":{source:"iana",extensions:["dpx"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/j2c":{source:"iana"},"image/jaii":{source:"iana",extensions:["jaii"]},"image/jais":{source:"iana",extensions:["jais"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpg","jpeg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm","jpgm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxl":{source:"iana",extensions:["jxl"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1,extensions:["jfif"]},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif","btf"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.clip":{source:"iana"},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"iana",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-adobe-dng":{extensions:["dng"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-emf":{source:"iana"},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-wmf":{source:"iana"},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/bhttp":{source:"iana"},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/mls":{source:"iana"},"message/news":{source:"apache"},"message/ohttp-req":{source:"iana"},"message/ohttp-res":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime","mht","mhtml"]},"message/s-http":{source:"apache"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"apache"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/jt":{source:"iana",extensions:["jt"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/prc":{source:"iana",extensions:["prc"]},"model/step":{source:"iana",extensions:["step","stp","stpnc","p21","210"]},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/u3d":{source:"iana",extensions:["u3d"]},"model/vnd.bary":{source:"iana",extensions:["bary"]},"model/vnd.cld":{source:"iana",extensions:["cld"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana",extensions:["pyo","pyox"]},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usda":{source:"iana",extensions:["usda"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"apache"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/hl7v2":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["md","markdown"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/prs.texi":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.exchangeable":{source:"iana"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"apache"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.vcf":{source:"iana"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vnd.zoo.kcl":{source:"iana"},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/wgsl":{source:"iana",extensions:["wgsl"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/evc":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/h266":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/lottie+json":{source:"iana",compressible:!0},"video/matroska":{source:"iana"},"video/matroska-3d":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts","m2t","m2ts","mts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.planar":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"apache"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}}});var TO=h((MOe,IO)=>{IO.exports=_O()});var CO=h((NOe,OO)=>{var kO={"prs.":100,"x-":200,"x.":300,"vnd.":400,default:900},AO={nginx:10,apache:20,iana:40,default:30},RO={application:1,font:2,audio:2,video:3,default:0};OO.exports=function(e,r="default"){if(e==="application/octet-stream")return 0;let[n,i]=e.split("/"),s=i.replace(/(\.|x-).*/,"$1"),o=kO[s]||kO.default,a=AO[r]||AO.default,c=RO[n]||RO.default,l=1-e.length/100;return o+a+c+l}});var Oa=h(Tt=>{"use strict";var lo=TO(),i7=require("path").extname,jO=CO(),PO=/^\s*([^;\s]*)(?:;|\s|$)/,s7=/^text\//i;Tt.charset=KO;Tt.charsets={lookup:KO};Tt.contentType=o7;Tt.extension=p0;Tt.extensions=Object.create(null);Tt.lookup=a7;Tt.types=Object.create(null);Tt._extensionConflicts=[];c7(Tt.extensions,Tt.types);function KO(t){if(!t||typeof t!="string")return!1;var e=PO.exec(t),r=e&&lo[e[1].toLowerCase()];return r&&r.charset?r.charset:e&&s7.test(e[1])?"UTF-8":!1}function o7(t){if(!t||typeof t!="string")return!1;var e=t.indexOf("/")===-1?Tt.lookup(t):t;if(!e)return!1;if(e.indexOf("charset")===-1){var r=Tt.charset(e);r&&(e+="; charset="+r.toLowerCase())}return e}function p0(t){if(!t||typeof t!="string")return!1;var e=PO.exec(t),r=e&&Tt.extensions[e[1].toLowerCase()];return!r||!r.length?!1:r[0]}function a7(t){if(!t||typeof t!="string")return!1;var e=i7("x."+t).toLowerCase().slice(1);return e&&Tt.types[e]||!1}function c7(t,e){Object.keys(lo).forEach(function(n){var i=lo[n],s=i.extensions;if(!(!s||!s.length)){t[n]=s;for(var o=0;o<s.length;o++){var a=s[o];e[a]=l7(a,e[a],n);let c=u7(a,e[a],n);c!==e[a]&&Tt._extensionConflicts.push([a,c,e[a]])}}})}function l7(t,e,r){var n=e?jO(e,lo[e].source):0,i=r?jO(r,lo[r].source):0;return n>i?e:r}function u7(t,e,r){var n=["nginx","apache",void 0,"iana"],i=e?n.indexOf(lo[e].source):0,s=r?n.indexOf(lo[r].source):0;return Tt.types[p0]!=="application/octet-stream"&&(i>s||i===s&&Tt.types[p0]?.slice(0,12)==="application/")||i>s?e:r}});var NO=h(jp=>{"use strict";var d7=/^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/,DO=/^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/,MO=/^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;jp.format=p7;jp.parse=m7;jp.test=f7;function p7(t){if(!t||typeof t!="object")throw new TypeError("argument obj is required");var e=t.subtype,r=t.suffix,n=t.type;if(!n||!DO.test(n))throw new TypeError("invalid type");if(!e||!d7.test(e))throw new TypeError("invalid subtype");var i=n+"/"+e;if(r){if(!DO.test(r))throw new TypeError("invalid suffix");i+="+"+r}return i}function f7(t){if(typeof t!="string")throw new TypeError("argument string is required to be a string");return MO.test(t.toLowerCase())}function m7(t){if(typeof t!="string")throw new TypeError("argument string is required to be a string");var e=MO.exec(t.toLowerCase());if(!e)throw new TypeError("invalid media type");var r=e[1],n=e[2],i,s=n.lastIndexOf("+");return s!==-1&&(i=n.substr(s+1),n=n.substr(0,s)),new h7(r,n,i)}function h7(t,e,r){this.type=t,this.subtype=e,this.suffix=r}});var Pp=h((FOe,Ca)=>{"use strict";var y7=wO(),g7=Oa(),b7=NO();Ca.exports=v7;Ca.exports.is=LO;Ca.exports.hasBody=qO;Ca.exports.normalize=FO;Ca.exports.match=$O;function LO(t,e){t&&typeof t=="object"&&(t=t.headers["content-type"]);var r,n=e,i=E7(t);if(!i)return!1;if(n&&!Array.isArray(n))for(n=new Array(arguments.length-1),r=0;r<n.length;r++)n[r]=arguments[r+1];if(!n||!n.length)return i;var s;for(r=0;r<n.length;r++)if($O(FO(s=n[r]),i))return s[0]==="+"||s.indexOf("*")!==-1?i:s;return!1}function qO(t){return t.headers["transfer-encoding"]!==void 0||!isNaN(t.headers["content-length"])}function v7(t,e){if(!qO(t))return null;var r=arguments.length>2?Array.prototype.slice.call(arguments,1):e,n=t.headers["content-type"];return LO(n,r)}function FO(t){if(typeof t!="string")return!1;switch(t){case"urlencoded":return"application/x-www-form-urlencoded";case"multipart":return"multipart/*"}return t[0]==="+"?"*/*"+t:t.indexOf("/")===-1?g7.lookup(t):t}function $O(t,e){if(t===!1)return!1;var r=e.split("/"),n=t.split("/");return r.length!==2||n.length!==2||n[0]!=="*"&&n[0]!==r[0]?!1:n[1].slice(0,2)==="*+"?n[1].length<=r[1].length+1&&n[1].slice(1)===r[1].slice(1-n[1].length):!(n[1]!=="*"&&n[1]!==r[1])}function E7(t){if(!t)return null;var e=y7.parse(t,{parameters:!1}).type;return b7.test(e)?e:null}});var VO=h(Kp=>{"use strict";Object.defineProperty(Kp,"__esModule",{value:!0});Kp.format=_7;Kp.parse=I7;var S7=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,JO=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,x7=/[\\"]/g,w7=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,zO=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function _7(t){let{type:e,parameters:r}=t;if(!e||!w7.test(e))throw new TypeError(`Invalid type: ${e}`);let n=e;if(r)for(let i of Object.keys(r)){if(!JO.test(i))throw new TypeError(`Invalid parameter name: ${i}`);n+=`; ${i}=${O7(r[i])}`}return n}function I7(t,e){let r=e?.comma===!0?A7:65536,n=t.length,i=m0(t,e?.start??0,n),s=i;i=f0(t,i,n,r);let o=h0(t,s,i),a=t.slice(s,o).toLowerCase();return e?.parameters===!1?{type:a,index:i,parameters:new zO}:R7(t,a,i,n,r)}var GO=32,BO=9,HO=59,T7=61,UO=34,k7=92,A7=44;function R7(t,e,r,n,i){let s=new zO;e:for(;r<n&&t.charCodeAt(r)!==i;){r=m0(t,r+1,n);let o=r;for(;r<n;){let a=t.charCodeAt(r);if(a===i)break e;if(a===HO)continue e;if(a===T7){let c=h0(t,o,r),l=t.slice(o,c).toLowerCase();if(r=m0(t,r+1,n),r<n&&t.charCodeAt(r)===UO){r++;let d="";for(;r<n;){let p=t.charCodeAt(r++);if(p===UO){r=f0(t,r,n,i),s[l]===void 0&&(s[l]=d);break}if(p===k7&&r<n){d+=t[r++];continue}d+=String.fromCharCode(p)}continue e}let u=r;if(r=f0(t,r,n,i),s[l]===void 0){let d=h0(t,u,r);s[l]=t.slice(u,d)}continue e}r++}}return{type:e,index:r,parameters:s}}function f0(t,e,r,n){for(;e<r;){let i=t.charCodeAt(e);if(i===HO||i===n)break;e++}return e}function m0(t,e,r){for(;e<r;){let n=t.charCodeAt(e);if(n!==GO&&n!==BO)break;e++}return e}function h0(t,e,r){for(;r>e;){let n=t.charCodeAt(r-1);if(n!==GO&&n!==BO)break;r--}return r}function O7(t){if(JO.test(t))return t;if(S7.test(t))return`"${t.replace(x7,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var ja=h((UOe,WO)=>{"use strict";var C7=wv(),j7=VO(),P7=Pp();WO.exports={getCharset:K7,normalizeOptions:M7,passthrough:N7};function K7(t){let e=t.headers["content-type"];if(e)return j7.parse(e).parameters.charset?.toLowerCase()}function D7(t){return function(r){return!!P7(r,t)}}function M7(t,e){if(!e)throw new TypeError("defaultType must be provided");let r=t?.inflate!==!1,n=typeof t?.limit>"u"||t?.limit===null?102400:C7.parse(t.limit),i=t?.type||e,s=t?.verify||!1,o=t?.defaultCharset||"utf-8";if(n===null)throw new TypeError(`option limit "${String(t.limit)}" is invalid`);if(s!==!1&&typeof s!="function")throw new TypeError("option verify must be function");let a=typeof i!="function"?D7(i):i;return{inflate:r,limit:n,verify:s,defaultCharset:o,shouldParse:a}}function N7(t){return t}});var jl=h((JOe,QO)=>{"use strict";var Si=Ta(),L7=dO(),YO=a0(),g0=Cl(),y0=require("node:zlib"),q7=Pp().hasBody,{getCharset:F7}=ja();QO.exports=$7;function $7(t,e,r,n,i,s){if(g0.isFinished(t)){i("body already parsed"),r();return}if("body"in t||(t.body=void 0),!q7(t)){i("skip empty body"),r();return}if(i("content-type %j",t.headers["content-type"]),!s.shouldParse(t)){i("skip parsing"),r();return}let o=null;if(s?.skipCharset!==!0&&(o=F7(t)||s.defaultCharset,s?.isValidCharset&&!s.isValidCharset(o))){i("invalid charset"),r(Si(415,'unsupported charset "'+o.toUpperCase()+'"',{charset:o,type:"charset.unsupported"}));return}let a,c=s,l,u=c.verify;try{l=U7(t,i,c.inflate),a=l.length,l.length=void 0}catch(d){return r(d)}if(c.length=a,c.encoding=u?null:o,c.encoding===null&&o!==null&&!YO.encodingExists(o))return r(Si(415,'unsupported charset "'+o.toUpperCase()+'"',{charset:o.toLowerCase(),type:"charset.unsupported"}));i("read body"),L7(l,c,function(d,p){if(d){let m;d.type==="encoding.unsupported"?m=Si(415,'unsupported charset "'+o.toUpperCase()+'"',{charset:o.toLowerCase(),type:"charset.unsupported"}):m=Si(400,d),l!==t&&(t.unpipe(),l.destroy()),z7(t,function(){r(Si(400,m))});return}if(u)try{i("verify body"),u(t,e,p,o)}catch(m){r(Si(403,m,{body:p,type:m.type||"entity.verify.failed"}));return}let f=p;try{i("parse body"),f=typeof p!="string"&&o!==null?YO.decode(p,o):p,t.body=n(f,o)}catch(m){r(Si(400,m,{body:f,type:m.type||"entity.parse.failed"}));return}r()})}function U7(t,e,r){let n=(t.headers["content-encoding"]||"identity").toLowerCase(),i=t.headers["content-length"];if(e('content-encoding "%s"',n),r===!1&&n!=="identity")throw Si(415,"content encoding unsupported",{encoding:n,type:"encoding.unsupported"});if(n==="identity")return t.length=i,t;let s=J7(n,e);return t.pipe(s),s}function J7(t,e){switch(t){case"deflate":return e("inflate body"),y0.createInflate();case"gzip":return e("gunzip body"),y0.createGunzip();case"br":return e("brotli decompress body"),y0.createBrotliDecompress();default:throw Si(415,'unsupported content encoding "'+t+'"',{encoding:t,type:"encoding.unsupported"})}}function z7(t,e){g0.isFinished(t)?e(null):(g0(t,e),t.resume())}});var ZO=h((zOe,XO)=>{"use strict";var Dp=Tr()("body-parser:json"),G7=jl(),{normalizeOptions:B7}=ja();XO.exports=Y7;var H7=/^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/,V7="#",W7=/#+/g;function Y7(t){let e=B7(t,"application/json"),r=Q7(t),n={...e,isValidCharset:i=>i.slice(0,4)==="utf-"};return function(s,o,a){G7(s,o,a,r,Dp,n)}}function Q7(t){let e=t?.reviver;return t?.strict!==!1?function(i){if(i.length===0)return{};let s=Z7(i);if(s!=="{"&&s!=="[")throw Dp("strict violation"),X7(i,s);try{return Dp("parse json"),JSON.parse(i,e)}catch(o){throw b0(o,{message:o.message,stack:o.stack})}}:function(i){if(i.length===0)return{};try{return Dp("parse json"),JSON.parse(i,e)}catch(s){throw b0(s,{message:s.message,stack:s.stack})}}}function X7(t,e){let r=t.indexOf(e),n="";r!==-1&&(n=t.substring(0,r)+V7.repeat(t.length-r));try{throw JSON.parse(n),new SyntaxError("strict violation")}catch(i){return b0(i,{message:i.message.replace(W7,function(s){return t.substring(r,r+s.length)}),stack:i.stack})}}function Z7(t){let e=H7.exec(t);return e?e[1]:void 0}function b0(t,e){let r=Object.getOwnPropertyNames(t);for(let n=0;n<r.length;n++){let i=r[n];i!=="stack"&&i!=="message"&&delete t[i]}return t.stack=e.stack.replace(t.message,e.message),t.message=e.message,t}});var tC=h((GOe,eC)=>{"use strict";var eQ=Tr()("body-parser:raw"),tQ=jl(),{normalizeOptions:rQ,passthrough:nQ}=ja();eC.exports=iQ;function iQ(t){let r={...rQ(t,"application/octet-stream"),skipCharset:!0};return function(i,s,o){tQ(i,s,o,nQ,eQ,r)}}});var nC=h((BOe,rC)=>{"use strict";var sQ=Tr()("body-parser:text"),oQ=jl(),{normalizeOptions:aQ,passthrough:cQ}=ja();rC.exports=lQ;function lQ(t){let e=aQ(t,"text/plain");return function(n,i,s){oQ(n,i,s,cQ,sQ,e)}}});var uo=h((HOe,iC)=>{"use strict";iC.exports=TypeError});var oC=h((VOe,sC)=>{sC.exports=require("util").inspect});var Nl=h((WOe,TC)=>{var A0=typeof Map=="function"&&Map.prototype,v0=Object.getOwnPropertyDescriptor&&A0?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,Np=A0&&v0&&typeof v0.get=="function"?v0.get:null,aC=A0&&Map.prototype.forEach,R0=typeof Set=="function"&&Set.prototype,E0=Object.getOwnPropertyDescriptor&&R0?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,Lp=R0&&E0&&typeof E0.get=="function"?E0.get:null,cC=R0&&Set.prototype.forEach,uQ=typeof WeakMap=="function"&&WeakMap.prototype,Kl=uQ?WeakMap.prototype.has:null,dQ=typeof WeakSet=="function"&&WeakSet.prototype,Dl=dQ?WeakSet.prototype.has:null,pQ=typeof WeakRef=="function"&&WeakRef.prototype,lC=pQ?WeakRef.prototype.deref:null,fQ=Boolean.prototype.valueOf,mQ=Object.prototype.toString,hQ=Function.prototype.toString,yQ=String.prototype.match,O0=String.prototype.slice,os=String.prototype.replace,gQ=String.prototype.toUpperCase,uC=String.prototype.toLowerCase,vC=RegExp.prototype.test,dC=Array.prototype.concat,$n=Array.prototype.join,bQ=Array.prototype.slice,pC=Math.floor,w0=typeof BigInt=="function"?BigInt.prototype.valueOf:null,S0=Object.getOwnPropertySymbols,_0=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,Pa=typeof Symbol=="function"&&typeof Symbol.iterator=="object",Ml=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Pa||!0)?Symbol.toStringTag:null,EC=Object.prototype.propertyIsEnumerable,fC=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null);function mC(t,e){if(t===1/0||t===-1/0||t!==t||t&&t>-1e3&&t<1e3||vC.call(/e/,e))return e;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof t=="number"){var n=t<0?-pC(-t):pC(t);if(n!==t){var i=String(n),s=O0.call(e,i.length+1);return os.call(i,r,"$&_")+"."+os.call(os.call(s,/([0-9]{3})/g,"$&_"),/_$/,"")}}return os.call(e,r,"$&_")}var I0=oC(),hC=I0.custom,yC=wC(hC)?hC:null,SC={__proto__:null,double:'"',single:"'"},vQ={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};TC.exports=function t(e,r,n,i){var s=r||{};if(xi(s,"quoteStyle")&&!xi(SC,s.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(xi(s,"maxStringLength")&&(typeof s.maxStringLength=="number"?s.maxStringLength<0&&s.maxStringLength!==1/0:s.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var o=xi(s,"customInspect")?s.customInspect:!0;if(typeof o!="boolean"&&o!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(xi(s,"indent")&&s.indent!==null&&s.indent!==" "&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(xi(s,"numericSeparator")&&typeof s.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var a=s.numericSeparator;if(typeof e>"u")return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return IC(e,s);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var c=String(e);return a?mC(e,c):c}if(typeof e=="bigint"){var l=String(e)+"n";return a?mC(e,l):l}var u=typeof s.depth>"u"?5:s.depth;if(typeof n>"u"&&(n=0),n>=u&&u>0&&typeof e=="object")return T0(e)?"[Array]":"[Object]";var d=NQ(s,n);if(typeof i>"u")i=[];else if(_C(i,e)>=0)return"[Circular]";function p(T,K,P){if(K&&(i=bQ.call(i),i.push(K)),P){var C={depth:s.depth};return xi(s,"quoteStyle")&&(C.quoteStyle=s.quoteStyle),t(T,C,n+1,i)}return t(T,s,n+1,i)}if(typeof e=="function"&&!gC(e)){var f=AQ(e),m=Mp(e,p);return"[Function"+(f?": "+f:" (anonymous)")+"]"+(m.length>0?" { "+$n.call(m,", ")+" }":"")}if(wC(e)){var y=Pa?os.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):_0.call(e);return typeof e=="object"&&!Pa?Pl(y):y}if(KQ(e)){for(var b="<"+uC.call(String(e.nodeName)),v=e.attributes||[],E=0;E<v.length;E++)b+=" "+v[E].name+"="+xC(EQ(v[E].value),"double",s);return b+=">",e.childNodes&&e.childNodes.length&&(b+="..."),b+="</"+uC.call(String(e.nodeName))+">",b}if(T0(e)){if(e.length===0)return"[]";var S=Mp(e,p);return d&&!MQ(S)?"["+k0(S,d)+"]":"[ "+$n.call(S,", ")+" ]"}if(xQ(e)){var k=Mp(e,p);return!("cause"in Error.prototype)&&"cause"in e&&!EC.call(e,"cause")?"{ ["+String(e)+"] "+$n.call(dC.call("[cause]: "+p(e.cause),k),", ")+" }":k.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+$n.call(k,", ")+" }"}if(typeof e=="object"&&o){if(yC&&typeof e[yC]=="function"&&I0)return I0(e,{depth:u-n});if(o!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(RQ(e)){var _=[];return aC&&aC.call(e,function(T,K){_.push(p(K,e,!0)+" => "+p(T,e))}),bC("Map",Np.call(e),_,d)}if(jQ(e)){var O=[];return cC&&cC.call(e,function(T){O.push(p(T,e))}),bC("Set",Lp.call(e),O,d)}if(OQ(e))return x0("WeakMap");if(PQ(e))return x0("WeakSet");if(CQ(e))return x0("WeakRef");if(_Q(e))return Pl(p(Number(e)));if(TQ(e))return Pl(p(w0.call(e)));if(IQ(e))return Pl(fQ.call(e));if(wQ(e))return Pl(p(String(e)));if(typeof window<"u"&&e===window)return"{ [object Window] }";if(typeof globalThis<"u"&&e===globalThis||typeof global<"u"&&e===global)return"{ [object globalThis] }";if(!SQ(e)&&!gC(e)){var N=Mp(e,p),ee=fC?fC(e)===Object.prototype:e instanceof Object||e.constructor===Object,q=e instanceof Object?"":"null prototype",U=!ee&&Ml&&Object(e)===e&&Ml in e?O0.call(as(e),8,-1):q?"Object":"",te=ee||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"",Ge=te+(U||q?"["+$n.call(dC.call([],U||[],q||[]),": ")+"] ":"");return N.length===0?Ge+"{}":d?Ge+"{"+k0(N,d)+"}":Ge+"{ "+$n.call(N,", ")+" }"}return String(e)};function xC(t,e,r){var n=r.quoteStyle||e,i=SC[n];return i+t+i}function EQ(t){return os.call(String(t),/"/g,""")}function po(t){return!Ml||!(typeof t=="object"&&(Ml in t||typeof t[Ml]<"u"))}function T0(t){return as(t)==="[object Array]"&&po(t)}function SQ(t){return as(t)==="[object Date]"&&po(t)}function gC(t){return as(t)==="[object RegExp]"&&po(t)}function xQ(t){return as(t)==="[object Error]"&&po(t)}function wQ(t){return as(t)==="[object String]"&&po(t)}function _Q(t){return as(t)==="[object Number]"&&po(t)}function IQ(t){return as(t)==="[object Boolean]"&&po(t)}function wC(t){if(Pa)return t&&typeof t=="object"&&t instanceof Symbol;if(typeof t=="symbol")return!0;if(!t||typeof t!="object"||!_0)return!1;try{return _0.call(t),!0}catch{}return!1}function TQ(t){if(!t||typeof t!="object"||!w0)return!1;try{return w0.call(t),!0}catch{}return!1}var kQ=Object.prototype.hasOwnProperty||function(t){return t in this};function xi(t,e){return kQ.call(t,e)}function as(t){return mQ.call(t)}function AQ(t){if(t.name)return t.name;var e=yQ.call(hQ.call(t),/^function\s*([\w$]+)/);return e?e[1]:null}function _C(t,e){if(t.indexOf)return t.indexOf(e);for(var r=0,n=t.length;r<n;r++)if(t[r]===e)return r;return-1}function RQ(t){if(!Np||!t||typeof t!="object")return!1;try{Np.call(t);try{Lp.call(t)}catch{return!0}return t instanceof Map}catch{}return!1}function OQ(t){if(!Kl||!t||typeof t!="object")return!1;try{Kl.call(t,Kl);try{Dl.call(t,Dl)}catch{return!0}return t instanceof WeakMap}catch{}return!1}function CQ(t){if(!lC||!t||typeof t!="object")return!1;try{return lC.call(t),!0}catch{}return!1}function jQ(t){if(!Lp||!t||typeof t!="object")return!1;try{Lp.call(t);try{Np.call(t)}catch{return!0}return t instanceof Set}catch{}return!1}function PQ(t){if(!Dl||!t||typeof t!="object")return!1;try{Dl.call(t,Dl);try{Kl.call(t,Kl)}catch{return!0}return t instanceof WeakSet}catch{}return!1}function KQ(t){return!t||typeof t!="object"?!1:typeof HTMLElement<"u"&&t instanceof HTMLElement?!0:typeof t.nodeName=="string"&&typeof t.getAttribute=="function"}function IC(t,e){if(t.length>e.maxStringLength){var r=t.length-e.maxStringLength,n="... "+r+" more character"+(r>1?"s":"");return IC(O0.call(t,0,e.maxStringLength),e)+n}var i=vQ[e.quoteStyle||"single"];i.lastIndex=0;var s=os.call(os.call(t,i,"\\$1"),/[\x00-\x1f]/g,DQ);return xC(s,"single",e)}function DQ(t){var e=t.charCodeAt(0),r={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return r?"\\"+r:"\\x"+(e<16?"0":"")+gQ.call(e.toString(16))}function Pl(t){return"Object("+t+")"}function x0(t){return t+" { ? }"}function bC(t,e,r,n){var i=n?k0(r,n):$n.call(r,", ");return t+" ("+e+") {"+i+"}"}function MQ(t){for(var e=0;e<t.length;e++)if(_C(t[e],`
|
||
`)>=0)return!1;return!0}function NQ(t,e){var r;if(t.indent===" ")r=" ";else if(typeof t.indent=="number"&&t.indent>0)r=$n.call(Array(t.indent+1)," ");else return null;return{base:r,prev:$n.call(Array(e+1),r)}}function k0(t,e){if(t.length===0)return"";var r=`
|
||
`+e.prev+e.base;return r+$n.call(t,","+r)+`
|
||
`+e.prev}function Mp(t,e){var r=T0(t),n=[];if(r){n.length=t.length;for(var i=0;i<t.length;i++)n[i]=xi(t,i)?e(t[i],t):""}var s=typeof S0=="function"?S0(t):[],o;if(Pa){o={};for(var a=0;a<s.length;a++)o["$"+s[a]]=s[a]}for(var c in t)xi(t,c)&&(r&&String(Number(c))===c&&c<t.length||Pa&&o["$"+c]instanceof Symbol||(vC.call(/[^\w$]/,c)?n.push(e(c,t)+": "+e(t[c],t)):n.push(c+": "+e(t[c],t))));if(typeof S0=="function")for(var l=0;l<s.length;l++)EC.call(t,s[l])&&n.push("["+e(s[l])+"]: "+e(t[s[l]],t));return n}});var AC=h((YOe,kC)=>{"use strict";var LQ=Nl(),qQ=uo(),qp=function(t,e,r){for(var n=t,i;(i=n.next)!=null;n=i)if(i.key===e)return n.next=i.next,r||(i.next=t.next,t.next=i),i},FQ=function(t,e){if(t){var r=qp(t,e);return r&&r.value}},$Q=function(t,e,r){var n=qp(t,e);n?n.value=r:t.next={key:e,next:t.next,value:r}},UQ=function(t,e){return t?!!qp(t,e):!1},JQ=function(t,e){if(t)return qp(t,e,!0)};kC.exports=function(){var e,r={assert:function(n){if(!r.has(n))throw new qQ("Side channel does not contain "+LQ(n))},delete:function(n){var i=JQ(e,n);return i&&e&&!e.next&&(e=void 0),!!i},get:function(n){return FQ(e,n)},has:function(n){return UQ(e,n)},set:function(n,i){e||(e={next:void 0}),$Q(e,n,i)}};return r}});var C0=h((QOe,RC)=>{"use strict";RC.exports=Object});var CC=h((XOe,OC)=>{"use strict";OC.exports=Error});var PC=h((ZOe,jC)=>{"use strict";jC.exports=EvalError});var DC=h((eCe,KC)=>{"use strict";KC.exports=RangeError});var NC=h((tCe,MC)=>{"use strict";MC.exports=ReferenceError});var qC=h((rCe,LC)=>{"use strict";LC.exports=SyntaxError});var $C=h((nCe,FC)=>{"use strict";FC.exports=URIError});var JC=h((iCe,UC)=>{"use strict";UC.exports=Math.abs});var GC=h((sCe,zC)=>{"use strict";zC.exports=Math.floor});var HC=h((oCe,BC)=>{"use strict";BC.exports=Math.max});var WC=h((aCe,VC)=>{"use strict";VC.exports=Math.min});var QC=h((cCe,YC)=>{"use strict";YC.exports=Math.pow});var ZC=h((lCe,XC)=>{"use strict";XC.exports=Math.round});var tj=h((uCe,ej)=>{"use strict";ej.exports=Number.isNaN||function(e){return e!==e}});var nj=h((dCe,rj)=>{"use strict";var zQ=tj();rj.exports=function(e){return zQ(e)||e===0?e:e<0?-1:1}});var sj=h((pCe,ij)=>{"use strict";ij.exports=Object.getOwnPropertyDescriptor});var j0=h((fCe,oj)=>{"use strict";var Fp=sj();if(Fp)try{Fp([],"length")}catch{Fp=null}oj.exports=Fp});var P0=h((mCe,aj)=>{"use strict";var $p=Object.defineProperty||!1;if($p)try{$p({},"a",{value:1})}catch{$p=!1}aj.exports=$p});var lj=h((hCe,cj)=>{"use strict";cj.exports=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var e={},r=Symbol("test"),n=Object(r);if(typeof r=="string"||Object.prototype.toString.call(r)!=="[object Symbol]"||Object.prototype.toString.call(n)!=="[object Symbol]")return!1;var i=42;e[r]=i;for(var s in e)return!1;if(typeof Object.keys=="function"&&Object.keys(e).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(e).length!==0)return!1;var o=Object.getOwnPropertySymbols(e);if(o.length!==1||o[0]!==r||!Object.prototype.propertyIsEnumerable.call(e,r))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var a=Object.getOwnPropertyDescriptor(e,r);if(a.value!==i||a.enumerable!==!0)return!1}return!0}});var pj=h((yCe,dj)=>{"use strict";var uj=typeof Symbol<"u"&&Symbol,GQ=lj();dj.exports=function(){return typeof uj!="function"||typeof Symbol!="function"||typeof uj("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:GQ()}});var K0=h((gCe,fj)=>{"use strict";fj.exports=typeof Reflect<"u"&&Reflect.getPrototypeOf||null});var D0=h((bCe,mj)=>{"use strict";var BQ=C0();mj.exports=BQ.getPrototypeOf||null});var gj=h((vCe,yj)=>{"use strict";var HQ="Function.prototype.bind called on incompatible ",VQ=Object.prototype.toString,WQ=Math.max,YQ="[object Function]",hj=function(e,r){for(var n=[],i=0;i<e.length;i+=1)n[i]=e[i];for(var s=0;s<r.length;s+=1)n[s+e.length]=r[s];return n},QQ=function(e,r){for(var n=[],i=r||0,s=0;i<e.length;i+=1,s+=1)n[s]=e[i];return n},XQ=function(t,e){for(var r="",n=0;n<t.length;n+=1)r+=t[n],n+1<t.length&&(r+=e);return r};yj.exports=function(e){var r=this;if(typeof r!="function"||VQ.apply(r)!==YQ)throw new TypeError(HQ+r);for(var n=QQ(arguments,1),i,s=function(){if(this instanceof i){var u=r.apply(this,hj(n,arguments));return Object(u)===u?u:this}return r.apply(e,hj(n,arguments))},o=WQ(0,r.length-n.length),a=[],c=0;c<o;c++)a[c]="$"+c;if(i=Function("binder","return function ("+XQ(a,",")+"){ return binder.apply(this,arguments); }")(s),r.prototype){var l=function(){};l.prototype=r.prototype,i.prototype=new l,l.prototype=null}return i}});var Ll=h((ECe,bj)=>{"use strict";var ZQ=gj();bj.exports=Function.prototype.bind||ZQ});var Up=h((SCe,vj)=>{"use strict";vj.exports=Function.prototype.call});var M0=h((xCe,Ej)=>{"use strict";Ej.exports=Function.prototype.apply});var xj=h((wCe,Sj)=>{"use strict";Sj.exports=typeof Reflect<"u"&&Reflect&&Reflect.apply});var _j=h((_Ce,wj)=>{"use strict";var eX=Ll(),tX=M0(),rX=Up(),nX=xj();wj.exports=nX||eX.call(rX,tX)});var N0=h((ICe,Ij)=>{"use strict";var iX=Ll(),sX=uo(),oX=Up(),aX=_j();Ij.exports=function(e){if(e.length<1||typeof e[0]!="function")throw new sX("a function is required");return aX(iX,oX,e)}});var Cj=h((TCe,Oj)=>{"use strict";var cX=N0(),Tj=j0(),Aj;try{Aj=[].__proto__===Array.prototype}catch(t){if(!t||typeof t!="object"||!("code"in t)||t.code!=="ERR_PROTO_ACCESS")throw t}var L0=!!Aj&&Tj&&Tj(Object.prototype,"__proto__"),Rj=Object,kj=Rj.getPrototypeOf;Oj.exports=L0&&typeof L0.get=="function"?cX([L0.get]):typeof kj=="function"?function(e){return kj(e==null?e:Rj(e))}:!1});var Mj=h((kCe,Dj)=>{"use strict";var jj=K0(),Pj=D0(),Kj=Cj();Dj.exports=jj?function(e){return jj(e)}:Pj?function(e){if(!e||typeof e!="object"&&typeof e!="function")throw new TypeError("getProto: not an object");return Pj(e)}:Kj?function(e){return Kj(e)}:null});var Lj=h((ACe,Nj)=>{"use strict";var lX=Function.prototype.call,uX=Object.prototype.hasOwnProperty,dX=Ll();Nj.exports=dX.call(lX,uX)});var Gp=h((RCe,zj)=>{"use strict";var ye,pX=C0(),fX=CC(),mX=PC(),hX=DC(),yX=NC(),Na=qC(),Ma=uo(),gX=$C(),bX=JC(),vX=GC(),EX=HC(),SX=WC(),xX=QC(),wX=ZC(),_X=nj(),Uj=Function,q0=function(t){try{return Uj('"use strict"; return ('+t+").constructor;")()}catch{}},ql=j0(),IX=P0(),F0=function(){throw new Ma},TX=ql?(function(){try{return arguments.callee,F0}catch{try{return ql(arguments,"callee").get}catch{return F0}}})():F0,Ka=pj()(),kt=Mj(),kX=D0(),AX=K0(),Jj=M0(),Fl=Up(),Da={},RX=typeof Uint8Array>"u"||!kt?ye:kt(Uint8Array),fo={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?ye:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?ye:ArrayBuffer,"%ArrayIteratorPrototype%":Ka&&kt?kt([][Symbol.iterator]()):ye,"%AsyncFromSyncIteratorPrototype%":ye,"%AsyncFunction%":Da,"%AsyncGenerator%":Da,"%AsyncGeneratorFunction%":Da,"%AsyncIteratorPrototype%":Da,"%Atomics%":typeof Atomics>"u"?ye:Atomics,"%BigInt%":typeof BigInt>"u"?ye:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?ye:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?ye:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?ye:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":fX,"%eval%":eval,"%EvalError%":mX,"%Float16Array%":typeof Float16Array>"u"?ye:Float16Array,"%Float32Array%":typeof Float32Array>"u"?ye:Float32Array,"%Float64Array%":typeof Float64Array>"u"?ye:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?ye:FinalizationRegistry,"%Function%":Uj,"%GeneratorFunction%":Da,"%Int8Array%":typeof Int8Array>"u"?ye:Int8Array,"%Int16Array%":typeof Int16Array>"u"?ye:Int16Array,"%Int32Array%":typeof Int32Array>"u"?ye:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Ka&&kt?kt(kt([][Symbol.iterator]())):ye,"%JSON%":typeof JSON=="object"?JSON:ye,"%Map%":typeof Map>"u"?ye:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Ka||!kt?ye:kt(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":pX,"%Object.getOwnPropertyDescriptor%":ql,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?ye:Promise,"%Proxy%":typeof Proxy>"u"?ye:Proxy,"%RangeError%":hX,"%ReferenceError%":yX,"%Reflect%":typeof Reflect>"u"?ye:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?ye:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Ka||!kt?ye:kt(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?ye:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Ka&&kt?kt(""[Symbol.iterator]()):ye,"%Symbol%":Ka?Symbol:ye,"%SyntaxError%":Na,"%ThrowTypeError%":TX,"%TypedArray%":RX,"%TypeError%":Ma,"%Uint8Array%":typeof Uint8Array>"u"?ye:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?ye:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?ye:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?ye:Uint32Array,"%URIError%":gX,"%WeakMap%":typeof WeakMap>"u"?ye:WeakMap,"%WeakRef%":typeof WeakRef>"u"?ye:WeakRef,"%WeakSet%":typeof WeakSet>"u"?ye:WeakSet,"%Function.prototype.call%":Fl,"%Function.prototype.apply%":Jj,"%Object.defineProperty%":IX,"%Object.getPrototypeOf%":kX,"%Math.abs%":bX,"%Math.floor%":vX,"%Math.max%":EX,"%Math.min%":SX,"%Math.pow%":xX,"%Math.round%":wX,"%Math.sign%":_X,"%Reflect.getPrototypeOf%":AX};if(kt)try{null.error}catch(t){qj=kt(kt(t)),fo["%Error.prototype%"]=qj}var qj,OX=function t(e){var r;if(e==="%AsyncFunction%")r=q0("async function () {}");else if(e==="%GeneratorFunction%")r=q0("function* () {}");else if(e==="%AsyncGeneratorFunction%")r=q0("async function* () {}");else if(e==="%AsyncGenerator%"){var n=t("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if(e==="%AsyncIteratorPrototype%"){var i=t("%AsyncGenerator%");i&&kt&&(r=kt(i.prototype))}return fo[e]=r,r},Fj={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},$l=Ll(),Jp=Lj(),CX=$l.call(Fl,Array.prototype.concat),jX=$l.call(Jj,Array.prototype.splice),$j=$l.call(Fl,String.prototype.replace),zp=$l.call(Fl,String.prototype.slice),PX=$l.call(Fl,RegExp.prototype.exec),KX=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,DX=/\\(\\)?/g,MX=function(e){var r=zp(e,0,1),n=zp(e,-1);if(r==="%"&&n!=="%")throw new Na("invalid intrinsic syntax, expected closing `%`");if(n==="%"&&r!=="%")throw new Na("invalid intrinsic syntax, expected opening `%`");var i=[];return $j(e,KX,function(s,o,a,c){i[i.length]=a?$j(c,DX,"$1"):o||s}),i},NX=function(e,r){var n=e,i;if(Jp(Fj,n)&&(i=Fj[n],n="%"+i[0]+"%"),Jp(fo,n)){var s=fo[n];if(s===Da&&(s=OX(n)),typeof s>"u"&&!r)throw new Ma("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:i,name:n,value:s}}throw new Na("intrinsic "+e+" does not exist!")};zj.exports=function(e,r){if(typeof e!="string"||e.length===0)throw new Ma("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof r!="boolean")throw new Ma('"allowMissing" argument must be a boolean');if(PX(/^%?[^%]*%?$/,e)===null)throw new Na("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=MX(e),i=n.length>0?n[0]:"",s=NX("%"+i+"%",r),o=s.name,a=s.value,c=!1,l=s.alias;l&&(i=l[0],jX(n,CX([0,1],l)));for(var u=1,d=!0;u<n.length;u+=1){var p=n[u],f=zp(p,0,1),m=zp(p,-1);if((f==='"'||f==="'"||f==="`"||m==='"'||m==="'"||m==="`")&&f!==m)throw new Na("property names with quotes must have matching quotes");if((p==="constructor"||!d)&&(c=!0),i+="."+p,o="%"+i+"%",Jp(fo,o))a=fo[o];else if(a!=null){if(!(p in a)){if(!r)throw new Ma("base intrinsic for "+e+" exists, but the property is not available.");return}if(ql&&u+1>=n.length){var y=ql(a,p);d=!!y,d&&"get"in y&&!("originalValue"in y.get)?a=y.get:a=a[p]}else d=Jp(a,p),a=a[p];d&&!c&&(fo[o]=a)}}return a}});var $0=h((OCe,Hj)=>{"use strict";var Gj=Gp(),Bj=N0(),LX=Bj([Gj("%String.prototype.indexOf%")]);Hj.exports=function(e,r){var n=Gj(e,!!r);return typeof n=="function"&&LX(e,".prototype.")>-1?Bj([n]):n}});var U0=h((CCe,Wj)=>{"use strict";var qX=Gp(),Ul=$0(),FX=Nl(),$X=uo(),Vj=qX("%Map%",!0),UX=Ul("Map.prototype.get",!0),JX=Ul("Map.prototype.set",!0),zX=Ul("Map.prototype.has",!0),GX=Ul("Map.prototype.delete",!0),BX=Ul("Map.prototype.size",!0);Wj.exports=!!Vj&&function(){var e,r={assert:function(n){if(!r.has(n))throw new $X("Side channel does not contain "+FX(n))},delete:function(n){if(e){var i=GX(e,n);return BX(e)===0&&(e=void 0),i}return!1},get:function(n){if(e)return UX(e,n)},has:function(n){return e?zX(e,n):!1},set:function(n,i){e||(e=new Vj),JX(e,n,i)}};return r}});var Qj=h((jCe,Yj)=>{"use strict";var HX=Gp(),Hp=$0(),VX=Nl(),Bp=U0(),WX=uo(),La=HX("%WeakMap%",!0),YX=Hp("WeakMap.prototype.get",!0),QX=Hp("WeakMap.prototype.set",!0),XX=Hp("WeakMap.prototype.has",!0),ZX=Hp("WeakMap.prototype.delete",!0);Yj.exports=La?function(){var e,r,n={assert:function(i){if(!n.has(i))throw new WX("Side channel does not contain "+VX(i))},delete:function(i){if(La&&i&&(typeof i=="object"||typeof i=="function")){if(e)return ZX(e,i)}else if(Bp&&r)return r.delete(i);return!1},get:function(i){return La&&i&&(typeof i=="object"||typeof i=="function")&&e?YX(e,i):r&&r.get(i)},has:function(i){return La&&i&&(typeof i=="object"||typeof i=="function")&&e?XX(e,i):!!r&&r.has(i)},set:function(i,s){La&&i&&(typeof i=="object"||typeof i=="function")?(e||(e=new La),QX(e,i,s)):Bp&&(r||(r=Bp()),r.set(i,s))}};return n}:Bp});var J0=h((PCe,Xj)=>{"use strict";var eZ=uo(),tZ=Nl(),rZ=AC(),nZ=U0(),iZ=Qj(),sZ=iZ||nZ||rZ;Xj.exports=function(){var e,r={assert:function(n){if(!r.has(n)){var i=n&&Object(n)===n?"the given object key":tZ(n);throw new eZ("Side channel does not contain "+i)}},delete:function(n){return!!e&&e.delete(n)},get:function(n){return e&&e.get(n)},has:function(n){return!!e&&e.has(n)},set:function(n,i){e||(e=sZ()),e.set(n,i)}};return r}});var Vp=h((KCe,Zj)=>{"use strict";var oZ=String.prototype.replace,aZ=/%20/g,z0={RFC1738:"RFC1738",RFC3986:"RFC3986"};Zj.exports={default:z0.RFC3986,formatters:{RFC1738:function(t){return oZ.call(t,aZ,"+")},RFC3986:function(t){return String(t)}},RFC1738:z0.RFC1738,RFC3986:z0.RFC3986}});var V0=h((DCe,rP)=>{"use strict";var cZ=Vp(),tP=J0(),eP=P0(),G0=Object.prototype.hasOwnProperty,cs=Array.isArray,Yp=tP(),mo=function(e,r){return Yp.set(e,r),e},ho=function(e){return Yp.has(e)},Jl=function(e){return Yp.get(e)},B0=function(e,r){Yp.set(e,r)},Un=(function(){for(var t=[],e=0;e<256;++e)t[t.length]="%"+((e<16?"0":"")+e.toString(16)).toUpperCase();return t})(),lZ=function(e){for(;e.length>1;){var r=e.pop(),n=r.obj[r.prop];if(cs(n)){for(var i=[],s=0;s<n.length;++s)typeof n[s]<"u"&&(i[i.length]=n[s]);r.obj[r.prop]=i}}},qa=function(e,r){for(var n=r&&r.plainObjects?{__proto__:null}:{},i=0;i<e.length;++i)typeof e[i]<"u"&&(n[i]=e[i]);return n},H0=function(e,r,n){r==="__proto__"&&eP?eP(e,r,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[r]=n},uZ=function t(e,r,n){if(!r)return e;if(typeof r!="object"&&typeof r!="function"){if(cs(e)){var i=e.length;if(n&&typeof n.arrayLimit=="number"&&i>=n.arrayLimit){if(n.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+n.arrayLimit+" element"+(n.arrayLimit===1?"":"s")+" allowed in an array.");return mo(qa(e.concat(r),n),i)}e[i]=r}else if(e&&typeof e=="object")if(ho(e)){var s=Jl(e)+1;e[s]=r,B0(e,s)}else{if(n&&n.strictMerge)return[e,r];(n&&(n.plainObjects||n.allowPrototypes)||!G0.call(Object.prototype,r))&&(e[r]=!0)}else return[e,r];return e}if(!e||typeof e!="object"){if(ho(r)){for(var o=Object.keys(r),a=n&&n.plainObjects?{__proto__:null,0:e}:{0:e},c=0;c<o.length;c++){var l=parseInt(o[c],10);a[l+1]=r[o[c]]}return mo(a,Jl(r)+1)}var u=[e].concat(r);if(n&&typeof n.arrayLimit=="number"&&u.length>n.arrayLimit){if(n.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+n.arrayLimit+" element"+(n.arrayLimit===1?"":"s")+" allowed in an array.");return mo(qa(u,n),u.length-1)}return u}var d=e;if(cs(e)&&!cs(r)&&(d=qa(e,n)),cs(e)&&cs(r)){if(r.forEach(function(p,f){if(G0.call(e,f)){var m=e[f];m&&typeof m=="object"&&p&&typeof p=="object"?e[f]=t(m,p,n):e[e.length]=p}else e[f]=p}),n&&typeof n.arrayLimit=="number"&&e.length>n.arrayLimit){if(n.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+n.arrayLimit+" element"+(n.arrayLimit===1?"":"s")+" allowed in an array.");return mo(qa(e,n),e.length-1)}return e}return Object.keys(r).reduce(function(p,f){var m=r[f];if(G0.call(p,f)?H0(p,f,t(p[f],m,n)):H0(p,f,m),ho(r)&&!ho(p)&&mo(p,Jl(r)),ho(p)){var y=parseInt(f,10);String(y)===f&&y>=0&&y>Jl(p)&&B0(p,y)}return p},d)},dZ=function(e,r){return Object.keys(r).reduce(function(n,i){return H0(n,i,r[i]),n},e)},pZ=function(t,e,r){var n=t.replace(/\+/g," ");if(r==="iso-8859-1")return n.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(n)}catch{return n}},Wp=1024,fZ=function(e,r,n,i,s){if(e.length===0)return e;var o=e;if(typeof e=="symbol"?o=Symbol.prototype.toString.call(e):typeof e!="string"&&(o=String(e)),n==="iso-8859-1")return escape(o).replace(/%u[0-9a-f]{4}/gi,function(m){return"%26%23"+parseInt(m.slice(2),16)+"%3B"});for(var a="",c=0;c<o.length;c+=Wp){var l=o.length>=Wp?o.slice(c,c+Wp):o;if(c+Wp<o.length){var u=l.charCodeAt(l.length-1);u>=55296&&u<=56319&&(l=l.slice(0,-1),c-=1)}for(var d=[],p=0;p<l.length;++p){var f=l.charCodeAt(p);if(f===45||f===46||f===95||f===126||f>=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||s===cZ.RFC1738&&(f===40||f===41)){d[d.length]=l.charAt(p);continue}if(f<128){d[d.length]=Un[f];continue}if(f<2048){d[d.length]=Un[192|f>>6]+Un[128|f&63];continue}if(f<55296||f>=57344){d[d.length]=Un[224|f>>12]+Un[128|f>>6&63]+Un[128|f&63];continue}p+=1,f=65536+((f&1023)<<10|l.charCodeAt(p)&1023),d[d.length]=Un[240|f>>18]+Un[128|f>>12&63]+Un[128|f>>6&63]+Un[128|f&63]}a+=d.join("")}return a},mZ=function(e){for(var r=[{obj:{o:e},prop:"o"}],n=tP(),i=0;i<r.length;++i)for(var s=r[i],o=s.obj[s.prop],a=Object.keys(o),c=0;c<a.length;++c){var l=a[c],u=o[l];typeof u=="object"&&u!==null&&!n.has(u)&&(r[r.length]={obj:o,prop:l},n.set(u,!0))}return lZ(r),e},hZ=function(e){return Object.prototype.toString.call(e)==="[object RegExp]"},yZ=function(e){return!e||typeof e!="object"?!1:!!(e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e))},gZ=function(e,r,n,i,s){if(ho(e)){if(s)throw new RangeError("Array limit exceeded. Only "+n+" element"+(n===1?"":"s")+" allowed in an array.");for(var o=cs(r)?r:[r],a=Jl(e),c=0;c<o.length;++c)a+=1,e[a]=o[c];return B0(e,a),e}var l=[].concat(e,r);if(l.length>n){if(s)throw new RangeError("Array limit exceeded. Only "+n+" element"+(n===1?"":"s")+" allowed in an array.");return mo(qa(l,{plainObjects:i}),l.length-1)}return l},bZ=function(e,r){if(cs(e)){for(var n=[],i=0;i<e.length;i+=1)n[n.length]=r(e[i]);return n}return r(e)};rP.exports={arrayToObject:qa,assign:dZ,combine:gZ,compact:mZ,decode:pZ,encode:fZ,isBuffer:yZ,isOverflow:ho,isRegExp:hZ,markOverflow:mo,maybeMap:bZ,merge:uZ}});var cP=h((MCe,aP)=>{"use strict";var iP=J0(),Qp=V0(),zl=Vp(),vZ=Object.prototype.hasOwnProperty,sP={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,r){return e+"["+r+"]"},repeat:function(e){return e}},Jn=Array.isArray,EZ=Array.prototype.push,oP=function(t,e){EZ.apply(t,Jn(e)?e:[e])},SZ=Date.prototype.toISOString,nP=zl.default,mt={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,commaRoundTrip:!1,delimiter:"&",depth:1/0,encode:!0,encodeDotInKeys:!1,encoder:Qp.encode,encodeValuesOnly:!1,filter:void 0,format:nP,formatter:zl.formatters[nP],indices:!1,serializeDate:function(e){return SZ.call(e)},skipNulls:!1,strictNullHandling:!1},xZ=function(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="symbol"||typeof e=="bigint"},W0={},wZ=function t(e,r,n,i,s,o,a,c,l,u,d,p,f,m,y,b,v,E,S,k){var _=e;if(k>S)throw new RangeError("Input depth exceeded depth option of "+S);for(var O=E,N=0,ee=!1;(O=O.get(W0))!==void 0&&!ee;){var q=O.get(e);if(N+=1,typeof q<"u"){if(q===N)throw new RangeError("Cyclic object value");ee=!0}typeof O.get(W0)>"u"&&(N=0)}if(_=typeof u=="function"?u(r,_):_,_ instanceof Date?_=f(_):n==="comma"&&Jn(_)&&(_=Qp.maybeMap(_,function(ge){return ge instanceof Date?f(ge):ge})),_===null){if(o)return y(l&&!b?l(r,mt.encoder,v,"key",m):r);_=""}if(xZ(_)||Qp.isBuffer(_)){if(l){var U=b?r:l(r,mt.encoder,v,"key",m);return[y(U)+"="+y(l(_,mt.encoder,v,"value",m))]}return[y(r)+"="+y(String(_))]}var te=[];if(typeof _>"u")return te;var Ge;if(n==="comma"&&Jn(_))b&&l&&(_=Qp.maybeMap(_,function(ge){return ge==null?ge:l(ge)})),Ge=[{value:_.length>0?_.join(",")||null:void 0}];else if(Jn(u))Ge=u;else{var T=Object.keys(_);Ge=d?T.sort(d):T}var K=c?String(r).replace(/\./g,"%2E"):String(r),P=i&&Jn(_)&&_.length===1?K+"[]":K;if(s&&Jn(_)&&_.length===0&&Object.keys(_).length===0)return P+"[]";for(var C=0;C<Ge.length;++C){var j=Ge[C],Y=typeof j=="object"&&j&&typeof j.value<"u"?j.value:_[j];if(!(a&&Y===null)){var W=p&&c?String(j).replace(/\./g,"%2E"):String(j),G=Jn(_)?typeof n=="function"?n(P,W):P:P+(p?"."+W:"["+W+"]");E.set(e,N);var Ae=iP();Ae.set(W0,E),oP(te,t(Y,G,n,i,s,o,a,c,n==="comma"&&b&&Jn(_)?null:l,u,d,p,f,m,y,b,v,Ae,S,k+1))}}return te},_Z=function(e){if(!e)return mt;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.encodeDotInKeys<"u"&&typeof e.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(e.encoder!==null&&typeof e.encoder<"u"&&typeof e.encoder!="function")throw new TypeError("Encoder has to be a function.");var r=e.charset||mt.charset;if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=zl.default;if(typeof e.format<"u"){if(!vZ.call(zl.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var i=zl.formatters[n],s=mt.filter;(typeof e.filter=="function"||Jn(e.filter))&&(s=e.filter);var o;if(e.arrayFormat in sP?o=e.arrayFormat:"indices"in e?o=e.indices?"indices":"repeat":o=mt.arrayFormat,"commaRoundTrip"in e&&typeof e.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var a=typeof e.allowDots>"u"?e.encodeDotInKeys===!0?!0:mt.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix=="boolean"?e.addQueryPrefix:mt.addQueryPrefix,allowDots:a,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:mt.allowEmptyArrays,arrayFormat:o,charset:r,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:mt.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:typeof e.delimiter>"u"?mt.delimiter:e.delimiter,depth:typeof e.depth=="number"?e.depth:mt.depth,encode:typeof e.encode=="boolean"?e.encode:mt.encode,encodeDotInKeys:typeof e.encodeDotInKeys=="boolean"?e.encodeDotInKeys:mt.encodeDotInKeys,encoder:typeof e.encoder=="function"?e.encoder:mt.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:mt.encodeValuesOnly,filter:s,format:n,formatter:i,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:mt.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:mt.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:mt.strictNullHandling}};aP.exports=function(t,e){var r=t,n=_Z(e),i,s;typeof n.filter=="function"?(s=n.filter,r=s("",r)):Jn(n.filter)&&(s=n.filter,i=s);var o=[];if(typeof r!="object"||r===null)return"";var a=sP[n.arrayFormat],c=a==="comma"&&n.commaRoundTrip;i||(i=Object.keys(r)),n.sort&&i.sort(n.sort);for(var l=iP(),u=0;u<i.length;++u){var d=i[u];if(!(typeof d>"u"||d===null)){var p=r[d];if(!(n.skipNulls&&p===null)){var f=n.encodeDotInKeys?String(d).replace(/\./g,"%2E"):String(d);oP(o,wZ(p,f,a,c,n.allowEmptyArrays,n.strictNullHandling,n.skipNulls,n.encodeDotInKeys,n.encode?n.encoder:null,n.filter,n.sort,n.allowDots,n.serializeDate,n.format,n.formatter,n.encodeValuesOnly,n.charset,l,n.depth,0))}}}var m=o.join(n.delimiter),y=n.addQueryPrefix===!0?"?":"";return n.charsetSentinel&&(n.charset==="iso-8859-1"?y+="utf8=%26%2310003%3B"+n.delimiter:y+="utf8=%E2%9C%93"+n.delimiter),m.length>0?y+m:""}});var dP=h((NCe,uP)=>{"use strict";var zn=V0(),Xp=Object.prototype.hasOwnProperty,Y0=Array.isArray,rt={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:zn.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictMerge:!0,strictNullHandling:!1,throwOnLimitExceeded:!1},IZ=function(t){return t.replace(/&#(\d+);/g,function(e,r){return String.fromCharCode(parseInt(r,10))})},lP=function(t,e,r){if(t&&typeof t=="string"&&e.comma&&t.indexOf(",")>-1){if(e.throwOnLimitExceeded)for(var n=0,i=t.indexOf(",");i>-1;){if(n+=1,n>=e.arrayLimit)throw new RangeError("Array limit exceeded. Only "+e.arrayLimit+" element"+(e.arrayLimit===1?"":"s")+" allowed in an array.");i=t.indexOf(",",i+1)}return t.split(",")}if(e.throwOnLimitExceeded&&r>=e.arrayLimit)throw new RangeError("Array limit exceeded. Only "+e.arrayLimit+" element"+(e.arrayLimit===1?"":"s")+" allowed in an array.");return t},TZ="utf8=%26%2310003%3B",kZ="utf8=%E2%9C%93",AZ=function(e,r){var n={__proto__:null},i=r.ignoreQueryPrefix?e.replace(/^\?/,""):e;i=i.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var s=r.parameterLimit===1/0?void 0:r.parameterLimit,o=i.split(r.delimiter,r.throwOnLimitExceeded&&typeof s<"u"?s+1:s);if(r.throwOnLimitExceeded&&typeof s<"u"&&o.length>s)throw new RangeError("Parameter limit exceeded. Only "+s+" parameter"+(s===1?"":"s")+" allowed.");var a=-1,c,l=r.charset;if(r.charsetSentinel)for(c=0;c<o.length;++c)o[c].indexOf("utf8=")===0&&(o[c]===kZ?l="utf-8":o[c]===TZ&&(l="iso-8859-1"),a=c,c=o.length);for(c=0;c<o.length;++c)if(c!==a){var u=o[c],d=u.indexOf("]="),p=d===-1?u.indexOf("="):d+1,f,m;if(p===-1?(f=r.decoder(u,rt.decoder,l,"key"),m=r.strictNullHandling?null:""):(f=r.decoder(u.slice(0,p),rt.decoder,l,"key"),f!==null&&(m=zn.maybeMap(lP(u.slice(p+1),r,Y0(n[f])?n[f].length:0),function(b){return r.decoder(b,rt.decoder,l,"value")}))),m&&r.interpretNumericEntities&&l==="iso-8859-1"&&(m=IZ(String(m))),u.indexOf("[]=")>-1&&(m=Y0(m)?[m]:m),r.comma&&Y0(m)&&m.length>r.arrayLimit&&(m=zn.combine([],m,r.arrayLimit,r.plainObjects,r.throwOnLimitExceeded)),f!==null){var y=Xp.call(n,f);y&&(r.duplicates==="combine"||u.indexOf("[]=")>-1)?n[f]=zn.combine(n[f],m,r.arrayLimit,r.plainObjects,r.throwOnLimitExceeded):(!y||r.duplicates==="last")&&(n[f]=m)}}return n},RZ=function(t,e,r,n){var i=0;if(t.length>0&&t[t.length-1]==="[]"){var s=t.slice(0,-1).join("");i=Array.isArray(e)&&e[s]?e[s].length:0}for(var o=n?e:lP(e,r,i),a=t.length-1;a>=0;--a){var c,l=t[a];if(l==="[]"&&r.parseArrays)zn.isOverflow(o)?c=o:c=r.allowEmptyArrays&&(o===""||r.strictNullHandling&&o===null)?[]:zn.combine([],o,r.arrayLimit,r.plainObjects,r.throwOnLimitExceeded);else{c=r.plainObjects?{__proto__:null}:{};var u=l.charAt(0)==="["&&l.charAt(l.length-1)==="]"?l.slice(1,-1):l,d=r.decodeDotInKeys?u.replace(/%2E/g,"."):u,p=parseInt(d,10),f=!isNaN(p)&&l!==d&&String(p)===d&&p>=0&&r.parseArrays;if(!r.parseArrays&&d==="")c={0:o};else if(f&&p<r.arrayLimit)c=[],c[p]=o;else{if(f&&r.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+r.arrayLimit+" element"+(r.arrayLimit===1?"":"s")+" allowed in an array.");f?(c[p]=o,zn.markOverflow(c,p)):d!=="__proto__"&&(c[d]=o)}}o=c}return o},OZ=function(e,r){var n=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e;if(r.depth<=0)return!r.plainObjects&&Xp.call(Object.prototype,n)&&!r.allowPrototypes?void 0:[n];var i=[],s=n.indexOf("["),o=s>=0?n.slice(0,s):n;if(o){if(!r.plainObjects&&Xp.call(Object.prototype,o)&&!r.allowPrototypes)return;i[i.length]=o}for(var a=n.length,c=s,l=0;c>=0&&l<r.depth;){for(var u=1,d=c+1,p=-1;d<a&&p<0;){var f=n.charCodeAt(d);f===91?u+=1:f===93&&(u-=1,u===0&&(p=d)),d+=1}if(p<0)return i[i.length]="["+n.slice(c)+"]",i;var m=n.slice(c,p+1),y=m.slice(1,-1);if(!r.plainObjects&&Xp.call(Object.prototype,y)&&!r.allowPrototypes)return;i[i.length]=m,l+=1,c=n.indexOf("[",p+1)}if(c>=0){if(r.strictDepth===!0)throw new RangeError("Input depth exceeded depth option of "+r.depth+" and strictDepth is true");i[i.length]="["+n.slice(c)+"]"}return i},CZ=function(e,r,n,i){if(e){var s=OZ(e,n);if(s)return RZ(s,r,n,i)}},jZ=function(e){if(!e)return rt;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.decodeDotInKeys<"u"&&typeof e.decodeDotInKeys!="boolean")throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(e.decoder!==null&&typeof e.decoder<"u"&&typeof e.decoder!="function")throw new TypeError("Decoder has to be a function.");if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");if(typeof e.throwOnLimitExceeded<"u"&&typeof e.throwOnLimitExceeded!="boolean")throw new TypeError("`throwOnLimitExceeded` option must be a boolean");var r=typeof e.charset>"u"?rt.charset:e.charset,n=typeof e.duplicates>"u"?rt.duplicates:e.duplicates;if(n!=="combine"&&n!=="first"&&n!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var i=typeof e.allowDots>"u"?e.decodeDotInKeys===!0?!0:rt.allowDots:!!e.allowDots;return{allowDots:i,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:rt.allowEmptyArrays,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:rt.allowPrototypes,allowSparse:typeof e.allowSparse=="boolean"?e.allowSparse:rt.allowSparse,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:rt.arrayLimit,charset:r,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:rt.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:rt.comma,decodeDotInKeys:typeof e.decodeDotInKeys=="boolean"?e.decodeDotInKeys:rt.decodeDotInKeys,decoder:typeof e.decoder=="function"?e.decoder:rt.decoder,delimiter:typeof e.delimiter=="string"||zn.isRegExp(e.delimiter)?e.delimiter:rt.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:rt.depth,duplicates:n,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:rt.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:rt.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:rt.plainObjects,strictDepth:typeof e.strictDepth=="boolean"?!!e.strictDepth:rt.strictDepth,strictMerge:typeof e.strictMerge=="boolean"?!!e.strictMerge:rt.strictMerge,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:rt.strictNullHandling,throwOnLimitExceeded:typeof e.throwOnLimitExceeded=="boolean"?e.throwOnLimitExceeded:!1}};uP.exports=function(t,e){var r=jZ(e);if(t===""||t===null||typeof t>"u")return r.plainObjects?{__proto__:null}:{};for(var n=typeof t=="string"?AZ(t,r):t,i=r.plainObjects?{__proto__:null}:{},s=Object.keys(n),o=0;o<s.length;++o){var a=s[o],c=CZ(a,n[a],r,typeof t=="string");i=zn.merge(i,c,r)}return r.allowSparse===!0?i:zn.compact(i)}});var Q0=h((LCe,pP)=>{"use strict";var PZ=cP(),KZ=dP(),DZ=Vp();pP.exports={formats:DZ,parse:KZ,stringify:PZ}});var hP=h((qCe,mP)=>{"use strict";var fP=Ta(),X0=Tr()("body-parser:urlencoded"),MZ=jl(),NZ=Q0(),{normalizeOptions:LZ}=ja();mP.exports=qZ;function qZ(t){let e=LZ(t,"application/x-www-form-urlencoded");if(e.defaultCharset!=="utf-8"&&e.defaultCharset!=="iso-8859-1")throw new TypeError("option defaultCharset must be either utf-8 or iso-8859-1");let r=FZ(t),n={...e,isValidCharset:i=>i==="utf-8"||i==="iso-8859-1"};return function(s,o,a){MZ(s,o,a,r,X0,n)}}function FZ(t){let e=!!t?.extended,r=t?.parameterLimit!==void 0?t?.parameterLimit:1e3,n=t?.charsetSentinel,i=t?.interpretNumericEntities,s=e?t?.depth!==void 0?t?.depth:32:0;if(isNaN(r)||r<1)throw new TypeError("option parameterLimit must be a positive number");if(isNaN(s)||s<0)throw new TypeError("option depth must be a zero or a positive number");return isFinite(r)&&(r=r|0),function(a,c){if(!a.length)return{};let l=$Z(a,r);if(l===void 0)throw X0("too many parameters"),fP(413,"too many parameters",{type:"parameters.too.many"});let u=e?Math.max(100,l):l;X0("parse "+(e?"extended ":"")+"urlencoding");try{return NZ.parse(a,{allowPrototypes:!0,arrayLimit:u,depth:s,charsetSentinel:n,interpretNumericEntities:i,charset:c,parameterLimit:r,strictDepth:!0})}catch(d){throw d instanceof RangeError?fP(400,"The input exceeded the depth",{type:"querystring.parse.rangeError"}):d}}}function $Z(t,e){let r=0,n=-1;do{if(r++,r>e)return;n=t.indexOf("&",n+1)}while(n!==-1);return r}});var gP=h((Fa,yP)=>{"use strict";Fa=yP.exports=UZ;Fa.json=ZO();Fa.raw=tC();Fa.text=nC();Fa.urlencoded=hP();function UZ(){throw new Error("The bodyParser() generic has been split into individual middleware to use instead.")}});var vP=h((FCe,bP)=>{"use strict";function JZ(t,e,r=!0){if(!t)throw new TypeError("The `destination` argument is required.");if(!e)throw new TypeError("The `source` argument is required.");for(let n of Object.getOwnPropertyNames(e)){if(!r&&Object.hasOwn(t,n))continue;let i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,i)}return t}bP.exports=JZ});var Gl=h(($Ce,EP)=>{"use strict";EP.exports=HZ;var zZ=/(?:[^\x21\x23-\x3B\x3D\x3F-\x5F\x61-\x7A\x7C\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g,GZ=/(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g,BZ="$1\uFFFD$2";function HZ(t){return String(t).replace(GZ,BZ).replace(zZ,encodeURI)}});var Bl=h((UCe,SP)=>{"use strict";var VZ=/["'&<>]/;SP.exports=WZ;function WZ(t){var e=""+t,r=VZ.exec(e);if(!r)return e;var n,i="",s=0,o=0;for(s=r.index;s<e.length;s++){switch(e.charCodeAt(s)){case 34:n=""";break;case 38:n="&";break;case 39:n="'";break;case 60:n="<";break;case 62:n=">";break;default:continue}o!==s&&(i+=e.substring(o,s)),o=s+1,i+=n}return o!==s?i+e.substring(o,s):i}});var Hl=h((JCe,Z0)=>{"use strict";var wP=require("url"),xP=wP.parse,Zp=wP.Url;Z0.exports=_P;Z0.exports.original=YZ;function _P(t){var e=t.url;if(e!==void 0){var r=t._parsedUrl;return TP(e,r)?r:(r=IP(e),r._raw=e,t._parsedUrl=r)}}function YZ(t){var e=t.originalUrl;if(typeof e!="string")return _P(t);var r=t._parsedOriginalUrl;return TP(e,r)?r:(r=IP(e),r._raw=e,t._parsedOriginalUrl=r)}function IP(t){if(typeof t!="string"||t.charCodeAt(0)!==47)return xP(t);for(var e=t,r=null,n=null,i=1;i<t.length;i++)switch(t.charCodeAt(i)){case 63:n===null&&(e=t.substring(0,i),r=t.substring(i+1),n=t.substring(i));break;case 9:case 10:case 12:case 13:case 32:case 35:case 160:case 65279:return xP(t)}var s=Zp!==void 0?new Zp:{};return s.path=t,s.href=t,s.pathname=e,n!==null&&(s.query=r,s.search=n),s}function TP(t,e){return typeof e=="object"&&e!==null&&(Zp===void 0||e instanceof Zp)&&e._raw===t}});var OP=h((zCe,RP)=>{"use strict";var eE=Tr()("finalhandler"),QZ=Gl(),XZ=Bl(),kP=Cl(),ZZ=Hl(),AP=Al(),eee=kP.isFinished;function tee(t){var e=XZ(t).replaceAll(`
|
||
`,"<br>").replaceAll(" "," ");return`<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Error</title>
|
||
</head>
|
||
<body>
|
||
<pre>`+e+`</pre>
|
||
</body>
|
||
</html>
|
||
`}RP.exports=ree;function ree(t,e,r){var n=r||{},i=n.env||process.env.NODE_ENV||"development",s=n.onerror;return function(o){var a,c,l;if(!o&&e.headersSent){eE("cannot 404 after headers sent");return}if(o?(l=see(o),l===void 0?l=aee(e):a=nee(o),c=iee(o,l,i)):(l=404,c="Cannot "+t.method+" "+QZ(oee(t))),eE("default %s",l),o&&s&&setImmediate(s,o,t,e),e.headersSent){eE("cannot %d after headers sent",l),t.socket&&t.socket.destroy();return}cee(t,e,l,a,c)}}function nee(t){if(!(!t.headers||typeof t.headers!="object"))return{...t.headers}}function iee(t,e,r){var n;return r!=="production"&&(n=t.stack,!n&&typeof t.toString=="function"&&(n=t.toString())),n||AP.message[e]}function see(t){if(typeof t.status=="number"&&t.status>=400&&t.status<600)return t.status;if(typeof t.statusCode=="number"&&t.statusCode>=400&&t.statusCode<600)return t.statusCode}function oee(t){try{return ZZ.original(t).pathname}catch{return"resource"}}function aee(t){var e=t.statusCode;return(typeof e!="number"||e<400||e>599)&&(e=500),e}function cee(t,e,r,n,i){function s(){var o=tee(i);e.statusCode=r,t.httpVersionMajor<2&&(e.statusMessage=AP.message[r]),e.removeHeader("Content-Encoding"),e.removeHeader("Content-Language"),e.removeHeader("Content-Range");for(let[a,c]of Object.entries(n??{}))e.setHeader(a,c);if(e.setHeader("Content-Security-Policy","default-src 'none'"),e.setHeader("X-Content-Type-Options","nosniff"),e.setHeader("Content-Type","text/html; charset=utf-8"),e.setHeader("Content-Length",Buffer.byteLength(o,"utf8")),t.method==="HEAD"){e.end();return}e.end(o,"utf8")}if(eee(t)){s();return}t.unpipe(),kP(t,s),t.resume()}});var DP=h((GCe,KP)=>{"use strict";var ef=Tr()("express:view"),Vl=require("node:path"),lee=require("node:fs"),uee=Vl.dirname,PP=Vl.basename,dee=Vl.extname,CP=Vl.join,pee=Vl.resolve;KP.exports=tf;function tf(t,e){var r=e||{};if(this.defaultEngine=r.defaultEngine,this.ext=dee(t),this.name=t,this.root=r.root,!this.ext&&!this.defaultEngine)throw new Error("No default engine was specified and no extension was provided.");var n=t;if(this.ext||(this.ext=this.defaultEngine[0]!=="."?"."+this.defaultEngine:this.defaultEngine,n+=this.ext),!r.engines[this.ext]){var i=this.ext.slice(1);ef('require "%s"',i);var s=require(i).__express;if(typeof s!="function")throw new Error('Module "'+i+'" does not provide a view engine.');r.engines[this.ext]=s}this.engine=r.engines[this.ext],this.path=this.lookup(n)}tf.prototype.lookup=function(e){var r,n=[].concat(this.root);ef('lookup "%s"',e);for(var i=0;i<n.length&&!r;i++){var s=n[i],o=pee(s,e),a=uee(o),c=PP(o);r=this.resolve(a,c)}return r};tf.prototype.render=function(e,r){var n=!0;ef('render "%s"',this.path),this.engine(this.path,e,function(){if(!n)return r.apply(this,arguments);for(var s=new Array(arguments.length),o=this,a=0;a<arguments.length;a++)s[a]=arguments[a];return process.nextTick(function(){return r.apply(o,s)})}),n=!1};tf.prototype.resolve=function(e,r){var n=this.ext,i=CP(e,r),s=jP(i);if(s&&s.isFile()||(i=CP(e,PP(r,n),"index"+n),s=jP(i),s&&s.isFile()))return i};function jP(t){ef('stat "%s"',t);try{return lee.statSync(t)}catch{return}}});var rE=h(tE=>{"use strict";var MP=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,fee=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,NP=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,mee=/\\([\u000b\u0020-\u00ff])/g,hee=/([\\"])/g,LP=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;tE.format=yee;tE.parse=gee;function yee(t){if(!t||typeof t!="object")throw new TypeError("argument obj is required");var e=t.parameters,r=t.type;if(!r||!LP.test(r))throw new TypeError("invalid type");var n=r;if(e&&typeof e=="object")for(var i,s=Object.keys(e).sort(),o=0;o<s.length;o++){if(i=s[o],!NP.test(i))throw new TypeError("invalid parameter name");n+="; "+i+"="+vee(e[i])}return n}function gee(t){if(!t)throw new TypeError("argument string is required");var e=typeof t=="object"?bee(t):t;if(typeof e!="string")throw new TypeError("argument string is required to be a string");var r=e.indexOf(";"),n=r!==-1?e.slice(0,r).trim():e.trim();if(!LP.test(n))throw new TypeError("invalid media type");var i=new Eee(n.toLowerCase());if(r!==-1){var s,o,a;for(MP.lastIndex=r;o=MP.exec(e);){if(o.index!==r)throw new TypeError("invalid parameter format");r+=o[0].length,s=o[1].toLowerCase(),a=o[2],a.charCodeAt(0)===34&&(a=a.slice(1,-1),a.indexOf("\\")!==-1&&(a=a.replace(mee,"$1"))),i.parameters[s]=a}if(r!==e.length)throw new TypeError("invalid parameter format")}return i}function bee(t){var e;if(typeof t.getHeader=="function"?e=t.getHeader("content-type"):typeof t.headers=="object"&&(e=t.headers&&t.headers["content-type"]),typeof e!="string")throw new TypeError("content-type header is missing from object");return e}function vee(t){var e=String(t);if(NP.test(e))return e;if(e.length>0&&!fee.test(e))throw new TypeError("invalid parameter value");return'"'+e.replace(hee,"\\$1")+'"'}function Eee(t){this.parameters=Object.create(null),this.type=t}});var nE=h((HCe,$P)=>{"use strict";$P.exports=wee;var See=require("crypto"),qP=require("fs").Stats,FP=Object.prototype.toString;function xee(t){if(t.length===0)return'"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"';var e=See.createHash("sha1").update(t,"utf8").digest("base64").substring(0,27),r=typeof t=="string"?Buffer.byteLength(t,"utf8"):t.length;return'"'+r.toString(16)+"-"+e+'"'}function wee(t,e){if(t==null)throw new TypeError("argument entity is required");var r=_ee(t),n=e&&typeof e.weak=="boolean"?e.weak:r;if(!r&&typeof t!="string"&&!Buffer.isBuffer(t))throw new TypeError("argument entity must be string, Buffer, or fs.Stats");var i=r?Iee(t):xee(t);return n?"W/"+i:i}function _ee(t){return typeof qP=="function"&&t instanceof qP?!0:t&&typeof t=="object"&&"ctime"in t&&FP.call(t.ctime)==="[object Date]"&&"mtime"in t&&FP.call(t.mtime)==="[object Date]"&&"ino"in t&&typeof t.ino=="number"&&"size"in t&&typeof t.size=="number"}function Iee(t){var e=t.mtime.getTime().toString(16),r=t.size.toString(16);return'"'+r+"-"+e+'"'}});var JP=h((VCe,UP)=>{"use strict";UP.exports=Tee;function Tee(t){if(!t)throw new TypeError("argument req is required");var e=Aee(t.headers["x-forwarded-for"]||""),r=kee(t),n=[r].concat(e);return n}function kee(t){return t.socket?t.socket.remoteAddress:t.connection.remoteAddress}function Aee(t){for(var e=t.length,r=[],n=t.length,i=t.length-1;i>=0;i--)switch(t.charCodeAt(i)){case 32:n===e&&(n=e=i);break;case 44:n!==e&&r.push(t.substring(n,e)),n=e=i;break;default:n=i;break}return n!==e&&r.push(t.substring(n,e)),r}});var GP=h((zP,Wl)=>{(function(){var t,e,r,n,i,s,o,a,c;e={},a=this,typeof Wl<"u"&&Wl!==null&&Wl.exports?Wl.exports=e:a.ipaddr=e,o=function(l,u,d,p){var f,m;if(l.length!==u.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(f=0;p>0;){if(m=d-p,m<0&&(m=0),l[f]>>m!==u[f]>>m)return!1;p-=d,f+=1}return!0},e.subnetMatch=function(l,u,d){var p,f,m,y,b;d==null&&(d="unicast");for(m in u)for(y=u[m],y[0]&&!(y[0]instanceof Array)&&(y=[y]),p=0,f=y.length;p<f;p++)if(b=y[p],l.kind()===b[0].kind()&&l.match.apply(l,b))return m;return d},e.IPv4=(function(){function l(u){var d,p,f;if(u.length!==4)throw new Error("ipaddr: ipv4 octet count should be 4");for(d=0,p=u.length;d<p;d++)if(f=u[d],!(0<=f&&f<=255))throw new Error("ipaddr: ipv4 octet should fit in 8 bits");this.octets=u}return l.prototype.kind=function(){return"ipv4"},l.prototype.toString=function(){return this.octets.join(".")},l.prototype.toNormalizedString=function(){return this.toString()},l.prototype.toByteArray=function(){return this.octets.slice(0)},l.prototype.match=function(u,d){var p;if(d===void 0&&(p=u,u=p[0],d=p[1]),u.kind()!=="ipv4")throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");return o(this.octets,u.octets,8,d)},l.prototype.SpecialRanges={unspecified:[[new l([0,0,0,0]),8]],broadcast:[[new l([255,255,255,255]),32]],multicast:[[new l([224,0,0,0]),4]],linkLocal:[[new l([169,254,0,0]),16]],loopback:[[new l([127,0,0,0]),8]],carrierGradeNat:[[new l([100,64,0,0]),10]],private:[[new l([10,0,0,0]),8],[new l([172,16,0,0]),12],[new l([192,168,0,0]),16]],reserved:[[new l([192,0,0,0]),24],[new l([192,0,2,0]),24],[new l([192,88,99,0]),24],[new l([198,51,100,0]),24],[new l([203,0,113,0]),24],[new l([240,0,0,0]),4]]},l.prototype.range=function(){return e.subnetMatch(this,this.SpecialRanges)},l.prototype.toIPv4MappedAddress=function(){return e.IPv6.parse("::ffff:"+this.toString())},l.prototype.prefixLengthFromSubnetMask=function(){var u,d,p,f,m,y,b;for(b={0:8,128:7,192:6,224:5,240:4,248:3,252:2,254:1,255:0},u=0,m=!1,d=p=3;p>=0;d=p+=-1)if(f=this.octets[d],f in b){if(y=b[f],m&&y!==0)return null;y!==8&&(m=!0),u+=y}else return null;return 32-u},l})(),r="(0?\\d+|0x[a-f0-9]+)",n={fourOctet:new RegExp("^"+r+"\\."+r+"\\."+r+"\\."+r+"$","i"),longValue:new RegExp("^"+r+"$","i")},e.IPv4.parser=function(l){var u,d,p,f,m;if(d=function(y){return y[0]==="0"&&y[1]!=="x"?parseInt(y,8):parseInt(y)},u=l.match(n.fourOctet))return(function(){var y,b,v,E;for(v=u.slice(1,6),E=[],y=0,b=v.length;y<b;y++)p=v[y],E.push(d(p));return E})();if(u=l.match(n.longValue)){if(m=d(u[1]),m>4294967295||m<0)throw new Error("ipaddr: address outside defined range");return(function(){var y,b;for(b=[],f=y=0;y<=24;f=y+=8)b.push(m>>f&255);return b})().reverse()}else return null},e.IPv6=(function(){function l(u,d){var p,f,m,y,b,v;if(u.length===16)for(this.parts=[],p=f=0;f<=14;p=f+=2)this.parts.push(u[p]<<8|u[p+1]);else if(u.length===8)this.parts=u;else throw new Error("ipaddr: ipv6 part count should be 8 or 16");for(v=this.parts,m=0,y=v.length;m<y;m++)if(b=v[m],!(0<=b&&b<=65535))throw new Error("ipaddr: ipv6 part should fit in 16 bits");d&&(this.zoneId=d)}return l.prototype.kind=function(){return"ipv6"},l.prototype.toString=function(){return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/,"::")},l.prototype.toRFC5952String=function(){var u,d,p,f,m;for(f=/((^|:)(0(:|$)){2,})/g,m=this.toNormalizedString(),u=0,d=-1;p=f.exec(m);)p[0].length>d&&(u=p.index,d=p[0].length);return d<0?m:m.substring(0,u)+"::"+m.substring(u+d)},l.prototype.toByteArray=function(){var u,d,p,f,m;for(u=[],m=this.parts,d=0,p=m.length;d<p;d++)f=m[d],u.push(f>>8),u.push(f&255);return u},l.prototype.toNormalizedString=function(){var u,d,p;return u=(function(){var f,m,y,b;for(y=this.parts,b=[],f=0,m=y.length;f<m;f++)d=y[f],b.push(d.toString(16));return b}).call(this).join(":"),p="",this.zoneId&&(p="%"+this.zoneId),u+p},l.prototype.toFixedLengthString=function(){var u,d,p;return u=(function(){var f,m,y,b;for(y=this.parts,b=[],f=0,m=y.length;f<m;f++)d=y[f],b.push(d.toString(16).padStart(4,"0"));return b}).call(this).join(":"),p="",this.zoneId&&(p="%"+this.zoneId),u+p},l.prototype.match=function(u,d){var p;if(d===void 0&&(p=u,u=p[0],d=p[1]),u.kind()!=="ipv6")throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");return o(this.parts,u.parts,16,d)},l.prototype.SpecialRanges={unspecified:[new l([0,0,0,0,0,0,0,0]),128],linkLocal:[new l([65152,0,0,0,0,0,0,0]),10],multicast:[new l([65280,0,0,0,0,0,0,0]),8],loopback:[new l([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new l([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new l([0,0,0,0,0,65535,0,0]),96],rfc6145:[new l([0,0,0,0,65535,0,0,0]),96],rfc6052:[new l([100,65435,0,0,0,0,0,0]),96],"6to4":[new l([8194,0,0,0,0,0,0,0]),16],teredo:[new l([8193,0,0,0,0,0,0,0]),32],reserved:[[new l([8193,3512,0,0,0,0,0,0]),32]]},l.prototype.range=function(){return e.subnetMatch(this,this.SpecialRanges)},l.prototype.isIPv4MappedAddress=function(){return this.range()==="ipv4Mapped"},l.prototype.toIPv4Address=function(){var u,d,p;if(!this.isIPv4MappedAddress())throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");return p=this.parts.slice(-2),u=p[0],d=p[1],new e.IPv4([u>>8,u&255,d>>8,d&255])},l.prototype.prefixLengthFromSubnetMask=function(){var u,d,p,f,m,y,b;for(b={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},u=0,m=!1,d=p=7;p>=0;d=p+=-1)if(f=this.parts[d],f in b){if(y=b[f],m&&y!==0)return null;y!==16&&(m=!0),u+=y}else return null;return 128-u},l})(),i="(?:[0-9a-f]+::?)+",c="%[0-9a-z]{1,}",s={zoneIndex:new RegExp(c,"i"),native:new RegExp("^(::)?("+i+")?([0-9a-f]+)?(::)?("+c+")?$","i"),transitional:new RegExp("^((?:"+i+")|(?:::)(?:"+i+")?)"+(r+"\\."+r+"\\."+r+"\\."+r)+("("+c+")?$"),"i")},t=function(l,u){var d,p,f,m,y,b;if(l.indexOf("::")!==l.lastIndexOf("::"))return null;for(b=(l.match(s.zoneIndex)||[])[0],b&&(b=b.substring(1),l=l.replace(/%.+$/,"")),d=0,p=-1;(p=l.indexOf(":",p+1))>=0;)d++;if(l.substr(0,2)==="::"&&d--,l.substr(-2,2)==="::"&&d--,d>u)return null;for(y=u-d,m=":";y--;)m+="0:";return l=l.replace("::",m),l[0]===":"&&(l=l.slice(1)),l[l.length-1]===":"&&(l=l.slice(0,-1)),u=(function(){var v,E,S,k;for(S=l.split(":"),k=[],v=0,E=S.length;v<E;v++)f=S[v],k.push(parseInt(f,16));return k})(),{parts:u,zoneId:b}},e.IPv6.parser=function(l){var u,d,p,f,m,y,b;if(s.native.test(l))return t(l,8);if((f=l.match(s.transitional))&&(b=f[6]||"",u=t(f[1].slice(0,-1)+b,6),u.parts)){for(y=[parseInt(f[2]),parseInt(f[3]),parseInt(f[4]),parseInt(f[5])],d=0,p=y.length;d<p;d++)if(m=y[d],!(0<=m&&m<=255))return null;return u.parts.push(y[0]<<8|y[1]),u.parts.push(y[2]<<8|y[3]),{parts:u.parts,zoneId:u.zoneId}}return null},e.IPv4.isIPv4=e.IPv6.isIPv6=function(l){return this.parser(l)!==null},e.IPv4.isValid=function(l){var u;try{return new this(this.parser(l)),!0}catch(d){return u=d,!1}},e.IPv4.isValidFourPartDecimal=function(l){return!!(e.IPv4.isValid(l)&&l.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},e.IPv6.isValid=function(l){var u,d;if(typeof l=="string"&&l.indexOf(":")===-1)return!1;try{return u=this.parser(l),new this(u.parts,u.zoneId),!0}catch(p){return d=p,!1}},e.IPv4.parse=function(l){var u;if(u=this.parser(l),u===null)throw new Error("ipaddr: string is not formatted like ip address");return new this(u)},e.IPv6.parse=function(l){var u;if(u=this.parser(l),u.parts===null)throw new Error("ipaddr: string is not formatted like ip address");return new this(u.parts,u.zoneId)},e.IPv4.parseCIDR=function(l){var u,d,p;if((d=l.match(/^(.+)\/(\d+)$/))&&(u=parseInt(d[2]),u>=0&&u<=32))return p=[this.parse(d[1]),u],Object.defineProperty(p,"toString",{value:function(){return this.join("/")}}),p;throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},e.IPv4.subnetMaskFromPrefixLength=function(l){var u,d,p;if(l=parseInt(l),l<0||l>32)throw new Error("ipaddr: invalid IPv4 prefix length");for(p=[0,0,0,0],d=0,u=Math.floor(l/8);d<u;)p[d]=255,d++;return u<4&&(p[u]=Math.pow(2,l%8)-1<<8-l%8),new this(p)},e.IPv4.broadcastAddressFromCIDR=function(l){var u,d,p,f,m,y;try{for(u=this.parseCIDR(l),f=u[0].toByteArray(),y=this.subnetMaskFromPrefixLength(u[1]).toByteArray(),m=[],p=0;p<4;)m.push(parseInt(f[p],10)|parseInt(y[p],10)^255),p++;return new this(m)}catch(b){throw d=b,new Error("ipaddr: the address does not have IPv4 CIDR format")}},e.IPv4.networkAddressFromCIDR=function(l){var u,d,p,f,m,y;try{for(u=this.parseCIDR(l),f=u[0].toByteArray(),y=this.subnetMaskFromPrefixLength(u[1]).toByteArray(),m=[],p=0;p<4;)m.push(parseInt(f[p],10)&parseInt(y[p],10)),p++;return new this(m)}catch(b){throw d=b,new Error("ipaddr: the address does not have IPv4 CIDR format")}},e.IPv6.parseCIDR=function(l){var u,d,p;if((d=l.match(/^(.+)\/(\d+)$/))&&(u=parseInt(d[2]),u>=0&&u<=128))return p=[this.parse(d[1]),u],Object.defineProperty(p,"toString",{value:function(){return this.join("/")}}),p;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},e.isValid=function(l){return e.IPv6.isValid(l)||e.IPv4.isValid(l)},e.parse=function(l){if(e.IPv6.isValid(l))return e.IPv6.parse(l);if(e.IPv4.isValid(l))return e.IPv4.parse(l);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},e.parseCIDR=function(l){var u;try{return e.IPv6.parseCIDR(l)}catch(d){u=d;try{return e.IPv4.parseCIDR(l)}catch(p){throw u=p,new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},e.fromByteArray=function(l){var u;if(u=l.length,u===4)return new e.IPv4(l);if(u===16)return new e.IPv6(l);throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address")},e.process=function(l){var u;return u=this.parse(l),u.kind()==="ipv6"&&u.isIPv4MappedAddress()?u.toIPv4Address():u}}).call(zP)});var iE=h((WCe,sf)=>{"use strict";sf.exports=Dee;sf.exports.all=VP;sf.exports.compile=WP;var Ree=JP(),HP=GP(),Oee=/^[0-9]+$/,rf=HP.isValid,nf=HP.parse,BP={linklocal:["169.254.0.0/16","fe80::/10"],loopback:["127.0.0.1/8","::1/128"],uniquelocal:["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","fc00::/7"]};function VP(t,e){var r=Ree(t);if(!e)return r;typeof e!="function"&&(e=WP(e));for(var n=0;n<r.length-1;n++)e(r[n],n)||(r.length=n+1);return r}function WP(t){if(!t)throw new TypeError("argument is required");var e;if(typeof t=="string")e=[t];else if(Array.isArray(t))e=t.slice();else throw new TypeError("unsupported trust argument");for(var r=0;r<e.length;r++)t=e[r],Object.prototype.hasOwnProperty.call(BP,t)&&(t=BP[t],e.splice.apply(e,[r,1].concat(t)),r+=t.length-1);return jee(Cee(e))}function Cee(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=Pee(t[r]);return e}function jee(t){var e=t.length;return e===0?Mee:e===1?Lee(t[0]):Nee(t)}function Pee(t){var e=t.lastIndexOf("/"),r=e!==-1?t.substring(0,e):t;if(!rf(r))throw new TypeError("invalid IP address: "+r);var n=nf(r);e===-1&&n.kind()==="ipv6"&&n.isIPv4MappedAddress()&&(n=n.toIPv4Address());var i=n.kind()==="ipv6"?128:32,s=e!==-1?t.substring(e+1,t.length):null;if(s===null?s=i:Oee.test(s)?s=parseInt(s,10):n.kind()==="ipv4"&&rf(s)?s=Kee(s):s=null,s<=0||s>i)throw new TypeError("invalid range on address: "+t);return[n,s]}function Kee(t){var e=nf(t),r=e.kind();return r==="ipv4"?e.prefixLengthFromSubnetMask():null}function Dee(t,e){if(!t)throw new TypeError("req argument is required");if(!e)throw new TypeError("trust argument is required");var r=VP(t,e),n=r[r.length-1];return n}function Mee(){return!1}function Nee(t){return function(r){if(!rf(r))return!1;for(var n=nf(r),i,s=n.kind(),o=0;o<t.length;o++){var a=t[o],c=a[0],l=c.kind(),u=a[1],d=n;if(s!==l){if(l==="ipv4"&&!n.isIPv4MappedAddress())continue;i||(i=l==="ipv4"?n.toIPv4Address():n.toIPv4MappedAddress()),d=i}if(d.match(c,u))return!0}return!1}}function Lee(t){var e=t[0],r=e.kind(),n=r==="ipv4",i=t[1];return function(o){if(!rf(o))return!1;var a=nf(o),c=a.kind();if(c!==r){if(n&&!a.isIPv4MappedAddress())return!1;a=n?a.toIPv4Address():a.toIPv4MappedAddress()}return a.match(e,i)}}});var ls=h(kr=>{"use strict";var{METHODS:qee}=require("node:http"),YP=rE(),Fee=nE(),$ee=Oa(),Uee=iE(),Jee=Q0(),zee=require("node:querystring"),{Buffer:QP}=require("node:buffer");kr.methods=qee.map(t=>t.toLowerCase());kr.etag=XP({weak:!1});kr.wetag=XP({weak:!0});kr.normalizeType=function(t){return~t.indexOf("/")?Gee(t):{value:$ee.lookup(t)||"application/octet-stream",params:{}}};kr.normalizeTypes=function(t){return t.map(kr.normalizeType)};function Gee(t){for(var e=t.length,r=t.indexOf(";"),n=r===-1?e:r,i={value:t.slice(0,n).trim(),quality:1,params:{}};n<e;){var s=t.indexOf("=",n);if(s===-1)break;var r=t.indexOf(";",n),o=r===-1?e:r;if(s>o){n=t.lastIndexOf(";",s-1)+1;continue}var a=t.slice(n,s).trim(),c=t.slice(s+1,o).trim();a==="q"?i.quality=parseFloat(c):i.params[a]=c,n=o+1}return i}kr.compileETag=function(t){var e;if(typeof t=="function")return t;switch(t){case!0:case"weak":e=kr.wetag;break;case!1:break;case"strong":e=kr.etag;break;default:throw new TypeError("unknown value for etag function: "+t)}return e};kr.compileQueryParser=function(e){var r;if(typeof e=="function")return e;switch(e){case!0:case"simple":r=zee.parse;break;case!1:break;case"extended":r=Bee;break;default:throw new TypeError("unknown value for query parser function: "+e)}return r};kr.compileTrust=function(t){return typeof t=="function"?t:t===!0?function(){return!0}:typeof t=="number"?function(e,r){return r<t}:(typeof t=="string"&&(t=t.split(",").map(function(e){return e.trim()})),Uee.compile(t||[]))};kr.setCharset=function(e,r){if(!e||!r)return e;var n=YP.parse(e);return n.parameters.charset=r,YP.format(n)};function XP(t){return function(r,n){var i=QP.isBuffer(r)?r:QP.from(r,n);return Fee(i,t)}}function Bee(t){return Jee.parse(t,{allowPrototypes:!0})}});var tK=h((QCe,eK)=>{eK.exports=ZP;function ZP(t,e){if(t&&e)return ZP(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(n){r[n]=t[n]}),r;function r(){for(var n=new Array(arguments.length),i=0;i<n.length;i++)n[i]=arguments[i];var s=t.apply(this,n),o=n[n.length-1];return typeof s=="function"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var iK=h((XCe,sE)=>{var rK=tK();sE.exports=rK(of);sE.exports.strict=rK(nK);of.proto=of(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return of(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return nK(this)},configurable:!0})});function of(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function nK(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var aE=h((ZCe,oE)=>{oE.exports=sK;oE.exports.default=sK;function sK(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"}});var dK=h(En=>{"use strict";Object.defineProperty(En,"__esModule",{value:!0});En.PathError=En.TokenData=void 0;En.parse=dE;En.compile=Yee;En.match=Xee;En.pathToRegexp=lK;En.stringify=ete;var lE="/",uE=t=>t,Hee=/^[$_\p{ID_Start}]$/u,aK=/^[$\u200c\u200d\p{ID_Continue}]$/u,Vee=/^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;function Wee(t){return t.replace(/[{}()\[\]+?!:*\\]/g,"\\$&")}function wi(t){return t.replace(/[.+*?^${}()[\]|/\\]/g,"\\$&")}var af=class{constructor(e,r){this.tokens=e,this.originalPath=r}};En.TokenData=af;var Gn=class extends TypeError{constructor(e,r){let n=e;r&&(n+=`: ${r}`),n+="; visit https://git.new/pathToRegexpError for info",super(n),this.originalPath=r}};En.PathError=Gn;function dE(t,e={}){let{encodePath:r=uE}=e,n=[...t],i=0;function s(o){let a=[],c="";function l(){c&&(a.push({type:"text",value:r(c)}),c="")}for(;i<n.length;){let u=n[i++];if(u===o)return l(),a;if(u==="\\"){if(i===n.length)throw new Gn(`Unexpected end after \\ at index ${i}`,t);c+=n[i++];continue}if(u===":"||u==="*"){let d=u===":"?"param":"wildcard",p="";if(Hee.test(n[i]))do p+=n[i++];while(aK.test(n[i]));else if(n[i]==='"'){let f=i;for(;i<n.length;){if(n[++i]==='"'){i++,f=0;break}n[i]==="\\"&&i++,p+=n[i]}if(f)throw new Gn(`Unterminated quote at index ${f}`,t)}if(!p)throw new Gn(`Missing parameter name at index ${i}`,t);l(),a.push({type:d,name:p});continue}if(u==="{"){l(),a.push({type:"group",tokens:s("}")});continue}if(u==="}"||u==="("||u===")"||u==="["||u==="]"||u==="+"||u==="?"||u==="!")throw new Gn(`Unexpected ${u} at index ${i-1}`,t);c+=u}if(o)throw new Gn(`Unexpected end at index ${i}, expected ${o}`,t);return l(),a}return new af(s(""),t)}function Yee(t,e={}){let{encode:r=encodeURIComponent,delimiter:n=lE}=e,i=typeof t=="object"?t:dE(t,e),s=cK(i.tokens,n,r);return function(a={}){let c=[],l=s(a,c);if(c.length)throw new TypeError(`Missing parameters: ${c.join(", ")}`);return l}}function cK(t,e,r){let n=t.map(i=>Qee(i,e,r));return(i,s)=>{let o="";for(let a of n)o+=a(i,s);return o}}function Qee(t,e,r){if(t.type==="text")return()=>t.value;if(t.type==="group"){let i=cK(t.tokens,e,r);return(s,o)=>{let a=o.length,c=i(s,o);return o.length===a?c:(o.length=a,"")}}let n=r||uE;return t.type==="wildcard"&&r!==!1?(i,s)=>{let o=i[t.name];if(o==null)return s.push(t.name),"";if(!Array.isArray(o)||o.length===0)throw new TypeError(`Expected "${t.name}" to be a non-empty array`);let a="";for(let c=0;c<o.length;c++){if(typeof o[c]!="string")throw new TypeError(`Expected "${t.name}/${c}" to be a string`);c>0&&(a+=e),a+=n(o[c])}return a}:(i,s)=>{let o=i[t.name];if(o==null)return s.push(t.name),"";if(typeof o!="string")throw new TypeError(`Expected "${t.name}" to be a string`);return n(o)}}function Xee(t,e={}){let{decode:r=decodeURIComponent,delimiter:n=lE}=e,{regexp:i,keys:s}=lK(t,e),o=s.map(a=>r===!1?uE:a.type==="param"?r:c=>c.split(n).map(r));return function(c){let l=i.exec(c);if(!l)return!1;let u=l[0],d=Object.create(null);for(let p=1;p<l.length;p++){if(l[p]===void 0)continue;let f=s[p-1],m=o[p-1];d[f.name]=m(l[p])}return{path:u,params:d}}}function lK(t,e={}){let{delimiter:r=lE,end:n=!0,sensitive:i=!1,trailing:s=!0}=e,o=[],a="",c=0;function l(d){if(Array.isArray(d)){for(let f of d)l(f);return}let p=typeof d=="object"?d:dE(d,e);cE(p.tokens,0,[],f=>{if(c>=256)throw new Gn("Too many path combinations",p.originalPath);c>0&&(a+="|"),a+=Zee(f,r,o,p.originalPath),c++})}l(t);let u=`^(?:${a})`;return s&&(u+="(?:"+wi(r)+"$)?"),u+=n?"$":"(?="+wi(r)+"|$)",{regexp:new RegExp(u,i?"":"i"),keys:o}}function cE(t,e,r,n){for(;e<t.length;){let i=t[e++];if(i.type==="group"){let s=r.length;cE(i.tokens,0,r,o=>cE(t,e,o,n)),r.length=s;continue}r.push(i)}n(r)}function Zee(t,e,r,n){let i="",s="",o="",a=0,c=0,l=0;function u(p,f){for(;p<t.length;){let m=t[p++];if(m.type===f)return!0;if(m.type==="text"&&m.value.includes(e))break}return!1}function d(p){let f="";for(;p<t.length;){let m=t[p++];if(m.type!=="text")break;f+=m.value}return f}for(;l<t.length;){let p=t[l++];if(p.type==="text"){i+=wi(p.value),s+=p.value,a===2&&(o+=p.value),p.value.includes(e)&&(c=0);continue}if(p.type==="param"||p.type==="wildcard"){if(a&&!s)throw new Gn(`Missing text before "${p.name}" ${p.type}`,n);p.type==="param"?(i+=c&2?`(${us(e,s)}+)`:u(l,"wildcard")?`(${us(e,d(l))}+)`:c&1?`(${us(e,s)}+|${wi(s)})`:`(${us(e,"")}+)`,c|=a=1):(i+=c&2?`(${us(s,"")}+)`:o?`(${us(o,"")}+|${us(e,"")}+)`:"([^]+)",o="",c|=a=2),r.push(p),s="";continue}throw new TypeError(`Unknown token type: ${p.type}`)}return i}function us(t,e){return e.length>t.length?us(e,t):(t===e&&(e=""),e.length>1?`(?:(?!${wi(t)}|${wi(e)})[^])`:t.length>1?`(?:(?!${wi(t)})[^${wi(e)}])`:`[^${wi(t+e)}]`)}function uK(t,e){let r="";for(;e<t.length;){let n=t[e++];if(n.type==="text"){r+=Wee(n.value);continue}if(n.type==="group"){r+="{"+uK(n.tokens,0)+"}";continue}if(n.type==="param"){r+=":"+oK(n.name,t[e]);continue}if(n.type==="wildcard"){r+="*"+oK(n.name,t[e]);continue}throw new TypeError(`Unknown token type: ${n.type}`)}return r}function ete(t){return uK(t.tokens,0)}function oK(t,e){return!Vee.test(t)||e?.type==="text"&&aK.test(e.value[0])?JSON.stringify(t):t}});var pE=h((tje,yK)=>{"use strict";var fK=aE(),tte=dK(),rte=Tr()("router:layer"),mK=kl()("router"),nte=/\/+$/,ite=/\((?:\?<(.*?)>)?(?!\?)/g;yK.exports=$a;function $a(t,e,r){if(!(this instanceof $a))return new $a(t,e,r);rte("new %o",t);let n=e||{};this.handle=r,this.keys=[],this.name=r.name||"<anonymous>",this.params=void 0,this.path=void 0,this.slash=t==="/"&&n.end===!1;function i(s){if(s instanceof RegExp){let o=[],a=0,c;for(;c=ite.exec(s.source);)o.push({name:c[1]||a++,offset:c.index});return function(u){let d=s.exec(u);if(!d)return!1;let p={};for(let f=1;f<d.length;f++){let y=o[f-1].name,b=pK(d[f]);b!==void 0&&(p[y]=b)}return{params:p,path:d[0]}}}return tte.match(n.strict?s:hK(s),{sensitive:n.sensitive,end:n.end,trailing:!n.strict,decode:pK})}this.matchers=Array.isArray(t)?t.map(i):[i(t)]}$a.prototype.handleError=function(e,r,n,i){let s=this.handle;if(s.length!==4)return i(e);try{let o=s(e,r,n,i);fK(o)&&(o instanceof Promise||mK("handlers that are Promise-like are deprecated, use a native Promise instead"),o.then(null,function(a){i(a||new Error("Rejected promise"))}))}catch(o){i(o)}};$a.prototype.handleRequest=function(e,r,n){let i=this.handle;if(i.length>3)return n();try{let s=i(e,r,n);fK(s)&&(s instanceof Promise||mK("handlers that are Promise-like are deprecated, use a native Promise instead"),s.then(null,function(o){n(o||new Error("Rejected promise"))}))}catch(s){n(s)}};$a.prototype.match=function(e){let r;if(e!=null){if(this.slash)return this.params={},this.path="",!0;let n=0;for(;!r&&n<this.matchers.length;)r=this.matchers[n](e),n++}return r?(this.params=r.params,this.path=r.path,this.keys=Object.keys(r.params),!0):(this.params=void 0,this.path=void 0,!1)};function pK(t){if(typeof t!="string"||t.length===0)return t;try{return decodeURIComponent(t)}catch(e){throw e instanceof URIError&&(e.message="Failed to decode param '"+t+"'",e.status=400),e}}function hK(t){return t instanceof RegExp||t==="/"?t:Array.isArray(t)?t.map(function(e){return hK(e)}):String(t).replace(nte,"")}});var xK=h((rje,SK)=>{"use strict";var gK=Tr()("router:route"),bK=pE(),{METHODS:ste}=require("node:http"),vK=Array.prototype.slice,EK=Array.prototype.flat,ote=ste.map(t=>t.toLowerCase());SK.exports=Ua;function Ua(t){gK("new %o",t),this.path=t,this.stack=[],this.methods=Object.create(null)}Ua.prototype._handlesMethod=function(e){if(this.methods._all)return!0;let r=typeof e=="string"?e.toLowerCase():e;return r==="head"&&!this.methods.head&&(r="get"),!!this.methods[r]};Ua.prototype._methods=function(){let e=Object.keys(this.methods);this.methods.get&&!this.methods.head&&e.push("head");for(let r=0;r<e.length;r++)e[r]=e[r].toUpperCase();return e};Ua.prototype.dispatch=function(e,r,n){let i=0,s=this.stack,o=0;if(s.length===0)return n();let a=typeof e.method=="string"?e.method.toLowerCase():e.method;a==="head"&&!this.methods.head&&(a="get"),e.route=this,c();function c(l){if(l&&l==="route")return n();if(l&&l==="router"||i>=s.length)return n(l);if(++o>100)return setImmediate(c,l);let u,d;for(;d!==!0&&i<s.length;)u=s[i++],d=!u.method||u.method===a;if(d!==!0)return n(l);l?u.handleError(l,e,r,c):u.handleRequest(e,r,c),o=0}};Ua.prototype.all=function(e){let r=EK.call(vK.call(arguments),1/0);if(r.length===0)throw new TypeError("argument handler is required");for(let n=0;n<r.length;n++){let i=r[n];if(typeof i!="function")throw new TypeError("argument handler must be a function");let s=bK("/",{},i);s.method=void 0,this.methods._all=!0,this.stack.push(s)}return this};ote.forEach(function(t){Ua.prototype[t]=function(e){let r=EK.call(vK.call(arguments),1/0);if(r.length===0)throw new TypeError("argument handler is required");for(let n=0;n<r.length;n++){let i=r[n];if(typeof i!="function")throw new TypeError("argument handler must be a function");gK("%s %s",t,this.path);let s=bK("/",{},i);s.method=t,this.methods[t]=!0,this.stack.push(s)}return this}})});var mE=h((nje,fE)=>{"use strict";var ate=aE(),wK=pE(),{METHODS:cte}=require("node:http"),lte=Hl(),_K=xK(),cf=Tr()("router"),ute=kl()("router"),IK=Array.prototype.slice,dte=Array.prototype.flat,pte=cte.map(t=>t.toLowerCase());fE.exports=_i;fE.exports.Route=_K;function _i(t){if(!(this instanceof _i))return new _i(t);let e=t||{};function r(n,i,s){r.handle(n,i,s)}return Object.setPrototypeOf(r,this),r.caseSensitive=e.caseSensitive,r.mergeParams=e.mergeParams,r.params={},r.strict=e.strict,r.stack=[],r}_i.prototype=function(){};_i.prototype.param=function(e,r){if(!e)throw new TypeError("argument name is required");if(typeof e!="string")throw new TypeError("argument name must be a string");if(!r)throw new TypeError("argument fn is required");if(typeof r!="function")throw new TypeError("argument fn must be a function");let n=this.params[e];return n||(n=this.params[e]=[]),n.push(r),this};_i.prototype.handle=function(e,r,n){if(!n)throw new TypeError("argument callback is required");cf("dispatching %s %s",e.method,e.url);let i=0,s,o=hte(e.url)||"",a="",c=this,l=!1,u=0,d={},p=this.stack,f=e.params,m=e.baseUrl||"",y=vte(n,e,"baseUrl","next","params");e.next=b,e.method==="OPTIONS"&&(s=[],y=xte(y,fte(r,s))),e.baseUrl=m,e.originalUrl=e.originalUrl||e.url,b();function b(E){let S=E==="route"?null:E;if(l&&(e.url=e.url.slice(1),l=!1),a.length!==0&&(e.baseUrl=m,e.url=o+a+e.url.slice(o.length),a=""),S==="router"){setImmediate(y,null);return}if(i>=p.length){setImmediate(y,S);return}if(++u>100)return setImmediate(b,E);let k=mte(e);if(k==null)return y(S);let _,O,N;for(;O!==!0&&i<p.length;){if(_=p[i++],O=yte(_,k),N=_.route,typeof O!="boolean"&&(S=S||O),O!==!0||!N)continue;if(S){O=!1;continue}let q=e.method,U=N._handlesMethod(q);!U&&q==="OPTIONS"&&s&&s.push.apply(s,N._methods()),!U&&q!=="HEAD"&&(O=!1)}if(O!==!0)return y(S);N&&(e.route=N),e.params=c.mergeParams?gte(_.params,f):_.params;let ee=_.path;bte(c.params,_,d,e,r,function(q){q?b(S||q):N?_.handleRequest(e,r,b):v(_,S,ee,k),u=0})}function v(E,S,k,_){if(k.length!==0){if(k!==_.substring(0,k.length)){b(S);return}let O=_[k.length];if(O&&O!=="/"){b(S);return}cf("trim prefix (%s) from url %s",k,e.url),a=k,e.url=o+e.url.slice(o.length+a.length),!o&&e.url[0]!=="/"&&(e.url="/"+e.url,l=!0),e.baseUrl=m+(a[a.length-1]==="/"?a.substring(0,a.length-1):a)}cf("%s %s : %s",E.name,k,e.originalUrl),S?E.handleError(S,e,r,b):E.handleRequest(e,r,b)}};_i.prototype.use=function(e){let r=0,n="/";if(typeof e!="function"){let s=e;for(;Array.isArray(s)&&s.length!==0;)s=s[0];typeof s!="function"&&(r=1,n=e)}let i=dte.call(IK.call(arguments,r),1/0);if(i.length===0)throw new TypeError("argument handler is required");for(let s=0;s<i.length;s++){let o=i[s];if(typeof o!="function")throw new TypeError("argument handler must be a function");cf("use %o %s",n,o.name||"<anonymous>");let a=new wK(n,{sensitive:this.caseSensitive,strict:!1,end:!1},o);a.route=void 0,this.stack.push(a)}return this};_i.prototype.route=function(e){let r=new _K(e),n=new wK(e,{sensitive:this.caseSensitive,strict:this.strict,end:!0},i);function i(s,o,a){r.dispatch(s,o,a)}return n.route=r,this.stack.push(n),r};pte.concat("all").forEach(function(t){_i.prototype[t]=function(e){let r=this.route(e);return r[t].apply(r,IK.call(arguments,1)),this}});function fte(t,e){return function(n,i){if(i||e.length===0)return n(i);Ste(t,e,n)}}function mte(t){try{return lte(t).pathname}catch{return}}function hte(t){if(typeof t!="string"||t.length===0||t[0]==="/")return;let e=t.indexOf("?"),r=e!==-1?e:t.length,n=t.substring(0,r).indexOf("://");return n!==-1?t.substring(0,t.indexOf("/",3+n)):void 0}function yte(t,e){try{return t.match(e)}catch(r){return r}}function gte(t,e){if(typeof e!="object"||!e)return t;let r=Object.assign({},e);if(!(0 in t)||!(0 in e))return Object.assign(r,t);let n=0,i=0;for(;n in t;)n++;for(;i in e;)i++;for(n--;n>=0;n--)t[n+i]=t[n],n<i&&delete t[n];return Object.assign(r,t)}function bte(t,e,r,n,i,s){let o=e.keys;if(!o||o.length===0)return s();let a=0,c=0,l,u,d,p;function f(y){if(y)return s(y);if(a>=o.length)return s();if(c=0,l=o[a++],u=n.params[l],d=t[l],p=r[l],u===void 0||!d)return f();if(p&&(p.match===u||p.error&&p.error!=="route"))return n.params[l]=p.value,f(p.error);r[l]=p={error:null,match:u,value:u},m()}function m(y){let b=d[c++];if(p.value=n.params[l],y){p.error=y,f(y);return}if(!b)return f();try{let v=b(n,i,m,u,l);ate(v)&&(v instanceof Promise||ute("parameters that are Promise-like are deprecated, use a native Promise instead"),v.then(null,function(E){m(E||new Error("Rejected promise"))}))}catch(v){m(v)}}f()}function vte(t,e){let r=new Array(arguments.length-2),n=new Array(arguments.length-2);for(let i=0;i<r.length;i++)r[i]=arguments[i+2],n[i]=e[r[i]];return function(){for(let i=0;i<r.length;i++)e[r[i]]=n[i];return t.apply(this,arguments)}}function Ete(t,e){let r=Object.create(null);for(let i=0;i<e.length;i++)r[e[i]]=!0;let n=Object.keys(r).sort().join(", ");t.setHeader("Allow",n),t.setHeader("Content-Length",Buffer.byteLength(n)),t.setHeader("Content-Type","text/plain"),t.setHeader("X-Content-Type-Options","nosniff"),t.end(n)}function Ste(t,e,r){try{Ete(t,e)}catch(n){r(n)}}function xte(t,e){return function(){let n=new Array(arguments.length+1);n[0]=t;for(let i=0,s=arguments.length;i<s;i++)n[i+1]=arguments[i];e.apply(this,n)}}});var AK=h((TK,kK)=>{"use strict";var wte=OP(),gE=Tr()("express:application"),_te=DP(),Ite=require("node:http"),hE=ls().methods,Tte=ls().compileETag,kte=ls().compileQueryParser,Ate=ls().compileTrust,Rte=require("node:path").resolve,Ote=iK(),Cte=mE(),lf=Array.prototype.slice,jte=Array.prototype.flat,Dt=TK=kK.exports={},yE="@@symbol:trust_proxy_default";Dt.init=function(){var e=null;this.cache=Object.create(null),this.engines=Object.create(null),this.settings=Object.create(null),this.defaultConfiguration(),Object.defineProperty(this,"router",{configurable:!0,enumerable:!0,get:function(){return e===null&&(e=new Cte({caseSensitive:this.enabled("case sensitive routing"),strict:this.enabled("strict routing")})),e}})};Dt.defaultConfiguration=function(){var e=process.env.NODE_ENV||"development";this.enable("x-powered-by"),this.set("etag","weak"),this.set("env",e),this.set("query parser","simple"),this.set("subdomain offset",2),this.set("trust proxy",!1),Object.defineProperty(this.settings,yE,{configurable:!0,value:!0}),gE("booting in %s mode",e),this.on("mount",function(n){this.settings[yE]===!0&&typeof n.settings["trust proxy fn"]=="function"&&(delete this.settings["trust proxy"],delete this.settings["trust proxy fn"]),Object.setPrototypeOf(this.request,n.request),Object.setPrototypeOf(this.response,n.response),Object.setPrototypeOf(this.engines,n.engines),Object.setPrototypeOf(this.settings,n.settings)}),this.locals=Object.create(null),this.mountpath="/",this.locals.settings=this.settings,this.set("view",_te),this.set("views",Rte("views")),this.set("jsonp callback name","callback"),e==="production"&&this.enable("view cache")};Dt.handle=function(e,r,n){var i=n||wte(e,r,{env:this.get("env"),onerror:Pte.bind(this)});this.enabled("x-powered-by")&&r.setHeader("X-Powered-By","Express"),e.res=r,r.req=e,Object.setPrototypeOf(e,this.request),Object.setPrototypeOf(r,this.response),r.locals||(r.locals=Object.create(null)),this.router.handle(e,r,i)};Dt.use=function(e){var r=0,n="/";if(typeof e!="function"){for(var i=e;Array.isArray(i)&&i.length!==0;)i=i[0];typeof i!="function"&&(r=1,n=e)}var s=jte.call(lf.call(arguments,r),1/0);if(s.length===0)throw new TypeError("app.use() requires a middleware function");var o=this.router;return s.forEach(function(a){if(!a||!a.handle||!a.set)return o.use(n,a);gE(".use app under %s",n),a.mountpath=n,a.parent=this,o.use(n,function(l,u,d){var p=l.app;a.handle(l,u,function(f){Object.setPrototypeOf(l,p.request),Object.setPrototypeOf(u,p.response),d(f)})}),a.emit("mount",this)},this),this};Dt.route=function(e){return this.router.route(e)};Dt.engine=function(e,r){if(typeof r!="function")throw new Error("callback function required");var n=e[0]!=="."?"."+e:e;return this.engines[n]=r,this};Dt.param=function(e,r){if(Array.isArray(e)){for(var n=0;n<e.length;n++)this.param(e[n],r);return this}return this.router.param(e,r),this};Dt.set=function(e,r){if(arguments.length===1)return this.settings[e];switch(gE('set "%s" to %o',e,r),this.settings[e]=r,e){case"etag":this.set("etag fn",Tte(r));break;case"query parser":this.set("query parser fn",kte(r));break;case"trust proxy":this.set("trust proxy fn",Ate(r)),Object.defineProperty(this.settings,yE,{configurable:!0,value:!1});break}return this};Dt.path=function(){return this.parent?this.parent.path()+this.mountpath:""};Dt.enabled=function(e){return!!this.set(e)};Dt.disabled=function(e){return!this.set(e)};Dt.enable=function(e){return this.set(e,!0)};Dt.disable=function(e){return this.set(e,!1)};hE.forEach(function(t){Dt[t]=function(e){if(t==="get"&&arguments.length===1)return this.set(e);var r=this.route(e);return r[t].apply(r,lf.call(arguments,1)),this}});Dt.all=function(e){for(var r=this.route(e),n=lf.call(arguments,1),i=0;i<hE.length;i++)r[hE[i]].apply(r,n);return this};Dt.render=function(e,r,n){var i=this.cache,s=n,o=this.engines,a=r,c;typeof r=="function"&&(s=r,a={});var l={...this.locals,...a._locals,...a};if(l.cache==null&&(l.cache=this.enabled("view cache")),l.cache&&(c=i[e]),!c){var u=this.get("view");if(c=new u(e,{defaultEngine:this.get("view engine"),root:this.get("views"),engines:o}),!c.path){var d=Array.isArray(c.root)&&c.root.length>1?'directories "'+c.root.slice(0,-1).join('", "')+'" or "'+c.root[c.root.length-1]+'"':'directory "'+c.root+'"',p=new Error('Failed to lookup view "'+e+'" in views '+d);return p.view=c,s(p)}l.cache&&(i[e]=c)}Kte(c,l,s)};Dt.listen=function(){var e=Ite.createServer(this),r=lf.call(arguments);if(typeof r[r.length-1]=="function"){var n=r[r.length-1]=Ote(r[r.length-1]);e.once("error",n)}return e.listen.apply(e,r)};function Pte(t){this.get("env")!=="test"&&console.error(t.stack||t.toString())}function Kte(t,e,r){try{t.render(e,r)}catch(n){r(n)}}});var df=h(uf=>{"use strict";Object.defineProperty(uf,"__esModule",{value:!0});uf.format=Lte;uf.parse=qte;var Dte=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,OK=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,Mte=/[\\"]/g,Nte=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,CK=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function Lte(t){let{type:e,parameters:r}=t;if(!e||!Nte.test(e))throw new TypeError(`Invalid type: ${e}`);let n=e;if(r)for(let i of Object.keys(r)){if(!OK.test(i))throw new TypeError(`Invalid parameter name: ${i}`);n+=`; ${i}=${zte(r[i])}`}return n}function qte(t,e){let r=e?.comma===!0?Ute:65536,n=t.length,i=vE(t,e?.start??0,n),s=i;i=bE(t,i,n,r);let o=EE(t,s,i),a=t.slice(s,o).toLowerCase();return e?.parameters===!1?{type:a,index:i,parameters:new CK}:Jte(t,a,i,n,r)}var jK=32,PK=9,KK=59,Fte=61,RK=34,$te=92,Ute=44;function Jte(t,e,r,n,i){let s=new CK;e:for(;r<n&&t.charCodeAt(r)!==i;){r=vE(t,r+1,n);let o=r;for(;r<n;){let a=t.charCodeAt(r);if(a===i)break e;if(a===KK)continue e;if(a===Fte){let c=EE(t,o,r),l=t.slice(o,c).toLowerCase();if(r=vE(t,r+1,n),r<n&&t.charCodeAt(r)===RK){r++;let d="";for(;r<n;){let p=t.charCodeAt(r++);if(p===RK){r=bE(t,r,n,i),s[l]===void 0&&(s[l]=d);break}if(p===$te&&r<n){d+=t[r++];continue}d+=String.fromCharCode(p)}continue e}let u=r;if(r=bE(t,r,n,i),s[l]===void 0){let d=EE(t,u,r);s[l]=t.slice(u,d)}continue e}r++}}return{type:e,index:r,parameters:s}}function bE(t,e,r,n){for(;e<r;){let i=t.charCodeAt(e);if(i===KK||i===n)break;e++}return e}function vE(t,e,r){for(;e<r;){let n=t.charCodeAt(e);if(n!==jK&&n!==PK)break;e++}return e}function EE(t,e,r){for(;r>e;){let n=t.charCodeAt(r-1);if(n!==jK&&n!==PK)break;r--}return r}function zte(t){if(OK.test(t))return t;if(Dte.test(t))return`"${t.replace(Mte,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var Yl=h((sje,DK)=>{"use strict";var Gte=df();DK.exports=Bte;function Bte(t){for(var e=[],r=0;r<t.length;){var n=Hte(t,r),i=Gte.parse(t,{comma:!0,start:n});i.type=t.slice(n,n+i.type.length),e.push(i),r=i.index+1}return e}function Hte(t,e){for(var r=e;t.charCodeAt(r)===32||t.charCodeAt(r)===9;)r++;return r}});var qK=h((oje,SE)=>{"use strict";var Vte=Yl();SE.exports=LK;SE.exports.preferredCharsets=LK;function Wte(t){for(var e=Vte(t),r=0,n=0;r<e.length;r++){var i=Yte(e[r],r);i&&(e[n++]=i)}return e.length=n,e}function Yte(t,e){return t.type?{charset:t.type,q:t.parameters.q?parseFloat(t.parameters.q):1,i:e}:null}function Qte(t,e,r){for(var n={o:-1,q:0,s:0},i=0;i<e.length;i++){var s=Xte(t,e[i],r);s&&(n.s-s.s||n.q-s.q||n.o-s.o)<0&&(n=s)}return n}function Xte(t,e,r){var n=0;if(e.charset.toLowerCase()===t.toLowerCase())n|=1;else if(e.charset!=="*")return null;return{i:r,o:e.i,q:e.q,s:n}}function LK(t,e){var r=Wte(t===void 0?"*":t||"");if(!e)return r.filter(NK).sort(MK).map(Zte);var n=e.map(function(s,o){return Qte(s,r,o)});return n.filter(NK).sort(MK).map(function(s){return e[n.indexOf(s)]})}function MK(t,e){return e.q-t.q||e.s-t.s||t.o-e.o||t.i-e.i||0}function Zte(t){return t.charset}function NK(t){return t.q>0}});var JK=h((aje,xE)=>{"use strict";var ere=Yl();xE.exports=UK;xE.exports.preferredEncodings=UK;function tre(t){for(var e=ere(t),r=!1,n=1,i=0,s=0;i<e.length;i++){var o=rre(e[i],i);o&&(e[s++]=o,r=r||$K("identity",o),n=Math.min(n,o.q||1))}return r||(e[s++]={encoding:"identity",q:n,i}),e.length=s,e}function rre(t,e){return t.type?{encoding:t.type,q:t.parameters.q?parseFloat(t.parameters.q):1,i:e}:null}function nre(t,e,r){for(var n={encoding:t,o:-1,q:0,s:0},i=0;i<e.length;i++){var s=$K(t,e[i],r);s&&(n.s-s.s||n.q-s.q||n.o-s.o)<0&&(n=s)}return n}function $K(t,e,r){var n=0;if(e.encoding.toLowerCase()===t.toLowerCase())n|=1;else if(e.encoding!=="*")return null;return{encoding:t,i:r,o:e.i,q:e.q,s:n}}function UK(t,e,r){var n=tre(t||""),i=r?function(a,c){if(a.q!==c.q)return c.q-a.q;var l=r.indexOf(a.encoding),u=r.indexOf(c.encoding);return l===-1&&u===-1?c.s-a.s||a.o-c.o||a.i-c.i:l!==-1&&u!==-1?l-u:l===-1?1:-1}:ire;if(!e)return n.filter(FK).sort(i).map(sre);var s=e.map(function(a,c){return nre(a,n,c)});return s.filter(FK).sort(i).map(function(a){return e[s.indexOf(a)]})}function ire(t,e){return e.q-t.q||e.s-t.s||t.o-e.o||t.i-e.i}function sre(t){return t.encoding}function FK(t){return t.q>0}});var VK=h((cje,wE)=>{"use strict";var ore=df(),are=Yl();wE.exports=HK;wE.exports.preferredLanguages=HK;function cre(t){for(var e=are(t),r=0,n=0;r<e.length;r++){var i=BK(e[r],r);i&&(e[n++]=i)}return e.length=n,e}function BK(t,e){if(!t.type)return null;var r=t.type.indexOf("-"),n=r===-1?t.type:t.type.slice(0,r),i=r===-1?void 0:t.type.slice(r+1);return{prefix:n,suffix:i,q:t.parameters.q?parseFloat(t.parameters.q):1,i:e,full:t.type}}function lre(t,e,r){for(var n={o:-1,q:0,s:0},i=0;i<e.length;i++){var s=ure(t,e[i],r);s&&(n.s-s.s||n.q-s.q||n.o-s.o)<0&&(n=s)}return n}function ure(t,e,r){var n=BK(ore.parse(t),0);if(!n)return null;var i=0;if(e.full.toLowerCase()===n.full.toLowerCase())i|=4;else if(e.prefix.toLowerCase()===n.full.toLowerCase())i|=2;else if(e.full.toLowerCase()===n.prefix.toLowerCase())i|=1;else if(e.full!=="*")return null;return{i:r,o:e.i,q:e.q,s:i}}function HK(t,e){var r=cre(t===void 0?"*":t||"");if(!e)return r.filter(GK).sort(zK).map(dre);var n=e.map(function(s,o){return lre(s,r,o)});return n.filter(GK).sort(zK).map(function(s){return e[n.indexOf(s)]})}function zK(t,e){return e.q-t.q||e.s-t.s||t.o-e.o||t.i-e.i||0}function dre(t){return t.full}function GK(t){return t.q>0}});var ZK=h((lje,_E)=>{"use strict";var pre=df(),fre=Yl();_E.exports=XK;_E.exports.preferredMediaTypes=XK;function mre(t){for(var e=fre(t),r=0,n=0;r<e.length;r++){var i=QK(e[r],r);i&&(e[n++]=i)}return e.length=n,e}function QK(t,e){var r=t.type.indexOf("/");if(r===-1)return null;var n=t.parameters.q?parseFloat(t.parameters.q):1;return delete t.parameters.q,{type:t.type.slice(0,r),subtype:t.type.slice(r+1),params:t.parameters,q:n,i:e}}function hre(t,e,r){for(var n={o:-1,q:0,s:0},i=0;i<e.length;i++){var s=yre(t,e[i],r);s&&(n.s-s.s||n.q-s.q||n.o-s.o)<0&&(n=s)}return n}function yre(t,e,r){var n=QK(pre.parse(t),0),i=0;if(!n)return null;if(e.type.toLowerCase()==n.type.toLowerCase())i|=4;else if(e.type!="*")return null;if(e.subtype.toLowerCase()==n.subtype.toLowerCase())i|=2;else if(e.subtype!="*")return null;var s=Object.keys(e.params);if(s.length>0)if(s.every(function(o){return e.params[o]=="*"||(e.params[o]||"").toLowerCase()==(n.params[o]||"").toLowerCase()}))i|=1;else return null;return{i:r,o:e.i,q:e.q,s:i}}function XK(t,e){var r=mre(t===void 0?"*/*":t||"");if(!e)return r.filter(YK).sort(WK).map(gre);var n=e.map(function(s,o){return hre(s,r,o)});return n.filter(YK).sort(WK).map(function(s){return e[n.indexOf(s)]})}function WK(t,e){return e.q-t.q||e.s-t.s||t.o-e.o||t.i-e.i||0}function gre(t){return t.type+"/"+t.subtype}function YK(t){return t.q>0}});var eD=h((uje,IE)=>{"use strict";var bre=qK(),vre=JK(),Ere=VK(),Sre=ZK();IE.exports=Ke;IE.exports.Negotiator=Ke;function Ke(t){if(!(this instanceof Ke))return new Ke(t);this.request=t}Ke.prototype.charset=function(e){var r=this.charsets(e);return r&&r[0]};Ke.prototype.charsets=function(e){return bre(this.request.headers["accept-charset"],e)};Ke.prototype.encoding=function(e,r){var n=this.encodings(e,r);return n&&n[0]};Ke.prototype.encodings=function(e,r){var n=r||{};return vre(this.request.headers["accept-encoding"],e,n.preferred)};Ke.prototype.language=function(e){var r=this.languages(e);return r&&r[0]};Ke.prototype.languages=function(e){return Ere(this.request.headers["accept-language"],e)};Ke.prototype.mediaType=function(e){var r=this.mediaTypes(e);return r&&r[0]};Ke.prototype.mediaTypes=function(e){return Sre(this.request.headers.accept,e)};Ke.prototype.preferredCharset=Ke.prototype.charset;Ke.prototype.preferredCharsets=Ke.prototype.charsets;Ke.prototype.preferredEncoding=Ke.prototype.encoding;Ke.prototype.preferredEncodings=Ke.prototype.encodings;Ke.prototype.preferredLanguage=Ke.prototype.language;Ke.prototype.preferredLanguages=Ke.prototype.languages;Ke.prototype.preferredMediaType=Ke.prototype.mediaType;Ke.prototype.preferredMediaTypes=Ke.prototype.mediaTypes});var rD=h((dje,tD)=>{"use strict";var xre=eD(),wre=Oa();tD.exports=Ar;function Ar(t){if(!(this instanceof Ar))return new Ar(t);this.headers=t.headers,this.negotiator=new xre(t)}Ar.prototype.type=Ar.prototype.types=function(t){var e=t;if(e&&!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;r<e.length;r++)e[r]=arguments[r]}if(!e||e.length===0)return this.negotiator.mediaTypes();if(!this.headers.accept)return e[0];var n=e.map(_re),i=this.negotiator.mediaTypes(n.filter(Ire)),s=i[0];return s?e[n.indexOf(s)]:!1};Ar.prototype.encoding=Ar.prototype.encodings=function(t){var e=t;if(e&&!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;r<e.length;r++)e[r]=arguments[r]}return!e||e.length===0?this.negotiator.encodings():this.negotiator.encodings(e)[0]||!1};Ar.prototype.charset=Ar.prototype.charsets=function(t){var e=t;if(e&&!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;r<e.length;r++)e[r]=arguments[r]}return!e||e.length===0?this.negotiator.charsets():this.negotiator.charsets(e)[0]||!1};Ar.prototype.lang=Ar.prototype.langs=Ar.prototype.language=Ar.prototype.languages=function(t){var e=t;if(e&&!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;r<e.length;r++)e[r]=arguments[r]}return!e||e.length===0?this.negotiator.languages():this.negotiator.languages(e)[0]||!1};function _re(t){return t.indexOf("/")===-1?wre.lookup(t):t}function Ire(t){return typeof t=="string"}});var TE=h((pje,iD)=>{"use strict";var Tre=/(?:^|,)\s*?no-cache\s*?(?:,|$)/;iD.exports=kre;function kre(t,e){var r=t["if-modified-since"],n=t["if-none-match"];if(!r&&!n)return!1;var i=t["cache-control"];if(i&&Tre.test(i))return!1;if(n){if(n==="*")return!0;var s=e.etag;if(!s)return!1;for(var o=Are(n),a=0;a<o.length;a++){var c=o[a];if(c===s||c==="W/"+s||"W/"+c===s)return!0}return!1}if(r){var l=e["last-modified"],u=!l||!(nD(l)<=nD(r));if(u)return!1}return!0}function nD(t){var e=t&&Date.parse(t);return typeof e=="number"?e:NaN}function Are(t){for(var e=0,r=[],n=0,i=0,s=t.length;i<s;i++)switch(t.charCodeAt(i)){case 32:n===e&&(n=e=i+1);break;case 44:r.push(t.substring(n,e)),n=e=i+1;break;default:e=i+1;break}return r.push(t.substring(n,e)),r}});var kE=h((fje,oD)=>{"use strict";oD.exports=Rre;function Rre(t,e,r){if(typeof e!="string")throw new TypeError("argument str must be a string");var n=e.indexOf("=");if(n===-1)return-2;var i=e.slice(n+1).split(","),s=[];s.type=e.slice(0,n);for(var o=0;o<i.length;o++){var a=i[o].indexOf("-");if(a===-1)return-2;var c=i[o].slice(0,a).trim(),l=i[o].slice(a+1).trim(),u=sD(c),d=sD(l);if(c.length===0?(u=t-d,d=t-1):l.length===0&&(d=t-1),d>t-1&&(d=t-1),isNaN(u)||isNaN(d))return-2;u>d||u<0||s.push({start:u,end:d})}return s.length<1?-1:r&&r.combine?Ore(s):s}function sD(t){return/^\d+$/.test(t)?Number(t):NaN}function Ore(t){for(var e=t.map(Cre).sort(Kre),r=0,n=1;n<e.length;n++){var i=e[n],s=e[r];i.start>s.end+1?e[++r]=i:i.end>s.end&&(s.end=i.end,s.index=Math.min(s.index,i.index))}e.length=r+1;var o=e.sort(Pre).map(jre);return o.type=t.type,o}function Cre(t,e){return{start:t.start,end:t.end,index:e}}function jre(t){return{start:t.start,end:t.end}}function Pre(t,e){return t.index-e.index}function Kre(t,e){return t.start-e.start}});var uD=h((mje,lD)=>{"use strict";var pf=rD(),Dre=require("node:net").isIP,Mre=Pp(),Nre=require("node:http"),Lre=TE(),qre=kE(),aD=Hl(),cD=iE(),lt=Object.create(Nre.IncomingMessage.prototype);lD.exports=lt;lt.get=lt.header=function(e){if(!e)throw new TypeError("name argument is required to req.get");if(typeof e!="string")throw new TypeError("name must be a string to req.get");var r=e.toLowerCase();switch(r){case"referer":case"referrer":return this.headers.referrer||this.headers.referer;default:return this.headers[r]}};lt.accepts=function(){var t=pf(this);return t.types.apply(t,arguments)};lt.acceptsEncodings=function(){var t=pf(this);return t.encodings.apply(t,arguments)};lt.acceptsCharsets=function(){var t=pf(this);return t.charsets.apply(t,arguments)};lt.acceptsLanguages=function(...t){return pf(this).languages(...t)};lt.range=function(e,r){var n=this.get("Range");if(n)return qre(e,n,r)};Wr(lt,"query",function(){var e=this.app.get("query parser fn");if(!e)return Object.create(null);var r=aD(this).query;return e(r)});lt.is=function(e){var r=e;if(!Array.isArray(e)){r=new Array(arguments.length);for(var n=0;n<r.length;n++)r[n]=arguments[n]}return Mre(this,r)};Wr(lt,"protocol",function(){var e=this.socket.encrypted?"https":"http",r=this.app.get("trust proxy fn");if(!r(this.socket.remoteAddress,0))return e;var n=this.get("X-Forwarded-Proto")||e,i=n.indexOf(",");return i!==-1?n.substring(0,i).trim():n.trim()});Wr(lt,"secure",function(){return this.protocol==="https"});Wr(lt,"ip",function(){var e=this.app.get("trust proxy fn");return cD(this,e)});Wr(lt,"ips",function(){var e=this.app.get("trust proxy fn"),r=cD.all(this,e);return r.reverse().pop(),r});Wr(lt,"subdomains",function(){var e=this.hostname;if(!e)return[];var r=this.app.get("subdomain offset"),n=Dre(e)?[e]:e.split(".").reverse();return n.slice(r)});Wr(lt,"path",function(){return aD(this).pathname});Wr(lt,"host",function(){var e=this.app.get("trust proxy fn"),r=this.get("X-Forwarded-Host");return!r||!e(this.socket.remoteAddress,0)?r=this.get("Host"):r.indexOf(",")!==-1&&(r=r.substring(0,r.indexOf(",")).trimRight()),r||void 0});Wr(lt,"hostname",function(){var e=this.host;if(e){var r=e[0]==="["?e.indexOf("]")+1:0,n=e.indexOf(":",r);return n!==-1?e.substring(0,n):e}});Wr(lt,"fresh",function(){var t=this.method,e=this.res,r=e.statusCode;return t!=="GET"&&t!=="HEAD"?!1:r>=200&&r<300||r===304?Lre(this.headers,{etag:e.get("ETag"),"last-modified":e.get("Last-Modified")}):!1});Wr(lt,"stale",function(){return!this.fresh});Wr(lt,"xhr",function(){var e=this.get("X-Requested-With")||"";return e.toLowerCase()==="xmlhttprequest"});function Wr(t,e,r){Object.defineProperty(t,e,{configurable:!0,enumerable:!0,get:r})}});var gD=h((hje,AE)=>{"use strict";AE.exports=Vre;AE.exports.parse=Xre;var Fre=new TextDecoder("utf-8"),$re=/[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g,mD=/[^\x20-\x7e\xa0-\xff]/g,Ure=/\\([\u0000-\u007f])/g,Jre=/([\\"])/g,dD=/;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g,zre=/^[\x20-\x7e\x80-\xff]+$/,Gre=/^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/,Bre=/^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/,Hre=/^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/;function Vre(t,e){var r=e||{},n=r.type||"attachment",i=Wre(t,r.fallback);return Yre(new yD(n,i))}function Wre(t,e){if(t!==void 0){var r={};if(typeof t!="string")throw new TypeError("filename must be a string");if(e===void 0&&(e=!0),typeof e!="string"&&typeof e!="boolean")throw new TypeError("fallback must be a string or boolean");if(typeof e=="string"&&mD.test(e))throw new TypeError("fallback must be ISO-8859-1 string");var n=pD(t),i=zre.test(n),s=typeof e!="string"?e&&hD(n):pD(e),o=typeof s=="string"&&s!==n;return(o||!i||rne(n))&&(r["filename*"]=n),(i||o)&&(r.filename=o?s:n),r}}function Yre(t){var e=t.parameters,r=t.type;if(!r||typeof r!="string"||!Gre.test(r))throw new TypeError("invalid type");var n=String(r).toLowerCase();if(e&&typeof e=="object")for(var i,s=Object.keys(e).sort(),o=0;o<s.length;o++){i=s[o];var a=i.slice(-1)==="*"?tne(e[i]):ene(e[i]);n+="; "+i+"="+a}return n}function Qre(t){let e=Bre.exec(t);if(!e)throw new TypeError("invalid extended field value");let r=e[1].toLowerCase(),n=e[2];switch(r){case"iso-8859-1":{let i=fD(n);return hD(i)}case"utf-8":case"utf8":try{return decodeURIComponent(n)}catch{let i=fD(n),s=new Uint8Array(i.length);for(let o=0;o<i.length;o++)s[o]=i.charCodeAt(o);return Fre.decode(s)}}throw new TypeError("unsupported charset in extended field")}function hD(t){return String(t).replace(mD,"?")}function Xre(t){if(!t||typeof t!="string")throw new TypeError("argument string is required");var e=Hre.exec(t);if(!e)throw new TypeError("invalid type format");var r=e[0].length,n=e[1].toLowerCase(),i,s=[],o={},a;for(r=dD.lastIndex=e[0].slice(-1)===";"?r-1:r;e=dD.exec(t);){if(e.index!==r)throw new TypeError("invalid parameter format");if(r+=e[0].length,i=e[1].toLowerCase(),a=e[2],s.indexOf(i)!==-1)throw new TypeError("invalid duplicate parameter");if(s.push(i),i.indexOf("*")+1===i.length){i=i.slice(0,-1),a=Qre(a),o[i]=a;continue}typeof o[i]!="string"&&(a[0]==='"'&&(a=a.slice(1,-1).replace(Ure,"$1")),o[i]=a)}if(r!==-1&&r!==t.length)throw new TypeError("invalid parameter format");return new yD(n,o)}function Zre(t){return"%"+String(t).charCodeAt(0).toString(16).toUpperCase()}function ene(t){var e=String(t);return'"'+e.replace(Jre,"\\$1")+'"'}function tne(t){var e=String(t),r=encodeURIComponent(e).replace($re,Zre);return"UTF-8''"+r}function yD(t,e){this.type=t,this.parameters=e}function pD(t){let e=t.replaceAll("\\","/"),r=e.length;for(;r>0&&e[r-1]==="/";)r--;if(r===0)return"";let n=r-1;for(;n>=0&&e[n]!=="/";)n--;return e.slice(n+1,r)}function ff(t){let e=t.charCodeAt(0);return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function rne(t){let e=t.length-3,r=-1;for(;(r=t.indexOf("%",r+1))!==-1&&r<=e;)if(ff(t[r+1])&&ff(t[r+2]))return!0;return!1}function fD(t){let e=t.indexOf("%");if(e===-1)return t;let r=t.slice(0,e);for(let n=e;n<t.length;n++)t[n]==="%"&&n+2<t.length&&ff(t[n+1])&&ff(t[n+2])?(r+=String.fromCharCode(Number.parseInt(t[n+1]+t[n+2],16)),n+=2):r+=t[n];return r}});var vD=h(mf=>{var bD=require("crypto");mf.sign=function(t,e){if(typeof t!="string")throw new TypeError("Cookie value must be provided as a string.");if(e==null)throw new TypeError("Secret key must be provided.");return t+"."+bD.createHmac("sha256",e).update(t).digest("base64").replace(/\=+$/,"")};mf.unsign=function(t,e){if(typeof t!="string")throw new TypeError("Signed cookie string must be provided.");if(e==null)throw new TypeError("Secret key must be provided.");var r=t.slice(0,t.lastIndexOf(".")),n=mf.sign(r,e),i=Buffer.from(n),s=Buffer.from(t);return i.length===s.length&&bD.timingSafeEqual(i,s)?r:!1}});var xD=h(RE=>{"use strict";RE.parse=lne;RE.serialize=une;var nne=Object.prototype.toString,ine=Object.prototype.hasOwnProperty,sne=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,one=/^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/,ane=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,cne=/^[\u0020-\u003A\u003D-\u007E]*$/;function lne(t,e){if(typeof t!="string")throw new TypeError("argument str must be a string");var r={},n=t.length;if(n<2)return r;var i=e&&e.decode||dne,s=0,o=0,a=0;do{if(o=t.indexOf("=",s),o===-1)break;if(a=t.indexOf(";",s),a===-1)a=n;else if(o>a){s=t.lastIndexOf(";",o-1)+1;continue}var c=ED(t,s,o),l=SD(t,o,c),u=t.slice(c,l);if(!ine.call(r,u)){var d=ED(t,o+1,a),p=SD(t,a,d);t.charCodeAt(d)===34&&t.charCodeAt(p-1)===34&&(d++,p--);var f=t.slice(d,p);r[u]=fne(f,i)}s=a+1}while(s<n);return r}function ED(t,e,r){do{var n=t.charCodeAt(e);if(n!==32&&n!==9)return e}while(++e<r);return r}function SD(t,e,r){for(;e>r;){var n=t.charCodeAt(--e);if(n!==32&&n!==9)return e+1}return r}function une(t,e,r){var n=r&&r.encode||encodeURIComponent;if(typeof n!="function")throw new TypeError("option encode is invalid");if(!sne.test(t))throw new TypeError("argument name is invalid");var i=n(e);if(!one.test(i))throw new TypeError("argument val is invalid");var s=t+"="+i;if(!r)return s;if(r.maxAge!=null){var o=Math.floor(r.maxAge);if(!isFinite(o))throw new TypeError("option maxAge is invalid");s+="; Max-Age="+o}if(r.domain){if(!ane.test(r.domain))throw new TypeError("option domain is invalid");s+="; Domain="+r.domain}if(r.path){if(!cne.test(r.path))throw new TypeError("option path is invalid");s+="; Path="+r.path}if(r.expires){var a=r.expires;if(!pne(a)||isNaN(a.valueOf()))throw new TypeError("option expires is invalid");s+="; Expires="+a.toUTCString()}if(r.httpOnly&&(s+="; HttpOnly"),r.secure&&(s+="; Secure"),r.partitioned&&(s+="; Partitioned"),r.priority){var c=typeof r.priority=="string"?r.priority.toLowerCase():r.priority;switch(c){case"low":s+="; Priority=Low";break;case"medium":s+="; Priority=Medium";break;case"high":s+="; Priority=High";break;default:throw new TypeError("option priority is invalid")}}if(r.sameSite){var l=typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite;switch(l){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return s}function dne(t){return t.indexOf("%")!==-1?decodeURIComponent(t):t}function pne(t){return nne.call(t)==="[object Date]"}function fne(t,e){try{return e(t)}catch{return t}}});var jE=h((bje,PD)=>{"use strict";var OE=Ta(),Mt=Tr()("send"),mne=Gl(),TD=Bl(),hne=nE(),yne=TE(),yf=require("fs"),gne=Oa(),bne=pv(),vne=Cl(),Ene=kE(),Ql=require("path"),Sne=Al(),kD=require("stream"),xne=require("util"),AD=Ql.extname,RD=Ql.join,CE=Ql.normalize,OD=Ql.resolve,hf=Ql.sep,wne=/^ *bytes=/,_ne=3600*24*365*1e3,wD=/(?:^|[\\/])\.\.(?:[\\/]|$)/;PD.exports=Ine;function Ine(t,e,r){return new ut(t,e,r)}function ut(t,e,r){kD.call(this);var n=r||{};if(this.options=n,this.path=e,this.req=t,this._acceptRanges=n.acceptRanges!==void 0?!!n.acceptRanges:!0,this._cacheControl=n.cacheControl!==void 0?!!n.cacheControl:!0,this._etag=n.etag!==void 0?!!n.etag:!0,this._dotfiles=n.dotfiles!==void 0?n.dotfiles:"ignore",this._dotfiles!=="ignore"&&this._dotfiles!=="allow"&&this._dotfiles!=="deny")throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"');this._extensions=n.extensions!==void 0?ID(n.extensions,"extensions option"):[],this._immutable=n.immutable!==void 0?!!n.immutable:!1,this._index=n.index!==void 0?ID(n.index,"index option"):["index.html"],this._lastModified=n.lastModified!==void 0?!!n.lastModified:!0,this._maxage=n.maxAge||n.maxage,this._maxage=typeof this._maxage=="string"?bne(this._maxage):Number(this._maxage),this._maxage=isNaN(this._maxage)?0:Math.min(Math.max(0,this._maxage),_ne),this._root=n.root?OD(n.root):null}xne.inherits(ut,kD);ut.prototype.error=function(e,r){if(jD(this,"error"))return this.emit("error",Rne(e,r));var n=this.res,i=Sne.message[e]||String(e),s=CD("Error",TD(i));Tne(n),r&&r.headers&&jne(n,r.headers),n.statusCode=e,n.setHeader("Content-Type","text/html; charset=UTF-8"),n.setHeader("Content-Length",Buffer.byteLength(s)),n.setHeader("Content-Security-Policy","default-src 'none'"),n.setHeader("X-Content-Type-Options","nosniff"),n.end(s)};ut.prototype.hasTrailingSlash=function(){return this.path[this.path.length-1]==="/"};ut.prototype.isConditionalGET=function(){return this.req.headers["if-match"]||this.req.headers["if-unmodified-since"]||this.req.headers["if-none-match"]||this.req.headers["if-modified-since"]};ut.prototype.isPreconditionFailure=function(){var e=this.req,r=this.res,n=e.headers["if-match"];if(n){var i=r.getHeader("ETag");return!i||n!=="*"&&Cne(n).every(function(a){return a!==i&&a!=="W/"+i&&"W/"+a!==i})}var s=gf(e.headers["if-unmodified-since"]);if(!isNaN(s)){var o=gf(r.getHeader("Last-Modified"));return isNaN(o)||o>s}return!1};ut.prototype.removeContentHeaderFields=function(){var e=this.res;e.removeHeader("Content-Encoding"),e.removeHeader("Content-Language"),e.removeHeader("Content-Length"),e.removeHeader("Content-Range"),e.removeHeader("Content-Type")};ut.prototype.notModified=function(){var e=this.res;Mt("not modified"),this.removeContentHeaderFields(),e.statusCode=304,e.end()};ut.prototype.headersAlreadySent=function(){var e=new Error("Can't set headers after they are sent.");Mt("headers already sent"),this.error(500,e)};ut.prototype.isCachable=function(){var e=this.res.statusCode;return e>=200&&e<300||e===304};ut.prototype.onStatError=function(e){switch(e.code){case"ENAMETOOLONG":case"ENOENT":case"ENOTDIR":this.error(404,e);break;default:this.error(500,e);break}};ut.prototype.isFresh=function(){return yne(this.req.headers,{etag:this.res.getHeader("ETag"),"last-modified":this.res.getHeader("Last-Modified")})};ut.prototype.isRangeFresh=function(){var e=this.req.headers["if-range"];if(!e)return!0;if(e.indexOf('"')!==-1){var r=this.res.getHeader("ETag");return!!(r&&e.indexOf(r)!==-1)}var n=this.res.getHeader("Last-Modified");return gf(n)<=gf(e)};ut.prototype.redirect=function(e){var r=this.res;if(jD(this,"directory")){this.emit("directory",r,e);return}if(this.hasTrailingSlash()){this.error(403);return}var n=mne(kne(this.path+"/")),i=CD("Redirecting","Redirecting to "+TD(n));r.statusCode=301,r.setHeader("Content-Type","text/html; charset=UTF-8"),r.setHeader("Content-Length",Buffer.byteLength(i)),r.setHeader("Content-Security-Policy","default-src 'none'"),r.setHeader("X-Content-Type-Options","nosniff"),r.setHeader("Location",n),r.end(i)};ut.prototype.pipe=function(e){var r=this._root;this.res=e;var n=One(this.path);if(n===-1)return this.error(400),e;if(~n.indexOf("\0"))return this.error(400),e;var i;if(r!==null){if(n&&(n=CE("."+hf+n)),wD.test(n))return Mt('malicious path "%s"',n),this.error(403),e;i=n.split(hf),n=CE(RD(r,n))}else{if(wD.test(n))return Mt('malicious path "%s"',n),this.error(403),e;i=CE(n).split(hf),n=OD(n)}if(Ane(i))switch(Mt('%s dotfile "%s"',this._dotfiles,n),this._dotfiles){case"allow":break;case"deny":return this.error(403),e;default:return this.error(404),e}return this._index.length&&this.hasTrailingSlash()?(this.sendIndex(n),e):(this.sendFile(n),e)};ut.prototype.send=function(e,r){var n=r.size,i=this.options,s={},o=this.res,a=this.req,c=a.headers.range,l=i.start||0;if(o.headersSent){this.headersAlreadySent();return}if(Mt('pipe "%s"',e),this.setHeader(e,r),this.type(e),this.isConditionalGET()){if(this.isPreconditionFailure()){this.error(412);return}if(this.isCachable()&&this.isFresh()){this.notModified();return}}if(n=Math.max(0,n-l),i.end!==void 0){var u=i.end-l+1;n>u&&(n=u)}if(this._acceptRanges&&wne.test(c)){if(c=Ene(n,c,{combine:!0}),this.isRangeFresh()||(Mt("range stale"),c=-2),c===-1)return Mt("range unsatisfiable"),o.setHeader("Content-Range",_D("bytes",n)),this.error(416,{headers:{"Content-Range":o.getHeader("Content-Range")}});c!==-2&&c.length===1&&(Mt("range %j",c),o.statusCode=206,o.setHeader("Content-Range",_D("bytes",n,c[0])),l+=c[0].start,n=c[0].end-c[0].start+1)}for(var d in i)s[d]=i[d];if(s.start=l,s.end=Math.max(l,l+n-1),o.setHeader("Content-Length",n),a.method==="HEAD"){o.end();return}this.stream(e,s)};ut.prototype.sendFile=function(e){var r=0,n=this;Mt('stat "%s"',e),yf.stat(e,function(o,a){var c=e[e.length-1]===hf;if(o&&o.code==="ENOENT"&&!AD(e)&&!c)return i(o);if(o)return n.onStatError(o);if(a.isDirectory())return n.redirect(e);if(c)return n.error(404);n.emit("file",e,a),n.send(e,a)});function i(s){if(n._extensions.length<=r)return s?n.onStatError(s):n.error(404);var o=e+"."+n._extensions[r++];Mt('stat "%s"',o),yf.stat(o,function(a,c){if(a)return i(a);if(c.isDirectory())return i();n.emit("file",o,c),n.send(o,c)})}};ut.prototype.sendIndex=function(e){var r=-1,n=this;function i(s){if(++r>=n._index.length)return s?n.onStatError(s):n.error(404);var o=RD(e,n._index[r]);Mt('stat "%s"',o),yf.stat(o,function(a,c){if(a)return i(a);if(c.isDirectory())return i();n.emit("file",o,c),n.send(o,c)})}i()};ut.prototype.stream=function(e,r){var n=this,i=this.res,s=yf.createReadStream(e,r);this.emit("stream",s),s.pipe(i);function o(){s.destroy()}vne(i,o),s.on("error",function(c){o(),n.onStatError(c)}),s.on("end",function(){n.emit("end")})};ut.prototype.type=function(e){var r=this.res;if(!r.getHeader("Content-Type")){var n=AD(e),i=gne.contentType(n)||"application/octet-stream";Mt("content-type %s",i),r.setHeader("Content-Type",i)}};ut.prototype.setHeader=function(e,r){var n=this.res;if(this.emit("headers",n,e,r),this._acceptRanges&&!n.getHeader("Accept-Ranges")&&(Mt("accept ranges"),n.setHeader("Accept-Ranges","bytes")),this._cacheControl&&!n.getHeader("Cache-Control")){var i="public, max-age="+Math.floor(this._maxage/1e3);this._immutable&&(i+=", immutable"),Mt("cache-control %s",i),n.setHeader("Cache-Control",i)}if(this._lastModified&&!n.getHeader("Last-Modified")){var s=r.mtime.toUTCString();Mt("modified %s",s),n.setHeader("Last-Modified",s)}if(this._etag&&!n.getHeader("ETag")){var o=hne(r);Mt("etag %s",o),n.setHeader("ETag",o)}};function Tne(t){for(let e of t.getHeaderNames())t.removeHeader(e)}function kne(t){for(var e=0;e<t.length&&t[e]==="/";e++);return e>1?"/"+t.substr(e):t}function Ane(t){for(var e=0;e<t.length;e++){var r=t[e];if(r.length>1&&r[0]===".")return!0}return!1}function _D(t,e,r){return t+" "+(r?r.start+"-"+r.end:"*")+"/"+e}function CD(t,e){return`<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>`+t+`</title>
|
||
</head>
|
||
<body>
|
||
<pre>`+e+`</pre>
|
||
</body>
|
||
</html>
|
||
`}function Rne(t,e){return e?e instanceof Error?OE(t,e,{expose:!1}):OE(t,e):OE(t)}function One(t){try{return decodeURIComponent(t)}catch{return-1}}function jD(t,e){var r=typeof t.listenerCount!="function"?t.listeners(e).length:t.listenerCount(e);return r>0}function ID(t,e){for(var r=[].concat(t||[]),n=0;n<r.length;n++)if(typeof r[n]!="string")throw new TypeError(e+" must be array of strings or false");return r}function gf(t){var e=t&&Date.parse(t);return typeof e=="number"?e:NaN}function Cne(t){for(var e=0,r=[],n=0,i=0,s=t.length;i<s;i++)switch(t.charCodeAt(i)){case 32:n===e&&(n=e=i+1);break;case 44:n!==e&&r.push(t.substring(n,e)),n=e=i+1;break;default:e=i+1;break}return n!==e&&r.push(t.substring(n,e)),r}function jne(t,e){for(var r=Object.keys(e),n=0;n<r.length;n++){var i=r[n];t.setHeader(i,e[i])}}});var MD=h((vje,PE)=>{"use strict";PE.exports=Kne;PE.exports.append=DD;var Pne=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;function DD(t,e){if(typeof t!="string")throw new TypeError("header argument is required");if(!e)throw new TypeError("field argument is required");for(var r=Array.isArray(e)?e:KD(String(e)),n=0;n<r.length;n++)if(!Pne.test(r[n]))throw new TypeError("field argument contains an invalid header name");if(t==="*")return t;var i=t,s=KD(t.toLowerCase());if(r.indexOf("*")!==-1||s.indexOf("*")!==-1)return"*";for(var o=0;o<r.length;o++){var a=r[o].toLowerCase();s.indexOf(a)===-1&&(s.push(a),i=i?i+", "+r[o]:r[o])}return i}function KD(t){for(var e=0,r=[],n=0,i=0,s=t.length;i<s;i++)switch(t.charCodeAt(i)){case 32:n===e&&(n=e=i+1);break;case 44:r.push(t.substring(n,e)),n=e=i+1;break;default:e=i+1;break}return r.push(t.substring(n,e)),r}function Kne(t,e){if(!t||!t.getHeader||!t.setHeader)throw new TypeError("res argument is required");var r=t.getHeader("Vary")||"",n=Array.isArray(r)?r.join(", "):String(r);(r=DD(n,e))&&t.setHeader("Vary",r)}});var UD=h((Eje,$D)=>{"use strict";var ND=gD(),Dne=Ta(),KE=kl()("express"),Mne=Gl(),Nne=Bl(),Lne=require("node:http"),qne=Cl(),LD=Oa(),qD=require("node:path"),Fne=require("node:path").isAbsolute,DE=Al(),$ne=vD().sign,Une=ls().normalizeType,Jne=ls().normalizeTypes,zne=ls().setCharset,Gne=xD(),Bne=jE(),Hne=qD.extname,Vne=qD.resolve,Wne=MD(),{Buffer:bf}=require("node:buffer"),nt=Object.create(Lne.ServerResponse.prototype);$D.exports=nt;nt.status=function(e){if(!Number.isInteger(e))throw new TypeError(`Invalid status code: ${JSON.stringify(e)}. Status code must be an integer.`);if(e<100||e>999)throw new RangeError(`Invalid status code: ${JSON.stringify(e)}. Status code must be greater than 99 and less than 1000.`);return this.statusCode=e,this};nt.links=function(t){var e=this.get("Link")||"";return e&&(e+=", "),this.set("Link",e+Object.keys(t).map(function(r){return Array.isArray(t[r])?t[r].map(function(n){return`<${n}>; rel="${r}"`}).join(", "):`<${t[r]}>; rel="${r}"`}).join(", "))};nt.send=function(e){var r=e,n,i=this.req,s,o=this.app;switch(typeof r){case"string":this.get("Content-Type")||this.type("html");break;case"boolean":case"number":case"object":if(r===null)r="";else if(ArrayBuffer.isView(r))this.get("Content-Type")||this.type("bin");else return this.json(r);break}typeof r=="string"&&(n="utf8",s=this.get("Content-Type"),typeof s=="string"&&this.set("Content-Type",zne(s,"utf-8")));var a=o.get("etag fn"),c=!this.get("ETag")&&typeof a=="function",l;r!==void 0&&(bf.isBuffer(r)?l=r.length:!c&&r.length<1e3?l=bf.byteLength(r,n):(r=bf.from(r,n),n=void 0,l=r.length),this.set("Content-Length",l));var u;return c&&l!==void 0&&(u=a(r,n))&&this.set("ETag",u),i.fresh&&this.status(304),(this.statusCode===204||this.statusCode===304)&&(this.removeHeader("Content-Type"),this.removeHeader("Content-Length"),this.removeHeader("Transfer-Encoding"),r=""),this.statusCode===205&&(this.set("Content-Length","0"),this.removeHeader("Transfer-Encoding"),r=""),i.method==="HEAD"?this.end():this.end(r,n),this};nt.json=function(e){var r=this.app,n=r.get("json escape"),i=r.get("json replacer"),s=r.get("json spaces"),o=FD(e,i,s,n);return this.get("Content-Type")||this.set("Content-Type","application/json"),this.send(o)};nt.jsonp=function(e){var r=this.app,n=r.get("json escape"),i=r.get("json replacer"),s=r.get("json spaces"),o=FD(e,i,s,n),a=this.req.query[r.get("jsonp callback name")];return this.get("Content-Type")||(this.set("X-Content-Type-Options","nosniff"),this.set("Content-Type","application/json")),Array.isArray(a)&&(a=a[0]),typeof a=="string"&&a.length!==0&&(this.set("X-Content-Type-Options","nosniff"),this.set("Content-Type","text/javascript"),a=a.replace(/[^\[\]\w$.]/g,""),o===void 0?o="":typeof o=="string"&&(o=o.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")),o="/**/ typeof "+a+" === 'function' && "+a+"("+o+");"),this.send(o)};nt.sendStatus=function(e){var r=DE.message[e]||String(e);return this.status(e),this.type("txt"),this.send(r)};nt.sendFile=function(e,r,n){var i=n,s=this.req,o=this,a=s.next,c=r||{};if(!e)throw new TypeError("path argument is required to res.sendFile");if(typeof e!="string")throw new TypeError("path must be a string to res.sendFile");if(typeof r=="function"&&(i=r,c={}),!c.root&&!Fne(e))throw new TypeError("path must be absolute or specify root to res.sendFile");var l=encodeURI(e);c.etag=this.app.enabled("etag");var u=Bne(s,l,c);Yne(o,u,c,function(d){if(i)return i(d);if(d&&d.code==="EISDIR")return a();d&&d.code!=="ECONNABORTED"&&d.syscall!=="write"&&a(d)})};nt.download=function(e,r,n,i){var s=i,o=r,a=n||null;typeof r=="function"?(s=r,o=null,a=null):typeof n=="function"&&(s=n,a=null),typeof r=="object"&&(typeof n=="function"||n===void 0)&&(o=null,a=r);var c={"Content-Disposition":ND(o||e)};if(a&&a.headers)for(var l=Object.keys(a.headers),u=0;u<l.length;u++){var d=l[u];d.toLowerCase()!=="content-disposition"&&(c[d]=a.headers[d])}a=Object.create(a),a.headers=c;var p=a.root?e:Vne(e);return this.sendFile(p,a,s)};nt.contentType=nt.type=function(e){var r=e.indexOf("/")===-1?LD.contentType(e)||"application/octet-stream":e;return this.set("Content-Type",r)};nt.format=function(t){var e=this.req,r=e.next,n=Object.keys(t).filter(function(s){return s!=="default"}),i=n.length>0?e.accepts(n):!1;return this.vary("Accept"),i?(this.set("Content-Type",Une(i).value),t[i](e,this,r)):t.default?t.default(e,this,r):r(Dne(406,{types:Jne(n).map(function(s){return s.value})})),this};nt.attachment=function(e){return e&&this.type(Hne(e)),this.set("Content-Disposition",ND(e)),this};nt.append=function(e,r){var n=this.get(e),i=r;return n&&(i=Array.isArray(n)?n.concat(r):Array.isArray(r)?[n].concat(r):[n,r]),this.set(e,i)};nt.set=nt.header=function(e,r){if(arguments.length===2){var n=Array.isArray(r)?r.map(String):String(r);if(e.toLowerCase()==="content-type"){if(Array.isArray(n))throw new TypeError("Content-Type cannot be set to an Array");n=LD.contentType(n)}this.setHeader(e,n)}else for(var i in e)this.set(i,e[i]);return this};nt.get=function(t){return this.getHeader(t)};nt.clearCookie=function(e,r){let n={path:"/",...r,expires:new Date(1)};return delete n.maxAge,this.cookie(e,"",n)};nt.cookie=function(t,e,r){var n={...r},i=this.req.secret,s=n.signed;if(s&&!i)throw new Error('cookieParser("secret") required for signed cookies');var o=typeof e=="object"?"j:"+JSON.stringify(e):String(e);if(s&&(o="s:"+$ne(o,i)),n.maxAge!=null){var a=n.maxAge-0;isNaN(a)||(n.expires=new Date(Date.now()+a),n.maxAge=Math.floor(a/1e3))}return n.path==null&&(n.path="/"),this.append("Set-Cookie",Gne.serialize(t,String(o),n)),this};nt.location=function(e){return this.set("Location",Mne(e))};nt.redirect=function(e){var r=e,n,i=302;arguments.length===2&&(i=arguments[0],r=arguments[1]),r||KE("Provide a url argument"),typeof r!="string"&&KE("Url must be a string"),typeof i!="number"&&KE("Status must be a number"),r=this.location(r).get("Location"),this.format({text:function(){n=DE.message[i]+". Redirecting to "+r},html:function(){var s=Nne(r);n="<p>"+DE.message[i]+". Redirecting to "+s+"</p>"},default:function(){n=""}}),this.status(i),this.set("Content-Length",bf.byteLength(n)),this.req.method==="HEAD"?this.end():this.end(n)};nt.vary=function(t){return Wne(this,t),this};nt.render=function(e,r,n){var i=this.req.app,s=n,o=r||{},a=this.req,c=this;typeof r=="function"&&(s=r,o={}),o._locals=c.locals,s=s||function(l,u){if(l)return a.next(l);c.send(u)},i.render(e,o,s)};function Yne(t,e,r,n){var i=!1,s;function o(){if(!i){i=!0;var f=new Error("Request aborted");f.code="ECONNABORTED",n(f)}}function a(){if(!i){i=!0;var f=new Error("EISDIR, read");f.code="EISDIR",n(f)}}function c(f){i||(i=!0,n(f))}function l(){i||(i=!0,n())}function u(){s=!1}function d(f){if(f&&f.code==="ECONNRESET")return o();if(f)return c(f);i||setImmediate(function(){if(s!==!1&&!i){o();return}i||(i=!0,n())})}function p(){s=!0}e.on("directory",a),e.on("end",l),e.on("error",c),e.on("file",u),e.on("stream",p),qne(t,d),r.headers&&e.on("headers",function(m){for(var y=r.headers,b=Object.keys(y),v=0;v<b.length;v++){var E=b[v];m.setHeader(E,y[E])}}),e.pipe(t)}function FD(t,e,r,n){var i=e||r?JSON.stringify(t,e,r):JSON.stringify(t);return n&&typeof i=="string"&&(i=i.replace(/[<>&]/g,function(s){switch(s.charCodeAt(0)){case 60:return"\\u003c";case 62:return"\\u003e";case 38:return"\\u0026";default:return s}})),i}});var zD=h((Sje,JD)=>{"use strict";var Qne=Gl(),Xne=Bl(),ME=Hl(),Zne=require("path").resolve,eie=jE(),tie=require("url");JD.exports=rie;function rie(t,e){if(!t)throw new TypeError("root path required");if(typeof t!="string")throw new TypeError("root path must be a string");var r=Object.create(e||null),n=r.fallthrough!==!1,i=r.redirect!==!1,s=r.setHeaders;if(s&&typeof s!="function")throw new TypeError("option setHeaders must be function");r.maxage=r.maxage||r.maxAge||0,r.root=Zne(t);var o=i?oie():sie();return function(c,l,u){if(c.method!=="GET"&&c.method!=="HEAD"){if(n)return u();l.statusCode=405,l.setHeader("Allow","GET, HEAD"),l.setHeader("Content-Length","0"),l.end();return}var d=!n,p=ME.original(c),f=ME(c).pathname;f==="/"&&p.pathname.substr(-1)!=="/"&&(f="");var m=eie(c,f,r);m.on("directory",o),s&&m.on("headers",s),n&&m.on("file",function(){d=!0}),m.on("error",function(b){if(d||!(b.statusCode<500)){u(b);return}u()}),m.pipe(l)}}function nie(t){for(var e=0;e<t.length&&t.charCodeAt(e)===47;e++);return e>1?"/"+t.substr(e):t}function iie(t,e){return`<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>`+t+`</title>
|
||
</head>
|
||
<body>
|
||
<pre>`+e+`</pre>
|
||
</body>
|
||
</html>
|
||
`}function sie(){return function(){this.error(404)}}function oie(){return function(e){if(this.hasTrailingSlash()){this.error(404);return}var r=ME.original(this.req);r.path=null,r.pathname=nie(r.pathname+"/");var n=Qne(tie.format(r)),i=iie("Redirecting","Redirecting to "+Xne(n));e.statusCode=301,e.setHeader("Content-Type","text/html; charset=UTF-8"),e.setHeader("Content-Length",Buffer.byteLength(i)),e.setHeader("Content-Security-Policy","default-src 'none'"),e.setHeader("X-Content-Type-Options","nosniff"),e.setHeader("Location",n),e.end(i)}}});var QD=h((Yr,YD)=>{"use strict";var vf=gP(),aie=require("node:events").EventEmitter,GD=vP(),BD=AK(),HD=mE(),VD=uD(),WD=UD();Yr=YD.exports=cie;function cie(){var t=function(e,r,n){t.handle(e,r,n)};return GD(t,aie.prototype,!1),GD(t,BD,!1),t.request=Object.create(VD,{app:{configurable:!0,enumerable:!0,writable:!0,value:t}}),t.response=Object.create(WD,{app:{configurable:!0,enumerable:!0,writable:!0,value:t}}),t.init(),t}Yr.application=BD;Yr.request=VD;Yr.response=WD;Yr.Route=HD.Route;Yr.Router=HD;Yr.json=vf.json;Yr.raw=vf.raw;Yr.static=zD();Yr.text=vf.text;Yr.urlencoded=vf.urlencoded});var Ef=h((xje,XD)=>{"use strict";XD.exports=QD()});var NE,ZD,eM=R(()=>{"use strict";NE=["search","context","summarize","import","export"],ZD=["workflow","search_params","examples","all"]});function uie(t){return(lie??process.stderr.write.bind(process.stderr))(t)}function Ja(t){uie(t)}var lie,LE=R(()=>{"use strict";lie=null});function pie(t){return t.replace(/^\uFEFF/,"")}function yo(t){return JSON.parse(pie(t))}function rM(t){return yo((0,Re.readFileSync)(t,"utf-8"))}function fie(t){(0,Re.existsSync)(t)||(0,Re.mkdirSync)(t,{recursive:!0})}function za(t,e){let r=t;try{if((0,Re.lstatSync)(t).isSymbolicLink())try{r=(0,Re.realpathSync)(t)}catch(l){let u=l instanceof Error?l:new Error(String(l));Ja(`claude-mem: realpathSync failed for ${t}, resolving symlink manually: ${u.message}
|
||
`);let d=(0,Re.readlinkSync)(t);r=(0,Bn.resolve)((0,Bn.dirname)(t),d)}}catch(l){let u=l.code;if(u!=="ENOENT"&&u!=="ENOTDIR")throw l}fie((0,Bn.dirname)(r));let n=(0,Bn.dirname)(r),i=(0,Bn.basename)(r),s=(0,Bn.join)(n,`.${i}.${process.pid}.${(0,tM.randomBytes)(6).toString("hex")}.tmp`),o=Buffer.from(JSON.stringify(e,null,2)+`
|
||
`,"utf-8"),a;try{a=(0,Re.statSync)(r).mode&511}catch{}let c;try{c=a!==void 0?(0,Re.openSync)(s,"w",a):(0,Re.openSync)(s,"w");let l=0;for(;l<o.length;){let u=(0,Re.writeSync)(c,o,l,o.length-l);if(u===0)throw new Error(`writeSync stalled at ${l}/${o.length} bytes`);l+=u}if((0,Re.fsyncSync)(c),(0,Re.closeSync)(c),c=void 0,(0,Re.renameSync)(s,r),!die){let u;try{u=(0,Re.openSync)(n,"r"),(0,Re.fsyncSync)(u)}catch(d){let p=d instanceof Error?d:new Error(String(d));Ja(`claude-mem: directory fsync failed for ${n}: ${p.message}
|
||
`)}finally{if(u!==void 0)try{(0,Re.closeSync)(u)}catch{}}}}catch(l){if(c!==void 0)try{(0,Re.closeSync)(c)}catch{}try{(0,Re.unlinkSync)(s)}catch{}throw l}}var Re,tM,Bn,die,Xl=R(()=>{"use strict";Re=require("fs"),tM=require("crypto"),Bn=require("path");LE();die=process.platform==="win32"});function Sf(t,e=process.platform,r=(0,nM.homedir)()){return typeof t!="string"||t.length===0?t:t==="~"?r:t.startsWith("~/")||e==="win32"&&t.startsWith("~\\")?(0,iM.join)(r,t.slice(2)):t}var nM,iM,qE=R(()=>{"use strict";nM=require("os"),iM=require("path")});function mie(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,Ne.dirname)((0,sM.fileURLToPath)(Sie.url))}function yie(){if(process.env.CLAUDE_MEM_DATA_DIR)return Sf(process.env.CLAUDE_MEM_DATA_DIR);let t=(0,Ne.join)((0,FE.homedir)(),".claude-mem"),e=(0,Ne.join)(t,"settings.json");try{if((0,Zl.existsSync)(e)){let r=yo((0,Zl.readFileSync)(e,"utf-8")),n=r.env??r;if(n.CLAUDE_MEM_DATA_DIR)return Sf(n.CLAUDE_MEM_DATA_DIR)}}catch{}return t}function go(){return(0,Ne.join)(hie,"..")}var Ne,FE,Zl,sM,Sie,hie,At,gie,bie,Cje,vie,$E,oM,jje,Eie,Pje,Le,Hn=R(()=>{"use strict";Ne=require("path"),FE=require("os"),Zl=require("fs"),sM=require("url");Xl();qE();qE();Sie={};hie=mie();At=yie(),gie=(0,Ne.join)((0,FE.homedir)(),".claude"),bie=process.env.CLAUDE_CONFIG_DIR||gie,Cje=(0,Ne.join)(bie,"plugins","marketplaces","thedotmack"),vie=(0,Ne.join)(At,"logs"),$E=(0,Ne.join)(At,"settings.json"),oM="claude-mem.db",jje=(0,Ne.join)(At,oM),Eie=(0,Ne.join)(At,"observer-sessions"),Pje=(0,Ne.basename)(Eie);Le={dataDir:()=>At,workerPid:()=>(0,Ne.join)(At,"worker.pid"),serverPid:()=>(0,Ne.join)(At,".server-beta.pid"),serverPort:()=>(0,Ne.join)(At,".server-beta.port"),serverRuntime:()=>(0,Ne.join)(At,".server-beta.runtime.json"),settings:()=>(0,Ne.join)(At,"settings.json"),database:()=>(0,Ne.join)(At,oM),chroma:()=>(0,Ne.join)(At,"chroma"),combinedCerts:()=>(0,Ne.join)(At,"combined_certs.pem"),transcriptsConfig:()=>(0,Ne.join)(At,"transcript-watch.json"),transcriptsState:()=>(0,Ne.join)(At,"transcript-watch-state.json"),corpora:()=>(0,Ne.join)(At,"corpora"),supervisorRegistry:()=>(0,Ne.join)(At,"supervisor.json"),envFile:()=>(0,Ne.join)(At,".env"),logsDir:()=>vie}});var Ii,aM,JE,UE,zE,x,fe=R(()=>{"use strict";Ii=require("fs"),aM=require("path");Hn();LE();Xl();JE=(s=>(s[s.DEBUG=0]="DEBUG",s[s.INFO=1]="INFO",s[s.WARN=2]="WARN",s[s.ERROR=3]="ERROR",s[s.SILENT=4]="SILENT",s))(JE||{}),UE=null,zE=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=Le.logsDir();(0,Ii.existsSync)(e)||(0,Ii.mkdirSync)(e,{recursive:!0});let r=new Date().toISOString().split("T")[0];this.logFilePath=(0,aM.join)(e,`claude-mem-${r}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e instanceof Error?e.message:String(e)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=Le.settings();if((0,Ii.existsSync)(e)){let r=(0,Ii.readFileSync)(e,"utf-8"),i=(yo(r).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=JE[i]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
|
||
${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let r=Object.keys(e);return r.length===0?"{}":r.length<=3?JSON.stringify(e):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,r){if(!r)return e;let n=r;if(typeof r=="string")try{n=JSON.parse(r)}catch{n=r}if(e==="Bash"&&n.command)return`${e}(${n.command})`;if(n.file_path)return`${e}(${n.file_path})`;if(n.notebook_path)return`${e}(${n.notebook_path})`;if(e==="Glob"&&n.pattern)return`${e}(${n.pattern})`;if(e==="Grep"&&n.pattern)return`${e}(${n.pattern})`;if(n.url)return`${e}(${n.url})`;if(n.query)return`${e}(${n.query})`;if(e==="Task"){if(n.subagent_type)return`${e}(${n.subagent_type})`;if(n.description)return`${e}(${n.description})`}return e==="Skill"&&n.skill?`${e}(${n.skill})`:e==="LSP"&&n.operation?`${e}(${n.operation})`:e}formatTimestamp(e){let r=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0"),s=String(e.getHours()).padStart(2,"0"),o=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),c=String(e.getMilliseconds()).padStart(3,"0");return`${r}-${n}-${i} ${s}:${o}:${a}.${c}`}log(e,r,n,i,s){if(e<this.getLevel())return;this.ensureLogFileInitialized();let o=this.formatTimestamp(new Date),a=JE[e].padEnd(5),c=r.padEnd(6),l="";i?.correlationId?l=`[${i.correlationId}] `:i?.sessionId&&(l=`[session-${i.sessionId}] `);let u="";if(s!=null)if(s instanceof Error)u=this.getLevel()===0?`
|
||
${s.message}
|
||
${s.stack}`:` ${s.message}`;else if(this.getLevel()===0&&typeof s=="object")try{u=`
|
||
`+JSON.stringify(s,null,2)}catch{u=" "+this.formatData(s)}else u=" "+this.formatData(s);let d="";if(i){let{sessionId:f,memorySessionId:m,correlationId:y,...b}=i;Object.keys(b).length>0&&(d=` {${Object.entries(b).map(([E,S])=>`${E}=${S}`).join(", ")}}`)}let p=`[${o}] [${a}] [${c}] ${l}${n}${d}${u}`;if(this.logFilePath)try{(0,Ii.appendFileSync)(this.logFilePath,p+`
|
||
`,"utf8")}catch(f){let m=f instanceof Error?f:new Error(String(f));Ja(`[LOGGER] Failed to write to log file: ${m.message}
|
||
${m.stack??""}
|
||
`)}else Ja(p+`
|
||
`)}debug(e,r,n,i){this.log(0,e,r,n,i)}info(e,r,n,i){this.log(1,e,r,n,i)}warn(e,r,n,i){this.log(2,e,r,n,i)}setErrorSink(e){UE=e}error(e,r,n,i){this.log(3,e,r,n,i),this.routeErrorToSink(r,n,i)}routeErrorToSink(e,r,n){try{if(!UE||!(n instanceof Error))return;UE(n)}catch{}}dataIn(e,r,n,i){this.info(e,`\u2192 ${r}`,n,i)}dataOut(e,r,n,i){this.info(e,`\u2190 ${r}`,n,i)}success(e,r,n,i){this.info(e,`\u2713 ${r}`,n,i)}failure(e,r,n,i){this.error(e,`\u2717 ${r}`,n,i)}},x=new zE});function xf(t){return/^Bearer\s+(.+)$/i.exec(t.trim())?.[1]?.trim()||null}function wf(t){let e=t.ip||t.socket.remoteAddress||"";return e==="127.0.0.1"||e==="::1"||e==="::ffff:127.0.0.1"||e==="localhost"}function cM(t){let e=xie(t.header("host")??"");return e==="127.0.0.1"||e==="localhost"||e==="::1"}function xie(t){let e=t.trim().toLowerCase();if(e.startsWith("[")){let n=e.indexOf("]");return n===-1?e:e.slice(1,n)}let r=e.lastIndexOf(":");return r>-1&&/^\d+$/.test(e.slice(r+1))?e.slice(0,r):e}function _f(t){return!!(t.header("forwarded")||t.header("x-forwarded-for")||t.header("x-forwarded-host")||t.header("x-real-ip"))}var GE=R(()=>{"use strict"});function pM(){let t=[];t.push(BE.default.json({limit:"5mb"})),t.push((n,i,s)=>{let a=[".html",".js",".css",".svg",".png",".jpg",".jpeg",".webp",".woff",".woff2",".ttf",".eot"].some(f=>n.path.endsWith(f)),c=n.path==="/api/logs";if(n.path.startsWith("/health")||n.path==="/"||a||c)return s();let l=Date.now(),u=`${n.method}-${Date.now()}`,d=Oie(n.method,n.path,n.body);x.debug("HTTP",`\u2192 ${n.method} ${n.path}`,{requestId:u},d);let p=i.send.bind(i);i.send=function(f){let m=Date.now()-l;return x.debug("HTTP",`\u2190 ${i.statusCode} ${n.path}`,{requestId:u,duration:`${m}ms`}),p(f)},s()});let e=go(),r=dM.default.join(e,"plugin","ui");return t.push(BE.default.static(r)),t}function fM(){return(t,e,r)=>{let n=t.headers.origin;if(n){if(!n.startsWith("http://localhost:")&&!n.startsWith("http://127.0.0.1:")){e.status(403).json({error:"Forbidden",message:"CORS not allowed"});return}e.setHeader("Access-Control-Allow-Origin",n),e.setHeader("Vary","Origin")}if(t.method==="OPTIONS"){e.setHeader("Access-Control-Allow-Methods","GET,HEAD,POST,PUT,PATCH,DELETE"),e.setHeader("Access-Control-Allow-Headers","Content-Type,Authorization,X-Requested-With"),e.status(204).end();return}r()}}function If(t,e,r){let n=t.ip||t.connection.remoteAddress||"";if(!(n==="127.0.0.1"||n==="::1"||n==="::ffff:127.0.0.1"||n==="localhost")){x.warn("SECURITY","Admin endpoint access denied - not localhost",{endpoint:t.path,clientIp:n,method:t.method}),e.status(403).json({error:"Forbidden",message:"Admin endpoints are only accessible from localhost"});return}r()}function Iie(t,e){let r=(0,Ga.createHash)("sha256").update(t,"utf8").digest(),n=(0,Ga.createHash)("sha256").update(e,"utf8").digest();if(r.length!==n.length)return!1;try{return(0,Ga.timingSafeEqual)(r,n)}catch(i){let s=i instanceof Error?i:new Error(String(i));return x.warn("SECURITY","timing-safe secret comparison failed",{},s),!1}}function Tie(t){return _ie.has(t.method.toUpperCase())?wie.has(t.path)?!t.expectedToken||!t.presentedToken?{allow:!1,status:401,reason:"token"}:Iie(t.presentedToken,t.expectedToken)?{allow:!0}:{allow:!1,status:401,reason:"token"}:{allow:!1,status:404,reason:"path"}:{allow:!1,status:403,reason:"method"}}function Aie(t){let e=Date.now(),r=bo.get(t.clientIp);if(r&&e-r.windowStart>uM&&(r.count=0,r.windowStart=e),!r){if(bo.size>=lM){let n=null,i=1/0;for(let[s,o]of bo)e-o.windowStart>uM?bo.delete(s):o.windowStart<i&&(i=o.windowStart,n=s);n!==null&&bo.size>=lM&&bo.delete(n)}r={count:0,windowStart:e},bo.set(t.clientIp,r)}r.count+=1,r.count<=kie?x.warn("SECURITY","Remote request denied",t):x.debug("SECURITY","Remote request denied",t)}function Rie(t){let e=t.query?.token;if(Array.isArray(e)||typeof e!="string")return null;let r=e.trim();return r.length>0?r:null}function mM(t){return(e,r,n)=>{if(wf(e)&&!_f(e)){n();return}let i=e.ip||e.socket.remoteAddress||"",s=xf(e.header("authorization")??"")||e.header("x-api-key")?.trim()||Rie(e)||null,o=Tie({method:e.method,path:e.path,presentedToken:s,expectedToken:t.getToken()});if(!o.allow){Aie({path:e.path,method:e.method,clientIp:i,reason:o.reason}),o.status===404?r.status(404).json({error:"Not found"}):o.status===403?r.status(403).json({error:"Forbidden",message:"Observation TV remote access is read-only"}):r.status(401).json({error:"Unauthorized",message:"Missing or invalid Observation TV token"});return}r.setHeader("Cache-Control","no-store"),n()}}function Oie(t,e,r){if(!r||Object.keys(r).length===0||e.includes("/init"))return"";if(e.includes("/observations")){let n=r.tool_name||"?",i=r.tool_input;return`tool=${x.formatTool(n,i)}`}return e.includes("/summarize")?"requesting summary":""}var BE,dM,Ga,wie,_ie,kie,lM,uM,bo,hM=R(()=>{"use strict";BE=tt(Ef(),1),dM=tt(require("path"),1),Ga=require("crypto");Hn();GE();fe();wie=new Set(["/tv","/tv.html","/stream","/api/observations"]),_ie=new Set(["GET","HEAD"]);kie=10,lM=512,uM=6e4,bo=new Map});function yM(t,e,r,n){let i={error:t,message:e};return r&&(i.code=r),n&&(i.details=n),i}function bM(t,e){e.status(404).json(yM("NotFound",`Cannot ${t.method} ${t.path}`))}var Ba,gM,vM=R(()=>{"use strict";fe();Ba=class extends Error{constructor(r,n=500,i,s){super(r);this.statusCode=n;this.code=i;this.details=s;this.name="AppError"}statusCode;code;details};gM=(t,e,r,n)=>{let i=t instanceof Ba?t.statusCode:500;x.error("HTTP",`Error handling ${e.method} ${e.path}`,{statusCode:i,error:t.message,code:t instanceof Ba?t.code:void 0},t);let s=yM(t.name||"Error",t.message,t instanceof Ba?t.code:void 0,t instanceof Ba?t.details:void 0);r.status(i).json(s)}});var Cie,jie,Qje,EM=R(()=>{"use strict";Cie=new Set([".cmd",".bat"]),jie=new Set([".exe",".com"]),Qje=new Set([...jie,...Cie])});function Ha(t=process.env){let e={};for(let[r,n]of Object.entries(t))if(n!==void 0){if(Kie.has(r)){e[r]=n;continue}VE.has(r)||HE.some(i=>r.startsWith(i))||(e[r]=n)}return e}var HE,VE,Pie,Kie,eu=R(()=>{"use strict";HE=["CLAUDECODE_","CLAUDE_CODE_"],VE=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),Pie=new Set(["HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy","npm_config_noproxy"]),Kie=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...Pie])});function Mie(t){WE+=1;let e=(0,YE.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Ha(process.env),LC_ALL:"C",LANG:"C"}});if(e.status===0){let r=e.stdout.trim();return r.length>0?r:null}return null}function Nie(t,e=!1){if(!e){let n=SM.get(t);if(n&&Date.now()-n.capturedAtMs<Die)return n.token}let r=null;try{r=Mie(t)}catch(n){x.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:n instanceof Error?n.message:String(n)}),r=null}return SM.set(t,{token:r,capturedAtMs:Date.now()}),r}function wM(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){WE+=1;try{let r=(0,xM.readFileSync)(`/proc/${t}/stat`,"utf-8"),n=r.lastIndexOf(") ");if(n<0)return null;let s=r.slice(n+2).split(" ")[19];return s&&/^\d+$/.test(s)?s:null}catch(r){return x.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}if(process.platform==="win32")return Nie(t,e);WE+=1;try{let r=(0,YE.spawnSync)("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Ha(process.env),LC_ALL:"C",LANG:"C"}});if(r.status!==0)return null;let n=r.stdout.trim();return n.length>0?n:null}catch(r){return x.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}function Ti(t){return wM(t,!1)}function ki(t,e){if(e===null)return!0;let r=wM(t,!0);return r===null?!0:r===e}var YE,xM,Die,SM,WE,QE=R(()=>{"use strict";YE=require("child_process"),xM=require("fs");fe();eu();Die=5e3,SM=new Map,WE=0});async function Vn(t,e={}){let r=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:Ti(t),i=()=>ki(t,n);if(!i()){x.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:t});return}if(x.debug("PROCESS",`Killing process tree rooted at PID ${t}`,{immediate:r}),process.platform==="win32"){try{await XE("taskkill",["/PID",String(t),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(s){let o=s.code,a=String(s.stderr??""),c=s instanceof Error?s.message:String(s);if(o===Lie||qie.test(`${a} ${c}`)){x.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new Tf(t,`taskkill failed for PID ${t} (exit ${String(o)}): ${a.trim()||c}`,{cause:s})}return}try{let s=r?"SIGKILL":"SIGTERM",o=await kf(t);for(let l of o){if(!ki(l.pid,l.startToken)){x.debug("PROCESS",`Skipping ${s}: descendant PID was reused since enumeration`,{pid:l.pid,rootPid:t});continue}try{process.kill(l.pid,s)}catch{}}if(i())try{process.kill(t,s)}catch(l){let u=l instanceof Error?l:new Error(String(l)),d=u.code;d!=="ESRCH"&&x.debug("PROCESS",`Failed to ${s} PID ${t}`,{code:d},u)}else x.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:t,signal:s});r||await new Promise(l=>setTimeout(l,500));let a=i()?await kf(t):[],c=new Map;for(let l of o)c.set(l.pid,l.startToken);for(let l of a)c.set(l.pid,l.startToken);for(let[l,u]of c){if(!ki(l,u)){x.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:l,rootPid:t});continue}try{process.kill(l,"SIGKILL")}catch{}}if(!r&&i())try{process.kill(t,"SIGKILL")}catch{}}catch(s){throw new Tf(t,`tree-kill failed for PID ${t}: ${s instanceof Error?s.message:String(s)}`,{cause:s})}}async function Fie(){return process.platform==="win32"?Jie():process.platform==="linux"?$ie():Uie()}function $ie(){let t=[],e;try{e=(0,Af.readdirSync)("/proc")}catch(r){return x.warn("PROCESS","Cannot read /proc \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),t}for(let r of e){if(!/^\d+$/.test(r))continue;let n;try{n=(0,Af.readFileSync)(`/proc/${r}/stat`,"utf-8")}catch{continue}let i=n.lastIndexOf(") ");if(i<0)continue;let s=n.slice(i+2).split(" "),o=Number.parseInt(s[1]??"",10),a=s[19];Number.isFinite(o)&&t.push({pid:Number.parseInt(r,10),ppid:o,startToken:a&&/^\d+$/.test(a)?a:null})}return t}async function Uie(){let t;try{t=(await XE("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(r){return x.warn("PROCESS","Cannot enumerate the process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(`
|
||
`)){let n=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let i=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:i.length>0?i:null})}return e}async function Jie(){let t;try{t=(await XE("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Csv -NoTypeInformation"],{timeout:3e4,windowsHide:!0,maxBuffer:33554432})).stdout}catch(r){return x.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(/\r?\n/).slice(1)){let n=r.match(/^"(\d+)","(\d+)","(.*)"$/);if(!n)continue;let i=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:i.length>0?i:null})}return e}async function kf(t){let e=await Fie(),r=new Map;for(let o of e){let a=r.get(o.ppid);a?a.push(o):r.set(o.ppid,[o])}let n=new Set([t]),i=[],s=o=>{for(let a of r.get(o)??[])n.has(a.pid)||(n.add(a.pid),s(a.pid),i.push({pid:a.pid,startToken:a.startToken}))};return s(t),i}var _M,Af,IM,XE,Lie,qie,Tf,tu=R(()=>{"use strict";_M=require("child_process"),Af=require("fs"),IM=require("util");fe();QE();XE=(0,IM.promisify)(_M.execFile),Lie=128,qie=/not found|no running instance|no tasks/i,Tf=class extends Error{pid;constructor(e,r,n){super(r,n),this.name="ProcessTreeKillError",this.pid=e}}});function Rt(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(x.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return x.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function Rf(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(n=>!Rt(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function ds(t){if(!t||!Rt(t.pid))return!1;if(!t.startToken)return!0;let e=Ti(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||x.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function Of(){return ZE||(ZE=new rS),ZE}function eS(){let t=Hie.shift();t&&t.notify()}var Ai,tS,zie,Gie,Bie,rS,ZE,fPe,Hie,vo=R(()=>{"use strict";EM();Ai=require("fs"),tS=tt(require("path"),1);fe();eu();Hn();QE();tu();zie=5e3,Gie=1e3,Bie=Le.supervisorRegistry();rS=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Bie){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,(0,Ai.mkdirSync)(tS.default.dirname(this.registryPath),{recursive:!0}),!(0,Ai.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,Ai.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[i,s]of Object.entries(n))this.entries.set(i,s)}catch(r){r instanceof Error?x.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):x.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&x.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,r,n){this.initialize(),this.entries.set(e,r),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e){this.initialize();let r=this.entries.get(e);this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist(),r?.type==="sdk"&&eS()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let n=Date.parse(e.startedAt),i=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(i)?0:i)})}getBySession(e){let r=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,r=0;for(let[n,i]of this.entries)Rt(i.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,i.type==="sdk"&&(r+=1));e>0&&this.persist();for(let n=0;n<r;n+=1)eS();return e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;x.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:n,pids:r.map(a=>a.pid)});let i=r.filter(a=>Rt(a.pid)),s=new Map(i.map(a=>[a.pid,Ti(a.pid)]));for(let a of i)try{process.platform==="win32"?await Vn(a.pid,{expectedStartToken:s.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&x.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):x.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}await Rf(i,zie);let o=i.filter(a=>Rt(a.pid));for(let a of o){x.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:n});let c=s.get(a.pid)??null;if(!ki(a.pid,c)){x.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:n});continue}try{process.platform==="win32"?await Vn(a.pid,{expectedStartToken:c}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(l){l instanceof Error?l.code!=="ESRCH"&&x.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):x.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}}if(o.length>0){let a=Date.now()+Gie;for(;Date.now()<a&&o.filter(l=>Rt(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,100))}for(let a of r)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of r)a.type==="sdk"&&eS();return x.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:n,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};(0,Ai.mkdirSync)(tS.default.dirname(this.registryPath),{recursive:!0}),(0,Ai.writeFileSync)(this.registryPath,JSON.stringify(e,null,2))}},ZE=null;fPe=180*1e3,Hie=[]});async function kM(t){let e=t.currentPid??process.pid,r=t.pidFilePath??Vie,n=t.registry.getAll(),i=[...n].filter(c=>c.pid!==e).sort((c,l)=>Date.parse(l.startedAt)-Date.parse(c.startedAt)),s=new Map,o=new Map;for(let c of i){if(!Rt(c.pid)){t.registry.unregister(c.id);continue}o.set(c.id,Ti(c.pid)),s.set(c.id,await kf(c.pid));try{await TM(c,"SIGTERM")}catch(l){l instanceof Error?x.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:c.pid,pgid:c.pgid,type:c.type},l):x.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(l)})}}await Rf(i,5e3);let a=i.filter(c=>Rt(c.pid)||(s.get(c.id)??[]).some(l=>Rt(l.pid)));for(let c of a){let l=ki(c.pid,o.get(c.id)??null);l||x.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:c.pid,type:c.type});try{l&&await TM(c,"SIGKILL")}catch(u){u instanceof Error?x.debug("SYSTEM","Failed to force kill child process",{pid:c.pid,pgid:c.pgid,type:c.type},u):x.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(u)})}finally{Yie(s.get(c.id)??[],c.pid)}}await Rf(a,1e3);for(let c of i)t.registry.unregister(c.id);for(let c of n.filter(l=>l.pid===e))t.registry.unregister(c.id);Wie(r,e),t.registry.pruneDeadEntries()}function Wie(t,e,r=!1){if(!(0,Va.existsSync)(t))return;let n=null;try{let o=JSON.parse((0,Va.readFileSync)(t,"utf-8"));n=typeof o.pid=="number"?o.pid:null}catch(o){x.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:t,error:o instanceof Error?o.message:String(o)});return}let i=e!==null&&n===e,s=n===null||!Rt(n);if(!i&&!(r&&s)){x.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:t,recordedPid:n,currentPid:e});return}try{(0,Va.rmSync)(t,{force:!0})}catch(o){o instanceof Error?x.debug("SYSTEM","Failed to remove PID file",{pidFilePath:t},o):x.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:t,error:String(o)})}}function Yie(t,e){for(let{pid:r,startToken:n}of t)if(!(r===e||!Rt(r))){if(!ki(r,n)){x.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:r,rootPid:e});continue}try{process.kill(r,"SIGKILL"),x.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:r,rootPid:e})}catch(i){let s=i instanceof Error?i.code:void 0;s!=="ESRCH"&&x.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:r,rootPid:e,errno:s})}}}async function TM(t,e){let{pid:r,pgid:n}=t;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(i){if((i instanceof Error?i.code:void 0)!=="ESRCH")throw i}if(e==="SIGKILL"){await Vn(r,{signalMode:"immediate"});return}try{process.kill(r,e)}catch(i){if((i instanceof Error?i.code:void 0)!=="ESRCH")throw i}return}await Vn(r)}var Va,Vie,AM=R(()=>{"use strict";Va=require("fs");fe();vo();Hn();tu();Vie=Le.workerPid()});function Qie(){let e=Of().pruneDeadEntries();e>0&&x.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function OM(){Wa===null&&(Wa=setInterval(Qie,RM),Wa.unref(),x.debug("SYSTEM","Health checker started",{intervalMs:RM}))}function CM(){Wa!==null&&(clearInterval(Wa),Wa=null,x.debug("SYSTEM","Health checker stopped"))}var RM,Wa,jM=R(()=>{"use strict";fe();vo();RM=3e4,Wa=null});function ese(t){let e=[];for(let r of t.split(`
|
||
`)){let n=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function tse(){let t=await Xie("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return ese(t.stdout)}function rse(t,e){let r=t.filter(o=>Zie.test(o.command)&&o.pid!==e.selfPid),n=new Set(r.map(o=>o.pid)),i=r.filter(o=>!n.has(o.ppid)),s=i.filter(o=>o.ppid===e.selfPid?!1:o.ppid===1?!0:!e.isAlive(o.ppid));return{matched:r,roots:i,orphans:s}}async function DM(t={}){let e=t.platform??process.platform,r={matched:0,trees:0,orphans:0,killed:0,failed:0,unregistered:0,skipped:null};if(e==="win32")return r.skipped="windows",r;let n=t.readTable??tse,i=t.isAlive??Rt,s=t.killTree??(f=>Vn(f,{signalMode:"graceful"})),o=t.selfPid??process.pid,a;try{a=await n()}catch(f){return x.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:f instanceof Error?f.message:String(f)}),r.skipped="unreadable",r}let{matched:c,roots:l,orphans:u}=rse(a,{isAlive:i,selfPid:o});if(r.matched=c.length,r.trees=l.length,r.orphans=u.length,u.length===0)return x.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:r.matched,trees:r.trees}),r;x.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:u.length,roots:u.map(f=>f.pid)});let d=new Set,p=8;for(let f=0;f<u.length;f+=p){let m=u.slice(f,f+p);(await Promise.allSettled(m.map(b=>s(b.pid)))).forEach((b,v)=>{let E=m[v];b.status==="fulfilled"?(r.killed+=1,d.add(E.pid)):(r.failed+=1,x.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:E.pid,ppid:E.ppid,error:b.reason instanceof Error?b.reason.message:String(b.reason)}))})}if(t.registry)for(let f of t.registry.getAll())f.type==="chroma"&&d.has(f.pid)&&(t.registry.unregister(f.id),r.unregistered+=1);return x.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:r.orphans,killed:r.killed,failed:r.failed,unregistered:r.unregistered}),r}var PM,KM,Xie,Zie,MM=R(()=>{"use strict";PM=require("child_process"),KM=require("util");fe();tu();vo();Xie=(0,KM.promisify)(PM.execFile),Zie=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/});function NM(){return ise}function sse(t={}){let e=t.pidFilePath??nse;if(!(0,Eo.existsSync)(e))return"missing";let r=null;try{r=JSON.parse((0,Eo.readFileSync)(e,"utf-8"))}catch(i){return i instanceof Error?x.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},i):x.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(i)}),(0,Eo.rmSync)(e,{force:!0}),"invalid"}return ds(r)&&r?((t.logAlive??!0)&&x.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(x.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),(0,Eo.rmSync)(e,{force:!0}),"stale")}var Eo,nse,nS,ise,LM=R(()=>{"use strict";Eo=require("fs");fe();vo();AM();jM();MM();Hn();nse=Le.workerPid(),nS=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),sse({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,DM({registry:this.registry}).catch(r=>{x.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:r instanceof Error?r.message:String(r)})}),OM()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){x.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,x.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(i){i instanceof Error?x.error("SYSTEM","Error during shutdown",{},i):x.error("SYSTEM","Error during shutdown (non-Error)",{error:String(i)});try{await this.stop()}catch(s){s instanceof Error?x.debug("SYSTEM","Supervisor shutdown fallback failed",{},s):x.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(s)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{x.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}CM(),this.stopPromise=kM({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,n){this.registry.register(e,r,n)}unregisterProcess(e){this.registry.unregister(e)}getRegistry(){return this.registry}},ise=new nS(Of())});function iS(t,e,r){t.on("finish",async()=>{try{await r()}finally{process.exit(0)}}),t.json(e)}var qM=R(()=>{"use strict"});function sS(t,e=Date.now){return Math.max(0,Math.floor((e()-t)/1e3))}var FM=R(()=>{"use strict"});function oS(){let t=Array.from(ose.values()).map(e=>({...e})).sort((e,r)=>e.dependency.localeCompare(r.dependency));return{degraded:t.length>0,statuses:t}}var ose,$M=R(()=>{"use strict";ose=new Map});function ase(t,e){return e.status!=="rejected"?!1:!t||t.status!=="rejected"?!0:t.resetsAt!==e.resetsAt}var aS,UM,NPe,JM=R(()=>{"use strict";aS=class{entries=new Map;set(e){if(!e||typeof e!="object")return!1;let r=e.rateLimitType??"default",n=this.entries.get(r);return this.entries.set(r,{...e,observedAt:Date.now()}),ase(n,e)}get(e){return e?this.entries.get(e):this.entries.get("default")}getMostRecentByWindow(){return{five_hour:this.entries.get("five_hour"),seven_day:this.entries.get("seven_day"),seven_day_opus:this.entries.get("seven_day_opus"),seven_day_sonnet:this.entries.get("seven_day_sonnet"),overage:this.entries.get("overage")}}get size(){return this.entries.size}},UM=new aS;NPe=900*1e3});function use(t){t.setHeader("X-Content-Type-Options","nosniff"),t.setHeader("X-Frame-Options","DENY"),t.setHeader("X-DNS-Prefetch-Control","off"),t.setHeader("Referrer-Policy","no-referrer"),t.setHeader("Cross-Origin-Opener-Policy","same-origin"),t.setHeader("Cross-Origin-Resource-Policy","same-origin"),t.setHeader("Origin-Agent-Cluster","?1"),t.removeHeader("X-Powered-By")}var BM,HM,lS,ru,VM,cse,cS,zM,lse,GM,Cf,WM=R(()=>{"use strict";BM=tt(Ef(),1),HM=tt(require("http"),1),lS=tt(require("fs"),1),ru=tt(require("path"),1);eM();fe();hM();vM();LM();vo();eu();qM();FM();$M();JM();VM=ru.default.resolve(__CM_DIRNAME__,"../skills/mem-search"),cse=ru.default.join(VM,"operations"),cS=ru.default.join(VM,"SKILL.md"),zM=(()=>{try{let t=lS.readFileSync(cS,"utf-8");return x.info("SYSTEM","Cached SKILL.md at boot",{path:cS,bytes:Buffer.byteLength(t,"utf-8")}),t}catch(t){return x.debug("SYSTEM","SKILL.md not present at boot, /api/instructions will 404 for topic queries",{path:cS,message:t instanceof Error?t.message:String(t)}),null}})(),lse=(()=>{let t=new Map;for(let e of NE){let r=ru.default.join(cse,`${e}.md`);try{t.set(e,lS.readFileSync(r,"utf-8"))}catch(n){x.debug("SYSTEM","Operation instruction file not present at boot",{path:r,message:n instanceof Error?n.message:String(n)})}}return t.size>0&&x.info("SYSTEM","Cached operation instruction files at boot",{count:t.size,operations:Array.from(t.keys())}),t})(),GM="13.24.21";Cf=class{app;server=null;options;startTime=Date.now();constructor(e){this.options=e,this.app=(0,BM.default)(),this.app.disable("x-powered-by"),this.setupRemoteReadOnlyGuard(),this.setupSecurityHeaders(),this.setupCors(),this.setupPreBodyParserRoutes(),this.setupMiddleware(),this.setupCoreRoutes()}getHttpServer(){return this.server}async listen(e,r){return new Promise((n,i)=>{let s=HM.default.createServer(this.app),o=c=>{s.off("listening",a),i(c)},a=()=>{s.off("error",o),this.server=s,x.info("SYSTEM","HTTP server started",{host:r,port:e,pid:process.pid}),n()};s.once("error",o),s.once("listening",a),s.listen(e,r)})}async close(){this.server&&(this.server.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{this.server.close(n=>n?r(n):e())}),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),this.server=null,x.info("SYSTEM","HTTP server closed"))}registerRoutes(e){e.setupRoutes(this.app)}finalizeRoutes(){this.app.use(bM),this.app.use(gM)}setupMiddleware(){pM().forEach(r=>this.app.use(r))}setupRemoteReadOnlyGuard(){this.options.remoteReadOnly&&this.app.use(mM(this.options.remoteReadOnly))}setupSecurityHeaders(){this.options.securityHeaders&&this.app.use((e,r,n)=>{use(r),n()})}setupCors(){this.app.use(fM())}setupPreBodyParserRoutes(){this.options.preBodyParserRoutes?.forEach(e=>e.setupRoutes(this.app))}setupCoreRoutes(){this.app.get("/api/health",async(e,r)=>{let n=this.options.getQueueHealth?await this.options.getQueueHealth():null,i=n?.engine==="bullmq"&&n.redis.status==="error",s=this.options.getDependencyHealth?this.options.getDependencyHealth():oS();r.status(i?503:200).json({status:i?"degraded":"ok",...this.options.runtime?{runtime:this.options.runtime}:{},version:GM,workerPath:this.options.workerPath,uptime:sS(this.startTime),managed:process.env.CLAUDE_MEM_MANAGED==="true",hasIpc:typeof process.send=="function",platform:process.platform,pid:process.pid,initialized:this.options.getInitializationComplete(),mcpReady:this.options.getMcpReady(),ai:this.options.getAiStatus(),dependencies:s,rateLimits:UM.getMostRecentByWindow(),...n?{queue:n}:{}})}),this.app.get("/api/readiness",(e,r)=>{this.options.getInitializationComplete()?r.status(200).json({status:"ready",mcpReady:this.options.getMcpReady()}):r.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(e,r)=>{r.status(200).json({version:GM})}),this.app.get("/api/instructions",(e,r)=>{let n=e.query.topic||"all",i=e.query.operation;if(n&&!ZD.includes(n))return r.status(400).json({error:"Invalid topic"});if(i&&!NE.includes(i))return r.status(400).json({error:"Invalid operation"});if(i){let o=lse.get(i);return o===void 0?(x.debug("HTTP","Instruction file not cached at boot",{operation:i}),r.status(404).json({error:"Instruction not found"})):r.json({content:[{type:"text",text:o}]})}if(zM===null)return x.debug("HTTP","SKILL.md not cached at boot",{topic:n}),r.status(404).json({error:"Instruction not found"});let s=this.extractInstructionSection(zM,n);r.json({content:[{type:"text",text:s}]})}),this.app.post("/api/admin/restart",If,async(e,r)=>{process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(r.json({status:"restarting"}),x.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):iS(r,{status:"restarting"},()=>this.options.onRestart())}),this.app.post("/api/admin/shutdown",If,async(e,r)=>{let n=e.query.reason==="restart"?"restart":"stop";process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(r.json({status:"shutting_down"}),x.info("SYSTEM","Sending shutdown request to wrapper"),process.send({type:"shutdown",reason:n})):iS(r,{status:"shutting_down"},()=>this.options.onShutdown(n))}),this.app.get("/api/admin/doctor",If,(e,r)=>{let o=NM().getRegistry().getAll().map(f=>({id:f.id,pid:f.pid,type:f.type,status:Rt(f.pid)?"alive":"dead",startedAt:f.startedAt})),a=o.filter(f=>f.status==="dead").map(f=>f.pid),c=!Object.keys(process.env).some(f=>VE.has(f)||HE.some(m=>f.startsWith(m))),l=sS(this.startTime),u=Math.floor(l/3600),d=Math.floor(l%3600/60),p=u>0?`${u}h ${d}m`:`${d}m`;r.json({supervisor:{running:!0,pid:process.pid,uptime:p},processes:o,health:{deadProcessPids:a,envClean:c,dependencies:this.options.getDependencyHealth?this.options.getDependencyHealth():oS()}})})}extractInstructionSection(e,r){let n={workflow:this.extractBetween(e,"## The Workflow","## Search Parameters"),search_params:this.extractBetween(e,"## Search Parameters","## Examples"),examples:this.extractBetween(e,"## Examples","## Why This Workflow"),all:e};return n[r]||n.all}extractBetween(e,r,n){let i=e.indexOf(r),s=e.indexOf(n);return i===-1?e:s===-1?e.substring(i):e.substring(i,s).trim()}}});var Rr,dse,pse,uS,YM=R(()=>{"use strict";Rr=require("zod"),dse=Rr.z.enum(["hook","worker","provider","server","api"]),pse=Rr.z.object({id:Rr.z.string().min(1),projectId:Rr.z.string().min(1),serverSessionId:Rr.z.string().min(1).nullable().default(null),sourceType:dse,eventType:Rr.z.string().min(1),platformSource:Rr.z.string().min(1).nullable().default(null),payload:Rr.z.unknown().default({}),contentSessionId:Rr.z.string().min(1).nullable().default(null),memorySessionId:Rr.z.string().min(1).nullable().default(null),occurredAtEpoch:Rr.z.number().int().nonnegative(),createdAtEpoch:Rr.z.number().int().nonnegative()}),uS=pse.omit({id:!0,createdAtEpoch:!0}).partial({serverSessionId:!0,platformSource:!0,payload:!0,contentSessionId:!0,memorySessionId:!0})});function Ze(){return(0,jf.randomUUID)()}function ht(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function QM(t){return Array.isArray(t)?t:[]}function De(t){return typeof t=="number"?t:new Date(t).getTime()}function Qr(t){return t==null?null:t instanceof Date?t:new Date(t)}async function se(t,e,r=[]){return(await t.query(e,r)).rows[0]??null}async function Sn(t,e,r){if(!await se(t,"SELECT id FROM projects WHERE id = $1 AND team_id = $2",[e,r]))throw new Error("project_id must belong to team_id")}async function Ri(t,e,r,n){if(!await se(t,"SELECT id FROM server_sessions WHERE id = $1 AND project_id = $2 AND team_id = $3",[e,r,n]))throw new Error("server_session_id must belong to project_id and team_id")}function nu(t){return JSON.stringify(dS(t))}function xn(t){return(0,jf.createHash)("sha256").update(nu(t)).digest("hex")}function dS(t){if(Array.isArray(t))return t.map(dS);if(t&&typeof t=="object"){let e=t;return Object.keys(e).sort().reduce((r,n)=>(r[n]=dS(e[n]),r),{})}return t}var jf,wn=R(()=>{"use strict";jf=require("crypto")});function fse(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function ps(t){if(!t)return Ya;let e=fse(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:Ya}function cr(t){return typeof t!="string"?null:ps(t)}var Ya,So=R(()=>{"use strict";Ya="claude"});function XM(t){let e=cr(t.platformSource),r=e?[e]:[];return t.sourceEventId?`agent_event:v1:${xn([t.teamId,t.projectId,t.sourceAdapter,...r,t.sourceEventId])}`:`agent_event:v1:${xn([t.teamId,t.projectId,t.sourceAdapter,...r,t.contentSessionId??t.serverSessionId??null,t.eventType,new Date(t.occurredAt).toISOString(),nu(t.payload??{})])}`}function pS(t){return{id:t.id,projectId:t.project_id,teamId:t.team_id,serverSessionId:t.server_session_id,sourceAdapter:t.source_adapter,sourceEventId:t.source_event_id,idempotencyKey:t.idempotency_key,eventType:t.event_type,platformSource:t.platform_source,payload:t.payload,metadata:ht(t.metadata),occurredAtEpoch:De(t.occurred_at),receivedAtEpoch:De(t.received_at),createdAtEpoch:De(t.created_at)}}var Xr,Qa=R(()=>{"use strict";wn();So();Xr=class{constructor(e){this.client=e}client;async create(e){await Sn(this.client,e.projectId,e.teamId),e.serverSessionId&&await Ri(this.client,e.serverSessionId,e.projectId,e.teamId);let r=XM(e),n=cr(e.platformSource),i=await se(this.client,`
|
||
INSERT INTO agent_events (
|
||
id, project_id, team_id, server_session_id, source_adapter,
|
||
source_event_id, idempotency_key, event_type, platform_source, payload, metadata, occurred_at
|
||
)
|
||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10::jsonb, $11::jsonb, $12)
|
||
ON CONFLICT (idempotency_key) DO UPDATE SET
|
||
metadata = agent_events.metadata || excluded.metadata,
|
||
platform_source = COALESCE(excluded.platform_source, agent_events.platform_source)
|
||
RETURNING *
|
||
`,[e.id??Ze(),e.projectId,e.teamId,e.serverSessionId??null,e.sourceAdapter,e.sourceEventId??null,r,e.eventType,n,JSON.stringify(e.payload??{}),JSON.stringify(e.metadata??{}),new Date(e.occurredAt)]);return pS(i)}async getByIdForScope(e){let r=await se(this.client,"SELECT * FROM agent_events WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.id,e.projectId,e.teamId]);return r?pS(r):null}async listByProject(e){return(await this.client.query(`
|
||
SELECT * FROM agent_events
|
||
WHERE project_id = $1
|
||
AND team_id = $2
|
||
AND ($3::text IS NULL OR server_session_id = $3)
|
||
ORDER BY occurred_at DESC
|
||
LIMIT $4
|
||
`,[e.projectId,e.teamId,e.serverSessionId??null,e.limit??100])).rows.map(pS)}}});function eN(t){return`observation_generation_job:v1:${xn([t.teamId,t.projectId,t.sourceType,t.sourceId,t.jobType])}`}function mse(t){return t.sourceType==="agent_event"?{agentEventId:t.agentEventId??t.sourceId,serverSessionId:t.serverSessionId??null}:t.sourceType==="session_summary"?{agentEventId:null,serverSessionId:t.serverSessionId??t.sourceId}:{agentEventId:null,serverSessionId:t.serverSessionId??null}}function gse(t,e){if(hse.has(t.status))throw new Error(`cannot transition observation generation job from terminal status ${t.status}`);if(!yse[t.status].includes(e))throw new Error(`illegal observation generation job transition from ${t.status} to ${e}`);if(e==="processing"&&t.attempts>=t.maxAttempts)throw new Error("cannot process observation generation job after max_attempts is reached");if(e==="queued"&&t.attempts>=t.maxAttempts)throw new Error("cannot retry observation generation job after max_attempts is reached")}function iu(t){return{id:t.id,projectId:t.project_id,teamId:t.team_id,agentEventId:t.agent_event_id,sourceType:t.source_type,sourceId:t.source_id,serverSessionId:t.server_session_id,jobType:t.job_type,status:t.status,idempotencyKey:t.idempotency_key,bullmqJobId:t.bullmq_job_id,attempts:t.attempts,maxAttempts:t.max_attempts,nextAttemptAtEpoch:Qr(t.next_attempt_at)?.getTime()??null,lockedAtEpoch:Qr(t.locked_at)?.getTime()??null,lockedBy:t.locked_by,completedAtEpoch:Qr(t.completed_at)?.getTime()??null,failedAtEpoch:Qr(t.failed_at)?.getTime()??null,cancelledAtEpoch:Qr(t.cancelled_at)?.getTime()??null,lastError:t.last_error==null?null:ht(t.last_error),payload:ht(t.payload),createdAtEpoch:De(t.created_at),updatedAtEpoch:De(t.updated_at)}}function ZM(t){return{id:t.id,generationJobId:t.generation_job_id,eventType:t.event_type,statusAfter:t.status_after,attempt:t.attempt,details:ht(t.details),createdAtEpoch:De(t.created_at)}}var dt,Wt,hse,yse,fs=R(()=>{"use strict";wn();dt=class{constructor(e){this.client=e}client;async create(e){await this.validateSource(e);let r=mse(e),n=eN(e),i=await se(this.client,`
|
||
INSERT INTO observation_generation_jobs (
|
||
id, project_id, team_id, agent_event_id, source_type, source_id,
|
||
server_session_id, job_type, status, idempotency_key, bullmq_job_id,
|
||
max_attempts, payload
|
||
)
|
||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13::jsonb)
|
||
ON CONFLICT (idempotency_key) DO UPDATE SET
|
||
-- The conflicting INSERT carries a freshly generated job id in both $1
|
||
-- and payload.generation_job_id. ON CONFLICT keeps the existing row, so
|
||
-- $1 is discarded -- but the merge below would otherwise let the new
|
||
-- payload overwrite generation_job_id with that discarded id, leaving
|
||
-- the row pointing at a job that never existed. The worker resolves the
|
||
-- job via payload.generation_job_id, so such a row can never be locked
|
||
-- and is silently dropped. Re-pin the pointer to the surviving row.
|
||
payload = observation_generation_jobs.payload
|
||
|| excluded.payload
|
||
|| jsonb_build_object('generation_job_id', observation_generation_jobs.id),
|
||
updated_at = now()
|
||
RETURNING *
|
||
`,[e.id??Ze(),e.projectId,e.teamId,r.agentEventId,e.sourceType,e.sourceId,r.serverSessionId,e.jobType,e.status??"queued",n,e.bullmqJobId??null,e.maxAttempts??3,JSON.stringify(e.payload??{})]);return iu(i)}async getByIdForScope(e){let r=await se(this.client,"SELECT * FROM observation_generation_jobs WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.id,e.projectId,e.teamId]);return r?iu(r):null}async transitionStatus(e){let r=await se(this.client,`
|
||
UPDATE observation_generation_jobs
|
||
SET
|
||
status = $2,
|
||
attempts = CASE WHEN $2 = 'processing' THEN attempts + 1 ELSE attempts END,
|
||
locked_at = CASE WHEN $2 = 'processing' THEN now() ELSE NULL END,
|
||
locked_by = CASE WHEN $2 = 'processing' THEN $3 ELSE NULL END,
|
||
next_attempt_at = CASE WHEN $2 = 'queued' THEN $4::timestamptz ELSE NULL::timestamptz END,
|
||
completed_at = CASE WHEN $2 = 'completed' THEN now() ELSE NULL END,
|
||
failed_at = CASE WHEN $2 = 'failed' THEN now() ELSE NULL END,
|
||
cancelled_at = CASE WHEN $2 = 'cancelled' THEN now() ELSE NULL END,
|
||
last_error = $5::jsonb,
|
||
updated_at = now()
|
||
WHERE id = $1
|
||
AND project_id = $6
|
||
AND team_id = $7
|
||
AND (
|
||
(status = 'queued' AND $2 IN ('processing', 'failed', 'cancelled'))
|
||
OR
|
||
(status = 'processing' AND $2 IN ('queued', 'completed', 'failed', 'cancelled'))
|
||
)
|
||
AND ($2 <> 'processing' OR attempts < max_attempts)
|
||
AND ($2 <> 'queued' OR attempts < max_attempts)
|
||
RETURNING *
|
||
`,[e.id,e.status,e.lockedBy??null,e.nextAttemptAt??null,e.lastError==null?null:JSON.stringify(e.lastError),e.projectId,e.teamId]);if(r)return iu(r);let n=await se(this.client,"SELECT * FROM observation_generation_jobs WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.id,e.projectId,e.teamId]);if(!n)return null;throw gse(iu(n),e.status),new Error("observation generation job status transition was not applied")}async listByStatusForScope(e){return(await this.client.query(`
|
||
SELECT * FROM observation_generation_jobs
|
||
WHERE status = $1 AND project_id = $2 AND team_id = $3
|
||
ORDER BY created_at ASC
|
||
LIMIT $4
|
||
`,[e.status,e.projectId,e.teamId,e.limit??100])).rows.map(iu)}async validateSource(e){if(await Sn(this.client,e.projectId,e.teamId),e.sourceType==="agent_event"){let n=e.agentEventId??e.sourceId,i=await se(this.client,"SELECT id, server_session_id FROM agent_events WHERE id = $1 AND project_id = $2 AND team_id = $3",[n,e.projectId,e.teamId]);if(!i||e.sourceId!==n)throw new Error("agent_event source_id must belong to project_id and team_id");if(e.serverSessionId&&(await Ri(this.client,e.serverSessionId,e.projectId,e.teamId),i.server_session_id&&i.server_session_id!==e.serverSessionId))throw new Error("server_session_id must match the agent_event server_session_id");return}if(e.sourceType==="session_summary"){let n=e.serverSessionId??e.sourceId;if(await Ri(this.client,n,e.projectId,e.teamId),e.sourceId!==n)throw new Error("session_summary source_id must equal server_session_id");return}if(!await se(this.client,"SELECT id FROM observations WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.sourceId,e.projectId,e.teamId]))throw new Error("observation_reindex source_id must belong to project_id and team_id");e.serverSessionId&&await Ri(this.client,e.serverSessionId,e.projectId,e.teamId)}},Wt=class{constructor(e){this.client=e}client;async append(e){let r=await se(this.client,`
|
||
INSERT INTO observation_generation_job_events (
|
||
id, generation_job_id, event_type, status_after, attempt, details
|
||
)
|
||
SELECT $1, jobs.id, $4, $5, $6, $7::jsonb
|
||
FROM observation_generation_jobs jobs
|
||
WHERE jobs.id = $2
|
||
AND jobs.project_id = $3
|
||
AND jobs.team_id = $8
|
||
RETURNING observation_generation_job_events.*
|
||
`,[e.id??Ze(),e.generationJobId,e.projectId,e.eventType,e.statusAfter,e.attempt??0,JSON.stringify(e.details??{}),e.teamId]);if(!r)throw new Error("generation_job_id must belong to project_id and team_id");return ZM(r)}async listByJobForScope(e){return(await this.client.query(`
|
||
SELECT events.*
|
||
FROM observation_generation_job_events events
|
||
INNER JOIN observation_generation_jobs jobs ON jobs.id = events.generation_job_id
|
||
WHERE events.generation_job_id = $1 AND jobs.project_id = $2 AND jobs.team_id = $3
|
||
ORDER BY events.created_at ASC
|
||
`,[e.generationJobId,e.projectId,e.teamId])).rows.map(ZM)}};hse=new Set(["completed","failed","cancelled"]),yse={queued:["processing","failed","cancelled"],processing:["queued","completed","failed","cancelled"],completed:[],failed:[],cancelled:[]}});var rN={};io(rN,{PostgresAuthRepository:()=>Nt});function tN(t){return{id:t.id,keyHash:t.key_hash,teamId:t.team_id,projectId:t.project_id,actorId:t.actor_id,scopes:QM(t.scopes),revokedAtEpoch:Qr(t.revoked_at)?.getTime()??null,expiresAtEpoch:Qr(t.expires_at)?.getTime()??null,createdAtEpoch:De(t.created_at),updatedAtEpoch:De(t.updated_at)}}function bse(t){return{id:t.id,teamId:t.team_id,projectId:t.project_id,actorId:t.actor_id,apiKeyId:t.api_key_id,action:t.action,resourceType:t.resource_type,resourceId:t.resource_id,details:ht(t.details),createdAtEpoch:De(t.created_at)}}var Nt,Oi=R(()=>{"use strict";wn();Nt=class{constructor(e){this.client=e}client;async createApiKey(e){e.projectId&&e.teamId&&await Sn(this.client,e.projectId,e.teamId);let r=e.id??Ze(),n=await se(this.client,`
|
||
INSERT INTO api_keys (id, key_hash, team_id, project_id, actor_id, scopes, expires_at)
|
||
VALUES ($1, $2, $3, $4, $5, $6::jsonb, $7)
|
||
RETURNING *
|
||
`,[r,e.keyHash,e.teamId??null,e.projectId??null,e.actorId,JSON.stringify(e.scopes??[]),e.expiresAt??null]);return tN(n)}async createAuditLog(e){e.projectId&&e.teamId&&await Sn(this.client,e.projectId,e.teamId);let r=e.id??Ze(),n=await se(this.client,`
|
||
INSERT INTO audit_log (
|
||
id, team_id, project_id, actor_id, api_key_id, action,
|
||
resource_type, resource_id, details
|
||
)
|
||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb)
|
||
RETURNING *
|
||
`,[r,e.teamId??null,e.projectId??null,e.actorId??null,e.apiKeyId??null,e.action,e.resourceType,e.resourceId??null,JSON.stringify(e.details??{})]);return bse(n)}async getApiKeyByHash(e){let r=await se(this.client,"SELECT * FROM api_keys WHERE key_hash = $1",[e]);return r?tN(r):null}}});function fS(t){return`generation:v1:${t.generationJobId}:${t.parsedObservationIndex}:${xn([nu(t.content.trim())])}`}async function vse(t,e,r,n){if(!await se(t,"SELECT id FROM observation_generation_jobs WHERE id = $1 AND project_id = $2 AND team_id = $3",[e,r,n]))throw new Error("generation_job_id must belong to project_id and team_id")}async function Ese(t,e){if(e.sourceType==="manual")throw new Error("manual observation sources cannot be linked to a generation_job_id");let r=await se(t,`
|
||
SELECT id, source_type, source_id, agent_event_id
|
||
FROM observation_generation_jobs
|
||
WHERE id = $1 AND project_id = $2 AND team_id = $3
|
||
`,[e.generationJobId,e.projectId,e.teamId]);if(!r)throw new Error("generation_job_id must belong to project_id and team_id");if(r.source_type!==e.sourceType||r.source_id!==e.sourceId)throw new Error("generation_job_id source model must match observation source");if(e.sourceType==="agent_event"&&r.agent_event_id!==e.agentEventId)throw new Error("generation_job_id agent_event_id must match observation source")}async function Sse(t,e,r,n){if(!await se(t,"SELECT id FROM agent_events WHERE id = $1 AND project_id = $2 AND team_id = $3",[e,r,n]))throw new Error("agent_event_id must belong to project_id and team_id")}async function xse(t,e,r,n){if(!await se(t,"SELECT id FROM observations WHERE id = $1 AND project_id = $2 AND team_id = $3",[e,r,n]))throw new Error("observation_reindex source_id must belong to project_id and team_id")}function Pf(t){return{id:t.id,projectId:t.project_id,teamId:t.team_id,serverSessionId:t.server_session_id,kind:t.kind,content:t.content,generationKey:t.generation_key,metadata:ht(t.metadata),embedding:t.embedding,createdByJobId:t.created_by_job_id,createdAtEpoch:De(t.created_at),updatedAtEpoch:De(t.updated_at)}}function nN(t){return{id:t.id,observationId:t.observation_id,agentEventId:t.agent_event_id,generationJobId:t.generation_job_id,sourceType:t.source_type,sourceId:t.source_id,metadata:ht(t.metadata),createdAtEpoch:De(t.created_at)}}var Zr,xo,su=R(()=>{"use strict";wn();So();Zr=class{constructor(e){this.client=e}client;async create(e){await Sn(this.client,e.projectId,e.teamId),e.serverSessionId&&await Ri(this.client,e.serverSessionId,e.projectId,e.teamId),e.createdByJobId&&await vse(this.client,e.createdByJobId,e.projectId,e.teamId);let r=await se(this.client,`
|
||
INSERT INTO observations (
|
||
id, project_id, team_id, server_session_id, kind, content,
|
||
generation_key, metadata, embedding, created_by_job_id
|
||
)
|
||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8::jsonb, $9::jsonb, $10)
|
||
ON CONFLICT (team_id, project_id, generation_key) WHERE generation_key IS NOT NULL DO UPDATE SET
|
||
updated_at = observations.updated_at
|
||
RETURNING *
|
||
`,[e.id??Ze(),e.projectId,e.teamId,e.serverSessionId??null,e.kind??"observation",e.content,e.generationKey??null,JSON.stringify(e.metadata??{}),e.embedding==null?null:JSON.stringify(e.embedding),e.createdByJobId??null]);return Pf(r)}async getByIdForScope(e){let r=await se(this.client,"SELECT * FROM observations WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.id,e.projectId,e.teamId]);return r?Pf(r):null}async listByProject(e){return(await this.client.query(`
|
||
SELECT * FROM observations
|
||
WHERE project_id = $1
|
||
AND team_id = $2
|
||
AND ($3::text IS NULL OR server_session_id = $3)
|
||
ORDER BY created_at DESC
|
||
LIMIT $4
|
||
`,[e.projectId,e.teamId,e.serverSessionId??null,e.limit??100])).rows.map(Pf)}async search(e){let r=cr(e.platformSource);return(await this.client.query(`
|
||
SELECT observations.* FROM observations
|
||
LEFT JOIN server_sessions
|
||
ON server_sessions.id = observations.server_session_id
|
||
AND server_sessions.project_id = observations.project_id
|
||
AND server_sessions.team_id = observations.team_id
|
||
WHERE observations.project_id = $1
|
||
AND observations.team_id = $2
|
||
AND observations.content_search @@ websearch_to_tsquery('english', $3)
|
||
AND (
|
||
$5::text IS NULL
|
||
OR server_sessions.platform_source = $5
|
||
OR (
|
||
observations.server_session_id IS NULL
|
||
AND EXISTS (
|
||
SELECT 1
|
||
FROM observation_sources
|
||
INNER JOIN agent_events
|
||
ON agent_events.id = observation_sources.agent_event_id
|
||
AND agent_events.project_id = observations.project_id
|
||
AND agent_events.team_id = observations.team_id
|
||
WHERE observation_sources.observation_id = observations.id
|
||
AND observation_sources.source_type = 'agent_event'
|
||
AND agent_events.platform_source = $5
|
||
)
|
||
)
|
||
)
|
||
ORDER BY ts_rank(observations.content_search, websearch_to_tsquery('english', $3)) DESC, observations.updated_at DESC
|
||
LIMIT $4
|
||
`,[e.projectId,e.teamId,e.query,e.limit??20,r])).rows.map(Pf)}},xo=class{constructor(e){this.client=e}client;async addSource(e){if(!await se(this.client,"SELECT id FROM observations WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.observationId,e.projectId,e.teamId]))throw new Error("observation_id does not exist");let n=e.sourceType==="agent_event"?e.agentEventId??e.sourceId:null;if(e.sourceType==="agent_event"){if(n!==e.sourceId)throw new Error("agent_event source_id must equal agent_event_id");await Sse(this.client,e.sourceId,e.projectId,e.teamId)}else e.sourceType==="session_summary"&&!e.generationJobId?await Ri(this.client,e.sourceId,e.projectId,e.teamId):e.sourceType==="observation_reindex"&&!e.generationJobId&&await xse(this.client,e.sourceId,e.projectId,e.teamId);e.generationJobId&&await Ese(this.client,{generationJobId:e.generationJobId,projectId:e.projectId,teamId:e.teamId,sourceType:e.sourceType,sourceId:e.sourceId,agentEventId:n});let i=await se(this.client,`
|
||
INSERT INTO observation_sources (
|
||
id, observation_id, agent_event_id, generation_job_id,
|
||
source_type, source_id, metadata
|
||
)
|
||
VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb)
|
||
ON CONFLICT (observation_id, source_type, source_id) DO UPDATE SET
|
||
metadata = observation_sources.metadata || excluded.metadata
|
||
RETURNING *
|
||
`,[e.id??Ze(),e.observationId,n,e.generationJobId??null,e.sourceType,e.sourceId,JSON.stringify(e.metadata??{})]);return nN(i)}async listByObservationForScope(e){return(await this.client.query(`
|
||
SELECT observation_sources.*
|
||
FROM observation_sources
|
||
INNER JOIN observations
|
||
ON observations.id = observation_sources.observation_id
|
||
WHERE observation_sources.observation_id = $1
|
||
AND observations.project_id = $2
|
||
AND observations.team_id = $3
|
||
ORDER BY observation_sources.created_at ASC
|
||
`,[e.observationId,e.projectId,e.teamId])).rows.map(nN)}}});function iN(t){return{id:t.id,teamId:t.team_id,name:t.name,metadata:ht(t.metadata),createdAtEpoch:De(t.created_at),updatedAtEpoch:De(t.updated_at)}}var _n,Xa=R(()=>{"use strict";wn();_n=class{constructor(e){this.client=e}client;async create(e){let r=e.id??Ze(),n=await se(this.client,`
|
||
INSERT INTO projects (id, team_id, name, metadata)
|
||
VALUES ($1, $2, $3, $4::jsonb)
|
||
RETURNING *
|
||
`,[r,e.teamId,e.name,JSON.stringify(e.metadata??{})]);return iN(n)}async getByIdForTeam(e,r){let n=await se(this.client,"SELECT * FROM projects WHERE id = $1 AND team_id = $2",[e,r]);return n?iN(n):null}}});function wo(t,e={}){return async(r,n,i)=>{try{await wse(t,e,r,n,i)}catch(s){let o=s instanceof Error?s:new Error(String(s));x.warn("HTTP","postgres auth middleware failed",{path:r.path},o),i(s)}}}async function wse(t,e,r,n,i){let s=e.authMode??process.env.CLAUDE_MEM_AUTH_MODE??"api-key",o=r.header("authorization")??"",a=r.header("x-api-key")?.trim()??"",c=xf(o)||a||null,l=e.allowLocalDevBypass??process.env.CLAUDE_MEM_ALLOW_LOCAL_DEV_BYPASS==="1";if(!c&&s==="local-dev"&&l&&wf(r)&&cM(r)&&!_f(r)){let p={userId:null,organizationId:null,teamId:e.localDevTeamId??null,projectId:null,scopes:["local-dev"],apiKeyId:null,mode:"local-dev"};r.authContext=p,i();return}if(!c){n.status(401).json({error:"Unauthorized",message:"Missing API key (Authorization: Bearer <key> or X-Api-Key: <key>)"});return}let u=await _se(t,c,e.requiredScopes??[]);if(!u){n.status(403).json({error:"Forbidden",message:"Invalid API key or insufficient scope"});return}let d={userId:null,organizationId:null,teamId:u.teamId,projectId:u.projectId,scopes:u.scopes,apiKeyId:u.apiKeyId,mode:"api-key"};r.authContext=d,i()}async function _se(t,e,r){let n=(0,sN.createHash)("sha256").update(e).digest("hex"),s=(await t.query(`
|
||
SELECT id, team_id, project_id, scopes, revoked_at, expires_at
|
||
FROM api_keys
|
||
WHERE key_hash = $1
|
||
`,[n])).rows[0];if(!s||s.revoked_at||s.expires_at&&s.expires_at.getTime()<=Date.now())return null;let o=Ise(s.scopes);return Tse(o,r)?{apiKeyId:s.id,teamId:s.team_id,projectId:s.project_id,scopes:o}:null}function Ise(t){return Array.isArray(t)?t.filter(e=>typeof e=="string"):[]}function Tse(t,e){return e.length===0||t.includes("*")?!0:e.every(r=>t.includes(r))}var sN,Kf=R(()=>{"use strict";sN=require("crypto");GE();fe()});var hS=h(oN=>{"use strict";oN.parse=function(t,e){return new mS(t,e).parse()};var mS=class t{constructor(e,r){this.source=e,this.transform=r||kse,this.position=0,this.entries=[],this.recorded=[],this.dimension=0}isEof(){return this.position>=this.source.length}nextCharacter(){var e=this.source[this.position++];return e==="\\"?{value:this.source[this.position++],escaped:!0}:{value:e,escaped:!1}}record(e){this.recorded.push(e)}newEntry(e){var r;(this.recorded.length>0||e)&&(r=this.recorded.join(""),r==="NULL"&&!e&&(r=null),r!==null&&(r=this.transform(r)),this.entries.push(r),this.recorded=[])}consumeDimensions(){if(this.source[0]==="[")for(;!this.isEof();){var e=this.nextCharacter();if(e.value==="=")break}}parse(e){var r,n,i;for(this.consumeDimensions();!this.isEof();)if(r=this.nextCharacter(),r.value==="{"&&!i)this.dimension++,this.dimension>1&&(n=new t(this.source.substr(this.position-1),this.transform),this.entries.push(n.parse(!0)),this.position+=n.position-2);else if(r.value==="}"&&!i){if(this.dimension--,!this.dimension&&(this.newEntry(),e))return this.entries}else r.value==='"'&&!r.escaped?(i&&this.newEntry(!0),i=!i):r.value===","&&!i?this.newEntry():this.record(r.value);if(this.dimension!==0)throw new Error("array dimension not balanced");return this.entries}};function kse(t){return t}});var yS=h((bKe,aN)=>{var Ase=hS();aN.exports={create:function(t,e){return{parse:function(){return Ase.parse(t,e)}}}}});var uN=h((vKe,lN)=>{"use strict";var Rse=/(\d{1,})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(\.\d{1,})?.*?( BC)?$/,Ose=/^(\d{1,})-(\d{2})-(\d{2})( BC)?$/,Cse=/([Z+-])(\d{2})?:?(\d{2})?:?(\d{2})?/,jse=/^-?infinity$/;lN.exports=function(e){if(jse.test(e))return Number(e.replace("i","I"));var r=Rse.exec(e);if(!r)return Pse(e)||null;var n=!!r[8],i=parseInt(r[1],10);n&&(i=cN(i));var s=parseInt(r[2],10)-1,o=r[3],a=parseInt(r[4],10),c=parseInt(r[5],10),l=parseInt(r[6],10),u=r[7];u=u?1e3*parseFloat(u):0;var d,p=Kse(e);return p!=null?(d=new Date(Date.UTC(i,s,o,a,c,l,u)),gS(i)&&d.setUTCFullYear(i),p!==0&&d.setTime(d.getTime()-p)):(d=new Date(i,s,o,a,c,l,u),gS(i)&&d.setFullYear(i)),d};function Pse(t){var e=Ose.exec(t);if(e){var r=parseInt(e[1],10),n=!!e[4];n&&(r=cN(r));var i=parseInt(e[2],10)-1,s=e[3],o=new Date(r,i,s);return gS(r)&&o.setFullYear(r),o}}function Kse(t){if(t.endsWith("+00"))return 0;var e=Cse.exec(t.split(" ")[1]);if(e){var r=e[1];if(r==="Z")return 0;var n=r==="-"?-1:1,i=parseInt(e[2],10)*3600+parseInt(e[3]||0,10)*60+parseInt(e[4]||0,10);return i*n*1e3}}function cN(t){return-(t-1)}function gS(t){return t>=0&&t<100}});var pN=h((EKe,dN)=>{dN.exports=Mse;var Dse=Object.prototype.hasOwnProperty;function Mse(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Dse.call(r,n)&&(t[n]=r[n])}return t}});var hN=h((SKe,mN)=>{"use strict";var Nse=pN();mN.exports=Za;function Za(t){if(!(this instanceof Za))return new Za(t);Nse(this,Wse(t))}var Lse=["seconds","minutes","hours","days","months","years"];Za.prototype.toPostgres=function(){var t=Lse.filter(this.hasOwnProperty,this);return this.milliseconds&&t.indexOf("seconds")<0&&t.push("seconds"),t.length===0?"0":t.map(function(e){var r=this[e]||0;return e==="seconds"&&this.milliseconds&&(r=(r+this.milliseconds/1e3).toFixed(6).replace(/\.?0+$/,"")),r+" "+e},this).join(" ")};var qse={years:"Y",months:"M",days:"D",hours:"H",minutes:"M",seconds:"S"},Fse=["years","months","days"],$se=["hours","minutes","seconds"];Za.prototype.toISOString=Za.prototype.toISO=function(){var t=Fse.map(r,this).join(""),e=$se.map(r,this).join("");return"P"+t+"T"+e;function r(n){var i=this[n]||0;return n==="seconds"&&this.milliseconds&&(i=(i+this.milliseconds/1e3).toFixed(6).replace(/0+$/,"")),i+qse[n]}};var bS="([+-]?\\d+)",Use=bS+"\\s+years?",Jse=bS+"\\s+mons?",zse=bS+"\\s+days?",Gse="([+-])?([\\d]*):(\\d\\d):(\\d\\d)\\.?(\\d{1,6})?",Bse=new RegExp([Use,Jse,zse,Gse].map(function(t){return"("+t+")?"}).join("\\s*")),fN={years:2,months:4,days:6,hours:9,minutes:10,seconds:11,milliseconds:12},Hse=["hours","minutes","seconds","milliseconds"];function Vse(t){var e=t+"000000".slice(t.length);return parseInt(e,10)/1e3}function Wse(t){if(!t)return{};var e=Bse.exec(t),r=e[8]==="-";return Object.keys(fN).reduce(function(n,i){var s=fN[i],o=e[s];return!o||(o=i==="milliseconds"?Vse(o):parseInt(o,10),!o)||(r&&~Hse.indexOf(i)&&(o*=-1),n[i]=o),n},{})}});var bN=h((xKe,gN)=>{"use strict";var yN=Buffer.from||Buffer;gN.exports=function(e){if(/^\\x/.test(e))return yN(e.substr(2),"hex");for(var r="",n=0;n<e.length;)if(e[n]!=="\\")r+=e[n],++n;else if(/[0-7]{3}/.test(e.substr(n+1,3)))r+=String.fromCharCode(parseInt(e.substr(n+1,3),8)),n+=4;else{for(var i=1;n+i<e.length&&e[n+i]==="\\";)i++;for(var s=0;s<Math.floor(i/2);++s)r+="\\";n+=Math.floor(i/2)*2}return yN(r,"binary")}});var IN=h((wKe,_N)=>{var ou=hS(),au=yS(),Df=uN(),EN=hN(),SN=bN();function Mf(t){return function(r){return r===null?r:t(r)}}function xN(t){return t===null?t:t==="TRUE"||t==="t"||t==="true"||t==="y"||t==="yes"||t==="on"||t==="1"}function Yse(t){return t?ou.parse(t,xN):null}function Qse(t){return parseInt(t,10)}function vS(t){return t?ou.parse(t,Mf(Qse)):null}function Xse(t){return t?ou.parse(t,Mf(function(e){return wN(e).trim()})):null}var Zse=function(t){if(!t)return null;var e=au.create(t,function(r){return r!==null&&(r=wS(r)),r});return e.parse()},ES=function(t){if(!t)return null;var e=au.create(t,function(r){return r!==null&&(r=parseFloat(r)),r});return e.parse()},en=function(t){if(!t)return null;var e=au.create(t);return e.parse()},SS=function(t){if(!t)return null;var e=au.create(t,function(r){return r!==null&&(r=Df(r)),r});return e.parse()},eoe=function(t){if(!t)return null;var e=au.create(t,function(r){return r!==null&&(r=EN(r)),r});return e.parse()},toe=function(t){return t?ou.parse(t,Mf(SN)):null},xS=function(t){return parseInt(t,10)},wN=function(t){var e=String(t);return/^\d+$/.test(e)?e:t},vN=function(t){return t?ou.parse(t,Mf(JSON.parse)):null},wS=function(t){return t[0]!=="("?null:(t=t.substring(1,t.length-1).split(","),{x:parseFloat(t[0]),y:parseFloat(t[1])})},roe=function(t){if(t[0]!=="<"&&t[1]!=="(")return null;for(var e="(",r="",n=!1,i=2;i<t.length-1;i++){if(n||(e+=t[i]),t[i]===")"){n=!0;continue}else if(!n)continue;t[i]!==","&&(r+=t[i])}var s=wS(e);return s.radius=parseFloat(r),s},noe=function(t){t(20,wN),t(21,xS),t(23,xS),t(26,xS),t(700,parseFloat),t(701,parseFloat),t(16,xN),t(1082,Df),t(1114,Df),t(1184,Df),t(600,wS),t(651,en),t(718,roe),t(1e3,Yse),t(1001,toe),t(1005,vS),t(1007,vS),t(1028,vS),t(1016,Xse),t(1017,Zse),t(1021,ES),t(1022,ES),t(1231,ES),t(1014,en),t(1015,en),t(1008,en),t(1009,en),t(1040,en),t(1041,en),t(1115,SS),t(1182,SS),t(1185,SS),t(1186,EN),t(1187,eoe),t(17,SN),t(114,JSON.parse.bind(JSON)),t(3802,JSON.parse.bind(JSON)),t(199,vN),t(3807,vN),t(3907,en),t(2951,en),t(791,en),t(1183,en),t(1270,en)};_N.exports={init:noe}});var kN=h((_Ke,TN)=>{"use strict";var br=1e6;function ioe(t){var e=t.readInt32BE(0),r=t.readUInt32BE(4),n="";e<0&&(e=~e+(r===0),r=~r+1>>>0,n="-");var i="",s,o,a,c,l,u;{if(s=e%br,e=e/br>>>0,o=4294967296*s+r,r=o/br>>>0,a=""+(o-br*r),r===0&&e===0)return n+a+i;for(c="",l=6-a.length,u=0;u<l;u++)c+="0";i=c+a+i}{if(s=e%br,e=e/br>>>0,o=4294967296*s+r,r=o/br>>>0,a=""+(o-br*r),r===0&&e===0)return n+a+i;for(c="",l=6-a.length,u=0;u<l;u++)c+="0";i=c+a+i}{if(s=e%br,e=e/br>>>0,o=4294967296*s+r,r=o/br>>>0,a=""+(o-br*r),r===0&&e===0)return n+a+i;for(c="",l=6-a.length,u=0;u<l;u++)c+="0";i=c+a+i}return s=e%br,o=4294967296*s+r,a=""+o%br,n+a+i}TN.exports=ioe});var jN=h((IKe,CN)=>{var soe=kN(),it=function(t,e,r,n,i){r=r||0,n=n||!1,i=i||function(f,m,y){return f*Math.pow(2,y)+m};var s=r>>3,o=function(f){return n?~f&255:f},a=255,c=8-r%8;e<c&&(a=255<<8-e&255,c=e),r&&(a=a>>r%8);var l=0;r%8+e>=8&&(l=i(0,o(t[s])&a,c));for(var u=e+r>>3,d=s+1;d<u;d++)l=i(l,o(t[d]),8);var p=(e+r)%8;return p>0&&(l=i(l,o(t[u])>>8-p,p)),l},ON=function(t,e,r){var n=Math.pow(2,r-1)-1,i=it(t,1),s=it(t,r,1);if(s===0)return 0;var o=1,a=function(l,u,d){l===0&&(l=1);for(var p=1;p<=d;p++)o/=2,(u&1<<d-p)>0&&(l+=o);return l},c=it(t,e,r+1,!1,a);return s==Math.pow(2,r+1)-1?c===0?i===0?1/0:-1/0:NaN:(i===0?1:-1)*Math.pow(2,s-n)*c},ooe=function(t){return it(t,1)==1?-1*(it(t,15,1,!0)+1):it(t,15,1)},AN=function(t){return it(t,1)==1?-1*(it(t,31,1,!0)+1):it(t,31,1)},aoe=function(t){return ON(t,23,8)},coe=function(t){return ON(t,52,11)},loe=function(t){var e=it(t,16,32);if(e==49152)return NaN;for(var r=Math.pow(1e4,it(t,16,16)),n=0,i=[],s=it(t,16),o=0;o<s;o++)n+=it(t,16,64+16*o)*r,r/=1e4;var a=Math.pow(10,it(t,16,48));return(e===0?1:-1)*Math.round(n*a)/a},RN=function(t,e){var r=it(e,1),n=it(e,63,1),i=new Date((r===0?1:-1)*n/1e3+9466848e5);return t||i.setTime(i.getTime()+i.getTimezoneOffset()*6e4),i.usec=n%1e3,i.getMicroSeconds=function(){return this.usec},i.setMicroSeconds=function(s){this.usec=s},i.getUTCMicroSeconds=function(){return this.usec},i},cu=function(t){for(var e=it(t,32),r=it(t,32,32),n=it(t,32,64),i=96,s=[],o=0;o<e;o++)s[o]=it(t,32,i),i+=32,i+=32;var a=function(l){var u=it(t,32,i);if(i+=32,u==4294967295)return null;var d;if(l==23||l==20)return d=it(t,u*8,i),i+=u*8,d;if(l==25)return d=t.toString(this.encoding,i>>3,(i+=u<<3)>>3),d;console.log("ERROR: ElementType not implemented: "+l)},c=function(l,u){var d=[],p;if(l.length>1){var f=l.shift();for(p=0;p<f;p++)d[p]=c(l,u);l.unshift(f)}else for(p=0;p<l[0];p++)d[p]=a(u);return d};return c(s,n)},uoe=function(t){return t.toString("utf8")},doe=function(t){return t===null?null:it(t,8)>0},poe=function(t){t(20,soe),t(21,ooe),t(23,AN),t(26,AN),t(1700,loe),t(700,aoe),t(701,coe),t(16,doe),t(1114,RN.bind(null,!1)),t(1184,RN.bind(null,!0)),t(1e3,cu),t(1007,cu),t(1016,cu),t(1008,cu),t(1009,cu),t(25,uoe)};CN.exports={init:poe}});var KN=h((TKe,PN)=>{PN.exports={BOOL:16,BYTEA:17,CHAR:18,INT8:20,INT2:21,INT4:23,REGPROC:24,TEXT:25,OID:26,TID:27,XID:28,CID:29,JSON:114,XML:142,PG_NODE_TREE:194,SMGR:210,PATH:602,POLYGON:604,CIDR:650,FLOAT4:700,FLOAT8:701,ABSTIME:702,RELTIME:703,TINTERVAL:704,CIRCLE:718,MACADDR8:774,MONEY:790,MACADDR:829,INET:869,ACLITEM:1033,BPCHAR:1042,VARCHAR:1043,DATE:1082,TIME:1083,TIMESTAMP:1114,TIMESTAMPTZ:1184,INTERVAL:1186,TIMETZ:1266,BIT:1560,VARBIT:1562,NUMERIC:1700,REFCURSOR:1790,REGPROCEDURE:2202,REGOPER:2203,REGOPERATOR:2204,REGCLASS:2205,REGTYPE:2206,UUID:2950,TXID_SNAPSHOT:2970,PG_LSN:3220,PG_NDISTINCT:3361,PG_DEPENDENCIES:3402,TSVECTOR:3614,TSQUERY:3615,GTSVECTOR:3642,REGCONFIG:3734,REGDICTIONARY:3769,JSONB:3802,REGNAMESPACE:4089,REGROLE:4096}});var du=h(uu=>{var foe=IN(),moe=jN(),hoe=yS(),yoe=KN();uu.getTypeParser=goe;uu.setTypeParser=boe;uu.arrayParser=hoe;uu.builtins=yoe;var lu={text:{},binary:{}};function DN(t){return String(t)}function goe(t,e){return e=e||"text",lu[e]&&lu[e][t]||DN}function boe(t,e,r){typeof e=="function"&&(r=e,e="text"),lu[e][t]=r}foe.init(function(t,e){lu.text[t]=e});moe.init(function(t,e){lu.binary[t]=e})});var pu=h((AKe,_S)=>{"use strict";var MN;try{MN=process.platform==="win32"?process.env.USERNAME:process.env.USER}catch{}_S.exports={host:"localhost",user:MN,database:void 0,password:null,connectionString:void 0,port:5432,rows:0,binary:!1,max:10,idleTimeoutMillis:3e4,client_encoding:"",ssl:!1,sslnegotiation:void 0,application_name:void 0,fallback_application_name:void 0,options:void 0,parseInputDatesAsUTC:!1,statement_timeout:!1,lock_timeout:!1,idle_in_transaction_session_timeout:!1,query_timeout:!1,connect_timeout:0,keepalives:1,keepalives_idle:0};var ec=du(),voe=ec.getTypeParser(20,"text"),Eoe=ec.getTypeParser(1016,"text");_S.exports.__defineSetter__("parseInt8",function(t){ec.setTypeParser(20,"text",t?ec.getTypeParser(23,"text"):voe),ec.setTypeParser(1016,"text",t?ec.getTypeParser(1007,"text"):Eoe)})});var _o=h((RKe,LN)=>{"use strict";var Soe=pu(),{isDate:xoe}=require("util/types");function woe(t){return'"'+t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}function NN(t){let e="{";for(let r=0;r<t.length;r++){r>0&&(e+=",");let n=t[r];n==null?e+="NULL":Array.isArray(n)?e+=NN(n):ArrayBuffer.isView(n)?(n instanceof Buffer||(n=Buffer.from(n.buffer,n.byteOffset,n.byteLength)),e+="\\\\x"+n.toString("hex")):e+=woe(Nf(n))}return e+="}",e}var Nf=function(t,e){return t==null?null:typeof t=="object"?t instanceof Buffer?t:ArrayBuffer.isView(t)?Buffer.from(t.buffer,t.byteOffset,t.byteLength):xoe(t)?Soe.parseInputDatesAsUTC?Toe(t):Ioe(t):Array.isArray(t)?NN(t):_oe(t,e):t.toString()};function _oe(t,e){if(t&&typeof t.toPostgres=="function"){if(e=e||[],e.indexOf(t)!==-1)throw new Error('circular reference detected while preparing "'+t+'" for query');return e.push(t),Nf(t.toPostgres(Nf),e)}return JSON.stringify(t)}function Ioe(t){let e=-t.getTimezoneOffset(),r=t.getFullYear(),n=r<1;n&&(r=Math.abs(r)+1);let i=String(r).padStart(4,"0")+"-"+String(t.getMonth()+1).padStart(2,"0")+"-"+String(t.getDate()).padStart(2,"0")+"T"+String(t.getHours()).padStart(2,"0")+":"+String(t.getMinutes()).padStart(2,"0")+":"+String(t.getSeconds()).padStart(2,"0")+"."+String(t.getMilliseconds()).padStart(3,"0");return e<0?(i+="-",e*=-1):i+="+",i+=String(Math.floor(e/60)).padStart(2,"0")+":"+String(e%60).padStart(2,"0"),n&&(i+=" BC"),i}function Toe(t){let e=t.getUTCFullYear(),r=e<1;r&&(e=Math.abs(e)+1);let n=String(e).padStart(4,"0")+"-"+String(t.getUTCMonth()+1).padStart(2,"0")+"-"+String(t.getUTCDate()).padStart(2,"0")+"T"+String(t.getUTCHours()).padStart(2,"0")+":"+String(t.getUTCMinutes()).padStart(2,"0")+":"+String(t.getUTCSeconds()).padStart(2,"0")+"."+String(t.getUTCMilliseconds()).padStart(3,"0");return n+="+00:00",r&&(n+=" BC"),n}function koe(t,e,r){return t=typeof t=="string"?{text:t}:t,e&&(typeof e=="function"?t.callback=e:t.values=e),r&&(t.callback=r),t}var Aoe=function(t){return'"'+t.replace(/"/g,'""')+'"'},Roe=function(t){let e=!1,r="'";if(t==null||typeof t!="string")return"''";for(let n=0;n<t.length;n++){let i=t[n];i==="'"?r+=i+i:i==="\\"?(r+=i+i,e=!0):r+=i}return r+="'",e===!0&&(r=" E"+r),r};LN.exports={prepareValue:function(e){return Nf(e)},normalizeQueryConfig:koe,escapeIdentifier:Aoe,escapeLiteral:Roe}});var kS=h((OKe,$N)=>{var qN=require("crypto");$N.exports={postgresMd5PasswordHash:Coe,randomBytes:Ooe,deriveKey:Doe,sha256:joe,hashByName:Poe,hmacSha256:Koe,md5:IS};var FN=qN.webcrypto||globalThis.crypto,Io=FN.subtle,TS=new TextEncoder;function Ooe(t){return FN.getRandomValues(Buffer.alloc(t))}async function IS(t){try{return qN.createHash("md5").update(t,"utf-8").digest("hex")}catch{let r=typeof t=="string"?TS.encode(t):t,n=await Io.digest("MD5",r);return Array.from(new Uint8Array(n)).map(i=>i.toString(16).padStart(2,"0")).join("")}}async function Coe(t,e,r){let n=await IS(e+t);return"md5"+await IS(Buffer.concat([Buffer.from(n),r]))}async function joe(t){return await Io.digest("SHA-256",t)}async function Poe(t,e){return await Io.digest(t,e)}async function Koe(t,e){let r=await Io.importKey("raw",t,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return await Io.sign("HMAC",r,TS.encode(e))}async function Doe(t,e,r){let n=await Io.importKey("raw",TS.encode(t),"PBKDF2",!1,["deriveBits"]),i={name:"PBKDF2",hash:"SHA-256",salt:e,iterations:r};return await Io.deriveBits(i,n,256,["deriveBits"])}});var zN=h((CKe,JN)=>{function To(t,e){return new Error("SASL channel binding: "+t+" when parsing public certificate "+e.toString("base64"))}function AS(t,e){let r=t[e++];if(r<128)return{length:r,index:e};let n=r&127;if(n>4)throw To("bad length",t);r=0;for(let i=0;i<n;i++)r=r<<8|t[e++];return{length:r,index:e}}function UN(t,e){if(t[e++]!==6)throw To("non-OID data",t);let{length:r,index:n}=AS(t,e);e=n;let i=e+r,s=t[e++],o=(s/40>>0)+"."+s%40;for(;e<i;){let a=0;for(;e<i;){let c=t[e++];if(a=a<<7|c&127,c<128)break}o+="."+a}return{oid:o,index:e}}function fu(t,e){if(t[e++]!==48)throw To("non-sequence data",t);return AS(t,e)}function Moe(t,e){e===void 0&&(e=0),e=fu(t,e).index;let{length:r,index:n}=fu(t,e);e=n+r,e=fu(t,e).index;let{oid:i,index:s}=UN(t,e);switch(i){case"1.2.840.113549.1.1.4":return"MD5";case"1.2.840.113549.1.1.5":return"SHA-1";case"1.2.840.113549.1.1.11":return"SHA-256";case"1.2.840.113549.1.1.12":return"SHA-384";case"1.2.840.113549.1.1.13":return"SHA-512";case"1.2.840.113549.1.1.14":return"SHA-224";case"1.2.840.113549.1.1.15":return"SHA512-224";case"1.2.840.113549.1.1.16":return"SHA512-256";case"1.2.840.10045.4.1":return"SHA-1";case"1.2.840.10045.4.3.1":return"SHA-224";case"1.2.840.10045.4.3.2":return"SHA-256";case"1.2.840.10045.4.3.3":return"SHA-384";case"1.2.840.10045.4.3.4":return"SHA-512";case"1.2.840.113549.1.1.10":{if(e=s,e=fu(t,e).index,t[e++]!==160)throw To("non-tag data",t);e=AS(t,e).index,e=fu(t,e).index;let{oid:o}=UN(t,e);switch(o){case"1.2.840.113549.2.5":return"MD5";case"1.3.14.3.2.26":return"SHA-1";case"2.16.840.1.101.3.4.2.1":return"SHA-256";case"2.16.840.1.101.3.4.2.2":return"SHA-384";case"2.16.840.1.101.3.4.2.3":return"SHA-512"}throw To("unknown hash OID "+o,t)}case"1.3.101.110":case"1.3.101.112":return"SHA-512";case"1.3.101.111":case"1.3.101.113":throw To("Ed448 certificate channel binding is not currently supported by Postgres")}throw To("unknown OID "+i,t)}JN.exports={signatureAlgorithmHashFromCertificate:Moe}});var VN=h((jKe,HN)=>{"use strict";var ms=kS(),{signatureAlgorithmHashFromCertificate:Noe}=zN();function Loe(t){let e=/[\u00A0\u1680\u2000-\u200B\u202F\u205F\u3000]/g,r=/[\u00AD\u034F\u1806\u180B\u180C\u180D\u200C\u200D\u2060\uFE00-\uFE0F\uFEFF]/g;return t.replace(e," ").replace(r,"").normalize("NFKC")}var RS=1e5;function qoe(t,e,r=RS){let n=["SCRAM-SHA-256"];e&&n.unshift("SCRAM-SHA-256-PLUS");let i=n.find(a=>t.includes(a));if(!i)throw new Error("SASL: Only mechanism(s) "+n.join(" and ")+" are supported");if(i==="SCRAM-SHA-256-PLUS"&&typeof e.getPeerCertificate!="function")throw new Error("SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate");let s=ms.randomBytes(18).toString("base64");return{mechanism:i,clientNonce:s,response:(i==="SCRAM-SHA-256-PLUS"?"p=tls-server-end-point":e?"y":"n")+",,n=*,r="+s,message:"SASLInitialResponse",scramMaxIterations:r}}async function Foe(t,e,r,n){if(t.message!=="SASLInitialResponse")throw new Error("SASL: Last message was not SASLInitialResponse");if(typeof e!="string")throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string");if(e==="")throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string");if(typeof r!="string")throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string");let i=Joe(r);if(i.nonce.startsWith(t.clientNonce)){if(i.nonce.length===t.clientNonce.length)throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce");let s=typeof t.scramMaxIterations=="number"?t.scramMaxIterations:RS;if(s!==0&&i.iteration>s)throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration count "+i.iteration+" exceeds scramMaxIterations of "+s);let o="n=*,r="+t.clientNonce,a="r="+i.nonce+",s="+i.salt+",i="+i.iteration,c=n?"eSws":"biws";if(t.mechanism==="SCRAM-SHA-256-PLUS"){let S=n.getPeerCertificate().raw,k=Noe(S);(k==="MD5"||k==="SHA-1")&&(k="SHA-256");let _=await ms.hashByName(k,S);c=Buffer.concat([Buffer.from("p=tls-server-end-point,,"),Buffer.from(_)]).toString("base64")}let l="c="+c+",r="+i.nonce,u=o+","+a+","+l,d=Buffer.from(i.salt,"base64"),p=await ms.deriveKey(Loe(e),d,i.iteration),f=await ms.hmacSha256(p,"Client Key"),m=await ms.sha256(f),y=await ms.hmacSha256(m,u),b=Goe(Buffer.from(f),Buffer.from(y)).toString("base64"),v=await ms.hmacSha256(p,"Server Key"),E=await ms.hmacSha256(v,u);t.message="SASLResponse",t.serverSignature=Buffer.from(E).toString("base64"),t.response=l+",p="+b}function $oe(t,e){if(t.message!=="SASLResponse")throw new Error("SASL: Last message was not SASLResponse");if(typeof e!="string")throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string");let{serverSignature:r}=zoe(e);if(r!==t.serverSignature)throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match")}function Uoe(t){if(typeof t!="string")throw new TypeError("SASL: text must be a string");return t.split("").map((e,r)=>t.charCodeAt(r)).every(e=>e>=33&&e<=43||e>=45&&e<=126)}function GN(t){return/^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(t)}function BN(t){if(typeof t!="string")throw new TypeError("SASL: attribute pairs text must be a string");return new Map(t.split(",").map(e=>{if(!/^.=/.test(e))throw new Error("SASL: Invalid attribute pair entry");let r=e[0],n=e.substring(2);return[r,n]}))}function Joe(t){let e=BN(t),r=e.get("r");if(r){if(!Uoe(r))throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing");let n=e.get("s");if(n){if(!GN(n))throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing");let i=e.get("i");if(i){if(!/^[1-9][0-9]*$/.test(i))throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing");let s=parseInt(i,10);return{nonce:r,salt:n,iteration:s}}function zoe(t){let e=BN(t),r=e.get("e"),n=e.get("v");if(r)throw new Error(`SASL: SCRAM-SERVER-FINAL-MESSAGE: server returned error: "${r}"`);if(n){if(!GN(n))throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64")}else throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing");return{serverSignature:n}}function Goe(t,e){if(!Buffer.isBuffer(t))throw new TypeError("first argument must be a Buffer");if(!Buffer.isBuffer(e))throw new TypeError("second argument must be a Buffer");if(t.length!==e.length)throw new Error("Buffer lengths must match");if(t.length===0)throw new Error("Buffers cannot be empty");return Buffer.from(t.map((r,n)=>t[n]^e[n]))}HN.exports={startSession:qoe,continueSession:Foe,finalizeSession:$oe,DEFAULT_MAX_SCRAM_ITERATIONS:RS}});var qf=h((PKe,WN)=>{"use strict";var Boe=du();function Lf(t){this._types=t||Boe,this.text={},this.binary={}}Lf.prototype.getOverrides=function(t){switch(t){case"text":return this.text;case"binary":return this.binary;default:return{}}};Lf.prototype.setTypeParser=function(t,e,r){typeof e=="function"&&(r=e,e="text"),this.getOverrides(e)[t]=r};Lf.prototype.getTypeParser=function(t,e){return e=e||"text",this.getOverrides(e)[t]||this._types.getTypeParser(t,e)};WN.exports=Lf});var XN=h((KKe,QN)=>{"use strict";function tc(t,e={}){if(t.charAt(0)==="/"){let c=t.split(" ");return{host:c[0],database:c[1]}}let r=Object.create(null),n,i=!1;/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(t)&&(t=encodeURI(t).replace(/%25(\d\d)/g,"%$1"));try{try{n=new URL(t,"postgres://base")}catch{n=new URL(t.replace("@/","@___DUMMY___/"),"postgres://base"),i=!0}}catch(c){throw c.input&&(c.input="*****REDACTED*****"),c}for(let c of n.searchParams.entries())r[c[0]]=c[1];if(r.user=r.user||decodeURIComponent(n.username),r.password=r.password||decodeURIComponent(n.password),n.protocol=="socket:")return r.host=decodeURI(n.pathname),r.database=n.searchParams.get("db"),r.client_encoding=n.searchParams.get("encoding"),r;let s=i?"":n.hostname;r.host?s&&/^%2f/i.test(s)&&(n.pathname=s+n.pathname):r.host=decodeURIComponent(s),r.port||(r.port=n.port);let o=n.pathname.slice(1)||null;r.database=o?decodeURI(o):null,(r.ssl==="true"||r.ssl==="1")&&(r.ssl=!0),r.ssl==="0"&&(r.ssl=!1),(r.sslcert||r.sslkey||r.sslrootcert||r.sslmode)&&(r.ssl={}),r.sslnegotiation==="direct"&&r.ssl===void 0&&(r.ssl=!0);let a=r.sslcert||r.sslkey||r.sslrootcert?require("fs"):null;if(r.sslcert&&(r.ssl.cert=a.readFileSync(r.sslcert).toString()),r.sslkey&&(r.ssl.key=a.readFileSync(r.sslkey).toString()),r.sslrootcert&&(r.ssl.ca=a.readFileSync(r.sslrootcert).toString()),e.useLibpqCompat&&r.uselibpqcompat)throw new Error("Both useLibpqCompat and uselibpqcompat are set. Please use only one of them.");if(r.uselibpqcompat==="true"||e.useLibpqCompat)switch(r.sslmode){case"disable":{r.ssl=!1;break}case"prefer":{r.ssl.rejectUnauthorized=!1;break}case"require":{r.sslrootcert?r.ssl.checkServerIdentity=function(){}:r.ssl.rejectUnauthorized=!1;break}case"verify-ca":{if(!r.ssl.ca)throw new Error("SECURITY WARNING: Using sslmode=verify-ca requires specifying a CA with sslrootcert. If a public CA is used, verify-ca allows connections to a server that somebody else may have registered with the CA, making you vulnerable to Man-in-the-Middle attacks. Either specify a custom CA certificate with sslrootcert parameter or use sslmode=verify-full for proper security.");r.ssl.checkServerIdentity=function(){};break}case"verify-full":break}else switch(r.sslmode){case"disable":{r.ssl=!1;break}case"prefer":case"require":case"verify-ca":case"verify-full":{r.sslmode!=="verify-full"&&OS(r.sslmode);break}case"no-verify":{r.ssl.rejectUnauthorized=!1;break}}return r}function Hoe(t){return Object.entries(t).reduce((r,[n,i])=>(i!=null&&(r[n]=i),r),Object.create(null))}function YN(t){return Object.entries(t).reduce((r,[n,i])=>{if(n==="ssl"){let s=i;typeof s=="boolean"&&(r[n]=s),typeof s=="object"&&(r[n]=Hoe(s))}else if(i!=null)if(n==="port"){if(i!==""){let s=parseInt(i,10);if(isNaN(s))throw new Error(`Invalid ${n}: ${i}`);r[n]=s}}else r[n]=i;return r},Object.create(null))}function Voe(t){return YN(tc(t))}function OS(t){!OS.warned&&typeof process<"u"&&process.emitWarning&&(OS.warned=!0,process.emitWarning(`SECURITY WARNING: The SSL modes 'prefer', 'require', and 'verify-ca' are treated as aliases for 'verify-full'.
|
||
In the next major version (pg-connection-string v3.0.0 and pg v9.0.0), these modes will adopt standard libpq semantics, which have weaker security guarantees.
|
||
|
||
To prepare for this change:
|
||
- If you want the current behavior, explicitly use 'sslmode=verify-full'
|
||
- If you want libpq compatibility now, use 'uselibpqcompat=true&sslmode=${t}'
|
||
|
||
See https://www.postgresql.org/docs/current/libpq-ssl.html for libpq SSL mode definitions.`))}QN.exports=tc;tc.parse=tc;tc.toClientConfig=YN;tc.parseIntoClientConfig=Voe});var jS=h((DKe,tL)=>{"use strict";var Woe=require("dns"),eL=pu(),ZN=XN().parse,Yt=function(t,e,r){return e[t]?e[t]:(r===void 0?r=process.env["PG"+t.toUpperCase()]:r===!1||(r=process.env[r]),r||eL[t])},Yoe=function(){switch(process.env.PGSSLMODE){case"disable":return!1;case"prefer":case"require":case"verify-ca":case"verify-full":return!0;case"no-verify":return{rejectUnauthorized:!1}}return eL.ssl},rc=function(t){return"'"+(""+t).replace(/\\/g,"\\\\").replace(/'/g,"\\'")+"'"},Or=function(t,e,r){let n=e[r];n!=null&&t.push(r+"="+rc(n))},CS=class{constructor(e){if(e=typeof e=="string"?ZN(e):e||{},e.connectionString&&(e=Object.assign({},e,ZN(e.connectionString))),this.user=Yt("user",e),this.database=Yt("database",e),this.database===void 0&&(this.database=this.user),this.port=parseInt(Yt("port",e),10),this.host=Yt("host",e),Object.defineProperty(this,"password",{configurable:!0,enumerable:!1,writable:!0,value:Yt("password",e)}),this.binary=Yt("binary",e),this.options=Yt("options",e),this.ssl=typeof e.ssl>"u"?Yoe():e.ssl,typeof this.ssl=="string"&&this.ssl==="true"&&(this.ssl=!0),this.ssl==="no-verify"&&(this.ssl={rejectUnauthorized:!1}),this.ssl&&this.ssl.key&&Object.defineProperty(this.ssl,"key",{enumerable:!1}),this.sslnegotiation=Yt("sslnegotiation",e,"PGSSLNEGOTIATION"),this.sslnegotiation!==void 0&&this.sslnegotiation!=="postgres"&&this.sslnegotiation!=="direct")throw new Error(`Invalid sslnegotiation value: "${this.sslnegotiation}". Valid values are "postgres" and "direct".`);if(this.sslnegotiation==="direct"&&!this.ssl)throw new Error("sslnegotiation=direct requires SSL to be enabled");this.client_encoding=Yt("client_encoding",e),this.replication=Yt("replication",e),this.isDomainSocket=!(this.host||"").indexOf("/"),this.application_name=Yt("application_name",e,"PGAPPNAME"),this.fallback_application_name=Yt("fallback_application_name",e,!1),this.statement_timeout=Yt("statement_timeout",e,!1),this.lock_timeout=Yt("lock_timeout",e,!1),this.idle_in_transaction_session_timeout=Yt("idle_in_transaction_session_timeout",e,!1),this.query_timeout=Yt("query_timeout",e,!1),e.connectionTimeoutMillis===void 0?this.connect_timeout=process.env.PGCONNECT_TIMEOUT||0:this.connect_timeout=Math.floor(e.connectionTimeoutMillis/1e3),e.keepAlive===!1?this.keepalives=0:e.keepAlive===!0&&(this.keepalives=1),typeof e.keepAliveInitialDelayMillis=="number"&&(this.keepalives_idle=Math.floor(e.keepAliveInitialDelayMillis/1e3))}getLibpqConnectionString(e){let r=[];Or(r,this,"user"),Or(r,this,"password"),Or(r,this,"port"),Or(r,this,"application_name"),Or(r,this,"fallback_application_name"),Or(r,this,"connect_timeout"),Or(r,this,"options");let n=typeof this.ssl=="object"?this.ssl:this.ssl?{sslmode:this.ssl}:{};if(Or(r,n,"sslmode"),Or(r,n,"sslca"),Or(r,n,"sslkey"),Or(r,n,"sslcert"),Or(r,n,"sslrootcert"),Or(r,this,"sslnegotiation"),this.database&&r.push("dbname="+rc(this.database)),this.replication&&r.push("replication="+rc(this.replication)),this.host&&r.push("host="+rc(this.host)),this.isDomainSocket)return e(null,r.join(" "));this.client_encoding&&r.push("client_encoding="+rc(this.client_encoding)),Woe.lookup(this.host,function(i,s){return i?e(i,null):(r.push("hostaddr="+rc(s)),e(null,r.join(" ")))})}};tL.exports=CS});var KS=h((MKe,nL)=>{"use strict";var Qoe=du(),rL=/^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/,PS=class{constructor(e,r){this.command=null,this.rowCount=null,this.oid=null,this.rows=[],this.fields=[],this._parsers=void 0,this._types=r,this.RowCtor=null,this.rowAsArray=e==="array",this.rowAsArray&&(this.parseRow=this._parseRowAsArray),this._prebuiltEmptyResultObject=null}addCommandComplete(e){let r;e.text?r=rL.exec(e.text):r=rL.exec(e.command),r&&(this.command=r[1],r[3]?(this.oid=parseInt(r[2],10),this.rowCount=parseInt(r[3],10)):r[2]&&(this.rowCount=parseInt(r[2],10)))}_parseRowAsArray(e){let r=new Array(e.length);for(let n=0,i=e.length;n<i;n++){let s=e[n];s!==null?r[n]=this._parsers[n](s):r[n]=null}return r}parseRow(e){let r={...this._prebuiltEmptyResultObject};for(let n=0,i=e.length;n<i;n++){let s=e[n],o=this.fields[n].name;if(s!==null){let a=this.fields[n].format==="binary"?Buffer.from(s):s;r[o]=this._parsers[n](a)}else r[o]=null}return r}addRow(e){this.rows.push(e)}addFields(e){this.fields=e,this.fields.length&&(this._parsers=new Array(e.length));let r=Object.create(null);for(let n=0;n<e.length;n++){let i=e[n];r[i.name]=null,this._types?this._parsers[n]=this._types.getTypeParser(i.dataTypeID,i.format||"text"):this._parsers[n]=Qoe.getTypeParser(i.dataTypeID,i.format||"text")}this._prebuiltEmptyResultObject={...r}}};nL.exports=PS});var aL=h((NKe,oL)=>{"use strict";var{EventEmitter:Xoe}=require("events"),iL=KS(),sL=_o(),DS=class extends Xoe{constructor(e,r,n){super(),e=sL.normalizeQueryConfig(e,r,n),this.text=e.text,this.values=e.values,this.rows=e.rows,this.types=e.types,this.name=e.name,this.queryMode=e.queryMode,this.binary=e.binary,this.portal=e.portal||"",this.callback=e.callback,this._rowMode=e.rowMode,process.domain&&e.callback&&(this.callback=process.domain.bind(e.callback)),this._result=new iL(this._rowMode,this.types),this._results=this._result,this._canceledDueToError=!1}requiresPreparation(){return this.queryMode==="extended"||this.name||this.rows?!0:!this.text||!this.values?!1:this.values.length>0}_checkForMultirow(){this._result.command&&(Array.isArray(this._results)||(this._results=[this._result]),this._result=new iL(this._rowMode,this._result._types),this._results.push(this._result))}handleRowDescription(e){this._checkForMultirow(),this._result.addFields(e.fields),this._accumulateRows=this.callback||!this.listeners("row").length}handleDataRow(e){let r;if(!this._canceledDueToError){try{r=this._result.parseRow(e.fields)}catch(n){this._canceledDueToError=n;return}this.emit("row",r,this._result),this._accumulateRows&&this._result.addRow(r)}}handleCommandComplete(e,r){this._checkForMultirow(),this._result.addCommandComplete(e),this.rows&&r.sync()}handleEmptyQuery(e){this.rows&&e.sync()}handleError(e,r){if(this._canceledDueToError&&(e=this._canceledDueToError,this._canceledDueToError=!1),this.callback)return this.callback(e);this.emit("error",e)}handleReadyForQuery(e){if(this._canceledDueToError)return this.handleError(this._canceledDueToError,e);if(this.callback)try{this.callback(null,this._results)}catch(r){process.nextTick(()=>{throw r})}this.emit("end",this._results)}submit(e){if(typeof this.text!="string"&&typeof this.name!="string")return new Error("A query must have either text or a name. Supplying neither is unsupported.");let r=e.parsedStatements[this.name]||e.submittedNamedStatements[this.name];if(this.text&&r&&this.text!==r)return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`);if(this.values&&!Array.isArray(this.values))return new Error("Query values must be an array");if(this.requiresPreparation()){e.stream.cork&&e.stream.cork();try{this.prepare(e)}finally{e.stream.uncork&&e.stream.uncork()}}else e.query(this.text);return null}hasBeenParsed(e){return this.name&&(e.parsedStatements[this.name]||e.submittedNamedStatements[this.name])}handlePortalSuspended(e){this._getRows(e,this.rows)}_getRows(e,r){e.execute({portal:this.portal,rows:r}),r?e.flush():e.sync()}prepare(e){this.hasBeenParsed(e)||(e.parse({text:this.text,name:this.name,types:this.types}),this.name&&(e.submittedNamedStatements[this.name]=this.text));try{e.bind({portal:this.portal,statement:this.name,values:this.values,binary:this.binary,valueMapper:sL.prepareValue})}catch(r){e.close({type:"S",name:this.name}),e.sync(),this.handleError(r,e);return}e.describe({type:"P",name:this.portal||""}),this._getRows(e,this.rows)}handleCopyInResponse(e){e.sendCopyFail("No source stream defined")}handleCopyData(e,r){}};oL.exports=DS});var YS=h(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.NoticeMessage=X.DataRowMessage=X.CommandCompleteMessage=X.ReadyForQueryMessage=X.NotificationResponseMessage=X.BackendKeyDataMessage=X.AuthenticationMD5Password=X.ParameterStatusMessage=X.ParameterDescriptionMessage=X.RowDescriptionMessage=X.Field=X.CopyResponse=X.CopyDataMessage=X.DatabaseError=X.copyDone=X.emptyQuery=X.replicationStart=X.portalSuspended=X.noData=X.closeComplete=X.bindComplete=X.parseComplete=void 0;X.parseComplete={name:"parseComplete",length:5};X.bindComplete={name:"bindComplete",length:5};X.closeComplete={name:"closeComplete",length:5};X.noData={name:"noData",length:5};X.portalSuspended={name:"portalSuspended",length:5};X.replicationStart={name:"replicationStart",length:4};X.emptyQuery={name:"emptyQuery",length:4};X.copyDone={name:"copyDone",length:4};var MS=class extends Error{constructor(e,r,n){super(e),this.length=r,this.name=n}};X.DatabaseError=MS;var NS=class{constructor(e,r){this.length=e,this.chunk=r,this.name="copyData"}};X.CopyDataMessage=NS;var LS=class{constructor(e,r,n,i){this.length=e,this.name=r,this.binary=n,this.columnTypes=new Array(i)}};X.CopyResponse=LS;var qS=class{constructor(e,r,n,i,s,o,a){this.name=e,this.tableID=r,this.columnID=n,this.dataTypeID=i,this.dataTypeSize=s,this.dataTypeModifier=o,this.format=a}};X.Field=qS;var FS=class{constructor(e,r){this.length=e,this.fieldCount=r,this.name="rowDescription",this.fields=new Array(this.fieldCount)}};X.RowDescriptionMessage=FS;var $S=class{constructor(e,r){this.length=e,this.parameterCount=r,this.name="parameterDescription",this.dataTypeIDs=new Array(this.parameterCount)}};X.ParameterDescriptionMessage=$S;var US=class{constructor(e,r,n){this.length=e,this.parameterName=r,this.parameterValue=n,this.name="parameterStatus"}};X.ParameterStatusMessage=US;var JS=class{constructor(e,r){this.length=e,this.salt=r,this.name="authenticationMD5Password"}};X.AuthenticationMD5Password=JS;var zS=class{constructor(e,r,n){this.length=e,this.processID=r,this.secretKey=n,this.name="backendKeyData"}};X.BackendKeyDataMessage=zS;var GS=class{constructor(e,r,n,i){this.length=e,this.processId=r,this.channel=n,this.payload=i,this.name="notification"}};X.NotificationResponseMessage=GS;var BS=class{constructor(e,r){this.length=e,this.status=r,this.name="readyForQuery"}};X.ReadyForQueryMessage=BS;var HS=class{constructor(e,r){this.length=e,this.text=r,this.name="commandComplete"}};X.CommandCompleteMessage=HS;var VS=class{constructor(e,r){this.length=e,this.fields=r,this.name="dataRow",this.fieldCount=r.length}};X.DataRowMessage=VS;var WS=class{constructor(e,r){this.length=e,this.message=r,this.name="notice"}};X.NoticeMessage=WS});var cL=h(Ff=>{"use strict";Object.defineProperty(Ff,"__esModule",{value:!0});Ff.Writer=void 0;var QS=class{constructor(e=256){this.size=e,this.offset=5,this.headerPosition=0,this.buffer=Buffer.allocUnsafe(e)}ensure(e){if(this.buffer.length-this.offset<e){let n=this.buffer,i=n.length+(n.length>>1)+e;this.buffer=Buffer.allocUnsafe(i),n.copy(this.buffer)}}addInt32(e){return this.ensure(4),this.buffer[this.offset++]=e>>>24&255,this.buffer[this.offset++]=e>>>16&255,this.buffer[this.offset++]=e>>>8&255,this.buffer[this.offset++]=e>>>0&255,this}addInt16(e){return this.ensure(2),this.buffer[this.offset++]=e>>>8&255,this.buffer[this.offset++]=e>>>0&255,this}addCString(e){if(!e)this.ensure(1);else{let r=Buffer.byteLength(e);this.ensure(r+1),this.buffer.write(e,this.offset,"utf-8"),this.offset+=r}return this.buffer[this.offset++]=0,this}addString(e=""){let r=Buffer.byteLength(e);return this.ensure(r),this.buffer.write(e,this.offset),this.offset+=r,this}addInt32PrefixedString(e){let r=Buffer.byteLength(e);this.ensure(4+r);let n=this.buffer,i=this.offset;return n[i++]=r>>>24&255,n[i++]=r>>>16&255,n[i++]=r>>>8&255,n[i++]=r>>>0&255,n.write(e,i,"utf-8"),this.offset=i+r,this}add(e){return this.ensure(e.length),e.copy(this.buffer,this.offset),this.offset+=e.length,this}join(e){if(e){this.buffer[this.headerPosition]=e;let r=this.offset-(this.headerPosition+1);this.buffer.writeInt32BE(r,this.headerPosition+1)}return this.buffer.slice(e?0:5,this.offset)}flush(e){let r=this.join(e);return this.offset=5,this.headerPosition=0,this.buffer=Buffer.allocUnsafe(this.size),r}clear(){this.offset=5,this.headerPosition=0}};Ff.Writer=QS});var uL=h(Uf=>{"use strict";Object.defineProperty(Uf,"__esModule",{value:!0});Uf.serialize=void 0;var XS=cL(),Be=new XS.Writer,Zoe=t=>{Be.addInt16(3).addInt16(0);for(let n of Object.keys(t))Be.addCString(n).addCString(t[n]);Be.addCString("client_encoding").addCString("UTF8");let e=Be.addCString("").flush(),r=e.length+4;return new XS.Writer().addInt32(r).add(e).flush()},eae=()=>{let t=Buffer.allocUnsafe(8);return t.writeInt32BE(8,0),t.writeInt32BE(80877103,4),t},tae=t=>Be.addCString(t).flush(112),rae=function(t,e){return Be.addCString(t).addInt32PrefixedString(e),Be.flush(112)},nae=function(t){return Be.addString(t).flush(112)},iae=t=>Be.addCString(t).flush(81),lL=[],sae=t=>{let e=t.name||"";e.length>63&&(console.error("Warning! Postgres only supports 63 characters for query names."),console.error("You supplied %s (%s)",e,e.length),console.error("This can cause conflicts and silent errors executing queries"));let r=t.types||lL,n=r.length,i=Be.addCString(e).addCString(t.text).addInt16(n);for(let s=0;s<n;s++)i.addInt32(r[s]);return Be.flush(80)},nc=new XS.Writer,oae=function(t,e){for(let r=0;r<t.length;r++){let n=e?e(t[r],r):t[r];n==null?(Be.addInt16(0),nc.addInt32(-1)):n instanceof Buffer?(Be.addInt16(1),nc.addInt32(n.length),nc.add(n)):(Be.addInt16(0),nc.addInt32PrefixedString(n))}},aae=(t={})=>{let e=t.portal||"",r=t.statement||"",n=t.binary||!1,i=t.values||lL,s=i.length;Be.addCString(e).addCString(r),Be.addInt16(s);try{oae(i,t.valueMapper)}catch(o){throw Be.clear(),nc.clear(),o}return Be.addInt16(s),Be.add(nc.flush()),Be.addInt16(1),Be.addInt16(n?1:0),Be.flush(66)},cae=Buffer.from([69,0,0,0,9,0,0,0,0,0]),lae=t=>{if(!t||!t.portal&&!t.rows)return cae;let e=t.portal||"",r=t.rows||0,n=Buffer.byteLength(e),i=4+n+1+4,s=Buffer.allocUnsafe(1+i);return s[0]=69,s.writeInt32BE(i,1),s.write(e,5,"utf-8"),s[n+5]=0,s.writeUInt32BE(r,s.length-4),s},uae=(t,e)=>{let r=Buffer.allocUnsafe(16);return r.writeInt32BE(16,0),r.writeInt16BE(1234,4),r.writeInt16BE(5678,6),r.writeInt32BE(t,8),r.writeInt32BE(e,12),r},ZS=(t,e)=>{let n=4+Buffer.byteLength(e)+1,i=Buffer.allocUnsafe(1+n);return i[0]=t,i.writeInt32BE(n,1),i.write(e,5,"utf-8"),i[n]=0,i},dae=Be.addCString("P").flush(68),pae=Be.addCString("S").flush(68),fae=t=>t.name?ZS(68,`${t.type}${t.name||""}`):t.type==="P"?dae:pae,mae=t=>{let e=`${t.type}${t.name||""}`;return ZS(67,e)},hae=t=>Be.add(t).flush(100),yae=t=>ZS(102,t),$f=t=>Buffer.from([t,0,0,0,4]),gae=$f(72),bae=$f(83),vae=$f(88),Eae=$f(99),Sae={startup:Zoe,password:tae,requestSsl:eae,sendSASLInitialResponseMessage:rae,sendSCRAMClientFinalMessage:nae,query:iae,parse:sae,bind:aae,execute:lae,describe:fae,close:mae,flush:()=>gae,sync:()=>bae,end:()=>vae,copyData:hae,copyDone:()=>Eae,copyFail:yae,cancel:uae};Uf.serialize=Sae});var dL=h(Jf=>{"use strict";Object.defineProperty(Jf,"__esModule",{value:!0});Jf.BufferReader=void 0;var ex=class{constructor(e=0){this.offset=e,this.buffer=Buffer.allocUnsafe(0),this.encoding="utf-8"}setBuffer(e,r){this.offset=e,this.buffer=r}int16(){let e=this.buffer.readInt16BE(this.offset);return this.offset+=2,e}byte(){let e=this.buffer[this.offset];return this.offset++,e}int32(){let e=this.buffer.readInt32BE(this.offset);return this.offset+=4,e}uint32(){let e=this.buffer.readUInt32BE(this.offset);return this.offset+=4,e}string(e){let r=this.buffer.toString(this.encoding,this.offset,this.offset+e);return this.offset+=e,r}cstring(){let e=this.offset,r=e;for(;this.buffer[r++];);return this.offset=r,this.buffer.toString(this.encoding,e,r-1)}bytes(e){let r=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,r}};Jf.BufferReader=ex});var hL=h(zf=>{"use strict";Object.defineProperty(zf,"__esModule",{value:!0});zf.Parser=void 0;var st=YS(),xae=dL(),rx=1,wae=4,pL=rx+wae,Cr=-1,tx=Buffer.allocUnsafe(0),nx=class{constructor(e){if(this.buffer=tx,this.bufferLength=0,this.bufferOffset=0,this.reader=new xae.BufferReader,e?.mode==="binary")throw new Error("Binary mode not supported yet");this.mode=e?.mode||"text"}parse(e,r){this.mergeBuffer(e);let n=this.bufferOffset+this.bufferLength,i=this.bufferOffset;for(;i+pL<=n;){let s=this.buffer[i],o=this.buffer.readUInt32BE(i+rx),a=rx+o;if(a+i<=n){let c=this.handlePacket(i+pL,s,o,this.buffer);r(c),i+=a}else break}i===n?(this.buffer=tx,this.bufferLength=0,this.bufferOffset=0):(this.bufferLength=n-i,this.bufferOffset=i)}mergeBuffer(e){if(this.bufferLength>0){let r=this.bufferLength+e.byteLength;if(r+this.bufferOffset>this.buffer.byteLength){let i;if(r<=this.buffer.byteLength&&this.bufferOffset>=this.bufferLength)i=this.buffer;else{let s=this.buffer.byteLength*2;for(;r>=s;)s*=2;i=Buffer.allocUnsafe(s)}this.buffer.copy(i,0,this.bufferOffset,this.bufferOffset+this.bufferLength),this.buffer=i,this.bufferOffset=0}e.copy(this.buffer,this.bufferOffset+this.bufferLength),this.bufferLength=r}else this.buffer=e,this.bufferOffset=0,this.bufferLength=e.byteLength}handlePacket(e,r,n,i){let{reader:s}=this;s.setBuffer(e,i);let o;switch(r){case 50:o=st.bindComplete;break;case 49:o=st.parseComplete;break;case 51:o=st.closeComplete;break;case 110:o=st.noData;break;case 115:o=st.portalSuspended;break;case 99:o=st.copyDone;break;case 87:o=st.replicationStart;break;case 73:o=st.emptyQuery;break;case 68:o=Pae(s);break;case 67:o=Iae(s);break;case 90:o=_ae(s);break;case 65:o=Rae(s);break;case 82:o=Mae(s,n);break;case 83:o=Kae(s);break;case 75:o=Dae(s);break;case 69:o=fL(s,"error");break;case 78:o=fL(s,"notice");break;case 84:o=Oae(s);break;case 116:o=jae(s);break;case 71:o=kae(s);break;case 72:o=Aae(s);break;case 100:o=Tae(s,n);break;default:return new st.DatabaseError("received invalid response: "+r.toString(16),n,"error")}return s.setBuffer(0,tx),o.length=n,o}};zf.Parser=nx;var _ae=t=>{let e=t.string(1);return new st.ReadyForQueryMessage(Cr,e)},Iae=t=>{let e=t.cstring();return new st.CommandCompleteMessage(Cr,e)},Tae=(t,e)=>{let r=t.bytes(e-4);return new st.CopyDataMessage(Cr,r)},kae=t=>mL(t,"copyInResponse"),Aae=t=>mL(t,"copyOutResponse"),mL=(t,e)=>{let r=t.byte()!==0,n=t.int16(),i=new st.CopyResponse(Cr,e,r,n);for(let s=0;s<n;s++)i.columnTypes[s]=t.int16();return i},Rae=t=>{let e=t.int32(),r=t.cstring(),n=t.cstring();return new st.NotificationResponseMessage(Cr,e,r,n)},Oae=t=>{let e=t.int16(),r=new st.RowDescriptionMessage(Cr,e);for(let n=0;n<e;n++)r.fields[n]=Cae(t);return r},Cae=t=>{let e=t.cstring(),r=t.uint32(),n=t.int16(),i=t.uint32(),s=t.int16(),o=t.int32(),a=t.int16()===0?"text":"binary";return new st.Field(e,r,n,i,s,o,a)},jae=t=>{let e=t.int16(),r=new st.ParameterDescriptionMessage(Cr,e);for(let n=0;n<e;n++)r.dataTypeIDs[n]=t.uint32();return r},Pae=t=>{let e=t.int16(),r=new Array(e);for(let n=0;n<e;n++){let i=t.int32();r[n]=i===-1?null:t.string(i)}return new st.DataRowMessage(Cr,r)},Kae=t=>{let e=t.cstring(),r=t.cstring();return new st.ParameterStatusMessage(Cr,e,r)},Dae=t=>{let e=t.int32(),r=t.int32();return new st.BackendKeyDataMessage(Cr,e,r)},Mae=(t,e)=>{let r=t.int32(),n={name:"authenticationOk",length:e};switch(r){case 0:break;case 3:n.length===8&&(n.name="authenticationCleartextPassword");break;case 5:if(n.length===12){n.name="authenticationMD5Password";let i=t.bytes(4);return new st.AuthenticationMD5Password(Cr,i)}break;case 10:{n.name="authenticationSASL",n.mechanisms=[];let i;do i=t.cstring(),i&&n.mechanisms.push(i);while(i)}break;case 11:n.name="authenticationSASLContinue",n.data=t.string(e-8);break;case 12:n.name="authenticationSASLFinal",n.data=t.string(e-8);break;default:throw new Error("Unknown authenticationOk message type "+r)}return n},fL=(t,e)=>{let r={},n=t.string(1);for(;n!=="\0";)r[n]=t.cstring(),n=t.string(1);let i=r.M,s=e==="notice"?new st.NoticeMessage(Cr,i):new st.DatabaseError(i,Cr,e);return s.severity=r.S,s.code=r.C,s.detail=r.D,s.hint=r.H,s.position=r.P,s.internalPosition=r.p,s.internalQuery=r.q,s.where=r.W,s.schema=r.s,s.table=r.t,s.column=r.c,s.dataType=r.d,s.constraint=r.n,s.file=r.F,s.line=r.L,s.routine=r.R,s}});var ix=h(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.DatabaseError=ko.serialize=void 0;ko.parse=Fae;var Nae=YS();Object.defineProperty(ko,"DatabaseError",{enumerable:!0,get:function(){return Nae.DatabaseError}});var Lae=uL();Object.defineProperty(ko,"serialize",{enumerable:!0,get:function(){return Lae.serialize}});var qae=hL();function Fae(t,e){let r=new qae.Parser;return t.on("data",n=>r.parse(n,e)),new Promise(n=>t.on("end",()=>n()))}});var yL=h(sx=>{"use strict";Object.defineProperty(sx,"__esModule",{value:!0});sx.default={}});var bL=h((GKe,gL)=>{var{getStream:$ae,getSecureStream:Uae}=Bae();gL.exports={getStream:$ae,getSecureStream:Uae};function Jae(){function t(r){let n=require("net");return new n.Socket}function e(r){return require("tls").connect(r)}return{getStream:t,getSecureStream:e}}function zae(){function t(r){let{CloudflareSocket:n}=yL();return new n(r)}function e(r){return r.socket.startTls(r),r.socket}return{getStream:t,getSecureStream:e}}function Gae(){if(typeof navigator=="object"&&navigator!==null&&typeof navigator.userAgent=="string")return navigator.userAgent==="Cloudflare-Workers";if(typeof Response=="function"){let t=new Response(null,{cf:{thing:!0}});if(typeof t.cf=="object"&&t.cf!==null&&t.cf.thing)return!0}return!1}function Bae(){return Gae()?zae():Jae()}});var ax=h((BKe,EL)=>{"use strict";var Hae=require("events").EventEmitter,{parse:Vae,serialize:Ot}=ix(),vL=bL(),{getStream:Wae}=vL,Yae=Ot.flush(),Qae=Ot.sync(),Xae=Ot.end(),ox=class extends Hae{constructor(e){super(),e=e||{},this.stream=e.stream||Wae(e.ssl),typeof this.stream=="function"&&(this.stream=this.stream(e)),this._keepAlive=e.keepAlive,this._keepAliveInitialDelayMillis=e.keepAliveInitialDelayMillis,this.parsedStatements={},this.submittedNamedStatements={},this.ssl=e.ssl||!1,this.sslNegotiation=e.sslNegotiation||"postgres",this._ending=!1,this._emitMessage=!1;let r=this;this.on("newListener",function(n){n==="message"&&(r._emitMessage=!0)})}connect(e,r){let n=this;this._connecting=!0,this.stream.setNoDelay(!0),this.stream.connect(e,r),this.stream.once("connect",function(){n._keepAlive&&n.stream.setKeepAlive(!0,n._keepAliveInitialDelayMillis),n.emit("connect")});let i=function(s){n._ending&&(s.code==="ECONNRESET"||s.code==="EPIPE")||n.emit("error",s)};if(this.stream.on("error",i),this.stream.on("close",function(){n.emit("end")}),!this.ssl)return this.attachListeners(this.stream);if(this.sslNegotiation==="direct")return this.stream.once("connect",function(){n.upgradeToSSL(r,i)});this.stream.once("data",function(s){switch(s.toString("utf8")){case"S":break;case"N":return n.stream.end(),n.emit("error",new Error("The server does not support SSL connections"));default:return n.stream.end(),n.emit("error",new Error("There was an error establishing an SSL connection"))}n.upgradeToSSL(r,i)})}upgradeToSSL(e,r){let n=this,i={socket:n.stream};n.ssl!==!0&&(Object.assign(i,n.ssl),"key"in n.ssl&&(i.key=n.ssl.key)),n.sslNegotiation==="direct"&&(i.ALPNProtocols=["postgresql"]);let s=require("net");s.isIP&&s.isIP(e)===0&&(i.servername=e);try{n.stream=vL.getSecureStream(i)}catch(o){return n.emit("error",o)}n.attachListeners(n.stream),n.stream.on("error",r),n.emit("sslconnect")}attachListeners(e){Vae(e,r=>{let n=r.name==="error"?"errorMessage":r.name;this._emitMessage&&this.emit("message",r),this.emit(n,r)})}requestSsl(){this.stream.write(Ot.requestSsl())}startup(e){this.stream.write(Ot.startup(e))}cancel(e,r){this._send(Ot.cancel(e,r))}password(e){this._send(Ot.password(e))}sendSASLInitialResponseMessage(e,r){this._send(Ot.sendSASLInitialResponseMessage(e,r))}sendSCRAMClientFinalMessage(e){this._send(Ot.sendSCRAMClientFinalMessage(e))}_send(e){return this.stream.writable?this.stream.write(e):!1}query(e){this._send(Ot.query(e))}parse(e){this._send(Ot.parse(e))}bind(e){this._send(Ot.bind(e))}execute(e){this._send(Ot.execute(e))}flush(){this.stream.writable&&this.stream.write(Yae)}sync(){this._ending=!0,this._send(Qae)}ref(){this.stream.ref()}unref(){this.stream.unref()}end(){if(this._ending=!0,!this._connecting||!this.stream.writable){this.stream.end();return}return this.stream.write(Xae,()=>{this.stream.end()})}close(e){this._send(Ot.close(e))}describe(e){this._send(Ot.describe(e))}sendCopyFromChunk(e){this._send(Ot.copyData(e))}endCopyFrom(){this._send(Ot.copyDone())}sendCopyFail(e){this._send(Ot.copyFail(e))}};EL.exports=ox});var _L=h((HKe,wL)=>{"use strict";var{Transform:Zae}=require("stream"),{StringDecoder:ece}=require("string_decoder"),hs=Symbol("last"),Gf=Symbol("decoder");function tce(t,e,r){let n;if(this.overflow){if(n=this[Gf].write(t).split(this.matcher),n.length===1)return r();n.shift(),this.overflow=!1}else this[hs]+=this[Gf].write(t),n=this[hs].split(this.matcher);this[hs]=n.pop();for(let i=0;i<n.length;i++)try{xL(this,this.mapper(n[i]))}catch(s){return r(s)}if(this.overflow=this[hs].length>this.maxLength,this.overflow&&!this.skipOverflow){r(new Error("maximum buffer reached"));return}r()}function rce(t){if(this[hs]+=this[Gf].end(),this[hs])try{xL(this,this.mapper(this[hs]))}catch(e){return t(e)}t()}function xL(t,e){e!==void 0&&t.push(e)}function SL(t){return t}function nce(t,e,r){switch(t=t||/\r?\n/,e=e||SL,r=r||{},arguments.length){case 1:typeof t=="function"?(e=t,t=/\r?\n/):typeof t=="object"&&!(t instanceof RegExp)&&!t[Symbol.split]&&(r=t,t=/\r?\n/);break;case 2:typeof t=="function"?(r=e,e=t,t=/\r?\n/):typeof e=="object"&&(r=e,e=SL)}r=Object.assign({},r),r.autoDestroy=!0,r.transform=tce,r.flush=rce,r.readableObjectMode=!0;let n=new Zae(r);return n[hs]="",n[Gf]=new ece("utf8"),n.matcher=t,n.mapper=e,n.maxLength=r.maxLength,n.skipOverflow=r.skipOverflow||!1,n.overflow=!1,n._destroy=function(i,s){this._writableState.errorEmitted=!1,s(i)},n}wL.exports=nce});var kL=h((VKe,Ci)=>{"use strict";var IL=require("path"),ice=require("stream").Stream,sce=_L(),TL=require("util"),oce=5432,Bf=process.platform==="win32",mu=process.stderr,ace=56,cce=7,lce=61440,uce=32768;function dce(t){return(t&lce)==uce}var ic=["host","port","database","user","password"],cx=ic.length,pce=ic[cx-1];function lx(){var t=mu instanceof ice&&mu.writable===!0;if(t){var e=Array.prototype.slice.call(arguments).concat(`
|
||
`);mu.write(TL.format.apply(TL,e))}}Object.defineProperty(Ci.exports,"isWin",{get:function(){return Bf},set:function(t){Bf=t}});Ci.exports.warnTo=function(t){var e=mu;return mu=t,e};Ci.exports.getFileName=function(t){var e=t||process.env,r=e.PGPASSFILE||(Bf?IL.join(e.APPDATA||"./","postgresql","pgpass.conf"):IL.join(e.HOME||"./",".pgpass"));return r};Ci.exports.usePgPass=function(t,e){return Object.prototype.hasOwnProperty.call(process.env,"PGPASSWORD")?!1:Bf?!0:(e=e||"<unkn>",dce(t.mode)?t.mode&(ace|cce)?(lx('WARNING: password file "%s" has group or world access; permissions should be u=rw (0600) or less',e),!1):!0:(lx('WARNING: password file "%s" is not a plain file',e),!1))};var fce=Ci.exports.match=function(t,e){return ic.slice(0,-1).reduce(function(r,n,i){return i==1&&Number(t[n]||oce)===Number(e[n])?r&&!0:r&&(e[n]==="*"||e[n]===t[n])},!0)};Ci.exports.getPassword=function(t,e,r){var n,i=e.pipe(sce());function s(c){var l=mce(c);l&&hce(l)&&fce(t,l)&&(n=l[pce],i.end())}var o=function(){e.destroy(),r(n)},a=function(c){e.destroy(),lx("WARNING: error on reading file: %s",c),r(void 0)};e.on("error",a),i.on("data",s).on("end",o).on("error",a)};var mce=Ci.exports.parseLine=function(t){if(t.length<11||t.match(/^\s+#/))return null;for(var e="",r="",n=0,i=0,s=0,o={},a=!1,c=function(u,d,p){var f=t.substring(d,p);Object.hasOwnProperty.call(process.env,"PGPASS_NO_DEESCAPE")||(f=f.replace(/\\([:\\])/g,"$1")),o[ic[u]]=f},l=0;l<t.length-1;l+=1){if(e=t.charAt(l+1),r=t.charAt(l),a=n==cx-1,a){c(n,i);break}l>=0&&e==":"&&r!=="\\"&&(c(n,i,l+1),i=l+2,n+=1)}return o=Object.keys(o).length===cx?o:null,o},hce=Ci.exports.isValidEntry=function(t){for(var e={0:function(o){return o.length>0},1:function(o){return o==="*"?!0:(o=Number(o),isFinite(o)&&o>0&&o<9007199254740992&&Math.floor(o)===o)},2:function(o){return o.length>0},3:function(o){return o.length>0},4:function(o){return o.length>0}},r=0;r<ic.length;r+=1){var n=e[r],i=t[ic[r]]||"",s=n(i);if(!s)return!1}return!0}});var RL=h((YKe,ux)=>{"use strict";var WKe=require("path"),AL=require("fs"),Hf=kL();ux.exports=function(t,e){var r=Hf.getFileName();AL.stat(r,function(n,i){if(n||!Hf.usePgPass(i,r))return e(void 0);var s=AL.createReadStream(r);Hf.getPassword(t,s,e)})};ux.exports.warnTo=Hf.warnTo});var KL=h((QKe,PL)=>{var yce=require("events").EventEmitter,OL=_o(),hu=require("util"),Vf=VN(),gce=qf(),bce=jS(),jL=aL(),vce=pu(),Ece=ax(),Sce=kS(),CL=hu.deprecate(()=>{},"Client.activeQuery is deprecated and will be removed in pg@9.0"),xce=hu.deprecate(()=>{},"Client.queryQueue is deprecated and will be removed in pg@9.0."),wce=hu.deprecate(()=>{},"pgpass support is deprecated and will be removed in pg@9.0. You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this function you can call the pgpass module in your own code."),_ce=hu.deprecate(()=>{},"Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in pg@9.0."),Ice=hu.deprecate(()=>{},"Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.");function Tce(t,e){if(typeof t=="number")return Number.isFinite(t)?t:e;if(typeof t=="string"&&t.trim()!==""){let r=Number(t);return Number.isFinite(r)?r:e}return e}var Wf=class extends yce{constructor(e){super(),this.connectionParameters=new bce(e),this.user=this.connectionParameters.user,this.database=this.connectionParameters.database,this.port=this.connectionParameters.port,this.host=this.connectionParameters.host,Object.defineProperty(this,"password",{configurable:!0,enumerable:!1,writable:!0,value:this.connectionParameters.password}),this.replication=this.connectionParameters.replication;let r=e||{};r.Promise&&_ce(),this._Promise=r.Promise||global.Promise,this._types=new gce(r.types),this._ending=!1,this._ended=!1,this._connecting=!1,this._connected=!1,this._connectionError=!1,this._queryable=!0,this._activeQuery=null,this._txStatus=null,this.enableChannelBinding=!!r.enableChannelBinding,this.scramMaxIterations=Tce(r.scramMaxIterations,Vf.DEFAULT_MAX_SCRAM_ITERATIONS),this.connection=r.connection||new Ece({stream:r.stream,ssl:this.connectionParameters.ssl,sslNegotiation:this.connectionParameters.sslnegotiation,keepAlive:r.keepAlive||!1,keepAliveInitialDelayMillis:r.keepAliveInitialDelayMillis||0,encoding:this.connectionParameters.client_encoding||"utf8"}),this._queryQueue=[],this._sentQueryQueue=[],this.pipeline=!!r.pipeline,this.binary=r.binary||vce.binary,this.processID=null,this.secretKey=null,this.ssl=this.connectionParameters.ssl||!1,this.sslNegotiation=this.connectionParameters.sslnegotiation||"postgres",this.ssl&&this.ssl.key&&Object.defineProperty(this.ssl,"key",{enumerable:!1}),this._connectionTimeoutMillis=r.connectionTimeoutMillis||0}get activeQuery(){return CL(),this._activeQuery}set activeQuery(e){CL(),this._activeQuery=e}_getActiveQuery(){return this._activeQuery}_errorAllQueries(e){let r=i=>{process.nextTick(()=>{i.handleError(e,this.connection)})},n=this._getActiveQuery();n&&(r(n),this._activeQuery=null),this._sentQueryQueue.forEach(r),this._sentQueryQueue.length=0,this._queryQueue.forEach(r),this._queryQueue.length=0}_connect(e){let r=this,n=this.connection;if(this._connectionCallback=e,this._connecting||this._connected){let i=new Error("Client has already been connected. You cannot reuse a client.");process.nextTick(()=>{e(i)});return}this._connecting=!0,this._connectionTimeoutMillis>0&&(this.connectionTimeoutHandle=setTimeout(()=>{n._ending=!0,n.stream.destroy(new Error("timeout expired"))},this._connectionTimeoutMillis),this.connectionTimeoutHandle.unref&&this.connectionTimeoutHandle.unref()),this.host&&this.host.indexOf("/")===0?n.connect(this.host+"/.s.PGSQL."+this.port):n.connect(this.port,this.host),n.on("connect",function(){r.ssl?r.sslNegotiation!=="direct"&&n.requestSsl():n.startup(r.getStartupConf())}),n.on("sslconnect",function(){n.startup(r.getStartupConf())}),this._attachListeners(n),n.once("end",()=>{let i=this._ending?new Error("Connection terminated"):new Error("Connection terminated unexpectedly");clearTimeout(this.connectionTimeoutHandle),this._errorAllQueries(i),this._ended=!0,this._ending||(this._connecting&&!this._connectionError?this._connectionCallback?this._connectionCallback(i):this._handleErrorEvent(i):this._connectionError||this._handleErrorEvent(i)),process.nextTick(()=>{this.emit("end")})})}connect(e){if(e){this._connect(e);return}return new this._Promise((r,n)=>{this._connect(i=>{i?n(i):r(this)})})}_attachListeners(e){e.on("authenticationCleartextPassword",this._handleAuthCleartextPassword.bind(this)),e.on("authenticationMD5Password",this._handleAuthMD5Password.bind(this)),e.on("authenticationSASL",this._handleAuthSASL.bind(this)),e.on("authenticationSASLContinue",this._handleAuthSASLContinue.bind(this)),e.on("authenticationSASLFinal",this._handleAuthSASLFinal.bind(this)),e.on("backendKeyData",this._handleBackendKeyData.bind(this)),e.on("error",this._handleErrorEvent.bind(this)),e.on("errorMessage",this._handleErrorMessage.bind(this)),e.on("readyForQuery",this._handleReadyForQuery.bind(this)),e.on("notice",this._handleNotice.bind(this)),e.on("rowDescription",this._handleRowDescription.bind(this)),e.on("dataRow",this._handleDataRow.bind(this)),e.on("portalSuspended",this._handlePortalSuspended.bind(this)),e.on("emptyQuery",this._handleEmptyQuery.bind(this)),e.on("commandComplete",this._handleCommandComplete.bind(this)),e.on("parseComplete",this._handleParseComplete.bind(this)),e.on("copyInResponse",this._handleCopyInResponse.bind(this)),e.on("copyData",this._handleCopyData.bind(this)),e.on("notification",this._handleNotification.bind(this))}_getPassword(e){let r=this.connection;if(typeof this.password=="function")this._Promise.resolve().then(()=>this.password(this.connectionParameters)).then(n=>{if(n!==void 0){if(typeof n!="string"){r.emit("error",new TypeError("Password must be a string"));return}this.connectionParameters.password=this.password=n}else this.connectionParameters.password=this.password=null;e()}).catch(n=>{r.emit("error",n)});else if(this.password!==null)e();else try{RL()(this.connectionParameters,i=>{i!==void 0&&(wce(),this.connectionParameters.password=this.password=i),e()})}catch(n){this.emit("error",n)}}_handleAuthCleartextPassword(e){this._getPassword(()=>{this.connection.password(this.password)})}_handleAuthMD5Password(e){this._getPassword(async()=>{try{let r=await Sce.postgresMd5PasswordHash(this.user,this.password,e.salt);this.connection.password(r)}catch(r){this.emit("error",r)}})}_handleAuthSASL(e){this._getPassword(()=>{try{this.saslSession=Vf.startSession(e.mechanisms,this.enableChannelBinding&&this.connection.stream,this.scramMaxIterations),this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism,this.saslSession.response)}catch(r){this.connection.emit("error",r)}})}async _handleAuthSASLContinue(e){try{await Vf.continueSession(this.saslSession,this.password,e.data,this.enableChannelBinding&&this.connection.stream),this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)}catch(r){this.connection.emit("error",r)}}_handleAuthSASLFinal(e){try{Vf.finalizeSession(this.saslSession,e.data),this.saslSession=null}catch(r){this.connection.emit("error",r)}}_handleBackendKeyData(e){this.processID=e.processID,this.secretKey=e.secretKey}_handleReadyForQuery(e){this._connecting&&(this._connecting=!1,this._connected=!0,clearTimeout(this.connectionTimeoutHandle),this._connectionCallback&&(this._connectionCallback(null,this),this._connectionCallback=null),this.emit("connect"));let r=this._getActiveQuery();this._activeQuery=null,this._txStatus=e?.status??null,this.readyForQuery=!0,r&&r.handleReadyForQuery(this.connection),this._pulseQueryQueue()}_handleErrorWhileConnecting(e){if(!this._connectionError){if(this._connectionError=!0,clearTimeout(this.connectionTimeoutHandle),this._connectionCallback)return this._connectionCallback(e);this.emit("error",e)}}_handleErrorEvent(e){if(this._connecting)return this._handleErrorWhileConnecting(e);this._queryable=!1,this._errorAllQueries(e),this.emit("error",e)}_handleErrorMessage(e){if(this._connecting)return this._handleErrorWhileConnecting(e);let r=this._getActiveQuery();if(!r){this._handleErrorEvent(e);return}this._activeQuery=null,r.name&&delete this.connection.submittedNamedStatements[r.name],r.handleError(e,this.connection)}_handleRowDescription(e){let r=this._getActiveQuery();if(r==null){let n=new Error("Received unexpected rowDescription message from backend.");this._handleErrorEvent(n);return}r.handleRowDescription(e)}_handleDataRow(e){let r=this._getActiveQuery();if(r==null){let n=new Error("Received unexpected dataRow message from backend.");this._handleErrorEvent(n);return}r.handleDataRow(e)}_handlePortalSuspended(e){let r=this._getActiveQuery();if(r==null){let n=new Error("Received unexpected portalSuspended message from backend.");this._handleErrorEvent(n);return}r.handlePortalSuspended(this.connection)}_handleEmptyQuery(e){let r=this._getActiveQuery();if(r==null){let n=new Error("Received unexpected emptyQuery message from backend.");this._handleErrorEvent(n);return}r.handleEmptyQuery(this.connection)}_handleCommandComplete(e){let r=this._getActiveQuery();if(r==null){let n=new Error("Received unexpected commandComplete message from backend.");this._handleErrorEvent(n);return}r.handleCommandComplete(e,this.connection)}_handleParseComplete(){let e=this._getActiveQuery();if(e==null){let r=new Error("Received unexpected parseComplete message from backend.");this._handleErrorEvent(r);return}e.name&&(this.connection.parsedStatements[e.name]=e.text,delete this.connection.submittedNamedStatements[e.name])}_handleCopyInResponse(e){let r=this._getActiveQuery();if(r==null){let n=new Error("Received unexpected copyInResponse message from backend.");this._handleErrorEvent(n);return}r.handleCopyInResponse(this.connection)}_handleCopyData(e){let r=this._getActiveQuery();if(r==null){let n=new Error("Received unexpected copyData message from backend.");this._handleErrorEvent(n);return}r.handleCopyData(e,this.connection)}_handleNotification(e){this.emit("notification",e)}_handleNotice(e){this.emit("notice",e)}getStartupConf(){let e=this.connectionParameters,r={user:e.user,database:e.database},n=e.application_name||e.fallback_application_name;return n&&(r.application_name=n),e.replication&&(r.replication=""+e.replication),e.statement_timeout&&(r.statement_timeout=String(parseInt(e.statement_timeout,10))),e.lock_timeout&&(r.lock_timeout=String(parseInt(e.lock_timeout,10))),e.idle_in_transaction_session_timeout&&(r.idle_in_transaction_session_timeout=String(parseInt(e.idle_in_transaction_session_timeout,10))),e.options&&(r.options=e.options),r}cancel(e,r){if(e.activeQuery===r){let n=this.connection;this.host&&this.host.indexOf("/")===0?n.connect(this.host+"/.s.PGSQL."+this.port):n.connect(this.port,this.host),n.on("connect",function(){n.cancel(e.processID,e.secretKey)})}else e._queryQueue.indexOf(r)!==-1?e._queryQueue.splice(e._queryQueue.indexOf(r),1):e._sentQueryQueue.indexOf(r)!==-1&&(r.callback=()=>{})}setTypeParser(e,r,n){return this._types.setTypeParser(e,r,n)}getTypeParser(e,r){return this._types.getTypeParser(e,r)}escapeIdentifier(e){return OL.escapeIdentifier(e)}escapeLiteral(e){return OL.escapeLiteral(e)}_pulseQueryQueue(){if(this.pipeline){this._pulsePipelinedQueryQueue();return}if(this.readyForQuery===!0){this._activeQuery=this._queryQueue.shift();let e=this._getActiveQuery();if(e){this.readyForQuery=!1,this.hasExecuted=!0;let r=e.submit(this.connection);r&&process.nextTick(()=>{e.handleError(r,this.connection),this.readyForQuery=!0,this._pulseQueryQueue()})}else this.hasExecuted&&(this._activeQuery=null,this.emit("drain"))}}_pulsePipelinedQueryQueue(){if(!(!this._connected||!this._queryable)){for(;this._queryQueue.length>0;){let e=this._queryQueue.shift();this.hasExecuted=!0;let r=e.submit(this.connection);if(r){process.nextTick(()=>{e.handleError(r,this.connection)});continue}this._sentQueryQueue.push(e)}this.readyForQuery&&!this._activeQuery&&this._sentQueryQueue.length>0&&(this._activeQuery=this._sentQueryQueue.shift(),this.readyForQuery=!1),!this._activeQuery&&this._sentQueryQueue.length===0&&this._queryQueue.length===0&&this.hasExecuted&&this.emit("drain")}}query(e,r,n){let i,s;if(e==null)throw new TypeError("Client was passed a null or undefined query");if(typeof e.submit=="function")s=i=e,i.callback||(typeof r=="function"?i.callback=r:n&&(i.callback=n));else if(i=new jL(e,r,n),!i.callback)s=new this._Promise((a,c)=>{i.callback=(l,u)=>l?c(l):a(u)}).catch(a=>{throw Error.captureStackTrace(a),a});else if(typeof i.callback!="function")throw new TypeError("callback is not a function");let o=e.query_timeout||this.connectionParameters.query_timeout;if(o){let a=i.callback||(()=>{}),c=setTimeout(()=>{let l=new Error("Query read timeout");process.nextTick(()=>{i.handleError(l,this.connection)}),a(l),i.callback=()=>{};let u=this._queryQueue.indexOf(i);if(u>-1)this._queryQueue.splice(u,1);else if(this.pipeline){this.connection.stream.destroy();return}this._pulseQueryQueue()},o);i.callback=(l,u)=>{clearTimeout(c),a(l,u)}}return this.binary&&!i.binary&&(i.binary=!0),i._result&&!i._result._types&&(i._result._types=this._types),this._queryable?this._ending?(process.nextTick(()=>{i.handleError(new Error("Client was closed and is not queryable"),this.connection)}),s):(this._queryQueue.length>0&&!this.pipeline&&Ice(),this._queryQueue.push(i),this._pulseQueryQueue(),s):(process.nextTick(()=>{i.handleError(new Error("Client has encountered a connection error and is not queryable"),this.connection)}),s)}ref(){this.connection.ref()}unref(){this.connection.unref()}getTransactionStatus(){return this._txStatus}end(e){if(this._ending=!0,!this.connection._connecting||this._ended)if(e){e();return}else return this._Promise.resolve();if(this._queryable?this.pipeline&&(this._getActiveQuery()||this._sentQueryQueue.length>0||this._queryQueue.length>0)?this.once("drain",()=>this.connection.end()):this._getActiveQuery()?this.connection.stream.destroy():this.connection.end():this.connection.stream.destroy(),e)this.connection.once("end",e);else return new this._Promise(r=>{this.connection.once("end",r)})}get queryQueue(){return xce(),this._queryQueue}};Wf.Query=jL;PL.exports=Wf});var NL=h((XKe,ML)=>{"use strict";var kce=require("events").EventEmitter,dx=function(){},DL=(t,e)=>{let r=t.findIndex(e);return r===-1?void 0:t.splice(r,1)[0]},px=class{constructor(e,r,n){this.client=e,this.idleListener=r,this.timeoutId=n}},sc=class{constructor(e){this.callback=e}};function Ace(){throw new Error("Release called on client which has already been released to the pool.")}function Yf(t,e){if(e)return{callback:e,result:void 0};let r,n,i=function(o,a){o?r(o):n(a)},s=new t(function(o,a){n=o,r=a}).catch(o=>{throw Error.captureStackTrace(o),o});return{callback:i,result:s}}function Rce(t,e){return function r(n){n.client=e,e.removeListener("error",r),e.on("error",()=>{t.log("additional client error after disconnection due to error",n)}),t._remove(e),t.emit("error",n,e)}}var fx=class extends kce{constructor(e,r){super(),this.options=Object.assign({},e),e!=null&&"password"in e&&Object.defineProperty(this.options,"password",{configurable:!0,enumerable:!1,writable:!0,value:e.password}),e!=null&&e.ssl&&e.ssl.key&&Object.defineProperty(this.options.ssl,"key",{enumerable:!1}),this.options.max=this.options.max||this.options.poolSize||10,this.options.min=this.options.min||0,this.options.maxUses=this.options.maxUses||1/0,this.options.allowExitOnIdle=this.options.allowExitOnIdle||!1,this.options.maxLifetimeSeconds=this.options.maxLifetimeSeconds||0,this.log=this.options.log||function(){},this.Client=this.options.Client||r||mx().Client,this.Promise=this.options.Promise||global.Promise,typeof this.options.idleTimeoutMillis>"u"&&(this.options.idleTimeoutMillis=1e4),this._clients=[],this._idle=[],this._expired=new WeakSet,this._pendingQueue=[],this._endCallback=void 0,this.ending=!1,this.ended=!1}_promiseTry(e){let r=this.Promise;return typeof r.try=="function"?r.try(e):new r(n=>n(e()))}_isFull(){return this._clients.length>=this.options.max}_isAboveMin(){return this._clients.length>this.options.min}_pulseQueue(){if(this.log("pulse queue"),this.ended){this.log("pulse queue ended");return}if(this.ending){this.log("pulse queue on ending"),this._idle.length&&this._idle.slice().map(r=>{this._remove(r.client)}),this._clients.length||(this.ended=!0,this._endCallback());return}if(!this._pendingQueue.length){this.log("no queued requests");return}if(!this._idle.length&&this._isFull())return;let e=this._pendingQueue.shift();if(this._idle.length){let r=this._idle.pop();clearTimeout(r.timeoutId);let n=r.client;n.ref&&n.ref();let i=r.idleListener;return this._acquireClient(n,e,i,!1)}if(!this._isFull())return this.newClient(e);throw new Error("unexpected condition")}_remove(e,r){let n=DL(this._idle,s=>s.client===e);n!==void 0&&clearTimeout(n.timeoutId),this._clients=this._clients.filter(s=>s!==e);let i=this;e.end(()=>{i.emit("remove",e),typeof r=="function"&&r()})}connect(e){if(this.ending){let i=new Error("Cannot use a pool after calling end on the pool");return e?e(i):this.Promise.reject(i)}let r=Yf(this.Promise,e),n=r.result;if(this._isFull()||this._idle.length){if(this._idle.length&&process.nextTick(()=>this._pulseQueue()),!this.options.connectionTimeoutMillis)return this._pendingQueue.push(new sc(r.callback)),n;let i=(a,c,l)=>{clearTimeout(o),r.callback(a,c,l)},s=new sc(i),o=setTimeout(()=>{DL(this._pendingQueue,a=>a.callback===i),s.timedOut=!0,r.callback(new Error("timeout exceeded when trying to connect"))},this.options.connectionTimeoutMillis);return o.unref&&o.unref(),this._pendingQueue.push(s),n}return this.newClient(new sc(r.callback)),n}newClient(e){let r=new this.Client(this.options);this._clients.push(r);let n=Rce(this,r);this.log("checking client timeout");let i,s=!1;this.options.connectionTimeoutMillis&&(i=setTimeout(()=>{r.connection?(this.log("ending client due to timeout"),s=!0,r.connection.stream.destroy()):r.isConnected()||(this.log("ending client due to timeout"),s=!0,r.end())},this.options.connectionTimeoutMillis)),this.log("connecting new client"),r.connect(o=>{if(i&&clearTimeout(i),r.on("error",n),o)this.log("client failed to connect",o),this._clients=this._clients.filter(a=>a!==r),s&&(o=new Error("Connection terminated due to connection timeout",{cause:o})),this._pulseQueue(),e.timedOut||e.callback(o,void 0,dx);else{if(this.log("new client connected"),this.options.onConnect){this._promiseTry(()=>this.options.onConnect(r)).then(()=>{this._afterConnect(r,e,n)},a=>{this._clients=this._clients.filter(c=>c!==r),r.end(()=>{this._pulseQueue(),e.timedOut||e.callback(a,void 0,dx)})});return}return this._afterConnect(r,e,n)}})}_afterConnect(e,r,n){if(this.options.maxLifetimeSeconds!==0){let i=setTimeout(()=>{this.log("ending client due to expired lifetime"),this._expired.add(e),this._idle.findIndex(o=>o.client===e)!==-1&&this._acquireClient(e,new sc((o,a,c)=>c()),n,!1)},this.options.maxLifetimeSeconds*1e3);i.unref(),e.once("end",()=>clearTimeout(i))}return this._acquireClient(e,r,n,!0)}_acquireClient(e,r,n,i){i&&this.emit("connect",e),this.emit("acquire",e),e.release=this._releaseOnce(e,n),e.removeListener("error",n),r.timedOut?i&&this.options.verify?this.options.verify(e,e.release):e.release():i&&this.options.verify?this.options.verify(e,s=>{if(s)return e.release(s),r.callback(s,void 0,dx);r.callback(void 0,e,e.release)}):r.callback(void 0,e,e.release)}_releaseOnce(e,r){let n=!1;return i=>{n&&Ace(),n=!0,this._release(e,r,i)}}_release(e,r,n){if(e.on("error",r),e._poolUseCount=(e._poolUseCount||0)+1,this.emit("release",n,e),n||this.ending||!e._queryable||e._ending||e._poolUseCount>=this.options.maxUses)return e._poolUseCount>=this.options.maxUses&&this.log("remove expended client"),this._remove(e,this._pulseQueue.bind(this));if(this._expired.has(e))return this.log("remove expired client"),this._expired.delete(e),this._remove(e,this._pulseQueue.bind(this));let s;this.options.idleTimeoutMillis&&this._isAboveMin()&&(s=setTimeout(()=>{this._isAboveMin()&&(this.log("remove idle client"),this._remove(e,this._pulseQueue.bind(this)))},this.options.idleTimeoutMillis),this.options.allowExitOnIdle&&s.unref()),this.options.allowExitOnIdle&&e.unref(),this._idle.push(new px(e,r,s)),this._pulseQueue()}query(e,r,n){if(typeof e=="function"){let s=Yf(this.Promise,e);return setImmediate(function(){return s.callback(new Error("Passing a function as the first parameter to pool.query is not supported"))}),s.result}typeof r=="function"&&(n=r,r=void 0);let i=Yf(this.Promise,n);return n=i.callback,this.connect((s,o)=>{if(s)return n(s);let a=!1,c=l=>{a||(a=!0,o.release(l),n(l))};o.once("error",c),this.log("dispatching query");try{o.query(e,r,(l,u)=>{if(this.log("query dispatched"),o.removeListener("error",c),!a)return a=!0,o.release(l),l?n(l):n(void 0,u)})}catch(l){return o.release(l),n(l)}}),i.result}end(e){if(this.log("ending"),this.ending){let n=new Error("Called end on pool more than once");return e?e(n):this.Promise.reject(n)}this.ending=!0;let r=Yf(this.Promise,e);return this._endCallback=r.callback,this._pulseQueue(),r.result}get waitingCount(){return this._pendingQueue.length}get idleCount(){return this._idle.length}get expiredCount(){return this._clients.reduce((e,r)=>e+(this._expired.has(r)?1:0),0)}get totalCount(){return this._clients.length}};ML.exports=fx});var FL=h((ZKe,qL)=>{"use strict";var LL=require("events").EventEmitter,Oce=require("util"),hx=_o(),oc=qL.exports=function(t,e,r){LL.call(this),t=hx.normalizeQueryConfig(t,e,r),this.text=t.text,this.values=t.values,this.name=t.name,this.queryMode=t.queryMode,this.callback=t.callback,this.state="new",this._arrayMode=t.rowMode==="array",this._emitRowEvents=!1,this.on("newListener",function(n){n==="row"&&(this._emitRowEvents=!0)}.bind(this))};Oce.inherits(oc,LL);var Cce={sqlState:"code",statementPosition:"position",messagePrimary:"message",context:"where",schemaName:"schema",tableName:"table",columnName:"column",dataTypeName:"dataType",constraintName:"constraint",sourceFile:"file",sourceLine:"line",sourceFunction:"routine"};oc.prototype.handleError=function(t){let e=this.native&&this.native.pq.resultErrorFields();if(e)for(let r in e){let n=Cce[r]||r;t[n]=e[r]}this.callback?this.callback(t):this.emit("error",t),this.state="error"};oc.prototype.then=function(t,e){return this._getPromise().then(t,e)};oc.prototype.catch=function(t){return this._getPromise().catch(t)};oc.prototype._getPromise=function(){return this._promise?this._promise:(this._promise=new Promise(function(t,e){this._once("end",t),this._once("error",e)}.bind(this)),this._promise)};oc.prototype.submit=function(t){this.state="running";let e=this;this.native=t.native,t.native.arrayMode=this._arrayMode;let r=function(n,i,s){if(t.native.arrayMode=!1,setImmediate(function(){e.emit("_done")}),n)return e.handleError(n);e._emitRowEvents&&(s.length>1?i.forEach((o,a)=>{o.forEach(c=>{e.emit("row",c,s[a])})}):i.forEach(function(o){e.emit("row",o,s)})),e.state="end",e.emit("end",s),e.callback&&e.callback(null,s)};if(process.domain&&(r=process.domain.bind(r)),this.name){this.name.length>63&&(console.error("Warning! Postgres only supports 63 characters for query names."),console.error("You supplied %s (%s)",this.name,this.name.length),console.error("This can cause conflicts and silent errors executing queries"));let n=(this.values||[]).map(hx.prepareValue);if(t.namedQueries[this.name]){if(this.text&&t.namedQueries[this.name]!==this.text){let i=new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`);return r(i)}return t.native.execute(this.name,n,r)}return t.native.prepare(this.name,this.text,n.length,function(i){return i?r(i):(t.namedQueries[e.name]=e.text,e.native.execute(e.name,n,r))})}else if(this.values){if(!Array.isArray(this.values)){let i=new Error("Query values must be an array");return r(i)}let n=this.values.map(hx.prepareValue);t.native.query(this.text,n,r)}else this.queryMode==="extended"?t.native.query(this.text,[],r):t.native.query(this.text,r)}});var GL=h((eDe,zL)=>{var jce=require("util"),$L;try{$L=require("pg-native")}catch(t){throw t}var Pce=qf(),UL=require("events").EventEmitter,Kce=require("util"),Dce=jS(),JL=FL(),Mce=jce.deprecate(()=>{},"Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead."),Lt=zL.exports=function(t){UL.call(this),t=t||{},this._Promise=t.Promise||global.Promise,this._types=new Pce(t.types),this.native=new $L({types:this._types}),this._queryQueue=[],this._ending=!1,this._connecting=!1,this._connected=!1,this._queryable=!0,this.pipeline=!!t.pipeline,this._pipelineInFlight=!1;let e=this.connectionParameters=new Dce(t);t.nativeConnectionString&&(e.nativeConnectionString=t.nativeConnectionString),this.user=e.user,Object.defineProperty(this,"password",{configurable:!0,enumerable:!1,writable:!0,value:e.password}),this.database=e.database,this.host=e.host,this.port=e.port,this.namedQueries={}};Lt.Query=JL;Kce.inherits(Lt,UL);Lt.prototype._errorAllQueries=function(t){let e=r=>{process.nextTick(()=>{r.native=this.native,r.handleError(t)})};this._hasActiveQuery()&&(e(this._activeQuery),this._activeQuery=null),this._queryQueue.forEach(e),this._queryQueue.length=0};Lt.prototype._connect=function(t){let e=this;if(this._connecting){process.nextTick(()=>t(new Error("Client has already been connected. You cannot reuse a client.")));return}this._connecting=!0,this.connectionParameters.getLibpqConnectionString(function(r,n){if(e.connectionParameters.nativeConnectionString&&(n=e.connectionParameters.nativeConnectionString),r)return t(r);e.native.connect(n,function(i){if(i)return e.native.end(),t(i);e._connected=!0,e.native.on("error",function(s){e._queryable=!1,e._errorAllQueries(s),e.emit("error",s)}),e.native.on("notification",function(s){e.emit("notification",{channel:s.relname,payload:s.extra})}),e.emit("connect"),e._pulseQueryQueue(!0),t(null,this)})})};Lt.prototype.connect=function(t){if(t){this._connect(t);return}return new this._Promise((e,r)=>{this._connect(n=>{n?r(n):e(this)})})};Lt.prototype.query=function(t,e,r){let n,i,s,o,a;if(t==null)throw new TypeError("Client was passed a null or undefined query");if(typeof t.submit=="function")s=t.query_timeout||this.connectionParameters.query_timeout,i=n=t,typeof e=="function"&&(t.callback=e);else if(s=t.query_timeout||this.connectionParameters.query_timeout,n=new JL(t,e,r),!n.callback){let c,l;i=new this._Promise((u,d)=>{c=u,l=d}).catch(u=>{throw Error.captureStackTrace(u),u}),n.callback=(u,d)=>u?l(u):c(d)}return s&&(a=n.callback||(()=>{}),o=setTimeout(()=>{let c=new Error("Query read timeout");process.nextTick(()=>{n.handleError(c,this.connection)}),a(c),n.callback=()=>{};let l=this._queryQueue.indexOf(n);l>-1&&this._queryQueue.splice(l,1),this._pulseQueryQueue()},s),n.callback=(c,l)=>{clearTimeout(o),a(c,l)}),this._queryable?this._ending?(n.native=this.native,process.nextTick(()=>{n.handleError(new Error("Client was closed and is not queryable"))}),i):(this._queryQueue.length>0&&!this.pipeline&&Mce(),this._queryQueue.push(n),this._pulseQueryQueue(),i):(n.native=this.native,process.nextTick(()=>{n.handleError(new Error("Client has encountered a connection error and is not queryable"))}),i)};Lt.prototype.end=function(t){let e=this;this._ending=!0,this._connecting&&!this._connected&&this.once("connect",()=>{this.end(()=>{})});let r;t||(r=new this._Promise(function(i,s){t=o=>o?s(o):i()}));let n=function(){e.native.end(function(){e._connected=!1,e._errorAllQueries(new Error("Connection terminated")),process.nextTick(()=>{e.emit("end"),t&&t()})})};return this.pipeline&&(this._pipelineInFlight||this._queryQueue.length>0)?this.once("drain",n):n(),r};Lt.prototype._hasActiveQuery=function(){return this._activeQuery&&this._activeQuery.state!=="error"&&this._activeQuery.state!=="end"};Lt.prototype._pulseQueryQueue=function(t){if(!this._connected)return;if(this.pipeline&&!t)return this._pulsePipelinedQueryQueue();if(this._hasActiveQuery())return;let e=this._queryQueue.shift();if(!e){t||this.emit("drain");return}this._activeQuery=e,e.submit(this);let r=this;e.once("_done",function(){r._pulseQueryQueue()})};Lt.prototype._pulsePipelinedQueryQueue=function(){if(!this._connected||this._pipelineInFlight)return;if(this._queryQueue.length===0){this.hasExecuted&&this.emit("drain");return}this._pipelineInFlight=!0;let t=this,e=[],r=[],n=_o();for(;this._queryQueue.length>0;){let i=this._queryQueue.shift();this.hasExecuted=!0,r.push(i);let s=i.values?i.values.map(n.prepareValue):null,o={text:i.text,name:i.name};s&&(o.values=s),i.name&&this.namedQueries[i.name]&&(o._alreadyPrepared=!0),e.push(o)}this.native.pipeline(e,function(i,s){if(t._pipelineInFlight=!1,i){for(let o=0;o<r.length;o++){let a=r[o];a.native=t.native,a.handleError(i)}t._pulsePipelinedQueryQueue();return}for(let o=0;o<r.length;o++){let a=r[o],c=s[o];a.native=t.native,c.err?a.handleError(c.err):(a.name&&(t.namedQueries[a.name]=a.text),a.state="end",a.emit("end",c.result),a.callback&&a.callback(null,c.result)),setImmediate(function(){a.emit("_done")})}t._pulsePipelinedQueryQueue()})};Lt.prototype.cancel=function(t){this._activeQuery===t?this.native.cancel(function(){}):this._queryQueue.indexOf(t)!==-1&&this._queryQueue.splice(this._queryQueue.indexOf(t),1)};Lt.prototype.ref=function(){};Lt.prototype.unref=function(){};Lt.prototype.setTypeParser=function(t,e,r){return this._types.setTypeParser(t,e,r)};Lt.prototype.getTypeParser=function(t,e){return this._types.getTypeParser(t,e)};Lt.prototype.isConnected=function(){return this._connected};Lt.prototype.getTransactionStatus=function(){return this.native.getTransactionStatus()}});var yx=h((tDe,BL)=>{"use strict";BL.exports=GL()});var mx=h((nDe,Qf)=>{"use strict";var Nce=KL(),Lce=pu(),qce=ax(),Fce=KS(),$ce=_o(),Uce=NL(),Jce=qf(),{DatabaseError:zce}=ix(),{escapeIdentifier:Gce,escapeLiteral:Bce}=_o(),Hce=t=>class extends Uce{constructor(r){super(r,t)}},HL=function(t){this.defaults=Lce,this.Client=t,this.Query=this.Client.Query,this.Pool=Hce(this.Client),this._pools=[],this.Connection=qce,this.types=du(),this.DatabaseError=zce,this.TypeOverrides=Jce,this.escapeIdentifier=Gce,this.escapeLiteral=Bce,this.Result=Fce,this.utils=$ce},VL=Nce,WL=!1;try{WL=!!process.env.NODE_PG_FORCE_NATIVE}catch{}WL&&(VL=yx());Qf.exports=new HL(VL);Object.defineProperty(Qf.exports,"native",{configurable:!0,enumerable:!1,get(){let t=null;try{t=new HL(yx())}catch(e){if(e.code!=="MODULE_NOT_FOUND")throw e}return Object.defineProperty(Qf.exports,"native",{value:t}),t}})});var jr,iDe,sDe,oDe,aDe,cDe,lDe,uDe,dDe,pDe,fDe,mDe,YL,QL=R(()=>{jr=tt(mx(),1),iDe=jr.default.Client,sDe=jr.default.Pool,oDe=jr.default.Connection,aDe=jr.default.types,cDe=jr.default.Query,lDe=jr.default.DatabaseError,uDe=jr.default.escapeIdentifier,dDe=jr.default.escapeLiteral,pDe=jr.default.Result,fDe=jr.default.TypeOverrides,mDe=jr.default.defaults,YL=jr.default});function XL(t=process.env){return t.CLAUDE_MEM_SERVER_DATABASE_URL||null}function yu(t={}){let e=t.env??process.env,r=XL(e);if(!r){if(t.requireDatabaseUrl)throw new Error("Postgres requires CLAUDE_MEM_SERVER_DATABASE_URL");return null}return{connectionString:r,max:Xf(e.CLAUDE_MEM_POSTGRES_POOL_MAX,Vce),idleTimeoutMillis:Xf(e.CLAUDE_MEM_POSTGRES_IDLE_TIMEOUT_MS,Wce),connectionTimeoutMillis:Xf(e.CLAUDE_MEM_POSTGRES_CONNECTION_TIMEOUT_MS,Yce),statementTimeoutMillis:Xf(e.CLAUDE_MEM_POSTGRES_STATEMENT_TIMEOUT_MS,Qce),ssl:Xce(r,e)}}function Xf(t,e){if(!t)return e;let r=Number.parseInt(t,10);return Number.isFinite(r)&&r>0?r:e}function Xce(t,e){if(e.CLAUDE_MEM_POSTGRES_SSL==="disable"||e.PGSSLMODE==="disable")return!1;if(e.CLAUDE_MEM_POSTGRES_SSL==="require"||e.PGSSLMODE==="require")return{rejectUnauthorized:!1};try{if(new URL(t).searchParams.get("sslmode")==="require")return{rejectUnauthorized:!1}}catch(r){let n=r instanceof Error?r:new Error(String(r));return x.warn("DB","Failed to parse Postgres connection string for sslmode, defaulting SSL off",{},n),!1}return!1}var Vce,Wce,Yce,Qce,Zf=R(()=>{"use strict";fe();Vce=10,Wce=3e4,Yce=5e3,Qce=3e4});function em(t){return new Zce({connectionString:t.connectionString,max:t.max,idleTimeoutMillis:t.idleTimeoutMillis,connectionTimeoutMillis:t.connectionTimeoutMillis,statement_timeout:t.statementTimeoutMillis,ssl:t.ssl})}function gx(t={}){if(ac)return ac;let e=yu({requireDatabaseUrl:t.requireDatabaseUrl??!0});if(!e)throw new Error("Postgres requires CLAUDE_MEM_SERVER_DATABASE_URL");return ac=em(e),ac}async function In(t,e){let r=await t.connect();try{await r.query("BEGIN");let n=await e(r);return await r.query("COMMIT"),n}catch(n){let i=n instanceof Error?n:new Error(String(n));throw x.warn("DB","Postgres transaction rolled back",{},i),await r.query("ROLLBACK"),n}finally{r.release()}}async function ele(t){t===ac&&(ac=null),await t.end()}var Zce,ac,Ao=R(()=>{"use strict";QL();Zf();fe();({Pool:Zce}=YL),ac=null});var cc,bx=R(()=>{"use strict";Ao();cc=class{constructor(e){this.pool=e}pool;async deleteObservation(e){return((await this.pool.query("DELETE FROM observations WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.id,e.projectId,e.teamId])).rowCount??0)>0}async purgeProjectMemory(e){let{projectId:r,teamId:n}=e;return In(this.pool,async i=>{let s=async u=>(await i.query(`DELETE FROM ${u} WHERE project_id = $1 AND team_id = $2`,[r,n])).rowCount??0,o=await s("observations"),a=await s("observation_generation_jobs"),c=await s("agent_events"),l=await s("server_sessions");return{observations:o,agentEvents:c,sessions:l,jobs:a}})}}});function eq(){return(t,e,r)=>{let n=t.header(tle),i=n&&ile(n)?n:(0,ZL.randomUUID)();t.requestId=i,e.setHeader("X-Request-Id",i),r()}}function ile(t){return typeof t!="string"||t.length===0||t.length>rle?!1:nle.test(t)}var ZL,tle,rle,nle,tq=R(()=>{"use strict";ZL=require("crypto"),tle="x-request-id",rle=64,nle=/^[A-Za-z0-9][A-Za-z0-9\-_]{0,63}$/});var rq,nq=R(()=>{rq="x-hono-already-sent"});var iq,sq=R(()=>{iq=t=>((...e)=>{if(typeof e[0]=="function"){let[r,n]=e;return async function(s,o){let a=await r(s),c=await t(s,a,n);if(c)return c;await o()}}else{let[r,n,i]=e;return(async()=>{let s=await t(r,n,i);if(!s)throw new Error("Failed to upgrade WebSocket");return s})()}})});async function Rle(t){return Promise.race([t,Promise.resolve().then(()=>Promise.resolve(void 0))])}function Sq(t,e,r){let n=a=>{t.cancel(a).catch(()=>{})};return e.on("close",n),e.on("error",n),(r??t.read()).then(o,i),t.closed.finally(()=>{e.off("close",n),e.off("error",n)});function i(a){a&&e.destroy(a)}function s(){t.read().then(o,i)}function o({done:a,value:c}){try{if(a)e.end();else if(!e.write(c))e.once("drain",s);else return t.read().then(o,i)}catch(l){i(l)}}}function pq(t,e){if(t.locked)throw new TypeError("ReadableStream is locked.");return e.destroyed?void 0:Sq(t.getReader(),e)}var Tn,Ex,Wn,sle,ole,tm,oq,aq,kx,mq,Ax,hq,ale,cle,lle,ule,dle,ple,uc,yq,fle,mle,vx,Sx,gq,Rx,cq,nm,lq,hle,bs,ji,dc,vu,bq,vq,gu,xx,wx,gs,rm,Ki,uq,bu,im,Eu,yle,gle,ble,vle,Ele,Sle,xle,Ox,wle,dq,_le,Qn,Ile,ys,_x,lc,Pi,sm,Yn,Tle,kle,Ale,Ix,om,fq,Ole,Cle,xq,jle,Ple,Kle,wq,am,Tx,_q,Iq,Dle,Cx,Mle,Nle,Lle,qle,Fle,RDe,Tq=R(()=>{nq();Tn=require("node:http2"),Ex=require("node:stream");sq();Wn=class extends Error{constructor(t,e){super(t,e),this.name="RequestError"}},sle=new Set(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","server","user-agent"]),ole=/^[!#$%&'*+\-.^_`|~\dA-Za-z]+$/,tm=t=>t===9||t===10||t===13||t===32,oq=t=>{if(!tm(t.charCodeAt(0))&&!tm(t.charCodeAt(t.length-1)))return t;let e=0,r=t.length;for(;e<r&&tm(t.charCodeAt(e));)e++;for(;r>e&&tm(t.charCodeAt(r-1));)r--;return t.slice(e,r)},aq=/[\0\r\n]/,kx=globalThis.Headers,mq=(t,e=kx)=>{let r=new e;for(let n=0;n<t.length;n+=2){let i=t[n];i.startsWith(":")||r.append(i,t[n+1])}return r},Ax=class{#e;#t;#n;#i;constructor(t){this.#e=t,t instanceof Tn.Http2ServerRequest&&(this.#t=t.rawHeaders.slice())}get#s(){return this.#t??=this.#e.rawHeaders.slice()}get#r(){return this.#n||(this.#n=mq(this.#s),this.#t=void 0),this.#n}#o(t){if(typeof t=="string"){if(!ole.test(t))throw new TypeError(`Invalid header name: ${t}`);return t.toLowerCase()}}#a(t){let e=this.#e instanceof Tn.Http2ServerRequest?void 0:this.#e.headers;if(!e||sle.has(t)||t==="set-cookie"||t==="__proto__")return;if(!Object.hasOwn(e,t))return null;let r=e[t];if(typeof r=="string"){let n=oq(r);return aq.test(n)?void 0:n}}#c(t,e){let r=e==="cookie"?"; ":", ",n=null;for(let i=0;i<t.length;i+=2){let s=t[i];if(s.length===e.length&&s.toLowerCase()===e){let o=oq(t[i+1]);if(aq.test(o)){this.#i=!0;return}n=n===null?o:n+r+o}}return n}append(t,e){this.#r.append(t,e)}delete(t){this.#r.delete(t)}get(t){let e=this.#o(t);if(e&&!this.#n&&!this.#i){let r=this.#a(e);if(r!==void 0)return r;let n=this.#c(this.#s,e);if(n!==void 0)return n}return this.#r.get(t)}has(t){let e=this.#o(t);if(e&&!this.#n&&!this.#i){let r=this.#a(e);if(r!==void 0)return r!==null;let n=this.#c(this.#s,e);if(n!==void 0)return n!==null}return this.#r.has(t)}set(t,e){this.#r.set(t,e)}getSetCookie(){return this.#r.getSetCookie()}keys(){return this.#r.keys()}values(){return this.#r.values()}entries(){return this.#r.entries()}forEach(t,e){this.#r.forEach((r,n)=>{t.call(e,r,n,this)})}[Symbol.iterator](){return this.entries()}};Object.defineProperty(Ax.prototype,Symbol.for("nodejs.util.inspect.custom"),{value:function(t,e,r){return`Headers (lightweight) ${r(Object.fromEntries(this),{...e,depth:t==null?null:t-1})}`}});Object.setPrototypeOf(Ax.prototype,kx.prototype);hq=t=>globalThis.Headers===kx?new Ax(t):mq(t.rawHeaders,globalThis.Headers),ale=/^\/[!#$&-;=?-\[\]_a-z~]*$/,cle=/\/\.\.?(?:[/?#]|$)/,lle=/^[a-z0-9._-]+(?::(?:[1-5]\d{3,4}|[6-9]\d{3}))?$/,ule=(t,e,r)=>{let n=`${t}://${e}${r}`;if(lle.test(e)){if(r.length===0)return n+"/";if(r.charCodeAt(0)!==47)throw new Wn("Invalid URL");return!ale.test(r)||cle.test(r)?new URL(n).href:n}else{let i=new URL(n);if(i.hostname.length!==e.length&&i.hostname!==(e.includes(":")?e.replace(/:\d+$/,""):e).toLowerCase())throw new Wn("Invalid host header");return i.href}},dle=t=>t instanceof Wn?t:new Wn(t.message,{cause:t}),ple=global.Request,uc=class extends ple{constructor(t,e){if(typeof t=="object"&&bs in t){let r=e!==void 0&&"body"in e&&e.body!=null;if(t[Ki]&&!r)throw new TypeError("Cannot construct a Request with a Request object that has already been used.");t=t[bs]()}typeof e?.body?.getReader<"u"&&(e.duplex??="half"),super(t,e)}},yq=Symbol("wrapBodyStream"),fle=new Set(["latin1","binary","hex","base64","base64url"]),mle=t=>t===null||fle.has(t),vx=Symbol("bodyBufferedBeforeDisconnect"),Sx=Symbol("bodyBufferedLengthBeforeDisconnect"),gq=(t,e)=>Buffer.isBuffer(t)?t:Buffer.from(t,e??"utf8"),Rx=t=>!(t instanceof Tn.Http2ServerRequest)&&!!t.complete&&!!t.readableAborted&&typeof t.read=="function"&&mle(t.readableEncoding),cq=t=>{if(t.readableDidRead||!Rx(t))return;let e=t;e[Sx]??=t.readableLength},nm=(t,e)=>{if(t.readableDidRead&&!e||!Rx(t))return;let r=t;if(r[vx]!==void 0)return r[vx];let n,i=t.errored;if(i&&i.code!=="ECONNRESET")n=i;else if(r[Sx]!==void 0&&t.readableLength!==r[Sx])n=im();else{let s=e??[],o=t.read();o!==null&&s.push(gq(o,t.readableEncoding));let a=s.length===1?s[0]:Buffer.concat(s);n=a;let c=t.headers["content-length"];if(typeof c=="string"&&/^\d+$/.test(c)){let l=Number(c);Number.isSafeInteger(l)&&a.length!==l&&(n=im())}}return r[vx]=n,n},lq=(t,e)=>{if(e instanceof Error){t.error(e);return}e.length>0&&t.enqueue(e),t.close()},hle=(t,e,r,n,i)=>{let s={method:t,headers:r,signal:i.signal};if(t==="TRACE"){s.method="GET";let o=new uc(e,s);return Object.defineProperty(o,"method",{get(){return"TRACE"}}),o}if(!(t==="GET"||t==="HEAD"))if("rawBody"in n&&n.rawBody instanceof Buffer)s.body=new ReadableStream({start(o){o.enqueue(n.rawBody),o.close()}});else if(n[yq]){let o;s.body=new ReadableStream({async pull(a){try{if(!o){let u=nm(n);if(u!==void 0){lq(a,u);return}}o||=Ex.Readable.toWeb(n).getReader();let{done:c,value:l}=await o.read();c?a.close():a.enqueue(l)}catch(c){a.error(c)}}})}else{let o=nm(n);o!==void 0?s.body=new ReadableStream({start(a){lq(a,o)}}):s.body=Ex.Readable.toWeb(n)}return new uc(e,s)},bs=Symbol("getRequestCache"),ji=Symbol("requestCache"),dc=Symbol("incomingKey"),vu=Symbol("urlKey"),bq=Symbol("methodKey"),vq=Symbol("headersKey"),gu=Symbol("abortControllerKey"),xx=Symbol("getAbortController"),wx=Symbol("abortRequest"),gs=Symbol("bodyBuffer"),rm=Symbol("bodyReadPromise"),Ki=Symbol("bodyConsumedDirectly"),uq=Symbol("bodyLockReader"),bu=Symbol("abortReason"),im=()=>new TypeError("Body is unusable"),Eu=()=>Promise.reject(im()),yle=new TextDecoder,gle=t=>{if(t[Ki])return Eu();t[Ki]=!0},ble=t=>t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength),vle=t=>(t[vq]||=hq(t[dc])).get("content-type")||"",Ele=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,Sle=t=>{if(typeof t!="string"||t.length===0)return"GET";switch(t){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"PATCH":case"POST":case"PUT":case"QUERY":return t}let e=t.toUpperCase();switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"POST":case"PUT":return e;default:return t}},xle=t=>{if(!Ele.test(t))return new TypeError(`'${t}' is not a valid HTTP method.`);let e=t.toUpperCase();if(e==="CONNECT"||e==="TRACK"||e==="TRACE"&&t!=="TRACE")return new TypeError(`'${t}' HTTP method is unsupported.`)},Ox=(t,e,r)=>{if(t[Ki])return Eu();let n=t.method;if(n==="GET"||n==="HEAD")return t[bs]()[e]();let i=xle(n);if(i)return Promise.reject(i);if(t[ji]&&n!=="TRACE")return t[ji][e]();let s=gle(t);if(s)return s;let o=wle(t);if(o){let a=Promise.resolve(r(o,t));return t[gs]=void 0,a}return _le(t).then(a=>{let c=r(a,t);return t[gs]=void 0,c})},wle=t=>{let e=t[dc];if("rawBody"in e&&e.rawBody instanceof Buffer)return e.rawBody},dq=(t,e)=>{if(e.errored)return e.errored;let r=t[bu];return r!==void 0?r instanceof Error?r:new Error(String(r)):new Error("Client connection prematurely closed.")},_le=t=>{if(t[gs])return Promise.resolve(t[gs]);if(t[rm])return t[rm];let e=t[dc];if(e.readableDidRead)return Eu();let r=nm(e);if(r!==void 0)return r instanceof Error?Promise.reject(r):(t[gs]=r,Promise.resolve(r));let n=new Promise((i,s)=>{let o=[],a=!1,c=y=>{a||(a=!0,m(),y())},l=y=>{let b=e.errored??y;return!Rx(e)||b&&b.code!=="ECONNRESET"?!1:(c(()=>{let v=nm(e,o);v instanceof Error?s(v):v===void 0?s(y??dq(t,e)):(t[gs]=v,i(v))}),!0)},u=y=>{o.push(gq(y,e.readableEncoding))},d=()=>{c(()=>{let y=o.length===1?o[0]:Buffer.concat(o);t[gs]=y,i(y)})},p=y=>{l(y)||c(()=>{s(y)})},f=()=>{if(e.readableEnded){d();return}l()||c(()=>{s(dq(t,e))})},m=()=>{e.off("data",u),e.off("end",d),e.off("error",p),e.off("close",f),t[rm]=void 0};e.on("data",u),e.on("end",d),e.on("error",p),e.on("close",f),queueMicrotask(()=>{a||(e.readableEnded?d():e.errored?p(e.errored):e.destroyed&&f())})});return t[rm]=n,n},Qn={get method(){return this[bq]},get url(){return this[vu]},get headers(){return this[vq]||=hq(this[dc])},[wx](t){this[bu]===void 0&&(this[bu]=t);let e=this[gu];e&&!e.signal.aborted&&e.abort(t)},[xx](){return this[gu]||=new AbortController,this[bu]!==void 0&&!this[gu].signal.aborted&&this[gu].abort(this[bu]),this[gu]},[bs](){let t=this[xx]();if(this[ji])return this[ji];let e=this.method;if(this[Ki]&&!(e==="GET"||e==="HEAD")){this[gs]=void 0;let r={method:e==="TRACE"?"GET":e,headers:this.headers,signal:t.signal};e!=="TRACE"&&(r.body=new ReadableStream({start(i){i.close()}}),r.duplex="half");let n=new uc(this[vu],r);return e==="TRACE"&&Object.defineProperty(n,"method",{get(){return"TRACE"}}),this[ji]=n}return this[ji]=hle(this.method,this[vu],this.headers,this[dc],t)},get body(){if(!this[Ki])return this[bs]().body;let t=this[bs]();return!this[uq]&&t.body&&(this[uq]=t.body.getReader()),t.body},get bodyUsed(){return this[Ki]?!0:this[ji]?this[ji].bodyUsed:!1}};Object.defineProperty(Qn,"signal",{get(){return this[xx]().signal}});["cache","credentials","destination","integrity","mode","redirect","referrer","referrerPolicy","keepalive"].forEach(t=>{Object.defineProperty(Qn,t,{get(){return this[bs]()[t]}})});["clone","formData"].forEach(t=>{Object.defineProperty(Qn,t,{value:function(){if(this[Ki]){if(t==="clone")throw im();return Eu()}return this[bs]()[t]()}})});Object.defineProperty(Qn,"text",{value:function(){return Ox(this,"text",t=>yle.decode(t))}});Object.defineProperty(Qn,"arrayBuffer",{value:function(){return Ox(this,"arrayBuffer",t=>ble(t))}});Object.defineProperty(Qn,"blob",{value:function(){return Ox(this,"blob",(t,e)=>{let r=vle(e),n=r?{headers:{"content-type":r}}:void 0;return new Response(t,n).blob()})}});Object.defineProperty(Qn,"json",{value:function(){return this[Ki]?Eu():this.text().then(JSON.parse)}});Object.defineProperty(Qn,Symbol.for("nodejs.util.inspect.custom"),{value:function(t,e,r){return`Request (lightweight) ${r({method:this.method,url:this.url,headers:this.headers,nativeRequest:this[ji]},{...e,depth:t==null?null:t-1})}`}});Object.setPrototypeOf(Qn,uc.prototype);Ile=(t,e)=>{let r=Object.create(Qn);r[dc]=t,r[bq]=Sle(t.method);let n=t.url||"";if(n[0]!=="/"&&(n.startsWith("http://")||n.startsWith("https://"))){if(t instanceof Tn.Http2ServerRequest)throw new Wn("Absolute URL for :path is not allowed in HTTP/2");try{r[vu]=new URL(n).href}catch(o){throw new Wn("Invalid absolute URL",{cause:o})}return r}let i=(t instanceof Tn.Http2ServerRequest?t.authority:t.headers.host)||e;if(!i)throw new Wn("Missing host header");let s;if(t instanceof Tn.Http2ServerRequest){if(s=t.scheme,!(s==="http"||s==="https"))throw new Wn("Unsupported scheme")}else s=t.socket&&t.socket.encrypted?"https":"http";try{r[vu]=ule(s,i,n)}catch(o){throw o instanceof Wn?o:new Wn("Invalid URL",{cause:o})}return r},ys="text/plain; charset=UTF-8",_x=Symbol("responseCache"),lc=Symbol("getResponseCache"),Pi=Symbol("cache"),sm=global.Response,Yn=class Eq{#e;#t;[lc](){let e=this[Pi],r=e&&e[2]instanceof Headers?e[2]:void 0;return delete this[Pi],this[_x]||=new sm(this.#e,r?{status:this.#t?.status,statusText:this.#t?.statusText,headers:r}:this.#t)}constructor(e,r){let n;if(this.#e=e,r instanceof sm){let i=r[_x];if(i){this.#t=i,this[lc]();return}this.#t=r instanceof Eq?r.#t:r,n=new Headers(r.headers)}else this.#t=r;(e==null||typeof e=="string"||typeof e?.getReader<"u"||e instanceof Blob||e instanceof Uint8Array)&&(this[Pi]=[r?.status||200,e??null,n||r?.headers])}get headers(){let e=this[Pi];return e?(e[2]instanceof Headers||(e[2]=new Headers(e[2]||(e[1]===null?void 0:{"content-type":ys}))),e[2]):this[lc]().headers}get status(){return this[Pi]?.[0]??this[lc]().status}get ok(){let e=this.status;return e>=200&&e<300}};["body","bodyUsed","redirected","statusText","trailers","type","url"].forEach(t=>{Object.defineProperty(Yn.prototype,t,{get(){return this[lc]()[t]}})});["arrayBuffer","blob","clone","formData","json","text"].forEach(t=>{Object.defineProperty(Yn.prototype,t,{value:function(){return this[lc]()[t]()}})});Object.defineProperty(Yn.prototype,Symbol.for("nodejs.util.inspect.custom"),{value:function(t,e,r){return`Response (lightweight) ${r({status:this.status,headers:this.headers,ok:this.ok,nativeResponse:this[_x]},{...e,depth:t==null?null:t-1})}`}});Object.setPrototypeOf(Yn,sm);Object.setPrototypeOf(Yn.prototype,sm.prototype);Tle=/^https?:\/\/[!#-;=?-[\]_a-z~A-Z]+$/,kle=t=>t instanceof URL?t.href:Tle.test(t)?t:new URL(t).href,Ale=new Set([301,302,303,307,308]);Object.defineProperty(Yn,"redirect",{value:function(e,r=302){if(!Ale.has(r))throw new RangeError("Invalid status code");return new Yn(null,{status:r,headers:{location:kle(e)}})},writable:!0,configurable:!0});Object.defineProperty(Yn,"json",{value:function(e,r){let n=JSON.stringify(e);if(n===void 0)throw new TypeError("The data is not JSON serializable");let i=r?.headers,s;return i?(s=new Headers(i),s.has("content-type")||s.set("content-type","application/json")):s={"content-type":"application/json"},new Yn(n,{status:r?.status??200,statusText:r?.statusText,headers:s})},writable:!0,configurable:!0});Ix=(t,e)=>{let r={};if(t instanceof Headers||(t=new Headers(t??void 0)),t.has("set-cookie")){let n=[];for(let[i,s]of t)i==="set-cookie"?n.push(s):r[i]=s;n.length>0&&(r["set-cookie"]=n)}else for(let[n,i]of t)r[n]=i;return e&&(r["content-type"]??=e),r},om=Symbol("outgoingEnded"),fq=Symbol("incomingDraining"),Ole=500,Cle=64*1024*1024,xq=t=>{let e=t;if(t.destroyed||e[fq])return;if(e[fq]=!0,t instanceof Tn.Http2ServerRequest){try{t.stream?.close?.(Tn.constants.NGHTTP2_NO_ERROR)}catch{}return}let r=0,n=()=>{clearTimeout(s),t.off("data",o),t.off("end",n),t.off("error",n)},i=()=>{n();let a=t.socket;a&&!a.destroyed&&(typeof a.destroySoon=="function"?a.destroySoon():typeof a.destroy=="function"&&a.destroy())},s=setTimeout(i,Ole);s.unref?.();let o=a=>{r+=a.length,r>Cle&&i()};t.on("data",o),t.on("end",n),t.on("error",n),t.resume()},jle=(t,e,r,n)=>()=>{e.errored?(cq(e),t[wx](e.errored.toString())):r.writableFinished||(cq(e),t[wx]("Client connection prematurely closed.")),n&&!e.readableEnded&&setTimeout(()=>{e.readableEnded||setTimeout(()=>{xq(e)})})},Ple=t=>{if(!(Pi in t))return!1;let e=t[Pi][1];return e===null||typeof e=="string"||e instanceof Uint8Array},Kle=()=>new Response(null,{status:400}),wq=t=>new Response(null,{status:t instanceof Error&&(t.name==="TimeoutError"||t.constructor.name==="TimeoutError")?504:500}),am=(t,e)=>{let r=t instanceof Error?t:new Error("unknown error",{cause:t});r.code==="ERR_STREAM_PREMATURE_CLOSE"?console.info("The user aborted a request."):(console.error(t),e.headersSent||e.writeHead(500,{"Content-Type":"text/plain"}),e.end(`Error: ${r.message}`),e.destroy(r))},Tx=t=>{"flushHeaders"in t&&t.writable&&t.flushHeaders()},_q=async(t,e)=>{let[r,n,i]=t[Pi];if(!i){n===null?(e.writeHead(r),e.end()):typeof n=="string"?(e.writeHead(r,{"Content-Type":ys,"Content-Length":Buffer.byteLength(n)}),e.end(n)):n instanceof Uint8Array?(e.writeHead(r,{"Content-Type":ys,"Content-Length":n.byteLength}),e.end(n)):n instanceof Blob?(e.writeHead(r,{"Content-Type":ys,"Content-Length":n.size}),e.end(new Uint8Array(await n.arrayBuffer()))):(e.writeHead(r,{"Content-Type":ys}),Tx(e),await pq(n,e)?.catch(o=>am(o,e))),e[om]?.();return}let s=!1;if(i instanceof Headers)s=i.has("content-length"),i=Ix(i,n===null?void 0:ys);else if(Array.isArray(i)){let o=new Headers(i);s=o.has("content-length"),i=Ix(o,n===null?void 0:ys)}else for(let o in i)if(o.length===14&&o.toLowerCase()==="content-length"){s=!0;break}s||(typeof n=="string"?i["Content-Length"]=Buffer.byteLength(n):n instanceof Uint8Array?i["Content-Length"]=n.byteLength:n instanceof Blob&&(i["Content-Length"]=n.size)),e.writeHead(r,i),n==null?e.end():typeof n=="string"||n instanceof Uint8Array?e.end(n):n instanceof Blob?e.end(new Uint8Array(await n.arrayBuffer())):(Tx(e),await pq(n,e)?.catch(o=>am(o,e))),e[om]?.()},Iq=t=>typeof t.then=="function",Dle=async(t,e,r={})=>{if(Iq(t))if(r.errorHandler)try{t=await t}catch(i){let s=await r.errorHandler(i);if(!s)return;t=s}else t=await t.catch(wq);if(Pi in t)return _q(t,e);let n=Ix(t.headers,t.body===null?void 0:ys);if(t.body){let i=t.body.getReader(),s=[],o=!1,a;if(n["transfer-encoding"]!=="chunked"){let c=2;for(let l=0;l<c;l++){a||=i.read();let u=await Rle(a).catch(d=>{console.error(d),o=!0});if(!u){if(l===1){await new Promise(d=>setTimeout(d)),c=3;continue}break}if(a=void 0,u.value&&s.push(u.value),u.done){o=!0;break}}o&&!("content-length"in n)&&(n["content-length"]=s.reduce((l,u)=>l+u.length,0))}e.writeHead(t.status,n),s.forEach(c=>{e.write(c)}),o?e.end():(s.length===0&&Tx(e),await Sq(i,e,a))}else n[rq]||(e.writeHead(t.status,n),e.end());e[om]?.()},Cx=(t,e={})=>{let r=e.autoCleanupIncoming??!0;return e.overrideGlobalObjects!==!1&&global.Request!==uc&&(Object.defineProperty(global,"Request",{value:uc}),Object.defineProperty(global,"Response",{value:Yn})),async(n,i)=>{let s,o,a=!1,c=!1,l=()=>{!o||c||(c=!0,i.on("close",jle(o,n,i,a)))};try{if(o=Ile(n,e.hostname),a=r&&!(n.method==="GET"||n.method==="HEAD"),a&&(n[yq]=!0,n instanceof Tn.Http2ServerRequest&&(i[om]=()=>{n.readableEnded||setTimeout(()=>{n.readableEnded||setTimeout(()=>{n.destroy(),i.destroy()})})})),s=t(o,{incoming:n,outgoing:i}),!Iq(s)&&Ple(s))return a&&!n.readableEnded&&i.once("finish",()=>{n.readableEnded||xq(n)}),_q(s,i);l()}catch(u){if(s)return am(u,i);if(e.errorHandler){if(l(),s=await e.errorHandler(o?u:dle(u)),!s)return}else o?s=wq(u):s=Kle()}try{return await Dle(s,i,e)}catch(u){return am(u,i)}}},Mle=globalThis.CloseEvent??class extends Event{#e;constructor(t,e={}){super(t,e),this.#e=e}get wasClean(){return this.#e.wasClean??!1}get code(){return this.#e.code??0}get reason(){return this.#e.reason??""}},Nle=globalThis.ErrorEvent??class extends Event{#e;constructor(t,e={}){super(t,e),this.#e=e}get message(){return this.#e.message??""}get filename(){return this.#e.filename??""}get lineno(){return this.#e.lineno??0}get colno(){return this.#e.colno??0}get error(){return this.#e.error??null}},Lle=()=>Symbol("connection"),qle=Symbol("CONNECTION_SYMBOL_KEY"),Fle=Symbol("WAIT_FOR_WEBSOCKET_SYMBOL"),RDe=iq(async(t,e,r)=>{if(t.req.header("upgrade")?.toLowerCase()!=="websocket")return;let n=t.env,i=n[Fle];if(!i||!n.incoming)return new Response(null,{status:500});let s=Lle();return n[qle]=s,(async()=>{let o;try{o=await i(n.incoming,s)}catch{return}let a=[],c=(d,p)=>{a.push([d,p])};o.on("message",c);let l={binaryType:"arraybuffer",close(d,p){o.close(d,p)},protocol:o.protocol,raw:o,get readyState(){return o.readyState},send(d,p){o.send(d,{compress:p?.compress})},url:new URL(t.req.url)};try{e?.onOpen?.(new Event("open"),l)}catch(d){(r?.onError??console.error)(d)}let u=(d,p)=>{let f=Array.isArray(d)?d:[d];for(let m of f)try{e?.onMessage?.(new MessageEvent("message",{data:p?m instanceof ArrayBuffer?m:m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength):typeof m=="string"?m:Buffer.from(m).toString("utf-8")}),l)}catch(y){(r?.onError??console.error)(y)}};o.off("message",c);for(let d of a)u(...d);o.on("message",(d,p)=>{u(d,p)}),o.on("close",(d,p)=>{try{e?.onClose?.(new Mle("close",{code:d,reason:p.toString()}),l)}catch(f){(r?.onError??console.error)(f)}}),o.on("error",d=>{try{e?.onError?.(new Nle("error",{error:d}),l)}catch(p){(r?.onError??console.error)(p)}})})(),new Response})});function $le(t){if(t)try{return kq.default.parse(t).type}catch{let e=(t.split(";",1)[0]??"").trim().toLowerCase();return e===""||t.slice(e.length).includes(",")?void 0:e}}function Aq(t){return t==="application/json"?!0:$le(t)==="application/json"}var kq,Rq=R(()=>{kq=tt(rE(),1)});function Oq(t,e){if(!Number.isFinite(t)||t<1)return;let r=setInterval(e,Math.min(t,2147483647));return r.unref?.(),r}var Cq=R(()=>{});var g,Px,jq,fc,vs,lm,Et,Pq,Kq,LDe,Ule,Jle,Kx,Pr,Su,Dq,qt,tn,rn,Ft,um,Mq,Di,Nq,Lq,Dx,Mi,be,Mx,mc,Nx,qDe,dm,zle,pm,Gle,xu,pc,qq,Ble,Hle,Vle,Wle,Yle,Qle,fm,Lx,Xle,Zle,qx,mm,eue,tue,hm,rue,wu,_u,nue,Iu,hc,iue,Tu,ym,gm,bm,FDe,vm,Em,Sm,Fq,$q,Uq,Fx,Jq,ku,yc,zq,sue,oue,aue,cue,lue,$x,uue,due,pue,fue,mue,hue,yue,gue,bue,vue,Eue,Sue,xue,wue,_ue,Iue,Ux,Jx,zx,Tue,kue,Aue,Gx,Rue,Oue,Cue,jue,Pue,Gq,Bx,Kue,xm,$De,Due,Au,Mue,UDe,Ru,Nue,Hx,Lue,que,Fue,$ue,Uue,Jue,zue,cm,Gue,Bue,Hue,Ou,Vx,Vue,Wue,Yue,Que,Xue,Zue,ede,tde,rde,nde,ide,sde,ode,ade,cde,lde,ude,dde,gc,pde,fde,mde,hde,yde,gde,bde,Wx,vde,JDe,zDe,GDe,BDe,HDe,VDe,ce,jx,bc=R(()=>{g=tt(require("zod/v4"),1),Px="2025-11-25",jq="2025-03-26",fc=[Px,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],vs="io.modelcontextprotocol/related-task",lm="2.0",Et=g.custom(t=>t!==null&&(typeof t=="object"||typeof t=="function")),Pq=g.union([g.string(),g.number().int()]),Kq=g.string(),LDe=g.looseObject({ttl:g.number().optional(),pollInterval:g.number().optional()}),Ule=g.object({ttl:g.number().optional()}),Jle=g.object({taskId:g.string()}),Kx=g.looseObject({progressToken:Pq.optional(),[vs]:Jle.optional()}),Pr=g.object({_meta:Kx.optional()}),Su=Pr.extend({task:Ule.optional()}),Dq=t=>Su.safeParse(t).success,qt=g.object({method:g.string(),params:Pr.loose().optional()}),tn=g.object({_meta:Kx.optional()}),rn=g.object({method:g.string(),params:tn.loose().optional()}),Ft=g.looseObject({_meta:Kx.optional()}),um=g.union([g.string(),g.number().int()]),Mq=g.object({jsonrpc:g.literal(lm),id:um,...qt.shape}).strict(),Di=t=>Mq.safeParse(t).success,Nq=g.object({jsonrpc:g.literal(lm),...rn.shape}).strict(),Lq=t=>Nq.safeParse(t).success,Dx=g.object({jsonrpc:g.literal(lm),id:um,result:Ft}).strict(),Mi=t=>Dx.safeParse(t).success;(function(t){t[t.ConnectionClosed=-32e3]="ConnectionClosed",t[t.RequestTimeout=-32001]="RequestTimeout",t[t.ParseError=-32700]="ParseError",t[t.InvalidRequest=-32600]="InvalidRequest",t[t.MethodNotFound=-32601]="MethodNotFound",t[t.InvalidParams=-32602]="InvalidParams",t[t.InternalError=-32603]="InternalError",t[t.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(be||(be={}));Mx=g.object({jsonrpc:g.literal(lm),id:um.optional(),error:g.object({code:g.number().int(),message:g.string(),data:g.unknown().optional()})}).strict(),mc=t=>Mx.safeParse(t).success,Nx=g.union([Mq,Nq,Dx,Mx]),qDe=g.union([Dx,Mx]),dm=Ft.strict(),zle=tn.extend({requestId:um.optional(),reason:g.string().optional()}),pm=rn.extend({method:g.literal("notifications/cancelled"),params:zle}),Gle=g.object({src:g.string(),mimeType:g.string().optional(),sizes:g.array(g.string()).optional(),theme:g.enum(["light","dark"]).optional()}),xu=g.object({icons:g.array(Gle).optional()}),pc=g.object({name:g.string(),title:g.string().optional()}),qq=pc.extend({...pc.shape,...xu.shape,version:g.string(),websiteUrl:g.string().optional(),description:g.string().optional()}),Ble=g.intersection(g.object({applyDefaults:g.boolean().optional()}),g.record(g.string(),g.unknown())),Hle=g.preprocess(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,g.intersection(g.object({form:Ble.optional(),url:Et.optional()}),g.record(g.string(),g.unknown()).optional())),Vle=g.looseObject({list:Et.optional(),cancel:Et.optional(),requests:g.looseObject({sampling:g.looseObject({createMessage:Et.optional()}).optional(),elicitation:g.looseObject({create:Et.optional()}).optional()}).optional()}),Wle=g.looseObject({list:Et.optional(),cancel:Et.optional(),requests:g.looseObject({tools:g.looseObject({call:Et.optional()}).optional()}).optional()}),Yle=g.object({experimental:g.record(g.string(),Et).optional(),sampling:g.object({context:Et.optional(),tools:Et.optional()}).optional(),elicitation:Hle.optional(),roots:g.object({listChanged:g.boolean().optional()}).optional(),tasks:Vle.optional(),extensions:g.record(g.string(),Et).optional()}),Qle=Pr.extend({protocolVersion:g.string(),capabilities:Yle,clientInfo:qq}),fm=qt.extend({method:g.literal("initialize"),params:Qle}),Lx=t=>fm.safeParse(t).success,Xle=g.object({experimental:g.record(g.string(),Et).optional(),logging:Et.optional(),completions:Et.optional(),prompts:g.object({listChanged:g.boolean().optional()}).optional(),resources:g.object({subscribe:g.boolean().optional(),listChanged:g.boolean().optional()}).optional(),tools:g.object({listChanged:g.boolean().optional()}).optional(),tasks:Wle.optional(),extensions:g.record(g.string(),Et).optional()}),Zle=Ft.extend({protocolVersion:g.string(),capabilities:Xle,serverInfo:qq,instructions:g.string().optional()}),qx=rn.extend({method:g.literal("notifications/initialized"),params:tn.optional()}),mm=qt.extend({method:g.literal("ping"),params:Pr.optional()}),eue=g.object({progress:g.number(),total:g.optional(g.number()),message:g.optional(g.string())}),tue=g.object({...tn.shape,...eue.shape,progressToken:Pq}),hm=rn.extend({method:g.literal("notifications/progress"),params:tue}),rue=Pr.extend({cursor:Kq.optional()}),wu=qt.extend({params:rue.optional()}),_u=Ft.extend({nextCursor:Kq.optional()}),nue=g.enum(["working","input_required","completed","failed","cancelled"]),Iu=g.object({taskId:g.string(),status:nue,ttl:g.union([g.number(),g.null()]),createdAt:g.string(),lastUpdatedAt:g.string(),pollInterval:g.optional(g.number()),statusMessage:g.optional(g.string())}),hc=Ft.extend({task:Iu}),iue=tn.merge(Iu),Tu=rn.extend({method:g.literal("notifications/tasks/status"),params:iue}),ym=qt.extend({method:g.literal("tasks/get"),params:Pr.extend({taskId:g.string()})}),gm=Ft.merge(Iu),bm=qt.extend({method:g.literal("tasks/result"),params:Pr.extend({taskId:g.string()})}),FDe=Ft.loose(),vm=wu.extend({method:g.literal("tasks/list")}),Em=_u.extend({tasks:g.array(Iu)}),Sm=qt.extend({method:g.literal("tasks/cancel"),params:Pr.extend({taskId:g.string()})}),Fq=Ft.merge(Iu),$q=g.object({uri:g.string(),mimeType:g.optional(g.string()),_meta:g.record(g.string(),g.unknown()).optional()}),Uq=$q.extend({text:g.string()}),Fx=g.string().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),Jq=$q.extend({blob:Fx}),ku=g.enum(["user","assistant"]),yc=g.object({audience:g.array(ku).optional(),priority:g.number().min(0).max(1).optional(),lastModified:g.iso.datetime({offset:!0}).optional()}),zq=g.object({...pc.shape,...xu.shape,uri:g.string(),description:g.optional(g.string()),mimeType:g.optional(g.string()),size:g.optional(g.number()),annotations:yc.optional(),_meta:g.optional(g.looseObject({}))}),sue=g.object({...pc.shape,...xu.shape,uriTemplate:g.string(),description:g.optional(g.string()),mimeType:g.optional(g.string()),annotations:yc.optional(),_meta:g.optional(g.looseObject({}))}),oue=wu.extend({method:g.literal("resources/list")}),aue=_u.extend({resources:g.array(zq)}),cue=wu.extend({method:g.literal("resources/templates/list")}),lue=_u.extend({resourceTemplates:g.array(sue)}),$x=Pr.extend({uri:g.string()}),uue=$x,due=qt.extend({method:g.literal("resources/read"),params:uue}),pue=Ft.extend({contents:g.array(g.union([Uq,Jq]))}),fue=rn.extend({method:g.literal("notifications/resources/list_changed"),params:tn.optional()}),mue=$x,hue=qt.extend({method:g.literal("resources/subscribe"),params:mue}),yue=$x,gue=qt.extend({method:g.literal("resources/unsubscribe"),params:yue}),bue=tn.extend({uri:g.string()}),vue=rn.extend({method:g.literal("notifications/resources/updated"),params:bue}),Eue=g.object({name:g.string(),description:g.optional(g.string()),required:g.optional(g.boolean())}),Sue=g.object({...pc.shape,...xu.shape,description:g.optional(g.string()),arguments:g.optional(g.array(Eue)),_meta:g.optional(g.looseObject({}))}),xue=wu.extend({method:g.literal("prompts/list")}),wue=_u.extend({prompts:g.array(Sue)}),_ue=Pr.extend({name:g.string(),arguments:g.record(g.string(),g.string()).optional()}),Iue=qt.extend({method:g.literal("prompts/get"),params:_ue}),Ux=g.object({type:g.literal("text"),text:g.string(),annotations:yc.optional(),_meta:g.record(g.string(),g.unknown()).optional()}),Jx=g.object({type:g.literal("image"),data:Fx,mimeType:g.string(),annotations:yc.optional(),_meta:g.record(g.string(),g.unknown()).optional()}),zx=g.object({type:g.literal("audio"),data:Fx,mimeType:g.string(),annotations:yc.optional(),_meta:g.record(g.string(),g.unknown()).optional()}),Tue=g.object({type:g.literal("tool_use"),name:g.string(),id:g.string(),input:g.record(g.string(),g.unknown()),_meta:g.record(g.string(),g.unknown()).optional()}),kue=g.object({type:g.literal("resource"),resource:g.union([Uq,Jq]),annotations:yc.optional(),_meta:g.record(g.string(),g.unknown()).optional()}),Aue=zq.extend({type:g.literal("resource_link")}),Gx=g.union([Ux,Jx,zx,Aue,kue]),Rue=g.object({role:ku,content:Gx}),Oue=Ft.extend({description:g.string().optional(),messages:g.array(Rue)}),Cue=rn.extend({method:g.literal("notifications/prompts/list_changed"),params:tn.optional()}),jue=g.object({title:g.string().optional(),readOnlyHint:g.boolean().optional(),destructiveHint:g.boolean().optional(),idempotentHint:g.boolean().optional(),openWorldHint:g.boolean().optional()}),Pue=g.object({taskSupport:g.enum(["required","optional","forbidden"]).optional()}),Gq=g.object({...pc.shape,...xu.shape,description:g.string().optional(),inputSchema:g.object({type:g.literal("object"),properties:g.record(g.string(),Et).optional(),required:g.array(g.string()).optional()}).catchall(g.unknown()),outputSchema:g.object({type:g.literal("object"),properties:g.record(g.string(),Et).optional(),required:g.array(g.string()).optional()}).catchall(g.unknown()).optional(),annotations:jue.optional(),execution:Pue.optional(),_meta:g.record(g.string(),g.unknown()).optional()}),Bx=wu.extend({method:g.literal("tools/list")}),Kue=_u.extend({tools:g.array(Gq)}),xm=Ft.extend({content:g.array(Gx).default([]),structuredContent:g.record(g.string(),g.unknown()).optional(),isError:g.boolean().optional()}),$De=xm.or(Ft.extend({toolResult:g.unknown()})),Due=Su.extend({name:g.string(),arguments:g.record(g.string(),g.unknown()).optional()}),Au=qt.extend({method:g.literal("tools/call"),params:Due}),Mue=rn.extend({method:g.literal("notifications/tools/list_changed"),params:tn.optional()}),UDe=g.object({autoRefresh:g.boolean().default(!0),debounceMs:g.number().int().nonnegative().default(300)}),Ru=g.enum(["debug","info","notice","warning","error","critical","alert","emergency"]),Nue=Pr.extend({level:Ru}),Hx=qt.extend({method:g.literal("logging/setLevel"),params:Nue}),Lue=tn.extend({level:Ru,logger:g.string().optional(),data:g.unknown()}),que=rn.extend({method:g.literal("notifications/message"),params:Lue}),Fue=g.object({name:g.string().optional()}),$ue=g.object({hints:g.array(Fue).optional(),costPriority:g.number().min(0).max(1).optional(),speedPriority:g.number().min(0).max(1).optional(),intelligencePriority:g.number().min(0).max(1).optional()}),Uue=g.object({mode:g.enum(["auto","required","none"]).optional()}),Jue=g.object({type:g.literal("tool_result"),toolUseId:g.string().describe("The unique identifier for the corresponding tool call."),content:g.array(Gx).default([]),structuredContent:g.object({}).loose().optional(),isError:g.boolean().optional(),_meta:g.record(g.string(),g.unknown()).optional()}),zue=g.discriminatedUnion("type",[Ux,Jx,zx]),cm=g.discriminatedUnion("type",[Ux,Jx,zx,Tue,Jue]),Gue=g.object({role:ku,content:g.union([cm,g.array(cm)]),_meta:g.record(g.string(),g.unknown()).optional()}),Bue=Su.extend({messages:g.array(Gue),modelPreferences:$ue.optional(),systemPrompt:g.string().optional(),includeContext:g.enum(["none","thisServer","allServers"]).optional(),temperature:g.number().optional(),maxTokens:g.number().int(),stopSequences:g.array(g.string()).optional(),metadata:Et.optional(),tools:g.array(Gq).optional(),toolChoice:Uue.optional()}),Hue=qt.extend({method:g.literal("sampling/createMessage"),params:Bue}),Ou=Ft.extend({model:g.string(),stopReason:g.optional(g.enum(["endTurn","stopSequence","maxTokens"]).or(g.string())),role:ku,content:zue}),Vx=Ft.extend({model:g.string(),stopReason:g.optional(g.enum(["endTurn","stopSequence","maxTokens","toolUse"]).or(g.string())),role:ku,content:g.union([cm,g.array(cm)])}),Vue=g.object({type:g.literal("boolean"),title:g.string().optional(),description:g.string().optional(),default:g.boolean().optional()}),Wue=g.object({type:g.literal("string"),title:g.string().optional(),description:g.string().optional(),minLength:g.number().optional(),maxLength:g.number().optional(),format:g.enum(["email","uri","date","date-time"]).optional(),default:g.string().optional()}),Yue=g.object({type:g.enum(["number","integer"]),title:g.string().optional(),description:g.string().optional(),minimum:g.number().optional(),maximum:g.number().optional(),default:g.number().optional()}),Que=g.object({type:g.literal("string"),title:g.string().optional(),description:g.string().optional(),enum:g.array(g.string()),default:g.string().optional()}),Xue=g.object({type:g.literal("string"),title:g.string().optional(),description:g.string().optional(),oneOf:g.array(g.object({const:g.string(),title:g.string()})),default:g.string().optional()}),Zue=g.object({type:g.literal("string"),title:g.string().optional(),description:g.string().optional(),enum:g.array(g.string()),enumNames:g.array(g.string()).optional(),default:g.string().optional()}),ede=g.union([Que,Xue]),tde=g.object({type:g.literal("array"),title:g.string().optional(),description:g.string().optional(),minItems:g.number().optional(),maxItems:g.number().optional(),items:g.object({type:g.literal("string"),enum:g.array(g.string())}),default:g.array(g.string()).optional()}),rde=g.object({type:g.literal("array"),title:g.string().optional(),description:g.string().optional(),minItems:g.number().optional(),maxItems:g.number().optional(),items:g.object({anyOf:g.array(g.object({const:g.string(),title:g.string()}))}),default:g.array(g.string()).optional()}),nde=g.union([tde,rde]),ide=g.union([Zue,ede,nde]),sde=g.union([ide,Vue,Wue,Yue]),ode=Su.extend({mode:g.literal("form").optional(),message:g.string(),requestedSchema:g.object({type:g.literal("object"),properties:g.record(g.string(),sde),required:g.array(g.string()).optional()})}),ade=Su.extend({mode:g.literal("url"),message:g.string(),elicitationId:g.string(),url:g.string().url()}),cde=g.union([ode,ade]),lde=qt.extend({method:g.literal("elicitation/create"),params:cde}),ude=tn.extend({elicitationId:g.string()}),dde=rn.extend({method:g.literal("notifications/elicitation/complete"),params:ude}),gc=Ft.extend({action:g.enum(["accept","decline","cancel"]),content:g.preprocess(t=>t===null?void 0:t,g.record(g.string(),g.union([g.string(),g.number(),g.boolean(),g.array(g.string())])).optional())}),pde=g.object({type:g.literal("ref/resource"),uri:g.string()}),fde=g.object({type:g.literal("ref/prompt"),name:g.string()}),mde=Pr.extend({ref:g.union([fde,pde]),argument:g.object({name:g.string(),value:g.string()}),context:g.object({arguments:g.record(g.string(),g.string()).optional()}).optional()}),hde=qt.extend({method:g.literal("completion/complete"),params:mde}),yde=Ft.extend({completion:g.looseObject({values:g.array(g.string()).max(100),total:g.optional(g.number().int()),hasMore:g.optional(g.boolean())})}),gde=g.object({uri:g.string().startsWith("file://"),name:g.string().optional(),_meta:g.record(g.string(),g.unknown()).optional()}),bde=qt.extend({method:g.literal("roots/list"),params:Pr.optional()}),Wx=Ft.extend({roots:g.array(gde)}),vde=rn.extend({method:g.literal("notifications/roots/list_changed"),params:tn.optional()}),JDe=g.union([mm,fm,hde,Hx,Iue,xue,oue,cue,due,hue,gue,Au,Bx,ym,bm,vm,Sm]),zDe=g.union([pm,hm,qx,vde,Tu]),GDe=g.union([dm,Ou,Vx,gc,Wx,gm,Em,hc]),BDe=g.union([mm,Hue,lde,bde,ym,bm,vm,Sm]),HDe=g.union([pm,hm,que,vue,fue,Mue,Cue,Tu,dde]),VDe=g.union([dm,Zle,yde,Oue,wue,aue,lue,pue,xm,Kue,gm,Em,hc]),ce=class t extends Error{constructor(e,r,n){super(`MCP error ${e}: ${r}`),this.code=e,this.data=n,this.name="McpError"}static fromError(e,r,n){if(e===be.UrlElicitationRequired&&n){let i=n;if(i.elicitations)return new jx(i.elicitations,r)}return new t(e,r,n)}},jx=class extends ce{constructor(e,r=`URL elicitation${e.length>1?"s":""} required`){super(be.UrlElicitationRequired,r,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}}});var wm,Bq=R(()=>{Rq();Cq();bc();wm=class{constructor(e={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._resumableStreams=new Set,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this._closed=!1,this.sessionIdGenerator=e.sessionIdGenerator,this._enableJsonResponse=e.enableJsonResponse??!1,this._eventStore=e.eventStore,this._onsessioninitialized=e.onsessioninitialized,this._onsessionclosed=e.onsessionclosed,this._allowedHosts=e.allowedHosts,this._allowedOrigins=e.allowedOrigins,this._enableDnsRebindingProtection=e.enableDnsRebindingProtection??!1,this._retryInterval=e.retryInterval,this._keepAliveMs=e.keepAliveMs??15e3}startKeepAlive(e,r){if(this._closed)return;let n=Oq(this._keepAliveMs,()=>{try{e.enqueue(r.encode(`: keepalive
|
||
|
||
`))}catch{n!==void 0&&clearInterval(n)}});return n}async start(){if(this._started)throw new Error("Transport already started");this._started=!0}createJsonErrorResponse(e,r,n,i){let s={code:r,message:n};return i?.data!==void 0&&(s.data=i.data),new Response(JSON.stringify({jsonrpc:"2.0",error:s,id:null}),{status:e,headers:{"Content-Type":"application/json",...i?.headers}})}validateRequestHeaders(e){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let r=e.headers.get("host");if(!r||!this._allowedHosts.includes(r)){let n=`Invalid Host header: ${r}`;return this.onerror?.(new Error(n)),this.createJsonErrorResponse(403,-32e3,n)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let r=e.headers.get("origin");if(r&&!this._allowedOrigins.includes(r)){let n=`Invalid Origin header: ${r}`;return this.onerror?.(new Error(n)),this.createJsonErrorResponse(403,-32e3,n)}}}}async handleRequest(e,r){if(this._closed)return this.createJsonErrorResponse(404,-32001,"Session not found");if(!this.sessionIdGenerator&&this._hasHandledRequest)throw new Error("Stateless transport cannot be reused across requests. Create a new transport per request.");this._hasHandledRequest=!0;let n=this.validateRequestHeaders(e);if(n)return n;switch(e.method){case"POST":return this.handlePostRequest(e,r);case"GET":return this.handleGetRequest(e);case"DELETE":return this.handleDeleteRequest(e);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(e,r,n,i){if(!this._eventStore||i<"2025-11-25")return;let s=await this._eventStore.storeEvent(n,{}),o=`id: ${s}
|
||
data:
|
||
|
||
`;this._retryInterval!==void 0&&(o=`id: ${s}
|
||
retry: ${this._retryInterval}
|
||
data:
|
||
|
||
`),e.enqueue(r.encode(o)),this._resumableStreams.add(n)}async handleGetRequest(e){if(!e.headers.get("accept")?.includes("text/event-stream"))return this.onerror?.(new Error("Not Acceptable: Client must accept text/event-stream")),this.createJsonErrorResponse(406,-32e3,"Not Acceptable: Client must accept text/event-stream");let n=this.validateSession(e);if(n)return n;let i=this.validateProtocolVersion(e);if(i)return i;if(this._eventStore){let u=e.headers.get("last-event-id");if(u)return this.replayEvents(u)}if(this._streamMapping.get(this._standaloneSseStreamId)!==void 0)return this.onerror?.(new Error("Conflict: Only one SSE stream is allowed per session")),this.createJsonErrorResponse(409,-32e3,"Conflict: Only one SSE stream is allowed per session");let s=new TextEncoder,o,a,c=new ReadableStream({start:u=>{o=u},cancel:()=>{a!==void 0&&clearInterval(a),this._streamMapping.get(this._standaloneSseStreamId)?.controller===o&&this._streamMapping.delete(this._standaloneSseStreamId)}}),l={"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"};return this.sessionId!==void 0&&(l["mcp-session-id"]=this.sessionId),this._streamMapping.set(this._standaloneSseStreamId,{controller:o,encoder:s,cleanup:()=>{a!==void 0&&clearInterval(a),this._streamMapping.delete(this._standaloneSseStreamId);try{o.close()}catch{}}}),a=this.startKeepAlive(o,s),new Response(c,{headers:l})}async replayEvents(e){if(!this._eventStore)return this.onerror?.(new Error("Event store not configured")),this.createJsonErrorResponse(400,-32e3,"Event store not configured");try{let r;if(this._eventStore.getStreamIdForEventId){if(r=await this._eventStore.getStreamIdForEventId(e),!r)return this.onerror?.(new Error("Invalid event ID format")),this.createJsonErrorResponse(400,-32e3,"Invalid event ID format");if(this._streamMapping.get(r)!==void 0)return this.onerror?.(new Error("Conflict: Stream already has an active connection")),this.createJsonErrorResponse(409,-32e3,"Conflict: Stream already has an active connection")}let n={"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"};this.sessionId!==void 0&&(n["mcp-session-id"]=this.sessionId);let i=new TextEncoder,s,o,a,c=!1,l=new ReadableStream({start:d=>{s=d},cancel:()=>{c=!0,o!==void 0&&clearInterval(o),a!==void 0&&this._streamMapping.get(a)?.controller===s&&this._streamMapping.delete(a)}}),u=new Set;if(a=await this._eventStore.replayEventsAfter(e,{send:async(d,p)=>{if(this.writeSSEEvent(s,i,p,d))u.add(d);else{this.onerror?.(new Error("Failed replay events"));try{s.close()}catch{}}}}),this._closed||c){try{s.close()}catch{}return this.createJsonErrorResponse(404,-32001,"Session not found")}return this._streamMapping.get(a)?.cleanup(),this._streamMapping.set(a,{controller:s,encoder:i,replayedEventIds:u,cleanup:()=>{o!==void 0&&clearInterval(o),this._streamMapping.delete(a);try{s.close()}catch{}}}),this._resumableStreams.add(a),o=this.startKeepAlive(s,i),new Response(l,{headers:n})}catch(r){return this.onerror?.(r),this.createJsonErrorResponse(500,-32e3,"Error replaying events")}}writeSSEEvent(e,r,n,i){try{let s=`event: message
|
||
`;return i&&(s+=`id: ${i}
|
||
`),s+=`data: ${JSON.stringify(n)}
|
||
|
||
`,e.enqueue(r.encode(s)),!0}catch(s){return this.onerror?.(s),!1}}handleUnsupportedRequest(){return this.onerror?.(new Error("Method not allowed.")),new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}),{status:405,headers:{Allow:"GET, POST, DELETE","Content-Type":"application/json"}})}async handlePostRequest(e,r){try{let n=e.headers.get("accept");if(!n?.includes("application/json")||!n.includes("text/event-stream"))return this.onerror?.(new Error("Not Acceptable: Client must accept both application/json and text/event-stream")),this.createJsonErrorResponse(406,-32e3,"Not Acceptable: Client must accept both application/json and text/event-stream");let i=e.headers.get("content-type");if(!Aq(i))return this.onerror?.(new Error("Unsupported Media Type: Content-Type must be application/json")),this.createJsonErrorResponse(415,-32e3,"Unsupported Media Type: Content-Type must be application/json");let s={headers:Object.fromEntries(e.headers.entries()),url:new URL(e.url)},o;if(r?.parsedBody!==void 0)o=r.parsedBody;else try{o=await e.json()}catch{return this.onerror?.(new Error("Parse error: Invalid JSON")),this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON")}let a;try{Array.isArray(o)?a=o.map(E=>Nx.parse(E)):a=[Nx.parse(o)]}catch{return this.onerror?.(new Error("Parse error: Invalid JSON-RPC message")),this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON-RPC message")}if(this._closed)return this.createJsonErrorResponse(404,-32001,"Session not found");let c=a.some(Lx);if(c){if(this._initialized&&this.sessionId!==void 0)return this.onerror?.(new Error("Invalid Request: Server already initialized")),this.createJsonErrorResponse(400,-32600,"Invalid Request: Server already initialized");if(a.length>1)return this.onerror?.(new Error("Invalid Request: Only one initialization request is allowed")),this.createJsonErrorResponse(400,-32600,"Invalid Request: Only one initialization request is allowed");this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized&&await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!c){let E=this.validateSession(e);if(E)return E;let S=this.validateProtocolVersion(e);if(S)return S}if(this._closed)return this.createJsonErrorResponse(404,-32001,"Session not found");if(!a.some(Di)){for(let E of a)this.onmessage?.(E,{authInfo:r?.authInfo,requestInfo:s});return new Response(null,{status:202})}let u=crypto.randomUUID(),d=a.find(E=>Lx(E)),p=d?d.params.protocolVersion:e.headers.get("mcp-protocol-version")??jq;if(this._enableJsonResponse)return new Promise(E=>{this._streamMapping.set(u,{resolveJson:E,cleanup:()=>{this._streamMapping.delete(u)}});for(let S of a)Di(S)&&this._requestToStreamMapping.set(S.id,u);for(let S of a)this.onmessage?.(S,{authInfo:r?.authInfo,requestInfo:s})});let f=new TextEncoder,m,y,b=new ReadableStream({start:E=>{m=E},cancel:()=>{y!==void 0&&clearInterval(y),this._streamMapping.get(u)?.controller===m&&this._streamMapping.delete(u)}}),v={"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"};this.sessionId!==void 0&&(v["mcp-session-id"]=this.sessionId);for(let E of a)Di(E)&&(this._streamMapping.set(u,{controller:m,encoder:f,cleanup:()=>{y!==void 0&&clearInterval(y),this._streamMapping.delete(u);try{m.close()}catch{}}}),this._requestToStreamMapping.set(E.id,u));try{await this.writePrimingEvent(m,f,u,p);for(let E of a){let S,k;Di(E)&&this._eventStore&&p>="2025-11-25"&&(S=()=>{this.closeSSEStream(E.id)},k=()=>{this.closeStandaloneSSEStream()}),this.onmessage?.(E,{authInfo:r?.authInfo,requestInfo:s,closeSSEStream:S,closeStandaloneSSEStream:k})}}catch(E){this._streamMapping.get(u)?.cleanup(),this._resumableStreams.delete(u);for(let S of a)Di(S)&&this._requestToStreamMapping.delete(S.id);throw E}return this._streamMapping.get(u)?.controller===m&&(y=this.startKeepAlive(m,f)),new Response(b,{status:200,headers:v})}catch(n){return this.onerror?.(n),this.createJsonErrorResponse(400,-32700,"Parse error",{data:String(n)})}}async handleDeleteRequest(e){let r=this.validateSession(e);if(r)return r;let n=this.validateProtocolVersion(e);if(n)return n;try{return await Promise.resolve(this._onsessionclosed?.(this.sessionId)),new Response(null,{status:200})}finally{await this.close()}}validateSession(e){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.onerror?.(new Error("Bad Request: Server not initialized")),this.createJsonErrorResponse(400,-32e3,"Bad Request: Server not initialized");let r=e.headers.get("mcp-session-id");if(!r)return this.onerror?.(new Error("Bad Request: Mcp-Session-Id header is required")),this.createJsonErrorResponse(400,-32e3,"Bad Request: Mcp-Session-Id header is required");if(r!==this.sessionId)return this.onerror?.(new Error("Session not found")),this.createJsonErrorResponse(404,-32001,"Session not found")}validateProtocolVersion(e){let r=e.headers.get("mcp-protocol-version");if(r!==null&&!fc.includes(r))return this.onerror?.(new Error(`Bad Request: Unsupported protocol version: ${r} (supported versions: ${fc.join(", ")})`)),this.createJsonErrorResponse(400,-32e3,`Bad Request: Unsupported protocol version: ${r} (supported versions: ${fc.join(", ")})`)}async close(){this._closed||(this._closed=!0,this._streamMapping.forEach(({cleanup:e})=>{e()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this._resumableStreams.clear(),this.onclose?.())}closeSSEStream(e){let r=this._requestToStreamMapping.get(e);if(!r)return;let n=this._streamMapping.get(r);n&&n.cleanup()}closeStandaloneSSEStream(){let e=this._streamMapping.get(this._standaloneSseStreamId);e&&e.cleanup()}async send(e,r){let n=r?.relatedRequestId;if((Mi(e)||mc(e))&&(n=e.id),n===void 0){if(Mi(e)||mc(e))throw new Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let o;this._eventStore&&(o=await this._eventStore.storeEvent(this._standaloneSseStreamId,e));let a=this._streamMapping.get(this._standaloneSseStreamId);if(a===void 0)return;a.controller&&a.encoder&&(o===void 0||!a.replayedEventIds?.has(o))&&this.writeSSEEvent(a.controller,a.encoder,e,o);return}let i=this._requestToStreamMapping.get(n);if(!i)throw new Error(`No connection established for request ID: ${String(n)}`);let s=this._streamMapping.get(i);if(!this._enableJsonResponse){let o;this._eventStore&&(o=await this._eventStore.storeEvent(i,e),s=this._streamMapping.get(i)),s?.controller&&s?.encoder&&(o===void 0||!s.replayedEventIds?.has(o))&&this.writeSSEEvent(s.controller,s.encoder,e,o)&&o!==void 0&&this._resumableStreams.add(i)}if(Mi(e)||mc(e)){this._requestResponseMap.set(n,e);let o=Array.from(this._requestToStreamMapping.entries()).filter(([c,l])=>l===i).map(([c])=>c);if(o.every(c=>this._requestResponseMap.has(c))){if(!s){if(this._closed){for(let c of o)this._requestResponseMap.delete(c),this._requestToStreamMapping.delete(c);return}if(!this._enableJsonResponse&&this._eventStore&&this._resumableStreams.has(i)){for(let c of o)this._requestResponseMap.delete(c),this._requestToStreamMapping.delete(c);this._resumableStreams.delete(i);return}for(let c of o)this._requestResponseMap.delete(c),this._requestToStreamMapping.delete(c);throw new Error(`No connection established for request ID: ${String(n)}`)}if(this._enableJsonResponse&&s.resolveJson){let c={"Content-Type":"application/json"};this.sessionId!==void 0&&(c["mcp-session-id"]=this.sessionId);let l=o.map(u=>this._requestResponseMap.get(u));l.length===1?s.resolveJson(new Response(JSON.stringify(l[0]),{status:200,headers:c})):s.resolveJson(new Response(JSON.stringify(l),{status:200,headers:c}))}else s.cleanup();for(let c of o)this._requestResponseMap.delete(c),this._requestToStreamMapping.delete(c);this._resumableStreams.delete(i)}}}}});var _m,Hq=R(()=>{Tq();Bq();_m=class{constructor(e={}){this._requestContext=new WeakMap,this._webStandardTransport=new wm(e),this._requestListener=Cx(async r=>{let n=this._requestContext.get(r);return this._webStandardTransport.handleRequest(r,{authInfo:n?.authInfo,parsedBody:n?.parsedBody})},{overrideGlobalObjects:!1})}get sessionId(){return this._webStandardTransport.sessionId}set onclose(e){this._webStandardTransport.onclose=e}get onclose(){return this._webStandardTransport.onclose}set onerror(e){this._webStandardTransport.onerror=e}get onerror(){return this._webStandardTransport.onerror}set onmessage(e){this._webStandardTransport.onmessage=e}get onmessage(){return this._webStandardTransport.onmessage}async start(){return this._webStandardTransport.start()}async close(){return this._webStandardTransport.close()}async send(e,r){return this._webStandardTransport.send(e,r)}async handleRequest(e,r,n){let i=e.auth;await Cx(async o=>this._webStandardTransport.handleRequest(o,{authInfo:i,parsedBody:n}),{overrideGlobalObjects:!1})(e,r)}closeSSEStream(e){this._webStandardTransport.closeSSEStream(e)}closeStandaloneSSEStream(){this._webStandardTransport.closeStandaloneSSEStream()}}});function Tm(t){return!!t._zod}function Es(t,e){return Tm(t)?Im.safeParse(t,e):t.safeParse(e)}function km(t){if(!t)return;let e;if(Tm(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function Am(t){if(Tm(t)){let s=t._zod?.def;if(s){if(s.value!==void 0)return s.value;if(Array.isArray(s.values)&&s.values.length>0)return s.values[0]}}let r=t._def;if(r){if(r.value!==void 0)return r.value;if(Array.isArray(r.values)&&r.values.length>0)return r.values[0]}let n=t.value;if(n!==void 0)return n}var Sde,Im,Rm=R(()=>{Sde=tt(require("zod/v3"),1),Im=tt(require("zod/v4-mini"),1)});function Ss(t){return t==="completed"||t==="failed"||t==="cancelled"}var Vq=R(()=>{});var Om=R(()=>{});var Yx=R(()=>{Om()});var xs=R(()=>{});var Cm=R(()=>{});var nn=R(()=>{Cm()});var wde,Qx=R(()=>{wde=require("zod/v3");xs();yt()});var Xx=R(()=>{xs()});var Zx=R(()=>{});var jm=R(()=>{yt()});var ew=R(()=>{yt()});var tw=R(()=>{xs()});var rw=R(()=>{yt()});var nw=R(()=>{yt();nn()});var iw=R(()=>{});var sw=R(()=>{yt()});var ow=R(()=>{});var DMe,Pm=R(()=>{xs();DMe=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789")});var Tde,Km=R(()=>{Tde=require("zod/v3");yt();Pm();jm();nn()});var aw=R(()=>{yt();Km();nn()});var cw=R(()=>{});var lw=R(()=>{nn()});var uw=R(()=>{});var Dm=R(()=>{yt()});var dw=R(()=>{yt();Dm()});var pw=R(()=>{xs()});var fw=R(()=>{yt()});var mw=R(()=>{yt();nn()});var hw=R(()=>{yt()});var yw=R(()=>{yt()});var gw=R(()=>{xs();yt()});var bw=R(()=>{yt()});var vw=R(()=>{nn()});var Ew=R(()=>{nn()});var Sw=R(()=>{yt()});var Ade,xw=R(()=>{Ade=require("zod/v3");nn();Qx();Xx();Zx();jm();ew();tw();rw();nw();iw();sw();ow();aw();cw();lw();uw();dw();pw();fw();mw();hw();yw();Km();gw();Pm();bw();vw();Dm();Ew();Sw()});var yt=R(()=>{Om();xw();Cm();nn()});var Wq=R(()=>{});var ww=R(()=>{yt();Yx();nn()});var Yq=R(()=>{Om();Yx();xs();Cm();yt();Wq();nn();Qx();Xx();Zx();jm();ew();tw();rw();nw();iw();sw();ow();aw();cw();lw();uw();dw();pw();fw();mw();hw();yw();Sw();Km();gw();Pm();bw();vw();Dm();Ew();xw();ww();ww()});function _w(t){let r=km(t)?.method;if(!r)throw new Error("Schema is missing a method literal");let n=Am(r);if(typeof n!="string")throw new Error("Schema method literal must be a string");return n}function Iw(t,e){let r=Es(t,e);if(!r.success)throw r.error;return r.data}var Ode,Qq=R(()=>{Ode=tt(require("zod/v4-mini"),1);Rm();Yq()});function Xq(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Zq(t,e){let r={...t};for(let n in e){let i=n,s=e[i];if(s===void 0)continue;let o=r[i];Xq(o)&&Xq(s)?r[i]={...o,...s}:r[i]=s}return r}var Cde,Mm,e2=R(()=>{Rm();bc();Vq();Qq();Cde=6e4,Mm=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(pm,r=>{this._oncancel(r)}),this.setNotificationHandler(hm,r=>{this._onprogress(r)}),this.setRequestHandler(mm,r=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(ym,async(r,n)=>{let i=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!i)throw new ce(be.InvalidParams,"Failed to retrieve task: Task not found");return{...i}}),this.setRequestHandler(bm,async(r,n)=>{let i=async()=>{let s=r.params.taskId;if(this._taskMessageQueue){let a;for(;a=await this._taskMessageQueue.dequeue(s,n.sessionId);){if(a.type==="response"||a.type==="error"){let c=a.message,l=c.id,u=this._requestResolvers.get(l);if(u)if(this._requestResolvers.delete(l),a.type==="response")u(c);else{let d=c,p=new ce(d.error.code,d.error.message,d.error.data);u(p)}else{let d=a.type==="response"?"Response":"Error";this._onerror(new Error(`${d} handler missing for request ${l}`))}continue}await this._transport?.send(a.message,{relatedRequestId:n.requestId})}}let o=await this._taskStore.getTask(s,n.sessionId);if(!o)throw new ce(be.InvalidParams,`Task not found: ${s}`);if(!Ss(o.status))return await this._waitForTaskUpdate(s,n.signal),await i();if(Ss(o.status)){let a=await this._taskStore.getTaskResult(s,n.sessionId);return this._clearTaskQueue(s),{...a,_meta:{...a._meta,[vs]:{taskId:s}}}}return await i()};return await i()}),this.setRequestHandler(vm,async(r,n)=>{try{let{tasks:i,nextCursor:s}=await this._taskStore.listTasks(r.params?.cursor,n.sessionId);return{tasks:i,nextCursor:s,_meta:{}}}catch(i){throw new ce(be.InvalidParams,`Failed to list tasks: ${i instanceof Error?i.message:String(i)}`)}}),this.setRequestHandler(Sm,async(r,n)=>{try{let i=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!i)throw new ce(be.InvalidParams,`Task not found: ${r.params.taskId}`);if(Ss(i.status))throw new ce(be.InvalidParams,`Cannot cancel task in terminal status: ${i.status}`);await this._taskStore.updateTaskStatus(r.params.taskId,"cancelled","Client cancelled task execution.",n.sessionId),this._clearTaskQueue(r.params.taskId);let s=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!s)throw new ce(be.InvalidParams,`Task not found after cancellation: ${r.params.taskId}`);return{_meta:{},...s}}catch(i){throw i instanceof ce?i:new ce(be.InvalidRequest,`Failed to cancel task: ${i instanceof Error?i.message:String(i)}`)}}))}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,r,n,i,s=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(i,r),startTime:Date.now(),timeout:r,maxTotalTimeout:n,resetTimeoutOnProgress:s,onTimeout:i})}_resetTimeout(e){let r=this._timeoutInfo.get(e);if(!r)return!1;let n=Date.now()-r.startTime;if(r.maxTotalTimeout&&n>=r.maxTotalTimeout)throw this._timeoutInfo.delete(e),ce.fromError(be.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:r.maxTotalTimeout,totalElapsed:n});return clearTimeout(r.timeoutId),r.timeoutId=setTimeout(r.onTimeout,r.timeout),!0}_cleanupTimeout(e){let r=this._timeoutInfo.get(e);r&&(clearTimeout(r.timeoutId),this._timeoutInfo.delete(e))}async connect(e){if(this._transport)throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=e;let r=this.transport?.onclose;this._transport.onclose=()=>{r?.(),this._onclose()};let n=this.transport?.onerror;this._transport.onerror=s=>{n?.(s),this._onerror(s)};let i=this._transport?.onmessage;this._transport.onmessage=(s,o)=>{i?.(s,o),Mi(s)||mc(s)?this._onresponse(s):Di(s)?this._onrequest(s,o):Lq(s)?this._onnotification(s):this._onerror(new Error(`Unknown message type: ${JSON.stringify(s)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let n of this._timeoutInfo.values())clearTimeout(n.timeoutId);this._timeoutInfo.clear();for(let n of this._requestHandlerAbortControllers.values())n.abort();this._requestHandlerAbortControllers.clear();let r=ce.fromError(be.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let n of e.values())n(r)}_onerror(e){this.onerror?.(e)}_onnotification(e){let r=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;r!==void 0&&Promise.resolve().then(()=>r(e)).catch(n=>this._onerror(new Error(`Uncaught error in notification handler: ${n}`)))}_onrequest(e,r){let n=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,i=this._transport,s=e.params?._meta?.[vs]?.taskId;if(n===void 0){let u={jsonrpc:"2.0",id:e.id,error:{code:be.MethodNotFound,message:"Method not found"}};s&&this._taskMessageQueue?this._enqueueTaskMessage(s,{type:"error",message:u,timestamp:Date.now()},i?.sessionId).catch(d=>this._onerror(new Error(`Failed to enqueue error response: ${d}`))):i?.send(u).catch(d=>this._onerror(new Error(`Failed to send an error response: ${d}`)));return}let o=new AbortController;this._requestHandlerAbortControllers.set(e.id,o);let a=Dq(e.params)?e.params.task:void 0,c=this._taskStore?this.requestTaskStore(e,i?.sessionId):void 0,l={signal:o.signal,sessionId:i?.sessionId,_meta:e.params?._meta,sendNotification:async u=>{if(o.signal.aborted)return;let d={relatedRequestId:e.id};s&&(d.relatedTask={taskId:s}),await this.notification(u,d)},sendRequest:async(u,d,p)=>{if(o.signal.aborted)throw new ce(be.ConnectionClosed,"Request was cancelled");let f={...p,relatedRequestId:e.id};s&&!f.relatedTask&&(f.relatedTask={taskId:s});let m=f.relatedTask?.taskId??s;return m&&c&&await c.updateTaskStatus(m,"input_required"),await this.request(u,d,f)},authInfo:r?.authInfo,requestId:e.id,requestInfo:r?.requestInfo,taskId:s,taskStore:c,taskRequestedTtl:a?.ttl,closeSSEStream:r?.closeSSEStream,closeStandaloneSSEStream:r?.closeStandaloneSSEStream};Promise.resolve().then(()=>{a&&this.assertTaskHandlerCapability(e.method)}).then(()=>n(e,l)).then(async u=>{if(o.signal.aborted)return;let d={result:u,jsonrpc:"2.0",id:e.id};s&&this._taskMessageQueue?await this._enqueueTaskMessage(s,{type:"response",message:d,timestamp:Date.now()},i?.sessionId):await i?.send(d)},async u=>{if(o.signal.aborted)return;let d={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(u.code)?u.code:be.InternalError,message:u.message??"Internal error",...u.data!==void 0&&{data:u.data}}};s&&this._taskMessageQueue?await this._enqueueTaskMessage(s,{type:"error",message:d,timestamp:Date.now()},i?.sessionId):await i?.send(d)}).catch(u=>this._onerror(new Error(`Failed to send response: ${u}`))).finally(()=>{this._requestHandlerAbortControllers.get(e.id)===o&&this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:r,...n}=e.params,i=Number(r),s=this._progressHandlers.get(i);if(!s){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let o=this._responseHandlers.get(i),a=this._timeoutInfo.get(i);if(a&&o&&a.resetTimeoutOnProgress)try{this._resetTimeout(i)}catch(c){this._responseHandlers.delete(i),this._progressHandlers.delete(i),this._cleanupTimeout(i),o(c);return}s(n)}_onresponse(e){let r=Number(e.id),n=this._requestResolvers.get(r);if(n){if(this._requestResolvers.delete(r),Mi(e))n(e);else{let o=new ce(e.error.code,e.error.message,e.error.data);n(o)}return}let i=this._responseHandlers.get(r);if(i===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(r),this._cleanupTimeout(r);let s=!1;if(Mi(e)&&e.result&&typeof e.result=="object"){let o=e.result;if(o.task&&typeof o.task=="object"){let a=o.task;typeof a.taskId=="string"&&(s=!0,this._taskProgressTokens.set(a.taskId,r))}}if(s||this._progressHandlers.delete(r),Mi(e))i(e);else{let o=ce.fromError(e.error.code,e.error.message,e.error.data);i(o)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,r,n){let{task:i}=n??{};if(!i){try{yield{type:"result",result:await this.request(e,r,n)}}catch(o){yield{type:"error",error:o instanceof ce?o:new ce(be.InternalError,String(o))}}return}let s;try{let o=await this.request(e,hc,n);if(o.task)s=o.task.taskId,yield{type:"taskCreated",task:o.task};else throw new ce(be.InternalError,"Task creation did not return a task");for(;;){let a=await this.getTask({taskId:s},n);if(yield{type:"taskStatus",task:a},Ss(a.status)){a.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:s},r,n)}:a.status==="failed"?yield{type:"error",error:new ce(be.InternalError,`Task ${s} failed`)}:a.status==="cancelled"&&(yield{type:"error",error:new ce(be.InternalError,`Task ${s} was cancelled`)});return}if(a.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:s},r,n)};return}let c=a.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(l=>setTimeout(l,c)),n?.signal?.throwIfAborted()}}catch(o){yield{type:"error",error:o instanceof ce?o:new ce(be.InternalError,String(o))}}}request(e,r,n){let{relatedRequestId:i,resumptionToken:s,onresumptiontoken:o,task:a,relatedTask:c}=n??{};return new Promise((l,u)=>{let d=E=>{u(E)};if(!this._transport){d(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),a&&this.assertTaskCapability(e.method)}catch(E){d(E);return}n?.signal?.throwIfAborted();let p=this._requestMessageId++,f={...e,jsonrpc:"2.0",id:p};n?.onprogress&&(this._progressHandlers.set(p,n.onprogress),f.params={...e.params,_meta:{...e.params?._meta||{},progressToken:p}}),a&&(f.params={...f.params,task:a}),c&&(f.params={...f.params,_meta:{...f.params?._meta||{},[vs]:c}});let m=E=>{this._responseHandlers.delete(p),this._progressHandlers.delete(p),this._cleanupTimeout(p),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:p,reason:String(E)}},{relatedRequestId:i,resumptionToken:s,onresumptiontoken:o}).catch(k=>this._onerror(new Error(`Failed to send cancellation: ${k}`)));let S=E instanceof ce?E:new ce(be.RequestTimeout,String(E));u(S)};this._responseHandlers.set(p,E=>{if(!n?.signal?.aborted){if(E instanceof Error)return u(E);try{let S=Es(r,E.result);S.success?l(S.data):u(S.error)}catch(S){u(S)}}}),n?.signal?.addEventListener("abort",()=>{m(n?.signal?.reason)});let y=n?.timeout??Cde,b=()=>m(ce.fromError(be.RequestTimeout,"Request timed out",{timeout:y}));this._setupTimeout(p,y,n?.maxTotalTimeout,b,n?.resetTimeoutOnProgress??!1);let v=c?.taskId;if(v){let E=S=>{let k=this._responseHandlers.get(p);k?k(S):this._onerror(new Error(`Response handler missing for side-channeled request ${p}`))};this._requestResolvers.set(p,E),this._enqueueTaskMessage(v,{type:"request",message:f,timestamp:Date.now()}).catch(S=>{this._cleanupTimeout(p),u(S)})}else this._transport.send(f,{relatedRequestId:i,resumptionToken:s,onresumptiontoken:o}).catch(E=>{this._cleanupTimeout(p),u(E)})})}async getTask(e,r){return this.request({method:"tasks/get",params:e},gm,r)}async getTaskResult(e,r,n){return this.request({method:"tasks/result",params:e},r,n)}async listTasks(e,r){return this.request({method:"tasks/list",params:e},Em,r)}async cancelTask(e,r){return this.request({method:"tasks/cancel",params:e},Fq,r)}async notification(e,r){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let n=r?.relatedTask?.taskId;if(n){let a={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[vs]:r.relatedTask}}};await this._enqueueTaskMessage(n,{type:"notification",message:a,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!r?.relatedRequestId&&!r?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let a={...e,jsonrpc:"2.0"};r?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[vs]:r.relatedTask}}}),this._transport?.send(a,r).catch(c=>this._onerror(c))});return}let o={...e,jsonrpc:"2.0"};r?.relatedTask&&(o={...o,params:{...o.params,_meta:{...o.params?._meta||{},[vs]:r.relatedTask}}}),await this._transport.send(o,r)}setRequestHandler(e,r){let n=_w(e);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(i,s)=>{let o=Iw(e,i);return Promise.resolve(r(o,s))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw new Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,r){let n=_w(e);this._notificationHandlers.set(n,i=>{let s=Iw(e,i);return Promise.resolve(r(s))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let r=this._taskProgressTokens.get(e);r!==void 0&&(this._progressHandlers.delete(r),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,r,n){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let i=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,r,n,i)}async _clearTaskQueue(e,r){if(this._taskMessageQueue){let n=await this._taskMessageQueue.dequeueAll(e,r);for(let i of n)if(i.type==="request"&&Di(i.message)){let s=i.message.id,o=this._requestResolvers.get(s);o?(o(new ce(be.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(s)):this._onerror(new Error(`Resolver missing for request ${s} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,r){let n=this._options?.defaultTaskPollInterval??1e3;try{let i=await this._taskStore?.getTask(e);i?.pollInterval&&(n=i.pollInterval)}catch{}return new Promise((i,s)=>{if(r.aborted){s(new ce(be.InvalidRequest,"Request cancelled"));return}let o=setTimeout(i,n);r.addEventListener("abort",()=>{clearTimeout(o),s(new ce(be.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,r){let n=this._taskStore;if(!n)throw new Error("No task store configured");return{createTask:async i=>{if(!e)throw new Error("No request provided");return await n.createTask(i,e.id,{method:e.method,params:e.params},r)},getTask:async i=>{let s=await n.getTask(i,r);if(!s)throw new ce(be.InvalidParams,"Failed to retrieve task: Task not found");return s},storeTaskResult:async(i,s,o)=>{await n.storeTaskResult(i,s,o,r);let a=await n.getTask(i,r);if(a){let c=Tu.parse({method:"notifications/tasks/status",params:a});await this.notification(c),Ss(a.status)&&this._cleanupTaskProgressHandler(i)}},getTaskResult:i=>n.getTaskResult(i,r),updateTaskStatus:async(i,s,o)=>{let a=await n.getTask(i,r);if(!a)throw new ce(be.InvalidParams,`Task "${i}" not found - it may have been cleaned up`);if(Ss(a.status))throw new ce(be.InvalidParams,`Cannot update task "${i}" from terminal status "${a.status}" to "${s}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await n.updateTaskStatus(i,s,o,r);let c=await n.getTask(i,r);if(c){let l=Tu.parse({method:"notifications/tasks/status",params:c});await this.notification(l),Ss(c.status)&&this._cleanupTaskProgressHandler(i)}},listTasks:i=>n.listTasks(i,r)}}}});var Ku=h(Te=>{"use strict";Object.defineProperty(Te,"__esModule",{value:!0});Te.regexpCode=Te.getEsmExportName=Te.getProperty=Te.safeStringify=Te.stringify=Te.strConcat=Te.addCodeArg=Te.str=Te._=Te.nil=Te._Code=Te.Name=Te.IDENTIFIER=Te._CodeOrName=void 0;var ju=class{};Te._CodeOrName=ju;Te.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var Ro=class extends ju{constructor(e){if(super(),!Te.IDENTIFIER.test(e))throw new Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};Te.Name=Ro;var sn=class extends ju{constructor(e){super(),this._items=typeof e=="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((r,n)=>`${r}${n}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((r,n)=>(n instanceof Ro&&(r[n.str]=(r[n.str]||0)+1),r),{})}};Te._Code=sn;Te.nil=new sn("");function t2(t,...e){let r=[t[0]],n=0;for(;n<e.length;)kw(r,e[n]),r.push(t[++n]);return new sn(r)}Te._=t2;var Tw=new sn("+");function r2(t,...e){let r=[Pu(t[0])],n=0;for(;n<e.length;)r.push(Tw),kw(r,e[n]),r.push(Tw,Pu(t[++n]));return jde(r),new sn(r)}Te.str=r2;function kw(t,e){e instanceof sn?t.push(...e._items):e instanceof Ro?t.push(e):t.push(Dde(e))}Te.addCodeArg=kw;function jde(t){let e=1;for(;e<t.length-1;){if(t[e]===Tw){let r=Pde(t[e-1],t[e+1]);if(r!==void 0){t.splice(e-1,3,r);continue}t[e++]="+"}e++}}function Pde(t,e){if(e==='""')return t;if(t==='""')return e;if(typeof t=="string")return e instanceof Ro||t[t.length-1]!=='"'?void 0:typeof e!="string"?`${t.slice(0,-1)}${e}"`:e[0]==='"'?t.slice(0,-1)+e.slice(1):void 0;if(typeof e=="string"&&e[0]==='"'&&!(t instanceof Ro))return`"${t}${e.slice(1)}`}function Kde(t,e){return e.emptyStr()?t:t.emptyStr()?e:r2`${t}${e}`}Te.strConcat=Kde;function Dde(t){return typeof t=="number"||typeof t=="boolean"||t===null?t:Pu(Array.isArray(t)?t.join(","):t)}function Mde(t){return new sn(Pu(t))}Te.stringify=Mde;function Pu(t){return JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}Te.safeStringify=Pu;function Nde(t){return typeof t=="string"&&Te.IDENTIFIER.test(t)?new sn(`.${t}`):t2`[${t}]`}Te.getProperty=Nde;function Lde(t){if(typeof t=="string"&&Te.IDENTIFIER.test(t))return new sn(`${t}`);throw new Error(`CodeGen: invalid export name: ${t}, use explicit $id name mapping`)}Te.getEsmExportName=Lde;function qde(t){return new sn(t.toString())}Te.regexpCode=qde});var Ow=h(Er=>{"use strict";Object.defineProperty(Er,"__esModule",{value:!0});Er.ValueScope=Er.ValueScopeName=Er.Scope=Er.varKinds=Er.UsedValueState=void 0;var vr=Ku(),Aw=class extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}},Nm;(function(t){t[t.Started=0]="Started",t[t.Completed=1]="Completed"})(Nm||(Er.UsedValueState=Nm={}));Er.varKinds={const:new vr.Name("const"),let:new vr.Name("let"),var:new vr.Name("var")};var Lm=class{constructor({prefixes:e,parent:r}={}){this._names={},this._prefixes=e,this._parent=r}toName(e){return e instanceof vr.Name?e:this.name(e)}name(e){return new vr.Name(this._newName(e))}_newName(e){let r=this._names[e]||this._nameGroup(e);return`${e}${r.index++}`}_nameGroup(e){var r,n;if(!((n=(r=this._parent)===null||r===void 0?void 0:r._prefixes)===null||n===void 0)&&n.has(e)||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}};Er.Scope=Lm;var qm=class extends vr.Name{constructor(e,r){super(r),this.prefix=e}setValue(e,{property:r,itemIndex:n}){this.value=e,this.scopePath=(0,vr._)`.${new vr.Name(r)}[${n}]`}};Er.ValueScopeName=qm;var Fde=(0,vr._)`\n`,Rw=class extends Lm{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?Fde:vr.nil}}get(){return this._scope}name(e){return new qm(e,this._newName(e))}value(e,r){var n;if(r.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let i=this.toName(e),{prefix:s}=i,o=(n=r.key)!==null&&n!==void 0?n:r.ref,a=this._values[s];if(a){let u=a.get(o);if(u)return u}else a=this._values[s]=new Map;a.set(o,i);let c=this._scope[s]||(this._scope[s]=[]),l=c.length;return c[l]=r.ref,i.setValue(r,{property:s,itemIndex:l}),i}getValue(e,r){let n=this._values[e];if(n)return n.get(r)}scopeRefs(e,r=this._values){return this._reduceValues(r,n=>{if(n.scopePath===void 0)throw new Error(`CodeGen: name "${n}" has no value`);return(0,vr._)`${e}${n.scopePath}`})}scopeCode(e=this._values,r,n){return this._reduceValues(e,i=>{if(i.value===void 0)throw new Error(`CodeGen: name "${i}" has no value`);return i.value.code},r,n)}_reduceValues(e,r,n={},i){let s=vr.nil;for(let o in e){let a=e[o];if(!a)continue;let c=n[o]=n[o]||new Map;a.forEach(l=>{if(c.has(l))return;c.set(l,Nm.Started);let u=r(l);if(u){let d=this.opts.es5?Er.varKinds.var:Er.varKinds.const;s=(0,vr._)`${s}${d} ${l} = ${u};${this.opts._n}`}else if(u=i?.(l))s=(0,vr._)`${s}${u}${this.opts._n}`;else throw new Aw(l);c.set(l,Nm.Completed)})}return s}};Er.ValueScope=Rw});var ue=h(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.or=me.and=me.not=me.CodeGen=me.operators=me.varKinds=me.ValueScopeName=me.ValueScope=me.Scope=me.Name=me.regexpCode=me.stringify=me.getProperty=me.nil=me.strConcat=me.str=me._=void 0;var Se=Ku(),kn=Ow(),ws=Ku();Object.defineProperty(me,"_",{enumerable:!0,get:function(){return ws._}});Object.defineProperty(me,"str",{enumerable:!0,get:function(){return ws.str}});Object.defineProperty(me,"strConcat",{enumerable:!0,get:function(){return ws.strConcat}});Object.defineProperty(me,"nil",{enumerable:!0,get:function(){return ws.nil}});Object.defineProperty(me,"getProperty",{enumerable:!0,get:function(){return ws.getProperty}});Object.defineProperty(me,"stringify",{enumerable:!0,get:function(){return ws.stringify}});Object.defineProperty(me,"regexpCode",{enumerable:!0,get:function(){return ws.regexpCode}});Object.defineProperty(me,"Name",{enumerable:!0,get:function(){return ws.Name}});var Jm=Ow();Object.defineProperty(me,"Scope",{enumerable:!0,get:function(){return Jm.Scope}});Object.defineProperty(me,"ValueScope",{enumerable:!0,get:function(){return Jm.ValueScope}});Object.defineProperty(me,"ValueScopeName",{enumerable:!0,get:function(){return Jm.ValueScopeName}});Object.defineProperty(me,"varKinds",{enumerable:!0,get:function(){return Jm.varKinds}});me.operators={GT:new Se._Code(">"),GTE:new Se._Code(">="),LT:new Se._Code("<"),LTE:new Se._Code("<="),EQ:new Se._Code("==="),NEQ:new Se._Code("!=="),NOT:new Se._Code("!"),OR:new Se._Code("||"),AND:new Se._Code("&&"),ADD:new Se._Code("+")};var Li=class{optimizeNodes(){return this}optimizeNames(e,r){return this}},Cw=class extends Li{constructor(e,r,n){super(),this.varKind=e,this.name=r,this.rhs=n}render({es5:e,_n:r}){let n=e?kn.varKinds.var:this.varKind,i=this.rhs===void 0?"":` = ${this.rhs}`;return`${n} ${this.name}${i};`+r}optimizeNames(e,r){if(e[this.name.str])return this.rhs&&(this.rhs=Ec(this.rhs,e,r)),this}get names(){return this.rhs instanceof Se._CodeOrName?this.rhs.names:{}}},Fm=class extends Li{constructor(e,r,n){super(),this.lhs=e,this.rhs=r,this.sideEffects=n}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,r){if(!(this.lhs instanceof Se.Name&&!e[this.lhs.str]&&!this.sideEffects))return this.rhs=Ec(this.rhs,e,r),this}get names(){let e=this.lhs instanceof Se.Name?{}:{...this.lhs.names};return Um(e,this.rhs)}},jw=class extends Fm{constructor(e,r,n,i){super(e,n,i),this.op=r}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}},Pw=class extends Li{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}},Kw=class extends Li{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}},Dw=class extends Li{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}},Mw=class extends Li{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,r){return this.code=Ec(this.code,e,r),this}get names(){return this.code instanceof Se._CodeOrName?this.code.names:{}}},Du=class extends Li{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce((r,n)=>r+n.render(e),"")}optimizeNodes(){let{nodes:e}=this,r=e.length;for(;r--;){let n=e[r].optimizeNodes();Array.isArray(n)?e.splice(r,1,...n):n?e[r]=n:e.splice(r,1)}return e.length>0?this:void 0}optimizeNames(e,r){let{nodes:n}=this,i=n.length;for(;i--;){let s=n[i];s.optimizeNames(e,r)||($de(e,s.names),n.splice(i,1))}return n.length>0?this:void 0}get names(){return this.nodes.reduce((e,r)=>jo(e,r.names),{})}},qi=class extends Du{render(e){return"{"+e._n+super.render(e)+"}"+e._n}},Nw=class extends Du{},vc=class extends qi{};vc.kind="else";var Oo=class t extends qi{constructor(e,r){super(r),this.condition=e}render(e){let r=`if(${this.condition})`+super.render(e);return this.else&&(r+="else "+this.else.render(e)),r}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let r=this.else;if(r){let n=r.optimizeNodes();r=this.else=Array.isArray(n)?new vc(n):n}if(r)return e===!1?r instanceof t?r:r.nodes:this.nodes.length?this:new t(n2(e),r instanceof t?[r]:r.nodes);if(!(e===!1||!this.nodes.length))return this}optimizeNames(e,r){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(e,r),!!(super.optimizeNames(e,r)||this.else))return this.condition=Ec(this.condition,e,r),this}get names(){let e=super.names;return Um(e,this.condition),this.else&&jo(e,this.else.names),e}};Oo.kind="if";var Co=class extends qi{};Co.kind="for";var Lw=class extends Co{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,r){if(super.optimizeNames(e,r))return this.iteration=Ec(this.iteration,e,r),this}get names(){return jo(super.names,this.iteration.names)}},qw=class extends Co{constructor(e,r,n,i){super(),this.varKind=e,this.name=r,this.from=n,this.to=i}render(e){let r=e.es5?kn.varKinds.var:this.varKind,{name:n,from:i,to:s}=this;return`for(${r} ${n}=${i}; ${n}<${s}; ${n}++)`+super.render(e)}get names(){let e=Um(super.names,this.from);return Um(e,this.to)}},$m=class extends Co{constructor(e,r,n,i){super(),this.loop=e,this.varKind=r,this.name=n,this.iterable=i}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,r){if(super.optimizeNames(e,r))return this.iterable=Ec(this.iterable,e,r),this}get names(){return jo(super.names,this.iterable.names)}},Mu=class extends qi{constructor(e,r,n){super(),this.name=e,this.args=r,this.async=n}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}};Mu.kind="func";var Nu=class extends Du{render(e){return"return "+super.render(e)}};Nu.kind="return";var Fw=class extends qi{render(e){let r="try"+super.render(e);return this.catch&&(r+=this.catch.render(e)),this.finally&&(r+=this.finally.render(e)),r}optimizeNodes(){var e,r;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(r=this.finally)===null||r===void 0||r.optimizeNodes(),this}optimizeNames(e,r){var n,i;return super.optimizeNames(e,r),(n=this.catch)===null||n===void 0||n.optimizeNames(e,r),(i=this.finally)===null||i===void 0||i.optimizeNames(e,r),this}get names(){let e=super.names;return this.catch&&jo(e,this.catch.names),this.finally&&jo(e,this.finally.names),e}},Lu=class extends qi{constructor(e){super(),this.error=e}render(e){return`catch(${this.error})`+super.render(e)}};Lu.kind="catch";var qu=class extends qi{render(e){return"finally"+super.render(e)}};qu.kind="finally";var $w=class{constructor(e,r={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...r,_n:r.lines?`
|
||
`:""},this._extScope=e,this._scope=new kn.Scope({parent:e}),this._nodes=[new Nw]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,r){let n=this._extScope.value(e,r);return(this._values[n.prefix]||(this._values[n.prefix]=new Set)).add(n),n}getScopeValue(e,r){return this._extScope.getValue(e,r)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,r,n,i){let s=this._scope.toName(r);return n!==void 0&&i&&(this._constants[s.str]=n),this._leafNode(new Cw(e,s,n)),s}const(e,r,n){return this._def(kn.varKinds.const,e,r,n)}let(e,r,n){return this._def(kn.varKinds.let,e,r,n)}var(e,r,n){return this._def(kn.varKinds.var,e,r,n)}assign(e,r,n){return this._leafNode(new Fm(e,r,n))}add(e,r){return this._leafNode(new jw(e,me.operators.ADD,r))}code(e){return typeof e=="function"?e():e!==Se.nil&&this._leafNode(new Mw(e)),this}object(...e){let r=["{"];for(let[n,i]of e)r.length>1&&r.push(","),r.push(n),(n!==i||this.opts.es5)&&(r.push(":"),(0,Se.addCodeArg)(r,i));return r.push("}"),new Se._Code(r)}if(e,r,n){if(this._blockNode(new Oo(e)),r&&n)this.code(r).else().code(n).endIf();else if(r)this.code(r).endIf();else if(n)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Oo(e))}else(){return this._elseNode(new vc)}endIf(){return this._endBlockNode(Oo,vc)}_for(e,r){return this._blockNode(e),r&&this.code(r).endFor(),this}for(e,r){return this._for(new Lw(e),r)}forRange(e,r,n,i,s=this.opts.es5?kn.varKinds.var:kn.varKinds.let){let o=this._scope.toName(e);return this._for(new qw(s,o,r,n),()=>i(o))}forOf(e,r,n,i=kn.varKinds.const){let s=this._scope.toName(e);if(this.opts.es5){let o=r instanceof Se.Name?r:this.var("_arr",r);return this.forRange("_i",0,(0,Se._)`${o}.length`,a=>{this.var(s,(0,Se._)`${o}[${a}]`),n(s)})}return this._for(new $m("of",i,s,r),()=>n(s))}forIn(e,r,n,i=this.opts.es5?kn.varKinds.var:kn.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,(0,Se._)`Object.keys(${r})`,n);let s=this._scope.toName(e);return this._for(new $m("in",i,s,r),()=>n(s))}endFor(){return this._endBlockNode(Co)}label(e){return this._leafNode(new Pw(e))}break(e){return this._leafNode(new Kw(e))}return(e){let r=new Nu;if(this._blockNode(r),this.code(e),r.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(Nu)}try(e,r,n){if(!r&&!n)throw new Error('CodeGen: "try" without "catch" and "finally"');let i=new Fw;if(this._blockNode(i),this.code(e),r){let s=this.name("e");this._currNode=i.catch=new Lu(s),r(s)}return n&&(this._currNode=i.finally=new qu,this.code(n)),this._endBlockNode(Lu,qu)}throw(e){return this._leafNode(new Dw(e))}block(e,r){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(r),this}endBlock(e){let r=this._blockStarts.pop();if(r===void 0)throw new Error("CodeGen: not in self-balancing block");let n=this._nodes.length-r;if(n<0||e!==void 0&&n!==e)throw new Error(`CodeGen: wrong number of nodes: ${n} vs ${e} expected`);return this._nodes.length=r,this}func(e,r=Se.nil,n,i){return this._blockNode(new Mu(e,r,n)),i&&this.code(i).endFunc(),this}endFunc(){return this._endBlockNode(Mu)}optimize(e=1){for(;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,r){let n=this._currNode;if(n instanceof e||r&&n instanceof r)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${r?`${e.kind}/${r.kind}`:e.kind}"`)}_elseNode(e){let r=this._currNode;if(!(r instanceof Oo))throw new Error('CodeGen: "else" without "if"');return this._currNode=r.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let r=this._nodes;r[r.length-1]=e}};me.CodeGen=$w;function jo(t,e){for(let r in e)t[r]=(t[r]||0)+(e[r]||0);return t}function Um(t,e){return e instanceof Se._CodeOrName?jo(t,e.names):t}function Ec(t,e,r){if(t instanceof Se.Name)return n(t);if(!i(t))return t;return new Se._Code(t._items.reduce((s,o)=>(o instanceof Se.Name&&(o=n(o)),o instanceof Se._Code?s.push(...o._items):s.push(o),s),[]));function n(s){let o=r[s.str];return o===void 0||e[s.str]!==1?s:(delete e[s.str],o)}function i(s){return s instanceof Se._Code&&s._items.some(o=>o instanceof Se.Name&&e[o.str]===1&&r[o.str]!==void 0)}}function $de(t,e){for(let r in e)t[r]=(t[r]||0)-(e[r]||0)}function n2(t){return typeof t=="boolean"||typeof t=="number"||t===null?!t:(0,Se._)`!${Uw(t)}`}me.not=n2;var Ude=i2(me.operators.AND);function Jde(...t){return t.reduce(Ude)}me.and=Jde;var zde=i2(me.operators.OR);function Gde(...t){return t.reduce(zde)}me.or=Gde;function i2(t){return(e,r)=>e===Se.nil?r:r===Se.nil?e:(0,Se._)`${Uw(e)} ${t} ${Uw(r)}`}function Uw(t){return t instanceof Se.Name?t:(0,Se._)`(${t})`}});var we=h(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.checkStrictMode=he.getErrorPath=he.Type=he.useFunc=he.setEvaluated=he.evaluatedPropsToName=he.mergeEvaluated=he.eachItem=he.unescapeJsonPointer=he.escapeJsonPointer=he.escapeFragment=he.unescapeFragment=he.schemaRefOrVal=he.schemaHasRulesButRef=he.schemaHasRules=he.checkUnknownRules=he.alwaysValidSchema=he.toHash=void 0;var qe=ue(),Bde=Ku();function Hde(t){let e={};for(let r of t)e[r]=!0;return e}he.toHash=Hde;function Vde(t,e){return typeof e=="boolean"?e:Object.keys(e).length===0?!0:(a2(t,e),!c2(e,t.self.RULES.all))}he.alwaysValidSchema=Vde;function a2(t,e=t.schema){let{opts:r,self:n}=t;if(!r.strictSchema||typeof e=="boolean")return;let i=n.RULES.keywords;for(let s in e)i[s]||d2(t,`unknown keyword: "${s}"`)}he.checkUnknownRules=a2;function c2(t,e){if(typeof t=="boolean")return!t;for(let r in t)if(e[r])return!0;return!1}he.schemaHasRules=c2;function Wde(t,e){if(typeof t=="boolean")return!t;for(let r in t)if(r!=="$ref"&&e.all[r])return!0;return!1}he.schemaHasRulesButRef=Wde;function Yde({topSchemaRef:t,schemaPath:e},r,n,i){if(!i){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return(0,qe._)`${r}`}return(0,qe._)`${t}${e}${(0,qe.getProperty)(n)}`}he.schemaRefOrVal=Yde;function Qde(t){return l2(decodeURIComponent(t))}he.unescapeFragment=Qde;function Xde(t){return encodeURIComponent(zw(t))}he.escapeFragment=Xde;function zw(t){return typeof t=="number"?`${t}`:t.replace(/~/g,"~0").replace(/\//g,"~1")}he.escapeJsonPointer=zw;function l2(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}he.unescapeJsonPointer=l2;function Zde(t,e){if(Array.isArray(t))for(let r of t)e(r);else e(t)}he.eachItem=Zde;function s2({mergeNames:t,mergeToName:e,mergeValues:r,resultToName:n}){return(i,s,o,a)=>{let c=o===void 0?s:o instanceof qe.Name?(s instanceof qe.Name?t(i,s,o):e(i,s,o),o):s instanceof qe.Name?(e(i,o,s),s):r(s,o);return a===qe.Name&&!(c instanceof qe.Name)?n(i,c):c}}he.mergeEvaluated={props:s2({mergeNames:(t,e,r)=>t.if((0,qe._)`${r} !== true && ${e} !== undefined`,()=>{t.if((0,qe._)`${e} === true`,()=>t.assign(r,!0),()=>t.assign(r,(0,qe._)`${r} || {}`).code((0,qe._)`Object.assign(${r}, ${e})`))}),mergeToName:(t,e,r)=>t.if((0,qe._)`${r} !== true`,()=>{e===!0?t.assign(r,!0):(t.assign(r,(0,qe._)`${r} || {}`),Gw(t,r,e))}),mergeValues:(t,e)=>t===!0?!0:{...t,...e},resultToName:u2}),items:s2({mergeNames:(t,e,r)=>t.if((0,qe._)`${r} !== true && ${e} !== undefined`,()=>t.assign(r,(0,qe._)`${e} === true ? true : ${r} > ${e} ? ${r} : ${e}`)),mergeToName:(t,e,r)=>t.if((0,qe._)`${r} !== true`,()=>t.assign(r,e===!0?!0:(0,qe._)`${r} > ${e} ? ${r} : ${e}`)),mergeValues:(t,e)=>t===!0?!0:Math.max(t,e),resultToName:(t,e)=>t.var("items",e)})};function u2(t,e){if(e===!0)return t.var("props",!0);let r=t.var("props",(0,qe._)`{}`);return e!==void 0&&Gw(t,r,e),r}he.evaluatedPropsToName=u2;function Gw(t,e,r){Object.keys(r).forEach(n=>t.assign((0,qe._)`${e}${(0,qe.getProperty)(n)}`,!0))}he.setEvaluated=Gw;var o2={};function epe(t,e){return t.scopeValue("func",{ref:e,code:o2[e.code]||(o2[e.code]=new Bde._Code(e.code))})}he.useFunc=epe;var Jw;(function(t){t[t.Num=0]="Num",t[t.Str=1]="Str"})(Jw||(he.Type=Jw={}));function tpe(t,e,r){if(t instanceof qe.Name){let n=e===Jw.Num;return r?n?(0,qe._)`"[" + ${t} + "]"`:(0,qe._)`"['" + ${t} + "']"`:n?(0,qe._)`"/" + ${t}`:(0,qe._)`"/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?(0,qe.getProperty)(t).toString():"/"+zw(t)}he.getErrorPath=tpe;function d2(t,e,r=t.opts.strictSchema){if(r){if(e=`strict mode: ${e}`,r===!0)throw new Error(e);t.self.logger.warn(e)}}he.checkStrictMode=d2});var Fi=h(Bw=>{"use strict";Object.defineProperty(Bw,"__esModule",{value:!0});var Qt=ue(),rpe={data:new Qt.Name("data"),valCxt:new Qt.Name("valCxt"),instancePath:new Qt.Name("instancePath"),parentData:new Qt.Name("parentData"),parentDataProperty:new Qt.Name("parentDataProperty"),rootData:new Qt.Name("rootData"),dynamicAnchors:new Qt.Name("dynamicAnchors"),vErrors:new Qt.Name("vErrors"),errors:new Qt.Name("errors"),this:new Qt.Name("this"),self:new Qt.Name("self"),scope:new Qt.Name("scope"),json:new Qt.Name("json"),jsonPos:new Qt.Name("jsonPos"),jsonLen:new Qt.Name("jsonLen"),jsonPart:new Qt.Name("jsonPart")};Bw.default=rpe});var Fu=h(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.extendErrors=Xt.resetErrorsCount=Xt.reportExtraError=Xt.reportError=Xt.keyword$DataError=Xt.keywordError=void 0;var _e=ue(),zm=we(),lr=Fi();Xt.keywordError={message:({keyword:t})=>(0,_e.str)`must pass "${t}" keyword validation`};Xt.keyword$DataError={message:({keyword:t,schemaType:e})=>e?(0,_e.str)`"${t}" keyword must be ${e} ($data)`:(0,_e.str)`"${t}" keyword is invalid ($data)`};function npe(t,e=Xt.keywordError,r,n){let{it:i}=t,{gen:s,compositeRule:o,allErrors:a}=i,c=m2(t,e,r);n??(o||a)?p2(s,c):f2(i,(0,_e._)`[${c}]`)}Xt.reportError=npe;function ipe(t,e=Xt.keywordError,r){let{it:n}=t,{gen:i,compositeRule:s,allErrors:o}=n,a=m2(t,e,r);p2(i,a),s||o||f2(n,lr.default.vErrors)}Xt.reportExtraError=ipe;function spe(t,e){t.assign(lr.default.errors,e),t.if((0,_e._)`${lr.default.vErrors} !== null`,()=>t.if(e,()=>t.assign((0,_e._)`${lr.default.vErrors}.length`,e),()=>t.assign(lr.default.vErrors,null)))}Xt.resetErrorsCount=spe;function ope({gen:t,keyword:e,schemaValue:r,data:n,errsCount:i,it:s}){if(i===void 0)throw new Error("ajv implementation error");let o=t.name("err");t.forRange("i",i,lr.default.errors,a=>{t.const(o,(0,_e._)`${lr.default.vErrors}[${a}]`),t.if((0,_e._)`${o}.instancePath === undefined`,()=>t.assign((0,_e._)`${o}.instancePath`,(0,_e.strConcat)(lr.default.instancePath,s.errorPath))),t.assign((0,_e._)`${o}.schemaPath`,(0,_e.str)`${s.errSchemaPath}/${e}`),s.opts.verbose&&(t.assign((0,_e._)`${o}.schema`,r),t.assign((0,_e._)`${o}.data`,n))})}Xt.extendErrors=ope;function p2(t,e){let r=t.const("err",e);t.if((0,_e._)`${lr.default.vErrors} === null`,()=>t.assign(lr.default.vErrors,(0,_e._)`[${r}]`),(0,_e._)`${lr.default.vErrors}.push(${r})`),t.code((0,_e._)`${lr.default.errors}++`)}function f2(t,e){let{gen:r,validateName:n,schemaEnv:i}=t;i.$async?r.throw((0,_e._)`new ${t.ValidationError}(${e})`):(r.assign((0,_e._)`${n}.errors`,e),r.return(!1))}var Po={keyword:new _e.Name("keyword"),schemaPath:new _e.Name("schemaPath"),params:new _e.Name("params"),propertyName:new _e.Name("propertyName"),message:new _e.Name("message"),schema:new _e.Name("schema"),parentSchema:new _e.Name("parentSchema")};function m2(t,e,r){let{createErrors:n}=t.it;return n===!1?(0,_e._)`{}`:ape(t,e,r)}function ape(t,e,r={}){let{gen:n,it:i}=t,s=[cpe(i,r),lpe(t,r)];return upe(t,e,s),n.object(...s)}function cpe({errorPath:t},{instancePath:e}){let r=e?(0,_e.str)`${t}${(0,zm.getErrorPath)(e,zm.Type.Str)}`:t;return[lr.default.instancePath,(0,_e.strConcat)(lr.default.instancePath,r)]}function lpe({keyword:t,it:{errSchemaPath:e}},{schemaPath:r,parentSchema:n}){let i=n?e:(0,_e.str)`${e}/${t}`;return r&&(i=(0,_e.str)`${i}${(0,zm.getErrorPath)(r,zm.Type.Str)}`),[Po.schemaPath,i]}function upe(t,{params:e,message:r},n){let{keyword:i,data:s,schemaValue:o,it:a}=t,{opts:c,propertyName:l,topSchemaRef:u,schemaPath:d}=a;n.push([Po.keyword,i],[Po.params,typeof e=="function"?e(t):e||(0,_e._)`{}`]),c.messages&&n.push([Po.message,typeof r=="function"?r(t):r]),c.verbose&&n.push([Po.schema,o],[Po.parentSchema,(0,_e._)`${u}${d}`],[lr.default.data,s]),l&&n.push([Po.propertyName,l])}});var y2=h(Sc=>{"use strict";Object.defineProperty(Sc,"__esModule",{value:!0});Sc.boolOrEmptySchema=Sc.topBoolOrEmptySchema=void 0;var dpe=Fu(),ppe=ue(),fpe=Fi(),mpe={message:"boolean schema is false"};function hpe(t){let{gen:e,schema:r,validateName:n}=t;r===!1?h2(t,!1):typeof r=="object"&&r.$async===!0?e.return(fpe.default.data):(e.assign((0,ppe._)`${n}.errors`,null),e.return(!0))}Sc.topBoolOrEmptySchema=hpe;function ype(t,e){let{gen:r,schema:n}=t;n===!1?(r.var(e,!1),h2(t)):r.var(e,!0)}Sc.boolOrEmptySchema=ype;function h2(t,e){let{gen:r,data:n}=t,i={gen:r,keyword:"false schema",data:n,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,dpe.reportError)(i,mpe,void 0,e)}});var Hw=h(xc=>{"use strict";Object.defineProperty(xc,"__esModule",{value:!0});xc.getRules=xc.isJSONType=void 0;var gpe=["string","number","integer","boolean","null","object","array"],bpe=new Set(gpe);function vpe(t){return typeof t=="string"&&bpe.has(t)}xc.isJSONType=vpe;function Epe(){let t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...t,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}xc.getRules=Epe});var Vw=h(_s=>{"use strict";Object.defineProperty(_s,"__esModule",{value:!0});_s.shouldUseRule=_s.shouldUseGroup=_s.schemaHasRulesForType=void 0;function Spe({schema:t,self:e},r){let n=e.RULES.types[r];return n&&n!==!0&&g2(t,n)}_s.schemaHasRulesForType=Spe;function g2(t,e){return e.rules.some(r=>b2(t,r))}_s.shouldUseGroup=g2;function b2(t,e){var r;return t[e.keyword]!==void 0||((r=e.definition.implements)===null||r===void 0?void 0:r.some(n=>t[n]!==void 0))}_s.shouldUseRule=b2});var $u=h(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.reportTypeError=Zt.checkDataTypes=Zt.checkDataType=Zt.coerceAndCheckDataType=Zt.getJSONTypes=Zt.getSchemaTypes=Zt.DataType=void 0;var xpe=Hw(),wpe=Vw(),_pe=Fu(),le=ue(),v2=we(),wc;(function(t){t[t.Correct=0]="Correct",t[t.Wrong=1]="Wrong"})(wc||(Zt.DataType=wc={}));function Ipe(t){let e=E2(t.type);if(e.includes("null")){if(t.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!e.length&&t.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');t.nullable===!0&&e.push("null")}return e}Zt.getSchemaTypes=Ipe;function E2(t){let e=Array.isArray(t)?t:t?[t]:[];if(e.every(xpe.isJSONType))return e;throw new Error("type must be JSONType or JSONType[]: "+e.join(","))}Zt.getJSONTypes=E2;function Tpe(t,e){let{gen:r,data:n,opts:i}=t,s=kpe(e,i.coerceTypes),o=e.length>0&&!(s.length===0&&e.length===1&&(0,wpe.schemaHasRulesForType)(t,e[0]));if(o){let a=Yw(e,n,i.strictNumbers,wc.Wrong);r.if(a,()=>{s.length?Ape(t,e,s):Qw(t)})}return o}Zt.coerceAndCheckDataType=Tpe;var S2=new Set(["string","number","integer","boolean","null"]);function kpe(t,e){return e?t.filter(r=>S2.has(r)||e==="array"&&r==="array"):[]}function Ape(t,e,r){let{gen:n,data:i,opts:s}=t,o=n.let("dataType",(0,le._)`typeof ${i}`),a=n.let("coerced",(0,le._)`undefined`);s.coerceTypes==="array"&&n.if((0,le._)`${o} == 'object' && Array.isArray(${i}) && ${i}.length == 1`,()=>n.assign(i,(0,le._)`${i}[0]`).assign(o,(0,le._)`typeof ${i}`).if(Yw(e,i,s.strictNumbers),()=>n.assign(a,i))),n.if((0,le._)`${a} !== undefined`);for(let l of r)(S2.has(l)||l==="array"&&s.coerceTypes==="array")&&c(l);n.else(),Qw(t),n.endIf(),n.if((0,le._)`${a} !== undefined`,()=>{n.assign(i,a),Rpe(t,a)});function c(l){switch(l){case"string":n.elseIf((0,le._)`${o} == "number" || ${o} == "boolean"`).assign(a,(0,le._)`"" + ${i}`).elseIf((0,le._)`${i} === null`).assign(a,(0,le._)`""`);return;case"number":n.elseIf((0,le._)`${o} == "boolean" || ${i} === null
|
||
|| (${o} == "string" && ${i} && ${i} == +${i})`).assign(a,(0,le._)`+${i}`);return;case"integer":n.elseIf((0,le._)`${o} === "boolean" || ${i} === null
|
||
|| (${o} === "string" && ${i} && ${i} == +${i} && !(${i} % 1))`).assign(a,(0,le._)`+${i}`);return;case"boolean":n.elseIf((0,le._)`${i} === "false" || ${i} === 0 || ${i} === null`).assign(a,!1).elseIf((0,le._)`${i} === "true" || ${i} === 1`).assign(a,!0);return;case"null":n.elseIf((0,le._)`${i} === "" || ${i} === 0 || ${i} === false`),n.assign(a,null);return;case"array":n.elseIf((0,le._)`${o} === "string" || ${o} === "number"
|
||
|| ${o} === "boolean" || ${i} === null`).assign(a,(0,le._)`[${i}]`)}}}function Rpe({gen:t,parentData:e,parentDataProperty:r},n){t.if((0,le._)`${e} !== undefined`,()=>t.assign((0,le._)`${e}[${r}]`,n))}function Ww(t,e,r,n=wc.Correct){let i=n===wc.Correct?le.operators.EQ:le.operators.NEQ,s;switch(t){case"null":return(0,le._)`${e} ${i} null`;case"array":s=(0,le._)`Array.isArray(${e})`;break;case"object":s=(0,le._)`${e} && typeof ${e} == "object" && !Array.isArray(${e})`;break;case"integer":s=o((0,le._)`!(${e} % 1) && !isNaN(${e})`);break;case"number":s=o();break;default:return(0,le._)`typeof ${e} ${i} ${t}`}return n===wc.Correct?s:(0,le.not)(s);function o(a=le.nil){return(0,le.and)((0,le._)`typeof ${e} == "number"`,a,r?(0,le._)`isFinite(${e})`:le.nil)}}Zt.checkDataType=Ww;function Yw(t,e,r,n){if(t.length===1)return Ww(t[0],e,r,n);let i,s=(0,v2.toHash)(t);if(s.array&&s.object){let o=(0,le._)`typeof ${e} != "object"`;i=s.null?o:(0,le._)`!${e} || ${o}`,delete s.null,delete s.array,delete s.object}else i=le.nil;s.number&&delete s.integer;for(let o in s)i=(0,le.and)(i,Ww(o,e,r,n));return i}Zt.checkDataTypes=Yw;var Ope={message:({schema:t})=>`must be ${t}`,params:({schema:t,schemaValue:e})=>typeof t=="string"?(0,le._)`{type: ${t}}`:(0,le._)`{type: ${e}}`};function Qw(t){let e=Cpe(t);(0,_pe.reportError)(e,Ope)}Zt.reportTypeError=Qw;function Cpe(t){let{gen:e,data:r,schema:n}=t,i=(0,v2.schemaRefOrVal)(t,n,"type");return{gen:e,keyword:"type",data:r,schema:n.type,schemaCode:i,schemaValue:i,parentSchema:n,params:{},it:t}}});var w2=h(Gm=>{"use strict";Object.defineProperty(Gm,"__esModule",{value:!0});Gm.assignDefaults=void 0;var _c=ue(),jpe=we();function Ppe(t,e){let{properties:r,items:n}=t.schema;if(e==="object"&&r)for(let i in r)x2(t,i,r[i].default);else e==="array"&&Array.isArray(n)&&n.forEach((i,s)=>x2(t,s,i.default))}Gm.assignDefaults=Ppe;function x2(t,e,r){let{gen:n,compositeRule:i,data:s,opts:o}=t;if(r===void 0)return;let a=(0,_c._)`${s}${(0,_c.getProperty)(e)}`;if(i){(0,jpe.checkStrictMode)(t,`default is ignored for: ${a}`);return}let c=(0,_c._)`${a} === undefined`;o.useDefaults==="empty"&&(c=(0,_c._)`${c} || ${a} === null || ${a} === ""`),n.if(c,(0,_c._)`${a} = ${(0,_c.stringify)(r)}`)}});var on=h(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.validateUnion=Me.validateArray=Me.usePattern=Me.callValidateCode=Me.schemaProperties=Me.allSchemaProperties=Me.noPropertyInData=Me.propertyInData=Me.isOwnProperty=Me.hasPropFunc=Me.reportMissingProp=Me.checkMissingProp=Me.checkReportMissingProp=void 0;var He=ue(),Xw=we(),Is=Fi(),Kpe=we();function Dpe(t,e){let{gen:r,data:n,it:i}=t;r.if(e_(r,n,e,i.opts.ownProperties),()=>{t.setParams({missingProperty:(0,He._)`${e}`},!0),t.error()})}Me.checkReportMissingProp=Dpe;function Mpe({gen:t,data:e,it:{opts:r}},n,i){return(0,He.or)(...n.map(s=>(0,He.and)(e_(t,e,s,r.ownProperties),(0,He._)`${i} = ${s}`)))}Me.checkMissingProp=Mpe;function Npe(t,e){t.setParams({missingProperty:e},!0),t.error()}Me.reportMissingProp=Npe;function _2(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,He._)`Object.prototype.hasOwnProperty`})}Me.hasPropFunc=_2;function Zw(t,e,r){return(0,He._)`${_2(t)}.call(${e}, ${r})`}Me.isOwnProperty=Zw;function Lpe(t,e,r,n){let i=(0,He._)`${e}${(0,He.getProperty)(r)} !== undefined`;return n?(0,He._)`${i} && ${Zw(t,e,r)}`:i}Me.propertyInData=Lpe;function e_(t,e,r,n){let i=(0,He._)`${e}${(0,He.getProperty)(r)} === undefined`;return n?(0,He.or)(i,(0,He.not)(Zw(t,e,r))):i}Me.noPropertyInData=e_;function I2(t){return t?Object.keys(t).filter(e=>e!=="__proto__"):[]}Me.allSchemaProperties=I2;function qpe(t,e){return I2(e).filter(r=>!(0,Xw.alwaysValidSchema)(t,e[r]))}Me.schemaProperties=qpe;function Fpe({schemaCode:t,data:e,it:{gen:r,topSchemaRef:n,schemaPath:i,errorPath:s},it:o},a,c,l){let u=l?(0,He._)`${t}, ${e}, ${n}${i}`:e,d=[[Is.default.instancePath,(0,He.strConcat)(Is.default.instancePath,s)],[Is.default.parentData,o.parentData],[Is.default.parentDataProperty,o.parentDataProperty],[Is.default.rootData,Is.default.rootData]];o.opts.dynamicRef&&d.push([Is.default.dynamicAnchors,Is.default.dynamicAnchors]);let p=(0,He._)`${u}, ${r.object(...d)}`;return c!==He.nil?(0,He._)`${a}.call(${c}, ${p})`:(0,He._)`${a}(${p})`}Me.callValidateCode=Fpe;var $pe=(0,He._)`new RegExp`;function Upe({gen:t,it:{opts:e}},r){let n=e.unicodeRegExp?"u":"",{regExp:i}=e.code,s=i(r,n);return t.scopeValue("pattern",{key:s.toString(),ref:s,code:(0,He._)`${i.code==="new RegExp"?$pe:(0,Kpe.useFunc)(t,i)}(${r}, ${n})`})}Me.usePattern=Upe;function Jpe(t){let{gen:e,data:r,keyword:n,it:i}=t,s=e.name("valid");if(i.allErrors){let a=e.let("valid",!0);return o(()=>e.assign(a,!1)),a}return e.var(s,!0),o(()=>e.break()),s;function o(a){let c=e.const("len",(0,He._)`${r}.length`);e.forRange("i",0,c,l=>{t.subschema({keyword:n,dataProp:l,dataPropType:Xw.Type.Num},s),e.if((0,He.not)(s),a)})}}Me.validateArray=Jpe;function zpe(t){let{gen:e,schema:r,keyword:n,it:i}=t;if(!Array.isArray(r))throw new Error("ajv implementation error");if(r.some(c=>(0,Xw.alwaysValidSchema)(i,c))&&!i.opts.unevaluated)return;let o=e.let("valid",!1),a=e.name("_valid");e.block(()=>r.forEach((c,l)=>{let u=t.subschema({keyword:n,schemaProp:l,compositeRule:!0},a);e.assign(o,(0,He._)`${o} || ${a}`),t.mergeValidEvaluated(u,a)||e.if((0,He.not)(o))})),t.result(o,()=>t.reset(),()=>t.error(!0))}Me.validateUnion=zpe});var A2=h(Xn=>{"use strict";Object.defineProperty(Xn,"__esModule",{value:!0});Xn.validateKeywordUsage=Xn.validSchemaType=Xn.funcKeywordCode=Xn.macroKeywordCode=void 0;var ur=ue(),Ko=Fi(),Gpe=on(),Bpe=Fu();function Hpe(t,e){let{gen:r,keyword:n,schema:i,parentSchema:s,it:o}=t,a=e.macro.call(o.self,i,s,o),c=k2(r,n,a);o.opts.validateSchema!==!1&&o.self.validateSchema(a,!0);let l=r.name("valid");t.subschema({schema:a,schemaPath:ur.nil,errSchemaPath:`${o.errSchemaPath}/${n}`,topSchemaRef:c,compositeRule:!0},l),t.pass(l,()=>t.error(!0))}Xn.macroKeywordCode=Hpe;function Vpe(t,e){var r;let{gen:n,keyword:i,schema:s,parentSchema:o,$data:a,it:c}=t;Ype(c,e);let l=!a&&e.compile?e.compile.call(c.self,s,o,c):e.validate,u=k2(n,i,l),d=n.let("valid");t.block$data(d,p),t.ok((r=e.valid)!==null&&r!==void 0?r:d);function p(){if(e.errors===!1)y(),e.modifying&&T2(t),b(()=>t.error());else{let v=e.async?f():m();e.modifying&&T2(t),b(()=>Wpe(t,v))}}function f(){let v=n.let("ruleErrs",null);return n.try(()=>y((0,ur._)`await `),E=>n.assign(d,!1).if((0,ur._)`${E} instanceof ${c.ValidationError}`,()=>n.assign(v,(0,ur._)`${E}.errors`),()=>n.throw(E))),v}function m(){let v=(0,ur._)`${u}.errors`;return n.assign(v,null),y(ur.nil),v}function y(v=e.async?(0,ur._)`await `:ur.nil){let E=c.opts.passContext?Ko.default.this:Ko.default.self,S=!("compile"in e&&!a||e.schema===!1);n.assign(d,(0,ur._)`${v}${(0,Gpe.callValidateCode)(t,u,E,S)}`,e.modifying)}function b(v){var E;n.if((0,ur.not)((E=e.valid)!==null&&E!==void 0?E:d),v)}}Xn.funcKeywordCode=Vpe;function T2(t){let{gen:e,data:r,it:n}=t;e.if(n.parentData,()=>e.assign(r,(0,ur._)`${n.parentData}[${n.parentDataProperty}]`))}function Wpe(t,e){let{gen:r}=t;r.if((0,ur._)`Array.isArray(${e})`,()=>{r.assign(Ko.default.vErrors,(0,ur._)`${Ko.default.vErrors} === null ? ${e} : ${Ko.default.vErrors}.concat(${e})`).assign(Ko.default.errors,(0,ur._)`${Ko.default.vErrors}.length`),(0,Bpe.extendErrors)(t)},()=>t.error())}function Ype({schemaEnv:t},e){if(e.async&&!t.$async)throw new Error("async keyword in sync schema")}function k2(t,e,r){if(r===void 0)throw new Error(`keyword "${e}" failed to compile`);return t.scopeValue("keyword",typeof r=="function"?{ref:r}:{ref:r,code:(0,ur.stringify)(r)})}function Qpe(t,e,r=!1){return!e.length||e.some(n=>n==="array"?Array.isArray(t):n==="object"?t&&typeof t=="object"&&!Array.isArray(t):typeof t==n||r&&typeof t>"u")}Xn.validSchemaType=Qpe;function Xpe({schema:t,opts:e,self:r,errSchemaPath:n},i,s){if(Array.isArray(i.keyword)?!i.keyword.includes(s):i.keyword!==s)throw new Error("ajv implementation error");let o=i.dependencies;if(o?.some(a=>!Object.prototype.hasOwnProperty.call(t,a)))throw new Error(`parent schema must have dependencies of ${s}: ${o.join(",")}`);if(i.validateSchema&&!i.validateSchema(t[s])){let c=`keyword "${s}" value is invalid at path "${n}": `+r.errorsText(i.validateSchema.errors);if(e.validateSchema==="log")r.logger.error(c);else throw new Error(c)}}Xn.validateKeywordUsage=Xpe});var O2=h(Ts=>{"use strict";Object.defineProperty(Ts,"__esModule",{value:!0});Ts.extendSubschemaMode=Ts.extendSubschemaData=Ts.getSubschema=void 0;var Zn=ue(),R2=we();function Zpe(t,{keyword:e,schemaProp:r,schema:n,schemaPath:i,errSchemaPath:s,topSchemaRef:o}){if(e!==void 0&&n!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(e!==void 0){let a=t.schema[e];return r===void 0?{schema:a,schemaPath:(0,Zn._)`${t.schemaPath}${(0,Zn.getProperty)(e)}`,errSchemaPath:`${t.errSchemaPath}/${e}`}:{schema:a[r],schemaPath:(0,Zn._)`${t.schemaPath}${(0,Zn.getProperty)(e)}${(0,Zn.getProperty)(r)}`,errSchemaPath:`${t.errSchemaPath}/${e}/${(0,R2.escapeFragment)(r)}`}}if(n!==void 0){if(i===void 0||s===void 0||o===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:n,schemaPath:i,topSchemaRef:o,errSchemaPath:s}}throw new Error('either "keyword" or "schema" must be passed')}Ts.getSubschema=Zpe;function efe(t,e,{dataProp:r,dataPropType:n,data:i,dataTypes:s,propertyName:o}){if(i!==void 0&&r!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=e;if(r!==void 0){let{errorPath:l,dataPathArr:u,opts:d}=e,p=a.let("data",(0,Zn._)`${e.data}${(0,Zn.getProperty)(r)}`,!0);c(p),t.errorPath=(0,Zn.str)`${l}${(0,R2.getErrorPath)(r,n,d.jsPropertySyntax)}`,t.parentDataProperty=(0,Zn._)`${r}`,t.dataPathArr=[...u,t.parentDataProperty]}if(i!==void 0){let l=i instanceof Zn.Name?i:a.let("data",i,!0);c(l),o!==void 0&&(t.propertyName=o)}s&&(t.dataTypes=s);function c(l){t.data=l,t.dataLevel=e.dataLevel+1,t.dataTypes=[],e.definedProperties=new Set,t.parentData=e.data,t.dataNames=[...e.dataNames,l]}}Ts.extendSubschemaData=efe;function tfe(t,{jtdDiscriminator:e,jtdMetadata:r,compositeRule:n,createErrors:i,allErrors:s}){n!==void 0&&(t.compositeRule=n),i!==void 0&&(t.createErrors=i),s!==void 0&&(t.allErrors=s),t.jtdDiscriminator=e,t.jtdMetadata=r}Ts.extendSubschemaMode=tfe});var t_=h((Vqe,C2)=>{"use strict";C2.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var n,i,s;if(Array.isArray(e)){if(n=e.length,n!=r.length)return!1;for(i=n;i--!==0;)if(!t(e[i],r[i]))return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(s=Object.keys(e),n=s.length,n!==Object.keys(r).length)return!1;for(i=n;i--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[i]))return!1;for(i=n;i--!==0;){var o=s[i];if(!t(e[o],r[o]))return!1}return!0}return e!==e&&r!==r}});var P2=h((Wqe,j2)=>{"use strict";var ks=j2.exports=function(t,e,r){typeof e=="function"&&(r=e,e={}),r=e.cb||r;var n=typeof r=="function"?r:r.pre||function(){},i=r.post||function(){};Bm(e,n,i,t,"",t)};ks.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};ks.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};ks.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};ks.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Bm(t,e,r,n,i,s,o,a,c,l){if(n&&typeof n=="object"&&!Array.isArray(n)){e(n,i,s,o,a,c,l);for(var u in n){var d=n[u];if(Array.isArray(d)){if(u in ks.arrayKeywords)for(var p=0;p<d.length;p++)Bm(t,e,r,d[p],i+"/"+u+"/"+p,s,i,u,n,p)}else if(u in ks.propsKeywords){if(d&&typeof d=="object")for(var f in d)Bm(t,e,r,d[f],i+"/"+u+"/"+rfe(f),s,i,u,n,f)}else(u in ks.keywords||t.allKeys&&!(u in ks.skipKeywords))&&Bm(t,e,r,d,i+"/"+u,s,i,u,n)}r(n,i,s,o,a,c,l)}}function rfe(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}});var Uu=h(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.getSchemaRefs=Sr.resolveUrl=Sr.normalizeId=Sr._getFullPath=Sr.getFullPath=Sr.inlineRef=void 0;var nfe=we(),ife=t_(),sfe=P2(),ofe=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function afe(t,e=!0){return typeof t=="boolean"?!0:e===!0?!r_(t):e?K2(t)<=e:!1}Sr.inlineRef=afe;var cfe=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function r_(t){for(let e in t){if(cfe.has(e))return!0;let r=t[e];if(Array.isArray(r)&&r.some(r_)||typeof r=="object"&&r_(r))return!0}return!1}function K2(t){let e=0;for(let r in t){if(r==="$ref")return 1/0;if(e++,!ofe.has(r)&&(typeof t[r]=="object"&&(0,nfe.eachItem)(t[r],n=>e+=K2(n)),e===1/0))return 1/0}return e}function D2(t,e="",r){r!==!1&&(e=Ic(e));let n=t.parse(e);return M2(t,n)}Sr.getFullPath=D2;function M2(t,e){return t.serialize(e).split("#")[0]+"#"}Sr._getFullPath=M2;var lfe=/#\/?$/;function Ic(t){return t?t.replace(lfe,""):""}Sr.normalizeId=Ic;function ufe(t,e,r){return r=Ic(r),t.resolve(e,r)}Sr.resolveUrl=ufe;var dfe=/^[a-z_][-a-z0-9._]*$/i;function pfe(t,e){if(typeof t=="boolean")return{};let{schemaId:r,uriResolver:n}=this.opts,i=Ic(t[r]||e),s={"":i},o=D2(n,i,!1),a={},c=new Set;return sfe(t,{allKeys:!0},(d,p,f,m)=>{if(m===void 0)return;let y=o+p,b=s[m];typeof d[r]=="string"&&(b=v.call(this,d[r])),E.call(this,d.$anchor),E.call(this,d.$dynamicAnchor),s[p]=b;function v(S){let k=this.opts.uriResolver.resolve;if(S=Ic(b?k(b,S):S),c.has(S))throw u(S);c.add(S);let _=this.refs[S];return typeof _=="string"&&(_=this.refs[_]),typeof _=="object"?l(d,_.schema,S):S!==Ic(y)&&(S[0]==="#"?(l(d,a[S],S),a[S]=d):this.refs[S]=y),S}function E(S){if(typeof S=="string"){if(!dfe.test(S))throw new Error(`invalid anchor "${S}"`);v.call(this,`#${S}`)}}}),a;function l(d,p,f){if(p!==void 0&&!ife(d,p))throw u(f)}function u(d){return new Error(`reference "${d}" resolves to more than one schema`)}}Sr.getSchemaRefs=pfe});var Gu=h(As=>{"use strict";Object.defineProperty(As,"__esModule",{value:!0});As.getData=As.KeywordCxt=As.validateFunctionCode=void 0;var $2=y2(),N2=$u(),i_=Vw(),Hm=$u(),ffe=w2(),zu=A2(),n_=O2(),J=ue(),Z=Fi(),mfe=Uu(),$i=we(),Ju=Fu();function hfe(t){if(z2(t)&&(G2(t),J2(t))){bfe(t);return}U2(t,()=>(0,$2.topBoolOrEmptySchema)(t))}As.validateFunctionCode=hfe;function U2({gen:t,validateName:e,schema:r,schemaEnv:n,opts:i},s){i.code.es5?t.func(e,(0,J._)`${Z.default.data}, ${Z.default.valCxt}`,n.$async,()=>{t.code((0,J._)`"use strict"; ${L2(r,i)}`),gfe(t,i),t.code(s)}):t.func(e,(0,J._)`${Z.default.data}, ${yfe(i)}`,n.$async,()=>t.code(L2(r,i)).code(s))}function yfe(t){return(0,J._)`{${Z.default.instancePath}="", ${Z.default.parentData}, ${Z.default.parentDataProperty}, ${Z.default.rootData}=${Z.default.data}${t.dynamicRef?(0,J._)`, ${Z.default.dynamicAnchors}={}`:J.nil}}={}`}function gfe(t,e){t.if(Z.default.valCxt,()=>{t.var(Z.default.instancePath,(0,J._)`${Z.default.valCxt}.${Z.default.instancePath}`),t.var(Z.default.parentData,(0,J._)`${Z.default.valCxt}.${Z.default.parentData}`),t.var(Z.default.parentDataProperty,(0,J._)`${Z.default.valCxt}.${Z.default.parentDataProperty}`),t.var(Z.default.rootData,(0,J._)`${Z.default.valCxt}.${Z.default.rootData}`),e.dynamicRef&&t.var(Z.default.dynamicAnchors,(0,J._)`${Z.default.valCxt}.${Z.default.dynamicAnchors}`)},()=>{t.var(Z.default.instancePath,(0,J._)`""`),t.var(Z.default.parentData,(0,J._)`undefined`),t.var(Z.default.parentDataProperty,(0,J._)`undefined`),t.var(Z.default.rootData,Z.default.data),e.dynamicRef&&t.var(Z.default.dynamicAnchors,(0,J._)`{}`)})}function bfe(t){let{schema:e,opts:r,gen:n}=t;U2(t,()=>{r.$comment&&e.$comment&&H2(t),wfe(t),n.let(Z.default.vErrors,null),n.let(Z.default.errors,0),r.unevaluated&&vfe(t),B2(t),Tfe(t)})}function vfe(t){let{gen:e,validateName:r}=t;t.evaluated=e.const("evaluated",(0,J._)`${r}.evaluated`),e.if((0,J._)`${t.evaluated}.dynamicProps`,()=>e.assign((0,J._)`${t.evaluated}.props`,(0,J._)`undefined`)),e.if((0,J._)`${t.evaluated}.dynamicItems`,()=>e.assign((0,J._)`${t.evaluated}.items`,(0,J._)`undefined`))}function L2(t,e){let r=typeof t=="object"&&t[e.schemaId];return r&&(e.code.source||e.code.process)?(0,J._)`/*# sourceURL=${r} */`:J.nil}function Efe(t,e){if(z2(t)&&(G2(t),J2(t))){Sfe(t,e);return}(0,$2.boolOrEmptySchema)(t,e)}function J2({schema:t,self:e}){if(typeof t=="boolean")return!t;for(let r in t)if(e.RULES.all[r])return!0;return!1}function z2(t){return typeof t.schema!="boolean"}function Sfe(t,e){let{schema:r,gen:n,opts:i}=t;i.$comment&&r.$comment&&H2(t),_fe(t),Ife(t);let s=n.const("_errs",Z.default.errors);B2(t,s),n.var(e,(0,J._)`${s} === ${Z.default.errors}`)}function G2(t){(0,$i.checkUnknownRules)(t),xfe(t)}function B2(t,e){if(t.opts.jtd)return q2(t,[],!1,e);let r=(0,N2.getSchemaTypes)(t.schema),n=(0,N2.coerceAndCheckDataType)(t,r);q2(t,r,!n,e)}function xfe(t){let{schema:e,errSchemaPath:r,opts:n,self:i}=t;e.$ref&&n.ignoreKeywordsWithRef&&(0,$i.schemaHasRulesButRef)(e,i.RULES)&&i.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}function wfe(t){let{schema:e,opts:r}=t;e.default!==void 0&&r.useDefaults&&r.strictSchema&&(0,$i.checkStrictMode)(t,"default is ignored in the schema root")}function _fe(t){let e=t.schema[t.opts.schemaId];e&&(t.baseId=(0,mfe.resolveUrl)(t.opts.uriResolver,t.baseId,e))}function Ife(t){if(t.schema.$async&&!t.schemaEnv.$async)throw new Error("async schema in sync schema")}function H2({gen:t,schemaEnv:e,schema:r,errSchemaPath:n,opts:i}){let s=r.$comment;if(i.$comment===!0)t.code((0,J._)`${Z.default.self}.logger.log(${s})`);else if(typeof i.$comment=="function"){let o=(0,J.str)`${n}/$comment`,a=t.scopeValue("root",{ref:e.root});t.code((0,J._)`${Z.default.self}.opts.$comment(${s}, ${o}, ${a}.schema)`)}}function Tfe(t){let{gen:e,schemaEnv:r,validateName:n,ValidationError:i,opts:s}=t;r.$async?e.if((0,J._)`${Z.default.errors} === 0`,()=>e.return(Z.default.data),()=>e.throw((0,J._)`new ${i}(${Z.default.vErrors})`)):(e.assign((0,J._)`${n}.errors`,Z.default.vErrors),s.unevaluated&&kfe(t),e.return((0,J._)`${Z.default.errors} === 0`))}function kfe({gen:t,evaluated:e,props:r,items:n}){r instanceof J.Name&&t.assign((0,J._)`${e}.props`,r),n instanceof J.Name&&t.assign((0,J._)`${e}.items`,n)}function q2(t,e,r,n){let{gen:i,schema:s,data:o,allErrors:a,opts:c,self:l}=t,{RULES:u}=l;if(s.$ref&&(c.ignoreKeywordsWithRef||!(0,$i.schemaHasRulesButRef)(s,u))){i.block(()=>W2(t,"$ref",u.all.$ref.definition));return}c.jtd||Afe(t,e),i.block(()=>{for(let p of u.rules)d(p);d(u.post)});function d(p){(0,i_.shouldUseGroup)(s,p)&&(p.type?(i.if((0,Hm.checkDataType)(p.type,o,c.strictNumbers)),F2(t,p),e.length===1&&e[0]===p.type&&r&&(i.else(),(0,Hm.reportTypeError)(t)),i.endIf()):F2(t,p),a||i.if((0,J._)`${Z.default.errors} === ${n||0}`))}}function F2(t,e){let{gen:r,schema:n,opts:{useDefaults:i}}=t;i&&(0,ffe.assignDefaults)(t,e.type),r.block(()=>{for(let s of e.rules)(0,i_.shouldUseRule)(n,s)&&W2(t,s.keyword,s.definition,e.type)})}function Afe(t,e){t.schemaEnv.meta||!t.opts.strictTypes||(Rfe(t,e),t.opts.allowUnionTypes||Ofe(t,e),Cfe(t,t.dataTypes))}function Rfe(t,e){if(e.length){if(!t.dataTypes.length){t.dataTypes=e;return}e.forEach(r=>{V2(t.dataTypes,r)||s_(t,`type "${r}" not allowed by context "${t.dataTypes.join(",")}"`)}),Pfe(t,e)}}function Ofe(t,e){e.length>1&&!(e.length===2&&e.includes("null"))&&s_(t,"use allowUnionTypes to allow union type keyword")}function Cfe(t,e){let r=t.self.RULES.all;for(let n in r){let i=r[n];if(typeof i=="object"&&(0,i_.shouldUseRule)(t.schema,i)){let{type:s}=i.definition;s.length&&!s.some(o=>jfe(e,o))&&s_(t,`missing type "${s.join(",")}" for keyword "${n}"`)}}}function jfe(t,e){return t.includes(e)||e==="number"&&t.includes("integer")}function V2(t,e){return t.includes(e)||e==="integer"&&t.includes("number")}function Pfe(t,e){let r=[];for(let n of t.dataTypes)V2(e,n)?r.push(n):e.includes("integer")&&n==="number"&&r.push("integer");t.dataTypes=r}function s_(t,e){let r=t.schemaEnv.baseId+t.errSchemaPath;e+=` at "${r}" (strictTypes)`,(0,$i.checkStrictMode)(t,e,t.opts.strictTypes)}var Vm=class{constructor(e,r,n){if((0,zu.validateKeywordUsage)(e,r,n),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=n,this.data=e.data,this.schema=e.schema[n],this.$data=r.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,$i.schemaRefOrVal)(e,this.schema,n,this.$data),this.schemaType=r.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=r,this.$data)this.schemaCode=e.gen.const("vSchema",Y2(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,zu.validSchemaType)(this.schema,r.schemaType,r.allowUndefined))throw new Error(`${n} value must be ${JSON.stringify(r.schemaType)}`);("code"in r?r.trackErrors:r.errors!==!1)&&(this.errsCount=e.gen.const("_errs",Z.default.errors))}result(e,r,n){this.failResult((0,J.not)(e),r,n)}failResult(e,r,n){this.gen.if(e),n?n():this.error(),r?(this.gen.else(),r(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,r){this.failResult((0,J.not)(e),void 0,r)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:r}=this;this.fail((0,J._)`${r} !== undefined && (${(0,J.or)(this.invalid$data(),e)})`)}error(e,r,n){if(r){this.setParams(r),this._error(e,n),this.setParams({});return}this._error(e,n)}_error(e,r){(e?Ju.reportExtraError:Ju.reportError)(this,this.def.error,r)}$dataError(){(0,Ju.reportError)(this,this.def.$dataError||Ju.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,Ju.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,r){r?Object.assign(this.params,e):this.params=e}block$data(e,r,n=J.nil){this.gen.block(()=>{this.check$data(e,n),r()})}check$data(e=J.nil,r=J.nil){if(!this.$data)return;let{gen:n,schemaCode:i,schemaType:s,def:o}=this;n.if((0,J.or)((0,J._)`${i} === undefined`,r)),e!==J.nil&&n.assign(e,!0),(s.length||o.validateSchema)&&(n.elseIf(this.invalid$data()),this.$dataError(),e!==J.nil&&n.assign(e,!1)),n.else()}invalid$data(){let{gen:e,schemaCode:r,schemaType:n,def:i,it:s}=this;return(0,J.or)(o(),a());function o(){if(n.length){if(!(r instanceof J.Name))throw new Error("ajv implementation error");let c=Array.isArray(n)?n:[n];return(0,J._)`${(0,Hm.checkDataTypes)(c,r,s.opts.strictNumbers,Hm.DataType.Wrong)}`}return J.nil}function a(){if(i.validateSchema){let c=e.scopeValue("validate$data",{ref:i.validateSchema});return(0,J._)`!${c}(${r})`}return J.nil}}subschema(e,r){let n=(0,n_.getSubschema)(this.it,e);(0,n_.extendSubschemaData)(n,this.it,e),(0,n_.extendSubschemaMode)(n,e);let i={...this.it,...n,items:void 0,props:void 0};return Efe(i,r),i}mergeEvaluated(e,r){let{it:n,gen:i}=this;n.opts.unevaluated&&(n.props!==!0&&e.props!==void 0&&(n.props=$i.mergeEvaluated.props(i,e.props,n.props,r)),n.items!==!0&&e.items!==void 0&&(n.items=$i.mergeEvaluated.items(i,e.items,n.items,r)))}mergeValidEvaluated(e,r){let{it:n,gen:i}=this;if(n.opts.unevaluated&&(n.props!==!0||n.items!==!0))return i.if(r,()=>this.mergeEvaluated(e,J.Name)),!0}};As.KeywordCxt=Vm;function W2(t,e,r,n){let i=new Vm(t,r,e);"code"in r?r.code(i,n):i.$data&&r.validate?(0,zu.funcKeywordCode)(i,r):"macro"in r?(0,zu.macroKeywordCode)(i,r):(r.compile||r.validate)&&(0,zu.funcKeywordCode)(i,r)}var Kfe=/^\/(?:[^~]|~0|~1)*$/,Dfe=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Y2(t,{dataLevel:e,dataNames:r,dataPathArr:n}){let i,s;if(t==="")return Z.default.rootData;if(t[0]==="/"){if(!Kfe.test(t))throw new Error(`Invalid JSON-pointer: ${t}`);i=t,s=Z.default.rootData}else{let l=Dfe.exec(t);if(!l)throw new Error(`Invalid JSON-pointer: ${t}`);let u=+l[1];if(i=l[2],i==="#"){if(u>=e)throw new Error(c("property/index",u));return n[e-u]}if(u>e)throw new Error(c("data",u));if(s=r[e-u],!i)return s}let o=s,a=i.split("/");for(let l of a)l&&(s=(0,J._)`${s}${(0,J.getProperty)((0,$i.unescapeJsonPointer)(l))}`,o=(0,J._)`${o} && ${s}`);return o;function c(l,u){return`Cannot access ${l} ${u} levels up, current level is ${e}`}}As.getData=Y2});var Wm=h(a_=>{"use strict";Object.defineProperty(a_,"__esModule",{value:!0});var o_=class extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}};a_.default=o_});var Bu=h(u_=>{"use strict";Object.defineProperty(u_,"__esModule",{value:!0});var c_=Uu(),l_=class extends Error{constructor(e,r,n,i){super(i||`can't resolve reference ${n} from id ${r}`),this.missingRef=(0,c_.resolveUrl)(e,r,n),this.missingSchema=(0,c_.normalizeId)((0,c_.getFullPath)(e,this.missingRef))}};u_.default=l_});var Qm=h(an=>{"use strict";Object.defineProperty(an,"__esModule",{value:!0});an.resolveSchema=an.getCompilingSchema=an.resolveRef=an.compileSchema=an.SchemaEnv=void 0;var An=ue(),Mfe=Wm(),Do=Fi(),Rn=Uu(),Q2=we(),Nfe=Gu(),Tc=class{constructor(e){var r;this.refs={},this.dynamicAnchors={};let n;typeof e.schema=="object"&&(n=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(r=e.baseId)!==null&&r!==void 0?r:(0,Rn.normalizeId)(n?.[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=n?.$async,this.refs={}}};an.SchemaEnv=Tc;function p_(t){let e=X2.call(this,t);if(e)return e;let r=(0,Rn.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:n,lines:i}=this.opts.code,{ownProperties:s}=this.opts,o=new An.CodeGen(this.scope,{es5:n,lines:i,ownProperties:s}),a;t.$async&&(a=o.scopeValue("Error",{ref:Mfe.default,code:(0,An._)`require("ajv/dist/runtime/validation_error").default`}));let c=o.scopeName("validate");t.validateName=c;let l={gen:o,allErrors:this.opts.allErrors,data:Do.default.data,parentData:Do.default.parentData,parentDataProperty:Do.default.parentDataProperty,dataNames:[Do.default.data],dataPathArr:[An.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:o.scopeValue("schema",this.opts.code.source===!0?{ref:t.schema,code:(0,An.stringify)(t.schema)}:{ref:t.schema}),validateName:c,ValidationError:a,schema:t.schema,schemaEnv:t,rootId:r,baseId:t.baseId||r,schemaPath:An.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,An._)`""`,opts:this.opts,self:this},u;try{this._compilations.add(t),(0,Nfe.validateFunctionCode)(l),o.optimize(this.opts.code.optimize);let d=o.toString();u=`${o.scopeRefs(Do.default.scope)}return ${d}`,this.opts.code.process&&(u=this.opts.code.process(u,t));let f=new Function(`${Do.default.self}`,`${Do.default.scope}`,u)(this,this.scope.get());if(this.scope.value(c,{ref:f}),f.errors=null,f.schema=t.schema,f.schemaEnv=t,t.$async&&(f.$async=!0),this.opts.code.source===!0&&(f.source={validateName:c,validateCode:d,scopeValues:o._values}),this.opts.unevaluated){let{props:m,items:y}=l;f.evaluated={props:m instanceof An.Name?void 0:m,items:y instanceof An.Name?void 0:y,dynamicProps:m instanceof An.Name,dynamicItems:y instanceof An.Name},f.source&&(f.source.evaluated=(0,An.stringify)(f.evaluated))}return t.validate=f,t}catch(d){throw delete t.validate,delete t.validateName,u&&this.logger.error("Error compiling schema, function code:",u),d}finally{this._compilations.delete(t)}}an.compileSchema=p_;function Lfe(t,e,r){var n;r=(0,Rn.resolveUrl)(this.opts.uriResolver,e,r);let i=t.refs[r];if(i)return i;let s=$fe.call(this,t,r);if(s===void 0){let o=(n=t.localRefs)===null||n===void 0?void 0:n[r],{schemaId:a}=this.opts;o&&(s=new Tc({schema:o,schemaId:a,root:t,baseId:e}))}if(s!==void 0)return t.refs[r]=qfe.call(this,s)}an.resolveRef=Lfe;function qfe(t){return(0,Rn.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:p_.call(this,t)}function X2(t){for(let e of this._compilations)if(Ffe(e,t))return e}an.getCompilingSchema=X2;function Ffe(t,e){return t.schema===e.schema&&t.root===e.root&&t.baseId===e.baseId}function $fe(t,e){let r;for(;typeof(r=this.refs[e])=="string";)e=r;return r||this.schemas[e]||Ym.call(this,t,e)}function Ym(t,e){let r=this.opts.uriResolver.parse(e),n=(0,Rn._getFullPath)(this.opts.uriResolver,r),i=(0,Rn.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&n===i)return d_.call(this,r,t);let s=(0,Rn.normalizeId)(n),o=this.refs[s]||this.schemas[s];if(typeof o=="string"){let a=Ym.call(this,t,o);return typeof a?.schema!="object"?void 0:d_.call(this,r,a)}if(typeof o?.schema=="object"){if(o.validate||p_.call(this,o),s===(0,Rn.normalizeId)(e)){let{schema:a}=o,{schemaId:c}=this.opts,l=a[c];return l&&(i=(0,Rn.resolveUrl)(this.opts.uriResolver,i,l)),new Tc({schema:a,schemaId:c,root:t,baseId:i})}return d_.call(this,r,o)}}an.resolveSchema=Ym;var Ufe=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function d_(t,{baseId:e,schema:r,root:n}){var i;if(((i=t.fragment)===null||i===void 0?void 0:i[0])!=="/")return;for(let a of t.fragment.slice(1).split("/")){if(typeof r=="boolean")return;let c=r[(0,Q2.unescapeFragment)(a)];if(c===void 0)return;r=c;let l=typeof r=="object"&&r[this.opts.schemaId];!Ufe.has(a)&&l&&(e=(0,Rn.resolveUrl)(this.opts.uriResolver,e,l))}let s;if(typeof r!="boolean"&&r.$ref&&!(0,Q2.schemaHasRulesButRef)(r,this.RULES)){let a=(0,Rn.resolveUrl)(this.opts.uriResolver,e,r.$ref);s=Ym.call(this,n,a)}let{schemaId:o}=this.opts;if(s=s||new Tc({schema:r,schemaId:o,root:n,baseId:e}),s.schema!==s.root.schema)return s}});var Z2=h((t2e,Jfe)=>{Jfe.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var b_=h((r2e,o4)=>{"use strict";var zfe=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),m_=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),Gfe=RegExp.prototype.test.bind(/^\d*$/u),Mo=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),h_=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),t4=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u),y_=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u),Bfe=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u),xr=new Array(256);{let t="0123456789ABCDEF";for(let e=0;e<256;e++)xr[e]="%"+t[e>>4]+t[e&15]}function er(t){return t<2048?xr[192|t>>6]+xr[128|t&63]:t<65536?xr[224|t>>12]+xr[128|t>>6&63]+xr[128|t&63]:xr[240|t>>18]+xr[128|t>>12&63]+xr[128|t>>6&63]+xr[128|t&63]}function Hfe(t){let e="",r=0,n=0;for(n=0;n<t.length;n++)if(r=t[n].charCodeAt(0),r!==48){if(!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";e+=t[n];break}for(n+=1;n<t.length;n++){if(r=t[n].charCodeAt(0),!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";e+=t[n]}return e}var Vfe=RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/),Wfe=RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/),Yfe=RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/),Qfe=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function Xfe(t){if(t.length===0)return!1;for(let e=0;e<t.length;e++)if(!Yfe(t[e])){if(t[e]==="%"&&e+2<t.length&&Mo(t.slice(e+1,e+3))){e+=2;continue}return!1}return!0}function e4(t){let e=-1,r=0,n=-1,i=0;for(let a=0;a<t.length;a++)t[a]==="0"?(n===-1&&(n=a),i++,i>r&&(r=i,e=n)):(n=-1,i=0);if(r<2)return t.join(":");let s=t.slice(0,e).join(":"),o=t.slice(e+r).join(":");return s+"::"+o}function Zfe(t){let e=t.indexOf("::");if(e!==-1&&t.indexOf("::",e+1)!==-1)return;let r=e===-1?t.split(":"):t.slice(0,e).split(":"),n=e===-1?[]:t.slice(e+2).split(":");e!==-1&&(r.length===1&&r[0]===""&&(r.length=0),n.length===1&&n[0]===""&&(n.length=0));let i=r.concat(n),s=0;for(let a=0;a<i.length;a++){let c=i[a];if(c==="")return;if(c.indexOf(".")!==-1){if(a!==i.length-1||e!==-1&&n.length===0||!m_(c))return;s+=2;continue}if(!Vfe(c))return;i[a]=parseInt(c,16).toString(16),s++}if(e===-1)return s!==8?void 0:e4(i);if(s>=8)return;let o=i.slice(0,r.length);for(let a=s;a<8;a++)o.push("0");for(let a=r.length;a<i.length;a++)o.push(i[a]);return e4(o)}function f_(t){let e=t[0]==="["&&t[t.length-1]==="]";if((t[0]==="["||t[t.length-1]==="]")&&!e)return{host:t,isIPV6:!1,error:!0};let n=e?t.slice(1,-1):t;if(e&&Wfe(n))return n=n.toLowerCase(),{host:`[${n}]`,escapedHost:n,isIPV6:!1,isIPVFuture:!0};if(eme(n,":")<2)return{host:t,isIPV6:!1,error:e};let i="",s=n.indexOf("%");if(s!==-1){let a=n.slice(s,s+3).toLowerCase()==="%25"?3:1;if(i=n.slice(s+a),!Xfe(i))return{host:t,isIPV6:!1,error:!0};n=n.slice(0,s)}let o=Zfe(n);return o===void 0?{host:t,isIPV6:!1,error:!0}:{host:o+(i?"%"+i:""),escapedHost:o+(i?"%25"+i:""),isIPV6:!0}}function eme(t,e){let r=0;for(let n=0;n<t.length;n++)t[n]===e&&r++;return r}function tme(t){let e=t,r=[],n=-1,i=0;for(;i=e.length;){if(i===1){if(e===".")break;if(e==="/"){r.push("/");break}else{r.push(e);break}}else if(i===2){if(e[0]==="."){if(e[1]===".")break;if(e[1]==="/"){e=e.slice(2);continue}}else if(e[0]==="/"&&(e[1]==="."||e[1]==="/")){r.push("/");break}}else if(i===3&&e==="/.."){r.length!==0&&r.pop(),r.push("/");break}if(e[0]==="."){if(e[1]==="."){if(e[2]==="/"){e=e.slice(3);continue}}else if(e[1]==="/"){e=e.slice(2);continue}}else if(e[0]==="/"&&e[1]==="."){if(e[2]==="/"){e=e.slice(2);continue}else if(e[2]==="."&&e[3]==="/"){e=e.slice(3),r.length!==0&&r.pop();continue}}if((n=e.indexOf("/",1))===-1){r.push(e);break}else r.push(e.slice(0,n)),e=e.slice(n)}return r.join("")}var rme={"@":"%40","/":"%2F","?":"%3F","#":"%23",":":"%3A"},nme=/[@/?#:]/g,ime=/[@/?#]/g;function r4(t,e){let r=e?ime:nme;return r.lastIndex=0,t.replace(r,n=>rme[n])}function n4(t,e=!1){if(t.indexOf("%")===-1)return t;let r="";for(let n=0;n<t.length;n++){if(t[n]==="%"&&n+2<t.length){let i=t.slice(n+1,n+3);if(Mo(i)){let s=i.toUpperCase(),o=String.fromCharCode(parseInt(s,16));e&&h_(o)?r+=o:r+="%"+s,n+=2;continue}}r+=t[n]}return r}function sme(t){let e="";for(let r=0;r<t.length;r++){let n=t[r];if(n==="%"&&r+2<t.length){let i=t.slice(r+1,r+3);if(Mo(i)){let s=i.toUpperCase(),o=String.fromCharCode(parseInt(s,16));o!=="."&&h_(o)?e+=o:e+="%"+s,r+=2;continue}}if(t4(n))e+=n;else{let i=t.charCodeAt(r);if(i<128)e+=s4(i)?n:xr[i];else if(i<55296||i>57343)e+=er(i);else if(i<=56319&&r+1<t.length){let s=t.charCodeAt(r+1);s>=56320&&s<=57343?(e+=er(65536+(i-55296<<10)+(s-56320)),r++):e+=er(65533)}else e+=er(65533)}}return e}function ome(t,e=!1){let r="",n=e&&t[0]!=="/";for(let i=0;i<t.length;i++){let s=t[i];if(s==="%"&&i+2<t.length){let o=t.slice(i+1,i+3);if(Mo(o)){r+="%"+o.toUpperCase(),i+=2;continue}}if(s==="/"&&(n=!1),t4(s)&&(s!==":"||!n))r+=s;else{let o=t.charCodeAt(i);if(o<128)r+=xr[o];else if(o<55296||o>57343)r+=er(o);else if(o<=56319&&i+1<t.length){let a=t.charCodeAt(i+1);a>=56320&&a<=57343?(r+=er(65536+(o-55296<<10)+(a-56320)),i++):r+=er(65533)}else r+=er(65533)}}return r}function g_(t,e){let r="";for(let n=0;n<t.length;n++){let i=t[n];if(i==="%"&&n+2<t.length){let s=t.slice(n+1,n+3);if(Mo(s)){r+="%"+s.toUpperCase(),n+=2;continue}}if(e(i))r+=i;else{let s=t.charCodeAt(n);if(s<128)r+=xr[s];else if(s<55296||s>57343)r+=er(s);else if(s<=56319&&n+1<t.length){let o=t.charCodeAt(n+1);o>=56320&&o<=57343?(r+=er(65536+(s-55296<<10)+(o-56320)),n++):r+=er(65533)}else r+=er(65533)}}return r}function i4(t){return g_(t,Bfe)}function ame(t){return g_(t,y_)}function cme(t){return g_(t,y_)}function s4(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||t===42||t===43||t===45||t===46||t===47||t===64||t===95}function lme(t){let e="";for(let r=0;r<t.length;r++){let n=t[r];if(n==="%"&&r+2<t.length){let i=t.slice(r+1,r+3);if(Mo(i)){let s=i.toUpperCase(),o=String.fromCharCode(parseInt(s,16));h_(o)?e+=o:e+="%"+s,r+=2;continue}}if(y_(n))e+=n;else{let i=t.charCodeAt(r);if(i<128)e+=s4(i)?n:xr[i];else if(i<55296||i>57343)e+=er(i);else if(i<=56319&&r+1<t.length){let s=t.charCodeAt(r+1);s>=56320&&s<=57343?(e+=er(65536+(i-55296<<10)+(s-56320)),r++):e+=er(65533)}else e+=er(65533)}}return e}function ume(t){let e="";for(let r=0;r<t.length;r++){if(t[r]==="%"&&r+2<t.length){let n=t.slice(r+1,r+3);if(Mo(n)){e+="%"+n.toUpperCase(),r+=2;continue}}e+=escape(t[r])}return e}function dme(t){let e=[];if(t.userinfo!==void 0&&(e.push(i4(t.userinfo)),e.push("@")),t.host!==void 0){let r=t.host;if(!m_(r)){let n=f_(r);n.isIPV6!==!0&&n.isIPVFuture!==!0&&(r=n4(r,!0),n=f_(r)),n.isIPV6===!0||n.isIPVFuture===!0?r=`[${n.escapedHost}]`:r=r4(r,!1)}e.push(r)}if(typeof t.port=="number"||typeof t.port=="string"){let r=String(t.port);if(!Gfe(r))throw new TypeError("URI port is malformed.");e.push(":"),e.push(r)}return e.length?e.join(""):void 0}o4.exports={nonSimpleDomain:Qfe,recomposeAuthority:dme,reescapeHostDelimiters:r4,normalizePercentEncoding:n4,normalizePathEncoding:sme,serializePathEncoding:ome,normalizeQueryFragmentEncoding:lme,encodeUserinfo:i4,encodeQuery:ame,encodeFragment:cme,escapePreservingEscapes:ume,removeDotSegments:tme,isIPv4:m_,isUUID:zfe,normalizeIPv6:f_,stringArrayToHexStripped:Hfe}});var d4=h((n2e,u4)=>{"use strict";var{isUUID:pme}=b_(),fme=/^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu,mme=["http","https","ws","wss","urn","urn:uuid"];function hme(t){return mme.indexOf(t)!==-1}function v_(t){return t.secure===!0?!0:t.secure===!1?!1:t.scheme?t.scheme.length===3&&(t.scheme[0]==="w"||t.scheme[0]==="W")&&(t.scheme[1]==="s"||t.scheme[1]==="S")&&(t.scheme[2]==="s"||t.scheme[2]==="S"):!1}function a4(t){return t.host||(t.error=t.error||"HTTP URIs must have a host."),t}function c4(t){let e=String(t.scheme).toLowerCase()==="https";return(t.port===(e?443:80)||t.port==="")&&(t.port=void 0),t.path||(t.path="/"),t}function yme(t){return t.secure=v_(t),t.resourceName=(t.path||"/")+(t.query?"?"+t.query:""),t.path=void 0,t.query=void 0,t}function gme(t){if((t.port===(v_(t)?443:80)||t.port==="")&&(t.port=void 0),typeof t.secure=="boolean"&&(t.scheme=t.secure?"wss":"ws",t.secure=void 0),t.resourceName){let e=t.resourceName.indexOf("?"),r=e===-1?t.resourceName:t.resourceName.slice(0,e);t.path=r&&r!=="/"?r:void 0,t.query=e===-1?void 0:t.resourceName.slice(e+1),t.resourceName=void 0}return t.fragment=void 0,t}function bme(t,e){if(!t.path)return t.error="URN can not be parsed",t;let r=t.path.match(fme);if(r&&r[0]===t.path){let n=e.scheme||t.scheme||"urn";t.nid=r[1].toLowerCase(),t.nss=r[2];let i=`${n}:${e.nid||t.nid}`,s=E_(i);t.path=void 0,s&&(t=s.parse(t,e))}else t.error=t.error||"URN can not be parsed.";return t}function vme(t,e){if(t.nid===void 0)throw new Error("URN without nid cannot be serialized");let r=e.scheme||t.scheme||"urn",n=t.nid.toLowerCase(),i=`${r}:${e.nid||n}`,s=E_(i);s&&(t=s.serialize(t,e));let o=t,a=t.nss;return o.path=`${n||e.nid}:${a}`,e.skipEscape=!0,o}function Eme(t,e){let r=t;return r.uuid=r.nss,r.nss=void 0,!e.tolerant&&(!r.uuid||!pme(r.uuid))&&(r.error=r.error||"UUID is not valid."),r}function Sme(t){let e=t;return e.nss=(t.uuid||"").toLowerCase(),e}var l4={scheme:"http",domainHost:!0,parse:a4,serialize:c4},xme={scheme:"https",domainHost:l4.domainHost,parse:a4,serialize:c4},Xm={scheme:"ws",domainHost:!0,parse:yme,serialize:gme},wme={scheme:"wss",domainHost:Xm.domainHost,parse:Xm.parse,serialize:Xm.serialize},_me={scheme:"urn",parse:bme,serialize:vme,skipNormalize:!0},Ime={scheme:"urn:uuid",parse:Eme,serialize:Sme,skipNormalize:!0},Zm={http:l4,https:xme,ws:Xm,wss:wme,urn:_me,"urn:uuid":Ime};Object.setPrototypeOf(Zm,null);function E_(t){return t&&(Zm[t]||Zm[t.toLowerCase()])||void 0}u4.exports={wsIsSecure:v_,SCHEMES:Zm,isValidSchemeName:hme,getSchemeHandler:E_}});var I4=h((i2e,rh)=>{"use strict";var{normalizeIPv6:y4,removeDotSegments:Vu,recomposeAuthority:Tme,normalizePercentEncoding:g4,normalizePathEncoding:kme,serializePathEncoding:p4,normalizeQueryFragmentEncoding:f4,encodeQuery:Ame,encodeFragment:Rme,reescapeHostDelimiters:Ome,isIPv4:b4,nonSimpleDomain:Cme}=b_(),{SCHEMES:v4,getSchemeHandler:S_}=d4(),E4=/^[A-Za-z][A-Za-z0-9+.-]*$/u,S4="URI scheme is malformed.";function m4(t){let e=unescape(String(t));if(!E4.test(e))throw new TypeError(S4);return e}function jme(t,e){return typeof t=="string"?t=Fme(t,e):typeof t=="object"&&(t=th(No(t,e),e)),t}function Pme(t,e,r){let n=r?Object.assign({scheme:"null"},r):{scheme:"null"},{parsed:i,malformedAuthorityOrPort:s,malformedPercentEncoding:o,malformedSchemeSpecific:a,malformedHost:c,malformedScheme:l}=eh(t,n),{parsed:u,malformedAuthorityOrPort:d,malformedPercentEncoding:p,malformedSchemeSpecific:f,malformedHost:m,malformedScheme:y}=eh(e,n);if(s||d||o||p||a||f||c||m||l||y)throw new Error(i.error||u.error||"URI is malformed.");let b=x4(i,u,n,!0),v=S_(r&&r.scheme||b.scheme),E=b.host,S=E!==void 0&&E!==""&&(b4(E)||y4(E).isIPV6);w4(b,r||{},v,S);let k=E&&E.indexOf("%")!==-1&&!new RegExp("\\P{ASCII}","u").test(E);if(b.error&&!k)throw new Error(b.error);return n.skipEscape=!0,No(b,n)}function x4(t,e,r,n){let i={};return n||(t=th(No(t,r),r),e=th(No(e,r),r)),r=r||{},!r.tolerant&&e.scheme?(i.scheme=e.scheme,i.userinfo=e.userinfo,i.host=e.host,i.port=e.port,i.path=Vu(e.path||""),i.query=e.query):(e.userinfo!==void 0||e.host!==void 0||e.port!==void 0?(i.userinfo=e.userinfo,i.host=e.host,i.port=e.port,i.path=Vu(e.path||""),i.query=e.query):(e.path?(e.path[0]==="/"?i.path=Vu(e.path):((t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)&&!t.path?i.path="/"+e.path:t.path?i.path=t.path.slice(0,t.path.lastIndexOf("/")+1)+e.path:i.path=e.path,i.path=Vu(i.path)),i.query=e.query):(i.path=t.path,e.query!==void 0?i.query=e.query:i.query=t.query),i.userinfo=t.userinfo,i.host=t.host,i.port=t.port),i.scheme=t.scheme),i.fragment=e.fragment,i}function Kme(t,e,r){let n=h4(t,r),i=h4(e,r);return n!==void 0&&i!==void 0&&n===i}function No(t,e){let r={host:t.host,scheme:t.scheme,userinfo:t.userinfo,port:t.port,path:t.path,query:t.query,nid:t.nid,nss:t.nss,uuid:t.uuid,fragment:t.fragment,reference:t.reference,resourceName:t.resourceName,secure:t.secure,error:""},n=Object.assign({},e),i=[];r.scheme&&(r.scheme=m4(r.scheme));let s=S_(n.scheme||r.scheme);s&&s.serialize&&s.serialize(r,n);let o=r.userinfo!==void 0||r.host!==void 0||r.port!==void 0,a=!n.skipEscape&&r.scheme===void 0&&!o;r.path!==void 0&&(n.skipEscape?r.path=g4(r.path):r.path=p4(r.path,a)),n.reference!=="suffix"&&r.scheme&&(r.scheme=m4(r.scheme),i.push(r.scheme,":"));let c=Tme(r);if(c!==void 0&&(n.reference!=="suffix"&&i.push("//"),i.push(c),r.path&&r.path[0]!=="/"&&i.push("/")),r.path!==void 0){let l=r.path;!n.absolutePath&&(!s||!s.absolutePath)&&(l=Vu(l)),a&&(l=p4(l,!0)),c===void 0&&l[0]==="/"&&l[1]==="/"&&(l="/%2F"+l.slice(2)),i.push(l)}return r.query!==void 0&&i.push("?",Ame(r.query)),r.fragment!==void 0&&i.push("#",Rme(r.fragment)),i.join("")}var Dme=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u,Mme=/^(?:[^#/:?]+:)?\/\/([^/?#]*)/,Nme=/^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;function Lme(t,e){if(e[2]!==void 0&&t.path&&t.path[0]!=="/")return'URI path must start with "/" when authority is present.';if(typeof t.port=="number"&&(t.port<0||t.port>65535))return"URI port is malformed."}function Hu(t){if(t===void 0)return!1;let e=t.indexOf("%");for(;e!==-1;){if(e+2>=t.length||!/^[\da-f]{2}$/iu.test(t.slice(e+1,e+3)))return!0;e=t.indexOf("%",e+3)}return!1}function x_(t){return t[0]==="["&&t[t.length-1]==="]"}function qme(t){let e=t[4];return Hu(t[3])||e!==void 0&&!x_(e)&&Hu(e)||Hu(t[6])||Hu(t[7])||Hu(t[8])}function w4(t,e,r,n){if(!e.unicodeSupport&&(!r||!r.unicodeSupport)&&t.host&&!x_(t.host)&&(e.domainHost||r&&r.domainHost)&&n===!1&&Cme(t.host))try{t.host=new URL("http://"+t.host).hostname}catch(i){return t.error=t.error||"Host's domain name can not be converted to ASCII: "+i,!0}return!1}function eh(t,e){let r=Object.assign({},e),n={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},i=!1,s=!1,o=!1,a=!1,c=!1,l=!1,u=!1;r.reference==="suffix"&&(r.scheme?t=r.scheme+":"+t:t="//"+t);let d=t.match(Mme);d!==null&&d[1].indexOf("\\")!==-1&&(n.error="URI authority must not contain a literal backslash.",i=!0);let p=t.match(Nme);if(p!==null){let m=p[1],y=m.replace(/[\t\n\r]/g,"");y.length>=2&&(y.slice(0,2)!=="//"?(n.error=n.error||"URI authority must not contain a literal backslash.",i=!0):m.length!==y.length&&(n.error=n.error||"URI authority introducer must not contain whitespace.",i=!0))}let f=t.match(Dme);if(f){if(n.scheme=f[1],n.userinfo=f[3],n.host=f[4],n.port=parseInt(f[5],10),n.path=f[6]||"",n.query=f[7],n.fragment=f[8],n.scheme!==void 0){let b=unescape(n.scheme);E4.test(b)?n.scheme=b.toLowerCase():(n.error=n.error||S4,l=!0)}s=qme(f),s&&(n.error=n.error||"URI contains malformed percent-encoding."),isNaN(n.port)&&(n.port=f[5]);let m=Lme(n,f);if(m!==void 0&&(n.error=n.error||m,i=!0),n.host)if(b4(n.host)===!1){let v=x_(n.host),E=n.host.indexOf("[")!==-1||n.host.indexOf("]")!==-1,S=y4(n.host);u=S.isIPV6||S.isIPVFuture===!0,c=E&&(!v||S.error===!0),n.host=u?S.host:S.host.toLowerCase(),c&&(n.error=n.error||"URI host is malformed.",i=!0)}else u=!0;n.scheme===void 0&&n.userinfo===void 0&&n.host===void 0&&n.port===void 0&&n.query===void 0&&!n.path?n.reference="same-document":n.scheme===void 0?n.reference="relative":n.fragment===void 0?n.reference="absolute":n.reference="uri",r.reference&&r.reference!=="suffix"&&r.reference!==n.reference&&(n.error=n.error||"URI is not a "+r.reference+" reference.");let y=S_(r.scheme||n.scheme);if(c||(a=w4(n,r,y,u)),!y||y&&!y.skipNormalize){if(t.indexOf("%")!==-1&&n.host!==void 0&&!c){let b=u?n.host:g4(n.host,!0);n.host=Ome(b,u)}n.path&&(n.path=kme(n.path)),n.query&&(n.query=f4(n.query)),n.fragment&&(n.fragment=f4(n.fragment))}y&&y.parse&&(y.parse(n,r),y===v4.urn&&n.nid===void 0&&(o=!0))}else n.error=n.error||"URI can not be parsed.";return{parsed:n,malformedAuthorityOrPort:i,malformedPercentEncoding:s,malformedSchemeSpecific:o,malformedHost:a,malformedScheme:l}}function th(t,e){return eh(t,e).parsed}function Fme(t,e){return _4(t,e).normalized}function _4(t,e){let{parsed:r,malformedAuthorityOrPort:n,malformedPercentEncoding:i,malformedSchemeSpecific:s,malformedHost:o,malformedScheme:a}=eh(t,e);return{normalized:n||i||s||o||a?t:No(r,e),malformedAuthorityOrPort:n,malformedPercentEncoding:i,malformedSchemeSpecific:s,malformedHost:o,malformedScheme:a}}function h4(t,e){if(typeof t!="string"&&typeof t!="object")return;let r;try{r=typeof t=="string"?t:No(t,e)}catch{return}let{normalized:n,malformedAuthorityOrPort:i,malformedPercentEncoding:s,malformedSchemeSpecific:o,malformedHost:a,malformedScheme:c}=_4(r,e);return i||s||o||a||c?void 0:n}var w_={SCHEMES:v4,normalize:jme,resolve:Pme,resolveComponent:x4,equal:Kme,serialize:No,parse:th};rh.exports=w_;rh.exports.default=w_;rh.exports.fastUri=w_});var k4=h(__=>{"use strict";Object.defineProperty(__,"__esModule",{value:!0});var T4=I4();T4.code='require("ajv/dist/runtime/uri").default';__.default=T4});var D4=h(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.CodeGen=Ut.Name=Ut.nil=Ut.stringify=Ut.str=Ut._=Ut.KeywordCxt=void 0;var $me=Gu();Object.defineProperty(Ut,"KeywordCxt",{enumerable:!0,get:function(){return $me.KeywordCxt}});var kc=ue();Object.defineProperty(Ut,"_",{enumerable:!0,get:function(){return kc._}});Object.defineProperty(Ut,"str",{enumerable:!0,get:function(){return kc.str}});Object.defineProperty(Ut,"stringify",{enumerable:!0,get:function(){return kc.stringify}});Object.defineProperty(Ut,"nil",{enumerable:!0,get:function(){return kc.nil}});Object.defineProperty(Ut,"Name",{enumerable:!0,get:function(){return kc.Name}});Object.defineProperty(Ut,"CodeGen",{enumerable:!0,get:function(){return kc.CodeGen}});var Ume=Wm(),j4=Bu(),Jme=Hw(),Wu=Qm(),zme=ue(),Yu=Uu(),nh=$u(),T_=we(),A4=Z2(),Gme=k4(),P4=(t,e)=>new RegExp(t,e);P4.code="new RegExp";var Bme=["removeAdditional","useDefaults","coerceTypes"],Hme=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),Vme={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},Wme={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},R4=200;function Yme(t){var e,r,n,i,s,o,a,c,l,u,d,p,f,m,y,b,v,E,S,k,_,O,N,ee,q;let U=t.strict,te=(e=t.code)===null||e===void 0?void 0:e.optimize,Ge=te===!0||te===void 0?1:te||0,T=(n=(r=t.code)===null||r===void 0?void 0:r.regExp)!==null&&n!==void 0?n:P4,K=(i=t.uriResolver)!==null&&i!==void 0?i:Gme.default;return{strictSchema:(o=(s=t.strictSchema)!==null&&s!==void 0?s:U)!==null&&o!==void 0?o:!0,strictNumbers:(c=(a=t.strictNumbers)!==null&&a!==void 0?a:U)!==null&&c!==void 0?c:!0,strictTypes:(u=(l=t.strictTypes)!==null&&l!==void 0?l:U)!==null&&u!==void 0?u:"log",strictTuples:(p=(d=t.strictTuples)!==null&&d!==void 0?d:U)!==null&&p!==void 0?p:"log",strictRequired:(m=(f=t.strictRequired)!==null&&f!==void 0?f:U)!==null&&m!==void 0?m:!1,code:t.code?{...t.code,optimize:Ge,regExp:T}:{optimize:Ge,regExp:T},loopRequired:(y=t.loopRequired)!==null&&y!==void 0?y:R4,loopEnum:(b=t.loopEnum)!==null&&b!==void 0?b:R4,meta:(v=t.meta)!==null&&v!==void 0?v:!0,messages:(E=t.messages)!==null&&E!==void 0?E:!0,inlineRefs:(S=t.inlineRefs)!==null&&S!==void 0?S:!0,schemaId:(k=t.schemaId)!==null&&k!==void 0?k:"$id",addUsedSchema:(_=t.addUsedSchema)!==null&&_!==void 0?_:!0,validateSchema:(O=t.validateSchema)!==null&&O!==void 0?O:!0,validateFormats:(N=t.validateFormats)!==null&&N!==void 0?N:!0,unicodeRegExp:(ee=t.unicodeRegExp)!==null&&ee!==void 0?ee:!0,int32range:(q=t.int32range)!==null&&q!==void 0?q:!0,uriResolver:K}}var Qu=class{constructor(e={}){this.schemas={},this.refs={},this.formats=Object.create(null),this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...Yme(e)};let{es5:r,lines:n}=this.opts.code;this.scope=new zme.ValueScope({scope:{},prefixes:Hme,es5:r,lines:n}),this.logger=rhe(e.logger);let i=e.validateFormats;e.validateFormats=!1,this.RULES=(0,Jme.getRules)(),O4.call(this,Vme,e,"NOT SUPPORTED"),O4.call(this,Wme,e,"DEPRECATED","warn"),this._metaOpts=ehe.call(this),e.formats&&Xme.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&Zme.call(this,e.keywords),typeof e.meta=="object"&&this.addMetaSchema(e.meta),Qme.call(this),e.validateFormats=i}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:r,schemaId:n}=this.opts,i=A4;n==="id"&&(i={...A4},i.id=i.$id,delete i.$id),r&&e&&this.addMetaSchema(i,i[n],!1)}defaultMeta(){let{meta:e,schemaId:r}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[r]||e:void 0}validate(e,r){let n;if(typeof e=="string"){if(n=this.getSchema(e),!n)throw new Error(`no schema with key or ref "${e}"`)}else n=this.compile(e);let i=n(r);return"$async"in n||(this.errors=n.errors),i}compile(e,r){let n=this._addSchema(e,r);return n.validate||this._compileSchemaEnv(n)}compileAsync(e,r){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");let{loadSchema:n}=this.opts;return i.call(this,e,r);async function i(u,d){await s.call(this,u.$schema);let p=this._addSchema(u,d);return p.validate||o.call(this,p)}async function s(u){u&&!this.getSchema(u)&&await i.call(this,{$ref:u},!0)}async function o(u){try{return this._compileSchemaEnv(u)}catch(d){if(!(d instanceof j4.default))throw d;return a.call(this,d),await c.call(this,d.missingSchema),o.call(this,u)}}function a({missingSchema:u,missingRef:d}){if(this.refs[u])throw new Error(`AnySchema ${u} is loaded but ${d} cannot be resolved`)}async function c(u){let d=await l.call(this,u);this.refs[u]||await s.call(this,d.$schema),this.refs[u]||this.addSchema(d,u,r)}async function l(u){let d=this._loading[u];if(d)return d;try{return await(this._loading[u]=n(u))}finally{delete this._loading[u]}}}addSchema(e,r,n,i=this.opts.validateSchema){if(Array.isArray(e)){for(let o of e)this.addSchema(o,void 0,n,i);return this}let s;if(typeof e=="object"){let{schemaId:o}=this.opts;if(s=e[o],s!==void 0&&typeof s!="string")throw new Error(`schema ${o} must be string`)}return r=(0,Yu.normalizeId)(r||s),this._checkUnique(r),this.schemas[r]=this._addSchema(e,n,r,i,!0),this}addMetaSchema(e,r,n=this.opts.validateSchema){return this.addSchema(e,r,!0,n),this}validateSchema(e,r){if(typeof e=="boolean")return!0;let n;if(n=e.$schema,n!==void 0&&typeof n!="string")throw new Error("$schema must be a string");if(n=n||this.opts.defaultMeta||this.defaultMeta(),!n)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let i=this.validate(n,e);if(!i&&r){let s="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(s);else throw new Error(s)}return i}getSchema(e){let r;for(;typeof(r=C4.call(this,e))=="string";)e=r;if(r===void 0){let{schemaId:n}=this.opts,i=new Wu.SchemaEnv({schema:{},schemaId:n});if(r=Wu.resolveSchema.call(this,i,e),!r)return;this.refs[e]=r}return r.validate||this._compileSchemaEnv(r)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let r=C4.call(this,e);return typeof r=="object"&&this._cache.delete(r.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{let r=e;this._cache.delete(r);let n=e[this.opts.schemaId];return n&&(n=(0,Yu.normalizeId)(n),delete this.schemas[n],delete this.refs[n]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let r of e)this.addKeyword(r);return this}addKeyword(e,r){let n;if(typeof e=="string")n=e,typeof r=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),r.keyword=n);else if(typeof e=="object"&&r===void 0){if(r=e,n=r.keyword,Array.isArray(n)&&!n.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(ihe.call(this,n,r),!r)return(0,T_.eachItem)(n,s=>I_.call(this,s)),this;ohe.call(this,r);let i={...r,type:(0,nh.getJSONTypes)(r.type),schemaType:(0,nh.getJSONTypes)(r.schemaType)};return(0,T_.eachItem)(n,i.type.length===0?s=>I_.call(this,s,i):s=>i.type.forEach(o=>I_.call(this,s,i,o))),this}getKeyword(e){let r=this.RULES.all[e];return typeof r=="object"?r.definition:!!r}removeKeyword(e){let{RULES:r}=this;delete r.keywords[e],delete r.all[e];for(let n of r.rules){let i=n.rules.findIndex(s=>s.keyword===e);i>=0&&n.rules.splice(i,1)}return this}addFormat(e,r){return typeof r=="string"&&(r=new RegExp(r)),this.formats[e]=r,this}errorsText(e=this.errors,{separator:r=", ",dataVar:n="data"}={}){return!e||e.length===0?"No errors":e.map(i=>`${n}${i.instancePath} ${i.message}`).reduce((i,s)=>i+r+s)}$dataMetaSchema(e,r){let n=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let i of r){let s=i.split("/").slice(1),o=e;for(let a of s)o=o[a];for(let a in n){let c=n[a];if(typeof c!="object")continue;let{$data:l}=c.definition,u=o[a];l&&u&&(o[a]=K4(u))}}return e}_removeAllSchemas(e,r){for(let n in e){let i=e[n];(!r||r.test(n))&&(typeof i=="string"?delete e[n]:i&&!i.meta&&(this._cache.delete(i.schema),delete e[n]))}}_addSchema(e,r,n,i=this.opts.validateSchema,s=this.opts.addUsedSchema){let o,{schemaId:a}=this.opts;if(typeof e=="object")o=e[a];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof e!="boolean")throw new Error("schema must be object or boolean")}let c=this._cache.get(e);if(c!==void 0)return c;n=(0,Yu.normalizeId)(o||n);let l=Yu.getSchemaRefs.call(this,e,n);return c=new Wu.SchemaEnv({schema:e,schemaId:a,meta:r,baseId:n,localRefs:l}),this._cache.set(c.schema,c),s&&!n.startsWith("#")&&(n&&this._checkUnique(n),this.refs[n]=c),i&&this.validateSchema(e,!0),c}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):Wu.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let r=this.opts;this.opts=this._metaOpts;try{Wu.compileSchema.call(this,e)}finally{this.opts=r}}};Qu.ValidationError=Ume.default;Qu.MissingRefError=j4.default;Ut.default=Qu;function O4(t,e,r,n="error"){for(let i in t){let s=i;s in e&&this.logger[n](`${r}: option ${i}. ${t[s]}`)}}function C4(t){return t=(0,Yu.normalizeId)(t),this.schemas[t]||this.refs[t]}function Qme(){let t=this.opts.schemas;if(t)if(Array.isArray(t))this.addSchema(t);else for(let e in t)this.addSchema(t[e],e)}function Xme(){for(let t in this.opts.formats){let e=this.opts.formats[t];e&&this.addFormat(t,e)}}function Zme(t){if(Array.isArray(t)){this.addVocabulary(t);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let e in t){let r=t[e];r.keyword||(r.keyword=e),this.addKeyword(r)}}function ehe(){let t={...this.opts};for(let e of Bme)delete t[e];return t}var the={log(){},warn(){},error(){}};function rhe(t){if(t===!1)return the;if(t===void 0)return console;if(t.log&&t.warn&&t.error)return t;throw new Error("logger must implement log, warn and error methods")}var nhe=/^[a-z_$][a-z0-9_$:-]*$/i;function ihe(t,e){let{RULES:r}=this;if((0,T_.eachItem)(t,n=>{if(r.keywords[n])throw new Error(`Keyword ${n} is already defined`);if(!nhe.test(n))throw new Error(`Keyword ${n} has invalid name`)}),!!e&&e.$data&&!("code"in e||"validate"in e))throw new Error('$data keyword must have "code" or "validate" function')}function I_(t,e,r){var n;let i=e?.post;if(r&&i)throw new Error('keyword with "post" flag cannot have "type"');let{RULES:s}=this,o=i?s.post:s.rules.find(({type:c})=>c===r);if(o||(o={type:r,rules:[]},s.rules.push(o)),s.keywords[t]=!0,!e)return;let a={keyword:t,definition:{...e,type:(0,nh.getJSONTypes)(e.type),schemaType:(0,nh.getJSONTypes)(e.schemaType)}};e.before?she.call(this,o,a,e.before):o.rules.push(a),s.all[t]=a,(n=e.implements)===null||n===void 0||n.forEach(c=>this.addKeyword(c))}function she(t,e,r){let n=t.rules.findIndex(i=>i.keyword===r);n>=0?t.rules.splice(n,0,e):(t.rules.push(e),this.logger.warn(`rule ${r} is not defined`))}function ohe(t){let{metaSchema:e}=t;e!==void 0&&(t.$data&&this.opts.$data&&(e=K4(e)),t.validateSchema=this.compile(e,!0))}var ahe={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function K4(t){return{anyOf:[t,ahe]}}});var M4=h(k_=>{"use strict";Object.defineProperty(k_,"__esModule",{value:!0});var che={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};k_.default=che});var F4=h(Lo=>{"use strict";Object.defineProperty(Lo,"__esModule",{value:!0});Lo.callRef=Lo.getValidate=void 0;var lhe=Bu(),N4=on(),wr=ue(),Ac=Fi(),L4=Qm(),ih=we(),uhe={keyword:"$ref",schemaType:"string",code(t){let{gen:e,schema:r,it:n}=t,{baseId:i,schemaEnv:s,validateName:o,opts:a,self:c}=n,{root:l}=s;if((r==="#"||r==="#/")&&i===l.baseId)return d();let u=L4.resolveRef.call(c,l,i,r);if(u===void 0)throw new lhe.default(n.opts.uriResolver,i,r);if(u instanceof L4.SchemaEnv)return p(u);return f(u);function d(){if(s===l)return sh(t,o,s,s.$async);let m=e.scopeValue("root",{ref:l});return sh(t,(0,wr._)`${m}.validate`,l,l.$async)}function p(m){let y=q4(t,m);sh(t,y,m,m.$async)}function f(m){let y=e.scopeValue("schema",a.code.source===!0?{ref:m,code:(0,wr.stringify)(m)}:{ref:m}),b=e.name("valid"),v=t.subschema({schema:m,dataTypes:[],schemaPath:wr.nil,topSchemaRef:y,errSchemaPath:r},b);t.mergeEvaluated(v),t.ok(b)}}};function q4(t,e){let{gen:r}=t;return e.validate?r.scopeValue("validate",{ref:e.validate}):(0,wr._)`${r.scopeValue("wrapper",{ref:e})}.validate`}Lo.getValidate=q4;function sh(t,e,r,n){let{gen:i,it:s}=t,{allErrors:o,schemaEnv:a,opts:c}=s,l=c.passContext?Ac.default.this:wr.nil;n?u():d();function u(){if(!a.$async)throw new Error("async schema referenced by sync schema");let m=i.let("valid");i.try(()=>{i.code((0,wr._)`await ${(0,N4.callValidateCode)(t,e,l)}`),f(e),o||i.assign(m,!0)},y=>{i.if((0,wr._)`!(${y} instanceof ${s.ValidationError})`,()=>i.throw(y)),p(y),o||i.assign(m,!1)}),t.ok(m)}function d(){t.result((0,N4.callValidateCode)(t,e,l),()=>f(e),()=>p(e))}function p(m){let y=(0,wr._)`${m}.errors`;i.assign(Ac.default.vErrors,(0,wr._)`${Ac.default.vErrors} === null ? ${y} : ${Ac.default.vErrors}.concat(${y})`),i.assign(Ac.default.errors,(0,wr._)`${Ac.default.vErrors}.length`)}function f(m){var y;if(!s.opts.unevaluated)return;let b=(y=r?.validate)===null||y===void 0?void 0:y.evaluated;if(s.props!==!0)if(b&&!b.dynamicProps)b.props!==void 0&&(s.props=ih.mergeEvaluated.props(i,b.props,s.props));else{let v=i.var("props",(0,wr._)`${m}.evaluated.props`);s.props=ih.mergeEvaluated.props(i,v,s.props,wr.Name)}if(s.items!==!0)if(b&&!b.dynamicItems)b.items!==void 0&&(s.items=ih.mergeEvaluated.items(i,b.items,s.items));else{let v=i.var("items",(0,wr._)`${m}.evaluated.items`);s.items=ih.mergeEvaluated.items(i,v,s.items,wr.Name)}}}Lo.callRef=sh;Lo.default=uhe});var $4=h(A_=>{"use strict";Object.defineProperty(A_,"__esModule",{value:!0});var dhe=M4(),phe=F4(),fhe=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",dhe.default,phe.default];A_.default=fhe});var U4=h(R_=>{"use strict";Object.defineProperty(R_,"__esModule",{value:!0});var oh=ue(),Rs=oh.operators,ah={maximum:{okStr:"<=",ok:Rs.LTE,fail:Rs.GT},minimum:{okStr:">=",ok:Rs.GTE,fail:Rs.LT},exclusiveMaximum:{okStr:"<",ok:Rs.LT,fail:Rs.GTE},exclusiveMinimum:{okStr:">",ok:Rs.GT,fail:Rs.LTE}},mhe={message:({keyword:t,schemaCode:e})=>(0,oh.str)`must be ${ah[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,oh._)`{comparison: ${ah[t].okStr}, limit: ${e}}`},hhe={keyword:Object.keys(ah),type:"number",schemaType:"number",$data:!0,error:mhe,code(t){let{keyword:e,data:r,schemaCode:n}=t;t.fail$data((0,oh._)`${r} ${ah[e].fail} ${n} || isNaN(${r})`)}};R_.default=hhe});var J4=h(O_=>{"use strict";Object.defineProperty(O_,"__esModule",{value:!0});var Xu=ue(),yhe={message:({schemaCode:t})=>(0,Xu.str)`must be multiple of ${t}`,params:({schemaCode:t})=>(0,Xu._)`{multipleOf: ${t}}`},ghe={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:yhe,code(t){let{gen:e,data:r,schemaCode:n,it:i}=t,s=i.opts.multipleOfPrecision,o=e.let("res"),a=s?(0,Xu._)`Math.abs(Math.round(${o}) - ${o}) > 1e-${s}`:(0,Xu._)`${o} !== parseInt(${o})`;t.fail$data((0,Xu._)`(${n} === 0 || (${o} = ${r}/${n}, ${a}))`)}};O_.default=ghe});var G4=h(C_=>{"use strict";Object.defineProperty(C_,"__esModule",{value:!0});function z4(t){let e=t.length,r=0,n=0,i;for(;n<e;)r++,i=t.charCodeAt(n++),i>=55296&&i<=56319&&n<e&&(i=t.charCodeAt(n),(i&64512)===56320&&n++);return r}C_.default=z4;z4.code='require("ajv/dist/runtime/ucs2length").default'});var B4=h(j_=>{"use strict";Object.defineProperty(j_,"__esModule",{value:!0});var qo=ue(),bhe=we(),vhe=G4(),Ehe={message({keyword:t,schemaCode:e}){let r=t==="maxLength"?"more":"fewer";return(0,qo.str)`must NOT have ${r} than ${e} characters`},params:({schemaCode:t})=>(0,qo._)`{limit: ${t}}`},She={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:Ehe,code(t){let{keyword:e,data:r,schemaCode:n,it:i}=t,s=e==="maxLength"?qo.operators.GT:qo.operators.LT,o=i.opts.unicode===!1?(0,qo._)`${r}.length`:(0,qo._)`${(0,bhe.useFunc)(t.gen,vhe.default)}(${r})`;t.fail$data((0,qo._)`${o} ${s} ${n}`)}};j_.default=She});var H4=h(P_=>{"use strict";Object.defineProperty(P_,"__esModule",{value:!0});var xhe=on(),whe=we(),Rc=ue(),_he={message:({schemaCode:t})=>(0,Rc.str)`must match pattern "${t}"`,params:({schemaCode:t})=>(0,Rc._)`{pattern: ${t}}`},Ihe={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:_he,code(t){let{gen:e,data:r,$data:n,schema:i,schemaCode:s,it:o}=t,a=o.opts.unicodeRegExp?"u":"";if(n){let{regExp:c}=o.opts.code,l=c.code==="new RegExp"?(0,Rc._)`new RegExp`:(0,whe.useFunc)(e,c),u=e.let("valid");e.try(()=>e.assign(u,(0,Rc._)`${l}(${s}, ${a}).test(${r})`),()=>e.assign(u,!1)),t.fail$data((0,Rc._)`!${u}`)}else{let c=(0,xhe.usePattern)(t,i);t.fail$data((0,Rc._)`!${c}.test(${r})`)}}};P_.default=Ihe});var V4=h(K_=>{"use strict";Object.defineProperty(K_,"__esModule",{value:!0});var Zu=ue(),The={message({keyword:t,schemaCode:e}){let r=t==="maxProperties"?"more":"fewer";return(0,Zu.str)`must NOT have ${r} than ${e} properties`},params:({schemaCode:t})=>(0,Zu._)`{limit: ${t}}`},khe={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:The,code(t){let{keyword:e,data:r,schemaCode:n}=t,i=e==="maxProperties"?Zu.operators.GT:Zu.operators.LT;t.fail$data((0,Zu._)`Object.keys(${r}).length ${i} ${n}`)}};K_.default=khe});var W4=h(D_=>{"use strict";Object.defineProperty(D_,"__esModule",{value:!0});var ed=on(),td=ue(),Ahe=we(),Rhe={message:({params:{missingProperty:t}})=>(0,td.str)`must have required property '${t}'`,params:({params:{missingProperty:t}})=>(0,td._)`{missingProperty: ${t}}`},Ohe={keyword:"required",type:"object",schemaType:"array",$data:!0,error:Rhe,code(t){let{gen:e,schema:r,schemaCode:n,data:i,$data:s,it:o}=t,{opts:a}=o;if(!s&&r.length===0)return;let c=r.length>=a.loopRequired;if(o.allErrors?l():u(),a.strictRequired){let f=t.parentSchema.properties,{definedProperties:m}=t.it;for(let y of r)if(f?.[y]===void 0&&!m.has(y)){let b=o.schemaEnv.baseId+o.errSchemaPath,v=`required property "${y}" is not defined at "${b}" (strictRequired)`;(0,Ahe.checkStrictMode)(o,v,o.opts.strictRequired)}}function l(){if(c||s)t.block$data(td.nil,d);else for(let f of r)(0,ed.checkReportMissingProp)(t,f)}function u(){let f=e.let("missing");if(c||s){let m=e.let("valid",!0);t.block$data(m,()=>p(f,m)),t.ok(m)}else e.if((0,ed.checkMissingProp)(t,r,f)),(0,ed.reportMissingProp)(t,f),e.else()}function d(){e.forOf("prop",n,f=>{t.setParams({missingProperty:f}),e.if((0,ed.noPropertyInData)(e,i,f,a.ownProperties),()=>t.error())})}function p(f,m){t.setParams({missingProperty:f}),e.forOf(f,n,()=>{e.assign(m,(0,ed.propertyInData)(e,i,f,a.ownProperties)),e.if((0,td.not)(m),()=>{t.error(),e.break()})},td.nil)}}};D_.default=Ohe});var Y4=h(M_=>{"use strict";Object.defineProperty(M_,"__esModule",{value:!0});var rd=ue(),Che={message({keyword:t,schemaCode:e}){let r=t==="maxItems"?"more":"fewer";return(0,rd.str)`must NOT have ${r} than ${e} items`},params:({schemaCode:t})=>(0,rd._)`{limit: ${t}}`},jhe={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:Che,code(t){let{keyword:e,data:r,schemaCode:n}=t,i=e==="maxItems"?rd.operators.GT:rd.operators.LT;t.fail$data((0,rd._)`${r}.length ${i} ${n}`)}};M_.default=jhe});var ch=h(N_=>{"use strict";Object.defineProperty(N_,"__esModule",{value:!0});var Q4=t_();Q4.code='require("ajv/dist/runtime/equal").default';N_.default=Q4});var X4=h(q_=>{"use strict";Object.defineProperty(q_,"__esModule",{value:!0});var L_=$u(),Jt=ue(),Phe=we(),Khe=ch(),Dhe={message:({params:{i:t,j:e}})=>(0,Jt.str)`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>(0,Jt._)`{i: ${t}, j: ${e}}`},Mhe={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:Dhe,code(t){let{gen:e,data:r,$data:n,schema:i,parentSchema:s,schemaCode:o,it:a}=t;if(!n&&!i)return;let c=e.let("valid"),l=s.items?(0,L_.getSchemaTypes)(s.items):[];t.block$data(c,u,(0,Jt._)`${o} === false`),t.ok(c);function u(){let m=e.let("i",(0,Jt._)`${r}.length`),y=e.let("j");t.setParams({i:m,j:y}),e.assign(c,!0),e.if((0,Jt._)`${m} > 1`,()=>(d()?p:f)(m,y))}function d(){return l.length>0&&!l.some(m=>m==="object"||m==="array")}function p(m,y){let b=e.name("item"),v=(0,L_.checkDataTypes)(l,b,a.opts.strictNumbers,L_.DataType.Wrong),E=e.const("indices",(0,Jt._)`{}`);e.for((0,Jt._)`;${m}--;`,()=>{e.let(b,(0,Jt._)`${r}[${m}]`),e.if(v,(0,Jt._)`continue`),l.length>1&&e.if((0,Jt._)`typeof ${b} == "string"`,(0,Jt._)`${b} += "_"`),e.if((0,Jt._)`typeof ${E}[${b}] == "number"`,()=>{e.assign(y,(0,Jt._)`${E}[${b}]`),t.error(),e.assign(c,!1).break()}).code((0,Jt._)`${E}[${b}] = ${m}`)})}function f(m,y){let b=(0,Phe.useFunc)(e,Khe.default),v=e.name("outer");e.label(v).for((0,Jt._)`;${m}--;`,()=>e.for((0,Jt._)`${y} = ${m}; ${y}--;`,()=>e.if((0,Jt._)`${b}(${r}[${m}], ${r}[${y}])`,()=>{t.error(),e.assign(c,!1).break(v)})))}}};q_.default=Mhe});var Z4=h($_=>{"use strict";Object.defineProperty($_,"__esModule",{value:!0});var F_=ue(),Nhe=we(),Lhe=ch(),qhe={message:"must be equal to constant",params:({schemaCode:t})=>(0,F_._)`{allowedValue: ${t}}`},Fhe={keyword:"const",$data:!0,error:qhe,code(t){let{gen:e,data:r,$data:n,schemaCode:i,schema:s}=t;n||s&&typeof s=="object"?t.fail$data((0,F_._)`!${(0,Nhe.useFunc)(e,Lhe.default)}(${r}, ${i})`):t.fail((0,F_._)`${s} !== ${r}`)}};$_.default=Fhe});var eF=h(U_=>{"use strict";Object.defineProperty(U_,"__esModule",{value:!0});var nd=ue(),$he=we(),Uhe=ch(),Jhe={message:"must be equal to one of the allowed values",params:({schemaCode:t})=>(0,nd._)`{allowedValues: ${t}}`},zhe={keyword:"enum",schemaType:"array",$data:!0,error:Jhe,code(t){let{gen:e,data:r,$data:n,schema:i,schemaCode:s,it:o}=t;if(!n&&i.length===0)throw new Error("enum must have non-empty array");let a=i.length>=o.opts.loopEnum,c,l=()=>c??(c=(0,$he.useFunc)(e,Uhe.default)),u;if(a||n)u=e.let("valid"),t.block$data(u,d);else{if(!Array.isArray(i))throw new Error("ajv implementation error");let f=e.const("vSchema",s);u=(0,nd.or)(...i.map((m,y)=>p(f,y)))}t.pass(u);function d(){e.assign(u,!1),e.forOf("v",s,f=>e.if((0,nd._)`${l()}(${r}, ${f})`,()=>e.assign(u,!0).break()))}function p(f,m){let y=i[m];return typeof y=="object"&&y!==null?(0,nd._)`${l()}(${r}, ${f}[${m}])`:(0,nd._)`${r} === ${y}`}}};U_.default=zhe});var tF=h(J_=>{"use strict";Object.defineProperty(J_,"__esModule",{value:!0});var Ghe=U4(),Bhe=J4(),Hhe=B4(),Vhe=H4(),Whe=V4(),Yhe=W4(),Qhe=Y4(),Xhe=X4(),Zhe=Z4(),eye=eF(),tye=[Ghe.default,Bhe.default,Hhe.default,Vhe.default,Whe.default,Yhe.default,Qhe.default,Xhe.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},Zhe.default,eye.default];J_.default=tye});var G_=h(id=>{"use strict";Object.defineProperty(id,"__esModule",{value:!0});id.validateAdditionalItems=void 0;var Fo=ue(),z_=we(),rye={message:({params:{len:t}})=>(0,Fo.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,Fo._)`{limit: ${t}}`},nye={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:rye,code(t){let{parentSchema:e,it:r}=t,{items:n}=e;if(!Array.isArray(n)){(0,z_.checkStrictMode)(r,'"additionalItems" is ignored when "items" is not an array of schemas');return}rF(t,n)}};function rF(t,e){let{gen:r,schema:n,data:i,keyword:s,it:o}=t;o.items=!0;let a=r.const("len",(0,Fo._)`${i}.length`);if(n===!1)t.setParams({len:e.length}),t.pass((0,Fo._)`${a} <= ${e.length}`);else if(typeof n=="object"&&!(0,z_.alwaysValidSchema)(o,n)){let l=r.var("valid",(0,Fo._)`${a} <= ${e.length}`);r.if((0,Fo.not)(l),()=>c(l)),t.ok(l)}function c(l){r.forRange("i",e.length,a,u=>{t.subschema({keyword:s,dataProp:u,dataPropType:z_.Type.Num},l),o.allErrors||r.if((0,Fo.not)(l),()=>r.break())})}}id.validateAdditionalItems=rF;id.default=nye});var B_=h(sd=>{"use strict";Object.defineProperty(sd,"__esModule",{value:!0});sd.validateTuple=void 0;var nF=ue(),lh=we(),iye=on(),sye={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){let{schema:e,it:r}=t;if(Array.isArray(e))return iF(t,"additionalItems",e);r.items=!0,!(0,lh.alwaysValidSchema)(r,e)&&t.ok((0,iye.validateArray)(t))}};function iF(t,e,r=t.schema){let{gen:n,parentSchema:i,data:s,keyword:o,it:a}=t;u(i),a.opts.unevaluated&&r.length&&a.items!==!0&&(a.items=lh.mergeEvaluated.items(n,r.length,a.items));let c=n.name("valid"),l=n.const("len",(0,nF._)`${s}.length`);r.forEach((d,p)=>{(0,lh.alwaysValidSchema)(a,d)||(n.if((0,nF._)`${l} > ${p}`,()=>t.subschema({keyword:o,schemaProp:p,dataProp:p},c)),t.ok(c))});function u(d){let{opts:p,errSchemaPath:f}=a,m=r.length,y=m===d.minItems&&(m===d.maxItems||d[e]===!1);if(p.strictTuples&&!y){let b=`"${o}" is ${m}-tuple, but minItems or maxItems/${e} are not specified or different at path "${f}"`;(0,lh.checkStrictMode)(a,b,p.strictTuples)}}}sd.validateTuple=iF;sd.default=sye});var sF=h(H_=>{"use strict";Object.defineProperty(H_,"__esModule",{value:!0});var oye=B_(),aye={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,oye.validateTuple)(t,"items")};H_.default=aye});var aF=h(V_=>{"use strict";Object.defineProperty(V_,"__esModule",{value:!0});var oF=ue(),cye=we(),lye=on(),uye=G_(),dye={message:({params:{len:t}})=>(0,oF.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,oF._)`{limit: ${t}}`},pye={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:dye,code(t){let{schema:e,parentSchema:r,it:n}=t,{prefixItems:i}=r;n.items=!0,!(0,cye.alwaysValidSchema)(n,e)&&(i?(0,uye.validateAdditionalItems)(t,i):t.ok((0,lye.validateArray)(t)))}};V_.default=pye});var cF=h(W_=>{"use strict";Object.defineProperty(W_,"__esModule",{value:!0});var cn=ue(),uh=we(),fye={message:({params:{min:t,max:e}})=>e===void 0?(0,cn.str)`must contain at least ${t} valid item(s)`:(0,cn.str)`must contain at least ${t} and no more than ${e} valid item(s)`,params:({params:{min:t,max:e}})=>e===void 0?(0,cn._)`{minContains: ${t}}`:(0,cn._)`{minContains: ${t}, maxContains: ${e}}`},mye={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:fye,code(t){let{gen:e,schema:r,parentSchema:n,data:i,it:s}=t,o,a,{minContains:c,maxContains:l}=n;s.opts.next?(o=c===void 0?1:c,a=l):o=1;let u=e.const("len",(0,cn._)`${i}.length`);if(t.setParams({min:o,max:a}),a===void 0&&o===0){(0,uh.checkStrictMode)(s,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&o>a){(0,uh.checkStrictMode)(s,'"minContains" > "maxContains" is always invalid'),t.fail();return}if((0,uh.alwaysValidSchema)(s,r)){let y=(0,cn._)`${u} >= ${o}`;a!==void 0&&(y=(0,cn._)`${y} && ${u} <= ${a}`),t.pass(y);return}s.items=!0;let d=e.name("valid");a===void 0&&o===1?f(d,()=>e.if(d,()=>e.break())):o===0?(e.let(d,!0),a!==void 0&&e.if((0,cn._)`${i}.length > 0`,p)):(e.let(d,!1),p()),t.result(d,()=>t.reset());function p(){let y=e.name("_valid"),b=e.let("count",0);f(y,()=>e.if(y,()=>m(b)))}function f(y,b){e.forRange("i",0,u,v=>{t.subschema({keyword:"contains",dataProp:v,dataPropType:uh.Type.Num,compositeRule:!0},y),b()})}function m(y){e.code((0,cn._)`${y}++`),a===void 0?e.if((0,cn._)`${y} >= ${o}`,()=>e.assign(d,!0).break()):(e.if((0,cn._)`${y} > ${a}`,()=>e.assign(d,!1).break()),o===1?e.assign(d,!0):e.if((0,cn._)`${y} >= ${o}`,()=>e.assign(d,!0)))}}};W_.default=mye});var dF=h(ei=>{"use strict";Object.defineProperty(ei,"__esModule",{value:!0});ei.validateSchemaDeps=ei.validatePropertyDeps=ei.error=void 0;var Y_=ue(),hye=we(),od=on();ei.error={message:({params:{property:t,depsCount:e,deps:r}})=>{let n=e===1?"property":"properties";return(0,Y_.str)`must have ${n} ${r} when property ${t} is present`},params:({params:{property:t,depsCount:e,deps:r,missingProperty:n}})=>(0,Y_._)`{property: ${t},
|
||
missingProperty: ${n},
|
||
depsCount: ${e},
|
||
deps: ${r}}`};var yye={keyword:"dependencies",type:"object",schemaType:"object",error:ei.error,code(t){let[e,r]=gye(t);lF(t,e),uF(t,r)}};function gye({schema:t}){let e={},r={};for(let n in t){if(n==="__proto__")continue;let i=Array.isArray(t[n])?e:r;i[n]=t[n]}return[e,r]}function lF(t,e=t.schema){let{gen:r,data:n,it:i}=t;if(Object.keys(e).length===0)return;let s=r.let("missing");for(let o in e){let a=e[o];if(a.length===0)continue;let c=(0,od.propertyInData)(r,n,o,i.opts.ownProperties);t.setParams({property:o,depsCount:a.length,deps:a.join(", ")}),i.allErrors?r.if(c,()=>{for(let l of a)(0,od.checkReportMissingProp)(t,l)}):(r.if((0,Y_._)`${c} && (${(0,od.checkMissingProp)(t,a,s)})`),(0,od.reportMissingProp)(t,s),r.else())}}ei.validatePropertyDeps=lF;function uF(t,e=t.schema){let{gen:r,data:n,keyword:i,it:s}=t,o=r.name("valid");for(let a in e)(0,hye.alwaysValidSchema)(s,e[a])||(r.if((0,od.propertyInData)(r,n,a,s.opts.ownProperties),()=>{let c=t.subschema({keyword:i,schemaProp:a},o);t.mergeValidEvaluated(c,o)},()=>r.var(o,!0)),t.ok(o))}ei.validateSchemaDeps=uF;ei.default=yye});var fF=h(Q_=>{"use strict";Object.defineProperty(Q_,"__esModule",{value:!0});var pF=ue(),bye=we(),vye={message:"property name must be valid",params:({params:t})=>(0,pF._)`{propertyName: ${t.propertyName}}`},Eye={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:vye,code(t){let{gen:e,schema:r,data:n,it:i}=t;if((0,bye.alwaysValidSchema)(i,r))return;let s=e.name("valid");e.forIn("key",n,o=>{t.setParams({propertyName:o}),t.subschema({keyword:"propertyNames",data:o,dataTypes:["string"],propertyName:o,compositeRule:!0},s),e.if((0,pF.not)(s),()=>{t.error(!0),i.allErrors||e.break()})}),t.ok(s)}};Q_.default=Eye});var Z_=h(X_=>{"use strict";Object.defineProperty(X_,"__esModule",{value:!0});var dh=on(),On=ue(),Sye=Fi(),ph=we(),xye={message:"must NOT have additional properties",params:({params:t})=>(0,On._)`{additionalProperty: ${t.additionalProperty}}`},wye={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:xye,code(t){let{gen:e,schema:r,parentSchema:n,data:i,errsCount:s,it:o}=t;if(!s)throw new Error("ajv implementation error");let{allErrors:a,opts:c}=o;if(o.props=!0,c.removeAdditional!=="all"&&(0,ph.alwaysValidSchema)(o,r))return;let l=(0,dh.allSchemaProperties)(n.properties),u=(0,dh.allSchemaProperties)(n.patternProperties);d(),t.ok((0,On._)`${s} === ${Sye.default.errors}`);function d(){e.forIn("key",i,b=>{!l.length&&!u.length?m(b):e.if(p(b),()=>m(b))})}function p(b){let v;if(l.length>8){let E=(0,ph.schemaRefOrVal)(o,n.properties,"properties");v=(0,dh.isOwnProperty)(e,E,b)}else l.length?v=(0,On.or)(...l.map(E=>(0,On._)`${b} === ${E}`)):v=On.nil;return u.length&&(v=(0,On.or)(v,...u.map(E=>(0,On._)`${(0,dh.usePattern)(t,E)}.test(${b})`))),(0,On.not)(v)}function f(b){e.code((0,On._)`delete ${i}[${b}]`)}function m(b){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){f(b);return}if(r===!1){t.setParams({additionalProperty:b}),t.error(),a||e.break();return}if(typeof r=="object"&&!(0,ph.alwaysValidSchema)(o,r)){let v=e.name("valid");c.removeAdditional==="failing"?(y(b,v,!1),e.if((0,On.not)(v),()=>{t.reset(),f(b)})):(y(b,v),a||e.if((0,On.not)(v),()=>e.break()))}}function y(b,v,E){let S={keyword:"additionalProperties",dataProp:b,dataPropType:ph.Type.Str};E===!1&&Object.assign(S,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(S,v)}}};X_.default=wye});var yF=h(tI=>{"use strict";Object.defineProperty(tI,"__esModule",{value:!0});var _ye=Gu(),mF=on(),eI=we(),hF=Z_(),Iye={keyword:"properties",type:"object",schemaType:"object",code(t){let{gen:e,schema:r,parentSchema:n,data:i,it:s}=t;s.opts.removeAdditional==="all"&&n.additionalProperties===void 0&&hF.default.code(new _ye.KeywordCxt(s,hF.default,"additionalProperties"));let o=(0,mF.allSchemaProperties)(r);for(let d of o)s.definedProperties.add(d);s.opts.unevaluated&&o.length&&s.props!==!0&&(s.props=eI.mergeEvaluated.props(e,(0,eI.toHash)(o),s.props));let a=o.filter(d=>!(0,eI.alwaysValidSchema)(s,r[d]));if(a.length===0)return;let c=e.name("valid");for(let d of a)l(d)?u(d):(e.if((0,mF.propertyInData)(e,i,d,s.opts.ownProperties)),u(d),s.allErrors||e.else().var(c,!0),e.endIf()),t.it.definedProperties.add(d),t.ok(c);function l(d){return s.opts.useDefaults&&!s.compositeRule&&r[d].default!==void 0}function u(d){t.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};tI.default=Iye});var EF=h(rI=>{"use strict";Object.defineProperty(rI,"__esModule",{value:!0});var gF=on(),fh=ue(),bF=we(),vF=we(),Tye={keyword:"patternProperties",type:"object",schemaType:"object",code(t){let{gen:e,schema:r,data:n,parentSchema:i,it:s}=t,{opts:o}=s,a=(0,gF.allSchemaProperties)(r),c=a.filter(y=>(0,bF.alwaysValidSchema)(s,r[y]));if(a.length===0||c.length===a.length&&(!s.opts.unevaluated||s.props===!0))return;let l=o.strictSchema&&!o.allowMatchingProperties&&i.properties,u=e.name("valid");s.props!==!0&&!(s.props instanceof fh.Name)&&(s.props=(0,vF.evaluatedPropsToName)(e,s.props));let{props:d}=s;p();function p(){for(let y of a)l&&f(y),s.allErrors?m(y):(e.var(u,!0),m(y),e.if(u))}function f(y){for(let b in l)new RegExp(y).test(b)&&(0,bF.checkStrictMode)(s,`property ${b} matches pattern ${y} (use allowMatchingProperties)`)}function m(y){e.forIn("key",n,b=>{e.if((0,fh._)`${(0,gF.usePattern)(t,y)}.test(${b})`,()=>{let v=c.includes(y);v||t.subschema({keyword:"patternProperties",schemaProp:y,dataProp:b,dataPropType:vF.Type.Str},u),s.opts.unevaluated&&d!==!0?e.assign((0,fh._)`${d}[${b}]`,!0):!v&&!s.allErrors&&e.if((0,fh.not)(u),()=>e.break())})})}}};rI.default=Tye});var SF=h(nI=>{"use strict";Object.defineProperty(nI,"__esModule",{value:!0});var kye=we(),Aye={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){let{gen:e,schema:r,it:n}=t;if((0,kye.alwaysValidSchema)(n,r)){t.fail();return}let i=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},i),t.failResult(i,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};nI.default=Aye});var xF=h(iI=>{"use strict";Object.defineProperty(iI,"__esModule",{value:!0});var Rye=on(),Oye={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:Rye.validateUnion,error:{message:"must match a schema in anyOf"}};iI.default=Oye});var wF=h(sI=>{"use strict";Object.defineProperty(sI,"__esModule",{value:!0});var mh=ue(),Cye=we(),jye={message:"must match exactly one schema in oneOf",params:({params:t})=>(0,mh._)`{passingSchemas: ${t.passing}}`},Pye={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:jye,code(t){let{gen:e,schema:r,parentSchema:n,it:i}=t;if(!Array.isArray(r))throw new Error("ajv implementation error");if(i.opts.discriminator&&n.discriminator)return;let s=r,o=e.let("valid",!1),a=e.let("passing",null),c=e.name("_valid");t.setParams({passing:a}),e.block(l),t.result(o,()=>t.reset(),()=>t.error(!0));function l(){s.forEach((u,d)=>{let p;(0,Cye.alwaysValidSchema)(i,u)?e.var(c,!0):p=t.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c),d>0&&e.if((0,mh._)`${c} && ${o}`).assign(o,!1).assign(a,(0,mh._)`[${a}, ${d}]`).else(),e.if(c,()=>{e.assign(o,!0),e.assign(a,d),p&&t.mergeEvaluated(p,mh.Name)})})}}};sI.default=Pye});var _F=h(oI=>{"use strict";Object.defineProperty(oI,"__esModule",{value:!0});var Kye=we(),Dye={keyword:"allOf",schemaType:"array",code(t){let{gen:e,schema:r,it:n}=t;if(!Array.isArray(r))throw new Error("ajv implementation error");let i=e.name("valid");r.forEach((s,o)=>{if((0,Kye.alwaysValidSchema)(n,s))return;let a=t.subschema({keyword:"allOf",schemaProp:o},i);t.ok(i),t.mergeEvaluated(a)})}};oI.default=Dye});var kF=h(aI=>{"use strict";Object.defineProperty(aI,"__esModule",{value:!0});var hh=ue(),TF=we(),Mye={message:({params:t})=>(0,hh.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,hh._)`{failingKeyword: ${t.ifClause}}`},Nye={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:Mye,code(t){let{gen:e,parentSchema:r,it:n}=t;r.then===void 0&&r.else===void 0&&(0,TF.checkStrictMode)(n,'"if" without "then" and "else" is ignored');let i=IF(n,"then"),s=IF(n,"else");if(!i&&!s)return;let o=e.let("valid",!0),a=e.name("_valid");if(c(),t.reset(),i&&s){let u=e.let("ifClause");t.setParams({ifClause:u}),e.if(a,l("then",u),l("else",u))}else i?e.if(a,l("then")):e.if((0,hh.not)(a),l("else"));t.pass(o,()=>t.error(!0));function c(){let u=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);t.mergeEvaluated(u)}function l(u,d){return()=>{let p=t.subschema({keyword:u},a);e.assign(o,a),t.mergeValidEvaluated(p,o),d?e.assign(d,(0,hh._)`${u}`):t.setParams({ifClause:u})}}}};function IF(t,e){let r=t.schema[e];return r!==void 0&&!(0,TF.alwaysValidSchema)(t,r)}aI.default=Nye});var AF=h(cI=>{"use strict";Object.defineProperty(cI,"__esModule",{value:!0});var Lye=we(),qye={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:r}){e.if===void 0&&(0,Lye.checkStrictMode)(r,`"${t}" without "if" is ignored`)}};cI.default=qye});var RF=h(lI=>{"use strict";Object.defineProperty(lI,"__esModule",{value:!0});var Fye=G_(),$ye=sF(),Uye=B_(),Jye=aF(),zye=cF(),Gye=dF(),Bye=fF(),Hye=Z_(),Vye=yF(),Wye=EF(),Yye=SF(),Qye=xF(),Xye=wF(),Zye=_F(),ege=kF(),tge=AF();function rge(t=!1){let e=[Yye.default,Qye.default,Xye.default,Zye.default,ege.default,tge.default,Bye.default,Hye.default,Gye.default,Vye.default,Wye.default];return t?e.push($ye.default,Jye.default):e.push(Fye.default,Uye.default),e.push(zye.default),e}lI.default=rge});var OF=h(uI=>{"use strict";Object.defineProperty(uI,"__esModule",{value:!0});var pt=ue(),nge={message:({schemaCode:t})=>(0,pt.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,pt._)`{format: ${t}}`},ige={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:nge,code(t,e){let{gen:r,data:n,$data:i,schema:s,schemaCode:o,it:a}=t,{opts:c,errSchemaPath:l,schemaEnv:u,self:d}=a;if(!c.validateFormats)return;i?p():f();function p(){let m=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),y=r.const("fDef",(0,pt._)`${m}[${o}]`),b=r.let("fType"),v=r.let("format");r.if((0,pt._)`typeof ${y} == "object" && !(${y} instanceof RegExp)`,()=>r.assign(b,(0,pt._)`${y}.type || "string"`).assign(v,(0,pt._)`${y}.validate`),()=>r.assign(b,(0,pt._)`"string"`).assign(v,y)),t.fail$data((0,pt.or)(E(),S()));function E(){return c.strictSchema===!1?pt.nil:(0,pt._)`${o} && !${v}`}function S(){let k=u.$async?(0,pt._)`(${y}.async ? await ${v}(${n}) : ${v}(${n}))`:(0,pt._)`${v}(${n})`,_=(0,pt._)`(typeof ${v} == "function" ? ${k} : ${v}.test(${n}))`;return(0,pt._)`${v} && ${v} !== true && ${b} === ${e} && !${_}`}}function f(){let m=d.formats[s];if(!m){E();return}if(m===!0)return;let[y,b,v]=S(m);y===e&&t.pass(k());function E(){if(c.strictSchema===!1){d.logger.warn(_());return}throw new Error(_());function _(){return`unknown format "${s}" ignored in schema at path "${l}"`}}function S(_){let O=_ instanceof RegExp?(0,pt.regexpCode)(_):c.code.formats?(0,pt._)`${c.code.formats}${(0,pt.getProperty)(s)}`:void 0,N=r.scopeValue("formats",{key:s,ref:_,code:O});return typeof _=="object"&&!(_ instanceof RegExp)?[_.type||"string",_.validate,(0,pt._)`${N}.validate`]:["string",_,N]}function k(){if(typeof m=="object"&&!(m instanceof RegExp)&&m.async){if(!u.$async)throw new Error("async format in sync schema");return(0,pt._)`await ${v}(${n})`}return typeof b=="function"?(0,pt._)`${v}(${n})`:(0,pt._)`${v}.test(${n})`}}}};uI.default=ige});var CF=h(dI=>{"use strict";Object.defineProperty(dI,"__esModule",{value:!0});var sge=OF(),oge=[sge.default];dI.default=oge});var jF=h(Oc=>{"use strict";Object.defineProperty(Oc,"__esModule",{value:!0});Oc.contentVocabulary=Oc.metadataVocabulary=void 0;Oc.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];Oc.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var KF=h(pI=>{"use strict";Object.defineProperty(pI,"__esModule",{value:!0});var age=$4(),cge=tF(),lge=RF(),uge=CF(),PF=jF(),dge=[age.default,cge.default,(0,lge.default)(),uge.default,PF.metadataVocabulary,PF.contentVocabulary];pI.default=dge});var MF=h(yh=>{"use strict";Object.defineProperty(yh,"__esModule",{value:!0});yh.DiscrError=void 0;var DF;(function(t){t.Tag="tag",t.Mapping="mapping"})(DF||(yh.DiscrError=DF={}))});var LF=h(mI=>{"use strict";Object.defineProperty(mI,"__esModule",{value:!0});var Cc=ue(),fI=MF(),NF=Qm(),pge=Bu(),fge=we(),mge={message:({params:{discrError:t,tagName:e}})=>t===fI.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:r}})=>(0,Cc._)`{error: ${t}, tag: ${r}, tagValue: ${e}}`},hge={keyword:"discriminator",type:"object",schemaType:"object",error:mge,code(t){let{gen:e,data:r,schema:n,parentSchema:i,it:s}=t,{oneOf:o}=i;if(!s.opts.discriminator)throw new Error("discriminator: requires discriminator option");let a=n.propertyName;if(typeof a!="string")throw new Error("discriminator: requires propertyName");if(n.mapping)throw new Error("discriminator: mapping is not supported");if(!o)throw new Error("discriminator: requires oneOf keyword");let c=e.let("valid",!1),l=e.const("tag",(0,Cc._)`${r}${(0,Cc.getProperty)(a)}`);e.if((0,Cc._)`typeof ${l} == "string"`,()=>u(),()=>t.error(!1,{discrError:fI.DiscrError.Tag,tag:l,tagName:a})),t.ok(c);function u(){let f=p();e.if(!1);for(let m in f)e.elseIf((0,Cc._)`${l} === ${m}`),e.assign(c,d(f[m]));e.else(),t.error(!1,{discrError:fI.DiscrError.Mapping,tag:l,tagName:a}),e.endIf()}function d(f){let m=e.name("valid"),y=t.subschema({keyword:"oneOf",schemaProp:f},m);return t.mergeEvaluated(y,Cc.Name),m}function p(){var f;let m={},y=v(i),b=!0;for(let k=0;k<o.length;k++){let _=o[k];if(_?.$ref&&!(0,fge.schemaHasRulesButRef)(_,s.self.RULES)){let N=_.$ref;if(_=NF.resolveRef.call(s.self,s.schemaEnv.root,s.baseId,N),_ instanceof NF.SchemaEnv&&(_=_.schema),_===void 0)throw new pge.default(s.opts.uriResolver,s.baseId,N)}let O=(f=_?.properties)===null||f===void 0?void 0:f[a];if(typeof O!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${a}"`);b=b&&(y||v(_)),E(O,k)}if(!b)throw new Error(`discriminator: "${a}" must be required`);return m;function v({required:k}){return Array.isArray(k)&&k.includes(a)}function E(k,_){if(k.const)S(k.const,_);else if(k.enum)for(let O of k.enum)S(O,_);else throw new Error(`discriminator: "properties/${a}" must have "const" or "enum"`)}function S(k,_){if(typeof k!="string"||k in m)throw new Error(`discriminator: "${a}" values must be unique strings`);m[k]=_}}}};mI.default=hge});var qF=h((B2e,yge)=>{yge.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var yI=h((Ve,hI)=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});Ve.MissingRefError=Ve.ValidationError=Ve.CodeGen=Ve.Name=Ve.nil=Ve.stringify=Ve.str=Ve._=Ve.KeywordCxt=Ve.Ajv=void 0;var gge=D4(),bge=KF(),vge=LF(),FF=qF(),Ege=["/properties"],gh="http://json-schema.org/draft-07/schema",jc=class extends gge.default{_addVocabularies(){super._addVocabularies(),bge.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(vge.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(FF,Ege):FF;this.addMetaSchema(e,gh,!1),this.refs["http://json-schema.org/schema"]=gh}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(gh)?gh:void 0)}};Ve.Ajv=jc;hI.exports=Ve=jc;hI.exports.Ajv=jc;Object.defineProperty(Ve,"__esModule",{value:!0});Ve.default=jc;var Sge=Gu();Object.defineProperty(Ve,"KeywordCxt",{enumerable:!0,get:function(){return Sge.KeywordCxt}});var Pc=ue();Object.defineProperty(Ve,"_",{enumerable:!0,get:function(){return Pc._}});Object.defineProperty(Ve,"str",{enumerable:!0,get:function(){return Pc.str}});Object.defineProperty(Ve,"stringify",{enumerable:!0,get:function(){return Pc.stringify}});Object.defineProperty(Ve,"nil",{enumerable:!0,get:function(){return Pc.nil}});Object.defineProperty(Ve,"Name",{enumerable:!0,get:function(){return Pc.Name}});Object.defineProperty(Ve,"CodeGen",{enumerable:!0,get:function(){return Pc.CodeGen}});var xge=Wm();Object.defineProperty(Ve,"ValidationError",{enumerable:!0,get:function(){return xge.default}});var wge=Bu();Object.defineProperty(Ve,"MissingRefError",{enumerable:!0,get:function(){return wge.default}})});var VF=h(ri=>{"use strict";Object.defineProperty(ri,"__esModule",{value:!0});ri.formatNames=ri.fastFormats=ri.fullFormats=void 0;function ti(t,e){return{validate:t,compare:e}}ri.fullFormats={date:ti(zF,EI),time:ti(bI(!0),SI),"date-time":ti($F(!0),BF),"iso-time":ti(bI(),GF),"iso-date-time":ti($F(),HF),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:Rge,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:Mge,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:Oge,int32:{type:"number",validate:Pge},int64:{type:"number",validate:Kge},float:{type:"number",validate:JF},double:{type:"number",validate:JF},password:!0,binary:!0};ri.fastFormats={...ri.fullFormats,date:ti(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,EI),time:ti(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,SI),"date-time":ti(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,BF),"iso-time":ti(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,GF),"iso-date-time":ti(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,HF),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};ri.formatNames=Object.keys(ri.fullFormats);function _ge(t){return t%4===0&&(t%100!==0||t%400===0)}var Ige=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,Tge=[0,31,28,31,30,31,30,31,31,30,31,30,31];function zF(t){let e=Ige.exec(t);if(!e)return!1;let r=+e[1],n=+e[2],i=+e[3];return n>=1&&n<=12&&i>=1&&i<=(n===2&&_ge(r)?29:Tge[n])}function EI(t,e){if(t&&e)return t>e?1:t<e?-1:0}var gI=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function bI(t){return function(r){let n=gI.exec(r);if(!n)return!1;let i=+n[1],s=+n[2],o=+n[3],a=n[4],c=n[5]==="-"?-1:1,l=+(n[6]||0),u=+(n[7]||0);if(l>23||u>59||t&&!a)return!1;if(i<=23&&s<=59&&o<60)return!0;let d=s-u*c,p=i-l*c-(d<0?1:0);return(p===23||p===-1)&&(d===59||d===-1)&&o<61}}function SI(t,e){if(!(t&&e))return;let r=new Date("2020-01-01T"+t).valueOf(),n=new Date("2020-01-01T"+e).valueOf();if(r&&n)return r-n}function GF(t,e){if(!(t&&e))return;let r=gI.exec(t),n=gI.exec(e);if(r&&n)return t=r[1]+r[2]+r[3],e=n[1]+n[2]+n[3],t>e?1:t<e?-1:0}var vI=/t|\s/i;function $F(t){let e=bI(t);return function(n){let i=n.split(vI);return i.length===2&&zF(i[0])&&e(i[1])}}function BF(t,e){if(!(t&&e))return;let r=new Date(t).valueOf(),n=new Date(e).valueOf();if(r&&n)return r-n}function HF(t,e){if(!(t&&e))return;let[r,n]=t.split(vI),[i,s]=e.split(vI),o=EI(r,i);if(o!==void 0)return o||SI(n,s)}var kge=/\/|:/,Age=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function Rge(t){return kge.test(t)&&Age.test(t)}var UF=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function Oge(t){return UF.lastIndex=0,UF.test(t)}var Cge=-(2**31),jge=2**31-1;function Pge(t){return Number.isInteger(t)&&t<=jge&&t>=Cge}function Kge(t){return Number.isInteger(t)}function JF(){return!0}var Dge=/[^\\]\\Z/;function Mge(t){if(Dge.test(t))return!1;try{return new RegExp(t),!0}catch{return!1}}});var WF=h(Kc=>{"use strict";Object.defineProperty(Kc,"__esModule",{value:!0});Kc.formatLimitDefinition=void 0;var Nge=yI(),Cn=ue(),Os=Cn.operators,bh={formatMaximum:{okStr:"<=",ok:Os.LTE,fail:Os.GT},formatMinimum:{okStr:">=",ok:Os.GTE,fail:Os.LT},formatExclusiveMaximum:{okStr:"<",ok:Os.LT,fail:Os.GTE},formatExclusiveMinimum:{okStr:">",ok:Os.GT,fail:Os.LTE}},Lge={message:({keyword:t,schemaCode:e})=>(0,Cn.str)`should be ${bh[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,Cn._)`{comparison: ${bh[t].okStr}, limit: ${e}}`};Kc.formatLimitDefinition={keyword:Object.keys(bh),type:"string",schemaType:"string",$data:!0,error:Lge,code(t){let{gen:e,data:r,schemaCode:n,keyword:i,it:s}=t,{opts:o,self:a}=s;if(!o.validateFormats)return;let c=new Nge.KeywordCxt(s,a.RULES.all.format.definition,"format");c.$data?l():u();function l(){let p=e.scopeValue("formats",{ref:a.formats,code:o.code.formats}),f=e.const("fmt",(0,Cn._)`${p}[${c.schemaCode}]`);t.fail$data((0,Cn.or)((0,Cn._)`typeof ${f} != "object"`,(0,Cn._)`${f} instanceof RegExp`,(0,Cn._)`typeof ${f}.compare != "function"`,d(f)))}function u(){let p=c.schema,f=a.formats[p];if(!f||f===!0)return;if(typeof f!="object"||f instanceof RegExp||typeof f.compare!="function")throw new Error(`"${i}": format "${p}" does not define "compare" function`);let m=e.scopeValue("formats",{key:p,ref:f,code:o.code.formats?(0,Cn._)`${o.code.formats}${(0,Cn.getProperty)(p)}`:void 0});t.fail$data(d(m))}function d(p){return(0,Cn._)`${p}.compare(${r}, ${n}) ${bh[i].fail} 0`}},dependencies:["format"]};var qge=t=>(t.addKeyword(Kc.formatLimitDefinition),t);Kc.default=qge});var ZF=h((ad,XF)=>{"use strict";Object.defineProperty(ad,"__esModule",{value:!0});var Dc=VF(),Fge=WF(),xI=ue(),YF=new xI.Name("fullFormats"),$ge=new xI.Name("fastFormats"),wI=(t,e={keywords:!0})=>{if(Array.isArray(e))return QF(t,e,Dc.fullFormats,YF),t;let[r,n]=e.mode==="fast"?[Dc.fastFormats,$ge]:[Dc.fullFormats,YF],i=e.formats||Dc.formatNames;return QF(t,i,r,n),e.keywords&&(0,Fge.default)(t),t};wI.get=(t,e="full")=>{let n=(e==="fast"?Dc.fastFormats:Dc.fullFormats)[t];if(!n)throw new Error(`Unknown format "${t}"`);return n};function QF(t,e,r,n){var i,s;(i=(s=t.opts.code).formats)!==null&&i!==void 0||(s.formats=(0,xI._)`require("ajv-formats/dist/formats").${n}`);for(let o of e)t.addFormat(o,r[o])}XF.exports=ad=wI;Object.defineProperty(ad,"__esModule",{value:!0});ad.default=wI});function Uge(){let t=new e$.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,t$.default)(t),t}var e$,t$,vh,r$=R(()=>{e$=tt(yI(),1),t$=tt(ZF(),1);vh=class{constructor(e){this._ajv=e??Uge()}getValidator(e){let r="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return n=>r(n)?{valid:!0,data:n,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(r.errors)}}}});var Eh,n$=R(()=>{bc();Eh=class{constructor(e){this._server=e}requestStream(e,r,n){return this._server.requestStream(e,r,n)}createMessageStream(e,r){let n=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!n?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let i=e.messages[e.messages.length-1],s=Array.isArray(i.content)?i.content:[i.content],o=s.some(u=>u.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,c=a?Array.isArray(a.content)?a.content:[a.content]:[],l=c.some(u=>u.type==="tool_use");if(o){if(s.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!l)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(l){let u=new Set(c.filter(p=>p.type==="tool_use").map(p=>p.id)),d=new Set(s.filter(p=>p.type==="tool_result").map(p=>p.toolUseId));if(u.size!==d.size||![...u].every(p=>d.has(p)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},Ou,r)}elicitInputStream(e,r){let n=this._server.getClientCapabilities(),i=e.mode??"form";switch(i){case"url":{if(!n?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!n?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let s=i==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:s},gc,r)}async getTask(e,r){return this._server.getTask({taskId:e},r)}async getTaskResult(e,r,n){return this._server.getTaskResult({taskId:e},r,n)}async listTasks(e,r){return this._server.listTasks(e?{cursor:e}:void 0,r)}async cancelTask(e,r){return this._server.cancelTask({taskId:e},r)}}});function i$(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${r} does not support task creation for tools/call (required for ${e})`);break;default:break}}function s$(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${r} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${r} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var o$=R(()=>{});var Sh,a$=R(()=>{e2();bc();r$();Rm();n$();o$();Sh=class extends Mm{constructor(e,r){super(r),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Ru.options.map((n,i)=>[n,i])),this.isMessageIgnored=(n,i)=>{let s=this._loggingLevels.get(i);return s?this.LOG_LEVEL_SEVERITY.get(n)<this.LOG_LEVEL_SEVERITY.get(s):!1},this._capabilities=r?.capabilities??{},this._instructions=r?.instructions,this._jsonSchemaValidator=r?.jsonSchemaValidator??new vh,this.setRequestHandler(fm,n=>this._oninitialize(n)),this.setNotificationHandler(qx,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(Hx,async(n,i)=>{let s=i.sessionId||i.requestInfo?.headers["mcp-session-id"]||void 0,{level:o}=n.params,a=Ru.safeParse(o);return a.success&&this._loggingLevels.set(s,a.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new Eh(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Zq(this._capabilities,e)}setRequestHandler(e,r){let i=km(e)?.method;if(!i)throw new Error("Schema is missing a method literal");let s=Am(i);if(typeof s!="string")throw new Error("Schema method literal must be a string");if(s==="tools/call"){let a=async(c,l)=>{let u=Es(Au,c);if(!u.success){let m=u.error instanceof Error?u.error.message:String(u.error);throw new ce(be.InvalidParams,`Invalid tools/call request: ${m}`)}let{params:d}=u.data,p=await Promise.resolve(r(c,l));if(d.task){let m=Es(hc,p);if(!m.success){let y=m.error instanceof Error?m.error.message:String(m.error);throw new ce(be.InvalidParams,`Invalid task creation result: ${y}`)}return m.data}let f=Es(xm,p);if(!f.success){let m=f.error instanceof Error?f.error.message:String(f.error);throw new ce(be.InvalidParams,`Invalid tools/call result: ${m}`)}return f.data};return super.setRequestHandler(e,a)}return super.setRequestHandler(e,r)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){s$(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&i$(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let r=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:fc.includes(r)?r:Px,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},dm)}async createMessage(e,r){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let n=e.messages[e.messages.length-1],i=Array.isArray(n.content)?n.content:[n.content],s=i.some(l=>l.type==="tool_result"),o=e.messages.length>1?e.messages[e.messages.length-2]:void 0,a=o?Array.isArray(o.content)?o.content:[o.content]:[],c=a.some(l=>l.type==="tool_use");if(s){if(i.some(l=>l.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!c)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(c){let l=new Set(a.filter(d=>d.type==="tool_use").map(d=>d.id)),u=new Set(i.filter(d=>d.type==="tool_result").map(d=>d.toolUseId));if(l.size!==u.size||![...l].every(d=>u.has(d)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},Vx,r):this.request({method:"sampling/createMessage",params:e},Ou,r)}async elicitInput(e,r){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let i=e;return this.request({method:"elicitation/create",params:i},gc,r)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let i=e.mode==="form"?e:{...e,mode:"form"},s=await this.request({method:"elicitation/create",params:i},gc,r);if(s.action==="accept"&&s.content&&i.requestedSchema)try{let a=this._jsonSchemaValidator.getValidator(i.requestedSchema)(s.content);if(!a.valid)throw new ce(be.InvalidParams,`Elicitation response content does not match requested schema: ${a.errorMessage}`)}catch(o){throw o instanceof ce?o:new ce(be.InternalError,`Error validating elicitation response: ${o instanceof Error?o.message:String(o)}`)}return s}}}createElicitationCompletionNotifier(e,r){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},r)}async listRoots(e,r){return this.request({method:"roots/list",params:e},Wx,r)}async sendLoggingMessage(e,r){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,r))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}});function _I(t,e){return typeof t!="number"||!Number.isFinite(t)?e.default:Math.min(Math.max(1,Math.trunc(t)),e.max)}function cd(t,e){let r=t[e];if(typeof r!="string"||r.trim().length===0)throw new Error(`"${e}" is required`);return r}function II(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async function zge(t,e,r){if(e==="search"){let n=await t.search({projectId:cd(r,"projectId"),query:cd(r,"query"),limit:_I(r.limit,c$)});return II({observations:n})}if(e==="context"){let n=await t.context({projectId:cd(r,"projectId"),query:cd(r,"query"),limit:_I(r.limit,l$)}),i=n.map(s=>s.content).filter(s=>typeof s=="string"&&s.length>0).join(`
|
||
|
||
`);return II({observations:n,context:i})}if(e==="recent"){let n=await t.recent({projectId:cd(r,"projectId"),limit:_I(r.limit,u$)});return II({observations:n})}throw new Error(`Unknown tool: ${e}`)}function d$(t,e){let r=new Sh({name:"claude-mem",version:e},{capabilities:{tools:{}}});return r.setRequestHandler(Bx,async()=>({tools:Jge})),r.setRequestHandler(Au,async n=>{let i=n.params.name,s=n.params.arguments??{};try{return await zge(t,i,s)}catch(o){let a=o instanceof Error?o:new Error(String(o));return x.warn("SYSTEM","recall MCP tool call failed",{tool:i},a),{isError:!0,content:[{type:"text",text:a.message}]}}}),r}var c$,l$,u$,Jge,p$=R(()=>{"use strict";a$();bc();fe();c$={default:20,max:100},l$={default:10,max:50},u$={default:20,max:100},Jge=[{name:"search",description:"Full-text search your claude-mem memory for a project. Returns matching observations (most relevant first).",inputSchema:{type:"object",properties:{projectId:{type:"string",description:"Project to search within."},query:{type:"string",description:"Search query."},limit:{type:"integer",minimum:1,maximum:c$.max}},required:["projectId","query"]}},{name:"context",description:"Like search, but also returns a concatenated context string ready to inject into a prompt.",inputSchema:{type:"object",properties:{projectId:{type:"string",description:"Project to search within."},query:{type:"string",description:"Search query."},limit:{type:"integer",minimum:1,maximum:l$.max}},required:["projectId","query"]}},{name:"recent",description:"List the most recent observations for a project (newest first).",inputSchema:{type:"object",properties:{projectId:{type:"string",description:"Project to list."},limit:{type:"integer",minimum:1,maximum:u$.max}},required:["projectId"]}}]});var $o,xh=R(()=>{"use strict";$o=class{constructor(e){this.client=e}client;async hit(e){let r=await this.client.query(`INSERT INTO rate_limit_counters (subject_id, window_start, count)
|
||
VALUES ($1, $2, 1)
|
||
ON CONFLICT (subject_id, window_start)
|
||
DO UPDATE SET count = rate_limit_counters.count + 1
|
||
RETURNING count`,[e.subjectId,e.windowStart]),n=Number(r.rows[0]?.count??0);return{allowed:n<=e.limit,count:n,limit:e.limit,windowStart:e.windowStart}}}});var Kr,Uo=R(()=>{"use strict";wn();Kr=class{constructor(e){this.client=e}client;async record(e){await this.client.query(`INSERT INTO usage_events (id, team_id, project_id, kind, quantity, metadata)
|
||
VALUES ($1, $2, $3, $4, $5, $6::jsonb)`,[Ze(),e.teamId,e.projectId??null,e.kind,Math.max(0,Math.trunc(e.quantity??1)),JSON.stringify(e.metadata??{})])}async total(e){let r=await this.client.query(`SELECT COALESCE(SUM(quantity), 0)::bigint AS total
|
||
FROM usage_events
|
||
WHERE team_id = $1 AND kind = $2 AND created_at >= $3`,[e.teamId,e.kind,e.since]);return Number(r.rows[0]?.total??0)}async summarize(e){let r=await this.client.query(`SELECT kind, SUM(quantity)::bigint AS total
|
||
FROM usage_events
|
||
WHERE team_id = $1 AND created_at >= $2
|
||
GROUP BY kind`,[e.teamId,e.since]),n={};for(let i of r.rows)n[i.kind]=Number(i.total);return n}}});function Gge(t,e){let r=e*1e3;return new Date(Math.floor(t/r)*r)}function Bge(t){return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),1))}async function Hge(t,e,r,n,i){let s=Gge(Date.now(),e.windowSec),o=s.getTime()+e.windowSec*1e3,a=await t.hit({subjectId:r,windowStart:s,limit:e.max});if(n.setHeader("X-RateLimit-Limit",String(e.max)),n.setHeader("X-RateLimit-Remaining",String(Math.max(0,e.max-a.count))),n.setHeader("X-RateLimit-Reset",String(Math.ceil(o/1e3))),!a.allowed){let c=Math.max(1,Math.ceil((o-Date.now())/1e3));return n.setHeader("Retry-After",String(c)),n.status(429).json({error:"rate_limited",message:`Rate limit exceeded (${e.max} requests / ${e.windowSec}s)`})}return i()}function f$(t,e){let r=new $o(t);return async(n,i,s)=>{let o=n.authContext?.apiKeyId;if(!o)return s();try{return await Hge(r,e,o,i,s)}catch(a){return x.warn("HTTP","rate limit check failed; allowing request (fail open)",{error:a instanceof Error?a.message:String(a)}),s()}}}async function Vge(t,e,r,n,i){let s=await t.total({teamId:r,kind:e.kind,since:Bge(new Date)});return s>=e.cap?n.status(402).json({error:"quota_exceeded",message:`Monthly ${e.kind} quota reached (${e.cap})`,used:s,cap:e.cap}):i()}function TI(t,e){let r=new Kr(t);return async(n,i,s)=>{let o=n.authContext?.teamId;if(!o)return s();try{return await Vge(r,e,o,i,s)}catch(a){return x.warn("HTTP","quota check failed; allowing request (fail open)",{error:a instanceof Error?a.message:String(a)}),s()}}}var m$=R(()=>{"use strict";xh();Uo();fe()});function h$(t){let e=new Kr(t);return(r,n,i)=>{let s=r.authContext?.teamId;s&&e.record({teamId:s,projectId:r.authContext?.projectId??null,kind:"request",metadata:{method:r.method,path:r.path,apiKeyId:r.authContext?.apiKeyId??null}}).catch(o=>{x.warn("HTTP","usage metering record failed",{error:o instanceof Error?o.message:String(o)})}),i()}}var y$=R(()=>{"use strict";Uo();fe()});function Wge(t){return{id:t.id,projectId:t.project_id,teamId:t.team_id,serverSessionId:t.server_session_id,sourceAdapter:t.source_adapter,sourceEventId:t.source_event_id,idempotencyKey:t.idempotency_key,eventType:t.event_type,platformSource:t.platform_source,payload:ht(t.payload),metadata:ht(t.metadata),occurredAtEpoch:t.occurred_at.getTime(),receivedAtEpoch:t.received_at.getTime(),createdAtEpoch:t.created_at.getTime()}}function g$(t){let e=cr(t.platformSource);if(t.externalSessionId){let r=[t.teamId,t.projectId,"external"];return e&&r.push(e),r.push(t.externalSessionId),`server_session:v1:${xn(r)}`}return t.contentSessionId?`server_session:v1:${xn([t.teamId,t.projectId,"content",e,t.agentId??null,t.contentSessionId])}`:t.agentId&&e?`server_session:v1:${xn([t.teamId,t.projectId,"agent",e,t.agentId,t.agentType??null])}`:null}function Cs(t){return{id:t.id,projectId:t.project_id,teamId:t.team_id,externalSessionId:t.external_session_id,idempotencyKey:t.idempotency_key,contentSessionId:t.content_session_id,agentId:t.agent_id,agentType:t.agent_type,platformSource:t.platform_source,generationStatus:t.generation_status,metadata:ht(t.metadata),startedAtEpoch:De(t.started_at),endedAtEpoch:Qr(t.ended_at)?.getTime()??null,lastGeneratedAtEpoch:Qr(t.last_generated_at)?.getTime()??null,createdAtEpoch:De(t.created_at),updatedAtEpoch:De(t.updated_at)}}var zt,js=R(()=>{"use strict";wn();So();zt=class{constructor(e){this.client=e}client;async create(e){await Sn(this.client,e.projectId,e.teamId);let r=e.id??Ze(),n=cr(e.platformSource),i=g$({...e,platformSource:n}),s=await se(this.client,`
|
||
INSERT INTO server_sessions (
|
||
id, project_id, team_id, external_session_id, idempotency_key, content_session_id,
|
||
agent_id, agent_type, platform_source, generation_status, metadata
|
||
)
|
||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11::jsonb)
|
||
ON CONFLICT (project_id, idempotency_key) WHERE idempotency_key IS NOT NULL DO UPDATE SET
|
||
external_session_id = excluded.external_session_id,
|
||
content_session_id = excluded.content_session_id,
|
||
agent_id = excluded.agent_id,
|
||
agent_type = excluded.agent_type,
|
||
platform_source = excluded.platform_source,
|
||
generation_status = excluded.generation_status,
|
||
metadata = excluded.metadata,
|
||
updated_at = now()
|
||
RETURNING *
|
||
`,[r,e.projectId,e.teamId,e.externalSessionId??null,i,e.contentSessionId??null,e.agentId??null,e.agentType??null,n,e.generationStatus??"idle",JSON.stringify(e.metadata??{})]);return Cs(s)}async getByIdForScope(e){let r=await se(this.client,"SELECT * FROM server_sessions WHERE id = $1 AND project_id = $2 AND team_id = $3",[e.id,e.projectId,e.teamId]);return r?Cs(r):null}async listByProject(e,r){return(await this.client.query(`
|
||
SELECT * FROM server_sessions
|
||
WHERE project_id = $1 AND team_id = $2
|
||
ORDER BY started_at DESC
|
||
`,[e,r])).rows.map(Cs)}async findByExternalIdForScope(e){let r=Object.prototype.hasOwnProperty.call(e,"platformSource"),n=r?cr(e.platformSource):null,i=await se(this.client,`
|
||
SELECT * FROM server_sessions
|
||
WHERE external_session_id = $1 AND project_id = $2 AND team_id = $3
|
||
AND (
|
||
$4::boolean = false
|
||
OR ($5::text IS NULL AND platform_source IS NULL)
|
||
OR platform_source = $5
|
||
)
|
||
ORDER BY started_at DESC
|
||
LIMIT 1
|
||
`,[e.externalSessionId,e.projectId,e.teamId,r,n]);return i?Cs(i):null}async findIdByContentSessionId(e){let r=Object.prototype.hasOwnProperty.call(e,"platformSource"),n=r?cr(e.platformSource):null,i=await se(this.client,`
|
||
SELECT id FROM server_sessions
|
||
WHERE content_session_id = $1 AND project_id = $2 AND team_id = $3
|
||
AND (
|
||
$4::boolean = false
|
||
OR ($5::text IS NULL AND platform_source IS NULL)
|
||
OR platform_source = $5
|
||
)
|
||
ORDER BY started_at DESC
|
||
LIMIT 1
|
||
`,[e.contentSessionId,e.projectId,e.teamId,r,n]);return i?i.id:null}async endSession(e){let r=await se(this.client,`
|
||
UPDATE server_sessions
|
||
SET ended_at = COALESCE(ended_at, now()),
|
||
updated_at = CASE WHEN ended_at IS NULL THEN now() ELSE updated_at END
|
||
WHERE id = $1 AND project_id = $2 AND team_id = $3
|
||
RETURNING *
|
||
`,[e.id,e.projectId,e.teamId]);return r?Cs(r):null}async markGenerationStarted(e){let r=await se(this.client,`
|
||
UPDATE server_sessions
|
||
SET generation_status = 'processing', updated_at = now()
|
||
WHERE id = $1 AND project_id = $2 AND team_id = $3
|
||
RETURNING *
|
||
`,[e.id,e.projectId,e.teamId]);return r?Cs(r):null}async markGenerationCompleted(e){let r=await se(this.client,`
|
||
UPDATE server_sessions
|
||
SET generation_status = 'completed',
|
||
last_generated_at = now(),
|
||
updated_at = now()
|
||
WHERE id = $1 AND project_id = $2 AND team_id = $3
|
||
RETURNING *
|
||
`,[e.id,e.projectId,e.teamId]);return r?Cs(r):null}async markGenerationFailed(e){let r=await se(this.client,`
|
||
UPDATE server_sessions
|
||
SET generation_status = 'failed',
|
||
metadata = jsonb_set(
|
||
COALESCE(metadata, '{}'::jsonb),
|
||
'{lastGenerationError}',
|
||
COALESCE(to_jsonb($4::text), 'null'::jsonb),
|
||
true
|
||
),
|
||
updated_at = now()
|
||
WHERE id = $1 AND project_id = $2 AND team_id = $3
|
||
RETURNING *
|
||
`,[e.id,e.projectId,e.teamId,e.error??null]);return r?Cs(r):null}async listUnprocessedEvents(e){let r=e.limit??500;return(await this.client.query(`
|
||
SELECT e.*
|
||
FROM agent_events e
|
||
WHERE e.server_session_id = $1
|
||
AND e.project_id = $2
|
||
AND e.team_id = $3
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM observation_generation_jobs j
|
||
WHERE j.agent_event_id = e.id
|
||
AND j.project_id = e.project_id
|
||
AND j.team_id = e.team_id
|
||
AND j.source_type = 'agent_event'
|
||
AND j.status = 'completed'
|
||
)
|
||
ORDER BY e.occurred_at ASC
|
||
LIMIT $4
|
||
`,[e.serverSessionId,e.projectId,e.teamId,r])).rows.map(Wge)}}});function E$(t){let e=Xge.safeParse(t);if(!e.success)throw new ld(e.error.issues);return e.data}var tr,Mc,b$,v$,Yge,Qge,Xge,ld,wh=R(()=>{"use strict";tr=require("zod"),Mc={event:"server_beta_generate_event",summary:"server_beta_generate_summary"},b$={event:"evt",summary:"sum"},v$=tr.z.object({team_id:tr.z.string().min(1,"team_id is required"),project_id:tr.z.string().min(1,"project_id is required"),source_type:tr.z.enum(["agent_event","session_summary","observation_reindex"]),source_id:tr.z.string().min(1,"source_id is required"),generation_job_id:tr.z.string().min(1,"generation_job_id is required"),api_key_id:tr.z.string().min(1).nullable(),actor_id:tr.z.string().min(1).nullable(),source_adapter:tr.z.string().min(1,"source_adapter is required"),request_id:tr.z.string().min(1).nullable().optional()}),Yge=v$.extend({kind:tr.z.literal("event"),agent_event_id:tr.z.string().min(1)}),Qge=v$.extend({kind:tr.z.literal("summary"),server_session_id:tr.z.string().min(1)}),Xge=tr.z.discriminatedUnion("kind",[Yge,Qge]),ld=class extends Error{issues;constructor(e){super(`invalid server generation job payload: ${e.map(r=>r.message).join("; ")}`),this.issues=e}}});function Nc(t){let e=b$[t.kind],r=JSON.stringify({kind:t.kind,team_id:t.team_id,project_id:t.project_id,source_type:t.source_type,source_id:t.source_id}),n=(0,S$.createHash)("sha256").update(r).digest("hex");return`${e}_${n}`}var S$,kI=R(()=>{"use strict";S$=require("crypto");wh()});function x$(t){return{kind:"event",team_id:t.event.teamId,project_id:t.event.projectId,source_type:"agent_event",source_id:t.event.id,generation_job_id:t.outboxId,agent_event_id:t.event.id,api_key_id:t.apiKeyId,actor_id:t.actorId,source_adapter:t.sourceAdapter??t.event.sourceAdapter??"api",request_id:t.requestId}}var w$,_h,_$=R(()=>{"use strict";Qa();fs();Ao();fe();kI();wn();w$="observation_generate_for_event",_h=class{constructor(e){this.options=e}options;async ingestOne(e,r={}){let n=r.generate??!0,i=r.source??"http_post_v1_events",s=await In(this.options.pool,async a=>{let l=await new Xr(a).create(e);if(!n)return{event:l,outbox:null};let u=new dt(a),d=new Wt(a),p=Ze(),f=x$({outboxId:p,event:l,apiKeyId:r.apiKeyId??null,actorId:r.actorId??null,sourceAdapter:r.sourceAdapter??null,requestId:r.requestId??null}),m=await u.create({id:p,projectId:l.projectId,teamId:l.teamId,sourceType:"agent_event",sourceId:l.id,agentEventId:l.id,serverSessionId:l.serverSessionId,jobType:w$,bullmqJobId:Nc({kind:"event",team_id:l.teamId,project_id:l.projectId,source_type:"agent_event",source_id:l.id}),payload:f});return await d.append({generationJobId:m.id,projectId:m.projectId,teamId:m.teamId,eventType:"queued",statusAfter:m.status,attempt:m.attempts,details:{source:i}}),{event:l,outbox:m}}),o="skipped";return s.outbox&&(o=await this.publishEventJob(s.event,s.outbox)),{event:s.event,outbox:s.outbox,enqueueState:o}}async ingestBatch(e,r={}){let n=r.generate??!0,i=r.source??"http_post_v1_events_batch",s=await In(this.options.pool,async o=>{let a=new Xr(o),c=new dt(o),l=new Wt(o),u=[];for(let d of e){let p=await a.create(d);if(!n){u.push({event:p,outbox:null});continue}let f=Ze(),m=x$({outboxId:f,event:p,apiKeyId:r.apiKeyId??null,actorId:r.actorId??null,sourceAdapter:r.sourceAdapter??null,requestId:r.requestId??null}),y=await c.create({id:f,projectId:p.projectId,teamId:p.teamId,sourceType:"agent_event",sourceId:p.id,agentEventId:p.id,serverSessionId:p.serverSessionId,jobType:w$,bullmqJobId:Nc({kind:"event",team_id:p.teamId,project_id:p.projectId,source_type:"agent_event",source_id:p.id}),payload:m});await l.append({generationJobId:y.id,projectId:y.projectId,teamId:y.teamId,eventType:"queued",statusAfter:y.status,attempt:y.attempts,details:{source:i}}),u.push({event:p,outbox:y})}return u});return Promise.all(s.map(async({event:o,outbox:a})=>{let c=a?await this.publishEventJob(o,a):"skipped";return{event:o,outbox:a,enqueueState:c}}))}async publishEventJob(e,r){let n=this.options.resolveEventQueue();if(!n)return"queued_only";let i=r.bullmqJobId??Nc({kind:"event",team_id:e.teamId,project_id:e.projectId,source_type:"agent_event",source_id:e.id});try{return await n.add(i,r.payload),"enqueued"}catch(s){return x.warn("SYSTEM","failed to publish event generation job to BullMQ",{outboxId:r.id,error:s instanceof Error?s.message:String(s)}),"queued_only"}}}});function AI(t){return Nc({kind:"summary",team_id:t.teamId,project_id:t.projectId,source_type:"session_summary",source_id:t.serverSessionId})}function RI(t){return{kind:"summary",team_id:t.teamId,project_id:t.projectId,source_type:"session_summary",source_id:t.serverSessionId,generation_job_id:t.generationJobId,server_session_id:t.serverSessionId,api_key_id:t.apiKeyId??null,actor_id:t.actorId??null,source_adapter:t.sourceAdapter??"api",request_id:t.requestId??null}}var I$=R(()=>{"use strict";kI()});var Zge,Ih,T$=R(()=>{"use strict";fs();Ao();js();fe();I$();wn();Zge="observation_generate_session_summary",Ih=class{constructor(e){this.options=e}options;async end(e){let r=e.source??"http_post_v1_sessions_end",n=await In(this.options.pool,async s=>{let a=await new zt(s).endSession({id:e.sessionId,projectId:e.projectId,teamId:e.teamId});if(!a)return{session:null,outbox:null};let c=new dt(s),l=new Wt(s),u=Ze(),d=RI({serverSessionId:a.id,teamId:a.teamId,projectId:a.projectId,generationJobId:u,apiKeyId:e.apiKeyId??null,actorId:e.actorId??null,sourceAdapter:e.sourceAdapter??null}),p=await c.create({id:u,projectId:a.projectId,teamId:a.teamId,sourceType:"session_summary",sourceId:a.id,serverSessionId:a.id,jobType:Zge,bullmqJobId:AI({serverSessionId:a.id,teamId:a.teamId,projectId:a.projectId}),payload:d});return await l.append({generationJobId:p.id,projectId:p.projectId,teamId:p.teamId,eventType:"queued",statusAfter:p.status,attempt:p.attempts,details:{source:r}}),{session:a,outbox:p}});if(!n.session||!n.outbox)return{session:n.session,outbox:null,enqueueState:"skipped"};let i=await this.publishSummaryJob(n.session.id,n.outbox,e);return{session:n.session,outbox:n.outbox,enqueueState:i}}async publishSummaryJob(e,r,n){let i=this.options.resolveSummaryQueue();if(!i)return"queued_only";let s=r.bullmqJobId??AI({serverSessionId:e,teamId:r.teamId,projectId:r.projectId}),o=RI({serverSessionId:e,teamId:r.teamId,projectId:r.projectId,generationJobId:r.id,apiKeyId:n.apiKeyId??null,actorId:n.actorId??null,sourceAdapter:n.sourceAdapter??null});try{return await i.add(s,o),"enqueued"}catch(a){return x.warn("SYSTEM","failed to publish summary generation job to BullMQ",{outboxId:r.id,error:a instanceof Error?a.message:String(a)}),"queued_only"}}}});function k$(t){return`${(process.env.CLAUDE_MEM_PUBLIC_URL??`${t.protocol}://${t.get("host")??"localhost"}`).replace(/\/+$/,"")}/v1/mcp`}function A$(t,e){return`claude mcp add --transport http claude-mem ${t} --header "Authorization: Bearer ${e}"`}async function C$(t,e,r=D$,n=rbe){if(O$.includes(e.status))return{job:e,timedOut:!1};let i=Date.now()+r,s=e;for(;Date.now()<i;){await new Promise(a=>setTimeout(a,n));let o=await t.getByIdForScope({id:e.id,projectId:e.projectId,teamId:e.teamId});if(!o)return{job:s,timedOut:!1};if(s=o,O$.includes(o.status))return{job:o,timedOut:!1}}return{job:s,timedOut:!0}}function ibe(t){let e=typeof t.query.status=="string"?t.query.status.trim():"",r=e&&M$.has(e)?e:null,n=typeof t.query.source_type=="string"?t.query.source_type.trim():"",i=n&&nbe.has(n)?n:null,s=kh(t.query.limit,N$,1,L$),o=kh(t.query.offset,0,0,Number.MAX_SAFE_INTEGER),a=typeof t.query.since=="string"?t.query.since.trim():"",c=null;if(a){let l=new Date(a);Number.isNaN(l.getTime())||(c=l)}return{status:r,sourceType:i,limit:s,offset:o,since:c}}function j$(t){if(!t||typeof t!="object")return 0;let e=t.retried_count;return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.floor(e):0}function P$(t){let e=typeof t.query.status=="string"?t.query.status.trim():"",r=e&&M$.has(e)?e:null,n=kh(t.query.limit,N$,1,L$),i=kh(t.query.offset,0,0,Number.MAX_SAFE_INTEGER);return{status:r,limit:n,offset:i}}function kh(t,e,r,n){if(typeof t!="string")return e;let i=Number.parseInt(t,10);return Number.isFinite(i)?Math.max(r,Math.min(n,i)):e}function OI(t,e={}){let r={id:t.id,projectId:t.project_id,teamId:t.team_id,sourceType:t.source_type,sourceId:t.source_id,status:t.status,attempts:t.attempts,maxAttempts:t.max_attempts,createdAtEpoch:new Date(t.created_at).getTime(),completedAtEpoch:t.completed_at?new Date(t.completed_at).getTime():null,failedAtEpoch:t.failed_at?new Date(t.failed_at).getTime():null,lastError:t.last_error&&typeof t.last_error=="object"?t.last_error:null};return e.includePayload&&t.payload&&typeof t.payload=="object"&&(r.payload=t.payload),r}function sbe(t){let e={"event.received":"agent_event","event.batch_received":"agent_event","event.write":"agent_event","event.batch_write":"agent_event","session.write":"server_session","session.end":"server_session","memory.write":"observation","observation.read":"observation","observation.search":"observation","observation.context":"observation","observation.generated":"observation","session_summary.generated":"observation","generation_job.queued":"observation_generation_job","generation_job.enqueued":"observation_generation_job","generation_job.processing":"observation_generation_job","generation_job.completed":"observation_generation_job","generation_job.failed":"observation_generation_job","generation_job.scope_violation":"observation_generation_job","generation_job.revoked_key":"observation_generation_job","generation_job.retried_by_operator":"observation_generation_job","generation_job.cancelled_by_operator":"observation_generation_job","generation_job.stalled":"observation_generation_job"};return e[t]?e[t]:t.split(".")[0]??"unknown"}function obe(t,e){let r=t.authContext?.projectId??null;if(!(t.authContext?.teamId??null))return{status:403,body:{error:"Forbidden",message:"API key is not bound to a team"}};if(!r)return null;for(let i of e)if(i.projectId!==r)return{status:403,body:{error:"Forbidden",message:"API key is scoped to a different project"}};return null}function ud(t){return{id:t.id,projectId:t.projectId,teamId:t.teamId,externalSessionId:t.externalSessionId,contentSessionId:t.contentSessionId,agentId:t.agentId,agentType:t.agentType,platformSource:t.platformSource,generationStatus:t.generationStatus,metadata:t.metadata,startedAtEpoch:t.startedAtEpoch,endedAtEpoch:t.endedAtEpoch,lastGeneratedAtEpoch:t.lastGeneratedAtEpoch,createdAtEpoch:t.createdAtEpoch,updatedAtEpoch:t.updatedAtEpoch}}function dd(t){return{id:t.id,projectId:t.projectId,teamId:t.teamId,serverSessionId:t.serverSessionId,sourceAdapter:t.sourceAdapter,sourceEventId:t.sourceEventId,eventType:t.eventType,platformSource:t.platformSource,payload:t.payload,metadata:t.metadata,occurredAtEpoch:t.occurredAtEpoch,receivedAtEpoch:t.receivedAtEpoch,createdAtEpoch:t.createdAtEpoch}}function Lc(t){return{id:t.id,projectId:t.projectId,teamId:t.teamId,serverSessionId:t.serverSessionId,kind:t.kind,content:t.content,metadata:t.metadata,createdAtEpoch:t.createdAtEpoch,updatedAtEpoch:t.updatedAtEpoch}}function abe(t){return{id:t.id,projectId:t.project_id,teamId:t.team_id,serverSessionId:t.server_session_id,kind:t.kind,content:t.content,metadata:t.metadata&&typeof t.metadata=="object"?t.metadata:{},generationKey:t.generation_key,createdByJobId:t.created_by_job_id,createdAtEpoch:new Date(t.created_at).getTime(),updatedAtEpoch:new Date(t.updated_at).getTime(),source:{id:t.source_id_pk,sourceType:t.source_type,sourceId:t.source_id,generationJobId:t.generation_job_id,createdAtEpoch:new Date(t.source_created_at).getTime()}}}function CI(t,e){return{id:t.id,status:t.status,bullmqJobId:t.bullmqJobId,sourceType:t.sourceType,sourceId:t.sourceId,transport:e,createdAtEpoch:t.createdAtEpoch,updatedAtEpoch:t.updatedAtEpoch}}function K$(t,e){return{id:t.id,status:t.status,transport:e,bullmqJobId:t.bullmqJobId,sourceType:t.sourceType,sourceId:t.sourceId,attempts:t.attempts,maxAttempts:t.maxAttempts,createdAtEpoch:t.createdAtEpoch,updatedAtEpoch:t.updatedAtEpoch}}function jI(t){return{id:t.id,projectId:t.projectId,teamId:t.teamId,sourceType:t.sourceType,sourceId:t.sourceId,agentEventId:t.agentEventId,serverSessionId:t.serverSessionId,jobType:t.jobType,status:t.status,bullmqJobId:t.bullmqJobId,attempts:t.attempts,maxAttempts:t.maxAttempts,nextAttemptAtEpoch:t.nextAttemptAtEpoch,completedAtEpoch:t.completedAtEpoch,failedAtEpoch:t.failedAtEpoch,cancelledAtEpoch:t.cancelledAtEpoch,lastError:t.lastError,createdAtEpoch:t.createdAtEpoch,updatedAtEpoch:t.updatedAtEpoch}}var oe,Ah,ebe,tbe,R$,D$,rbe,O$,Th,nbe,M$,N$,L$,q$=R(()=>{"use strict";oe=require("zod");YM();Qa();fs();Oi();su();Xa();fe();Kf();bx();tq();Hq();p$();m$();y$();Uo();Ah=require("node:crypto");js();_$();T$();So();ebe="api",tbe="13.24.21";R$=oe.z.object({generate:oe.z.union([oe.z.literal("true"),oe.z.literal("false")]).optional(),wait:oe.z.union([oe.z.literal("true"),oe.z.literal("false")]).optional()}),D$=3e4,rbe=100,O$=["completed","failed","cancelled"];Th=class{constructor(e){this.options=e;this.ingestEvents=new _h({pool:e.pool,resolveEventQueue:()=>this.resolveQueue("event")}),this.endSession=new Ih({pool:e.pool,resolveSummaryQueue:()=>this.resolveQueue("summary")})}options;ingestEvents;endSession;getIngestEventsService(){return this.ingestEvents}getEndSessionService(){return this.endSession}setupRoutes(e){e.use("/v1",eq());let r=wo(this.options.pool,{authMode:this.options.authMode,allowLocalDevBypass:this.options.allowLocalDevBypass,requiredScopes:["memories:write"]}),n=wo(this.options.pool,{authMode:this.options.authMode,allowLocalDevBypass:this.options.allowLocalDevBypass,requiredScopes:["memories:read"]}),i=[],s=Number(process.env.CLAUDE_MEM_RATE_LIMIT_PER_MIN??"0");s>0&&i.push(f$(this.options.pool,{windowSec:60,max:s}));let o=Number(process.env.CLAUDE_MEM_MONTHLY_REQUEST_CAP??"0");o>0&&i.push(TI(this.options.pool,{kind:"request",cap:o})),process.env.CLAUDE_MEM_USAGE_METERING==="1"&&i.push(h$(this.options.pool));let a=[...i],c=Number(process.env.CLAUDE_MEM_MONTHLY_TOKEN_CAP??"0");c>0&&a.push(TI(this.options.pool,{kind:"tokens",cap:c}));let l=[r,...a],u=[n,...i];e.get("/v1/usage",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=new Date(Date.UTC(new Date().getUTCFullYear(),new Date().getUTCMonth(),1)),b=await new Kr(this.options.pool).summarize({teamId:m,since:y});f.status(200).json({since:y.toISOString(),usage:b})})),e.post("/v1/keys",l,this.handleCreate(oe.z.object({label:oe.z.string().max(120).optional(),expiresInDays:oe.z.number().int().positive().max(365).optional()}),async(p,f,m)=>{let y=this.requireTeamId(p,f);if(!y)return;let b=`cm_${(0,Ah.randomBytes)(24).toString("hex")}`,v=(0,Ah.createHash)("sha256").update(b).digest("hex"),E=m.expiresInDays?new Date(Date.now()+m.expiresInDays*864e5):null,S=await new Nt(this.options.pool).createApiKey({keyHash:v,teamId:y,projectId:p.authContext?.projectId??null,actorId:p.authContext?.apiKeyId??"api",scopes:["memories:read"],expiresAt:E});m.label;let k=k$(p);f.status(201).json({id:S.id,apiKey:b,scopes:["memories:read"],expiresAt:E?.toISOString()??null,mcpUrl:k,connectCommand:A$(k,b)})})),e.get("/v1/connect",u,this.asyncHandler(async(p,f)=>{if(!this.requireTeamId(p,f))return;let y=k$(p);f.status(200).json({mcpUrl:y,connectCommand:A$(y,"<YOUR_API_KEY>"),hint:"POST /v1/keys (write scope) to mint a read-only key for this link."})})),e.post("/v1/events",l,this.asyncHandler(async(p,f)=>{let m=R$.safeParse(p.query);if(!m.success){f.status(400).json({error:"ValidationError",issues:m.error.issues});return}let y=m.data.generate!=="false",b=m.data.wait==="true",v=uS.safeParse(p.body);if(!v.success){f.status(400).json({error:"ValidationError",issues:v.error.issues});return}let E=v.data,S=this.requireTeamId(p,f);if(!S||!this.ensureProjectAllowed(p,f,E.projectId))return;let k=this.toAgentEventInput(E,S);await this.applyContentSessionLinks([k],[p.body],S);let _,O=null,N="skipped",ee={generate:y,source:"http_post_v1_events",apiKeyId:p.authContext?.apiKeyId??null,actorId:await this.resolveActorId(p),sourceAdapter:k.sourceAdapter,requestId:p.requestId??null};try{let q=await this.ingestEvents.ingestOne(k,ee);_=q.event,O=q.outbox,N=q.enqueueState}catch(q){let U=q instanceof Error?q:new Error(String(q));x.warn("SYSTEM","event.write ingest failed",{requestId:p.requestId??null},U),this.handleDbError(U,f,"event.write");return}if(await this.auditWrite(p,"event.received",_.id,_.projectId,{sourceAdapter:_.sourceAdapter,sourceEventId:_.sourceEventId,eventType:_.eventType,serverSessionId:_.serverSessionId,generationJobId:O?.id??null}),b){let q=O,U=!1;if(O){let te=new dt(this.options.pool),Ge=await C$(te,O);q=Ge.job,U=Ge.timedOut}f.status(201).json({event:dd(_),generationJob:q?K$(q,N):null,...U?{waitTimedOut:!0}:{}});return}f.status(201).json({event:dd(_),...O?{generationJob:CI(O,N)}:{}})})),e.post("/v1/events/batch",l,this.asyncHandler(async(p,f)=>{let m=R$.safeParse(p.query);if(!m.success){f.status(400).json({error:"ValidationError",issues:m.error.issues});return}let y=m.data.generate!=="false",b=m.data.wait==="true",E=oe.z.array(uS).min(1).max(500).safeParse(p.body);if(!E.success){f.status(400).json({error:"ValidationError",issues:E.error.issues});return}let S=this.requireTeamId(p,f);if(!S)return;let k=obe(p,E.data);if(k){f.status(k.status).json(k.body);return}let _=E.data.map(q=>this.toAgentEventInput(q,S));await this.applyContentSessionLinks(_,Array.isArray(p.body)?p.body:E.data,S);let O=[],N=[],ee={generate:y,source:"http_post_v1_events_batch",apiKeyId:p.authContext?.apiKeyId??null,actorId:await this.resolveActorId(p),sourceAdapter:null,requestId:p.requestId??null};try{let q=await this.ingestEvents.ingestBatch(_,ee);O=q.map(({event:U,outbox:te})=>({event:U,outbox:te})),N=q.map(({enqueueState:U})=>U)}catch(q){let U=q instanceof Error?q:new Error(String(q));x.warn("SYSTEM","event.batch_write ingest failed",{requestId:p.requestId??null},U),this.handleDbError(U,f,"event.batch_write");return}if(await this.auditWrite(p,"event.batch_received",null,null,{eventCount:O.length,generationJobIds:O.map(({outbox:q})=>q?.id??null).filter(Boolean)}),b){let q=new dt(this.options.pool),U=Date.now()+D$,te=[];for(let T of O){if(!T.outbox){te.push({event:T.event,outbox:null,timedOut:!1});continue}let K=Math.max(0,U-Date.now()),P=await C$(q,T.outbox,K);te.push({event:T.event,outbox:P.job,timedOut:P.timedOut})}let Ge=te.some(T=>T.timedOut);f.status(201).json({events:te.map(({event:T,outbox:K,timedOut:P},C)=>({event:dd(T),generationJob:K?K$(K,N[C]):null,...P?{waitTimedOut:!0}:{}})),...Ge?{waitTimedOut:!0}:{}});return}f.status(201).json({events:O.map(({event:q,outbox:U},te)=>({event:dd(q),...U?{generationJob:CI(U,N[te])}:{}}))})})),e.get("/v1/events/:id",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.id),b=new Xr(this.options.pool),v=await this.loadScopedById(p,f,{id:y,teamId:m,table:"agent_events",notFound:"Event not found",load:E=>b.getByIdForScope({id:y,projectId:E,teamId:m})});v&&f.json({event:dd(v)})})),e.get("/v1/events/:id/observations",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.id),v=(await this.options.pool.query("SELECT id, project_id FROM agent_events WHERE id = $1 AND team_id = $2",[y,m])).rows[0];if(!v){f.status(404).json({error:"NotFound",message:"Event not found"});return}if(!this.ensureProjectAllowed(p,f,v.project_id))return;let E=await this.options.pool.query(`
|
||
SELECT o.id, o.project_id, o.team_id, o.server_session_id, o.kind, o.content,
|
||
o.metadata, o.generation_key, o.created_by_job_id, o.created_at, o.updated_at,
|
||
os.id AS source_id_pk, os.source_type, os.source_id, os.generation_job_id, os.created_at AS source_created_at
|
||
FROM observation_sources os
|
||
INNER JOIN observations o ON o.id = os.observation_id
|
||
WHERE os.source_type = 'agent_event'
|
||
AND os.source_id = $1
|
||
AND o.team_id = $2
|
||
AND o.project_id = $3
|
||
ORDER BY o.created_at ASC
|
||
`,[v.id,m,v.project_id]);await this.auditWrite(p,"observation.read",v.id,v.project_id,{mode:"event_observations",eventId:v.id,resultCount:E.rows.length,observationIds:E.rows.map(S=>S.id)}),f.json({eventId:v.id,observations:E.rows.map(abe)})})),e.get("/v1/teams/:teamId/jobs",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.teamId);if(!y){f.status(400).json({error:"ValidationError",message:"teamId required"});return}if(y!==m){f.status(404).json({error:"NotFound",message:"Team not found"});return}let b=p.authContext?.projectId??null,{status:v,limit:E,offset:S}=P$(p),k=[],_=0;try{({jobs:k,total:_}=await this.listJobsForScope({teamId:m,projectId:b,status:v,limit:E,offset:S}))}catch(O){let N=O instanceof Error?O:new Error(String(O));x.warn("SYSTEM","team.jobs.list query failed",{requestId:p.requestId??null},N),this.handleDbError(N,f,"team.jobs.list");return}await this.auditWrite(p,"observation.read",null,b,{mode:"team_jobs",teamId:m,projectId:b,status:v,limit:E,offset:S,resultCount:k.length}),f.status(200).json({jobs:k.map(O=>OI(O)),total:_,limit:E,offset:S})})),e.get("/v1/projects/:projectId/jobs",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.projectId);if(!y){f.status(400).json({error:"ValidationError",message:"projectId required"});return}if((await this.options.pool.query("SELECT id FROM projects WHERE id = $1 AND team_id = $2",[y,m])).rows.length===0){f.status(404).json({error:"NotFound",message:"Project not found"});return}let v=p.authContext?.projectId??null;if(v&&v!==y){f.status(404).json({error:"NotFound",message:"Project not found"});return}let{status:E,limit:S,offset:k}=P$(p),_=[],O=0;try{({jobs:_,total:O}=await this.listJobsForScope({teamId:m,projectId:y,status:E,limit:S,offset:k}))}catch(N){let ee=N instanceof Error?N:new Error(String(N));x.warn("SYSTEM","project.jobs.list query failed",{requestId:p.requestId??null},ee),this.handleDbError(ee,f,"project.jobs.list");return}await this.auditWrite(p,"observation.read",null,y,{mode:"project_jobs",teamId:m,projectId:y,status:E,limit:S,offset:k,resultCount:_.length}),f.status(200).json({jobs:_.map(N=>OI(N)),total:O,limit:S,offset:k})})),e.get("/v1/jobs",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=p.authContext?.projectId??null,v=(typeof p.query.include=="string"?p.query.include:"").split(",").map(te=>te.trim()).includes("payload"),E=p.authContext?.scopes??[],S=E.includes("*")||E.includes("admin")||E.includes("memories:admin");if(v&&!S){f.status(403).json({error:"Forbidden",message:"`include=payload` requires admin scope"});return}let{status:k,sourceType:_,limit:O,offset:N,since:ee}=ibe(p),q=[],U=0;try{({jobs:q,total:U}=await this.listJobsForScope({teamId:m,projectId:y,status:k,sourceType:_,limit:O,offset:N,since:ee}))}catch(te){let Ge=te instanceof Error?te:new Error(String(te));x.warn("SYSTEM","jobs.list query failed",{requestId:p.requestId??null},Ge),this.handleDbError(Ge,f,"jobs.list");return}await this.auditWrite(p,"observation.read",null,y,{mode:"jobs_list",teamId:m,projectId:y,status:k,sourceType:_,limit:O,offset:N,since:ee?ee.toISOString():null,resultCount:q.length,includePayload:v,requestId:p.requestId??null}),f.status(200).json({jobs:q.map(te=>OI(te,{includePayload:v})),total:U,limit:O,offset:N,requestId:p.requestId??null})})),e.get("/v1/jobs/:id",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.id),b=new dt(this.options.pool),v=await this.loadScopedById(p,f,{id:y,teamId:m,table:"observation_generation_jobs",notFound:"Generation job not found",scopeMismatch:"not-found",load:E=>b.getByIdForScope({id:y,projectId:E,teamId:m})});v&&f.json({generationJob:jI(v)})})),e.post("/v1/jobs/:id/retry",l,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.id),b=await this.retryGenerationJob(p,f,y,m);b&&f.status(200).json({generationJob:jI(b.job),retriedCount:b.retriedCount,alreadyQueued:b.alreadyQueued,requestId:p.requestId??null})})),e.post("/v1/jobs/:id/cancel",l,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.id),b=await this.cancelGenerationJob(p,f,y,m);b&&f.status(200).json({generationJob:jI(b.job),alreadyCancelled:b.alreadyCancelled,requestId:p.requestId??null})})),e.post("/v1/sessions/start",l,this.handleCreate(oe.z.object({projectId:oe.z.string().min(1),externalSessionId:oe.z.string().min(1).optional(),contentSessionId:oe.z.string().min(1).nullable().optional(),agentId:oe.z.string().min(1).nullable().optional(),agentType:oe.z.string().min(1).nullable().optional(),platformSource:oe.z.string().min(1).nullable().optional(),metadata:oe.z.record(oe.z.string(),oe.z.unknown()).optional()}),async(p,f,m)=>{let y=this.requireTeamId(p,f);if(!y||!this.ensureProjectAllowed(p,f,m.projectId))return;let b=new zt(this.options.pool),v=cr(m.platformSource);try{if(m.externalSessionId){let k=await b.findByExternalIdForScope({externalSessionId:m.externalSessionId,projectId:m.projectId,teamId:y,platformSource:v});if(k){f.status(200).json({session:ud(k)});return}}let E={projectId:m.projectId,teamId:y,externalSessionId:m.externalSessionId??null,contentSessionId:m.contentSessionId??null,agentId:m.agentId??null,agentType:m.agentType??null,platformSource:v,metadata:m.metadata??{}},S;try{S=await b.create(E)}catch(k){let _=k instanceof Error?k.code:k?.code;if(m.externalSessionId&&_==="23505"){let O=await b.findByExternalIdForScope({externalSessionId:m.externalSessionId,projectId:m.projectId,teamId:y,platformSource:v});if(O){f.status(200).json({session:ud(O)});return}}throw k}await this.auditWrite(p,"session.write",S.id,S.projectId),f.status(201).json({session:ud(S)})}catch(E){this.handleDbError(E,f,"session.write")}})),e.get("/v1/sessions/:id",u,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.id),b=new zt(this.options.pool),v=await this.loadScopedById(p,f,{id:y,teamId:m,table:"server_sessions",notFound:"Session not found",load:E=>b.getByIdForScope({id:y,projectId:E,teamId:m})});v&&f.json({session:ud(v)})})),e.post("/v1/sessions/:id/end",l,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=this.routeParam(p.params.id),b=await this.loadScopedById(p,f,{id:y,teamId:m,table:"server_sessions",notFound:"Session not found",load:async _=>_});if(!b)return;let v=null,E=null,S="skipped",k={sessionId:y,projectId:b,teamId:m,source:"http_post_v1_sessions_end",apiKeyId:p.authContext?.apiKeyId??null,actorId:await this.resolveActorId(p),sourceAdapter:"api"};try{let _=await this.endSession.end(k);v=_.session,E=_.outbox,S=_.enqueueState}catch(_){let O=_ instanceof Error?_:new Error(String(_));x.warn("SYSTEM","session.end failed",{requestId:p.requestId??null},O),this.handleDbError(O,f,"session.end");return}if(!v){f.status(404).json({error:"NotFound",message:"Session not found"});return}await this.auditWrite(p,"session.end",v.id,v.projectId),f.status(200).json({session:ud(v),...E?{generationJob:CI(E,S)}:{}})})),e.post("/v1/memories",l,this.handleCreate(oe.z.object({projectId:oe.z.string().min(1),serverSessionId:oe.z.string().min(1).nullable().optional(),contentSessionId:oe.z.string().min(1).nullable().optional(),platformSource:oe.z.string().min(1).nullable().optional(),kind:oe.z.string().min(1).optional(),content:oe.z.string().min(1),metadata:oe.z.record(oe.z.string(),oe.z.unknown()).optional()}),async(p,f,m)=>{let y=this.requireTeamId(p,f);if(!y||!this.ensureProjectAllowed(p,f,m.projectId))return;let b=await this.resolveMemorySessionLink({serverSessionId:m.serverSessionId??null,contentSessionId:m.contentSessionId??null,projectId:m.projectId,teamId:y,...this.sessionLookupPlatformScope(p.body)}),v={projectId:m.projectId,teamId:y,serverSessionId:b,kind:m.kind??"manual",content:m.content,metadata:m.metadata??{}};try{let S=await new Zr(this.options.pool).create(v);await this.auditWrite(p,"memory.write",S.id,S.projectId),f.status(201).json({memory:Lc(S)})}catch(E){let S=E instanceof Error?E:new Error(String(E));x.warn("SYSTEM","memory.write failed",{requestId:p.requestId??null},S),this.handleDbError(S,f,"memory.write")}})),e.post("/v1/search",u,this.handleCreate(oe.z.object({projectId:oe.z.string().min(1),query:oe.z.string().min(1),limit:oe.z.number().int().positive().max(100).optional(),platformSource:oe.z.string().min(1).nullable().optional()}),async(p,f,m)=>{let y=this.requireTeamId(p,f);if(!y||!this.ensureProjectAllowed(p,f,m.projectId))return;let b=cr(m.platformSource),v;try{v=await new Zr(this.options.pool).search({projectId:m.projectId,teamId:y,query:m.query,limit:m.limit??20,platformSource:b})}catch(E){let S=E instanceof Error?E:new Error(String(E));x.warn("SYSTEM","observation.search failed",{requestId:p.requestId??null},S),this.handleDbError(S,f,"observation.search");return}await this.auditWrite(p,"observation.read",null,m.projectId,{mode:"search",query:m.query,limit:m.limit??20,platformSource:b,resultCount:v.length,observationIds:v.map(E=>E.id)}),f.status(200).json({observations:v.map(Lc)})})),e.post("/v1/context",u,this.handleCreate(oe.z.object({projectId:oe.z.string().min(1),query:oe.z.string().min(1),limit:oe.z.number().int().positive().max(50).optional(),platformSource:oe.z.string().min(1).nullable().optional()}),async(p,f,m)=>{let y=this.requireTeamId(p,f);if(!y||!this.ensureProjectAllowed(p,f,m.projectId))return;let b=cr(m.platformSource),v;try{v=await new Zr(this.options.pool).search({projectId:m.projectId,teamId:y,query:m.query,limit:m.limit??10,platformSource:b})}catch(S){let k=S instanceof Error?S:new Error(String(S));x.warn("SYSTEM","observation.context failed",{requestId:p.requestId??null},k),this.handleDbError(k,f,"observation.context");return}let E=v.map(S=>S.content).filter(S=>typeof S=="string"&&S.length>0).join(`
|
||
|
||
`);await this.auditWrite(p,"observation.read",null,m.projectId,{mode:"context",query:m.query,limit:m.limit??10,platformSource:b,resultCount:v.length,observationIds:v.map(S=>S.id)}),f.status(200).json({observations:v.map(Lc),context:E})}));let d=this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=p.authContext?.projectId??null,b=new Zr(this.options.pool),v=_=>{if(y&&y!==_)throw new Error("API key is scoped to a different project")},S=d$({search:async({projectId:_,query:O,limit:N})=>{v(_);let ee=await b.search({projectId:_,teamId:m,query:O,limit:N});return await this.auditWrite(p,"observation.read",null,_,{mode:"search",via:"mcp",query:O,limit:N,resultCount:ee.length,observationIds:ee.map(q=>q.id)}),ee.map(Lc)},context:async({projectId:_,query:O,limit:N})=>{v(_);let ee=await b.search({projectId:_,teamId:m,query:O,limit:N});return await this.auditWrite(p,"observation.read",null,_,{mode:"context",via:"mcp",query:O,limit:N,resultCount:ee.length,observationIds:ee.map(q=>q.id)}),ee.map(Lc)},recent:async({projectId:_,limit:O})=>{v(_);let N=await b.listByProject({projectId:_,teamId:m,limit:O});return await this.auditWrite(p,"observation.read",null,_,{mode:"recent",via:"mcp",limit:O,resultCount:N.length,observationIds:N.map(ee=>ee.id)}),N.map(Lc)}},tbe),k=new _m({sessionIdGenerator:void 0});f.on("close",()=>{k.close(),S.close()}),await S.connect(k),await k.handleRequest(p,f,p.body)});e.post("/v1/mcp",u,d),e.get("/v1/mcp",u,d),e.delete("/v1/memories/:id",l,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=String(p.params.id),b=p.authContext?.projectId??null;try{if(!await this.deleteObservationForScope(y,m,b)){f.status(404).json({error:"not_found"});return}await this.auditWrite(p,"observation.deleted",y,b,{via:"api"}),f.status(200).json({deleted:!0,id:y})}catch(v){let E=v instanceof Error?v:new Error(String(v));x.warn("SYSTEM","observation.delete failed",{requestId:p.requestId??null},E),this.handleDbError(E,f,"observation.delete")}})),e.delete("/v1/projects/:projectId/memory",l,this.asyncHandler(async(p,f)=>{let m=this.requireTeamId(p,f);if(!m)return;let y=String(p.params.projectId);if(this.ensureProjectAllowed(p,f,y))try{if(!await new _n(this.options.pool).getByIdForTeam(y,m)){f.status(404).json({error:"not_found"});return}let v=await new cc(this.options.pool).purgeProjectMemory({projectId:y,teamId:m});await this.auditWrite(p,"project.memory_purged",y,y,{...v,via:"api"}),f.status(200).json({purged:!0,projectId:y,counts:v})}catch(b){let v=b instanceof Error?b:new Error(String(b));x.warn("SYSTEM","project.purge failed",{requestId:p.requestId??null},v),this.handleDbError(v,f,"project.purge")}}))}async resolveActorId(e){let r=e.authContext?.apiKeyId??null;if(!r)return null;try{return(await this.options.pool.query("SELECT actor_id FROM api_keys WHERE id = $1",[r])).rows[0]?.actor_id??null}catch(n){return x.warn("SYSTEM","failed to resolve actor_id for audit",{apiKeyId:r,error:n instanceof Error?n.message:String(n)}),null}}resolveQueue(e){let r=e==="summary"?this.options.getSummaryQueue:this.options.getEventQueue;if(r)return r();let n=this.options.queueManager;if(typeof n.getQueue=="function")try{return n.getQueue(e)}catch(i){let s=i instanceof Error?i:new Error(String(i));return x.warn("SYSTEM","queue lane resolution failed; enqueue will be skipped",{lane:e},s),null}return null}toAgentEventInput(e,r){let n=e.sourceType??ebe,i=typeof e.occurredAtEpoch=="number"?e.occurredAtEpoch:Date.now();return{projectId:e.projectId,teamId:r,serverSessionId:e.serverSessionId??null,contentSessionId:e.contentSessionId??null,sourceAdapter:n,sourceEventId:typeof e.sourceEventId=="string"?e.sourceEventId:null,eventType:e.eventType,platformSource:cr(e.platformSource),payload:e.payload??{},metadata:typeof e.metadata=="object"&&e.metadata!==null?e.metadata:{},occurredAt:new Date(i)}}requireTeamId(e,r){let n=e.authContext?.teamId??null;return n||(r.status(403).json({error:"Forbidden",message:"API key is not bound to a team"}),null)}async resolveMemorySessionLink(e){if(e.serverSessionId)return e.serverSessionId;if(!e.contentSessionId)return null;let r=Object.prototype.hasOwnProperty.call(e,"platformSource")?{platformSource:e.platformSource??null}:{};try{return await new zt(this.options.pool).findIdByContentSessionId({contentSessionId:e.contentSessionId,projectId:e.projectId,teamId:e.teamId,...r})}catch(n){return x.warn("HTTP","session linkage lookup failed; storing memory unlinked",{error:n instanceof Error?n.message:String(n)}),null}}async applyContentSessionLinks(e,r,n){let i=new zt(this.options.pool),s=new Map;await Promise.all(e.map(async(o,a)=>{if(o.serverSessionId||!o.contentSessionId)return;let c=this.sessionLookupPlatformScope(r[a]),l=Object.prototype.hasOwnProperty.call(c,"platformSource"),u=JSON.stringify([o.projectId,n,o.contentSessionId,l,l?c.platformSource??null:null]),d=s.get(u);d||(d=i.findIdByContentSessionId({contentSessionId:o.contentSessionId,projectId:o.projectId,teamId:n,...c}).catch(f=>(x.warn("HTTP","session linkage lookup failed; storing event unlinked",{error:f instanceof Error?f.message:String(f)}),null)),s.set(u,d));let p=await d;p&&(o.serverSessionId=p)}))}sessionLookupPlatformScope(e){if(!e||typeof e!="object")return{};if(!Object.prototype.hasOwnProperty.call(e,"platformSource"))return{};let r=e.platformSource;return{platformSource:typeof r=="string"?ps(r):null}}ensureProjectAllowed(e,r,n){return e.authContext?.projectId&&e.authContext.projectId!==n?(r.status(403).json({error:"Forbidden",message:"API key is scoped to a different project"}),!1):!0}async loadScopedById(e,r,n){let s=(await this.options.pool.query(`SELECT project_id FROM ${n.table} WHERE id = $1 AND team_id = $2`,[n.id,n.teamId])).rows[0];if(!s)return r.status(404).json({error:"NotFound",message:n.notFound}),null;if(n.scopeMismatch==="not-found"){if(e.authContext?.projectId&&e.authContext.projectId!==s.project_id)return r.status(404).json({error:"NotFound",message:n.notFound}),null}else if(!this.ensureProjectAllowed(e,r,s.project_id))return null;let o=await n.load(s.project_id);return o||(r.status(404).json({error:"NotFound",message:n.notFound}),null)}async deleteObservationForScope(e,r,n){let i=new cc(this.options.pool);return n?i.deleteObservation({id:e,projectId:n,teamId:r}):((await this.options.pool.query("DELETE FROM observations WHERE id = $1 AND team_id = $2",[e,r])).rowCount??0)>0}handleDbError(e,r,n){let i=e instanceof Error?e.message:String(e);if(i.includes("project_id must belong to team_id")||i.includes("server_session_id must belong")||i.includes("agent_event source_id must belong")){r.status(403).json({error:"Forbidden",message:i});return}x.error("SYSTEM",`${n} failed`,{error:i}),r.status(500).json({error:"InternalError",message:"Failed to persist event"})}async auditWrite(e,r,n,i,s){let o=new Nt(this.options.pool),a=await this.resolveActorId(e),c={...e.requestId?{requestId:e.requestId}:{},...s??{}},l={teamId:e.authContext?.teamId??null,projectId:i??e.authContext?.projectId??null,actorId:a,apiKeyId:e.authContext?.apiKeyId??null,action:r,resourceType:sbe(r),resourceId:n,details:c};try{await o.createAuditLog(l)}catch(u){x.warn("SYSTEM","audit log insert failed",{action:r,requestId:e.requestId??null,error:u instanceof Error?u.message:String(u)})}}async listJobsForScope(e){let r=[e.teamId],n="WHERE team_id = $1";e.projectId&&(r.push(e.projectId),n+=` AND project_id = $${r.length}`),e.status&&(r.push(e.status),n+=` AND status = $${r.length}`),e.sourceType&&(r.push(e.sourceType),n+=` AND source_type = $${r.length}`),e.since&&(r.push(e.since),n+=` AND created_at >= $${r.length}`);let i=await this.options.pool.query(`SELECT COUNT(*)::text AS total FROM observation_generation_jobs ${n}`,r),s=Number.parseInt(i.rows[0]?.total??"0",10);r.push(e.limit,e.offset);let o=r.length-1,a=r.length;return{jobs:(await this.options.pool.query(`
|
||
SELECT id, project_id, team_id, source_type, source_id, status, attempts,
|
||
max_attempts, created_at, completed_at, failed_at, last_error, payload
|
||
FROM observation_generation_jobs
|
||
${n}
|
||
ORDER BY created_at DESC
|
||
LIMIT $${o} OFFSET $${a}
|
||
`,r)).rows,total:s}}async retryGenerationJob(e,r,n,i){if(!n)return r.status(400).json({error:"ValidationError",message:"job id required"}),null;let s=new dt(this.options.pool),o=await this.loadScopedById(e,r,{id:n,teamId:i,table:"observation_generation_jobs",notFound:"Generation job not found",scopeMismatch:"not-found",load:b=>s.getByIdForScope({id:n,projectId:b,teamId:i})});if(!o)return null;if(o.status==="queued")return await this.auditWrite(e,"generation_job.retried_by_operator",o.id,o.projectId,{outcome:"noop_already_queued",currentAttempts:o.attempts,requestId:e.requestId??null}),{job:o,retriedCount:j$(o.payload),alreadyQueued:!0};if(o.status==="processing")return r.status(409).json({error:"Conflict",message:"Generation job is currently processing; cancel or wait for completion before retrying"}),null;if(o.status==="completed")return r.status(409).json({error:"Conflict",message:"Generation job already completed; retrying would duplicate observations"}),null;let a=j$(o.payload)+1,c=o.payload&&typeof o.payload=="object"?o.payload:{},l={...c,retried_count:a,last_retried_by_actor:e.authContext?.apiKeyId??null,last_retried_request_id:e.requestId??null},u={...c,request_id:e.requestId??c.request_id??null},p=(await this.options.pool.query(`
|
||
UPDATE observation_generation_jobs
|
||
SET status = 'queued',
|
||
locked_at = NULL,
|
||
locked_by = NULL,
|
||
failed_at = NULL,
|
||
cancelled_at = NULL,
|
||
completed_at = NULL,
|
||
last_error = NULL,
|
||
attempts = LEAST(attempts, max_attempts - 1),
|
||
payload = $4::jsonb,
|
||
updated_at = now()
|
||
WHERE id = $1 AND project_id = $2 AND team_id = $3
|
||
RETURNING *
|
||
`,[n,o.projectId,i,JSON.stringify(l)])).rows[0];if(!p)return r.status(404).json({error:"NotFound",message:"Generation job not found"}),null;await new Wt(this.options.pool).append({generationJobId:n,projectId:o.projectId,teamId:i,eventType:"queued",statusAfter:"queued",attempt:p.attempts,details:{source:"operator_retry",requestId:e.requestId??null,retriedCount:a}});let m=this.resolveEventQueueForRetry(p);if(m&&p)try{let b=p.bullmq_job_id;if(b){try{await m.remove(b)}catch{}await m.add(b,u)}}catch(b){x.warn("SYSTEM","failed to re-enqueue generation job on operator retry",{jobId:n,requestId:e.requestId??null,error:b instanceof Error?b.message:String(b)})}let y=await s.getByIdForScope({id:n,projectId:o.projectId,teamId:i});return y?(await this.auditWrite(e,"generation_job.retried_by_operator",y.id,y.projectId,{previousStatus:o.status,currentStatus:y.status,retriedCount:a,requestId:e.requestId??null}),{job:y,retriedCount:a,alreadyQueued:!1}):(r.status(404).json({error:"NotFound",message:"Generation job not found"}),null)}async cancelGenerationJob(e,r,n,i){if(!n)return r.status(400).json({error:"ValidationError",message:"job id required"}),null;let s=new dt(this.options.pool),o=await this.loadScopedById(e,r,{id:n,teamId:i,table:"observation_generation_jobs",notFound:"Generation job not found",scopeMismatch:"not-found",load:p=>s.getByIdForScope({id:n,projectId:p,teamId:i})});if(!o)return null;if(o.status==="cancelled")return await this.auditWrite(e,"generation_job.cancelled_by_operator",o.id,o.projectId,{outcome:"noop_already_cancelled",requestId:e.requestId??null}),{job:o,alreadyCancelled:!0};if(o.status==="completed")return r.status(409).json({error:"Conflict",message:"Generation job already completed; cannot cancel"}),null;let c=(await this.options.pool.query(`
|
||
UPDATE observation_generation_jobs
|
||
SET status = 'cancelled',
|
||
cancelled_at = now(),
|
||
updated_at = now()
|
||
WHERE id = $1 AND project_id = $2 AND team_id = $3
|
||
RETURNING *
|
||
`,[n,o.projectId,i])).rows[0];if(!c)return r.status(404).json({error:"NotFound",message:"Generation job not found"}),null;await new Wt(this.options.pool).append({generationJobId:n,projectId:o.projectId,teamId:i,eventType:"cancelled",statusAfter:"cancelled",attempt:c.attempts,details:{source:"operator_cancel",requestId:e.requestId??null}});let u=this.resolveEventQueueForRetry(c);if(u){let p=c.bullmq_job_id;if(p)try{await u.remove(p)}catch{}}let d=await s.getByIdForScope({id:n,projectId:o.projectId,teamId:i});return d?(await this.auditWrite(e,"generation_job.cancelled_by_operator",d.id,d.projectId,{previousStatus:o.status,currentStatus:d.status,requestId:e.requestId??null}),{job:d,alreadyCancelled:!1}):(r.status(404).json({error:"NotFound",message:"Generation job not found"}),null)}resolveEventQueueForRetry(e){let r=e.source_type==="session_summary"?"summary":"event",n=this.resolveQueue(r);return n||null}routeParam(e){return Array.isArray(e)?e[0]??"":e??""}handleCreate(e,r){return this.asyncHandler(async(n,i)=>{let s=e.safeParse(n.body);if(!s.success){i.status(400).json({error:"ValidationError",issues:s.error.issues});return}await r(n,i,s.data)})}asyncHandler(e){return(r,n,i)=>{Promise.resolve(e(r,n)).catch(i)}}},nbe=new Set(["agent_event","session_summary","observation_reindex"]);M$=new Set(["queued","processing","completed","failed","cancelled"]),N$=50,L$=200});async function PI(t){let e=new zt(t.pool),r=t.platformSource?ps(t.platformSource):null,n=await e.findByExternalIdForScope({externalSessionId:t.contentSessionId,projectId:t.projectId,teamId:t.teamId,platformSource:r});if(n)return{id:n.id,projectId:n.projectId,teamId:n.teamId};let i={projectId:t.projectId,teamId:t.teamId,externalSessionId:t.contentSessionId,contentSessionId:t.contentSessionId,agentId:t.agentId,agentType:t.agentType,platformSource:r};try{let s=await e.create(i);return{id:s.id,projectId:s.projectId,teamId:s.teamId}}catch(s){if((s instanceof Error?s:new Error(String(s))).code==="23505"){let a=await e.findByExternalIdForScope({externalSessionId:t.contentSessionId,projectId:t.projectId,teamId:t.teamId,platformSource:r});if(a)return{id:a.id,projectId:a.projectId,teamId:a.teamId}}throw s}}var ln,F$,cbe,lbe,Rh,KI=R(()=>{"use strict";ln=require("zod");js();fe();Kf();So();F$="claude-code-compat",cbe="tool_use",lbe=ln.z.object({contentSessionId:ln.z.string().min(1),tool_name:ln.z.string().min(1),tool_input:ln.z.unknown().optional(),tool_response:ln.z.unknown().optional(),cwd:ln.z.string().optional(),agentId:ln.z.string().optional(),agentType:ln.z.string().optional(),platformSource:ln.z.string().optional(),tool_use_id:ln.z.string().optional(),toolUseId:ln.z.string().optional()}).passthrough(),Rh=class{constructor(e){this.options=e}options;setupRoutes(e){let r=wo(this.options.pool,{authMode:this.options.authMode,allowLocalDevBypass:this.options.allowLocalDevBypass,requiredScopes:["memories:write"]});e.post("/api/sessions/observations",r,this.asyncHandler(async(n,i)=>{let s=lbe.safeParse(n.body);if(!s.success){i.status(400).json({error:"ValidationError",issues:s.error.issues});return}let o=n.authContext?.teamId??null,a=n.authContext?.projectId??null;if(!o){i.status(403).json({error:"Forbidden",message:"API key is not bound to a team"});return}if(!a){i.status(400).json({error:"BadRequest",message:"Legacy /api/sessions/observations requires a project-scoped API key"});return}try{await this.ingestCompatObservation(n,i,s.data,o,a)}catch(c){x.error("SYSTEM","compat observations adapter failed",{error:c instanceof Error?c.message:String(c),contentSessionId:s.data.contentSessionId}),i.status(500).json({stored:!1,reason:"internal_error"})}}))}async ingestCompatObservation(e,r,n,i,s){let o=ps(typeof n.platformSource=="string"?n.platformSource:Ya),a=await PI({pool:this.options.pool,teamId:i,projectId:s,contentSessionId:n.contentSessionId,platformSource:o,agentId:typeof n.agentId=="string"?n.agentId:null,agentType:typeof n.agentType=="string"?n.agentType:null}),c=typeof n.tool_use_id=="string"?n.tool_use_id:typeof n.toolUseId=="string"?n.toolUseId:null,l={projectId:s,teamId:i,serverSessionId:a.id,sourceAdapter:F$,sourceEventId:c,eventType:cbe,platformSource:o,payload:{contentSessionId:n.contentSessionId,tool_name:n.tool_name,tool_input:n.tool_input??null,tool_response:n.tool_response??null,cwd:n.cwd??null,platformSource:o,agentId:n.agentId??null,agentType:n.agentType??null,toolUseId:c},metadata:{compat:"sessions/observations"},occurredAt:new Date},u=await this.options.ingestEvents.ingestOne(l,{source:"http_post_api_sessions_observations",apiKeyId:e.authContext?.apiKeyId??null,actorId:null,sourceAdapter:F$});r.json({status:"queued",observationCount:1,sessionId:a.id,serverSessionId:a.id,eventId:u.event.id,generationJobId:u.outbox?.id??null,transport:u.enqueueState})}asyncHandler(e){return(r,n,i)=>{Promise.resolve(e(r,n)).catch(i)}}}});var qc,ube,Oh,$$=R(()=>{"use strict";qc=require("zod");js();fe();Kf();KI();So();ube=qc.z.object({contentSessionId:qc.z.string().min(1),last_assistant_message:qc.z.string().optional(),agentId:qc.z.string().optional(),platformSource:qc.z.string().optional()}).passthrough(),Oh=class{constructor(e){this.options=e}options;setupRoutes(e){let r=wo(this.options.pool,{authMode:this.options.authMode,allowLocalDevBypass:this.options.allowLocalDevBypass,requiredScopes:["memories:write"]});e.post("/api/sessions/summarize",r,this.asyncHandler(async(n,i)=>{let s=ube.safeParse(n.body);if(!s.success){i.status(400).json({error:"ValidationError",issues:s.error.issues});return}let o=n.authContext?.teamId??null,a=n.authContext?.projectId??null;if(!o){i.status(403).json({error:"Forbidden",message:"API key is not bound to a team"});return}if(!a){i.status(400).json({error:"BadRequest",message:"Legacy /api/sessions/summarize requires a project-scoped API key"});return}if(s.data.agentId){i.json({status:"skipped",reason:"subagent_context"});return}try{await this.summarizeSession(n,i,s.data,o,a)}catch(c){x.error("SYSTEM","compat summarize adapter failed",{error:c instanceof Error?c.message:String(c),contentSessionId:s.data.contentSessionId}),i.status(500).json({status:"error",reason:"internal_error"})}}))}async summarizeSession(e,r,n,i,s){let o=ps(typeof n.platformSource=="string"?n.platformSource:Ya),a=await PI({pool:this.options.pool,teamId:i,projectId:s,contentSessionId:n.contentSessionId,platformSource:o,agentId:null,agentType:null}),c=await this.options.endSession.end({sessionId:a.id,projectId:s,teamId:i,source:"http_post_api_sessions_summarize",apiKeyId:e.authContext?.apiKeyId??null,actorId:null,sourceAdapter:"claude-code-compat"});if(!c.session){r.status(404).json({status:"not_found",reason:"session_not_found"});return}r.json({status:"queued",sessionId:a.id,serverSessionId:a.id,generationJobId:c.outbox?.id??null,transport:c.enqueueState})}asyncHandler(e){return(r,n,i)=>{Promise.resolve(e(r,n)).catch(i)}}}});var rr={};io(rr,{__addDisposableResource:()=>p8,__assign:()=>Ch,__asyncDelegator:()=>i8,__asyncGenerator:()=>n8,__asyncValues:()=>s8,__await:()=>Fc,__awaiter:()=>Q$,__classPrivateFieldGet:()=>l8,__classPrivateFieldIn:()=>d8,__classPrivateFieldSet:()=>u8,__createBinding:()=>Ph,__decorate:()=>z$,__disposeResources:()=>f8,__esDecorate:()=>B$,__exportStar:()=>Z$,__extends:()=>U$,__generator:()=>X$,__importDefault:()=>c8,__importStar:()=>a8,__makeTemplateObject:()=>o8,__metadata:()=>Y$,__param:()=>G$,__propKey:()=>V$,__read:()=>NI,__rest:()=>J$,__rewriteRelativeImportExtension:()=>m8,__runInitializers:()=>H$,__setFunctionName:()=>W$,__spread:()=>e8,__spreadArray:()=>r8,__spreadArrays:()=>t8,__values:()=>jh,default:()=>fbe});function U$(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");DI(t,e);function r(){this.constructor=t}t.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function J$(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(t);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(t,n[i])&&(r[n[i]]=t[n[i]]);return r}function z$(t,e,r,n){var i=arguments.length,s=i<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,r):n,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(t,e,r,n);else for(var a=t.length-1;a>=0;a--)(o=t[a])&&(s=(i<3?o(s):i>3?o(e,r,s):o(e,r))||s);return i>3&&s&&Object.defineProperty(e,r,s),s}function G$(t,e){return function(r,n){e(r,n,t)}}function B$(t,e,r,n,i,s){function o(v){if(v!==void 0&&typeof v!="function")throw new TypeError("Function expected");return v}for(var a=n.kind,c=a==="getter"?"get":a==="setter"?"set":"value",l=!e&&t?n.static?t:t.prototype:null,u=e||(l?Object.getOwnPropertyDescriptor(l,n.name):{}),d,p=!1,f=r.length-1;f>=0;f--){var m={};for(var y in n)m[y]=y==="access"?{}:n[y];for(var y in n.access)m.access[y]=n.access[y];m.addInitializer=function(v){if(p)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(v||null))};var b=(0,r[f])(a==="accessor"?{get:u.get,set:u.set}:u[c],m);if(a==="accessor"){if(b===void 0)continue;if(b===null||typeof b!="object")throw new TypeError("Object expected");(d=o(b.get))&&(u.get=d),(d=o(b.set))&&(u.set=d),(d=o(b.init))&&i.unshift(d)}else(d=o(b))&&(a==="field"?i.unshift(d):u[c]=d)}l&&Object.defineProperty(l,n.name,u),p=!0}function H$(t,e,r){for(var n=arguments.length>2,i=0;i<e.length;i++)r=n?e[i].call(t,r):e[i].call(t);return n?r:void 0}function V$(t){return typeof t=="symbol"?t:"".concat(t)}function W$(t,e,r){return typeof e=="symbol"&&(e=e.description?"[".concat(e.description,"]"):""),Object.defineProperty(t,"name",{configurable:!0,value:r?"".concat(r," ",e):e})}function Y$(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)}function Q$(t,e,r,n){function i(s){return s instanceof r?s:new r(function(o){o(s)})}return new(r||(r=Promise))(function(s,o){function a(u){try{l(n.next(u))}catch(d){o(d)}}function c(u){try{l(n.throw(u))}catch(d){o(d)}}function l(u){u.done?s(u.value):i(u.value).then(a,c)}l((n=n.apply(t,e||[])).next())})}function X$(t,e){var r={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},n,i,s,o=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return o.next=a(0),o.throw=a(1),o.return=a(2),typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,l[0]&&(r=0)),r;)try{if(n=1,i&&(s=l[0]&2?i.return:l[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,l[1])).done)return s;switch(i=0,s&&(l=[l[0]&2,s.value]),l[0]){case 0:case 1:s=l;break;case 4:return r.label++,{value:l[1],done:!1};case 5:r.label++,i=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(s=r.trys,!(s=s.length>0&&s[s.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!s||l[1]>s[0]&&l[1]<s[3])){r.label=l[1];break}if(l[0]===6&&r.label<s[1]){r.label=s[1],s=l;break}if(s&&r.label<s[2]){r.label=s[2],r.ops.push(l);break}s[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}catch(u){l=[6,u],i=0}finally{n=s=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}function Z$(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ph(e,t,r)}function jh(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function NI(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),i,s=[],o;try{for(;(e===void 0||e-- >0)&&!(i=n.next()).done;)s.push(i.value)}catch(a){o={error:a}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(o)throw o.error}}return s}function e8(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(NI(arguments[e]));return t}function t8(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;for(var n=Array(t),i=0,e=0;e<r;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,i++)n[i]=s[o];return n}function r8(t,e,r){if(r||arguments.length===2)for(var n=0,i=e.length,s;n<i;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return t.concat(s||Array.prototype.slice.call(e))}function Fc(t){return this instanceof Fc?(this.v=t,this):new Fc(t)}function n8(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),i,s=[];return i=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",o),i[Symbol.asyncIterator]=function(){return this},i;function o(f){return function(m){return Promise.resolve(m).then(f,d)}}function a(f,m){n[f]&&(i[f]=function(y){return new Promise(function(b,v){s.push([f,y,b,v])>1||c(f,y)})},m&&(i[f]=m(i[f])))}function c(f,m){try{l(n[f](m))}catch(y){p(s[0][3],y)}}function l(f){f.value instanceof Fc?Promise.resolve(f.value.v).then(u,d):p(s[0][2],f)}function u(f){c("next",f)}function d(f){c("throw",f)}function p(f,m){f(m),s.shift(),s.length&&c(s[0][0],s[0][1])}}function i8(t){var e,r;return e={},n("next"),n("throw",function(i){throw i}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(i,s){e[i]=t[i]?function(o){return(r=!r)?{value:Fc(t[i](o)),done:!1}:s?s(o):o}:s}}function s8(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof jh=="function"?jh(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(s){r[s]=t[s]&&function(o){return new Promise(function(a,c){o=t[s](o),i(a,c,o.done,o.value)})}}function i(s,o,a,c){Promise.resolve(c).then(function(l){s({value:l,done:a})},o)}}function o8(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}function a8(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r=MI(t),n=0;n<r.length;n++)r[n]!=="default"&&Ph(e,t,r[n]);return dbe(e,t),e}function c8(t){return t&&t.__esModule?t:{default:t}}function l8(t,e,r,n){if(r==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?n:r==="a"?n.call(t):n?n.value:e.get(t)}function u8(t,e,r,n,i){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?i.call(t,r):i?i.value=r:e.set(t,r),r}function d8(t,e){if(e===null||typeof e!="object"&&typeof e!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof t=="function"?e===t:t.has(e)}function p8(t,e,r){if(e!=null){if(typeof e!="object"&&typeof e!="function")throw new TypeError("Object expected.");var n,i;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=e[Symbol.asyncDispose]}if(n===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=e[Symbol.dispose],r&&(i=n)}if(typeof n!="function")throw new TypeError("Object not disposable.");i&&(n=function(){try{i.call(this)}catch(s){return Promise.reject(s)}}),t.stack.push({value:e,dispose:n,async:r})}else r&&t.stack.push({async:!0});return e}function f8(t){function e(s){t.error=t.hasError?new pbe(s,t.error,"An error was suppressed during disposal."):s,t.hasError=!0}var r,n=0;function i(){for(;r=t.stack.pop();)try{if(!r.async&&n===1)return n=0,t.stack.push(r),Promise.resolve().then(i);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(i,function(o){return e(o),i()})}else n|=1}catch(o){e(o)}if(n===1)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}return i()}function m8(t,e){return typeof t=="string"&&/^\.\.?\//.test(t)?t.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(r,n,i,s,o){return n?e?".jsx":".js":i&&(!s||!o)?r:i+s+"."+o.toLowerCase()+"js"}):t}var DI,Ch,Ph,dbe,MI,pbe,fbe,nr=R(()=>{DI=function(t,e){return DI=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},DI(t,e)};Ch=function(){return Ch=Object.assign||function(e){for(var r,n=1,i=arguments.length;n<i;n++){r=arguments[n];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},Ch.apply(this,arguments)};Ph=Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]});dbe=Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e},MI=function(t){return MI=Object.getOwnPropertyNames||function(e){var r=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[r.length]=n);return r},MI(t)};pbe=typeof SuppressedError=="function"?SuppressedError:function(t,e,r){var n=new Error(r);return n.name="SuppressedError",n.error=t,n.suppressed=e,n};fbe={__extends:U$,__assign:Ch,__rest:J$,__decorate:z$,__param:G$,__esDecorate:B$,__runInitializers:H$,__propKey:V$,__setFunctionName:W$,__metadata:Y$,__awaiter:Q$,__generator:X$,__createBinding:Ph,__exportStar:Z$,__values:jh,__read:NI,__spread:e8,__spreadArrays:t8,__spreadArray:r8,__await:Fc,__asyncGenerator:n8,__asyncDelegator:i8,__asyncValues:s8,__makeTemplateObject:o8,__importStar:a8,__importDefault:c8,__classPrivateFieldGet:l8,__classPrivateFieldSet:u8,__classPrivateFieldIn:d8,__addDisposableResource:p8,__disposeResources:f8,__rewriteRelativeImportExtension:m8}});var $I=h(Kh=>{"use strict";Object.defineProperty(Kh,"__esModule",{value:!0});Kh.AsyncFifoQueue=void 0;var LI=class{constructor(e){this.value=void 0,this.next=null,this.value=e}},qI=class{constructor(){this.length=0,this.head=null,this.tail=null}push(e){let r=new LI(e);return this.length?this.tail.next=r:this.head=r,this.tail=r,this.length+=1,r}shift(){if(this.length){let e=this.head;return this.head=this.head.next,this.length-=1,e}else return null}},FI=class{constructor(e=!1){this.ignoreErrors=e,this.queue=new qI,this.pending=new Set,this.newPromise()}add(e){this.pending.add(e),e.then(r=>{this.pending.delete(e),this.queue.length===0&&this.resolvePromise(r),this.queue.push(r)}).catch(r=>{this.ignoreErrors&&this.queue.push(void 0),this.pending.delete(e),this.rejectPromise(r)})}async waitAll(){await Promise.all(this.pending)}numTotal(){return this.pending.size+this.queue.length}numPending(){return this.pending.size}numQueued(){return this.queue.length}resolvePromise(e){this.resolve(e),this.newPromise()}rejectPromise(e){this.reject(e),this.newPromise()}newPromise(){this.nextPromise=new Promise((e,r)=>{this.resolve=e,this.reject=r})}async wait(){return this.nextPromise}async fetch(){var e;if(!(this.pending.size===0&&this.queue.length===0)){for(;this.queue.length===0;)try{await this.wait()}catch(r){this.ignoreErrors||console.error("Unexpected Error in AsyncFifoQueue",r)}return(e=this.queue.shift())===null||e===void 0?void 0:e.value}}};Kh.AsyncFifoQueue=FI});var UI=h(Dh=>{"use strict";Object.defineProperty(Dh,"__esModule",{value:!0});Dh.Backoffs=void 0;var $c=class{static normalize(e){if(Number.isFinite(e))return{type:"fixed",delay:e};if(e)return e}static calculate(e,r,n,i,s){if(e)return mbe(e,s)(r,e.type,n,i)}};Dh.Backoffs=$c;$c.builtinStrategies={fixed:function(t,e=0){return function(){if(e>0){let r=t*(1-e);return Math.floor(Math.random()*t*e+r)}else return t}},exponential:function(t,e=0){return function(r){if(e>0){let n=Math.round(Math.pow(2,r-1)*t),i=n*(1-e);return Math.floor(Math.random()*n*e+i)}else return Math.round(Math.pow(2,r-1)*t)}}};function mbe(t,e){if(t.type in $c.builtinStrategies)return $c.builtinStrategies[t.type](t.delay,t.jitter);if(e)return e;throw new Error(`Unknown backoff strategy ${t.type}.
|
||
If a custom backoff strategy is used, specify it when the queue is created.`)}});var y8=h(Mh=>{"use strict";Object.defineProperty(Mh,"__esModule",{value:!0});Mh.ChildCommand=void 0;var h8;(function(t){t[t.Init=0]="Init",t[t.Start=1]="Start",t[t.Stop=2]="Stop",t[t.GetChildrenValuesResponse=3]="GetChildrenValuesResponse",t[t.GetIgnoredChildrenFailuresResponse=4]="GetIgnoredChildrenFailuresResponse",t[t.GetDependenciesCountResponse=5]="GetDependenciesCountResponse",t[t.MoveToWaitingChildrenResponse=6]="MoveToWaitingChildrenResponse",t[t.Cancel=7]="Cancel",t[t.GetDependenciesResponse=8]="GetDependenciesResponse"})(h8||(Mh.ChildCommand=h8={}))});var b8=h(Nh=>{"use strict";Object.defineProperty(Nh,"__esModule",{value:!0});Nh.ErrorCode=void 0;var g8;(function(t){t[t.JobNotExist=-1]="JobNotExist",t[t.JobLockNotExist=-2]="JobLockNotExist",t[t.JobNotInState=-3]="JobNotInState",t[t.JobPendingChildren=-4]="JobPendingChildren",t[t.ParentJobNotExist=-5]="ParentJobNotExist",t[t.JobLockMismatch=-6]="JobLockMismatch",t[t.ParentJobCannotBeReplaced=-7]="ParentJobCannotBeReplaced",t[t.JobBelongsToJobScheduler=-8]="JobBelongsToJobScheduler",t[t.JobHasFailedChildren=-9]="JobHasFailedChildren",t[t.SchedulerJobIdCollision=-10]="SchedulerJobIdCollision",t[t.SchedulerJobSlotsBusy=-11]="SchedulerJobSlotsBusy"})(g8||(Nh.ErrorCode=g8={}))});var E8=h(Lh=>{"use strict";Object.defineProperty(Lh,"__esModule",{value:!0});Lh.ParentCommand=void 0;var v8;(function(t){t[t.Completed=0]="Completed",t[t.Error=1]="Error",t[t.Failed=2]="Failed",t[t.InitFailed=3]="InitFailed",t[t.InitCompleted=4]="InitCompleted",t[t.Log=5]="Log",t[t.MoveToDelayed=6]="MoveToDelayed",t[t.MoveToWait=7]="MoveToWait",t[t.Progress=8]="Progress",t[t.Update=9]="Update",t[t.GetChildrenValues=10]="GetChildrenValues",t[t.GetIgnoredChildrenFailures=11]="GetIgnoredChildrenFailures",t[t.GetDependenciesCount=12]="GetDependenciesCount",t[t.MoveToWaitingChildren=13]="MoveToWaitingChildren",t[t.GetDependencies=14]="GetDependencies"})(v8||(Lh.ParentCommand=v8={}))});var x8=h(qh=>{"use strict";Object.defineProperty(qh,"__esModule",{value:!0});qh.MetricsTime=void 0;var S8;(function(t){t[t.ONE_MINUTE=1]="ONE_MINUTE",t[t.FIVE_MINUTES=5]="FIVE_MINUTES",t[t.FIFTEEN_MINUTES=15]="FIFTEEN_MINUTES",t[t.THIRTY_MINUTES=30]="THIRTY_MINUTES",t[t.ONE_HOUR=60]="ONE_HOUR",t[t.ONE_WEEK=10080]="ONE_WEEK",t[t.TWO_WEEKS=20160]="TWO_WEEKS",t[t.ONE_MONTH=80640]="ONE_MONTH"})(S8||(qh.MetricsTime=S8={}))});var T8=h(Ps=>{"use strict";Object.defineProperty(Ps,"__esModule",{value:!0});Ps.SpanKind=Ps.MetricNames=Ps.TelemetryAttributes=void 0;var w8;(function(t){t.QueueName="bullmq.queue.name",t.QueueOperation="bullmq.queue.operation",t.BulkCount="bullmq.job.bulk.count",t.BulkNames="bullmq.job.bulk.names",t.JobName="bullmq.job.name",t.JobId="bullmq.job.id",t.JobKey="bullmq.job.key",t.JobIds="bullmq.job.ids",t.JobAttemptsMade="bullmq.job.attempts.made",t.DeduplicationKey="bullmq.job.deduplication.key",t.JobOptions="bullmq.job.options",t.JobProgress="bullmq.job.progress",t.QueueDrainDelay="bullmq.queue.drain.delay",t.QueueGrace="bullmq.queue.grace",t.QueueCleanLimit="bullmq.queue.clean.limit",t.QueueRateLimit="bullmq.queue.rate.limit",t.JobType="bullmq.job.type",t.QueueOptions="bullmq.queue.options",t.QueueEventMaxLength="bullmq.queue.event.max.length",t.QueueJobsState="bullmq.queue.jobs.state",t.WorkerOptions="bullmq.worker.options",t.WorkerName="bullmq.worker.name",t.WorkerId="bullmq.worker.id",t.WorkerRateLimit="bullmq.worker.rate.limit",t.WorkerDoNotWaitActive="bullmq.worker.do.not.wait.active",t.WorkerForceClose="bullmq.worker.force.close",t.WorkerStalledJobs="bullmq.worker.stalled.jobs",t.WorkerFailedJobs="bullmq.worker.failed.jobs",t.WorkerJobsToExtendLocks="bullmq.worker.jobs.to.extend.locks",t.JobFinishedTimestamp="bullmq.job.finished.timestamp",t.JobAttemptFinishedTimestamp="bullmq.job.attempt_finished_timestamp",t.JobProcessedTimestamp="bullmq.job.processed.timestamp",t.JobResult="bullmq.job.result",t.JobFailedReason="bullmq.job.failed.reason",t.FlowName="bullmq.flow.name",t.JobSchedulerId="bullmq.job.scheduler.id",t.JobStatus="bullmq.job.status",t.JobState="bullmq.job.state"})(w8||(Ps.TelemetryAttributes=w8={}));var _8;(function(t){t.QueueJobsCount="bullmq.queue.jobs",t.JobsCompleted="bullmq.jobs.completed",t.JobsFailed="bullmq.jobs.failed",t.JobsDelayed="bullmq.jobs.delayed",t.JobsRetried="bullmq.jobs.retried",t.JobsWaiting="bullmq.jobs.waiting",t.JobsWaitingChildren="bullmq.jobs.waiting_children",t.JobDuration="bullmq.job.duration"})(_8||(Ps.MetricNames=_8={}));var I8;(function(t){t[t.INTERNAL=0]="INTERNAL",t[t.SERVER=1]="SERVER",t[t.CLIENT=2]="CLIENT",t[t.PRODUCER=3]="PRODUCER",t[t.CONSUMER=4]="CONSUMER"})(I8||(Ps.SpanKind=I8={}))});var _r=h(Jo=>{"use strict";Object.defineProperty(Jo,"__esModule",{value:!0});var pd=(nr(),Pt(rr));pd.__exportStar(y8(),Jo);pd.__exportStar(b8(),Jo);pd.__exportStar(E8(),Jo);pd.__exportStar(x8(),Jo);pd.__exportStar(T8(),Jo)});var zI=h($h=>{"use strict";Object.defineProperty($h,"__esModule",{value:!0});$h.Child=void 0;var hbe=require("child_process"),ybe=require("net"),gbe=require("worker_threads"),Fh=_r(),bbe=require("events"),vbe={1:"Uncaught Fatal Exception",2:"Unused",3:"Internal JavaScript Parse Error",4:"Internal JavaScript Evaluation Failure",5:"Fatal Error",6:"Non-function Internal Exception Handler",7:"Internal Exception Handler Run-Time Failure",8:"Unused",9:"Invalid Argument",10:"Internal JavaScript Run-Time Failure",12:"Invalid Debug Argument",13:"Unfinished Top-Level Await"},JI=class extends bbe.EventEmitter{constructor(e,r,n={useWorkerThreads:!1}){super(),this.mainFile=e,this.processFile=r,this.opts=n,this._exitCode=null,this._signalCode=null,this._killed=!1}get pid(){if(this.childProcess)return this.childProcess.pid;if(this.worker)return Math.abs(this.worker.threadId);throw new Error("No child process or worker thread")}get exitCode(){return this._exitCode}get signalCode(){return this._signalCode}get killed(){return this.childProcess?this.childProcess.killed:this._killed}async init(){var e,r;let n=await xbe(process.execArgv),i;this.opts.useWorkerThreads?this.worker=i=new gbe.Worker(this.mainFile,Object.assign({execArgv:n,stdin:!0,stdout:!0,stderr:!0},this.opts.workerThreadsOptions?this.opts.workerThreadsOptions:{})):this.childProcess=i=(0,hbe.fork)(this.mainFile,[],Object.assign({execArgv:n,stdio:"pipe"},this.opts.workerForkOptions?this.opts.workerForkOptions:{})),i.on("exit",(s,o)=>{this._exitCode=s,o=typeof o>"u"?null:o,this._signalCode=o,this._killed=!0,this.emit("exit",s,o),i.removeAllListeners(),this.removeAllListeners()}),i.on("error",(...s)=>this.emit("error",...s)),i.on("message",(...s)=>this.emit("message",...s)),i.on("close",(...s)=>this.emit("close",...s)),(e=i.stdout)===null||e===void 0||e.pipe(process.stdout),(r=i.stderr)===null||r===void 0||r.pipe(process.stderr),await this.initChild()}async send(e){return new Promise((r,n)=>{this.childProcess?this.childProcess.send(e,i=>{i?n(i):r()}):this.worker?r(this.worker.postMessage(e)):r()})}killProcess(e="SIGKILL"){this.childProcess?this.childProcess.kill(e):this.worker&&this.worker.terminate()}async kill(e="SIGKILL",r){if(this.hasProcessExited())return;let n=Ebe(this.childProcess||this.worker);if(this.killProcess(e),r!==void 0&&(r===0||isFinite(r))){let i=setTimeout(()=>{this.hasProcessExited()||this.killProcess("SIGKILL")},r);await n,clearTimeout(i)}await n}async initChild(){let e=new Promise((r,n)=>{let i=o=>{if(Object.values(Fh.ParentCommand).includes(o.cmd)){if(o.cmd===Fh.ParentCommand.InitCompleted)r();else if(o.cmd===Fh.ParentCommand.InitFailed){let a=new Error;a.stack=o.err.stack,a.message=o.err.message,n(a)}this.off("message",i),this.off("close",s)}},s=(o,a)=>{o>128&&(o-=128);let c=vbe[o]||`Unknown exit code ${o}`;n(new Error(`Error initializing child: ${c} and signal ${a}`)),this.off("message",i),this.off("close",s)};this.on("message",i),this.on("close",s)});await this.send({cmd:Fh.ChildCommand.Init,value:this.processFile}),await e}hasProcessExited(){return!!(this.exitCode!==null||this.signalCode)}};$h.Child=JI;function Ebe(t){return new Promise(e=>{t.once("exit",()=>e())})}var Sbe=async()=>new Promise(t=>{let e=(0,ybe.createServer)();e.listen(0,()=>{let{port:r}=e.address();e.close(()=>t(r))})}),xbe=async t=>{let e=[],r=[];for(let n=0;n<t.length;n++){let i=t[n];if(i.indexOf("--inspect")===-1)e.push(i);else{let s=i.split("=")[0],o=await Sbe();r.push(`${s}=${o}`)}}return e.concat(r)}});var HI=h((Uh,BI)=>{"use strict";Object.defineProperty(Uh,"__esModule",{value:!0});Uh.ChildPool=void 0;var k8=require("path"),wbe=zI(),_be=3e4,Ibe=()=>typeof require=="function"&&typeof BI=="object"&&typeof BI.exports=="object",GI=class{constructor({mainFile:e=Ibe()?k8.join(process.cwd(),"dist/cjs/classes/main.js"):k8.join(process.cwd(),"dist/esm/classes/main.js"),useWorkerThreads:r,workerForkOptions:n,workerThreadsOptions:i}){this.retained={},this.free={},this.opts={mainFile:e,useWorkerThreads:r,workerForkOptions:n,workerThreadsOptions:i}}async retain(e){let r=this.getFree(e).pop();if(r)return this.retained[r.pid]=r,r;r=new wbe.Child(this.opts.mainFile,e,{useWorkerThreads:this.opts.useWorkerThreads,workerForkOptions:this.opts.workerForkOptions,workerThreadsOptions:this.opts.workerThreadsOptions}),r.on("exit",this.remove.bind(this,r));try{if(await r.init(),r.exitCode!==null||r.signalCode!==null)throw new Error("Child exited before it could be retained");return this.retained[r.pid]=r,r}catch(n){if(console.error(n),r.childProcess||r.worker)try{this.kill(r,"SIGKILL").catch(i=>{console.error("Failed to kill child after init error:",i)})}catch(i){console.error("Failed to kill child after init error:",i)}throw n}}release(e){delete this.retained[e.pid],this.getFree(e.processFile).push(e)}remove(e){delete this.retained[e.pid];let r=this.getFree(e.processFile),n=r.indexOf(e);n>-1&&r.splice(n,1)}async kill(e,r="SIGKILL"){return this.remove(e),e.kill(r,_be)}async clean(){let e=Object.values(this.retained).concat(this.getAllFree());this.retained={},this.free={},await Promise.all(e.map(r=>this.kill(r,"SIGTERM")))}getFree(e){return this.free[e]=this.free[e]||[]}getAllFree(){return Object.values(this.free).reduce((e,r)=>e.concat(r),[])}};Uh.ChildPool=GI});var R8=h((AFe,A8)=>{var{EventEmitter:Tbe}=require("events"),Jh=class{constructor(){this.eventEmitter=new Tbe,this.onabort=null,this.aborted=!1,this.reason=void 0}toString(){return"[object AbortSignal]"}get[Symbol.toStringTag](){return"AbortSignal"}removeEventListener(e,r){this.eventEmitter.removeListener(e,r)}addEventListener(e,r){this.eventEmitter.on(e,r)}dispatchEvent(e){let r={type:e,target:this},n=`on${e}`;typeof this[n]=="function"&&this[n](r),this.eventEmitter.emit(e,r)}throwIfAborted(){if(this.aborted)throw this.reason}static abort(e){let r=new fd;return r.abort(),r.signal}static timeout(e){let r=new fd;return setTimeout(()=>r.abort(new Error("TimeoutError")),e),r.signal}},fd=class{constructor(){this.signal=new Jh}abort(e){this.signal.aborted||(this.signal.aborted=!0,e?this.signal.reason=e:this.signal.reason=new Error("AbortError"),this.signal.dispatchEvent("abort"))}toString(){return"[object AbortController]"}get[Symbol.toStringTag](){return"AbortController"}};A8.exports={AbortController:fd,AbortSignal:Jh}});var Gh=h(zh=>{"use strict";Object.defineProperty(zh,"__esModule",{value:!0});zh.AbortController=void 0;var kbe=R8(),VI;globalThis.AbortController?VI=globalThis.AbortController:VI=kbe.AbortController;var WI=class extends VI{};zh.AbortController=WI});var C8=h(Bh=>{"use strict";Object.defineProperty(Bh,"__esModule",{value:!0});Bh.defaults=void 0;var Abe=/^(?:0|[1-9]\d*)$/;function Rbe(t){return t==null}function O8(t,e){return t===e||Number.isNaN(t)&&Number.isNaN(e)}function Obe(t){return Number.isSafeInteger(t)&&t>=0}function Cbe(t){return t!=null&&typeof t!="function"&&Obe(t.length)}function jbe(t){return t!==null&&(typeof t=="object"||typeof t=="function")}function Pbe(t,e=Number.MAX_SAFE_INTEGER){switch(typeof t){case"number":return Number.isInteger(t)&&t>=0&&t<e;case"symbol":return!1;case"string":return Abe.test(t)}}function Kbe(t,e,r){return jbe(r)&&(typeof e=="number"&&Cbe(r)&&Pbe(e)&&e<r.length||typeof e=="string"&&e in r)?O8(r[e],t):!1}function Dbe(t,...e){t=Object(t);let r=Object.prototype,n=e.length,i=n>2?e[2]:void 0;i&&Kbe(e[0],e[1],i)&&(n=1);for(let s=0;s<n;s++){if(Rbe(e[s]))continue;let o=e[s];for(let a in o){let c=t[a];(c===void 0||!r.hasOwnProperty.call(t,a)&&O8(c,r[a]))&&(t[a]=o[a])}}return t}Bh.defaults=Dbe});var j8=h(Hh=>{"use strict";Object.defineProperty(Hh,"__esModule",{value:!0});Hh.isArguments=void 0;function Mbe(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}function Nbe(t){return t!==null&&typeof t=="object"&&Mbe(t)==="[object Arguments]"}Hh.isArguments=Nbe});var Vh=h(ni=>{"use strict";var Lbe=ni&&ni.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r),Object.defineProperty(t,n,{enumerable:!0,get:function(){return e[r]}})}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),P8=ni&&ni.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lbe(e,t,r)};Object.defineProperty(ni,"__esModule",{value:!0});ni.noop=void 0;function qbe(){}ni.noop=qbe;P8(C8(),ni);P8(j8(),ni)});var M8=h(Ui=>{"use strict";Object.defineProperty(Ui,"__esModule",{value:!0});Ui.genRedactedString=Ui.getStringValue=Ui.MAX_ARGUMENT_LENGTH=void 0;var Fbe=Tr(),YI=200;Ui.MAX_ARGUMENT_LENGTH=YI;var $be="ioredis";function K8(t){if(t!==null)switch(typeof t){case"boolean":return;case"number":return;case"object":if(Buffer.isBuffer(t))return t.toString("hex");if(Array.isArray(t))return t.join(",");try{return JSON.stringify(t)}catch{return}case"string":return t}}Ui.getStringValue=K8;function D8(t,e){let{length:r}=t;return r<=e?t:t.slice(0,e)+' ... <REDACTED full-length="'+r+'">'}Ui.genRedactedString=D8;function Ube(t){let e=(0,Fbe.default)(`${$be}:${t}`);function r(...n){if(e.enabled){for(let i=1;i<n.length;i++){let s=K8(n[i]);typeof s=="string"&&s.length>YI&&(n[i]=D8(s,YI))}return e.apply(null,n)}}return Object.defineProperties(r,{namespace:{get(){return e.namespace}},enabled:{get(){return e.enabled}},destroy:{get(){return e.destroy}},log:{get(){return e.log},set(n){e.log=n}}}),r}Ui.default=Ube});var L8=h(QI=>{"use strict";Object.defineProperty(QI,"__esModule",{value:!0});var N8=`-----BEGIN CERTIFICATE-----
|
||
MIIDTzCCAjegAwIBAgIJAKSVpiDswLcwMA0GCSqGSIb3DQEBBQUAMD4xFjAUBgNV
|
||
BAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1
|
||
dGhvcml0eTAeFw0xMzEwMDExMjE0NTVaFw0yMzA5MjkxMjE0NTVaMD4xFjAUBgNV
|
||
BAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1
|
||
dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZqkh/DczWP
|
||
JnxnHLQ7QL0T4B4CDKWBKCcisriGbA6ZePWVNo4hfKQC6JrzfR+081NeD6VcWUiz
|
||
rmd+jtPhIY4c+WVQYm5PKaN6DT1imYdxQw7aqO5j2KUCEh/cznpLxeSHoTxlR34E
|
||
QwF28Wl3eg2vc5ct8LjU3eozWVk3gb7alx9mSA2SgmuX5lEQawl++rSjsBStemY2
|
||
BDwOpAMXIrdEyP/cVn8mkvi/BDs5M5G+09j0gfhyCzRWMQ7Hn71u1eolRxwVxgi3
|
||
TMn+/vTaFSqxKjgck6zuAYjBRPaHe7qLxHNr1So/Mc9nPy+3wHebFwbIcnUojwbp
|
||
4nctkWbjb2cCAwEAAaNQME4wHQYDVR0OBBYEFP1whtcrydmW3ZJeuSoKZIKjze3w
|
||
MB8GA1UdIwQYMBaAFP1whtcrydmW3ZJeuSoKZIKjze3wMAwGA1UdEwQFMAMBAf8w
|
||
DQYJKoZIhvcNAQEFBQADggEBAG2erXhwRAa7+ZOBs0B6X57Hwyd1R4kfmXcs0rta
|
||
lbPpvgULSiB+TCbf3EbhJnHGyvdCY1tvlffLjdA7HJ0PCOn+YYLBA0pTU/dyvrN6
|
||
Su8NuS5yubnt9mb13nDGYo1rnt0YRfxN+8DM3fXIVr038A30UlPX2Ou1ExFJT0MZ
|
||
uFKY6ZvLdI6/1cbgmguMlAhM+DhKyV6Sr5699LM3zqeI816pZmlREETYkGr91q7k
|
||
BpXJu/dtHaGxg1ZGu6w/PCsYGUcECWENYD4VQPd8N32JjOfu6vEgoEAwfPP+3oGp
|
||
Z4m3ewACcWOAenqflb+cQYC4PsF7qbXDmRaWrbKntOlZ3n0=
|
||
-----END CERTIFICATE-----
|
||
-----BEGIN CERTIFICATE-----
|
||
MIIGMTCCBBmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwajELMAkGA1UEBhMCVVMx
|
||
CzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJzMS0w
|
||
KwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
||
MTgwMjI1MTUzNzM3WhcNMjgwMjIzMTUzNzM3WjBfMQswCQYDVQQGEwJVUzELMAkG
|
||
A1UECAwCQ0ExEjAQBgNVBAoMCVJlZGlzTGFiczEvMC0GA1UEAwwmUkNQIEludGVy
|
||
bWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
|
||
A4ICDwAwggIKAoICAQDf9dqbxc8Bq7Ctq9rWcxrGNKKHivqLAFpPq02yLPx6fsOv
|
||
Tq7GsDChAYBBc4v7Y2Ap9RD5Vs3dIhEANcnolf27QwrG9RMnnvzk8pCvp1o6zSU4
|
||
VuOE1W66/O1/7e2rVxyrnTcP7UgK43zNIXu7+tiAqWsO92uSnuMoGPGpeaUm1jym
|
||
hjWKtkAwDFSqvHY+XL5qDVBEjeUe+WHkYUg40cAXjusAqgm2hZt29c2wnVrxW25W
|
||
P0meNlzHGFdA2AC5z54iRiqj57dTfBTkHoBczQxcyw6hhzxZQ4e5I5zOKjXXEhZN
|
||
r0tA3YC14CTabKRus/JmZieyZzRgEy2oti64tmLYTqSlAD78pRL40VNoaSYetXLw
|
||
hhNsXCHgWaY6d5bLOc/aIQMAV5oLvZQKvuXAF1IDmhPA+bZbpWipp0zagf1P1H3s
|
||
UzsMdn2KM0ejzgotbtNlj5TcrVwpmvE3ktvUAuA+hi3FkVx1US+2Gsp5x4YOzJ7u
|
||
P1WPk6ShF0JgnJH2ILdj6kttTWwFzH17keSFICWDfH/+kM+k7Y1v3EXMQXE7y0T9
|
||
MjvJskz6d/nv+sQhY04xt64xFMGTnZjlJMzfQNi7zWFLTZnDD0lPowq7l3YiPoTT
|
||
t5Xky83lu0KZsZBo0WlWaDG00gLVdtRgVbcuSWxpi5BdLb1kRab66JptWjxwXQID
|
||
AQABo4HrMIHoMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHBzOi8vcmwtY2Etc2VydmVy
|
||
LnJlZGlzbGFicy5jb20vdjEvY3JsMEYGCCsGAQUFBwEBBDowODA2BggrBgEFBQcw
|
||
AYYqaHR0cHM6Ly9ybC1jYS1zZXJ2ZXIucmVkaXNsYWJzLmNvbS92MS9vY3NwMB0G
|
||
A1UdDgQWBBQHar5OKvQUpP2qWt6mckzToeCOHDAfBgNVHSMEGDAWgBQi42wH6hM4
|
||
L2sujEvLM0/u8lRXTzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB
|
||
hjANBgkqhkiG9w0BAQsFAAOCAgEAirEn/iTsAKyhd+pu2W3Z5NjCko4NPU0EYUbr
|
||
AP7+POK2rzjIrJO3nFYQ/LLuC7KCXG+2qwan2SAOGmqWst13Y+WHp44Kae0kaChW
|
||
vcYLXXSoGQGC8QuFSNUdaeg3RbMDYFT04dOkqufeWVccoHVxyTSg9eD8LZuHn5jw
|
||
7QDLiEECBmIJHk5Eeo2TAZrx4Yx6ufSUX5HeVjlAzqwtAqdt99uCJ/EL8bgpWbe+
|
||
XoSpvUv0SEC1I1dCAhCKAvRlIOA6VBcmzg5Am12KzkqTul12/VEFIgzqu0Zy2Jbc
|
||
AUPrYVu/+tOGXQaijy7YgwH8P8n3s7ZeUa1VABJHcxrxYduDDJBLZi+MjheUDaZ1
|
||
jQRHYevI2tlqeSBqdPKG4zBY5lS0GiAlmuze5oENt0P3XboHoZPHiqcK3VECgTVh
|
||
/BkJcuudETSJcZDmQ8YfoKfBzRQNg2sv/hwvUv73Ss51Sco8GEt2lD8uEdib1Q6z
|
||
zDT5lXJowSzOD5ZA9OGDjnSRL+2riNtKWKEqvtEG3VBJoBzu9GoxbAc7wIZLxmli
|
||
iF5a/Zf5X+UXD3s4TMmy6C4QZJpAA2egsSQCnraWO2ULhh7iXMysSkF/nzVfZn43
|
||
iqpaB8++9a37hWq14ZmOv0TJIDz//b2+KC4VFXWQ5W5QC6whsjT+OlG4p5ZYG0jo
|
||
616pxqo=
|
||
-----END CERTIFICATE-----
|
||
-----BEGIN CERTIFICATE-----
|
||
MIIFujCCA6KgAwIBAgIJAJ1aTT1lu2ScMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV
|
||
BAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCQ0ExEjAQBgNVBAoMCVJlZGlz
|
||
TGFiczEtMCsGA1UEAwwkUmVkaXNMYWJzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
|
||
aXR5MB4XDTE4MDIyNTE1MjA0MloXDTM4MDIyMDE1MjA0MlowajELMAkGA1UEBhMC
|
||
VVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJz
|
||
MS0wKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
|
||
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLEjXy7YrbN5Waau5cd6g1
|
||
G5C2tMmeTpZ0duFAPxNU4oE3RHS5gGiok346fUXuUxbZ6QkuzeN2/2Z+RmRcJhQY
|
||
Dm0ZgdG4x59An1TJfnzKKoWj8ISmoHS/TGNBdFzXV7FYNLBuqZouqePI6ReC6Qhl
|
||
pp45huV32Q3a6IDrrvx7Wo5ZczEQeFNbCeCOQYNDdTmCyEkHqc2AGo8eoIlSTutT
|
||
ULOC7R5gzJVTS0e1hesQ7jmqHjbO+VQS1NAL4/5K6cuTEqUl+XhVhPdLWBXJQ5ag
|
||
54qhX4v+ojLzeU1R/Vc6NjMvVtptWY6JihpgplprN0Yh2556ewcXMeturcKgXfGJ
|
||
xeYzsjzXerEjrVocX5V8BNrg64NlifzTMKNOOv4fVZszq1SIHR8F9ROrqiOdh8iC
|
||
JpUbLpXH9hWCSEO6VRMB2xJoKu3cgl63kF30s77x7wLFMEHiwsQRKxooE1UhgS9K
|
||
2sO4TlQ1eWUvFvHSTVDQDlGQ6zu4qjbOpb3Q8bQwoK+ai2alkXVR4Ltxe9QlgYK3
|
||
StsnPhruzZGA0wbXdpw0bnM+YdlEm5ffSTpNIfgHeaa7Dtb801FtA71ZlH7A6TaI
|
||
SIQuUST9EKmv7xrJyx0W1pGoPOLw5T029aTjnICSLdtV9bLwysrLhIYG5bnPq78B
|
||
cS+jZHFGzD7PUVGQD01nOQIDAQABo2MwYTAdBgNVHQ4EFgQUIuNsB+oTOC9rLoxL
|
||
yzNP7vJUV08wHwYDVR0jBBgwFoAUIuNsB+oTOC9rLoxLyzNP7vJUV08wDwYDVR0T
|
||
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAHfg
|
||
z5pMNUAKdMzK1aS1EDdK9yKz4qicILz5czSLj1mC7HKDRy8cVADUxEICis++CsCu
|
||
rYOvyCVergHQLREcxPq4rc5Nq1uj6J6649NEeh4WazOOjL4ZfQ1jVznMbGy+fJm3
|
||
3Hoelv6jWRG9iqeJZja7/1s6YC6bWymI/OY1e4wUKeNHAo+Vger7MlHV+RuabaX+
|
||
hSJ8bJAM59NCM7AgMTQpJCncrcdLeceYniGy5Q/qt2b5mJkQVkIdy4TPGGB+AXDJ
|
||
D0q3I/JDRkDUFNFdeW0js7fHdsvCR7O3tJy5zIgEV/o/BCkmJVtuwPYOrw/yOlKj
|
||
TY/U7ATAx9VFF6/vYEOMYSmrZlFX+98L6nJtwDqfLB5VTltqZ4H/KBxGE3IRSt9l
|
||
FXy40U+LnXzhhW+7VBAvyYX8GEXhHkKU8Gqk1xitrqfBXY74xKgyUSTolFSfFVgj
|
||
mcM/X4K45bka+qpkj7Kfv/8D4j6aZekwhN2ly6hhC1SmQ8qjMjpG/mrWOSSHZFmf
|
||
ybu9iD2AYHeIOkshIl6xYIa++Q/00/vs46IzAbQyriOi0XxlSMMVtPx0Q3isp+ji
|
||
n8Mq9eOuxYOEQ4of8twUkUDd528iwGtEdwf0Q01UyT84S62N8AySl1ZBKXJz6W4F
|
||
UhWfa/HQYOAPDdEjNgnVwLI23b8t0TozyCWw7q8h
|
||
-----END CERTIFICATE-----
|
||
|
||
-----BEGIN CERTIFICATE-----
|
||
MIIEjzCCA3egAwIBAgIQe55B/ALCKJDZtdNT8kD6hTANBgkqhkiG9w0BAQsFADBM
|
||
MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xv
|
||
YmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMjAxMjYxMjAwMDBaFw0y
|
||
NTAxMjYwMDAwMDBaMFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu
|
||
IG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAy
|
||
MDIyIFEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmGmg1LW9b7Lf
|
||
8zDD83yBDTEkt+FOxKJZqF4veWc5KZsQj9HfnUS2e5nj/E+JImlGPsQuoiosLuXD
|
||
BVBNAMcUFa11buFMGMeEMwiTmCXoXRrXQmH0qjpOfKgYc5gHG3BsRGaRrf7VR4eg
|
||
ofNMG9wUBw4/g/TT7+bQJdA4NfE7Y4d5gEryZiBGB/swaX6Jp/8MF4TgUmOWmalK
|
||
dZCKyb4sPGQFRTtElk67F7vU+wdGcrcOx1tDcIB0ncjLPMnaFicagl+daWGsKqTh
|
||
counQb6QJtYHa91KvCfKWocMxQ7OIbB5UARLPmC4CJ1/f8YFm35ebfzAeULYdGXu
|
||
jE9CLor0OwIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG
|
||
CCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW
|
||
BBSH5Zq7a7B/t95GfJWkDBpA8HHqdjAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj
|
||
move4t0bvDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw
|
||
Mi5nbG9iYWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1
|
||
cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0w
|
||
K6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yMy5jcmwwIQYD
|
||
VR0gBBowGDAIBgZngQwBAgIwDAYKKwYBBAGgMgoBAjANBgkqhkiG9w0BAQsFAAOC
|
||
AQEAKRic9/f+nmhQU/wz04APZLjgG5OgsuUOyUEZjKVhNGDwxGTvKhyXGGAMW2B/
|
||
3bRi+aElpXwoxu3pL6fkElbX3B0BeS5LoDtxkyiVEBMZ8m+sXbocwlPyxrPbX6mY
|
||
0rVIvnuUeBH8X0L5IwfpNVvKnBIilTbcebfHyXkPezGwz7E1yhUULjJFm2bt0SdX
|
||
y+4X/WeiiYIv+fTVgZZgl+/2MKIsu/qdBJc3f3TvJ8nz+Eax1zgZmww+RSQWeOj3
|
||
15Iw6Z5FX+NwzY/Ab+9PosR5UosSeq+9HhtaxZttXG1nVh+avYPGYddWmiMT90J5
|
||
ZgKnO/Fx2hBgTxhOTMYaD312kg==
|
||
-----END CERTIFICATE-----
|
||
|
||
-----BEGIN CERTIFICATE-----
|
||
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
|
||
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
|
||
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
|
||
MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
|
||
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
|
||
hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
|
||
RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
|
||
gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
|
||
KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
|
||
QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
|
||
XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
|
||
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
|
||
LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
|
||
RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
|
||
jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
|
||
6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
|
||
mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
|
||
Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
|
||
WD9f
|
||
-----END CERTIFICATE-----`,Jbe={RedisCloudFixed:{ca:N8},RedisCloudFlexible:{ca:N8}};QI.default=Jbe});var gt=h(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});ae.noop=ae.isArguments=ae.defaults=ae.Debug=ae.getPackageMeta=ae.zipMap=ae.CONNECTION_CLOSED_ERROR_MSG=ae.shuffle=ae.sample=ae.resolveTLSProfile=ae.parseURL=ae.optimizeErrorStack=ae.toArg=ae.convertMapToArray=ae.convertObjectToArray=ae.timeout=ae.packObject=ae.isInt=ae.wrapMultiResult=ae.convertBufferToString=void 0;var zbe=require("fs"),Gbe=require("path"),md=Vh();Object.defineProperty(ae,"defaults",{enumerable:!0,get:function(){return md.defaults}});Object.defineProperty(ae,"isArguments",{enumerable:!0,get:function(){return md.isArguments}});Object.defineProperty(ae,"noop",{enumerable:!0,get:function(){return md.noop}});var Bbe=M8();ae.Debug=Bbe.default;var Hbe=L8();function F8(t,e){if(t instanceof Buffer)return t.toString(e);if(Array.isArray(t)){let r=t.length,n=Array(r);for(let i=0;i<r;++i)n[i]=t[i]instanceof Buffer&&e==="utf8"?t[i].toString():F8(t[i],e);return n}return t}ae.convertBufferToString=F8;function Vbe(t){if(!t)return null;let e=[],r=t.length;for(let n=0;n<r;++n){let i=t[n];i instanceof Error?e.push([i]):e.push([null,i])}return e}ae.wrapMultiResult=Vbe;function $8(t){let e=parseFloat(t);return!isNaN(t)&&(e|0)===e}ae.isInt=$8;function Wbe(t){let e={},r=t.length;for(let n=1;n<r;n+=2)e[t[n-1]]=t[n];return e}ae.packObject=Wbe;function Ybe(t,e){let r=null,n=function(){r&&(clearTimeout(r),r=null,t.apply(this,arguments))};return r=setTimeout(n,e,new Error("timeout")),n}ae.timeout=Ybe;function Qbe(t){let e=[],r=Object.keys(t);for(let n=0,i=r.length;n<i;n++)e.push(r[n],t[r[n]]);return e}ae.convertObjectToArray=Qbe;function Xbe(t){let e=[],r=0;return t.forEach(function(n,i){e[r]=i,e[r+1]=n,r+=2}),e}ae.convertMapToArray=Xbe;function Zbe(t){return t===null||typeof t>"u"?"":String(t)}ae.toArg=Zbe;function eve(t,e,r){let n=e.split(`
|
||
`),i="",s;for(s=1;s<n.length&&n[s].indexOf(r)!==-1;++s);for(let o=s;o<n.length;++o)i+=`
|
||
`+n[o];if(t.stack){let o=t.stack.indexOf(`
|
||
`);t.stack=t.stack.slice(0,o)+i}return t}ae.optimizeErrorStack=eve;function tve(t){if($8(t))return{port:t};let e=t,r=/^rediss?:\/\//i.test(e),n=e.startsWith("//");if(e[0]==="/"&&!n){let a=e.indexOf("?"),c={path:a===-1?e:e.slice(0,a)};if(a!==-1){let l={};new URLSearchParams(e.slice(a+1)).forEach((d,p)=>{l[p]=q8(p,d)}),(0,md.defaults)(c,l)}return c}let i;r?i=new URL(e):n?i=new URL("redis:"+e):i=new URL("redis://"+e);let s={};i.searchParams.forEach((a,c)=>{s[c]=q8(c,a)});let o={};return(i.username||i.password)&&(o.username=decodeURIComponent(i.username),o.password=decodeURIComponent(i.password)),i.pathname&&i.pathname!=="/"&&(r||n?i.pathname.length>1&&(o.db=i.pathname.slice(1)):o.path=i.pathname),i.hostname&&(o.host=i.hostname.replace(/^\[|\]$/g,"")),i.port&&(o.port=i.port),(0,md.defaults)(o,s),o}ae.parseURL=tve;function q8(t,e){if(t==="family"){let r=Number.parseInt(e,10);if(!Number.isNaN(r))return r}return e}function rve(t){let e=t?.tls;typeof e=="string"&&(e={profile:e});let r=Hbe.default[e?.profile];return r&&(e=Object.assign({},r,e),delete e.profile,t=Object.assign({},t,{tls:e})),t}ae.resolveTLSProfile=rve;function nve(t,e=0){let r=t.length;return e>=r?null:t[e+Math.floor(Math.random()*(r-e))]}ae.sample=nve;function ive(t){let e=t.length;for(;e>0;){let r=Math.floor(Math.random()*e);e--,[t[e],t[r]]=[t[r],t[e]]}return t}ae.shuffle=ive;ae.CONNECTION_CLOSED_ERROR_MSG="Connection is closed.";function sve(t,e){let r=new Map;return t.forEach((n,i)=>{r.set(n,e[i])}),r}ae.zipMap=sve;var Uc=null;async function ove(){if(Uc)return Uc;try{let t=(0,Gbe.resolve)(__CM_DIRNAME__,"..","..","package.json"),e=await zbe.promises.readFile(t,"utf8");return Uc={version:JSON.parse(e).version},Uc}catch{return Uc={version:"error-fetching-version"},Uc}}ae.getPackageMeta=ove});var zo=h(Wh=>{"use strict";Object.defineProperty(Wh,"__esModule",{value:!0});Wh.ConnectionClosedError=void 0;var XI=class extends Error{constructor(e,r){super(e??"Connection is closed"),this.cause=r,this.name="ConnectionClosedError",Object.setPrototypeOf(this,new.target.prototype)}};Wh.ConnectionClosedError=XI});var Jc=h((NFe,U8)=>{"use strict";var ave="2.0.0",cve=Number.MAX_SAFE_INTEGER||9007199254740991,lve=16,uve=250,dve=["major","premajor","minor","preminor","patch","prepatch","prerelease"];U8.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:lve,MAX_SAFE_BUILD_LENGTH:uve,MAX_SAFE_INTEGER:cve,RELEASE_TYPES:dve,SEMVER_SPEC_VERSION:ave,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var hd=h((LFe,J8)=>{"use strict";var pve=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};J8.exports=pve});var zc=h((ii,z8)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ZI,MAX_SAFE_BUILD_LENGTH:fve,MAX_LENGTH:mve}=Jc(),hve=hd();ii=z8.exports={};var yve=ii.re=[],gve=ii.safeRe=[],F=ii.src=[],bve=ii.safeSrc=[],$=ii.t={},vve=0,e1="[a-zA-Z0-9-]",Eve=[["\\s",1],["\\d",mve],[e1,fve]],Sve=t=>{for(let[e,r]of Eve)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},ie=(t,e,r)=>{let n=Sve(e),i=vve++;hve(t,i,e),$[t]=i,F[i]=e,bve[i]=n,yve[i]=new RegExp(e,r?"g":void 0),gve[i]=new RegExp(n,r?"g":void 0)};ie("NUMERICIDENTIFIER","0|[1-9]\\d*");ie("NUMERICIDENTIFIERLOOSE","\\d+");ie("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${e1}*`);ie("MAINVERSION",`(${F[$.NUMERICIDENTIFIER]})\\.(${F[$.NUMERICIDENTIFIER]})\\.(${F[$.NUMERICIDENTIFIER]})`);ie("MAINVERSIONLOOSE",`(${F[$.NUMERICIDENTIFIERLOOSE]})\\.(${F[$.NUMERICIDENTIFIERLOOSE]})\\.(${F[$.NUMERICIDENTIFIERLOOSE]})`);ie("PRERELEASEIDENTIFIER",`(?:${F[$.NONNUMERICIDENTIFIER]}|${F[$.NUMERICIDENTIFIER]})`);ie("PRERELEASEIDENTIFIERLOOSE",`(?:${F[$.NONNUMERICIDENTIFIER]}|${F[$.NUMERICIDENTIFIERLOOSE]})`);ie("PRERELEASE",`(?:-(${F[$.PRERELEASEIDENTIFIER]}(?:\\.${F[$.PRERELEASEIDENTIFIER]})*))`);ie("PRERELEASELOOSE",`(?:-?(${F[$.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${F[$.PRERELEASEIDENTIFIERLOOSE]})*))`);ie("BUILDIDENTIFIER",`${e1}+`);ie("BUILD",`(?:\\+(${F[$.BUILDIDENTIFIER]}(?:\\.${F[$.BUILDIDENTIFIER]})*))`);ie("FULLPLAIN",`v?${F[$.MAINVERSION]}${F[$.PRERELEASE]}?${F[$.BUILD]}?`);ie("FULL",`^${F[$.FULLPLAIN]}$`);ie("LOOSEPLAIN",`[v=\\s]*${F[$.MAINVERSIONLOOSE]}${F[$.PRERELEASELOOSE]}?${F[$.BUILD]}?`);ie("LOOSE",`^${F[$.LOOSEPLAIN]}$`);ie("GTLT","((?:<|>)?=?)");ie("XRANGEIDENTIFIERLOOSE",`${F[$.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);ie("XRANGEIDENTIFIER",`${F[$.NUMERICIDENTIFIER]}|x|X|\\*`);ie("XRANGEPLAIN",`[v=\\s]*(${F[$.XRANGEIDENTIFIER]})(?:\\.(${F[$.XRANGEIDENTIFIER]})(?:\\.(${F[$.XRANGEIDENTIFIER]})(?:${F[$.PRERELEASE]})?${F[$.BUILD]}?)?)?`);ie("XRANGEPLAINLOOSE",`[v=\\s]*(${F[$.XRANGEIDENTIFIERLOOSE]})(?:\\.(${F[$.XRANGEIDENTIFIERLOOSE]})(?:\\.(${F[$.XRANGEIDENTIFIERLOOSE]})(?:${F[$.PRERELEASELOOSE]})?${F[$.BUILD]}?)?)?`);ie("XRANGE",`^${F[$.GTLT]}\\s*${F[$.XRANGEPLAIN]}$`);ie("XRANGELOOSE",`^${F[$.GTLT]}\\s*${F[$.XRANGEPLAINLOOSE]}$`);ie("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ZI}})(?:\\.(\\d{1,${ZI}}))?(?:\\.(\\d{1,${ZI}}))?`);ie("COERCE",`${F[$.COERCEPLAIN]}(?:$|[^\\d])`);ie("COERCEFULL",F[$.COERCEPLAIN]+`(?:${F[$.PRERELEASE]})?(?:${F[$.BUILD]})?(?:$|[^\\d])`);ie("COERCERTL",F[$.COERCE],!0);ie("COERCERTLFULL",F[$.COERCEFULL],!0);ie("LONETILDE","(?:~>?)");ie("TILDETRIM",`(\\s*)${F[$.LONETILDE]}\\s+`,!0);ii.tildeTrimReplace="$1~";ie("TILDE",`^${F[$.LONETILDE]}${F[$.XRANGEPLAIN]}$`);ie("TILDELOOSE",`^${F[$.LONETILDE]}${F[$.XRANGEPLAINLOOSE]}$`);ie("LONECARET","(?:\\^)");ie("CARETTRIM",`(\\s*)${F[$.LONECARET]}\\s+`,!0);ii.caretTrimReplace="$1^";ie("CARET",`^${F[$.LONECARET]}${F[$.XRANGEPLAIN]}$`);ie("CARETLOOSE",`^${F[$.LONECARET]}${F[$.XRANGEPLAINLOOSE]}$`);ie("COMPARATORLOOSE",`^${F[$.GTLT]}\\s*(${F[$.LOOSEPLAIN]})$|^$`);ie("COMPARATOR",`^${F[$.GTLT]}\\s*(${F[$.FULLPLAIN]})$|^$`);ie("COMPARATORTRIM",`(\\s*)${F[$.GTLT]}\\s*(${F[$.LOOSEPLAIN]}|${F[$.XRANGEPLAIN]})`,!0);ii.comparatorTrimReplace="$1$2$3";ie("HYPHENRANGE",`^\\s*(${F[$.XRANGEPLAIN]})\\s+-\\s+(${F[$.XRANGEPLAIN]})\\s*$`);ie("HYPHENRANGELOOSE",`^\\s*(${F[$.XRANGEPLAINLOOSE]})\\s+-\\s+(${F[$.XRANGEPLAINLOOSE]})\\s*$`);ie("STAR","(<|>)?=?\\s*\\*");ie("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");ie("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Yh=h((qFe,G8)=>{"use strict";var xve=Object.freeze({loose:!0}),wve=Object.freeze({}),_ve=t=>t?typeof t!="object"?xve:t:wve;G8.exports=_ve});var t1=h((FFe,V8)=>{"use strict";var B8=/^[0-9]+$/,H8=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:t<e?-1:1;let r=B8.test(t),n=B8.test(e);return r&&n&&(t=+t,e=+e),t===e?0:r&&!n?-1:n&&!r?1:t<e?-1:1},Ive=(t,e)=>H8(e,t);V8.exports={compareIdentifiers:H8,rcompareIdentifiers:Ive}});var Gt=h(($Fe,Y8)=>{"use strict";var Qh=hd(),{MAX_LENGTH:W8,MAX_SAFE_INTEGER:Xh}=Jc(),{safeRe:Zh,t:ey}=zc(),Tve=Yh(),{compareIdentifiers:r1}=t1(),kve=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let n=0;n<r.length;n++)if(r1(t[n],r[n])!==0)return!1;return!0},n1=class t{constructor(e,r){if(r=Tve(r),e instanceof t){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>W8)throw new TypeError(`version is longer than ${W8} characters`);Qh("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let n=e.trim().match(r.loose?Zh[ey.LOOSE]:Zh[ey.FULL]);if(!n)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>Xh||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Xh||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Xh||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(i=>{if(/^[0-9]+$/.test(i)){let s=+i;if(s>=0&&s<Xh)return s}return i}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(Qh("SemVer.compare",this.version,this.options,e),!(e instanceof t)){if(typeof e=="string"&&e===this.version)return 0;e=new t(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof t||(e=new t(e,this.options)),this.major<e.major?-1:this.major>e.major?1:this.minor<e.minor?-1:this.minor>e.minor?1:this.patch<e.patch?-1:this.patch>e.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let n=this.prerelease[r],i=e.prerelease[r];if(Qh("prerelease compare",r,n,i),n===void 0&&i===void 0)return 0;if(i===void 0)return 1;if(n===void 0)return-1;if(n===i)continue;return r1(n,i)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let n=this.build[r],i=e.build[r];if(Qh("build compare",r,n,i),n===void 0&&i===void 0)return 0;if(i===void 0)return 1;if(n===void 0)return-1;if(n===i)continue;return r1(n,i)}while(++r)}inc(e,r,n){if(e.startsWith("pre")){if(!r&&n===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let i=`-${r}`.match(this.options.loose?Zh[ey.PRERELEASELOOSE]:Zh[ey.PRERELEASE]);if(!i||i[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,n),this.inc("pre",r,n);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,n),this.inc("pre",r,n);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let i=Number(n)?1:0;if(this.prerelease.length===0)this.prerelease=[i];else{let s=this.prerelease.length;for(;--s>=0;)typeof this.prerelease[s]=="number"&&(this.prerelease[s]++,s=-2);if(s===-1){if(r===this.prerelease.join(".")&&n===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(i)}}if(r){let s=[r,i];if(n===!1&&(s=[r]),kve(this.prerelease,r)){let o=this.prerelease[r.split(".").length];isNaN(o)&&(this.prerelease=s)}else this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Y8.exports=n1});var Ks=h((UFe,X8)=>{"use strict";var Q8=Gt(),Ave=(t,e,r=!1)=>{if(t instanceof Q8)return t;try{return new Q8(t,e)}catch(n){if(!r)return null;throw n}};X8.exports=Ave});var eU=h((JFe,Z8)=>{"use strict";var Rve=Ks(),Ove=(t,e)=>{let r=Rve(t,e);return r?r.version:null};Z8.exports=Ove});var rU=h((zFe,tU)=>{"use strict";var Cve=Ks(),jve=(t,e)=>{let r=Cve(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};tU.exports=jve});var sU=h((GFe,iU)=>{"use strict";var nU=Gt(),Pve=(t,e,r,n,i)=>{typeof r=="string"&&(i=n,n=r,r=void 0);try{return new nU(t instanceof nU?t.version:t,r).inc(e,n,i).version}catch{return null}};iU.exports=Pve});var cU=h((BFe,aU)=>{"use strict";var oU=Ks(),Kve=(t,e)=>{let r=oU(t,null,!0),n=oU(e,null,!0),i=r.compare(n);if(i===0)return null;let s=i>0,o=s?r:n,a=s?n:r,c=!!o.prerelease.length;if(!!a.prerelease.length&&!c){if(!a.patch&&!a.minor)return"major";if(a.compareMain(o)===0)return a.minor&&!a.patch?"minor":"patch"}let u=c?"pre":"";return r.major!==n.major?u+"major":r.minor!==n.minor?u+"minor":r.patch!==n.patch?u+"patch":"prerelease"};aU.exports=Kve});var uU=h((HFe,lU)=>{"use strict";var Dve=Gt(),Mve=(t,e)=>new Dve(t,e).major;lU.exports=Mve});var pU=h((VFe,dU)=>{"use strict";var Nve=Gt(),Lve=(t,e)=>new Nve(t,e).minor;dU.exports=Lve});var mU=h((WFe,fU)=>{"use strict";var qve=Gt(),Fve=(t,e)=>new qve(t,e).patch;fU.exports=Fve});var yU=h((YFe,hU)=>{"use strict";var $ve=Ks(),Uve=(t,e)=>{let r=$ve(t,e);return r&&r.prerelease.length?r.prerelease:null};hU.exports=Uve});var un=h((QFe,bU)=>{"use strict";var gU=Gt(),Jve=(t,e,r)=>new gU(t,r).compare(new gU(e,r));bU.exports=Jve});var EU=h((XFe,vU)=>{"use strict";var zve=un(),Gve=(t,e,r)=>zve(e,t,r);vU.exports=Gve});var xU=h((ZFe,SU)=>{"use strict";var Bve=un(),Hve=(t,e)=>Bve(t,e,!0);SU.exports=Hve});var ty=h((e$e,_U)=>{"use strict";var wU=Gt(),Vve=(t,e,r)=>{let n=new wU(t,r),i=new wU(e,r);return n.compare(i)||n.compareBuild(i)};_U.exports=Vve});var TU=h((t$e,IU)=>{"use strict";var Wve=ty(),Yve=(t,e)=>t.sort((r,n)=>Wve(r,n,e));IU.exports=Yve});var AU=h((r$e,kU)=>{"use strict";var Qve=ty(),Xve=(t,e)=>t.sort((r,n)=>Qve(n,r,e));kU.exports=Xve});var yd=h((n$e,RU)=>{"use strict";var Zve=un(),e0e=(t,e,r)=>Zve(t,e,r)>0;RU.exports=e0e});var ry=h((i$e,OU)=>{"use strict";var t0e=un(),r0e=(t,e,r)=>t0e(t,e,r)<0;OU.exports=r0e});var i1=h((s$e,CU)=>{"use strict";var n0e=un(),i0e=(t,e,r)=>n0e(t,e,r)===0;CU.exports=i0e});var s1=h((o$e,jU)=>{"use strict";var s0e=un(),o0e=(t,e,r)=>s0e(t,e,r)!==0;jU.exports=o0e});var ny=h((a$e,PU)=>{"use strict";var a0e=un(),c0e=(t,e,r)=>a0e(t,e,r)>=0;PU.exports=c0e});var iy=h((c$e,KU)=>{"use strict";var l0e=un(),u0e=(t,e,r)=>l0e(t,e,r)<=0;KU.exports=u0e});var o1=h((l$e,DU)=>{"use strict";var d0e=i1(),p0e=s1(),f0e=yd(),m0e=ny(),h0e=ry(),y0e=iy(),g0e=(t,e,r,n)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return d0e(t,r,n);case"!=":return p0e(t,r,n);case">":return f0e(t,r,n);case">=":return m0e(t,r,n);case"<":return h0e(t,r,n);case"<=":return y0e(t,r,n);default:throw new TypeError(`Invalid operator: ${e}`)}};DU.exports=g0e});var NU=h((u$e,MU)=>{"use strict";var b0e=Gt(),v0e=Ks(),{safeRe:sy,t:oy}=zc(),E0e=(t,e)=>{if(t instanceof b0e)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?sy[oy.COERCEFULL]:sy[oy.COERCE]);else{let c=e.includePrerelease?sy[oy.COERCERTLFULL]:sy[oy.COERCERTL],l;for(;(l=c.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||l.index+l[0].length!==r.index+r[0].length)&&(r=l),c.lastIndex=l.index+l[1].length+l[2].length;c.lastIndex=-1}if(r===null)return null;let n=r[2],i=r[3]||"0",s=r[4]||"0",o=e.includePrerelease&&r[5]?`-${r[5]}`:"",a=e.includePrerelease&&r[6]?`+${r[6]}`:"";return v0e(`${n}.${i}.${s}${o}${a}`,e)};MU.exports=E0e});var qU=h((d$e,LU)=>{"use strict";var S0e=Ks(),x0e=Jc(),w0e=Gt(),_0e=(t,e,r)=>{if(!x0e.RELEASE_TYPES.includes(e))return null;let n=I0e(t,r);return n&&T0e(n,e)},I0e=(t,e)=>{let r=t instanceof w0e?t.version:t;return S0e(r,e)},T0e=(t,e)=>{if(k0e(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},k0e=t=>t.startsWith("pre");LU.exports=_0e});var $U=h((p$e,FU)=>{"use strict";var a1=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let i=this.map.keys().next().value;this.delete(i)}this.map.set(e,r)}return this}};FU.exports=a1});var dn=h((f$e,GU)=>{"use strict";var A0e=/\s+/g,c1=class t{constructor(e,r){if(r=O0e(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof l1)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(A0e," "),this.set=this.raw.split("||").map(n=>this.parseRange(n.trim())).filter(n=>n.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let n=this.set[0];if(this.set=this.set.filter(i=>!JU(i[0])),this.set.length===0)this.set=[n];else if(this.set.length>1){for(let i of this.set)if(i.length===1&&q0e(i[0])){this.set=[i];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e<this.set.length;e++){e>0&&(this.formatted+="||");let r=this.set[e];for(let n=0;n<r.length;n++)n>0&&(this.formatted+=" "),this.formatted+=r[n].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(L0e,"");let n=((this.options.includePrerelease&&M0e)|(this.options.loose&&N0e))+":"+e,i=UU.get(n);if(i)return i;let s=this.options.loose,o=s?dr[Bt.HYPHENRANGELOOSE]:dr[Bt.HYPHENRANGE];e=e.replace(o,Y0e(this.options.includePrerelease)),We("hyphen replace",e),e=e.replace(dr[Bt.COMPARATORTRIM],P0e),We("comparator trim",e),e=e.replace(dr[Bt.TILDETRIM],K0e),We("tilde trim",e),e=e.replace(dr[Bt.CARETTRIM],D0e),We("caret trim",e);let a=e.split(" ").map(d=>F0e(d,this.options)).join(" ").split(/\s+/).map(d=>W0e(d,this.options));s&&(a=a.filter(d=>(We("loose invalid filter",d,this.options),!!d.match(dr[Bt.COMPARATORLOOSE])))),We("range list",a);let c=new Map,l=a.map(d=>new l1(d,this.options));for(let d of l){if(JU(d))return[d];c.set(d.value,d)}c.size>1&&c.has("")&&c.delete("");let u=[...c.values()];return UU.set(n,u),u}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(n=>zU(n,r)&&e.set.some(i=>zU(i,r)&&n.every(s=>i.every(o=>s.intersects(o,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new C0e(e,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(Q0e(this.set[r],e,this.options))return!0;return!1}};GU.exports=c1;var R0e=$U(),UU=new R0e,O0e=Yh(),l1=gd(),We=hd(),C0e=Gt(),{safeRe:dr,src:j0e,t:Bt,comparatorTrimReplace:P0e,tildeTrimReplace:K0e,caretTrimReplace:D0e}=zc(),{FLAG_INCLUDE_PRERELEASE:M0e,FLAG_LOOSE:N0e}=Jc(),L0e=new RegExp(j0e[Bt.BUILD],"g"),JU=t=>t.value==="<0.0.0-0",q0e=t=>t.value==="",zU=(t,e)=>{let r=!0,n=t.slice(),i=n.pop();for(;r&&n.length;)r=n.every(s=>i.intersects(s,e)),i=n.pop();return r},F0e=(t,e)=>(t=t.replace(dr[Bt.BUILD],""),We("comp",t,e),t=z0e(t,e),We("caret",t),t=U0e(t,e),We("tildes",t),t=B0e(t,e),We("xrange",t),t=V0e(t,e),We("stars",t),t),St=t=>!t||t.toLowerCase()==="x"||t==="*",$0e=(t,e,r)=>St(t)&&!St(e)||St(e)&&r&&!St(r),U0e=(t,e)=>t.trim().split(/\s+/).map(r=>J0e(r,e)).join(" "),J0e=(t,e)=>{let r=e.loose?dr[Bt.TILDELOOSE]:dr[Bt.TILDE],n=e.includePrerelease?"-0":"";return t.replace(r,(i,s,o,a,c)=>{We("tilde",t,i,s,o,a,c);let l;return St(s)?l="":St(o)?l=`>=${s}.0.0${n} <${+s+1}.0.0-0`:St(a)?l=`>=${s}.${o}.0${n} <${s}.${+o+1}.0-0`:c?(We("replaceTilde pr",c),l=`>=${s}.${o}.${a}-${c} <${s}.${+o+1}.0-0`):l=`>=${s}.${o}.${a} <${s}.${+o+1}.0-0`,We("tilde return",l),l})},z0e=(t,e)=>t.trim().split(/\s+/).map(r=>G0e(r,e)).join(" "),G0e=(t,e)=>{We("caret",t,e);let r=e.loose?dr[Bt.CARETLOOSE]:dr[Bt.CARET],n=e.includePrerelease?"-0":"";return t.replace(r,(i,s,o,a,c)=>{We("caret",t,i,s,o,a,c);let l;return St(s)?l="":St(o)?l=`>=${s}.0.0${n} <${+s+1}.0.0-0`:St(a)?s==="0"?l=`>=${s}.${o}.0${n} <${s}.${+o+1}.0-0`:l=`>=${s}.${o}.0${n} <${+s+1}.0.0-0`:c?(We("replaceCaret pr",c),s==="0"?o==="0"?l=`>=${s}.${o}.${a}-${c} <${s}.${o}.${+a+1}-0`:l=`>=${s}.${o}.${a}-${c} <${s}.${+o+1}.0-0`:l=`>=${s}.${o}.${a}-${c} <${+s+1}.0.0-0`):(We("no pr"),s==="0"?o==="0"?l=`>=${s}.${o}.${a} <${s}.${o}.${+a+1}-0`:l=`>=${s}.${o}.${a} <${s}.${+o+1}.0-0`:l=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),We("caret return",l),l})},B0e=(t,e)=>(We("replaceXRanges",t,e),t.split(/\s+/).map(r=>H0e(r,e)).join(" ")),H0e=(t,e)=>{t=t.trim();let r=e.loose?dr[Bt.XRANGELOOSE]:dr[Bt.XRANGE];return t.replace(r,(n,i,s,o,a,c)=>{if(We("xRange",t,n,i,s,o,a,c),$0e(s,o,a))return t;let l=St(s),u=l||St(o),d=u||St(a),p=d;return i==="="&&p&&(i=""),c=e.includePrerelease?"-0":"",l?i===">"||i==="<"?n="<0.0.0-0":n="*":i&&p?(u&&(o=0),a=0,i===">"?(i=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):i==="<="&&(i="<",u?s=+s+1:o=+o+1),i==="<"&&(c="-0"),n=`${i+s}.${o}.${a}${c}`):u?n=`>=${s}.0.0${c} <${+s+1}.0.0-0`:d&&(n=`>=${s}.${o}.0${c} <${s}.${+o+1}.0-0`),We("xRange return",n),n})},V0e=(t,e)=>(We("replaceStars",t,e),t.trim().replace(dr[Bt.STAR],"")),W0e=(t,e)=>(We("replaceGTE0",t,e),t.trim().replace(dr[e.includePrerelease?Bt.GTE0PRE:Bt.GTE0],"")),Y0e=t=>(e,r,n,i,s,o,a,c,l,u,d,p)=>(St(n)?r="":St(i)?r=`>=${n}.0.0${t?"-0":""}`:St(s)?r=`>=${n}.${i}.0${t?"-0":""}`:o?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,St(l)?c="":St(u)?c=`<${+l+1}.0.0-0`:St(d)?c=`<${l}.${+u+1}.0-0`:p?c=`<=${l}.${u}.${d}-${p}`:t?c=`<${l}.${u}.${+d+1}-0`:c=`<=${c}`,`${r} ${c}`.trim()),Q0e=(t,e,r)=>{for(let n=0;n<t.length;n++)if(!t[n].test(e))return!1;if(e.prerelease.length&&!r.includePrerelease){for(let n=0;n<t.length;n++)if(We(t[n].semver),t[n].semver!==l1.ANY&&t[n].semver.prerelease.length>0){let i=t[n].semver;if(i.major===e.major&&i.minor===e.minor&&i.patch===e.patch)return!0}return!1}return!0}});var gd=h((m$e,QU)=>{"use strict";var bd=Symbol("SemVer ANY"),p1=class t{static get ANY(){return bd}constructor(e,r){if(r=BU(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),d1("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===bd?this.value="":this.value=this.operator+this.semver.version,d1("comp",this)}parse(e){let r=this.options.loose?HU[VU.COMPARATORLOOSE]:HU[VU.COMPARATOR],n=e.match(r);if(!n)throw new TypeError(`Invalid comparator: ${e}`);this.operator=n[1]!==void 0?n[1]:"",this.operator==="="&&(this.operator=""),n[2]?this.semver=new WU(n[2],this.options.loose):this.semver=bd}toString(){return this.value}test(e){if(d1("Comparator.test",e,this.options.loose),this.semver===bd||e===bd)return!0;if(typeof e=="string")try{e=new WU(e,this.options)}catch{return!1}return u1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new YU(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new YU(this.value,r).test(e.semver):(r=BU(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||u1(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||u1(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};QU.exports=p1;var BU=Yh(),{safeRe:HU,t:VU}=zc(),u1=o1(),d1=hd(),WU=Gt(),YU=dn()});var vd=h((h$e,XU)=>{"use strict";var X0e=dn(),Z0e=(t,e,r)=>{try{e=new X0e(e,r)}catch{return!1}return e.test(t)};XU.exports=Z0e});var e3=h((y$e,ZU)=>{"use strict";var eEe=dn(),tEe=(t,e)=>new eEe(t,e).set.map(r=>r.map(n=>n.value).join(" ").trim().split(" "));ZU.exports=tEe});var r3=h((g$e,t3)=>{"use strict";var rEe=Gt(),nEe=dn(),iEe=(t,e,r)=>{let n=null,i=null,s=null;try{s=new nEe(e,r)}catch{return null}return t.forEach(o=>{s.test(o)&&(!n||i.compare(o)===-1)&&(n=o,i=new rEe(n,r))}),n};t3.exports=iEe});var i3=h((b$e,n3)=>{"use strict";var sEe=Gt(),oEe=dn(),aEe=(t,e,r)=>{let n=null,i=null,s=null;try{s=new oEe(e,r)}catch{return null}return t.forEach(o=>{s.test(o)&&(!n||i.compare(o)===1)&&(n=o,i=new sEe(n,r))}),n};n3.exports=aEe});var a3=h((v$e,o3)=>{"use strict";var f1=Gt(),cEe=dn(),s3=yd(),lEe=(t,e)=>{t=new cEe(t,e);let r=new f1("0.0.0");if(t.test(r)||(r=new f1("0.0.0-0"),t.test(r)))return r;r=null;for(let n=0;n<t.set.length;++n){let i=t.set[n],s=null;i.forEach(o=>{let a=new f1(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||s3(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!r||s3(r,s))&&(r=s)}return r&&t.test(r)?r:null};o3.exports=lEe});var l3=h((E$e,c3)=>{"use strict";var uEe=dn(),dEe=(t,e)=>{try{return new uEe(t,e).range||"*"}catch{return null}};c3.exports=dEe});var ay=h((S$e,f3)=>{"use strict";var pEe=Gt(),p3=gd(),{ANY:fEe}=p3,mEe=dn(),hEe=vd(),u3=yd(),d3=ry(),yEe=iy(),gEe=ny(),bEe=(t,e,r,n)=>{t=new pEe(t,n),e=new mEe(e,n);let i,s,o,a,c;switch(r){case">":i=u3,s=yEe,o=d3,a=">",c=">=";break;case"<":i=d3,s=gEe,o=u3,a="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(hEe(t,e,n))return!1;for(let l=0;l<e.set.length;++l){let u=e.set[l],d=null,p=null;if(u.forEach(f=>{f.semver===fEe&&(f=new p3(">=0.0.0")),d=d||f,p=p||f,i(f.semver,d.semver,n)?d=f:o(f.semver,p.semver,n)&&(p=f)}),d.operator===a||d.operator===c||(!p.operator||p.operator===a)&&s(t,p.semver))return!1;if(p.operator===c&&o(t,p.semver))return!1}return!0};f3.exports=bEe});var h3=h((x$e,m3)=>{"use strict";var vEe=ay(),EEe=(t,e,r)=>vEe(t,e,">",r);m3.exports=EEe});var g3=h((w$e,y3)=>{"use strict";var SEe=ay(),xEe=(t,e,r)=>SEe(t,e,"<",r);y3.exports=xEe});var E3=h((_$e,v3)=>{"use strict";var b3=dn(),wEe=(t,e,r)=>(t=new b3(t,r),e=new b3(e,r),t.intersects(e,r));v3.exports=wEe});var x3=h((I$e,S3)=>{"use strict";var _Ee=vd(),IEe=un();S3.exports=(t,e,r)=>{let n=[],i=null,s=null,o=t.sort((u,d)=>IEe(u,d,r));for(let u of o)_Ee(u,e,r)?(s=u,i||(i=u)):(s&&n.push([i,s]),s=null,i=null);i&&n.push([i,null]);let a=[];for(let[u,d]of n)u===d?a.push(u):!d&&u===o[0]?a.push("*"):d?u===o[0]?a.push(`<=${d}`):a.push(`${u} - ${d}`):a.push(`>=${u}`);let c=a.join(" || "),l=typeof e.raw=="string"?e.raw:String(e);return c.length<l.length?c:e}});var A3=h((T$e,k3)=>{"use strict";var w3=dn(),y1=gd(),{ANY:m1}=y1,h1=vd(),g1=un(),TEe=(t,e,r={})=>{if(t===e)return!0;t=new w3(t,r),e=new w3(e,r);let n=!1;e:for(let i of t.set){for(let s of e.set){let o=AEe(i,s,r);if(n=n||o!==null,o)continue e}if(n)return!1}return!0},kEe=[new y1(">=0.0.0-0")],_3=[new y1(">=0.0.0")],AEe=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===m1){if(e.length===1&&e[0].semver===m1)return!0;r.includePrerelease?t=kEe:t=_3}if(e.length===1&&e[0].semver===m1){if(r.includePrerelease)return!0;e=_3}let n=new Set,i,s;for(let f of t)f.operator===">"||f.operator===">="?i=I3(i,f,r):f.operator==="<"||f.operator==="<="?s=T3(s,f,r):n.add(f.semver);if(n.size>1)return null;let o;if(i&&s){if(o=g1(i.semver,s.semver,r),o>0)return null;if(o===0&&(i.operator!==">="||s.operator!=="<="))return null}for(let f of n){if(i&&!h1(f,String(i),r)||s&&!h1(f,String(s),r))return null;for(let m of e)if(!h1(f,String(m),r))return!1;return!0}let a,c,l,u,d=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1,p=i&&!r.includePrerelease&&i.semver.prerelease.length?i.semver:!1;d&&d.prerelease.length===1&&s.operator==="<"&&d.prerelease[0]===0&&(d=!1);for(let f of e){if(u=u||f.operator===">"||f.operator===">=",l=l||f.operator==="<"||f.operator==="<=",i){if(p&&f.semver.prerelease&&f.semver.prerelease.length&&f.semver.major===p.major&&f.semver.minor===p.minor&&f.semver.patch===p.patch&&(p=!1),f.operator===">"||f.operator===">="){if(a=I3(i,f,r),a===f&&a!==i)return!1}else if(i.operator===">="&&!f.test(i.semver))return!1}if(s){if(d&&f.semver.prerelease&&f.semver.prerelease.length&&f.semver.major===d.major&&f.semver.minor===d.minor&&f.semver.patch===d.patch&&(d=!1),f.operator==="<"||f.operator==="<="){if(c=T3(s,f,r),c===f&&c!==s)return!1}else if(s.operator==="<="&&!f.test(s.semver))return!1}if(!f.operator&&(s||i)&&o!==0)return!1}return!(i&&l&&!s&&o!==0||s&&u&&!i&&o!==0||p||d)},I3=(t,e,r)=>{if(!t)return e;let n=g1(t.semver,e.semver,r);return n>0?t:n<0||e.operator===">"&&t.operator===">="?e:t},T3=(t,e,r)=>{if(!t)return e;let n=g1(t.semver,e.semver,r);return n<0?t:n>0||e.operator==="<"&&t.operator==="<="?e:t};k3.exports=TEe});var j3=h((k$e,C3)=>{"use strict";var b1=zc(),R3=Jc(),REe=Gt(),O3=t1(),OEe=Ks(),CEe=eU(),jEe=rU(),PEe=sU(),KEe=cU(),DEe=uU(),MEe=pU(),NEe=mU(),LEe=yU(),qEe=un(),FEe=EU(),$Ee=xU(),UEe=ty(),JEe=TU(),zEe=AU(),GEe=yd(),BEe=ry(),HEe=i1(),VEe=s1(),WEe=ny(),YEe=iy(),QEe=o1(),XEe=NU(),ZEe=qU(),eSe=gd(),tSe=dn(),rSe=vd(),nSe=e3(),iSe=r3(),sSe=i3(),oSe=a3(),aSe=l3(),cSe=ay(),lSe=h3(),uSe=g3(),dSe=E3(),pSe=x3(),fSe=A3();C3.exports={parse:OEe,valid:CEe,clean:jEe,inc:PEe,diff:KEe,major:DEe,minor:MEe,patch:NEe,prerelease:LEe,compare:qEe,rcompare:FEe,compareLoose:$Ee,compareBuild:UEe,sort:JEe,rsort:zEe,gt:GEe,lt:BEe,eq:HEe,neq:VEe,gte:WEe,lte:YEe,cmp:QEe,coerce:XEe,truncate:ZEe,Comparator:eSe,Range:tSe,satisfies:rSe,toComparators:nSe,maxSatisfying:iSe,minSatisfying:sSe,minVersion:oSe,validRange:aSe,outside:cSe,gtr:lSe,ltr:uSe,intersects:dSe,simplifyRange:pSe,subset:fSe,SemVer:REe,re:b1.re,src:b1.src,tokens:b1.t,SEMVER_SPEC_VERSION:R3.SEMVER_SPEC_VERSION,RELEASE_TYPES:R3.RELEASE_TYPES,compareIdentifiers:O3.compareIdentifiers,rcompareIdentifiers:O3.rcompareIdentifiers}});var Dr=h(V=>{"use strict";Object.defineProperty(V,"__esModule",{value:!0});V.QUEUE_EVENT_SUFFIX=V.toString=V.errorToJSON=V.parseObjectValues=V.isRedisVersionLowerThan=V.childSend=V.asyncSend=V.DELAY_TIME_1=V.DELAY_TIME_5=V.clientCommandMessageReg=V.optsEncodeMap=V.optsDecodeMap=V.errorObject=void 0;V.tryCatch=ySe;V.lengthInUtf8Bytes=gSe;V.isEmpty=bSe;V.array2obj=vSe;V.objectToFlatArray=ESe;V.delay=SSe;V.forwardConnectionError=xSe;V.increaseMaxListeners=P3;V.invertObject=K3;V.isRedisInstance=D3;V.isRedisCluster=wSe;V.decreaseMaxListeners=_Se;V.removeAllQueueData=ISe;V.getParentKey=TSe;V.isNotConnectionError=M3;V.removeUndefinedFields=DSe;V.trace=MSe;V.randomUUID=NSe;var v1=require("crypto"),mSe=gt(),hSe=zo(),E1=j3(),S1=_r();V.errorObject={value:null};function ySe(t,e,r){try{return t.apply(e,r)}catch(n){return V.errorObject.value=n,V.errorObject}}function gSe(t){return Buffer.byteLength(t,"utf8")}function bSe(t){for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}function vSe(t){let e={};for(let r=0;r<t.length;r+=2)e[t[r]]=t[r+1];return e}function ESe(t){let e=[];for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0&&(e[e.length]=r,e[e.length]=t[r]);return e}function SSe(t,e){return new Promise(r=>{let n,i=()=>{e?.signal.removeEventListener("abort",i),clearTimeout(n),r()};n=setTimeout(i,t),e?.signal.addEventListener("abort",i)})}function xSe(t,e){e.on("error",r=>{t.listenerCount("error")>0&&t.emit("error",r)})}function P3(t,e){let r=t.getMaxListeners();t.setMaxListeners(r+e)}function K3(t){return Object.entries(t).reduce((e,[r,n])=>(e[n]=r,e),{})}V.optsDecodeMap={de:"deduplication",fpof:"failParentOnFailure",cpof:"continueParentOnFailure",idof:"ignoreDependencyOnFailure",kl:"keepLogs",rdof:"removeDependencyOnFailure"};V.optsEncodeMap=Object.assign(Object.assign({},K3(V.optsDecodeMap)),{debounce:"de"});function D3(t){return t?["connect","disconnect","duplicate"].every(r=>typeof t[r]=="function"):!1}function wSe(t){return D3(t)&&!!t.isCluster}function _Se(t,e){P3(t,-e)}async function ISe(t,e,r=process.env.BULLMQ_TEST_PREFIX||"bull"){if(t.isCluster)return!1;let n=`${r}:${e}:*`,i=[];await new Promise((s,o)=>{let a=t.scanStream({match:n});a.on("data",c=>{if(c.length){let l=t.pipeline();c.forEach(d=>{l.del(d)});let u=l.exec().catch(d=>{throw o(d),d});i.push(u)}}),a.on("end",()=>s()),a.on("error",c=>o(c))}),await Promise.all(i);try{await t.quit()}catch(s){if(M3(s))throw s}}function TSe(t){if(t)return`${t.queue}:${t.id}`}V.clientCommandMessageReg=/ERR unknown command ['`]\s*client\s*['`]/;V.DELAY_TIME_5=5e3;V.DELAY_TIME_1=100;function M3(t){if(t instanceof hSe.ConnectionClosedError)return!1;let{code:e,message:r}=t;return r!==mSe.CONNECTION_CLOSED_ERROR_MSG&&!r.includes("ECONNREFUSED")&&e!=="ECONNREFUSED"}var kSe=(t,e)=>new Promise((r,n)=>{typeof t.send=="function"?t.send(e,i=>{i?n(i):r()}):typeof t.postMessage=="function"?r(t.postMessage(e)):r()});V.asyncSend=kSe;var ASe=(t,e)=>(0,V.asyncSend)(t,e);V.childSend=ASe;var RSe=(t,e,r,n="redis")=>{if(r===n){let i=E1.valid(E1.coerce(t));return E1.lt(i,e)}return!1};V.isRedisVersionLowerThan=RSe;var OSe=t=>{let e={};for(let r of Object.entries(t))e[r[0]]=JSON.parse(r[1]);return e};V.parseObjectValues=OSe;var CSe=t=>{let e=new WeakSet;return e.add(t),(r,n)=>{if(typeof n=="object"&&n!==null){if(e.has(n))return"[Circular]";e.add(n)}return n}},jSe=t=>{let e={};return Object.getOwnPropertyNames(t).forEach(function(r){e[r]=t[r]}),JSON.parse(JSON.stringify(e,CSe(t)))};V.errorToJSON=jSe;var PSe=1/0,KSe=t=>{if(t==null)return"";if(typeof t=="string")return t;if(Array.isArray(t))return`${t.map(r=>r==null?r:(0,V.toString)(r))}`;if(typeof t=="symbol"||Object.prototype.toString.call(t)=="[object Symbol]")return t.toString();let e=`${t}`;return e==="0"&&1/t===-PSe?"-0":e};V.toString=KSe;V.QUEUE_EVENT_SUFFIX=":qe";function DSe(t){let e={};for(let r in t)t[r]!==void 0&&(e[r]=t[r]);return e}async function MSe(t,e,r,n,i,s,o){if(t){let{tracer:a,contextManager:c}=t,l=c.active(),u;o&&(u=c.fromMetadata(l,o));let d=i?`${n} ${i}`:n,p=a.startSpan(d,{kind:e},u);try{p.setAttributes({[S1.TelemetryAttributes.QueueName]:r,[S1.TelemetryAttributes.QueueOperation]:n});let f,m;return e===S1.SpanKind.CONSUMER&&u?f=p.setSpanOnContext(u):f=p.setSpanOnContext(l),s.length==2&&(m=c.getMetadata(f)),await c.with(f,()=>s(p,m))}catch(f){throw p.recordException(f),f}finally{p.end()}}else return s()}function NSe(){if(typeof v1.randomUUID=="function")return(0,v1.randomUUID)();let t=(0,v1.randomBytes)(16);return t[6]=t[6]&15|64,t[8]=t[8]&63|128,[t.toString("hex",0,4),t.toString("hex",4,6),t.toString("hex",6,8),t.toString("hex",8,10),t.toString("hex",10,16)].join("-")}});var N3=h(cy=>{"use strict";Object.defineProperty(cy,"__esModule",{value:!0});cy.ChildProcessor=void 0;var LSe=Gh(),pr=_r(),x1=Dr(),Ds;(function(t){t[t.Idle=0]="Idle",t[t.Started=1]="Started",t[t.Terminating=2]="Terminating",t[t.Errored=3]="Errored"})(Ds||(Ds={}));var Ed=process.env.NODE_ENV==="test"?500:5e3,w1=class{constructor(e,r){this.send=e,this.receiver=r}async init(e){var r;let n;try{let{default:s}=await import(e);if(n=s,n.default&&(n=n.default),typeof n!="function")throw new Error("No function is exported in processor file")}catch(s){this.status=Ds.Errored;try{await this.send({cmd:pr.ParentCommand.InitFailed,err:(0,x1.errorToJSON)(s)})}finally{process.exit((r=process.exitCode)!==null&&r!==void 0?r:1)}}let i=n;n=function(s,o,a){try{return Promise.resolve(i(s,o,a))}catch(c){return Promise.reject(c)}},this.processor=n,this.status=Ds.Idle,await this.send({cmd:pr.ParentCommand.InitCompleted})}async start(e,r){if(this.status!==Ds.Idle)return this.send({cmd:pr.ParentCommand.Error,err:(0,x1.errorToJSON)(new Error("cannot start a not idling child process"))});this.status=Ds.Started,this.abortController=new LSe.AbortController,this.currentJobPromise=(async()=>{try{let n=this.wrapJob(e,this.send),i=await this.processor(n,r,this.abortController.signal);await this.send({cmd:pr.ParentCommand.Completed,value:typeof i>"u"?null:i})}catch(n){await this.send({cmd:pr.ParentCommand.Failed,value:(0,x1.errorToJSON)(n.message?n:new Error(n))})}finally{this.status=Ds.Idle,this.currentJobPromise=void 0,this.abortController=void 0}})()}cancel(e){this.abortController&&this.abortController.abort(e)}async stop(){}async waitForCurrentJobAndExit(){this.status=Ds.Terminating;try{await this.currentJobPromise}finally{process.exit(process.exitCode||0)}}wrapJob(e,r){let n=Object.assign(Object.assign({},e),{queueQualifiedName:e.queueQualifiedName,data:JSON.parse(e.data||"{}"),opts:e.opts,returnValue:JSON.parse(e.returnvalue||"{}"),async updateProgress(i){this.progress=i,await r({cmd:pr.ParentCommand.Progress,value:i})},log:async i=>{await r({cmd:pr.ParentCommand.Log,value:i})},moveToDelayed:async(i,s)=>{await r({cmd:pr.ParentCommand.MoveToDelayed,value:{timestamp:i,token:s}})},moveToWait:async i=>{await r({cmd:pr.ParentCommand.MoveToWait,value:{token:i}})},moveToWaitingChildren:async(i,s)=>{let o=Math.random().toString(36).substring(2,15);return await r({requestId:o,cmd:pr.ParentCommand.MoveToWaitingChildren,value:{token:i,opts:s}}),Sd(o,this.receiver,Ed,"moveToWaitingChildren")},updateData:async i=>{await r({cmd:pr.ParentCommand.Update,value:i}),n.data=i},getChildrenValues:async()=>{let i=Math.random().toString(36).substring(2,15);return await r({requestId:i,cmd:pr.ParentCommand.GetChildrenValues}),Sd(i,this.receiver,Ed,"getChildrenValues")},getIgnoredChildrenFailures:async()=>{let i=Math.random().toString(36).substring(2,15);return await r({requestId:i,cmd:pr.ParentCommand.GetIgnoredChildrenFailures}),Sd(i,this.receiver,Ed,"getIgnoredChildrenFailures")},getDependenciesCount:async i=>{let s=Math.random().toString(36).substring(2,15);return await r({requestId:s,cmd:pr.ParentCommand.GetDependenciesCount,value:i}),Sd(s,this.receiver,Ed,"getDependenciesCount")},getDependencies:async i=>{let s=Math.random().toString(36).substring(2,15);return await r({requestId:s,cmd:pr.ParentCommand.GetDependencies,value:i}),Sd(s,this.receiver,Ed,"getDependencies")}});return n}};cy.ChildProcessor=w1;var Sd=async(t,e,r,n)=>new Promise((i,s)=>{let o=a=>{a.requestId===t&&(i(a.value),e.off("message",o))};e.on("message",o),setTimeout(()=>{e.off("message",o),s(new Error(`TimeoutError: ${n} timed out in (${r}ms)`))},r)})});var L3=h(Go=>{"use strict";Object.defineProperty(Go,"__esModule",{value:!0});Go.DelayedError=Go.DELAYED_ERROR=void 0;Go.DELAYED_ERROR="bullmq:movedToDelayed";var _1=class extends Error{constructor(e=Go.DELAYED_ERROR){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}};Go.DelayedError=_1});var q3=h(Bo=>{"use strict";Object.defineProperty(Bo,"__esModule",{value:!0});Bo.RateLimitError=Bo.RATE_LIMIT_ERROR=void 0;Bo.RATE_LIMIT_ERROR="bullmq:rateLimitExceeded";var I1=class extends Error{constructor(e=Bo.RATE_LIMIT_ERROR){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}};Bo.RateLimitError=I1});var k1=h(Ho=>{"use strict";Object.defineProperty(Ho,"__esModule",{value:!0});Ho.UnrecoverableError=Ho.UNRECOVERABLE_ERROR=void 0;Ho.UNRECOVERABLE_ERROR="bullmq:unrecoverable";var T1=class extends Error{constructor(e=Ho.UNRECOVERABLE_ERROR){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}};Ho.UnrecoverableError=T1});var F3=h(Vo=>{"use strict";Object.defineProperty(Vo,"__esModule",{value:!0});Vo.WaitingChildrenError=Vo.WAITING_CHILDREN_ERROR=void 0;Vo.WAITING_CHILDREN_ERROR="bullmq:movedToWaitingChildren";var A1=class extends Error{constructor(e=Vo.WAITING_CHILDREN_ERROR){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}};Vo.WaitingChildrenError=A1});var $3=h(Wo=>{"use strict";Object.defineProperty(Wo,"__esModule",{value:!0});Wo.WaitingError=Wo.WAITING_ERROR=void 0;Wo.WAITING_ERROR="bullmq:movedToWait";var R1=class extends Error{constructor(e=Wo.WAITING_ERROR){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}};Wo.WaitingError=R1});var ly=h(Ms=>{"use strict";Object.defineProperty(Ms,"__esModule",{value:!0});var Gc=(nr(),Pt(rr));Gc.__exportStar(zo(),Ms);Gc.__exportStar(L3(),Ms);Gc.__exportStar(q3(),Ms);Gc.__exportStar(k1(),Ms);Gc.__exportStar(F3(),Ms);Gc.__exportStar($3(),Ms)});var z3=h((M$e,J3)=>{"use strict";var U3=()=>process.platform==="linux",uy=null,qSe=()=>{if(!uy)if(U3()&&process.report){let t=process.report.excludeNetwork;process.report.excludeNetwork=!0,uy=process.report.getReport(),process.report.excludeNetwork=t}else uy={};return uy};J3.exports={isLinux:U3,getReport:qSe}});var B3=h((N$e,G3)=>{"use strict";var Bc=require("fs"),FSe="/usr/bin/ldd",$Se="/proc/self/exe",dy=2048,USe=t=>{let e=Bc.openSync(t,"r"),r=Buffer.alloc(dy),n=Bc.readSync(e,r,0,dy,0);return Bc.close(e,()=>{}),r.subarray(0,n)},JSe=t=>new Promise((e,r)=>{Bc.open(t,"r",(n,i)=>{if(n)r(n);else{let s=Buffer.alloc(dy);Bc.read(i,s,0,dy,0,(o,a)=>{e(s.subarray(0,a)),Bc.close(i,()=>{})})}})});G3.exports={LDD_PATH:FSe,SELF_PATH:$Se,readFileSync:USe,readFile:JSe}});var V3=h((L$e,H3)=>{"use strict";var zSe=t=>{if(t.length<64||t.readUInt32BE(0)!==2135247942||t.readUInt8(4)!==2||t.readUInt8(5)!==1)return null;let e=t.readUInt32LE(32),r=t.readUInt16LE(54),n=t.readUInt16LE(56);for(let i=0;i<n;i++){let s=e+i*r;if(t.readUInt32LE(s)===3){let a=t.readUInt32LE(s+8),c=t.readUInt32LE(s+32);return t.subarray(a,a+c).toString().replace(/\0.*$/g,"")}}return null};H3.exports={interpreterPath:zSe}});var fJ=h((q$e,pJ)=>{"use strict";var Y3=require("child_process"),{isLinux:Hc,getReport:Q3}=z3(),{LDD_PATH:py,SELF_PATH:X3,readFile:O1,readFileSync:C1}=B3(),{interpreterPath:Z3}=V3(),si,oi,ai,eJ="getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true",Ns="",tJ=()=>Ns||new Promise(t=>{Y3.exec(eJ,(e,r)=>{Ns=e?" ":r,t(Ns)})}),rJ=()=>{if(!Ns)try{Ns=Y3.execSync(eJ,{encoding:"utf8"})}catch{Ns=" "}return Ns},Ji="glibc",nJ=/LIBC[a-z0-9 \-).]*?(\d+\.\d+)/i,Yo="musl",GSe=t=>t.includes("libc.musl-")||t.includes("ld-musl-"),iJ=()=>{let t=Q3();return t.header&&t.header.glibcVersionRuntime?Ji:Array.isArray(t.sharedObjects)&&t.sharedObjects.some(GSe)?Yo:null},sJ=t=>{let[e,r]=t.split(/[\r\n]+/);return e&&e.includes(Ji)?Ji:r&&r.includes(Yo)?Yo:null},oJ=t=>{if(t){if(t.includes("/ld-musl-"))return Yo;if(t.includes("/ld-linux-"))return Ji}return null},aJ=t=>(t=t.toString(),t.includes("musl")?Yo:t.includes("GNU C Library")?Ji:null),BSe=async()=>{if(oi!==void 0)return oi;oi=null;try{let t=await O1(py);oi=aJ(t)}catch{}return oi},HSe=()=>{if(oi!==void 0)return oi;oi=null;try{let t=C1(py);oi=aJ(t)}catch{}return oi},VSe=async()=>{if(si!==void 0)return si;si=null;try{let t=await O1(X3),e=Z3(t);si=oJ(e)}catch{}return si},WSe=()=>{if(si!==void 0)return si;si=null;try{let t=C1(X3),e=Z3(t);si=oJ(e)}catch{}return si},cJ=async()=>{let t=null;if(Hc()&&(t=await VSe(),!t&&(t=await BSe(),t||(t=iJ()),!t))){let e=await tJ();t=sJ(e)}return t},lJ=()=>{let t=null;if(Hc()&&(t=WSe(),!t&&(t=HSe(),t||(t=iJ()),!t))){let e=rJ();t=sJ(e)}return t},YSe=async()=>Hc()&&await cJ()!==Ji,QSe=()=>Hc()&&lJ()!==Ji,XSe=async()=>{if(ai!==void 0)return ai;ai=null;try{let e=(await O1(py)).match(nJ);e&&(ai=e[1])}catch{}return ai},ZSe=()=>{if(ai!==void 0)return ai;ai=null;try{let e=C1(py).match(nJ);e&&(ai=e[1])}catch{}return ai},uJ=()=>{let t=Q3();return t.header&&t.header.glibcVersionRuntime?t.header.glibcVersionRuntime:null},W3=t=>t.trim().split(/\s+/)[1],dJ=t=>{let[e,r,n]=t.split(/[\r\n]+/);return e&&e.includes(Ji)?W3(e):r&&n&&r.includes(Yo)?W3(n):null},exe=async()=>{let t=null;if(Hc()&&(t=await XSe(),t||(t=uJ()),!t)){let e=await tJ();t=dJ(e)}return t},txe=()=>{let t=null;if(Hc()&&(t=ZSe(),t||(t=uJ()),!t)){let e=rJ();t=dJ(e)}return t};pJ.exports={GLIBC:Ji,MUSL:Yo,family:cJ,familySync:lJ,isNonGlibcLinux:YSe,isNonGlibcLinuxSync:QSe,version:exe,versionSync:txe}});var kJ=h((F$e,TJ)=>{var rxe=require("fs"),jn=require("path"),nxe=require("url"),yJ=require("os"),gJ=typeof __webpack_require__=="function"?__non_webpack_require__:require,ixe=process.config&&process.config.variables||{},sxe=!!process.env.PREBUILDS_ONLY,M1=process.versions,P1=M1.modules;(M1.deno||process.isBun)&&(P1="unsupported");var j1=cxe()?"electron":axe()?"node-webkit":"node",fy=process.env.npm_config_arch||yJ.arch(),my=process.env.npm_config_platform||yJ.platform(),bJ=process.env.LIBC||(lxe(my)?"musl":"glibc"),K1=process.env.ARM_VERSION||(fy==="arm64"?"8":ixe.arm_version)||"",vJ=(M1.uv||"").split(".")[0];TJ.exports=ci;function ci(t){return gJ(ci.resolve(t))}ci.resolve=ci.path=function(t){t=jn.resolve(t||".");var e="",r;try{e=gJ(jn.join(t,"package.json")).name;var n=e.toUpperCase().replace(/-/g,"_");process.env[n+"_PREBUILD"]&&(t=process.env[n+"_PREBUILD"])}catch(y){r=y}if(!sxe){var i=mJ(jn.join(t,"build/Release"),hJ);if(i)return i;var s=mJ(jn.join(t,"build/Debug"),hJ);if(s)return s}var o=f(t);if(o)return o;var a=f(jn.dirname(process.execPath));if(a)return a;var c=(e[0]=="@"?"":"@"+e+"/")+e+"-"+my+"-"+fy,l;try{var u=jn.dirname(require("module").createRequire(nxe.pathToFileURL(jn.join(t,"package.json"))).resolve(c));return m(u)}catch(y){l=y}var d=["platform="+my,"arch="+fy,"runtime="+j1,"abi="+P1,"uv="+vJ,K1?"armv="+K1:"","libc="+bJ,"node="+process.versions.node,process.versions.electron?"electron="+process.versions.electron:"",typeof __webpack_require__=="function"?"webpack=true":""].filter(Boolean).join(" ");let p="No native build was found for "+d+`
|
||
attempted loading from: `+t+" and package: "+c+`
|
||
`;throw r&&(p+="Error finding package.json: "+r.message+`
|
||
`),l&&(p+="Error resolving package: "+l.message+`
|
||
`),new Error(p);function f(y){var b=D1(jn.join(y,"prebuilds")).map(EJ),v=b.filter(SJ(my,fy)).sort(xJ)[0];if(v)return m(jn.join(y,"prebuilds",v.name))}function m(y){var b=D1(y).map(wJ),v=b.filter(_J(j1,P1)),E=v.sort(IJ(j1))[0];if(E)return jn.join(y,E.file)}};function D1(t){try{return rxe.readdirSync(t)}catch{return[]}}function mJ(t,e){var r=D1(t).filter(e);return r[0]&&jn.join(t,r[0])}function hJ(t){return/\.node$/.test(t)}function EJ(t){var e=t.split("-");if(e.length===2){var r=e[0],n=e[1].split("+");if(r&&n.length&&n.every(Boolean))return{name:t,platform:r,architectures:n}}}function SJ(t,e){return function(r){return r==null||r.platform!==t?!1:r.architectures.includes(e)}}function xJ(t,e){return t.architectures.length-e.architectures.length}function wJ(t){var e=t.split("."),r=e.pop(),n={file:t,specificity:0};if(r==="node"){for(var i=0;i<e.length;i++){var s=e[i];if(s==="node"||s==="electron"||s==="node-webkit")n.runtime=s;else if(s==="napi")n.napi=!0;else if(s.slice(0,3)==="abi")n.abi=s.slice(3);else if(s.slice(0,2)==="uv")n.uv=s.slice(2);else if(s.slice(0,4)==="armv")n.armv=s.slice(4);else if(s==="glibc"||s==="musl")n.libc=s;else continue;n.specificity++}return n}}function _J(t,e){return function(r){return!(r==null||r.runtime!==t&&!oxe(r)||r.abi!==e&&!r.napi||r.uv&&r.uv!==vJ||r.armv&&r.armv!==K1||r.libc&&r.libc!==bJ)}}function oxe(t){return t.runtime==="node"&&t.napi}function IJ(t){return function(e,r){return e.runtime!==r.runtime?e.runtime===t?-1:1:e.abi!==r.abi?e.abi?-1:1:e.specificity!==r.specificity?e.specificity>r.specificity?-1:1:0}}function axe(){return!!(process.versions&&process.versions.nw)}function cxe(){return process.versions&&process.versions.electron||process.env.ELECTRON_RUN_AS_NODE?!0:typeof window<"u"&&window.process&&window.process.type==="renderer"}function lxe(t){if(t!=="linux")return!1;let{familySync:e,MUSL:r}=fJ();return e()===r}ci.parseTags=wJ;ci.matchTags=_J;ci.compareTags=IJ;ci.parseTuple=EJ;ci.matchTuple=SJ;ci.compareTuples=xJ});var AJ=h(($$e,L1)=>{var N1=typeof __webpack_require__=="function"?__non_webpack_require__:require;typeof N1.addon=="function"?L1.exports=N1.addon.bind(N1):L1.exports=kJ()});var OJ=h((U$e,RJ)=>{RJ.exports=AJ()(__CM_DIRNAME__)});var c6=h(ke=>{"use strict";var GJ=require("stream"),uxe=require("module"),q1=typeof document<"u"?document.currentScript:null,J1;try{J1=new TextDecoder}catch{}var D,Nr,w=0,z1=[],Xo=z1,wd=0,je={},xe,zi,Mr=0,pn=0,xt,Gi,sr=[],ve,CJ={useRecords:!1,mapsAsObjects:!0},by=class{},G1=new by;G1.name="MessagePack 0xC1";var Ls=!1,jJ=2,Bi=class t{constructor(e){e&&(e.useRecords===!1&&e.mapsAsObjects===void 0&&(e.mapsAsObjects=!0),e.sequential&&e.trusted!==!1&&(e.trusted=!0,!e.structures&&e.useRecords!=!1&&(e.structures=[],e.maxSharedStructures||(e.maxSharedStructures=0))),e.structures?e.structures.sharedLength=e.structures.length:e.getStructures&&((e.structures=[]).uninitialized=!0,e.structures.sharedLength=0),e.int64AsNumber&&(e.int64AsType="number")),Object.assign(this,e)}unpack(e,r){if(D)return e6(()=>(Ey(),this?this.unpack(e,r):t.prototype.unpack.call(CJ,e,r)));!e.buffer&&e.constructor===ArrayBuffer&&(e=typeof Buffer<"u"?Buffer.from(e):new Uint8Array(e)),typeof r=="object"?(Nr=r.end||e.length,w=r.start||0):(w=0,Nr=r>-1?r:e.length),wd=0,pn=0,zi=null,Xo=z1,xt=null,D=e;try{ve=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(n){throw D=null,e instanceof Uint8Array?n:new Error("Source must be a Uint8Array or Buffer but was a "+(e&&typeof e=="object"?e.constructor.name:typeof e))}if(this instanceof t){if(je=this,this.structures)return xe=this.structures,hy(r);(!xe||xe.length>0)&&(xe=[])}else je=CJ,(!xe||xe.length>0)&&(xe=[]);return hy(r)}unpackMultiple(e,r){let n,i=0;try{Ls=!0;let s=e.length,o=this?this.unpack(e,s):Ty.unpack(e,s);if(r){if(r(o,i,w)===!1)return;for(;w<s;)if(i=w,r(hy(),i,w)===!1)return}else{for(n=[o];w<s;)i=w,n.push(hy());return n}}catch(s){throw s.lastPosition=i,s.values=n,s}finally{Ls=!1,Ey()}}_mergeStructures(e,r){this._onLoadedStructures&&(e=this._onLoadedStructures(e)),e=e||[],Object.isFrozen(e)&&(e=e.map(n=>n.slice(0)));for(let n=0,i=e.length;n<i;n++){let s=e[n];s&&(s.isShared=!0,n>=32&&(s.highByte=n-32>>5))}e.sharedLength=e.length;for(let n in r||[])if(n>=0){let i=e[n],s=r[n];s&&(i&&((e.restoreStructures||(e.restoreStructures=[]))[n]=i),e[n]=s)}return this.structures=e}decode(e,r){return this.unpack(e,r)}};function hy(t){try{if(!je.trusted&&!Ls){let r=xe.sharedLength||0;r<xe.length&&(xe.length=r)}let e;if(je._readStruct&&D[w]<64&&D[w]>=32?(e=je._readStruct(D,w,Nr),D=null,!(t&&t.lazy)&&e&&(e=e.toJSON()),w=Nr):e=ft(),xt&&(w=xt.postBundlePosition,xt=null),Ls&&(xe.restoreStructures=null),w==Nr)xe&&xe.restoreStructures&&PJ(),xe=null,D=null,Gi&&(Gi=null);else{if(w>Nr)throw new Error("Unexpected end of MessagePack data");if(!Ls){let r;try{r=JSON.stringify(e,(n,i)=>typeof i=="bigint"?`${i}n`:i).slice(0,100)}catch(n){r="(JSON view not available "+n+")"}throw new Error("Data read, but end of buffer not reached "+r)}}return e}catch(e){throw xe&&xe.restoreStructures&&PJ(),Ey(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer")||w>Nr)&&(e.incomplete=!0),e}}function PJ(){for(let t in xe.restoreStructures)xe[t]=xe.restoreStructures[t];xe.restoreStructures=null}function ft(){let t=D[w++];if(t<160)if(t<128){if(t<64)return t;{let e=xe[t&63]||je.getStructures&&BJ()[t&63];return e?(e.read||(e.read=B1(e,t&63)),e.read()):t}}else if(t<144)if(t-=128,je.mapsAsObjects){let e={};for(let r=0;r<t;r++){let n=QJ();n==="__proto__"&&(n="__proto_"),e[n]=ft()}return e}else{let e=new Map;for(let r=0;r<t;r++)e.set(ft(),ft());return e}else{t-=144;let e=new Array(t);for(let r=0;r<t;r++)e[r]=ft();return je.freezeData?Object.freeze(e):e}else if(t<192){let e=t-160;if(pn>=w)return zi.slice(w-Mr,(w+=e)-Mr);if(pn==0&&Nr<140){let r=e<16?H1(e):YJ(e);if(r!=null)return r}return vy(e)}else{let e;switch(t){case 192:return null;case 193:return xt?(e=ft(),e>0?xt[1].slice(xt.position1,xt.position1+=e):xt[0].slice(xt.position0,xt.position0-=e)):G1;case 194:return!1;case 195:return!0;case 196:if(e=D[w++],e===void 0)throw new Error("Unexpected end of buffer");return F1(e);case 197:return e=ve.getUint16(w),w+=2,F1(e);case 198:return e=ve.getUint32(w),w+=4,F1(e);case 199:return Qo(D[w++]);case 200:return e=ve.getUint16(w),w+=2,Qo(e);case 201:return e=ve.getUint32(w),w+=4,Qo(e);case 202:if(e=ve.getFloat32(w),je.useFloat32>2){let r=Iy[(D[w]&127)<<1|D[w+1]>>7];return w+=4,(r*e+(e>0?.5:-.5)>>0)/r}return w+=4,e;case 203:return e=ve.getFloat64(w),w+=8,e;case 204:return D[w++];case 205:return e=ve.getUint16(w),w+=2,e;case 206:return e=ve.getUint32(w),w+=4,e;case 207:return je.int64AsType==="number"?(e=ve.getUint32(w)*4294967296,e+=ve.getUint32(w+4)):je.int64AsType==="string"?e=ve.getBigUint64(w).toString():je.int64AsType==="auto"?(e=ve.getBigUint64(w),e<=BigInt(2)<<BigInt(52)&&(e=Number(e))):e=ve.getBigUint64(w),w+=8,e;case 208:return ve.getInt8(w++);case 209:return e=ve.getInt16(w),w+=2,e;case 210:return e=ve.getInt32(w),w+=4,e;case 211:return je.int64AsType==="number"?(e=ve.getInt32(w)*4294967296,e+=ve.getUint32(w+4)):je.int64AsType==="string"?e=ve.getBigInt64(w).toString():je.int64AsType==="auto"?(e=ve.getBigInt64(w),e>=BigInt(-2)<<BigInt(52)&&e<=BigInt(2)<<BigInt(52)&&(e=Number(e))):e=ve.getBigInt64(w),w+=8,e;case 212:if(e=D[w++],e==114)return qJ(D[w++]&63);{let r=sr[e];if(r)return r.read?(w++,r.read(ft())):r.noBuffer?(w++,r()):r(D.subarray(w,++w));throw new Error("Unknown extension "+e)}case 213:return e=D[w],e==114?(w++,qJ(D[w++]&63,D[w++])):Qo(2);case 214:return Qo(4);case 215:return Qo(8);case 216:return Qo(16);case 217:return e=D[w++],pn>=w?zi.slice(w-Mr,(w+=e)-Mr):HJ(e);case 218:return e=ve.getUint16(w),w+=2,pn>=w?zi.slice(w-Mr,(w+=e)-Mr):VJ(e);case 219:return e=ve.getUint32(w),w+=4,pn>=w?zi.slice(w-Mr,(w+=e)-Mr):WJ(e);case 220:return e=ve.getUint16(w),w+=2,DJ(e);case 221:return e=ve.getUint32(w),w+=4,DJ(e);case 222:return e=ve.getUint16(w),w+=2,MJ(e);case 223:return e=ve.getUint32(w),w+=4,MJ(e);default:if(t>=224)return t-256;if(t===void 0){let r=new Error("Unexpected end of MessagePack data");throw r.incomplete=!0,r}throw new Error("Unknown MessagePack token "+t)}}}var dxe=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function B1(t,e){function r(){if(r.count++>jJ){let i;try{i=t.read=new Function("r","return function(){return "+(je.freezeData?"Object.freeze":"")+"({"+t.map(s=>s==="__proto__"?"__proto_:r()":dxe.test(s)?s+":r()":"["+JSON.stringify(s)+"]:r()").join(",")+"})}")(ft)}catch{return jJ=1/0,r()}return t.read0=i,t.highByte===0&&(t.read=KJ(e,t.read)),i()}let n={};for(let i=0,s=t.length;i<s;i++){let o=t[i];o==="__proto__"&&(o="__proto_"),n[o]=ft()}return je.freezeData?Object.freeze(n):n}return r.count=0,t.read0=r,t.highByte===0?KJ(e,r):r}var KJ=(t,e)=>function(){let r=D[w++];if(r===0)return e();let n=t<32?-(t+(r<<5)):t+(r<<5),i=xe[n]||BJ()[n];if(!i)throw new Error("Record id is not defined for "+n);return i.read||(i.read=B1(i,t)),i.read()};function BJ(){let t=e6(()=>(D=null,je.getStructures()));return xe=je._mergeStructures(t,xe)}var vy=Yc,HJ=Yc,VJ=Yc,WJ=Yc;ke.isNativeAccelerationEnabled=!1;function pxe(t){ke.isNativeAccelerationEnabled=!0,vy=e(1),HJ=e(2),VJ=e(3),WJ=e(5);function e(r){return function(i){let s=Xo[wd++];if(s==null){if(xt)return Yc(i);let a=D.byteOffset,c=t(w-r+a,Nr+a,D.buffer);if(typeof c=="string")s=c,Xo=z1;else if(Xo=c,wd=1,pn=1,s=Xo[0],s===void 0)throw new Error("Unexpected end of buffer")}let o=s.length;return o<=i?(w+=i,s):(zi=s,Mr=w,pn=w+o,w+=i,s.slice(0,i))}}}function Yc(t){let e;if(t<16&&(e=H1(t)))return e;if(t>64&&J1)return J1.decode(D.subarray(w,w+=t));let r=w+t,n=[];for(e="";w<r;){let i=D[w++];if((i&128)===0)n.push(i);else if((i&224)===192)if(i<194||w>=r||(D[w]&192)!==128)n.push(65533);else{let s=D[w++]&63;n.push((i&31)<<6|s)}else if((i&240)===224){let s=w<r?D[w]:0;if(w>=r||(s&192)!==128||i===224&&s<160||i===237&&s>=160)n.push(65533);else if(w++,w>=r||(D[w]&192)!==128)n.push(65533);else{let o=D[w++]&63;n.push((i&31)<<12|(s&63)<<6|o)}}else if((i&248)===240){let s=w<r?D[w]:0;if(i>244||w>=r||(s&192)!==128||i===240&&s<144||i===244&&s>=144)n.push(65533);else if(w++,w>=r||(D[w]&192)!==128)n.push(65533);else{let o=D[w++]&63;if(w>=r||(D[w]&192)!==128)n.push(65533);else{let a=D[w++]&63,c=(i&7)<<18|(s&63)<<12|o<<6|a;c-=65536,n.push(c>>>10&1023|55296),n.push(56320|c&1023)}}}else n.push(65533);n.length>=4096&&(e+=Ct.apply(String,n),n.length=0)}return n.length>0&&(e+=Ct.apply(String,n)),e}function DJ(t){let e=new Array(t);for(let r=0;r<t;r++)e[r]=ft();return je.freezeData?Object.freeze(e):e}function MJ(t){if(je.mapsAsObjects){let e={};for(let r=0;r<t;r++){let n=QJ();n==="__proto__"&&(n="__proto_"),e[n]=ft()}return e}else{let e=new Map;for(let r=0;r<t;r++)e.set(ft(),ft());return e}}var Ct=String.fromCharCode;function YJ(t){let e=w,r=new Array(t);for(let n=0;n<t;n++){let i=D[w++];if((i&128)>0){w=e;return}r[n]=i}return Ct.apply(String,r)}function H1(t){if(t<4)if(t<2){if(t===0)return"";{let e=D[w++];if((e&128)>1){w-=1;return}return Ct(e)}}else{let e=D[w++],r=D[w++];if((e&128)>0||(r&128)>0){w-=2;return}if(t<3)return Ct(e,r);let n=D[w++];if((n&128)>0){w-=3;return}return Ct(e,r,n)}else{let e=D[w++],r=D[w++],n=D[w++],i=D[w++];if((e&128)>0||(r&128)>0||(n&128)>0||(i&128)>0){w-=4;return}if(t<6){if(t===4)return Ct(e,r,n,i);{let s=D[w++];if((s&128)>0){w-=5;return}return Ct(e,r,n,i,s)}}else if(t<8){let s=D[w++],o=D[w++];if((s&128)>0||(o&128)>0){w-=6;return}if(t<7)return Ct(e,r,n,i,s,o);let a=D[w++];if((a&128)>0){w-=7;return}return Ct(e,r,n,i,s,o,a)}else{let s=D[w++],o=D[w++],a=D[w++],c=D[w++];if((s&128)>0||(o&128)>0||(a&128)>0||(c&128)>0){w-=8;return}if(t<10){if(t===8)return Ct(e,r,n,i,s,o,a,c);{let l=D[w++];if((l&128)>0){w-=9;return}return Ct(e,r,n,i,s,o,a,c,l)}}else if(t<12){let l=D[w++],u=D[w++];if((l&128)>0||(u&128)>0){w-=10;return}if(t<11)return Ct(e,r,n,i,s,o,a,c,l,u);let d=D[w++];if((d&128)>0){w-=11;return}return Ct(e,r,n,i,s,o,a,c,l,u,d)}else{let l=D[w++],u=D[w++],d=D[w++],p=D[w++];if((l&128)>0||(u&128)>0||(d&128)>0||(p&128)>0){w-=12;return}if(t<14){if(t===12)return Ct(e,r,n,i,s,o,a,c,l,u,d,p);{let f=D[w++];if((f&128)>0){w-=13;return}return Ct(e,r,n,i,s,o,a,c,l,u,d,p,f)}}else{let f=D[w++],m=D[w++];if((f&128)>0||(m&128)>0){w-=14;return}if(t<15)return Ct(e,r,n,i,s,o,a,c,l,u,d,p,f,m);let y=D[w++];if((y&128)>0){w-=15;return}return Ct(e,r,n,i,s,o,a,c,l,u,d,p,f,m,y)}}}}}function NJ(){let t=D[w++],e;if(t<192)e=t-160;else switch(t){case 217:e=D[w++];break;case 218:e=ve.getUint16(w),w+=2;break;case 219:e=ve.getUint32(w),w+=4;break;default:throw new Error("Expected string")}return Yc(e)}function F1(t){return je.copyBuffers?Uint8Array.prototype.slice.call(D,w,w+=t):D.subarray(w,w+=t)}function Qo(t){let e=D[w++];if(sr[e]){let r;return sr[e](D.subarray(w,r=w+=t),n=>{w=n;try{return ft()}finally{w=r}})}else throw new Error("Unknown extension type "+e)}var LJ=new Array(4096);function QJ(){let t=D[w++];if(t>=160&&t<192){if(t=t-160,pn>=w)return zi.slice(w-Mr,(w+=t)-Mr);if(!(pn==0&&Nr<180))return vy(t)}else return w--,XJ(ft());let e=(t<<5^(t>1?ve.getUint16(w):t>0?D[w]:0))&4095,r=LJ[e],n=w,i=w+t-3,s,o=0;if(r&&r.bytes==t){for(;n<i;){if(s=ve.getUint32(n),s!=r[o++]){n=1879048192;break}n+=4}for(i+=3;n<i;)if(s=D[n++],s!=r[o++]){n=1879048192;break}if(n===i)return w=n,r.string;i-=3,n=w}for(r=[],LJ[e]=r,r.bytes=t;n<i;)s=ve.getUint32(n),r.push(s),n+=4;for(i+=3;n<i;)s=D[n++],r.push(s);let a=t<16?H1(t):YJ(t);return a!=null?r.string=a:r.string=vy(t)}function XJ(t){if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean"||typeof t=="bigint")return t.toString();if(t==null)return t+"";if(je.allowArraysInMapKeys&&Array.isArray(t)&&t.flat().every(e=>["string","number","boolean","bigint"].includes(typeof e)))return t.flat().toString();throw new Error(`Invalid property type for record: ${typeof t}`)}var qJ=(t,e)=>{let r=ft().map(XJ),n=t;e!==void 0&&(t=t<32?-((e<<5)+t):(e<<5)+t,r.highByte=e);let i=xe[t];return i&&(i.isShared||Ls)&&((xe.restoreStructures||(xe.restoreStructures=[]))[t]=i),xe[t]=r,r.read=B1(r,n),(r.read0||r.read)()};sr[0]=()=>{};sr[0].noBuffer=!0;sr[66]=t=>{let e=t.byteLength%8||8,r=BigInt(t[0]&128?t[0]-256:t[0]);for(let n=1;n<e;n++)r<<=BigInt(8),r+=BigInt(t[n]);if(t.byteLength!==e){let n=new DataView(t.buffer,t.byteOffset,t.byteLength),i=(s,o)=>{let a=o-s;if(a<=40){let d=n.getBigUint64(s);for(let p=s+8;p<o;p+=8)d<<=BigInt(64),d|=n.getBigUint64(p);return d}let c=s+(a>>4<<3),l=i(s,c),u=i(c,o);return l<<BigInt((o-c)*8)|u};r=r<<BigInt((n.byteLength-e)*8)|i(e,n.byteLength)}return r};var FJ={Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError:typeof AggregateError=="function"?AggregateError:null};sr[101]=()=>{let t=ft();if(!FJ[t[0]]){let e=Error(t[1],{cause:t[2]});return e.name=t[0],e}return FJ[t[0]](t[1],{cause:t[2]})};sr[105]=t=>{if(je.structuredClone===!1)throw new Error("Structured clone extension is disabled");let e=ve.getUint32(w-4);Gi||(Gi=new Map);let r=D[w],n;r>=144&&r<160||r==220||r==221?n=[]:r>=128&&r<144||r==222||r==223?n=new Map:(r>=199&&r<=201||r>=212&&r<=216)&&D[w+1]===115?n=new Set:n={};let i={target:n};Gi.set(e,i);let s=ft();if(i.used)Object.assign(n,s);else return i.target=s;if(n instanceof Map)for(let[o,a]of s.entries())n.set(o,a);if(n instanceof Set)for(let o of Array.from(s))n.add(o);return n};sr[112]=t=>{if(je.structuredClone===!1)throw new Error("Structured clone extension is disabled");let e=ve.getUint32(w-4),r=Gi.get(e);return r.used=!0,r.target};sr[115]=()=>new Set(ft());var ZJ=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(t=>t+"Array"),fxe=typeof globalThis=="object"?globalThis:window;sr[116]=t=>{let e=t[0],r=Uint8Array.prototype.slice.call(t,1).buffer,n=ZJ[e];if(!n){if(e===16)return r;if(e===17)return new DataView(r);throw new Error("Could not find typed array for code "+e)}return new fxe[n](r)};sr[120]=()=>{let t=ft();return new RegExp(t[0],t[1])};var mxe=[];sr[98]=t=>{let e=(t[0]<<24)+(t[1]<<16)+(t[2]<<8)+t[3],r=w;return w+=e-t.length,xt=mxe,xt=[NJ(),NJ()],xt.position0=0,xt.position1=0,xt.postBundlePosition=w,w=r,ft()};sr[255]=t=>t.length==4?new Date((t[0]*16777216+(t[1]<<16)+(t[2]<<8)+t[3])*1e3):t.length==8?new Date(((t[0]<<22)+(t[1]<<14)+(t[2]<<6)+(t[3]>>2))/1e6+((t[3]&3)*4294967296+t[4]*16777216+(t[5]<<16)+(t[6]<<8)+t[7])*1e3):t.length==12?new Date(((t[0]<<24)+(t[1]<<16)+(t[2]<<8)+t[3])/1e6+((t[4]&128?-281474976710656:0)+t[6]*1099511627776+t[7]*4294967296+t[8]*16777216+(t[9]<<16)+(t[10]<<8)+t[11])*1e3):new Date("invalid");function e6(t){je&&je._onSaveState&&je._onSaveState();let e=Nr,r=w,n=wd,i=Mr,s=pn,o=zi,a=Xo,c=Gi,l=xt,u=new Uint8Array(D.slice(0,Nr)),d=xe,p=xe.slice(0,xe.length),f=je,m=Ls,y=t();return Nr=e,w=r,wd=n,Mr=i,pn=s,zi=o,Xo=a,Gi=c,xt=l,D=u,Ls=m,xe=d,xe.splice(0,xe.length,...p),je=f,ve=new DataView(D.buffer,D.byteOffset,D.byteLength),y}function Ey(){D=null,Gi=null,xe=null}function hxe(t){t.unpack?sr[t.type]=t.unpack:sr[t.type]=t}var Iy=new Array(147);for(let t=0;t<256;t++)Iy[t]=+("1e"+Math.floor(45.15-t*.30103));var yxe=Bi,Ty=new Bi({useRecords:!1}),gxe=Ty.unpack,bxe=Ty.unpackMultiple,vxe=Ty.unpack,t6={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},r6=new Float32Array(1),$J=new Uint8Array(r6.buffer,0,4);function Exe(t){r6[0]=t;let e=Iy[($J[3]&127)<<1|$J[2]>>7];return(e*t+(t>0?.5:-.5)>>0)/e}Bi.SUPPORTS_STRUCT_HOOKS=!0;var gy;try{gy=new TextEncoder}catch{}var Sy,xy,Wc=typeof Buffer<"u",yy=Wc?function(t){return Buffer.allocUnsafeSlow(t)}:Uint8Array,n6=Wc?Buffer:Uint8Array,UJ=Wc?4294967296:2144337920,A,xd,Fe,I=0,ir,ot=null,Sxe=21760,xxe=/[\u0080-\uFFFF]/,Vc=Symbol("record-id"),Hi=class extends Bi{constructor(e){super(e),this.offset=0;let r,n,i,s,o=n6.prototype.utf8Write?function(T,K){return A.utf8Write(T,K,A.byteLength-K)}:gy&&gy.encodeInto?function(T,K){return gy.encodeInto(T,A.subarray(K)).written}:!1,a=this;e||(e={});let c=e&&e.sequential,l=e.structures||e.saveStructures,u=e.maxSharedStructures;if(u==null&&(u=l?32:0),u>8160)throw new Error("Maximum maxSharedStructure is 8160");e.structuredClone&&e.moreTypes==null&&(this.moreTypes=!0);let d=e.maxOwnStructures;d==null&&(d=l?32:64),!this.structures&&e.useRecords!=!1&&(this.structures=[]);let p=u>32||d+u>64,f=u+64,m=u+d+64;if(m>8256)throw new Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let y=[],b=0,v=0;this.pack=this.encode=function(T,K){if(A||(A=new yy(8192),Fe=A.dataView||(A.dataView=new DataView(A.buffer,0,8192)),I=0),ir=A.length-10,ir-I<2048?(A=new yy(A.length),Fe=A.dataView||(A.dataView=new DataView(A.buffer,0,A.length)),ir=A.length-10,I=0):I=I+7&2147483640,r=I,K&a6&&(I+=K&255),s=a.structuredClone?new Map:null,a.bundleStrings&&typeof T!="string"?(ot=[],ot.size=1/0):ot=null,i=a.structures,i){i.uninitialized&&(i=a._mergeStructures(a.getStructures()));let C=i.sharedLength||0;if(C>u)throw new Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+i.sharedLength);if(!i.transitions){i.transitions=Object.create(null);for(let j=0;j<C;j++){let Y=i[j];if(!Y)continue;let W,G=i.transitions;for(let Ae=0,ge=Y.length;Ae<ge;Ae++){let qn=Y[Ae];W=G[qn],W||(W=G[qn]=Object.create(null)),G=W}G[Vc]=j+64}this.lastNamedStructuresLength=C}c||(i.nextId=C+64)}n&&(n=!1);let P;try{a._writeStruct&&T&&typeof T=="object"?T.constructor===Object?q(T):T.constructor!==Map&&!Array.isArray(T)&&!xy.some(j=>T instanceof j)?q(T.toJSON?T.toJSON():T):k(T):k(T);let C=ot;if(ot&&zJ(r,k,0),s&&s.idsToInsert){let j=s.idsToInsert.sort((Ae,ge)=>Ae.offset>ge.offset?1:-1),Y=j.length,W=-1;for(;C&&Y>0;){let Ae=j[--Y].offset+r;Ae<C.stringsPosition+r&&W===-1&&(W=0),Ae>C.position+r?W>=0&&(W+=6):(W>=0&&(Fe.setUint32(C.position+r,Fe.getUint32(C.position+r)+W),W=-1),C=C.previous,Y++)}W>=0&&C&&Fe.setUint32(C.position+r,Fe.getUint32(C.position+r)+W),I+=j.length*6,I>ir&&U(I),a.offset=I;let G=wxe(A.subarray(r,I),j);return s=null,G}return a.offset=I,K&s6?(A.start=r,A.end=I,A):A.subarray(r,I)}catch(C){throw P=C,C}finally{if(i&&(E(),n&&a.saveStructures)){let C=i.sharedLength||0,j=A.subarray(r,I),Y=(a._prepareStructures||Ixe)(i,a);if(!P)return a.saveStructures(Y,Y.isCompatible)===!1?(i.uninitialized=!0,a.pack(T,K)):(a.lastNamedStructuresLength=C,A.length>1073741824&&(A=null),j)}A.length>1073741824&&(A=null),K&o6&&(I=r)}};let E=()=>{v<10&&v++;let T=i.sharedLength||0;if(i.length>T&&!c&&(i.length=T),b>1e4)i.transitions=null,v=0,b=0,y.length>0&&(y=[]);else if(y.length>0&&!c){for(let K=0,P=y.length;K<P;K++)y[K][Vc]=0;y=[]}},S=T=>{var K=T.length;K<16?A[I++]=144|K:K<65536?(A[I++]=220,A[I++]=K>>8,A[I++]=K&255):(A[I++]=221,Fe.setUint32(I,K),I+=4);for(let P=0;P<K;P++)k(T[P])},k=T=>{I>ir&&(A=U(I));var K=typeof T,P;if(K==="string"){let C=T.length;if(ot&&C>=4&&C<4096){if((ot.size+=C)>Sxe){let G,Ae=(ot[0]?ot[0].length*3+ot[1].length:0)+10;I+Ae>ir&&(A=U(I+Ae));let ge;ot.position?(ge=ot,A[I]=200,I+=3,A[I++]=98,G=I-r,I+=4,zJ(r,k,0),Fe.setUint16(G+r-3,I-r-G)):(A[I++]=214,A[I++]=98,G=I-r,I+=4),ot=["",""],ot.previous=ge,ot.size=0,ot.position=G}let W=xxe.test(T);ot[W?0:1]+=T,A[I++]=193,k(W?-C:C);return}let j;C<32?j=1:C<256?j=2:C<65536?j=3:j=5;let Y=C*3;if(I+Y>ir&&(A=U(I+Y)),C<64||!o){let W,G,Ae,ge=I+j;for(W=0;W<C;W++)G=T.charCodeAt(W),G<128?A[ge++]=G:G<2048?(A[ge++]=G>>6|192,A[ge++]=G&63|128):(G&64512)===55296&&((Ae=T.charCodeAt(W+1))&64512)===56320?(G=65536+((G&1023)<<10)+(Ae&1023),W++,A[ge++]=G>>18|240,A[ge++]=G>>12&63|128,A[ge++]=G>>6&63|128,A[ge++]=G&63|128):(A[ge++]=G>>12|224,A[ge++]=G>>6&63|128,A[ge++]=G&63|128);P=ge-I-j}else P=o(T,I+j);P<32?A[I++]=160|P:P<256?(j<2&&A.copyWithin(I+2,I+1,I+1+P),A[I++]=217,A[I++]=P):P<65536?(j<3&&A.copyWithin(I+3,I+2,I+2+P),A[I++]=218,A[I++]=P>>8,A[I++]=P&255):(j<5&&A.copyWithin(I+5,I+3,I+3+P),A[I++]=219,Fe.setUint32(I,P),I+=4),I+=P}else if(K==="number")if(T>>>0===T)T<32||T<128&&this.useRecords===!1||T<64&&!this._writeStruct?A[I++]=T:T<256?(A[I++]=204,A[I++]=T):T<65536?(A[I++]=205,A[I++]=T>>8,A[I++]=T&255):(A[I++]=206,Fe.setUint32(I,T),I+=4);else if(T>>0===T)T>=-32?A[I++]=256+T:T>=-128?(A[I++]=208,A[I++]=T+256):T>=-32768?(A[I++]=209,Fe.setInt16(I,T),I+=2):(A[I++]=210,Fe.setInt32(I,T),I+=4);else{let C;if((C=this.useFloat32)>0&&T<4294967296&&T>=-2147483648){A[I++]=202,Fe.setFloat32(I,T);let j;if(C<4||(j=T*Iy[(A[I]&127)<<1|A[I+1]>>7])>>0===j){I+=4;return}else I--}A[I++]=203,Fe.setFloat64(I,T),I+=8}else if(K==="object"||K==="function")if(!T)A[I++]=192;else{if(s){let j=s.get(T);if(j){if(!j.id){let Y=s.idsToInsert||(s.idsToInsert=[]);j.id=Y.push(j)}A[I++]=214,A[I++]=112,Fe.setUint32(I,j.id),I+=4;return}else s.set(T,{offset:I-r})}let C=T.constructor;if(C===Object)ee(T);else if(C===Array)S(T);else if(C===Map)if(this.mapAsEmptyObject)A[I++]=128;else{P=T.size,P<16?A[I++]=128|P:P<65536?(A[I++]=222,A[I++]=P>>8,A[I++]=P&255):(A[I++]=223,Fe.setUint32(I,P),I+=4);for(let[j,Y]of T)k(j),k(Y)}else{for(let j=0,Y=Sy.length;j<Y;j++){let W=xy[j];if(T instanceof W){let G=Sy[j];if(G.write){G.type&&(A[I++]=212,A[I++]=G.type,A[I++]=0);let Tl=G.write.call(this,T);Tl===T?Array.isArray(T)?S(T):ee(T):k(Tl);return}let Ae=A,ge=Fe,qn=I;A=null;let ns;try{ns=G.pack.call(this,T,Tl=>(A=Ae,Ae=null,I+=Tl,I>ir&&U(I),{target:A,targetView:Fe,position:I-Tl}),k)}finally{Ae&&(A=Ae,Fe=ge,I=qn,ir=A.length-10)}ns&&(ns.length+I>ir&&U(ns.length+I),I=JJ(ns,A,I,G.type));return}}if(Array.isArray(T))S(T);else{if(T.toJSON){let j=T.toJSON();if(j!==T)return k(j)}if(K==="function")return k(this.writeFunction&&this.writeFunction(T));ee(T)}}}else if(K==="boolean")A[I++]=T?195:194;else if(K==="bigint"){if(T<9223372036854776e3&&T>=-9223372036854776e3)A[I++]=211,Fe.setBigInt64(I,T);else if(T<18446744073709552e3&&T>0)A[I++]=207,Fe.setBigUint64(I,T);else if(this.largeBigIntToFloat)A[I++]=203,Fe.setFloat64(I,Number(T));else{if(this.largeBigIntToString)return k(T.toString());if(this.useBigIntExtension||this.moreTypes){let C=T<0?BigInt(-1):BigInt(0),j;if(T>>BigInt(65536)===C){let Y=BigInt(18446744073709552e3)-BigInt(1),W=[];for(;W.push(T&Y),T>>BigInt(63)!==C;)T>>=BigInt(64);j=new Uint8Array(new BigUint64Array(W).buffer),j.reverse()}else{let Y=T<0,W=(Y?~T:T).toString(16);if(W.length%2?W="0"+W:parseInt(W.charAt(0),16)>=8&&(W="00"+W),Wc)j=Buffer.from(W,"hex");else{j=new Uint8Array(W.length/2);for(let G=0;G<j.length;G++)j[G]=parseInt(W.slice(G*2,G*2+2),16)}if(Y)for(let G=0;G<j.length;G++)j[G]=~j[G]}j.length+I>ir&&U(j.length+I),I=JJ(j,A,I,66);return}else throw new RangeError(T+" was too large to fit in MessagePack 64-bit integer format, use useBigIntExtension, or set largeBigIntToFloat to convert to float-64, or set largeBigIntToString to convert to string")}I+=8}else if(K==="undefined")this.encodeUndefinedAsNil?A[I++]=192:(A[I++]=212,A[I++]=0,A[I++]=0);else throw new Error("Unknown type: "+K)},_=this.variableMapSize||this.coercibleKeyAsNumber||this.skipValues?T=>{let K;if(this.skipValues){K=[];for(let j in T)(typeof T.hasOwnProperty!="function"||T.hasOwnProperty(j))&&!this.skipValues.includes(T[j])&&K.push(j)}else K=Object.keys(T);let P=K.length;P<16?A[I++]=128|P:P<65536?(A[I++]=222,A[I++]=P>>8,A[I++]=P&255):(A[I++]=223,Fe.setUint32(I,P),I+=4);let C;if(this.coercibleKeyAsNumber)for(let j=0;j<P;j++){C=K[j];let Y=Number(C);k(isNaN(Y)?C:Y),k(T[C])}else for(let j=0;j<P;j++)k(C=K[j]),k(T[C])}:T=>{A[I++]=222;let K=I-r;I+=2;let P=0;for(let C in T)(typeof T.hasOwnProperty!="function"||T.hasOwnProperty(C))&&(k(C),k(T[C]),P++);if(P>65535)throw new Error('Object is too large to serialize with fast 16-bit map size, use the "variableMapSize" option to serialize this object');A[K+++r]=P>>8,A[K+r]=P&255},O=this.useRecords===!1?_:e.progressiveRecords&&!p?T=>{let K,P=i.transitions||(i.transitions=Object.create(null)),C=I++-r,j;for(let Y in T)if(typeof T.hasOwnProperty!="function"||T.hasOwnProperty(Y)){if(K=P[Y],K)P=K;else{let W=Object.keys(T),G=P;P=i.transitions;let Ae=0;for(let ge=0,qn=W.length;ge<qn;ge++){let ns=W[ge];K=P[ns],K||(K=P[ns]=Object.create(null),Ae++),P=K}C+r+1==I?(I--,te(P,W,Ae)):Ge(P,W,C,Ae),j=!0,P=G[Y]}k(T[Y])}if(!j){let Y=P[Vc];Y?A[C+r]=Y:Ge(P,Object.keys(T),C,0)}}:T=>{let K,P=i.transitions||(i.transitions=Object.create(null)),C=0;for(let Y in T)(typeof T.hasOwnProperty!="function"||T.hasOwnProperty(Y))&&(K=P[Y],K||(K=P[Y]=Object.create(null),C++),P=K);let j=P[Vc];j?j>=96&&p?(A[I++]=((j-=96)&31)+96,A[I++]=j>>5):A[I++]=j:te(P,P.__keys__||Object.keys(T),C);for(let Y in T)(typeof T.hasOwnProperty!="function"||T.hasOwnProperty(Y))&&k(T[Y])},N=typeof this.useRecords=="function"&&this.useRecords,ee=N?T=>{N(T)?O(T):_(T)}:O,q=T=>{let K=a._writeStruct(T,A,r,I,i,U,(P,C,j)=>{if(j)return n=!0;I=C;let Y=A;return k(P),E(),Y!==A?{position:I,targetView:Fe,target:A}:I});if(K===0)return ee(T);I=K},U=T=>{let K;if(T>16777216){if(T-r>UJ)throw new Error("Packed buffer would be larger than maximum buffer size");K=Math.min(UJ,Math.round(Math.max((T-r)*(T>67108864?1.25:2),4194304)/4096)*4096)}else K=(Math.max(T-r<<2,A.length-1)>>12)+1<<12;let P=new yy(K);return Fe=P.dataView||(P.dataView=new DataView(P.buffer,0,K)),T=Math.min(T,A.length),A.copy?A.copy(P,0,r,T):P.set(A.slice(r,T)),I-=r,r=0,ir=P.length-10,A=P},te=(T,K,P)=>{let C=i.nextId;C||(C=64),C<f&&this.shouldShareStructure&&!this.shouldShareStructure(K)?(C=i.nextOwnId,C<m||(C=f),i.nextOwnId=C+1):(C>=m&&(C=f),i.nextId=C+1);let j=K.highByte=C>=96&&p?C-96>>5:-1;T[Vc]=C,T.__keys__=K,i[C-64]=K,C<f?(K.isShared=!0,i.sharedLength=C-63,n=!0,j>=0?(A[I++]=(C&31)+96,A[I++]=j):A[I++]=C):(j>=0?(A[I++]=213,A[I++]=114,A[I++]=(C&31)+96,A[I++]=j):(A[I++]=212,A[I++]=114,A[I++]=C),P&&(b+=v*P),y.length>=d&&(y.shift()[Vc]=0),y.push(T),k(K))},Ge=(T,K,P,C)=>{let j=A,Y=I,W=ir,G=r;A=xd,I=0,r=0,A||(xd=A=new yy(8192)),ir=A.length-10,te(T,K,C),xd=A;let Ae=I;if(A=j,I=Y,ir=W,r=G,Ae>1){let ge=I+Ae-1;ge>ir&&U(ge);let qn=P+r;A.copyWithin(qn+Ae,qn+1,I),A.set(xd.slice(0,Ae),qn),I=ge}else A[P+r]=xd[0]}}useBuffer(e){A=e,A.dataView||(A.dataView=new DataView(A.buffer,A.byteOffset,A.byteLength)),Fe=A.dataView,I=0}set position(e){I=e}get position(){return I}clearSharedData(){this.structures&&(this.structures=[]),this.typedStructs&&(this.typedStructs=[])}};xy=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,DataView,by];Sy=[{pack(t,e,r){let n=t.getTime()/1e3;if((this.useTimestamp32||t.getMilliseconds()===0)&&n>=0&&n<4294967296){let{target:i,targetView:s,position:o}=e(6);i[o++]=214,i[o++]=255,s.setUint32(o,n)}else if(n>0&&n<4294967296){let{target:i,targetView:s,position:o}=e(10);i[o++]=215,i[o++]=255,s.setUint32(o,t.getMilliseconds()*4e6+(n/1e3/4294967296>>0)),s.setUint32(o+4,n)}else if(isNaN(n)){if(this.onInvalidDate)return e(0),r(this.onInvalidDate());let{target:i,targetView:s,position:o}=e(3);i[o++]=212,i[o++]=255,i[o++]=255}else{let{target:i,targetView:s,position:o}=e(15);i[o++]=199,i[o++]=12,i[o++]=255,s.setUint32(o,t.getMilliseconds()*1e6),s.setBigInt64(o+4,BigInt(Math.floor(n)))}}},{pack(t,e,r){if(this.setAsEmptyObject)return e(0),r({});let n=Array.from(t),{target:i,position:s}=e(this.moreTypes?3:0);this.moreTypes&&(i[s++]=212,i[s++]=115,i[s++]=0),r(n)}},{pack(t,e,r){let{target:n,position:i}=e(this.moreTypes?3:0);this.moreTypes&&(n[i++]=212,n[i++]=101,n[i++]=0),r([t.name,t.message,t.cause])}},{pack(t,e,r){let{target:n,position:i}=e(this.moreTypes?3:0);this.moreTypes&&(n[i++]=212,n[i++]=120,n[i++]=0),r([t.source,t.flags])}},{pack(t,e){this.moreTypes?$1(t,16,e):U1(Wc?Buffer.from(t):new Uint8Array(t),e)}},{pack(t,e){let r=t.constructor;r!==n6&&this.moreTypes?$1(t,ZJ.indexOf(r.name),e):U1(t,e)}},{pack(t,e){this.moreTypes?$1(t,17,e):U1(Wc?Buffer.from(t):new Uint8Array(t),e)}},{pack(t,e){let{target:r,position:n}=e(1);r[n]=193}}];function $1(t,e,r,n){let i=t.byteLength;if(i+1<256){var{target:s,position:o}=r(4+i);s[o++]=199,s[o++]=i+1}else if(i+1<65536){var{target:s,position:o}=r(5+i);s[o++]=200,s[o++]=i+1>>8,s[o++]=i+1&255}else{var{target:s,position:o,targetView:a}=r(7+i);s[o++]=201,a.setUint32(o,i+1),o+=4}s[o++]=116,s[o++]=e,t.buffer||(t=new Uint8Array(t)),s.set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength),o)}function U1(t,e){let r=t.byteLength;var n,i;if(r<256){var{target:n,position:i}=e(r+2);n[i++]=196,n[i++]=r}else if(r<65536){var{target:n,position:i}=e(r+3);n[i++]=197,n[i++]=r>>8,n[i++]=r&255}else{var{target:n,position:i,targetView:s}=e(r+5);n[i++]=198,s.setUint32(i,r),i+=4}n.set(t,i)}function JJ(t,e,r,n){let i=t.length;switch(i){case 1:e[r++]=212;break;case 2:e[r++]=213;break;case 4:e[r++]=214;break;case 8:e[r++]=215;break;case 16:e[r++]=216;break;default:i<256?(e[r++]=199,e[r++]=i):i<65536?(e[r++]=200,e[r++]=i>>8,e[r++]=i&255):(e[r++]=201,e[r++]=i>>24,e[r++]=i>>16&255,e[r++]=i>>8&255,e[r++]=i&255)}return e[r++]=n,e.set(t,r),r+=i,r}function wxe(t,e){let r,n=e.length*6,i=t.length-n;for(;r=e.pop();){let s=r.offset,o=r.id;t.copyWithin(s+n,s,i),n-=6;let a=s+n;t[a++]=214,t[a++]=105,t[a++]=o>>24,t[a++]=o>>16&255,t[a++]=o>>8&255,t[a++]=o&255,i=s}return t}function zJ(t,e,r){if(ot.length>0){Fe.setUint32(ot.position+t,I+r-ot.position-t),ot.stringsPosition=I-t;let n=ot;ot=null,e(n[0]),e(n[1])}}function _xe(t){if(t.Class){if(!t.pack&&!t.write)throw new Error("Extension has no pack or write function");if(t.pack&&!t.type)throw new Error("Extension has no type (numeric code to identify the extension)");xy.unshift(t.Class),Sy.unshift(t)}hxe(t)}function Ixe(t,e){return t.isCompatible=r=>{let n=!r||(e.lastNamedStructuresLength||0)===r.length;return n||e._mergeStructures(r),n},t}Hi.SUPPORTS_STRUCT_HOOKS=!0;var i6=new Hi({useRecords:!1}),Txe=i6.pack,kxe=i6.pack,Axe=Hi,{NEVER:Rxe,ALWAYS:Oxe,DECIMAL_ROUND:Cxe,DECIMAL_FIT:jxe}=t6,s6=512,o6=1024,a6=2048,wy=class extends GJ.Transform{constructor(e){e||(e={}),e.writableObjectMode=!0,super(e),e.sequential=!0,this.packr=e.packr||new Hi(e)}_transform(e,r,n){this.push(this.packr.pack(e)),n()}},_y=class extends GJ.Transform{constructor(e){e||(e={}),e.objectMode=!0,super(e),e.structures=[],this.maxIncompleteBufferSize=e.maxIncompleteBufferSize!==void 0?e.maxIncompleteBufferSize:67108864,this.unpackr=e.unpackr||new Bi(e)}_transform(e,r,n){this.incompleteBuffer&&(e=Buffer.concat([this.incompleteBuffer,e]),this.incompleteBuffer=null);let i;try{i=this.unpackr.unpackMultiple(e)}catch(s){if(s.incomplete){let o=e.slice(s.lastPosition);if(o.length>this.maxIncompleteBufferSize)return this.incompleteBuffer=null,n(new Error("Maximum incomplete buffer size exceeded"));this.incompleteBuffer=o,i=s.values}else return n(s)}for(let s of i||[])s===null&&(s=this.getNullValue()),this.push(s);n()}getNullValue(){return Symbol.for(null)}};function Pxe(t,e={}){if(!t||typeof t!="object")throw new Error("first argument must be an Iterable, Async Iterable, or a Promise for an Async Iterable");if(typeof t[Symbol.iterator]=="function")return Kxe(t,e);if(typeof t.then=="function"||typeof t[Symbol.asyncIterator]=="function")return Dxe(t,e);throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a Promise")}function*Kxe(t,e){let r=new Hi(e);for(let n of t)yield r.pack(n)}async function*Dxe(t,e){let r=new Hi(e);for await(let n of t)yield r.pack(n)}function Mxe(t,e={}){if(!t||typeof t!="object")throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a promise");let r=new Bi(e),n,i=s=>{let o;n&&(s=Buffer.concat([n,s]),n=void 0);try{o=r.unpackMultiple(s)}catch(a){if(a.incomplete)n=s.slice(a.lastPosition),o=a.values;else throw a}return o};if(typeof t[Symbol.iterator]=="function")return(function*(){for(let o of t)yield*i(o)})();if(typeof t[Symbol.asyncIterator]=="function")return(async function*(){for await(let o of t)yield*i(o)})()}var Nxe=Mxe,Lxe=Pxe,qxe=!1,Fxe=!0,$xe=process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED!==void 0&&process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED.toLowerCase()==="true";if(!$xe){let t;try{typeof require=="function"?t=OJ():t=uxe.createRequire(typeof document>"u"?require("url").pathToFileURL(__CM_FILENAME__).href:q1&&q1.tagName.toUpperCase()==="SCRIPT"&&q1.src||new URL("node.cjs",document.baseURI).href)("msgpackr-extract"),t&&pxe(t.extractStrings)}catch{}}ke.ALWAYS=Oxe;ke.C1=G1;ke.DECIMAL_FIT=jxe;ke.DECIMAL_ROUND=Cxe;ke.Decoder=yxe;ke.DecoderStream=_y;ke.Encoder=Axe;ke.EncoderStream=wy;ke.FLOAT32_OPTIONS=t6;ke.NEVER=Rxe;ke.Packr=Hi;ke.PackrStream=wy;ke.RESERVE_START_SPACE=a6;ke.RESET_BUFFER_MODE=o6;ke.REUSE_BUFFER_MODE=s6;ke.Unpackr=Bi;ke.UnpackrStream=_y;ke.addExtension=_xe;ke.clearSource=Ey;ke.decode=vxe;ke.decodeIter=Nxe;ke.encode=kxe;ke.encodeIter=Lxe;ke.mapsAsObjects=Fxe;ke.pack=Txe;ke.roundFloat32=Exe;ke.unpack=gxe;ke.unpackMultiple=bxe;ke.useRecords=qxe});var Ay=h(ky=>{"use strict";Object.defineProperty(ky,"__esModule",{value:!0});ky.version=void 0;ky.version="5.81.5"});var W1=h(_d=>{"use strict";Object.defineProperty(_d,"__esModule",{value:!0});_d.Scripts=void 0;_d.raw2NextJobData=Ry;var Uxe=c6(),Jxe=new Uxe.Packr({useRecords:!1,encodeUndefinedAsNil:!0}),wt=Jxe.pack,Pn=_r(),qs=Dr(),zxe=Ay(),Gxe=ly(),Bxe=5,V1=class{constructor(e){this.queue=e,this.version=zxe.version;let r=this.queue.keys;this.moveToFinishedKeys=[r.wait,r.active,r.prioritized,r.events,r.stalled,r.limiter,r.delayed,r.paused,r.meta,r.pc,void 0,void 0,void 0,void 0]}execCommand(e,r,n){let i=`${r}:${this.version}`;return e.runCommand(i,n)}async isJobInList(e,r){let n=await this.queue.client,i;return(0,qs.isRedisVersionLowerThan)(this.queue.redisVersion,"6.0.6",this.queue.databaseType)?i=await this.execCommand(n,"isJobInList",[e,r]):i=await n.lpos(e,r),Number.isInteger(i)}addDelayedJobArgs(e,r,n){let i=this.queue.keys,s=[i.marker,i.meta,i.id,i.delayed,i.completed,i.events];return s.push(wt(n),e.data,r),s}addDelayedJob(e,r,n,i){let s=this.addDelayedJobArgs(r,n,i);return this.execCommand(e,"addDelayedJob",s)}addPrioritizedJobArgs(e,r,n){let i=this.queue.keys,s=[i.marker,i.meta,i.id,i.prioritized,i.delayed,i.completed,i.active,i.events,i.pc];return s.push(wt(n),e.data,r),s}addPrioritizedJob(e,r,n,i){let s=this.addPrioritizedJobArgs(r,n,i);return this.execCommand(e,"addPrioritizedJob",s)}addParentJobArgs(e,r,n){let i=this.queue.keys,s=[i.meta,i.id,i.delayed,i["waiting-children"],i.completed,i.events];return s.push(wt(n),e.data,r),s}addParentJob(e,r,n,i){let s=this.addParentJobArgs(r,n,i);return this.execCommand(e,"addParentJob",s)}addStandardJobArgs(e,r,n){let i=this.queue.keys,s=[i.wait,i.paused,i.meta,i.id,i.completed,i.delayed,i.active,i.events,i.marker];return s.push(wt(n),e.data,r),s}addStandardJob(e,r,n,i){let s=this.addStandardJobArgs(r,n,i);return this.execCommand(e,"addStandardJob",s)}async addJob(e,r,n,i,s={}){let o=this.queue.keys,a=r.parent,c=[o[""],typeof i<"u"?i:"",r.name,r.timestamp,r.parentKey||null,s.parentDependenciesKey||null,a,r.repeatJobKey,r.deduplicationId?`${o.de}:${r.deduplicationId}`:null],l;if(n.repeat){let d=Object.assign({},n.repeat);d.startDate&&(d.startDate=+new Date(d.startDate)),d.endDate&&(d.endDate=+new Date(d.endDate)),l=wt(Object.assign(Object.assign({},n),{repeat:d}))}else l=wt(n);let u;if(s.addToWaitingChildren?u=await this.addParentJob(e,r,l,c):typeof n.delay=="number"&&n.delay>0?u=await this.addDelayedJob(e,r,l,c):n.priority?u=await this.addPrioritizedJob(e,r,l,c):u=await this.addStandardJob(e,r,l,c),u<0)throw this.finishedErrors({code:u,parentKey:s.parentKey,command:"addJob"});return u}pauseArgs(e){let r="wait",n="paused";e||(r="paused",n="wait");let i=[r,n,"meta","prioritized"].map(o=>this.queue.toKey(o));i.push(this.queue.keys.events,this.queue.keys.delayed,this.queue.keys.marker);let s=[e?"paused":"resumed"];return i.concat(s)}async pause(e){let r=await this.queue.client,n=this.pauseArgs(e);return this.execCommand(r,"pause",n)}addRepeatableJobArgs(e,r,n,i){let s=this.queue.keys,o=[s.repeat,s.delayed],a=[r,wt(n),i,e,s[""]];return o.concat(a)}async addRepeatableJob(e,r,n,i){let s=await this.queue.client,o=this.addRepeatableJobArgs(e,r,n,i);return this.execCommand(s,"addRepeatableJob",o)}async removeDeduplicationKey(e,r){let n=await this.queue.client,s=[`${this.queue.keys.de}:${e}`],o=[r];return this.execCommand(n,"removeDeduplicationKey",s.concat(o))}async addJobScheduler(e,r,n,i,s,o,a){let c=await this.queue.client,l=this.queue.keys,u=[l.repeat,l.delayed,l.wait,l.paused,l.meta,l.prioritized,l.marker,l.id,l.events,l.pc,l.active],d=[r,wt(s),e,n,wt(i),wt(o),Date.now(),l[""],a?this.queue.toKey(a):""],p=await this.execCommand(c,"addJobScheduler",u.concat(d));if(typeof p=="number"&&p<0)throw this.finishedErrors({code:p,command:"addJobScheduler"});return p}async updateRepeatableJobMillis(e,r,n,i){let s=[this.queue.keys.repeat,n,r,i];return this.execCommand(e,"updateRepeatableJobMillis",s)}async updateJobSchedulerNextMillis(e,r,n,i,s){let o=await this.queue.client,a=this.queue.keys,c=[a.repeat,a.delayed,a.wait,a.paused,a.meta,a.prioritized,a.marker,a.id,a.events,a.pc,s?this.queue.toKey(s):"",a.active],l=[r,e,n,wt(i),Date.now(),a[""],s];return this.execCommand(o,"updateJobScheduler",c.concat(l))}removeRepeatableArgs(e,r,n){let i=this.queue.keys,s=[i.repeat,i.delayed,i.events],o=[e,this.getRepeatConcatOptions(r,n),n,i[""]];return s.concat(o)}getRepeatConcatOptions(e,r){return r&&r.split(":").length>2?r:e}async removeRepeatable(e,r,n){let i=await this.queue.client,s=this.removeRepeatableArgs(e,r,n);return this.execCommand(i,"removeRepeatable",s)}async removeJobScheduler(e){let r=await this.queue.client,n=this.queue.keys,i=[n.repeat,n.delayed,n.events],s=[e,n[""]];return this.execCommand(r,"removeJobScheduler",i.concat(s))}removeArgs(e,r){let n=[e,"repeat"].map(s=>this.queue.toKey(s)),i=[e,r?1:0,this.queue.toKey("")];return n.concat(i)}async remove(e,r){let n=await this.queue.client,i=this.removeArgs(e,r),s=await this.execCommand(n,"removeJob",i);if(s<0)throw this.finishedErrors({code:s,jobId:e,command:"removeJob"});return s}async removeUnprocessedChildren(e){let r=await this.queue.client,n=[this.queue.toKey(e),this.queue.keys.meta,this.queue.toKey(""),e];await this.execCommand(r,"removeUnprocessedChildren",n)}async extendLock(e,r,n,i){i=i||await this.queue.client;let s=[this.queue.toKey(e)+":lock",this.queue.keys.stalled,r,n,e];return this.execCommand(i,"extendLock",s)}async extendLocks(e,r,n){let i=await this.queue.client,s=[this.queue.keys.stalled,this.queue.toKey(""),wt(r),wt(e),n];return this.execCommand(i,"extendLocks",s)}async updateData(e,r){let n=await this.queue.client,i=[this.queue.toKey(e.id)],s=JSON.stringify(r),o=await this.execCommand(n,"updateData",i.concat([s]));if(o<0)throw this.finishedErrors({code:o,jobId:e.id,command:"updateData"})}async updateProgress(e,r){let n=await this.queue.client,i=[this.queue.toKey(e),this.queue.keys.events,this.queue.keys.meta],s=JSON.stringify(r),o=await this.execCommand(n,"updateProgress",i.concat([e,s]));if(o<0)throw this.finishedErrors({code:o,jobId:e,command:"updateProgress"})}async addLog(e,r,n){let i=await this.queue.client,s=[this.queue.toKey(e),this.queue.toKey(e)+":logs"],o=await this.execCommand(i,"addLog",s.concat([e,r,n||""]));if(o<0)throw this.finishedErrors({code:o,jobId:e,command:"addLog"});return o}moveToFinishedArgs(e,r,n,i,s,o,a,c=!0,l){var u,d,p,f,m,y,b;let v=this.queue.keys,E=this.queue.opts,S=s==="completed"?E.removeOnComplete:E.removeOnFail,k=this.queue.toKey(`metrics:${s}`),_=this.moveToFinishedKeys;_[10]=v[s],_[11]=this.queue.toKey((u=e.id)!==null&&u!==void 0?u:""),_[12]=k,_[13]=this.queue.keys.marker;let O=this.getKeepJobs(i,S),N=[e.id,a,n,typeof r>"u"?"null":r,s,!c||this.queue.closing?0:1,v[""],wt({token:o,name:E.name,keepJobs:O,limiter:E.limiter,lockDuration:E.lockDuration,attempts:e.opts.attempts,maxMetricsSize:!((d=E.metrics)===null||d===void 0)&&d.maxDataPoints?(p=E.metrics)===null||p===void 0?void 0:p.maxDataPoints:"",fpof:!!(!((f=e.opts)===null||f===void 0)&&f.failParentOnFailure),cpof:!!(!((m=e.opts)===null||m===void 0)&&m.continueParentOnFailure),idof:!!(!((y=e.opts)===null||y===void 0)&&y.ignoreDependencyOnFailure),rdof:!!(!((b=e.opts)===null||b===void 0)&&b.removeDependencyOnFailure)}),l?wt((0,qs.objectToFlatArray)(l)):void 0];return _.concat(N)}getKeepJobs(e,r){return typeof e>"u"?r||{count:e?0:-1}:typeof e=="object"?e:typeof e=="number"?{count:e}:{count:e?0:-1}}async moveToFinished(e,r){let n=await this.queue.client,i=await this.execCommand(n,"moveToFinished",r);if(i<0)throw this.finishedErrors({code:i,jobId:e,command:"moveToFinished",state:"active"});if(typeof i<"u")return Ry(i)}drainArgs(e){let r=this.queue.keys,n=[r.wait,r.paused,r.delayed,r.prioritized,r.repeat],i=[r[""],e?"1":"0"];return n.concat(i)}async drain(e){let r=await this.queue.client,n=this.drainArgs(e);return this.execCommand(r,"drain",n)}removeChildDependencyArgs(e,r){let i=[this.queue.keys[""]],s=[this.queue.toKey(e),r];return i.concat(s)}async removeChildDependency(e,r){let n=await this.queue.client,i=this.removeChildDependencyArgs(e,r),s=await this.execCommand(n,"removeChildDependency",i);switch(s){case 0:return!0;case 1:return!1;default:throw this.finishedErrors({code:s,jobId:e,parentKey:r,command:"removeChildDependency"})}}getRangesArgs(e,r,n,i){let s=this.queue.keys,o=e.map(l=>l==="waiting"?"wait":l),a=[s[""]],c=[r,n,i?"1":"0",...o];return a.concat(c)}async getRanges(e,r=0,n=1,i=!1){let s=await this.queue.client,o=this.getRangesArgs(e,r,n,i);return await this.execCommand(s,"getRanges",o)}getJobsArgs(e,r,n,i){let s=this.queue.keys,o=[...new Set(e.map(l=>l==="waiting"?"wait":l))],a=[s[""]],c=[r,n,i?"1":"0",Bxe,...o];return a.concat(c)}async getJobs(e,r=0,n=-1,i=!1){let s=await this.queue.client,o=this.getJobsArgs(e,r,n,i);return await this.execCommand(s,"getJobs",o)}getCountsArgs(e){let r=this.queue.keys,n=e.map(o=>o==="waiting"?"wait":o),i=[r[""]],s=[...n];return i.concat(s)}async getCounts(e){let r=await this.queue.client,n=this.getCountsArgs(e);return await this.execCommand(r,"getCounts",n)}getCountsPerPriorityArgs(e){let r=[this.queue.keys.wait,this.queue.keys.paused,this.queue.keys.meta,this.queue.keys.prioritized],n=e;return r.concat(n)}async getCountsPerPriority(e){let r=await this.queue.client,n=this.getCountsPerPriorityArgs(e);return await this.execCommand(r,"getCountsPerPriority",n)}getDependencyCountsArgs(e,r){let n=[`${e}:processed`,`${e}:dependencies`,`${e}:failed`,`${e}:unsuccessful`].map(s=>this.queue.toKey(s)),i=r;return n.concat(i)}async getDependencyCounts(e,r){let n=await this.queue.client,i=this.getDependencyCountsArgs(e,r);return await this.execCommand(n,"getDependencyCounts",i)}moveToCompletedArgs(e,r,n,i,s=!1){let o=Date.now();return this.moveToFinishedArgs(e,r,"returnvalue",n,"completed",i,o,s)}moveToFailedArgs(e,r,n,i,s=!1,o){let a=Date.now();return this.moveToFinishedArgs(e,r,"failedReason",n,"failed",i,a,s,o)}async isFinished(e,r=!1){let n=await this.queue.client,i=["completed","failed",e].map(s=>this.queue.toKey(s));return this.execCommand(n,"isFinished",i.concat([e,r?"1":""]))}async getState(e){let r=await this.queue.client,n=["completed","failed","delayed","active","wait","paused","waiting-children","prioritized"].map(i=>this.queue.toKey(i));return(0,qs.isRedisVersionLowerThan)(this.queue.redisVersion,"6.0.6",this.queue.databaseType)?this.execCommand(r,"getState",n.concat([e])):this.execCommand(r,"getStateV2",n.concat([e]))}async changeDelay(e,r){let n=await this.queue.client,i=this.changeDelayArgs(e,r),s=await this.execCommand(n,"changeDelay",i);if(s<0)throw this.finishedErrors({code:s,jobId:e,command:"changeDelay",state:"delayed"})}changeDelayArgs(e,r){let n=Date.now();return[this.queue.keys.delayed,this.queue.keys.meta,this.queue.keys.marker,this.queue.keys.events].concat([r,JSON.stringify(n),e,this.queue.toKey(e)])}async changePriority(e,r=0,n=!1){let i=await this.queue.client,s=this.changePriorityArgs(e,r,n),o=await this.execCommand(i,"changePriority",s);if(o<0)throw this.finishedErrors({code:o,jobId:e,command:"changePriority"})}changePriorityArgs(e,r=0,n=!1){return[this.queue.keys.wait,this.queue.keys.paused,this.queue.keys.meta,this.queue.keys.prioritized,this.queue.keys.active,this.queue.keys.pc,this.queue.keys.marker].concat([r,this.queue.toKey(""),e,n?1:0])}moveToDelayedArgs(e,r,n,i,s={}){let o=this.queue.keys,a=this.queue.opts,c=[o.marker,o.active,o.prioritized,o.delayed,this.queue.toKey(e),o.events,o.meta,o.stalled,o.wait,o.limiter,o.paused,o.pc],l=s.fetchNext&&!this.queue.closing?1:0;return c.concat([this.queue.keys[""],r,e,n,i,s.skipAttempt?"1":"0",s.fieldsToUpdate?wt((0,qs.objectToFlatArray)(s.fieldsToUpdate)):void 0,l,l?wt({token:n,lockDuration:a.lockDuration,limiter:a.limiter,name:a.name}):void 0])}moveToWaitingChildrenArgs(e,r,n){let i=Date.now(),s=(0,qs.getParentKey)(n.child);return["active","waiting-children",e,`${e}:dependencies`,`${e}:unsuccessful`,"stalled","events"].map(a=>this.queue.toKey(a)).concat([r,s??"",JSON.stringify(i),e,this.queue.toKey("")])}isMaxedArgs(){let e=this.queue.keys;return[e.meta,e.active]}async isMaxed(){let e=await this.queue.client,r=this.isMaxedArgs();return!!await this.execCommand(e,"isMaxed",r)}async moveToDelayed(e,r,n,i="0",s={}){let o=await this.queue.client,a=this.moveToDelayedArgs(e,r,i,n,s),c=await this.execCommand(o,"moveToDelayed",a);if(c<0)throw this.finishedErrors({code:c,jobId:e,command:"moveToDelayed",state:"active"});if(typeof c<"u")return Ry(c)}async moveToWaitingChildren(e,r,n={}){let i=await this.queue.client,s=this.moveToWaitingChildrenArgs(e,r,n),o=await this.execCommand(i,"moveToWaitingChildren",s);switch(o){case 0:return!0;case 1:return!1;default:throw this.finishedErrors({code:o,jobId:e,command:"moveToWaitingChildren",state:"active"})}}getRateLimitTtlArgs(e){return[this.queue.keys.limiter,this.queue.keys.meta].concat([e??"0"])}async getRateLimitTtl(e){let r=await this.queue.client,n=this.getRateLimitTtlArgs(e);return this.execCommand(r,"getRateLimitTtl",n)}async cleanJobsInSet(e,r,n=0){let i=await this.queue.client;return this.execCommand(i,"cleanJobsInSet",[this.queue.toKey(e),this.queue.toKey("events"),this.queue.toKey("repeat"),this.queue.toKey(""),r,n,e])}getJobSchedulerArgs(e){return[this.queue.keys.repeat].concat([e])}async getJobScheduler(e){let r=await this.queue.client,n=this.getJobSchedulerArgs(e);return this.execCommand(r,"getJobScheduler",n)}retryJobArgs(e,r,n,i={}){let s=[this.queue.keys.active,this.queue.keys.wait,this.queue.keys.paused,this.queue.toKey(e),this.queue.keys.meta,this.queue.keys.events,this.queue.keys.delayed,this.queue.keys.prioritized,this.queue.keys.pc,this.queue.keys.marker,this.queue.keys.stalled],o=(r?"R":"L")+"PUSH";return s.concat([this.queue.toKey(""),Date.now(),o,e,n,i.fieldsToUpdate?wt((0,qs.objectToFlatArray)(i.fieldsToUpdate)):void 0])}async retryJob(e,r,n="0",i={}){let s=await this.queue.client,o=this.retryJobArgs(e,r,n,i),a=await this.execCommand(s,"retryJob",o);if(a<0)throw this.finishedErrors({code:a,jobId:e,command:"retryJob",state:"active"})}moveJobsToWaitArgs(e,r,n){let i=[this.queue.toKey(""),this.queue.keys.events,this.queue.toKey(e),this.queue.toKey("wait"),this.queue.toKey("paused"),this.queue.keys.meta,this.queue.keys.active,this.queue.keys.marker],s=[r,n,e];return i.concat(s)}async retryJobs(e="failed",r=1e3,n=new Date().getTime()){let i=await this.queue.client,s=this.moveJobsToWaitArgs(e,r,n);return this.execCommand(i,"moveJobsToWait",s)}async promoteJobs(e=1e3){let r=await this.queue.client,n=this.moveJobsToWaitArgs("delayed",e,Number.MAX_VALUE);return this.execCommand(r,"moveJobsToWait",n)}async reprocessJob(e,r,n={}){let i=await this.queue.client,s=[this.queue.toKey(e.id),this.queue.keys.events,this.queue.toKey(r),this.queue.keys.wait,this.queue.keys.meta,this.queue.keys.paused,this.queue.keys.active,this.queue.keys.marker],o=[e.id,(e.opts.lifo?"R":"L")+"PUSH",r==="failed"?"failedReason":"returnvalue",r,n.resetAttemptsMade?"1":"0",n.resetAttemptsStarted?"1":"0"],a=await this.execCommand(i,"reprocessJob",s.concat(o));if(a!==1)throw this.finishedErrors({code:a,jobId:e.id,command:"reprocessJob",state:r})}async getMetrics(e,r=0,n=-1){let i=await this.queue.client,s=[this.queue.toKey(`metrics:${e}`),this.queue.toKey(`metrics:${e}:data`)],o=[r,n];return await this.execCommand(i,"getMetrics",s.concat(o))}async moveToActive(e,r,n){let i=this.queue.opts,s=this.queue.keys,o=[s.wait,s.active,s.prioritized,s.events,s.stalled,s.limiter,s.delayed,s.paused,s.meta,s.pc,s.marker],a=[s[""],Date.now(),wt({token:r,lockDuration:i.lockDuration,limiter:i.limiter,name:n})],c=await this.execCommand(e,"moveToActive",o.concat(a));return Ry(c)}async promote(e){let r=await this.queue.client,n=[this.queue.keys.delayed,this.queue.keys.wait,this.queue.keys.paused,this.queue.keys.meta,this.queue.keys.prioritized,this.queue.keys.active,this.queue.keys.pc,this.queue.keys.events,this.queue.keys.marker],i=[this.queue.toKey(""),e],s=await this.execCommand(r,"promote",n.concat(i));if(s<0)throw this.finishedErrors({code:s,jobId:e,command:"promote",state:"delayed"})}moveStalledJobsToWaitArgs(){let e=this.queue.opts,r=[this.queue.keys.stalled,this.queue.keys.wait,this.queue.keys.active,this.queue.keys["stalled-check"],this.queue.keys.meta,this.queue.keys.paused,this.queue.keys.marker,this.queue.keys.events,this.queue.keys.repeat],n=[e.maxStalledCount,this.queue.toKey(""),Date.now(),e.stalledInterval];return r.concat(n)}async moveStalledJobsToWait(){let e=await this.queue.client,r=this.moveStalledJobsToWaitArgs();return this.execCommand(e,"moveStalledJobsToWait",r)}async moveJobFromActiveToWait(e,r="0"){let n=await this.queue.client,i=[this.queue.keys.active,this.queue.keys.wait,this.queue.keys.stalled,this.queue.keys.paused,this.queue.keys.meta,this.queue.keys.limiter,this.queue.keys.prioritized,this.queue.keys.marker,this.queue.keys.events],s=[e,r,this.queue.toKey(e)],o=await this.execCommand(n,"moveJobFromActiveToWait",i.concat(s));if(o<0)throw this.finishedErrors({code:o,jobId:e,command:"moveJobFromActiveToWait",state:"active"});return o}async obliterate(e){let r=await this.queue.client,n=[this.queue.keys.meta,this.queue.toKey("")],i=[e.count,e.force?"force":null],s=await this.execCommand(r,"obliterate",n.concat(i));if(s<0)switch(s){case-1:throw new Error("Cannot obliterate non-paused queue");case-2:throw new Error("Cannot obliterate queue with active jobs")}return s}async paginate(e,r){let n=await this.queue.client,i=[e],s=5,o=r.end>=0?r.end-r.start+1:1/0,a="0",c=0,l,u,d,p=[],f=[];do{let m=[r.start+p.length,r.end,a,c,s];r.fetchJobs&&m.push(1),[a,c,l,u,d]=await this.execCommand(n,"paginate",i.concat(m)),p=p.concat(l),d&&d.length&&(f=f.concat(d.map(qs.array2obj)))}while(a!="0"&&p.length<o);if(p.length&&Array.isArray(p[0])){let m=[];for(let y=0;y<p.length;y++){let[b,v]=p[y];try{m.push({id:b,v:JSON.parse(v)})}catch(E){m.push({id:b,err:E.message})}}return{cursor:a,items:m,total:u,jobs:f}}else return{cursor:a,items:p.map(m=>({id:m})),total:u,jobs:f}}finishedErrors({code:e,jobId:r,parentKey:n,command:i,state:s}){let o;switch(e){case Pn.ErrorCode.JobNotExist:o=new Error(`Missing key for job ${r}. ${i}`);break;case Pn.ErrorCode.JobLockNotExist:o=new Error(`Missing lock for job ${r}. ${i}`);break;case Pn.ErrorCode.JobNotInState:o=new Error(`Job ${r} is not in the ${s} state. ${i}`);break;case Pn.ErrorCode.JobPendingChildren:o=new Error(`Job ${r} has pending dependencies. ${i}`);break;case Pn.ErrorCode.ParentJobNotExist:o=new Error(`Missing key for parent job ${n}. ${i}`);break;case Pn.ErrorCode.JobLockMismatch:o=new Error(`Lock mismatch for job ${r}. Cmd ${i} from ${s}`);break;case Pn.ErrorCode.ParentJobCannotBeReplaced:o=new Error(`The parent job ${n} cannot be replaced. ${i}`);break;case Pn.ErrorCode.JobBelongsToJobScheduler:o=new Error(`Job ${r} belongs to a job scheduler and cannot be removed directly. ${i}`);break;case Pn.ErrorCode.JobHasFailedChildren:o=new Gxe.UnrecoverableError(`Cannot complete job ${r} because it has at least one failed child. ${i}`);break;case Pn.ErrorCode.SchedulerJobIdCollision:o=new Error(`Cannot create job scheduler iteration - job ID already exists. ${i}`);break;case Pn.ErrorCode.SchedulerJobSlotsBusy:o=new Error(`Cannot create job scheduler iteration - current and next time slots already have jobs. ${i}`);break;default:o=new Error(`Unknown code ${e} error for ${r}. ${i}`)}return o.code=e,o}async removeOrphanedJobs(e,r,n){let i=await this.queue.client,s=[this.queue.toKey(""),r.length,...r,n.length,...n,...e];return this.execCommand(i,"removeOrphanedJobs",s)}};_d.Scripts=V1;function Ry(t){if(t){let e=[null,t[1],t[2],t[3]];return t[0]&&(e[0]=(0,qs.array2obj)(t[0])),e}return[]}});var Id=h(Oy=>{"use strict";Object.defineProperty(Oy,"__esModule",{value:!0});Oy.createScripts=void 0;var Hxe=W1(),Vxe=t=>new Hxe.Scripts({keys:t.keys,client:t.client,get redisVersion(){return t.redisVersion},toKey:t.toKey,opts:t.opts,closing:t.closing,databaseType:t.databaseType});Oy.createScripts=Vxe});var Qc=h(Fs=>{"use strict";Object.defineProperty(Fs,"__esModule",{value:!0});Fs.Job=Fs.PRIORITY_LIMIT=void 0;var l6=(nr(),Pt(rr)),Wxe=require("util"),mr=Dr(),u6=Id(),d6=UI(),Yxe=k1(),fr=_r(),Qxe=(0,Wxe.debuglog)("bull");Fs.PRIORITY_LIMIT=2**21-1;var Y1=class t{constructor(e,r,n,i={},s){this.queue=e,this.name=r,this.data=n,this.opts=i,this.id=s,this.progress=0,this.returnvalue=null,this.stacktrace=null,this.delay=0,this.priority=0,this.attemptsStarted=0,this.attemptsMade=0,this.stalledCounter=0;let o=this.opts,{repeatJobKey:a}=o,c=l6.__rest(o,["repeatJobKey"]);this.opts=Object.assign({attempts:0},c),this.delay=this.opts.delay,this.priority=this.opts.priority||0,this.repeatJobKey=a,this.timestamp=i.timestamp?i.timestamp:Date.now(),this.opts.backoff=d6.Backoffs.normalize(i.backoff),this.parentKey=(0,mr.getParentKey)(i.parent),i.parent&&(this.parent={id:i.parent.id,queueKey:i.parent.queue},i.failParentOnFailure&&(this.parent.fpof=!0),i.removeDependencyOnFailure&&(this.parent.rdof=!0),i.ignoreDependencyOnFailure&&(this.parent.idof=!0),i.continueParentOnFailure&&(this.parent.cpof=!0)),this.debounceId=i.debounce?i.debounce.id:void 0,this.deduplicationId=i.deduplication?i.deduplication.id:this.debounceId,this.toKey=e.toKey.bind(e),this.createScripts(),this.queueQualifiedName=e.qualifiedName}static async create(e,r,n,i){let s=await e.client,o=new this(e,r,n,i,i&&i.jobId);return o.id=await o.addJob(s,{parentKey:o.parentKey,parentDependenciesKey:o.parentKey?`${o.parentKey}:dependencies`:""}),o}static async createBulk(e,r){let n=await e.client,i=r.map(a=>{var c;return new this(e,a.name,a.data,a.opts,(c=a.opts)===null||c===void 0?void 0:c.jobId)}),s=n.pipeline();for(let a of i)a.addJob(s,{parentKey:a.parentKey,parentDependenciesKey:a.parentKey?`${a.parentKey}:dependencies`:""});let o=await s.exec();for(let a=0;a<o.length;++a){let[c,l]=o[a];if(c)throw c;i[a].id=l}return i}static fromJSON(e,r,n){let i=JSON.parse(r.data||"{}"),s=t.optsFromJSON(r.opts),o=new this(e,r.name,i,s,r.id||n);return o.progress=JSON.parse(r.progress||"0"),o.delay=parseInt(r.delay),o.priority=parseInt(r.priority),o.timestamp=parseInt(r.timestamp),r.finishedOn&&(o.finishedOn=parseInt(r.finishedOn)),r.processedOn&&(o.processedOn=parseInt(r.processedOn)),r.rjk&&(o.repeatJobKey=r.rjk),r.deid&&(o.debounceId=r.deid,o.deduplicationId=r.deid),r.failedReason&&(o.failedReason=r.failedReason),o.attemptsStarted=parseInt(r.ats||"0"),o.attemptsMade=parseInt(r.attemptsMade||r.atm||"0"),o.stalledCounter=parseInt(r.stc||"0"),r.defa&&(o.deferredFailure=r.defa),o.stacktrace=Xxe(r.stacktrace),typeof r.returnvalue=="string"&&(o.returnvalue=p6(r.returnvalue)),r.parentKey?o.parentKey=r.parentKey:o.parentKey=void 0,r.parent?o.parent=JSON.parse(r.parent):o.parent=void 0,r.pb&&(o.processedBy=r.pb),r.nrjid&&(o.nextRepeatableJobId=r.nrjid),o}createScripts(){var e;this.scripts=(e=this.queue.scripts)!==null&&e!==void 0?e:(0,u6.createScripts)(this.queue)}static optsFromJSON(e,r=mr.optsDecodeMap){let n=JSON.parse(e||"{}"),i=Object.entries(n),s={};for(let o of i){let[a,c]=o;r[a]?s[r[a]]=c:a==="tm"?s.telemetry=Object.assign(Object.assign({},s.telemetry),{metadata:c}):a==="omc"?s.telemetry=Object.assign(Object.assign({},s.telemetry),{omitContext:c}):s[a]=c}return s}static async fromId(e,r){if(r){let i=await(await e.client).hgetall(e.toKey(r));return(0,mr.isEmpty)(i)?void 0:this.fromJSON(e,i,r)}}static addJobLog(e,r,n,i){var s;return((s=e.scripts)!==null&&s!==void 0?s:(0,u6.createScripts)(e)).addLog(r,n,i)}toJSON(){let e=this,{queue:r,scripts:n}=e;return l6.__rest(e,["queue","scripts"])}asJSON(){return(0,mr.removeUndefinedFields)({id:this.id,name:this.name,data:JSON.stringify(typeof this.data>"u"?{}:this.data),opts:t.optsAsJSON(this.opts),parent:this.parent?Object.assign({},this.parent):void 0,parentKey:this.parentKey,progress:this.progress,attemptsMade:this.attemptsMade,attemptsStarted:this.attemptsStarted,stalledCounter:this.stalledCounter,finishedOn:this.finishedOn,processedOn:this.processedOn,timestamp:this.timestamp,failedReason:JSON.stringify(this.failedReason),stacktrace:JSON.stringify(this.stacktrace),debounceId:this.debounceId,deduplicationId:this.deduplicationId,repeatJobKey:this.repeatJobKey,returnvalue:JSON.stringify(this.returnvalue),nrjid:this.nextRepeatableJobId})}static optsAsJSON(e={},r=mr.optsEncodeMap){let n=Object.entries(e),i={};for(let[s,o]of n)if(!(typeof o>"u"))if(s in r){let c=r[s];i[c]=o}else s==="telemetry"?(o.metadata!==void 0&&(i.tm=o.metadata),o.omitContext!==void 0&&(i.omc=o.omitContext)):i[s]=o;return i}asJSONSandbox(){return Object.assign(Object.assign({},this.asJSON()),{queueName:this.queueName,queueQualifiedName:this.queueQualifiedName,prefix:this.prefix})}updateData(e){return this.data=e,this.scripts.updateData(this,e)}async updateProgress(e){this.progress=e,await this.scripts.updateProgress(this.id,e),this.queue.emit("progress",this,e)}async log(e){return t.addJobLog(this.queue,this.id,e,this.opts.keepLogs)}async removeChildDependency(){return await this.scripts.removeChildDependency(this.id,this.parentKey)?(this.parent=void 0,this.parentKey=void 0,!0):!1}async clearLogs(e){let r=await this.queue.client,n=this.toKey(this.id)+":logs";e?await r.ltrim(n,-e,-1):await r.del(n)}async remove({removeChildren:e=!0}={}){await this.queue.waitUntilReady();let r=this.queue,n=this;if(await this.scripts.remove(n.id,e))r.emit("removed",n);else throw new Error(`Job ${this.id} could not be removed because it is locked by another worker`)}async removeUnprocessedChildren(){let e=this.id;await this.scripts.removeUnprocessedChildren(e)}extendLock(e,r){return this.scripts.extendLock(this.id,e,r)}async moveToCompleted(e,r,n=!0){return this.queue.trace(fr.SpanKind.INTERNAL,"complete",this.queue.name,async i=>{this.setSpanJobAttributes(i),await this.queue.waitUntilReady(),this.returnvalue=e||void 0;let s=(0,mr.tryCatch)(JSON.stringify,JSON,[e]);if(s===mr.errorObject)throw mr.errorObject.value;let o=this.scripts.moveToCompletedArgs(this,s,this.opts.removeOnComplete,r,n),a=await this.scripts.moveToFinished(this.id,o);return this.finishedOn=o[this.scripts.moveToFinishedKeys.length+1],this.attemptsMade+=1,this.recordJobMetrics("completed"),a})}async moveToWait(e){let r=await this.scripts.moveJobFromActiveToWait(this.id,e);return this.recordJobMetrics("waiting"),r}async shouldRetryJob(e){if(this.attemptsMade+1<this.opts.attempts&&!this.discarded&&!(e instanceof Yxe.UnrecoverableError||e.name=="UnrecoverableError")){let r=this.queue.opts,n=await d6.Backoffs.calculate(this.opts.backoff,this.attemptsMade+1,e,this,r.settings&&r.settings.backoffStrategy);return[n!=-1,n==-1?0:n]}else return[!1,0]}async moveToFailed(e,r,n=!1){this.failedReason=e?.message;let[i,s]=await this.shouldRetryJob(e);return this.queue.trace(fr.SpanKind.INTERNAL,this.getSpanOperation(i,s),this.queue.name,async(o,a)=>{var c,l;this.setSpanJobAttributes(o);let u;!(!((l=(c=this.opts)===null||c===void 0?void 0:c.telemetry)===null||l===void 0)&&l.omitContext)&&a&&(u=a);let d;this.updateStacktrace(e);let p={failedReason:this.failedReason,stacktrace:JSON.stringify(this.stacktrace),tm:u},f;if(i)s?(d=await this.scripts.moveToDelayed(this.id,Date.now(),s,r,{fieldsToUpdate:p,fetchNext:n}),this.recordJobMetrics("delayed")):(d=await this.scripts.retryJob(this.id,this.opts.lifo,r,{fieldsToUpdate:p}),this.recordJobMetrics("retried"));else{let m=this.scripts.moveToFailedArgs(this,this.failedReason,this.opts.removeOnFail,r,n,p);d=await this.scripts.moveToFinished(this.id,m),f=m[this.scripts.moveToFinishedKeys.length+1],this.recordJobMetrics("failed")}return f&&typeof f=="number"&&(this.finishedOn=f),s&&typeof s=="number"&&(this.delay=s),this.attemptsMade+=1,d})}getSpanOperation(e,r){return e?r?"delay":"retry":"fail"}recordJobMetrics(e){var r,n;let i=(n=(r=this.queue.opts)===null||r===void 0?void 0:r.telemetry)===null||n===void 0?void 0:n.meter;if(!i)return;let s={[fr.TelemetryAttributes.QueueName]:this.queue.name,[fr.TelemetryAttributes.JobName]:this.name,[fr.TelemetryAttributes.JobStatus]:e,[fr.TelemetryAttributes.JobState]:e},a={completed:fr.MetricNames.JobsCompleted,failed:fr.MetricNames.JobsFailed,delayed:fr.MetricNames.JobsDelayed,retried:fr.MetricNames.JobsRetried,waiting:fr.MetricNames.JobsWaiting,"waiting-children":fr.MetricNames.JobsWaitingChildren}[e];if(i.createCounter(a,{description:`Number of jobs ${e}`,unit:"1"}).add(1,s),this.processedOn){let l=Date.now()-this.processedOn;i.createHistogram(fr.MetricNames.JobDuration,{description:"Job processing duration",unit:"ms"}).record(l,s)}}isCompleted(){return this.isInZSet("completed")}isFailed(){return this.isInZSet("failed")}isDelayed(){return this.isInZSet("delayed")}isWaitingChildren(){return this.isInZSet("waiting-children")}isActive(){return this.isInList("active")}async isWaiting(){return await this.isInList("wait")||await this.isInList("paused")}get queueName(){return this.queue.name}get prefix(){return this.queue.opts.prefix}getState(){return this.scripts.getState(this.id)}async changeDelay(e){await this.scripts.changeDelay(this.id,e),this.delay=e}async changePriority(e){await this.scripts.changePriority(this.id,e.priority,e.lifo),this.priority=e.priority||0}async getChildrenValues(){let r=await(await this.queue.client).hgetall(this.toKey(`${this.id}:processed`));if(r)return(0,mr.parseObjectValues)(r)}async getIgnoredChildrenFailures(){return(await this.queue.client).hgetall(this.toKey(`${this.id}:failed`))}async getFailedChildrenValues(){return(await this.queue.client).hgetall(this.toKey(`${this.id}:failed`))}async getDependencies(e={}){let n=(await this.queue.client).pipeline();if(!e.processed&&!e.unprocessed&&!e.ignored&&!e.failed){n.hgetall(this.toKey(`${this.id}:processed`)),n.smembers(this.toKey(`${this.id}:dependencies`)),n.hgetall(this.toKey(`${this.id}:failed`)),n.zrange(this.toKey(`${this.id}:unsuccessful`),0,-1);let[[i,s],[o,a],[c,l],[u,d]]=await n.exec();return{processed:(0,mr.parseObjectValues)(s),unprocessed:a,failed:d,ignored:l}}else{let i={cursor:0,count:20},s=[];if(e.processed){s.push("processed");let y=Object.assign(Object.assign({},i),e.processed);n.hscan(this.toKey(`${this.id}:processed`),y.cursor,{COUNT:y.count})}if(e.unprocessed){s.push("unprocessed");let y=Object.assign(Object.assign({},i),e.unprocessed);n.sscan(this.toKey(`${this.id}:dependencies`),y.cursor,{COUNT:y.count})}if(e.ignored){s.push("ignored");let y=Object.assign(Object.assign({},i),e.ignored);n.hscan(this.toKey(`${this.id}:failed`),y.cursor,{COUNT:y.count})}let o;if(e.failed){s.push("failed");let y=Object.assign(Object.assign({},i),e.failed);o=y.cursor+y.count,n.zrange(this.toKey(`${this.id}:unsuccessful`),y.cursor,y.count-1)}let a=await n.exec(),c,l,u,d,p,f,m;return s.forEach((y,b)=>{switch(y){case"processed":{c=a[b][1][0];let v=a[b][1][1],E={};for(let S=0;S<v.length;++S)S%2&&(E[v[S-1]]=JSON.parse(v[S]));l=E;break}case"failed":{p=a[b][1];break}case"ignored":{f=a[b][1][0];let v=a[b][1][1],E={};for(let S=0;S<v.length;++S)S%2&&(E[v[S-1]]=v[S]);m=E;break}case"unprocessed":{u=a[b][1][0],d=a[b][1][1];break}}}),Object.assign(Object.assign(Object.assign(Object.assign({},c?{processed:l,nextProcessedCursor:Number(c)}:{}),f?{ignored:m,nextIgnoredCursor:Number(f)}:{}),o?{failed:p,nextFailedCursor:o}:{}),u?{unprocessed:d,nextUnprocessedCursor:Number(u)}:{})}}async getDependenciesCount(e={}){let r=[];Object.entries(e).forEach(([o,a])=>{a&&r.push(o)});let n=r.length?r:["processed","unprocessed","ignored","failed"],i=await this.scripts.getDependencyCounts(this.id,n),s={};return i.forEach((o,a)=>{s[`${n[a]}`]=o||0}),s}async waitUntilFinished(e,r){await this.queue.waitUntilReady();let n=this.id;return new Promise(async(i,s)=>{let o;r&&(o=setTimeout(()=>c(`Job wait ${this.name} timed out before finishing, no finish notification arrived after ${r}ms (id=${n})`),r));function a(y){d(),i(y.returnvalue)}function c(y){d(),s(new Error(y.failedReason||y))}let l=`completed:${n}`,u=`failed:${n}`;e.on(l,a),e.on(u,c),this.queue.on("closing",c);let d=()=>{clearInterval(o),e.removeListener(l,a),e.removeListener(u,c),this.queue.removeListener("closing",c)};await e.waitUntilReady();let[p,f]=await this.scripts.isFinished(n,!0);p!=0&&(p==-1||p==2?c({failedReason:f}):a({returnvalue:p6(f)}))})}async moveToDelayed(e,r){let n=Date.now(),i=e-n,s=i>0?i:0;await this.scripts.moveToDelayed(this.id,n,s,r,{skipAttempt:!0}),this.delay=s,this.recordJobMetrics("delayed")}async moveToWaitingChildren(e,r={}){let n=await this.scripts.moveToWaitingChildren(this.id,e,r);return n&&this.recordJobMetrics("waiting-children"),n}async promote(){let e=this.id;await this.scripts.promote(e),this.delay=0}async retry(e="failed",r={}){await this.scripts.reprocessJob(this,e,r),this.failedReason=null,this.finishedOn=null,this.processedOn=null,this.returnvalue=null,r.resetAttemptsMade&&(this.attemptsMade=0),r.resetAttemptsStarted&&(this.attemptsStarted=0)}discard(){this.discarded=!0}async isInZSet(e){return await(await this.queue.client).zscore(this.queue.toKey(e),this.id)!==null}async isInList(e){return this.scripts.isJobInList(this.queue.toKey(e),this.id)}addJob(e,r){let n=this.asJSON();return this.validateOptions(n),this.scripts.addJob(e,n,n.opts,this.id,r)}async removeDeduplicationKey(){return this.deduplicationId?await this.scripts.removeDeduplicationKey(this.deduplicationId,this.id)>0:!1}validateOptions(e){var r,n,i,s,o,a,c,l;let u=["removeDependencyOnFailure","failParentOnFailure","continueParentOnFailure","ignoreDependencyOnFailure"];if(this.opts.sizeLimit&&(0,mr.lengthInUtf8Bytes)(e.data)>this.opts.sizeLimit)throw new Error(`The size of job ${this.name} exceeds the limit ${this.opts.sizeLimit} bytes`);if(this.opts.delay&&this.opts.repeat&&!(!((r=this.opts.repeat)===null||r===void 0)&&r.count))throw new Error("Delay and repeat options cannot be used together");let p=u.filter(f=>this.opts[f]);if(p.length>1){let f=p.join(", ");throw new Error(`The following options cannot be used together: ${f}`)}if(!((n=this.opts)===null||n===void 0)&&n.jobId){if(`${parseInt(this.opts.jobId,10)}`===((i=this.opts)===null||i===void 0?void 0:i.jobId))throw new Error("Custom Id cannot be integers");if(!((s=this.opts)===null||s===void 0)&&s.jobId.includes(":")&&((a=(o=this.opts)===null||o===void 0?void 0:o.jobId)===null||a===void 0?void 0:a.split(":").length)!==3)throw new Error("Custom Id cannot contain :")}if(this.opts.priority){if(Math.trunc(this.opts.priority)!==this.opts.priority)throw new Error("Priority should not be float");if(this.opts.priority>Fs.PRIORITY_LIMIT)throw new Error(`Priority should be between 0 and ${Fs.PRIORITY_LIMIT}`)}if(this.opts.deduplication){if(!(!((c=this.opts.deduplication)===null||c===void 0)&&c.id))throw new Error("Deduplication id must be provided");if(this.parentKey)throw new Error("Deduplication and parent options cannot be used together")}if(this.opts.debounce){if(!(!((l=this.opts.debounce)===null||l===void 0)&&l.id))throw new Error("Debounce id must be provided");if(this.parentKey)throw new Error("Debounce and parent options cannot be used together")}if(typeof this.opts.backoff=="object"&&typeof this.opts.backoff.jitter=="number"&&(this.opts.backoff.jitter<0||this.opts.backoff.jitter>1))throw new Error("Jitter should be between 0 and 1")}updateStacktrace(e){this.stacktrace=this.stacktrace||[],e?.stack&&(this.stacktrace.push(e.stack),this.opts.stackTraceLimit===0?this.stacktrace=[]:this.opts.stackTraceLimit&&(this.stacktrace=this.stacktrace.slice(-this.opts.stackTraceLimit)))}setSpanJobAttributes(e){e?.setAttributes({[fr.TelemetryAttributes.JobName]:this.name,[fr.TelemetryAttributes.JobId]:this.id})}};Fs.Job=Y1;function Xxe(t){if(!t)return[];let e=(0,mr.tryCatch)(JSON.parse,JSON,[t]);return e===mr.errorObject||!(e instanceof Array)?[]:e}function p6(t){let e=(0,mr.tryCatch)(JSON.parse,JSON,[t]);if(e!==mr.errorObject)return e;Qxe("corrupted returnvalue: "+t,e)}});var jy=h(Cy=>{"use strict";Object.defineProperty(Cy,"__esModule",{value:!0});Cy.QueueKeys=void 0;var Q1=class{constructor(e="bull"){this.prefix=e}getKeys(e){let r={};return["","active","wait","waiting-children","paused","id","delayed","prioritized","stalled-check","completed","failed","stalled","repeat","limiter","meta","events","pc","marker","de"].forEach(n=>{r[n]=this.toKey(e,n)}),r}toKey(e,r){return`${this.getQueueQualifiedName(e)}:${r}`}getQueueQualifiedName(e){return`${this.prefix}:${e}`}};Cy.QueueKeys=Q1});var f6=h((W$e,Zxe)=>{Zxe.exports={vadd:{arity:-5,flags:["write","denyoom","module"],keyStart:1,keyStop:1,step:1},vcard:{arity:2,flags:["readonly","module","fast"],keyStart:1,keyStop:1,step:1},vdim:{arity:2,flags:["readonly","module","fast"],keyStart:1,keyStop:1,step:1},vemb:{arity:-3,flags:["readonly","module","fast"],keyStart:1,keyStop:1,step:1},vgetattr:{arity:3,flags:["readonly","module","fast"],keyStart:1,keyStop:1,step:1},vinfo:{arity:2,flags:["readonly","module","fast"],keyStart:1,keyStop:1,step:1},vismember:{arity:3,flags:["readonly","module"],keyStart:1,keyStop:1,step:1},vlinks:{arity:-3,flags:["readonly","module","fast"],keyStart:1,keyStop:1,step:1},vrandmember:{arity:-2,flags:["readonly","module"],keyStart:1,keyStop:1,step:1},vrange:{arity:-4,flags:["readonly","module"],keyStart:1,keyStop:1,step:1},vrem:{arity:3,flags:["write","module"],keyStart:1,keyStop:1,step:1},vsetattr:{arity:4,flags:["write","module","fast"],keyStart:1,keyStop:1,step:1},vsim:{arity:-4,flags:["readonly","module"],keyStart:1,keyStop:1,step:1},acl:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},append:{arity:3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},arcount:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},ardel:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},ardelrange:{arity:-4,flags:["write"],keyStart:1,keyStop:1,step:1},arget:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},argetrange:{arity:4,flags:["readonly"],keyStart:1,keyStop:1,step:1},argrep:{arity:-6,flags:["readonly"],keyStart:1,keyStop:1,step:1},arinfo:{arity:-2,flags:["readonly"],keyStart:1,keyStop:1,step:1},arinsert:{arity:-3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},arlastitems:{arity:-3,flags:["readonly"],keyStart:1,keyStop:1,step:1},arlen:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},armget:{arity:-3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},armset:{arity:-4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},arnext:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},arop:{arity:-5,flags:["readonly"],keyStart:1,keyStop:1,step:1},arring:{arity:-4,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},arscan:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},arseek:{arity:3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},arset:{arity:-4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},asking:{arity:1,flags:["fast"],keyStart:0,keyStop:0,step:0},auth:{arity:-2,flags:["noscript","loading","stale","fast","no_auth","allow_busy"],keyStart:0,keyStop:0,step:0},bgrewriteaof:{arity:1,flags:["admin","noscript","no_async_loading"],keyStart:0,keyStop:0,step:0},bgsave:{arity:-1,flags:["admin","noscript","no_async_loading"],keyStart:0,keyStop:0,step:0},bitcount:{arity:-2,flags:["readonly"],keyStart:1,keyStop:1,step:1},bitfield:{arity:-2,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},bitfield_ro:{arity:-2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},bitop:{arity:-4,flags:["write","denyoom"],keyStart:2,keyStop:-1,step:1},bitpos:{arity:-3,flags:["readonly"],keyStart:1,keyStop:1,step:1},blmove:{arity:6,flags:["write","denyoom","noscript","blocking"],keyStart:1,keyStop:2,step:1},blmpop:{arity:-5,flags:["write","blocking","movablekeys"],keyStart:0,keyStop:0,step:0},blpop:{arity:-3,flags:["write","noscript","blocking"],keyStart:1,keyStop:-2,step:1},brpop:{arity:-3,flags:["write","noscript","blocking"],keyStart:1,keyStop:-2,step:1},brpoplpush:{arity:4,flags:["write","denyoom","noscript","blocking"],keyStart:1,keyStop:2,step:1},bzmpop:{arity:-5,flags:["write","blocking","movablekeys"],keyStart:0,keyStop:0,step:0},bzpopmax:{arity:-3,flags:["write","noscript","blocking","fast"],keyStart:1,keyStop:-2,step:1},bzpopmin:{arity:-3,flags:["write","noscript","blocking","fast"],keyStart:1,keyStop:-2,step:1},client:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},cluster:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},command:{arity:-1,flags:["loading","stale"],keyStart:0,keyStop:0,step:0},config:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},copy:{arity:-3,flags:["write","denyoom"],keyStart:1,keyStop:2,step:1},dbsize:{arity:1,flags:["readonly","fast"],keyStart:0,keyStop:0,step:0},debug:{arity:-2,flags:["admin","noscript","loading","stale"],keyStart:0,keyStop:0,step:0},decr:{arity:2,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},decrby:{arity:3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},del:{arity:-2,flags:["write"],keyStart:1,keyStop:-1,step:1},discard:{arity:1,flags:["noscript","loading","stale","fast","allow_busy"],keyStart:0,keyStop:0,step:0},dump:{arity:2,flags:["readonly"],keyStart:1,keyStop:1,step:1},echo:{arity:2,flags:["fast"],keyStart:0,keyStop:0,step:0},eval:{arity:-3,flags:["noscript","stale","skip_monitor","no_mandatory_keys","movablekeys"],keyStart:0,keyStop:0,step:0},eval_ro:{arity:-3,flags:["readonly","noscript","stale","skip_monitor","no_mandatory_keys","movablekeys"],keyStart:0,keyStop:0,step:0},evalsha:{arity:-3,flags:["noscript","stale","skip_monitor","no_mandatory_keys","movablekeys"],keyStart:0,keyStop:0,step:0},evalsha_ro:{arity:-3,flags:["readonly","noscript","stale","skip_monitor","no_mandatory_keys","movablekeys"],keyStart:0,keyStop:0,step:0},exec:{arity:1,flags:["noscript","loading","stale","skip_slowlog"],keyStart:0,keyStop:0,step:0},exists:{arity:-2,flags:["readonly","fast"],keyStart:1,keyStop:-1,step:1},expire:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},expireat:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},expiretime:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},failover:{arity:-1,flags:["admin","noscript","stale"],keyStart:0,keyStop:0,step:0},fcall:{arity:-3,flags:["noscript","stale","skip_monitor","no_mandatory_keys","movablekeys"],keyStart:0,keyStop:0,step:0},fcall_ro:{arity:-3,flags:["readonly","noscript","stale","skip_monitor","no_mandatory_keys","movablekeys"],keyStart:0,keyStop:0,step:0},flushall:{arity:-1,flags:["write"],keyStart:0,keyStop:0,step:0},flushdb:{arity:-1,flags:["write"],keyStart:0,keyStop:0,step:0},function:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},geoadd:{arity:-5,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},geodist:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},geohash:{arity:-2,flags:["readonly"],keyStart:1,keyStop:1,step:1},geopos:{arity:-2,flags:["readonly"],keyStart:1,keyStop:1,step:1},georadius:{arity:-6,flags:["write","denyoom","movablekeys"],keyStart:1,keyStop:1,step:1},georadius_ro:{arity:-6,flags:["readonly"],keyStart:1,keyStop:1,step:1},georadiusbymember:{arity:-5,flags:["write","denyoom","movablekeys"],keyStart:1,keyStop:1,step:1},georadiusbymember_ro:{arity:-5,flags:["readonly"],keyStart:1,keyStop:1,step:1},geosearch:{arity:-7,flags:["readonly"],keyStart:1,keyStop:1,step:1},geosearchstore:{arity:-8,flags:["write","denyoom"],keyStart:1,keyStop:2,step:1},get:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},getbit:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},getdel:{arity:2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},getex:{arity:-2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},getrange:{arity:4,flags:["readonly"],keyStart:1,keyStop:1,step:1},getset:{arity:3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},hdel:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hello:{arity:-1,flags:["noscript","loading","stale","fast","no_auth","allow_busy"],keyStart:0,keyStop:0,step:0},hexists:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hexpire:{arity:-6,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hexpireat:{arity:-6,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hexpiretime:{arity:-5,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hget:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hgetall:{arity:2,flags:["readonly"],keyStart:1,keyStop:1,step:1},hgetdel:{arity:-5,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hgetex:{arity:-5,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hincrby:{arity:4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},hincrbyfloat:{arity:4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},hkeys:{arity:2,flags:["readonly"],keyStart:1,keyStop:1,step:1},hlen:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hmget:{arity:-3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hmset:{arity:-4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},hpersist:{arity:-5,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hpexpire:{arity:-6,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hpexpireat:{arity:-6,flags:["write","fast"],keyStart:1,keyStop:1,step:1},hpexpiretime:{arity:-5,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hpttl:{arity:-5,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hrandfield:{arity:-2,flags:["readonly"],keyStart:1,keyStop:1,step:1},hscan:{arity:-3,flags:["readonly"],keyStart:1,keyStop:1,step:1},hset:{arity:-4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},hsetex:{arity:-6,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},hsetnx:{arity:4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},hstrlen:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},httl:{arity:-5,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},hvals:{arity:2,flags:["readonly"],keyStart:1,keyStop:1,step:1},incr:{arity:2,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},incrby:{arity:3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},incrbyfloat:{arity:3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},increx:{arity:-2,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},info:{arity:-1,flags:["loading","stale"],keyStart:0,keyStop:0,step:0},keys:{arity:2,flags:["readonly"],keyStart:0,keyStop:0,step:0},lastsave:{arity:1,flags:["loading","stale","fast"],keyStart:0,keyStop:0,step:0},latency:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},lcs:{arity:-3,flags:["readonly"],keyStart:1,keyStop:2,step:1},lindex:{arity:3,flags:["readonly"],keyStart:1,keyStop:1,step:1},linsert:{arity:5,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},llen:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},lmove:{arity:5,flags:["write","denyoom"],keyStart:1,keyStop:2,step:1},lmpop:{arity:-4,flags:["write","movablekeys"],keyStart:0,keyStop:0,step:0},lolwut:{arity:-1,flags:["readonly","fast"],keyStart:0,keyStop:0,step:0},lpop:{arity:-2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},lpos:{arity:-3,flags:["readonly"],keyStart:1,keyStop:1,step:1},lpush:{arity:-3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},lpushx:{arity:-3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},lrange:{arity:4,flags:["readonly"],keyStart:1,keyStop:1,step:1},lrem:{arity:4,flags:["write"],keyStart:1,keyStop:1,step:1},lset:{arity:4,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},ltrim:{arity:4,flags:["write"],keyStart:1,keyStop:1,step:1},memory:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},mget:{arity:-2,flags:["readonly","fast"],keyStart:1,keyStop:-1,step:1},migrate:{arity:-6,flags:["write","movablekeys"],keyStart:3,keyStop:3,step:1},module:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},monitor:{arity:1,flags:["admin","noscript","loading","stale"],keyStart:0,keyStop:0,step:0},move:{arity:3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},mset:{arity:-3,flags:["write","denyoom"],keyStart:1,keyStop:-1,step:2},msetex:{arity:-4,flags:["write","denyoom","movablekeys"],keyStart:0,keyStop:0,step:0},msetnx:{arity:-3,flags:["write","denyoom"],keyStart:1,keyStop:-1,step:2},multi:{arity:1,flags:["noscript","loading","stale","fast","allow_busy"],keyStart:0,keyStop:0,step:0},object:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},persist:{arity:2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},pexpire:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},pexpireat:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},pexpiretime:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},pfadd:{arity:-2,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},pfcount:{arity:-2,flags:["readonly"],keyStart:1,keyStop:-1,step:1},pfdebug:{arity:3,flags:["write","denyoom","admin"],keyStart:2,keyStop:2,step:1},pfmerge:{arity:-2,flags:["write","denyoom"],keyStart:1,keyStop:-1,step:1},pfselftest:{arity:1,flags:["admin"],keyStart:0,keyStop:0,step:0},ping:{arity:-1,flags:["fast"],keyStart:0,keyStop:0,step:0},psetex:{arity:4,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},psubscribe:{arity:-2,flags:["pubsub","noscript","loading","stale"],keyStart:0,keyStop:0,step:0},psync:{arity:-3,flags:["admin","noscript","no_async_loading","no_multi"],keyStart:0,keyStop:0,step:0},pttl:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},publish:{arity:3,flags:["pubsub","loading","stale","fast"],keyStart:0,keyStop:0,step:0},pubsub:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},punsubscribe:{arity:-1,flags:["pubsub","noscript","loading","stale"],keyStart:0,keyStop:0,step:0},quit:{arity:-1,flags:["noscript","loading","stale","fast","no_auth","allow_busy"],keyStart:0,keyStop:0,step:0},randomkey:{arity:1,flags:["readonly"],keyStart:0,keyStop:0,step:0},readonly:{arity:1,flags:["loading","stale","fast"],keyStart:0,keyStop:0,step:0},readwrite:{arity:1,flags:["loading","stale","fast"],keyStart:0,keyStop:0,step:0},rename:{arity:3,flags:["write"],keyStart:1,keyStop:2,step:1},renamenx:{arity:3,flags:["write","fast"],keyStart:1,keyStop:2,step:1},replconf:{arity:-1,flags:["admin","noscript","loading","stale","allow_busy"],keyStart:0,keyStop:0,step:0},replicaof:{arity:3,flags:["admin","noscript","stale","no_async_loading"],keyStart:0,keyStop:0,step:0},reset:{arity:1,flags:["noscript","loading","stale","fast","no_auth","allow_busy"],keyStart:0,keyStop:0,step:0},restore:{arity:-4,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},"restore-asking":{arity:-4,flags:["write","denyoom","asking"],keyStart:1,keyStop:1,step:1},role:{arity:1,flags:["noscript","loading","stale","fast"],keyStart:0,keyStop:0,step:0},rpop:{arity:-2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},rpoplpush:{arity:3,flags:["write","denyoom"],keyStart:1,keyStop:2,step:1},rpush:{arity:-3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},rpushx:{arity:-3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},sadd:{arity:-3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},save:{arity:1,flags:["admin","noscript","no_async_loading","no_multi"],keyStart:0,keyStop:0,step:0},scan:{arity:-2,flags:["readonly"],keyStart:0,keyStop:0,step:0},scard:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},script:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},sdiff:{arity:-2,flags:["readonly"],keyStart:1,keyStop:-1,step:1},sdiffstore:{arity:-3,flags:["write","denyoom"],keyStart:1,keyStop:-1,step:1},select:{arity:2,flags:["loading","stale","fast"],keyStart:0,keyStop:0,step:0},set:{arity:-3,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},setbit:{arity:4,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},setex:{arity:4,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},setnx:{arity:3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},setrange:{arity:4,flags:["write","denyoom"],keyStart:1,keyStop:1,step:1},shutdown:{arity:-1,flags:["admin","noscript","loading","stale","no_multi","allow_busy"],keyStart:0,keyStop:0,step:0},sinter:{arity:-2,flags:["readonly"],keyStart:1,keyStop:-1,step:1},sintercard:{arity:-3,flags:["readonly","movablekeys"],keyStart:0,keyStop:0,step:0},sinterstore:{arity:-3,flags:["write","denyoom"],keyStart:1,keyStop:-1,step:1},sismember:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},slaveof:{arity:3,flags:["admin","noscript","stale","no_async_loading"],keyStart:0,keyStop:0,step:0},slowlog:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},smembers:{arity:2,flags:["readonly"],keyStart:1,keyStop:1,step:1},smismember:{arity:-3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},smove:{arity:4,flags:["write","fast"],keyStart:1,keyStop:2,step:1},sort:{arity:-2,flags:["write","denyoom","movablekeys"],keyStart:1,keyStop:1,step:1},sort_ro:{arity:-2,flags:["readonly","movablekeys"],keyStart:1,keyStop:1,step:1},spop:{arity:-2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},spublish:{arity:3,flags:["pubsub","loading","stale","fast"],keyStart:1,keyStop:1,step:1},srandmember:{arity:-2,flags:["readonly"],keyStart:1,keyStop:1,step:1},srem:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},sscan:{arity:-3,flags:["readonly"],keyStart:1,keyStop:1,step:1},ssubscribe:{arity:-2,flags:["pubsub","noscript","loading","stale"],keyStart:1,keyStop:-1,step:1},strlen:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},subscribe:{arity:-2,flags:["pubsub","noscript","loading","stale"],keyStart:0,keyStop:0,step:0},substr:{arity:4,flags:["readonly"],keyStart:1,keyStop:1,step:1},sunion:{arity:-2,flags:["readonly"],keyStart:1,keyStop:-1,step:1},sunionstore:{arity:-3,flags:["write","denyoom"],keyStart:1,keyStop:-1,step:1},sunsubscribe:{arity:-1,flags:["pubsub","noscript","loading","stale"],keyStart:1,keyStop:-1,step:1},swapdb:{arity:3,flags:["write","fast"],keyStart:0,keyStop:0,step:0},sync:{arity:1,flags:["admin","noscript","no_async_loading","no_multi"],keyStart:0,keyStop:0,step:0},time:{arity:1,flags:["loading","stale","fast"],keyStart:0,keyStop:0,step:0},touch:{arity:-2,flags:["readonly","fast"],keyStart:1,keyStop:-1,step:1},ttl:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},type:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},unlink:{arity:-2,flags:["write","fast"],keyStart:1,keyStop:-1,step:1},unsubscribe:{arity:-1,flags:["pubsub","noscript","loading","stale"],keyStart:0,keyStop:0,step:0},unwatch:{arity:1,flags:["noscript","loading","stale","fast","allow_busy"],keyStart:0,keyStop:0,step:0},wait:{arity:3,flags:["noscript"],keyStart:0,keyStop:0,step:0},watch:{arity:-2,flags:["noscript","loading","stale","fast","allow_busy"],keyStart:1,keyStop:-1,step:1},xack:{arity:-4,flags:["write","fast"],keyStart:1,keyStop:1,step:1},xadd:{arity:-5,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},xautoclaim:{arity:-6,flags:["write","fast"],keyStart:1,keyStop:1,step:1},xclaim:{arity:-6,flags:["write","fast"],keyStart:1,keyStop:1,step:1},xdel:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},xdelex:{arity:-5,flags:["write","fast"],keyStart:1,keyStop:1,step:1},xgroup:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},xinfo:{arity:-2,flags:[],keyStart:0,keyStop:0,step:0},xlen:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},xnack:{arity:-7,flags:["write","fast"],keyStart:1,keyStop:1,step:1},xpending:{arity:-3,flags:["readonly"],keyStart:1,keyStop:1,step:1},xrange:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},xread:{arity:-4,flags:["readonly","blocking","movablekeys"],keyStart:0,keyStop:0,step:0},xreadgroup:{arity:-7,flags:["write","blocking","movablekeys"],keyStart:0,keyStop:0,step:0},xrevrange:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},xsetid:{arity:-3,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},xtrim:{arity:-4,flags:["write"],keyStart:1,keyStop:1,step:1},zadd:{arity:-4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},zcard:{arity:2,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},zcount:{arity:4,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},zdiff:{arity:-3,flags:["readonly","movablekeys"],keyStart:0,keyStop:0,step:0},zdiffstore:{arity:-4,flags:["write","denyoom","movablekeys"],keyStart:1,keyStop:1,step:1},zincrby:{arity:4,flags:["write","denyoom","fast"],keyStart:1,keyStop:1,step:1},zinter:{arity:-3,flags:["readonly","movablekeys"],keyStart:0,keyStop:0,step:0},zintercard:{arity:-3,flags:["readonly","movablekeys"],keyStart:0,keyStop:0,step:0},zinterstore:{arity:-4,flags:["write","denyoom","movablekeys"],keyStart:1,keyStop:1,step:1},zlexcount:{arity:4,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},zmpop:{arity:-4,flags:["write","movablekeys"],keyStart:0,keyStop:0,step:0},zmscore:{arity:-3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},zpopmax:{arity:-2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},zpopmin:{arity:-2,flags:["write","fast"],keyStart:1,keyStop:1,step:1},zrandmember:{arity:-2,flags:["readonly"],keyStart:1,keyStop:1,step:1},zrange:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},zrangebylex:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},zrangebyscore:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},zrangestore:{arity:-5,flags:["write","denyoom"],keyStart:1,keyStop:2,step:1},zrank:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},zrem:{arity:-3,flags:["write","fast"],keyStart:1,keyStop:1,step:1},zremrangebylex:{arity:4,flags:["write"],keyStart:1,keyStop:1,step:1},zremrangebyrank:{arity:4,flags:["write"],keyStart:1,keyStop:1,step:1},zremrangebyscore:{arity:4,flags:["write"],keyStart:1,keyStop:1,step:1},zrevrange:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},zrevrangebylex:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},zrevrangebyscore:{arity:-4,flags:["readonly"],keyStart:1,keyStop:1,step:1},zrevrank:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},zscan:{arity:-3,flags:["readonly"],keyStart:1,keyStop:1,step:1},zscore:{arity:3,flags:["readonly","fast"],keyStart:1,keyStop:1,step:1},zunion:{arity:-3,flags:["readonly","movablekeys"],keyStart:0,keyStop:0,step:0},zunionstore:{arity:-4,flags:["write","denyoom","movablekeys"],keyStart:1,keyStop:1,step:1}}});var Zo=h(Lr=>{"use strict";var ewe=Lr&&Lr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Lr,"__esModule",{value:!0});Lr.getKeyIndexes=Lr.hasFlag=Lr.exists=Lr.list=void 0;var Py=ewe(f6());Lr.list=Object.keys(Py.default);var X1={};Lr.list.forEach(t=>{X1[t]=Py.default[t].flags.reduce(function(e,r){return e[r]=!0,e},{})});function twe(t,e){return t=e?.caseInsensitive?String(t).toLowerCase():t,!!Py.default[t]}Lr.exists=twe;function rwe(t,e,r){if(t=r?.nameCaseInsensitive?String(t).toLowerCase():t,!X1[t])throw new Error("Unknown command "+t);return!!X1[t][e]}Lr.hasFlag=rwe;function nwe(t,e,r){t=r?.nameCaseInsensitive?String(t).toLowerCase():t;let n=Py.default[t];if(!n)throw new Error("Unknown command "+t);if(!Array.isArray(e))throw new Error("Expect args to be an array");let i=[],s=!!(r&&r.parseExternalKey),o=(c,l)=>{let u=[],d=Number(c[l]);for(let p=0;p<d;p++)u.push(p+l+1);return u},a=(c,l,u)=>{for(let d=l;d<c.length-1;d+=1)if(String(c[d]).toLowerCase()===u.toLowerCase())return d+1;return null};switch(t){case"zunionstore":case"zinterstore":case"zdiffstore":i.push(0,...o(e,1));break;case"eval":case"evalsha":case"eval_ro":case"evalsha_ro":case"fcall":case"fcall_ro":case"blmpop":case"bzmpop":i.push(...o(e,1));break;case"sintercard":case"lmpop":case"zunion":case"zinter":case"zmpop":case"zintercard":case"zdiff":{i.push(...o(e,0));break}case"msetex":{let c=Number(e[0]);for(let l=0;l<c;l++)i.push(1+l*2);break}case"georadius":{i.push(0);let c=a(e,5,"STORE");c&&i.push(c);let l=a(e,5,"STOREDIST");l&&i.push(l);break}case"georadiusbymember":{i.push(0);let c=a(e,4,"STORE");c&&i.push(c);let l=a(e,4,"STOREDIST");l&&i.push(l);break}case"sort":case"sort_ro":i.push(0);for(let c=1;c<e.length-1;c++){let l=e[c];if(typeof l!="string")continue;let u=l.toUpperCase();u==="GET"?(c+=1,l=e[c],l!=="#"&&(s?i.push([c,m6(l)]):i.push(c))):u==="BY"?(c+=1,s?i.push([c,m6(e[c])]):i.push(c)):u==="STORE"&&(c+=1,i.push(c))}break;case"migrate":if(e[2]==="")for(let c=5;c<e.length-1;c++){let l=e[c];if(typeof l=="string"&&l.toUpperCase()==="KEYS"){for(let u=c+1;u<e.length;u++)i.push(u);break}}else i.push(2);break;case"xreadgroup":case"xread":for(let c=t==="xread"?0:3;c<e.length-1;c++)if(String(e[c]).toUpperCase()==="STREAMS"){for(let l=c+1;l<=c+(e.length-1-c)/2;l++)i.push(l);break}break;default:if(n.step>0){let c=n.keyStart-1,l=n.keyStop>0?n.keyStop:e.length+n.keyStop+1;for(let u=c;u<l;u+=n.step)i.push(u)}break}return i}Lr.getKeyIndexes=nwe;function m6(t){typeof t!="string"&&(t=String(t));let e=t.indexOf("->");return e===-1?t.length:e}});var h6=h($s=>{"use strict";Object.defineProperty($s,"__esModule",{value:!0});$s.tryCatch=$s.errorObj=void 0;$s.errorObj={e:{}};var Z1;function iwe(t,e){try{let r=Z1;return Z1=null,r.apply(this,arguments)}catch(r){return $s.errorObj.e=r,$s.errorObj}}function swe(t){return Z1=t,iwe}$s.tryCatch=swe});var Us=h(eT=>{"use strict";Object.defineProperty(eT,"__esModule",{value:!0});var Xc=h6();function y6(t){setTimeout(function(){throw t},0)}function owe(t,e,r){return typeof e=="function"&&t.then(n=>{let i;r!==void 0&&Object(r).spread&&Array.isArray(n)?i=Xc.tryCatch(e).apply(void 0,[null].concat(n)):i=n===void 0?Xc.tryCatch(e)(null):Xc.tryCatch(e)(null,n),i===Xc.errorObj&&y6(i.e)},n=>{if(!n){let s=new Error(n+"");Object.assign(s,{cause:n}),n=s}let i=Xc.tryCatch(e)(n);i===Xc.errorObj&&y6(i.e)}),t}eT.default=owe});var v6=h((Z$e,b6)=>{"use strict";var g6=require("assert"),Td=require("util");function Zc(t){Object.defineProperty(this,"message",{value:t||"",configurable:!0,writable:!0}),Error.captureStackTrace(this,this.constructor)}Td.inherits(Zc,Error);Object.defineProperty(Zc.prototype,"name",{value:"RedisError",configurable:!0,writable:!0});function tT(t,e,r){g6(e),g6.strictEqual(typeof r,"number"),Object.defineProperty(this,"message",{value:t||"",configurable:!0,writable:!0});let n=Error.stackTraceLimit;Error.stackTraceLimit=2,Error.captureStackTrace(this,this.constructor),Error.stackTraceLimit=n,this.offset=r,this.buffer=e}Td.inherits(tT,Zc);Object.defineProperty(tT.prototype,"name",{value:"ParserError",configurable:!0,writable:!0});function rT(t){Object.defineProperty(this,"message",{value:t||"",configurable:!0,writable:!0});let e=Error.stackTraceLimit;Error.stackTraceLimit=2,Error.captureStackTrace(this,this.constructor),Error.stackTraceLimit=e}Td.inherits(rT,Zc);Object.defineProperty(rT.prototype,"name",{value:"ReplyError",configurable:!0,writable:!0});function Ky(t){Object.defineProperty(this,"message",{value:t||"",configurable:!0,writable:!0}),Error.captureStackTrace(this,this.constructor)}Td.inherits(Ky,Zc);Object.defineProperty(Ky.prototype,"name",{value:"AbortError",configurable:!0,writable:!0});function nT(t){Object.defineProperty(this,"message",{value:t||"",configurable:!0,writable:!0}),Error.captureStackTrace(this,this.constructor)}Td.inherits(nT,Ky);Object.defineProperty(nT.prototype,"name",{value:"InterruptError",configurable:!0,writable:!0});b6.exports={RedisError:Zc,ParserError:tT,ReplyError:rT,AbortError:Ky,InterruptError:nT}});var x6=h((e8e,S6)=>{"use strict";var E6=require("assert"),el=class extends Error{get name(){return this.constructor.name}},iT=class extends el{constructor(e,r,n){E6(r),E6.strictEqual(typeof n,"number");let i=Error.stackTraceLimit;Error.stackTraceLimit=2,super(e),Error.stackTraceLimit=i,this.offset=n,this.buffer=r}get name(){return this.constructor.name}},sT=class extends el{constructor(e){let r=Error.stackTraceLimit;Error.stackTraceLimit=2,super(e),Error.stackTraceLimit=r}get name(){return this.constructor.name}},Dy=class extends el{get name(){return this.constructor.name}},oT=class extends Dy{get name(){return this.constructor.name}};S6.exports={RedisError:el,ParserError:iT,ReplyError:sT,AbortError:Dy,InterruptError:oT}});var ea=h((t8e,w6)=>{"use strict";var awe=process.version.charCodeAt(1)<55&&process.version.charCodeAt(2)===46?v6():x6();w6.exports=awe});var kd=h((r8e,aT)=>{var _6=[0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920],cwe=function(e){for(var r,n=0,i=0,s=[],o=e.length;n<o;n++)r=e.charCodeAt(n),r<128?s[i++]=r:r<2048?(s[i++]=r>>6|192,s[i++]=r&63|128):(r&64512)===55296&&n+1<e.length&&(e.charCodeAt(n+1)&64512)===56320?(r=65536+((r&1023)<<10)+(e.charCodeAt(++n)&1023),s[i++]=r>>18|240,s[i++]=r>>12&63|128,s[i++]=r>>6&63|128,s[i++]=r&63|128):(s[i++]=r>>12|224,s[i++]=r>>6&63|128,s[i++]=r&63|128);return s},I6=aT.exports=function(e){for(var r,n=0,i=-1,s=0,o=0,a=typeof e=="string"?cwe(e):e,c=a.length;n<c;){if(r=a[n++],i===-1)r===123&&(i=n);else if(r!==125)o=_6[(r^o>>8)&255]^o<<8;else if(n-1!==i)return o&16383;s=_6[(r^s>>8)&255]^s<<8}return s&16383};aT.exports.generateMulti=function(e){for(var r=1,n=e.length,i=I6(e[0]);r<n;)if(I6(e[r++])!==i)return-1;return i}});var T6=h(tl=>{"use strict";Object.defineProperty(tl,"__esModule",{value:!0});tl.parseBlockOption=tl.parseSecondsArgument=void 0;var cT=t=>{if(typeof t=="number")return t;if(Buffer.isBuffer(t))return cT(t.toString());if(typeof t=="string"){let e=Number(t);return Number.isFinite(e)?e:void 0}},lwe=t=>{if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString()},uwe=t=>{let e=cT(t);if(e!==void 0)return e<=0?0:e*1e3};tl.parseSecondsArgument=uwe;var dwe=t=>{for(let e=0;e<t.length;e++){let r=lwe(t[e]);if(r&&r.toLowerCase()==="block"){let n=cT(t[e+1]);return n===void 0?void 0:n<=0?0:n}}return null};tl.parseBlockOption=dwe});var Vi=h(dT=>{"use strict";Object.defineProperty(dT,"__esModule",{value:!0});var k6=Zo(),pwe=kd(),fwe=Us(),ta=gt(),lT=T6(),li=class t{constructor(e,r=[],n={},i){if(this.name=e,this.inTransaction=!1,this.isTraced=!1,this.isResolved=!1,this.transformed=!1,this.replyEncoding=n.replyEncoding,this.errorStack=n.errorStack,this.args=r.flat(),this.callback=i,this.initPromise(),n.keyPrefix){let s=n.keyPrefix instanceof Buffer,o=s?n.keyPrefix:null;this._iterateKeys(a=>a instanceof Buffer?(o===null&&(o=Buffer.from(n.keyPrefix)),Buffer.concat([o,a])):s?Buffer.concat([n.keyPrefix,Buffer.from(String(a))]):n.keyPrefix+a)}n.readOnly&&(this.isReadOnly=!0)}static checkFlag(e,r){return r=r.toLowerCase(),!!this.getFlagMap()[e][r]}static setArgumentTransformer(e,r){this._transformer.argument[e]=r}static setReplyTransformer(e,r){this._transformer.reply[e]=r}static getFlagMap(){return this.flagMap||(this.flagMap=Object.keys(t.FLAGS).reduce((e,r)=>(e[r]={},t.FLAGS[r].forEach(n=>{e[r][n]=!0}),e),{})),this.flagMap}getSlot(){if(typeof this.slot>"u"){let e=this.getKeys()[0];this.slot=e==null?null:pwe(e)}return this.slot}getKeys(){return this._iterateKeys()}toWritable(e){let r,n="*"+(this.args.length+1)+`\r
|
||
$`+Buffer.byteLength(this.name)+`\r
|
||
`+this.name+`\r
|
||
`;if(this.bufferMode){let i=new uT;i.push(n);for(let s=0;s<this.args.length;++s){let o=this.args[s];o instanceof Buffer?o.length===0?i.push(`$0\r
|
||
\r
|
||
`):(i.push("$"+o.length+`\r
|
||
`),i.push(o),i.push(`\r
|
||
`)):i.push("$"+Buffer.byteLength(o)+`\r
|
||
`+o+`\r
|
||
`)}r=i.toBuffer()}else{r=n;for(let i=0;i<this.args.length;++i){let s=this.args[i];r+="$"+Buffer.byteLength(s)+`\r
|
||
`+s+`\r
|
||
`}}return r}stringifyArguments(){for(let e=0;e<this.args.length;++e){let r=this.args[e];typeof r=="string"||(r instanceof Buffer?this.bufferMode=!0:this.args[e]=(0,ta.toArg)(r))}}transformReply(e){this.replyEncoding&&(e=(0,ta.convertBufferToString)(e,this.replyEncoding));let r=t._transformer.reply[this.name];return r&&(e=r(e)),e}setTimeout(e){this._commandTimeoutTimer||(this._commandTimeoutTimer=setTimeout(()=>{this.isResolved||this.reject(new Error("Command timed out"))},e))}setBlockingTimeout(e){if(e<=0)return;this._blockingTimeoutTimer&&(clearTimeout(this._blockingTimeoutTimer),this._blockingTimeoutTimer=void 0);let r=Date.now();this._blockingDeadline===void 0&&(this._blockingDeadline=r+e);let n=this._blockingDeadline-r;if(n<=0){this.resolve(null);return}this._blockingTimeoutTimer=setTimeout(()=>{if(this.isResolved){this._blockingTimeoutTimer=void 0;return}this._blockingTimeoutTimer=void 0,this.resolve(null)},n)}extractBlockingTimeout(){let e=this.args;if(!e||e.length===0)return;let r=this.name.toLowerCase();if(t.checkFlag("LAST_ARG_TIMEOUT_COMMANDS",r))return(0,lT.parseSecondsArgument)(e[e.length-1]);if(t.checkFlag("FIRST_ARG_TIMEOUT_COMMANDS",r))return(0,lT.parseSecondsArgument)(e[0]);if(t.checkFlag("BLOCK_OPTION_COMMANDS",r))return(0,lT.parseBlockOption)(e)}_clearTimers(){let e=this._commandTimeoutTimer;e&&(clearTimeout(e),delete this._commandTimeoutTimer);let r=this._blockingTimeoutTimer;r&&(clearTimeout(r),delete this._blockingTimeoutTimer)}initPromise(){let e=new Promise((r,n)=>{if(!this.transformed){this.transformed=!0;let i=t._transformer.argument[this.name];i&&(this.args=i(this.args)),this.stringifyArguments()}this.resolve=this._convertValue(r),this.reject=i=>{this._clearTimers(),this.errorStack?n((0,ta.optimizeErrorStack)(i,this.errorStack.stack,__CM_DIRNAME__)):n(i)}});this.promise=(0,fwe.default)(e,this.callback)}_iterateKeys(e=r=>r){if(typeof this.keys>"u"&&(this.keys=[],(0,k6.exists)(this.name,{caseInsensitive:!0}))){let r=(0,k6.getKeyIndexes)(this.name,this.args,{nameCaseInsensitive:!0});for(let n of r)this.args[n]=e(this.args[n]),this.keys.push(this.args[n])}return this.keys}_convertValue(e){return r=>{try{this._clearTimers(),e(this.transformReply(r)),this.isResolved=!0}catch(n){this.reject(n)}return this.promise}}};dT.default=li;li.FLAGS={VALID_IN_SUBSCRIBER_MODE:["subscribe","psubscribe","unsubscribe","punsubscribe","ssubscribe","sunsubscribe","ping","quit"],VALID_IN_MONITOR_MODE:["monitor","auth"],ENTER_SUBSCRIBER_MODE:["subscribe","psubscribe","ssubscribe"],EXIT_SUBSCRIBER_MODE:["unsubscribe","punsubscribe","sunsubscribe"],WILL_DISCONNECT:["quit"],HANDSHAKE_COMMANDS:["auth","select","client","readonly","info"],IGNORE_RECONNECT_ON_ERROR:["client"],BLOCKING_COMMANDS:["blpop","brpop","brpoplpush","blmove","bzpopmin","bzpopmax","bzmpop","blmpop","xread","xreadgroup"],LAST_ARG_TIMEOUT_COMMANDS:["blpop","brpop","brpoplpush","blmove","bzpopmin","bzpopmax"],FIRST_ARG_TIMEOUT_COMMANDS:["bzmpop","blmpop"],BLOCK_OPTION_COMMANDS:["xread","xreadgroup"]};li._transformer={argument:{},reply:{}};var A6=function(t){if(t.length===1){if(t[0]instanceof Map)return(0,ta.convertMapToArray)(t[0]);if(typeof t[0]=="object"&&t[0]!==null)return(0,ta.convertObjectToArray)(t[0])}return t},R6=function(t){if(t.length===2){if(t[1]instanceof Map)return[t[0]].concat((0,ta.convertMapToArray)(t[1]));if(typeof t[1]=="object"&&t[1]!==null)return[t[0]].concat((0,ta.convertObjectToArray)(t[1]))}return t};li.setArgumentTransformer("mset",A6);li.setArgumentTransformer("msetnx",A6);li.setArgumentTransformer("hset",R6);li.setArgumentTransformer("hmset",R6);li.setReplyTransformer("hgetall",function(t){if(Array.isArray(t)){let e={};for(let r=0;r<t.length;r+=2){let n=t[r],i=t[r+1];n in e?Object.defineProperty(e,n,{value:i,configurable:!0,enumerable:!0,writable:!0}):e[n]=i}return e}return t});var uT=class{constructor(){this.length=0,this.items=[]}push(e){this.length+=Buffer.byteLength(e),this.items.push(e)}toBuffer(){let e=Buffer.allocUnsafe(this.length),r=0;for(let n of this.items){let i=Buffer.byteLength(n);Buffer.isBuffer(n)?n.copy(e,r):e.write(n,r,i),r+=i}return e}}});var O6=h(pT=>{"use strict";Object.defineProperty(pT,"__esModule",{value:!0});var mwe=ea(),My=class extends mwe.RedisError{constructor(e,r){super(e),this.lastNodeError=r,Error.captureStackTrace(this,this.constructor)}get name(){return this.constructor.name}};pT.default=My;My.defaultMessage="Failed to refresh slots cache."});var Ny=h(mT=>{"use strict";Object.defineProperty(mT,"__esModule",{value:!0});var hwe=require("stream"),fT=class extends hwe.Readable{constructor(e){super(e),this.opt=e,this._redisCursor="0",this._redisDrained=!1}_read(){if(this._redisDrained){this.push(null);return}let e=[this._redisCursor];this.opt.key&&e.unshift(this.opt.key),this.opt.match&&e.push("MATCH",this.opt.match),this.opt.type&&e.push("TYPE",this.opt.type),this.opt.count&&e.push("COUNT",String(this.opt.count)),this.opt.noValues&&e.push("NOVALUES"),this.opt.redis[this.opt.command](e,(r,n)=>{if(r){this.emit("error",r);return}this._redisCursor=n[0]instanceof Buffer?n[0].toString():n[0],this._redisCursor==="0"&&(this._redisDrained=!0),this.push(n[1])})}close(){this._redisDrained=!0}};mT.default=fT});var M6=h(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.executeWithAutoPipelining=ct.getFirstValueInFlattenedArray=ct.shouldUseAutoPipelining=ct.notAllowedAutoPipelineCommands=ct.kCallbacks=ct.kExec=void 0;var j6=Vh(),ywe=kd(),C6=Us(),Ly=Zo();ct.kExec=Symbol("exec");ct.kCallbacks=Symbol("callbacks");ct.notAllowedAutoPipelineCommands=["auth","info","script","quit","cluster","pipeline","multi","subscribe","psubscribe","unsubscribe","unpsubscribe","select","client"];function P6(t,e){if(t._runningAutoPipelines.has(e)||!t._autoPipelines.has(e))return;t._runningAutoPipelines.add(e);let r=t._autoPipelines.get(e);t._autoPipelines.delete(e);let n=r[ct.kCallbacks];r[ct.kCallbacks]=null,r.exec(function(i,s){if(t._runningAutoPipelines.delete(e),i)for(let o=0;o<n.length;o++)process.nextTick(n[o],i);else for(let o=0;o<n.length;o++)process.nextTick(n[o],...s[o]);t._autoPipelines.has(e)&&P6(t,e)})}function gwe(t,e,r){return e&&t.options.enableAutoPipelining&&!t.isPipeline&&!ct.notAllowedAutoPipelineCommands.includes(r)&&!t.options.autoPipeliningIgnoredCommands.includes(r)}ct.shouldUseAutoPipelining=gwe;function K6(t){for(let e=0;e<t.length;e++){let r=t[e];if(typeof r=="string")return r;if(Array.isArray(r)||(0,j6.isArguments)(r)){if(r.length===0)continue;return r[0]}let n=[r].flat();if(n.length>0)return n[0]}}ct.getFirstValueInFlattenedArray=K6;function bwe(t,e){if((0,Ly.exists)(t,{caseInsensitive:!0})){let r=e.flat(),n=(0,Ly.getKeyIndexes)(t,r,{nameCaseInsensitive:!0});if(n.length)return r[n[0]]}return K6(e)}function D6(t,e,r,n,i){if(t.isCluster&&!t.slots.length)return t.status==="wait"&&t.connect().catch(j6.noop),(0,C6.default)(new Promise(function(l,u){t.delayUntilReady(d=>{if(d){u(d);return}D6(t,e,r,n,null).then(l,u)})}),i);let s=t.options.keyPrefix||"",o=t.isCluster?t.slots[ywe(`${s}${bwe(r,n)}`)].join(","):"main";if(t.isCluster&&t.options.scaleReads!=="master"){let l=(0,Ly.exists)(r)&&(0,Ly.hasFlag)(r,"readonly");o+=l?":read":":write"}if(!t._autoPipelines.has(o)){let l=t.pipeline();l[ct.kExec]=!1,l[ct.kCallbacks]=[],t._autoPipelines.set(o,l)}let a=t._autoPipelines.get(o);a[ct.kExec]||(a[ct.kExec]=!0,setImmediate(P6,t,o));let c=new Promise(function(l,u){a[ct.kCallbacks].push(function(d,p){if(d){u(d);return}l(p)}),e==="call"&&n.unshift(r),a[e](...n)});return(0,C6.default)(c,i)}ct.executeWithAutoPipelining=D6});var N6=h(yT=>{"use strict";Object.defineProperty(yT,"__esModule",{value:!0});var vwe=require("crypto"),Ewe=Vi(),Swe=Us(),hT=class{constructor(e,r=null,n="",i=!1){this.lua=e,this.numberOfKeys=r,this.keyPrefix=n,this.readOnly=i,this.sha=(0,vwe.createHash)("sha1").update(e).digest("hex");let s=this.sha,o=new WeakSet;this.Command=class extends Ewe.default{toWritable(c){let l=this.reject;return this.reject=u=>{u.message.indexOf("NOSCRIPT")!==-1&&o.delete(c),l.call(this,u)},o.has(c)?this.name==="eval"&&(this.name="evalsha",this.args[0]=s):(o.add(c),this.name="eval",this.args[0]=e),super.toWritable(c)}}}execute(e,r,n,i){typeof this.numberOfKeys=="number"&&r.unshift(this.numberOfKeys),this.keyPrefix&&(n.keyPrefix=this.keyPrefix),this.readOnly&&(n.readOnly=!0);let s=new this.Command("evalsha",[this.sha,...r],n);return s.promise=s.promise.catch(o=>{if(o.message.indexOf("NOSCRIPT")===-1)throw o;let a=new this.Command("evalsha",[this.sha,...r],n);return(e.isPipeline?e.redis:e).sendCommand(a)}),(0,Swe.default)(s.promise,i),e.sendCommand(s)}};yT.default=hT});var Fy=h(bT=>{"use strict";Object.defineProperty(bT,"__esModule",{value:!0});var xwe=Zo(),qy=M6(),wwe=Vi(),_we=N6(),Wi=class{constructor(){this.options={},this.scriptsSet={},this.addedBuiltinSet=new Set}getBuiltinCommands(){return gT.slice(0)}createBuiltinCommand(e){return{string:Js(null,e,"utf8"),buffer:Js(null,e,null)}}addBuiltinCommand(e){this.addedBuiltinSet.add(e),this[e]=Js(e,e,"utf8"),this[e+"Buffer"]=Js(e+"Buffer",e,null)}defineCommand(e,r){let n=new _we.default(r.lua,r.numberOfKeys,this.options.keyPrefix,r.readOnly);this.scriptsSet[e]=n,this[e]=L6(e,e,n,"utf8"),this[e+"Buffer"]=L6(e+"Buffer",e,n,null)}sendCommand(e,r,n){throw new Error('"sendCommand" is not implemented')}},gT=xwe.list.filter(t=>t!=="monitor");gT.push("sentinel");gT.forEach(function(t){Wi.prototype[t]=Js(t,t,"utf8"),Wi.prototype[t+"Buffer"]=Js(t+"Buffer",t,null)});Wi.prototype.call=Js("call","utf8");Wi.prototype.callBuffer=Js("callBuffer",null);Wi.prototype.send_command=Wi.prototype.call;function Js(t,e,r){return typeof r>"u"&&(r=e,e=null),function(...n){let i=e||n.shift(),s=n[n.length-1];typeof s=="function"?n.pop():s=void 0;let o={errorStack:this.options.showFriendlyErrorStack?new Error:void 0,keyPrefix:this.options.keyPrefix,replyEncoding:r};return(0,qy.shouldUseAutoPipelining)(this,t,i)?(0,qy.executeWithAutoPipelining)(this,t,i,n,s):this.sendCommand(new wwe.default(i,n,o,s))}}function L6(t,e,r,n){return function(...i){let s=typeof i[i.length-1]=="function"?i.pop():void 0,o={replyEncoding:n};return this.options.showFriendlyErrorStack&&(o.errorStack=new Error),(0,qy.shouldUseAutoPipelining)(this,t,e)?(0,qy.executeWithAutoPipelining)(this,t,e,i,s):r.execute(this,i,o,s)}}bT.default=Wi});var ST=h(ET=>{"use strict";Object.defineProperty(ET,"__esModule",{value:!0});var vT=kd(),q6=Zo(),F6=Us(),Iwe=require("util"),Twe=Vi(),kwe=require("buffer"),Awe=gt(),Rwe=Fy();function Owe(t,e){let r=vT(e[0]),n=t._groupsBySlot[r];for(let i=1;i<e.length;i++)if(t._groupsBySlot[vT(e[i])]!==n)return-1;return r}var zs=class extends Rwe.default{constructor(e){super(),this.redis=e,this.isPipeline=!0,this.replyPending=0,this._queue=[],this._result=[],this._transactions=0,this._shaToScript={},this.isCluster=this.redis.constructor.name==="Cluster"||this.redis.isCluster,this.options=e.options,Object.keys(e.scriptsSet).forEach(n=>{let i=e.scriptsSet[n];this._shaToScript[i.sha]=i,this[n]=e[n],this[n+"Buffer"]=e[n+"Buffer"]}),e.addedBuiltinSet.forEach(n=>{this[n]=e[n],this[n+"Buffer"]=e[n+"Buffer"]}),this.promise=new Promise((n,i)=>{this.resolve=n,this.reject=i});let r=this;Object.defineProperty(this,"length",{get:function(){return r._queue.length}})}fillResult(e,r){if(this._queue[r].name==="exec"&&Array.isArray(e[1])){let i=e[1].length;for(let s=0;s<i;s++){if(e[1][s]instanceof Error)continue;let o=this._queue[r-(i-s)];try{e[1][s]=o.transformReply(e[1][s])}catch(a){e[1][s]=a}}}if(this._result[r]=e,--this.replyPending)return;if(this.isCluster){let i=!0,s;for(let o=0;o<this._result.length;++o){let a=this._result[o][0],c=this._queue[o];if(a){if(c.name==="exec"&&a.message==="EXECABORT Transaction discarded because of previous errors.")continue;if(!s)s={name:a.name,message:a.message};else if(s.name!==a.name||s.message!==a.message){i=!1;break}}else if(!c.inTransaction&&!((0,q6.exists)(c.name,{caseInsensitive:!0})&&(0,q6.hasFlag)(c.name,"readonly",{nameCaseInsensitive:!0}))){i=!1;break}}if(s&&i){let o=this,a=s.message.split(" "),c=this._queue,l=!1;this._queue=[];for(let f=0;f<c.length;++f){if(a[0]==="ASK"&&!l&&c[f].name!=="asking"&&(!c[f-1]||c[f-1].name!=="asking")){let m=new Twe.default("asking");m.ignore=!0,this.sendCommand(m)}c[f].initPromise(),this.sendCommand(c[f]),l=c[f].inTransaction}let u=!0;typeof this.leftRedirections>"u"&&(this.leftRedirections={});let d=function(){o.exec()},p=this.redis;if(p.handleError(s,this.leftRedirections,{moved:function(f,m){o.preferKey=m,p.slots[a[1]]?p.slots[a[1]][0]!==m&&(p.slots[a[1]]=[m]):p.slots[a[1]]=[m],p._groupsBySlot[a[1]]=p._groupsIds[p.slots[a[1]].join(";")],p.refreshSlotsCache(),o.exec()},ask:function(f,m){o.preferKey=m,o.exec()},tryagain:d,clusterDown:d,connectionClosed:d,maxRedirections:()=>{u=!1},defaults:()=>{u=!1}}),u)return}}let n=0;for(let i=0;i<this._queue.length-n;++i)this._queue[i+n].ignore&&(n+=1),this._result[i]=this._result[i+n];this.resolve(this._result.slice(0,this._result.length-n))}sendCommand(e){this._transactions>0&&(e.inTransaction=!0);let r=this._queue.length;return e.pipelineIndex=r,e.promise.then(n=>{this.fillResult([null,n],r)}).catch(n=>{this.fillResult([n],r)}),this._queue.push(e),this}addBatch(e){let r,n,i;for(let s=0;s<e.length;++s)r=e[s],n=r[0],i=r.slice(1),this[n].apply(this,i);return this}};ET.default=zs;var Cwe=zs.prototype.multi;zs.prototype.multi=function(){return this._transactions+=1,Cwe.apply(this,arguments)};var $6=zs.prototype.execBuffer;zs.prototype.execBuffer=(0,Iwe.deprecate)(function(){return this._transactions>0&&(this._transactions-=1),$6.apply(this,arguments)},"Pipeline#execBuffer: Use Pipeline#exec instead");zs.prototype.exec=function(t){if(this.isCluster&&!this.redis.slots.length)return this.redis.status==="wait"&&this.redis.connect().catch(Awe.noop),t&&!this.nodeifiedPromise&&(this.nodeifiedPromise=!0,(0,F6.default)(this.promise,t)),this.redis.delayUntilReady(i=>{if(i){this.reject(i);return}this.exec(t)}),this.promise;if(this._transactions>0)return this._transactions-=1,$6.apply(this,arguments);this.nodeifiedPromise||(this.nodeifiedPromise=!0,(0,F6.default)(this.promise,t)),this._queue.length||this.resolve([]);let e;if(this.isCluster){let i=[];for(let s=0;s<this._queue.length;s++){let o=this._queue[s].getKeys();if(o.length&&i.push(o[0]),o.length&&vT.generateMulti(o)<0)return this.reject(new Error("All the keys in a pipeline command should belong to the same slot")),this.promise}if(i.length){if(e=Owe(this.redis,i),e<0)return this.reject(new Error("All keys in the pipeline should belong to the same slots allocation group")),this.promise}else e=Math.random()*16384|0}let r=this;return n(),this.promise;function n(){let i=r.replyPending=r._queue.length,s;r.isCluster&&(s={slot:e,redis:r.redis.connectionPool.nodes.all[r.preferKey]});let o="",a,c={isPipeline:!0,destination:r.isCluster?s:{redis:r.redis},write(l){typeof l!="string"?(a||(a=[]),o&&(a.push(Buffer.from(o,"utf8")),o=""),a.push(l)):(o.length+l.length>=kwe.constants.MAX_STRING_LENGTH&&(a||(a=[]),o&&(a.push(Buffer.from(o,"utf8")),o="")),o+=l),--i||(a?(o&&a.push(Buffer.from(o,"utf8")),c.destination.redis.stream.write(Buffer.concat(a))):c.destination.redis.stream.write(o),i=r._queue.length,o="",a=void 0)}};for(let l=0;l<r._queue.length;++l)r.redis.sendCommand(r._queue[l],c,s);return r.promise}}});var _T=h(ui=>{"use strict";Object.defineProperty(ui,"__esModule",{value:!0});ui.traceConnect=ui.traceBatch=ui.traceCommand=ui.sanitizeArgs=void 0;var jwe=[{regex:/^ECHO/i,args:0},{regex:/^(LPUSH|MSET|PFA|PUBLISH|RPUSH|SADD|SET|SPUBLISH|XADD|ZADD)/i,args:1},{regex:/^(HSET|HMSET|LSET|LINSERT)/i,args:2},{regex:/^(ACL|BIT|B[LRZ]|CLIENT|CLUSTER|CONFIG|COMMAND|DECR|DEL|EVAL|EX|FUNCTION|GEO|GET|HINCR|HMGET|HSCAN|INCR|L[TRLM]|MEMORY|P[EFISTU]|RPOP|S[CDIMORSU]|XACK|X[CDGILPRT]|Z[CDILMPRS])/i,args:-1}];function Pwe(t,e){let r=0;for(let i of jwe)if(i.regex.test(t)){r=i.args;break}if(r===-1)return e.map(i=>String(i));let n=[];for(let i=0;i<e.length;i++)i<r?n.push(String(e[i])):n.push("?");return n}ui.sanitizeArgs=Pwe;var Ad=(()=>{try{return"getBuiltinModule"in process?process.getBuiltinModule("node:diagnostics_channel"):require("node:diagnostics_channel")}catch{return}})(),xT=Ad&&typeof Ad.tracingChannel=="function",U6=xT?Ad.tracingChannel("ioredis:command"):void 0,J6=xT?Ad.tracingChannel("ioredis:batch"):void 0,z6=xT?Ad.tracingChannel("ioredis:connect"):void 0;function wT(t){return!!t&&t.hasSubscribers!==!1}var G6=()=>{};function Kwe(t,e){if(!wT(U6))return t();let r=U6.tracePromise(t,e());return r.catch(G6),r}ui.traceCommand=Kwe;function Dwe(t,e){if(!wT(J6))return t();let r=J6.tracePromise(t,e());return r.catch(G6),r}ui.traceBatch=Dwe;function Mwe(t,e){return wT(z6)?z6.tracePromise(t,e()):t()}ui.traceConnect=Mwe});var kT=h($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.addTransactionSupport=void 0;var IT=gt(),TT=Us(),B6=ST(),Nwe=_T();function Lwe(t){t.pipeline=function(n){let i=new B6.default(this);return Array.isArray(n)&&i.addBatch(n),i};let{multi:e}=t;t.multi=function(n,i){if(typeof i>"u"&&!Array.isArray(n)&&(i=n,n=null),i&&i.pipeline===!1)return e.call(this);let s=new B6.default(this);s.multi(),Array.isArray(n)&&s.addBatch(n);let o=s.exec;s.exec=function(c){if(this.isCluster&&!this.redis.slots.length)return this.redis.status==="wait"&&this.redis.connect().catch(IT.noop),(0,TT.default)(new Promise((p,f)=>{this.redis.delayUntilReady(m=>{if(m){f(m);return}this.exec(s).then(p,f)})}),c);if(this._transactions>0&&o.call(s),this.nodeifiedPromise)return o.call(s);let l=Math.max(s.length-2,0),u=()=>o.call(s).then(function(p){let f=p[p.length-1];if(typeof f>"u")throw new Error("Pipeline cannot be used to send any commands when the `exec()` has been called on it.");if(f[0]){f[0].previousErrors=[];for(let m=0;m<p.length-1;++m)p[m][0]&&f[0].previousErrors.push(p[m][0]);throw f[0]}return(0,IT.wrapMultiResult)(f[1])}),d="_buildBatchContext"in this.redis?(0,Nwe.traceBatch)(u,()=>this.redis._buildBatchContext(l)):u();return(0,TT.default)(d,c)};let{execBuffer:a}=s;return s.execBuffer=function(c){return this._transactions>0&&a.call(s),s.exec(c)},s};let{exec:r}=t;t.exec=function(n){return(0,TT.default)(r.call(this).then(function(i){return Array.isArray(i)&&(i=(0,IT.wrapMultiResult)(i)),i}),n)}}$y.addTransactionSupport=Lwe});var RT=h(AT=>{"use strict";Object.defineProperty(AT,"__esModule",{value:!0});function qwe(t,e){Object.getOwnPropertyNames(e.prototype).forEach(r=>{Object.defineProperty(t.prototype,r,Object.getOwnPropertyDescriptor(e.prototype,r))})}AT.default=qwe});var V6=h(Uy=>{"use strict";Object.defineProperty(Uy,"__esModule",{value:!0});Uy.DEFAULT_CLUSTER_OPTIONS=void 0;var H6=require("dns");Uy.DEFAULT_CLUSTER_OPTIONS={clusterRetryStrategy:t=>Math.min(100+t*2,2e3),clusterNodeRetryStrategy:null,enableOfflineQueue:!0,enableReadyCheck:!0,scaleReads:"master",maxRedirections:16,retryDelayOnMoved:0,retryDelayOnFailover:100,retryDelayOnClusterDown:100,retryDelayOnTryAgain:100,slotsRefreshTimeout:1e3,useSRVRecords:!1,resolveSrv:H6.resolveSrv,dnsLookup:H6.lookup,enableAutoPipelining:!1,autoPipeliningIgnoredCommands:[],shardedSubscribers:!1}});var rl=h(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.getConnectionName=or.weightSrvRecords=or.groupSrvRecords=or.getUniqueHostnamesFromOptions=or.normalizeNodeOptions=or.nodeKeyToRedisOptions=or.getNodeKey=void 0;var W6=gt(),Fwe=require("net");function $we(t){return t.port=t.port||6379,t.host=t.host||"127.0.0.1",t.host+":"+t.port}or.getNodeKey=$we;function Uwe(t){let e=t.lastIndexOf(":");if(e===-1)throw new Error(`Invalid node key ${t}`);return{host:t.slice(0,e),port:Number(t.slice(e+1))}}or.nodeKeyToRedisOptions=Uwe;function Jwe(t){return t.map(e=>{let r={};if(typeof e=="object")Object.assign(r,e);else if(typeof e=="string")Object.assign(r,(0,W6.parseURL)(e));else if(typeof e=="number")r.port=e;else throw new Error("Invalid argument "+e);return typeof r.port=="string"&&(r.port=parseInt(r.port,10)),delete r.db,r.port||(r.port=6379),r.host||(r.host="127.0.0.1"),(0,W6.resolveTLSProfile)(r)})}or.normalizeNodeOptions=Jwe;function zwe(t){let e={};return t.forEach(r=>{e[r.host]=!0}),Object.keys(e).filter(r=>!(0,Fwe.isIP)(r))}or.getUniqueHostnamesFromOptions=zwe;function Gwe(t){let e={};for(let r of t)e.hasOwnProperty(r.priority)?(e[r.priority].totalWeight+=r.weight,e[r.priority].records.push(r)):e[r.priority]={totalWeight:r.weight,records:[r]};return e}or.groupSrvRecords=Gwe;function Bwe(t){if(t.records.length===1)return t.totalWeight=0,t.records.shift();let e=Math.floor(Math.random()*(t.totalWeight+t.records.length)),r=0;for(let[n,i]of t.records.entries())if(r+=1+i.weight,r>e)return t.totalWeight-=i.weight,t.records.splice(n,1),i}or.weightSrvRecords=Bwe;function Hwe(t,e){let r=`ioredis-cluster(${t})`;return e?`${r}:${e}`:r}or.getConnectionName=Hwe});var Q6=h(jT=>{"use strict";Object.defineProperty(jT,"__esModule",{value:!0});var Y6=rl(),OT=gt(),Vwe=Yi(),di=(0,OT.Debug)("cluster:subscriber"),CT=class{constructor(e,r,n=!1){this.connectionPool=e,this.emitter=r,this.isSharded=n,this.started=!1,this.subscriber=null,this.slotRange=[],this.onSubscriberEnd=()=>{if(!this.started){di("subscriber has disconnected, but ClusterSubscriber is not started, so not reconnecting.");return}di("subscriber has disconnected, selecting a new one..."),this.selectSubscriber()},this.connectionPool.on("-node",(i,s)=>{!this.started||!this.subscriber||(0,Y6.getNodeKey)(this.subscriber.options)===s&&(di("subscriber has left, selecting a new one..."),this.selectSubscriber())}),this.connectionPool.on("+node",()=>{!this.started||this.subscriber||(di("a new node is discovered and there is no subscriber, selecting a new one..."),this.selectSubscriber())})}getInstance(){return this.subscriber}associateSlotRange(e){return this.isSharded&&(this.slotRange=e),this.slotRange}start(){this.started=!0,this.selectSubscriber(),di("started")}stop(){this.started=!1,this.subscriber&&(this.subscriber.disconnect(),this.subscriber=null)}isStarted(){return this.started}selectSubscriber(){let e=this.lastActiveSubscriber;e&&(e.off("end",this.onSubscriberEnd),e.disconnect()),this.subscriber&&(this.subscriber.off("end",this.onSubscriberEnd),this.subscriber.disconnect());let r=(0,OT.sample)(this.connectionPool.getNodes());if(!r){di("selecting subscriber failed since there is no node discovered in the cluster yet"),this.subscriber=null;return}let{options:n}=r;di("selected a subscriber %s:%s",n.host,n.port);let i="subscriber";this.isSharded&&(i="ssubscriber"),this.subscriber=new Vwe.default({port:n.port,host:n.host,username:n.username,password:n.password,enableReadyCheck:!0,connectionName:(0,Y6.getConnectionName)(i,n.connectionName),lazyConnect:!0,tls:n.tls,retryStrategy:null}),this.subscriber.on("error",OT.noop),this.subscriber.on("moved",()=>{this.emitter.emit("forceRefresh")}),this.subscriber.once("end",this.onSubscriberEnd);let s={subscribe:[],psubscribe:[],ssubscribe:[]};if(e){let o=e.condition||e.prevCondition;o&&o.subscriber&&(s.subscribe=o.subscriber.channels("subscribe"),s.psubscribe=o.subscriber.channels("psubscribe"),s.ssubscribe=o.subscriber.channels("ssubscribe"))}if(s.subscribe.length||s.psubscribe.length||s.ssubscribe.length){let o=0;for(let a of["subscribe","psubscribe","ssubscribe"]){let c=s[a];if(c.length!=0)if(di("%s %d channels",a,c.length),a==="ssubscribe")for(let l of c)o+=1,this.subscriber[a](l).then(()=>{--o||(this.lastActiveSubscriber=this.subscriber)}).catch(()=>{di("failed to ssubscribe to channel: %s",l)});else o+=1,this.subscriber[a](c).then(()=>{--o||(this.lastActiveSubscriber=this.subscriber)}).catch(()=>{di("failed to %s %d channels",a,c.length)})}}else this.lastActiveSubscriber=this.subscriber;for(let o of["message","messageBuffer"])this.subscriber.on(o,(a,c)=>{this.emitter.emit(o,a,c)});for(let o of["pmessage","pmessageBuffer"])this.subscriber.on(o,(a,c,l)=>{this.emitter.emit(o,a,c,l)});if(this.isSharded==!0)for(let o of["smessage","smessageBuffer"])this.subscriber.on(o,(a,c)=>{this.emitter.emit(o,a,c)})}};jT.default=CT});var X6=h(DT=>{"use strict";Object.defineProperty(DT,"__esModule",{value:!0});var Wwe=require("events"),Jy=gt(),PT=rl(),Ywe=Yi(),Rd=(0,Jy.Debug)("cluster:connectionPool"),KT=class extends Wwe.EventEmitter{constructor(e,r=null){super(),this.redisOptions=e,this.clusterNodeRetryStrategy=r,this.nodes={all:{},master:{},slave:{}},this.specifiedOptions={}}getNodes(e="all"){let r=this.nodes[e];return Object.keys(r).map(n=>r[n])}getInstanceByKey(e){return this.nodes.all[e]}getSampleInstance(e){let r=Object.keys(this.nodes[e]),n=(0,Jy.sample)(r);return this.nodes[e][n]}addMasterNode(e){let r=(0,PT.getNodeKey)(e.options),n=this.createRedisFromOptions(e,e.options.readOnly);return e.options.readOnly?!1:(this.nodes.all[r]=n,this.nodes.master[r]=n,!0)}createRedisFromOptions(e,r){return new Ywe.default((0,Jy.defaults)({retryStrategy:typeof this.clusterNodeRetryStrategy=="function"?this.clusterNodeRetryStrategy:null,enableOfflineQueue:!0,readOnly:r},e,this.redisOptions,{lazyConnect:!0}))}findOrCreate(e,r=!1){let n=(0,PT.getNodeKey)(e);r=!!r,this.specifiedOptions[n]?Object.assign(e,this.specifiedOptions[n]):this.specifiedOptions[n]=e;let i;return this.nodes.all[n]?(i=this.nodes.all[n],i.options.readOnly!==r&&(i.options.readOnly=r,Rd("Change role of %s to %s",n,r?"slave":"master"),i[r?"readonly":"readwrite"]().catch(Jy.noop),r?(delete this.nodes.master[n],this.nodes.slave[n]=i):(delete this.nodes.slave[n],this.nodes.master[n]=i))):(Rd("Connecting to %s as %s",n,r?"slave":"master"),i=this.createRedisFromOptions(e,r),this.nodes.all[n]=i,this.nodes[r?"slave":"master"][n]=i,i.once("end",()=>{this.removeNode(n),this.emit("-node",i,n),Object.keys(this.nodes.all).length||this.emit("drain")}),this.emit("+node",i,n),i.on("error",s=>{this.emit("nodeError",s,n)})),i}reset(e){Rd("Reset with %O",e);let r={};e.forEach(n=>{let i=(0,PT.getNodeKey)(n);n.readOnly&&r[i]||(r[i]=n)}),Object.keys(this.nodes.all).forEach(n=>{r[n]||(Rd("Disconnect %s because the node does not hold any slot",n),this.nodes.all[n].disconnect(),this.removeNode(n))}),Object.keys(r).forEach(n=>{let i=r[n];this.findOrCreate(i,i.readOnly)})}removeNode(e){let{nodes:r}=this;r.all[e]&&(Rd("Remove %s from the pool",e),delete r.all[e]),delete r.master[e],delete r.slave[e]}};DT.default=KT});var zy=h((v8e,Z6)=>{"use strict";function at(t,r){var r=r||{};this._capacity=r.capacity,this._head=0,this._tail=0,Array.isArray(t)?this._fromArray(t):(this._capacityMask=3,this._list=new Array(4))}at.prototype.peekAt=function(e){var r=e;if(r===(r|0)){var n=this.size();if(!(r>=n||r<-n))return r<0&&(r+=n),r=this._head+r&this._capacityMask,this._list[r]}};at.prototype.get=function(e){return this.peekAt(e)};at.prototype.peek=function(){if(this._head!==this._tail)return this._list[this._head]};at.prototype.peekFront=function(){return this.peek()};at.prototype.peekBack=function(){return this.peekAt(-1)};Object.defineProperty(at.prototype,"length",{get:function(){return this.size()}});at.prototype.size=function(){return this._head===this._tail?0:this._head<this._tail?this._tail-this._head:this._capacityMask+1-(this._head-this._tail)};at.prototype.unshift=function(e){if(arguments.length===0)return this.size();var r=this._list.length;return this._head=this._head-1+r&this._capacityMask,this._list[this._head]=e,this._tail===this._head&&this._growArray(),this._capacity&&this.size()>this._capacity&&this.pop(),this._head<this._tail?this._tail-this._head:this._capacityMask+1-(this._head-this._tail)};at.prototype.shift=function(){var e=this._head;if(e!==this._tail){var r=this._list[e];return this._list[e]=void 0,this._head=e+1&this._capacityMask,e<2&&this._tail>1e4&&this._tail<=this._list.length>>>2&&this._shrinkArray(),r}};at.prototype.push=function(e){if(arguments.length===0)return this.size();var r=this._tail;return this._list[r]=e,this._tail=r+1&this._capacityMask,this._tail===this._head&&this._growArray(),this._capacity&&this.size()>this._capacity&&this.shift(),this._head<this._tail?this._tail-this._head:this._capacityMask+1-(this._head-this._tail)};at.prototype.pop=function(){var e=this._tail;if(e!==this._head){var r=this._list.length;this._tail=e-1+r&this._capacityMask;var n=this._list[this._tail];return this._list[this._tail]=void 0,this._head<2&&e>1e4&&e<=r>>>2&&this._shrinkArray(),n}};at.prototype.removeOne=function(e){var r=e;if(r===(r|0)&&this._head!==this._tail){var n=this.size(),i=this._list.length;if(!(r>=n||r<-n)){r<0&&(r+=n),r=this._head+r&this._capacityMask;var s=this._list[r],o;if(e<n/2){for(o=e;o>0;o--)this._list[r]=this._list[r=r-1+i&this._capacityMask];this._list[r]=void 0,this._head=this._head+1+i&this._capacityMask}else{for(o=n-1-e;o>0;o--)this._list[r]=this._list[r=r+1+i&this._capacityMask];this._list[r]=void 0,this._tail=this._tail-1+i&this._capacityMask}return s}}};at.prototype.remove=function(e,r){var n=e,i,s=r;if(n===(n|0)&&this._head!==this._tail){var o=this.size(),a=this._list.length;if(!(n>=o||n<-o||r<1)){if(n<0&&(n+=o),r===1||!r)return i=new Array(1),i[0]=this.removeOne(n),i;if(n===0&&n+r>=o)return i=this.toArray(),this.clear(),i;n+r>o&&(r=o-n);var c;for(i=new Array(r),c=0;c<r;c++)i[c]=this._list[this._head+n+c&this._capacityMask];if(n=this._head+n&this._capacityMask,e+r===o){for(this._tail=this._tail-r+a&this._capacityMask,c=r;c>0;c--)this._list[n=n+1+a&this._capacityMask]=void 0;return i}if(e===0){for(this._head=this._head+r+a&this._capacityMask,c=r-1;c>0;c--)this._list[n=n+1+a&this._capacityMask]=void 0;return i}if(n<o/2){for(this._head=this._head+e+r+a&this._capacityMask,c=e;c>0;c--)this.unshift(this._list[n=n-1+a&this._capacityMask]);for(n=this._head-1+a&this._capacityMask;s>0;)this._list[n=n-1+a&this._capacityMask]=void 0,s--;e<0&&(this._tail=n)}else{for(this._tail=n,n=n+r+a&this._capacityMask,c=o-(r+e);c>0;c--)this.push(this._list[n++]);for(n=this._tail;s>0;)this._list[n=n+1+a&this._capacityMask]=void 0,s--}return this._head<2&&this._tail>1e4&&this._tail<=a>>>2&&this._shrinkArray(),i}}};at.prototype.splice=function(e,r){var n=e;if(n===(n|0)){var i=this.size();if(n<0&&(n+=i),!(n>i))if(arguments.length>2){var s,o,a,c=arguments.length,l=this._list.length,u=2;if(!i||n<i/2){for(o=new Array(n),s=0;s<n;s++)o[s]=this._list[this._head+s&this._capacityMask];for(r===0?(a=[],n>0&&(this._head=this._head+n+l&this._capacityMask)):(a=this.remove(n,r),this._head=this._head+n+l&this._capacityMask);c>u;)this.unshift(arguments[--c]);for(s=n;s>0;s--)this.unshift(o[s-1])}else{o=new Array(i-(n+r));var d=o.length;for(s=0;s<d;s++)o[s]=this._list[this._head+n+r+s&this._capacityMask];for(r===0?(a=[],n!=i&&(this._tail=this._head+n+l&this._capacityMask)):(a=this.remove(n,r),this._tail=this._tail-d+l&this._capacityMask);u<c;)this.push(arguments[u++]);for(s=0;s<d;s++)this.push(o[s])}return a}else return this.remove(n,r)}};at.prototype.clear=function(){this._list=new Array(this._list.length),this._head=0,this._tail=0};at.prototype.isEmpty=function(){return this._head===this._tail};at.prototype.toArray=function(){return this._copyArray(!1)};at.prototype._fromArray=function(e){var r=e.length,n=this._nextPowerOf2(r);this._list=new Array(n),this._capacityMask=n-1,this._tail=r;for(var i=0;i<r;i++)this._list[i]=e[i]};at.prototype._copyArray=function(e,r){var n=this._list,i=n.length,s=this.length;if(r=r|s,r==s&&this._head<this._tail)return this._list.slice(this._head,this._tail);var o=new Array(r),a=0,c;if(e||this._head>this._tail){for(c=this._head;c<i;c++)o[a++]=n[c];for(c=0;c<this._tail;c++)o[a++]=n[c]}else for(c=this._head;c<this._tail;c++)o[a++]=n[c];return o};at.prototype._growArray=function(){if(this._head!=0){var e=this._copyArray(!0,this._list.length<<1);this._tail=this._list.length,this._head=0,this._list=e}else this._tail=this._list.length,this._list.length<<=1;this._capacityMask=this._capacityMask<<1|1};at.prototype._shrinkArray=function(){this._list.length>>>=1,this._capacityMask>>>=1};at.prototype._nextPowerOf2=function(e){var r=Math.log(e)/Math.log(2),n=1<<r+1;return Math.max(n,4)};Z6.exports=at});var ez=h(NT=>{"use strict";Object.defineProperty(NT,"__esModule",{value:!0});var Qwe=gt(),Xwe=zy(),Zwe=(0,Qwe.Debug)("delayqueue"),MT=class{constructor(){this.queues={},this.timeouts={}}push(e,r,n){let i=n.callback||process.nextTick;this.queues[e]||(this.queues[e]=new Xwe),this.queues[e].push(r),this.timeouts[e]||(this.timeouts[e]=setTimeout(()=>{i(()=>{this.timeouts[e]=null,this.execute(e)})},n.timeout))}execute(e){let r=this.queues[e];if(!r)return;let{length:n}=r;if(n)for(Zwe("send %d commands in %s queue",n,e),this.queues[e]=null;r.length>0;)r.shift()()}};NT.default=MT});var iz=h(qT=>{"use strict";Object.defineProperty(qT,"__esModule",{value:!0});var tz=rl(),nz=gt(),e_e=Yi(),rz=(0,nz.Debug)("cluster:subscriberGroup:shardedSubscriber"),Pe={IDLE:"idle",STARTING:"starting",CONNECTED:"connected",STOPPING:"stopping",ENDED:"ended"},t_e={[Pe.IDLE]:[Pe.STARTING,Pe.STOPPING,Pe.ENDED],[Pe.STARTING]:[Pe.CONNECTED,Pe.STOPPING,Pe.ENDED],[Pe.CONNECTED]:[Pe.STOPPING,Pe.ENDED],[Pe.STOPPING]:[Pe.ENDED],[Pe.ENDED]:[]},LT=class{constructor(e,r,n){var i;this.emitter=e,this.status=Pe.IDLE,this.instance=null,this.connectPromise=null,this.messageListeners=new Map,this.onEnd=()=>{this.updateStatus(Pe.ENDED),this.emitter.emit("-node",this.instance,this.nodeKey)},this.onError=s=>{this.emitter.emit("nodeError",s,this.nodeKey)},this.onMoved=()=>{this.emitter.emit("moved")},this.instance=new e_e.default((0,nz.defaults)({enableReadyCheck:!1,enableOfflineQueue:!0,connectionName:(0,tz.getConnectionName)("ssubscriber",r.connectionName),retryStrategy:null,lazyConnect:!0},r,n)),this.lazyConnect=(i=n?.lazyConnect)!==null&&i!==void 0?i:!0,this.nodeKey=(0,tz.getNodeKey)(r),this.instance.on("end",this.onEnd),this.instance.on("error",this.onError),this.instance.on("moved",this.onMoved);for(let s of["smessage","smessageBuffer"]){let o=(...a)=>{this.emitter.emit(s,...a)};this.messageListeners.set(s,o),this.instance.on(s,o)}}async start(){if(this.connectPromise)return this.connectPromise;if(!(this.status===Pe.STARTING||this.status===Pe.CONNECTED)){if(this.status===Pe.ENDED||!this.instance)throw new Error(`Sharded subscriber ${this.nodeKey} cannot be restarted once ended.`);this.updateStatus(Pe.STARTING),this.connectPromise=this.instance.connect();try{await this.connectPromise,this.updateStatus(Pe.CONNECTED)}catch(e){throw this.updateStatus(Pe.ENDED),e}finally{this.connectPromise=null}}}stop(){this.updateStatus(Pe.STOPPING),this.instance&&(this.instance.disconnect(),this.instance.removeAllListeners(),this.messageListeners.clear(),this.instance=null),this.updateStatus(Pe.ENDED),rz("stopped %s",this.nodeKey)}isStarted(){return[Pe.CONNECTED,Pe.STARTING].includes(this.status)}get subscriberStatus(){return this.status}isHealthy(){return(this.status===Pe.IDLE||this.status===Pe.CONNECTED||this.status===Pe.STARTING)&&this.instance!==null}getInstance(){return this.instance}getNodeKey(){return this.nodeKey}isLazyConnect(){return this.lazyConnect}updateStatus(e){if(this.status!==e){if(!t_e[this.status].includes(e)){rz("Invalid status transition for %s: %s -> %s",this.nodeKey,this.status,e);return}this.status=e}}};qT.default=LT});var sz=h(FT=>{"use strict";Object.defineProperty(FT,"__esModule",{value:!0});var r_e=gt(),n_e=rl(),Gy=kd(),i_e=iz(),fn=(0,r_e.Debug)("cluster:subscriberGroup"),nl=class t{constructor(e,r){this.subscriberGroupEmitter=e,this.options=r,this.shardedSubscribers=new Map,this.clusterSlots=[],this.subscriberToSlotsIndex=new Map,this.channels=new Map,this.failedAttemptsByNode=new Map,this.isResetting=!1,this.pendingReset=null,this.handleSubscriberConnectFailed=(n,i)=>{let o=(this.failedAttemptsByNode.get(i)||0)+1;this.failedAttemptsByNode.set(i,o);let a=Math.min(o,t.MAX_RETRY_ATTEMPTS),c=Math.min(t.BASE_BACKOFF_MS*2**a,t.MAX_BACKOFF_MS),l=Math.floor((Math.random()-.5)*(c*.5)),u=Math.max(0,c+l);fn("Failed to connect subscriber for %s. Refreshing slots in %dms",i,u),this.subscriberGroupEmitter.emit("subscriberConnectFailed",{delay:u,error:n})},this.handleSubscriberConnectSucceeded=n=>{this.failedAttemptsByNode.delete(n)}}getResponsibleSubscriber(e){let r=this.clusterSlots[e][0],n=this.shardedSubscribers.get(r);return n&&n.subscriberStatus==="idle"&&n.start().then(()=>{this.handleSubscriberConnectSucceeded(n.getNodeKey())}).catch(i=>{this.handleSubscriberConnectFailed(i,n.getNodeKey())}),n}addChannels(e){let r=Gy(e[0]);for(let i of e)if(Gy(i)!==r)return-1;let n=this.channels.get(r);return n?this.channels.set(r,n.concat(e)):this.channels.set(r,e),Array.from(this.channels.values()).reduce((i,s)=>i+s.length,0)}removeChannels(e){let r=Gy(e[0]);for(let i of e)if(Gy(i)!==r)return-1;let n=this.channels.get(r);if(n){let i=n.filter(s=>!e.includes(s));this.channels.set(r,i)}return Array.from(this.channels.values()).reduce((i,s)=>i+s.length,0)}stop(){for(let e of this.shardedSubscribers.values())e.stop();this.pendingReset=null,this.shardedSubscribers.clear(),this.subscriberToSlotsIndex.clear()}start(){let e=[];for(let r of this.shardedSubscribers.values())this.shouldStartSubscriber(r)&&(e.push(r.start().then(()=>{this.handleSubscriberConnectSucceeded(r.getNodeKey())}).catch(n=>{this.handleSubscriberConnectFailed(n,r.getNodeKey())})),this.subscriberGroupEmitter.emit("+subscriber"));return Promise.all(e)}async reset(e,r){if(this.isResetting){this.pendingReset={slots:e,nodes:r};return}this.isResetting=!0;try{let n=this._refreshSlots(e),i=this.hasUnhealthySubscribers();if(!n&&!i){fn("No topology change detected or failed subscribers. Skipping reset.");return}for(let[o,a]of this.shardedSubscribers){if(this.subscriberToSlotsIndex.has(o)&&a.isHealthy()){fn("Skipping deleting subscriber for %s",o);continue}fn("Removing subscriber for %s",o),a.stop(),this.shardedSubscribers.delete(o),this.subscriberGroupEmitter.emit("-subscriber")}let s=[];for(let[o,a]of this.subscriberToSlotsIndex){let c=this.shardedSubscribers.get(o);if(c&&c.isHealthy()){fn("Skipping creating new subscriber for %s",o),!c.isStarted()&&this.shouldStartSubscriber(c)&&s.push(c.start().then(()=>{this.handleSubscriberConnectSucceeded(o)}).catch(d=>{this.handleSubscriberConnectFailed(d,o)}));continue}c&&!c.isHealthy()&&(fn("Replacing subscriber for %s",o),c.stop(),this.shardedSubscribers.delete(o),this.subscriberGroupEmitter.emit("-subscriber")),fn("Creating new subscriber for %s",o);let l=r.find(d=>(0,n_e.getNodeKey)(d.options)===o);if(!l){fn("Failed to find node for key %s",o);continue}let u=new i_e.default(this.subscriberGroupEmitter,l.options,this.options.redisOptions);this.shardedSubscribers.set(o,u),this.shouldStartSubscriber(u)&&s.push(u.start().then(()=>{this.handleSubscriberConnectSucceeded(o)}).catch(d=>{this.handleSubscriberConnectFailed(d,o)})),this.subscriberGroupEmitter.emit("+subscriber")}await Promise.all(s),this._resubscribe(),this.subscriberGroupEmitter.emit("subscribersReady")}finally{if(this.isResetting=!1,this.pendingReset){let{slots:n,nodes:i}=this.pendingReset;this.pendingReset=null,await this.reset(n,i)}}}_refreshSlots(e){if(this._slotsAreEqual(e)&&this.subscriberToSlotsIndex.size>0)return fn("Nothing to refresh because the new cluster map is equal to the previous one."),!1;fn("Refreshing the slots of the subscriber group."),this.subscriberToSlotsIndex=new Map;for(let r=0;r<e.length;r++){let n=e[r][0];this.subscriberToSlotsIndex.has(n)||this.subscriberToSlotsIndex.set(n,[]),this.subscriberToSlotsIndex.get(n).push(Number(r))}return this.clusterSlots=JSON.parse(JSON.stringify(e)),!0}_resubscribe(){this.shardedSubscribers&&this.shardedSubscribers.forEach((e,r)=>{let n=this.subscriberToSlotsIndex.get(r);n&&n.forEach(i=>{let s=e.getInstance(),o=this.channels.get(i);if(o&&o.length>0){if(!s||s.status==="end")return;s.status==="ready"?s.ssubscribe(...o).catch(a=>{fn("Failed to ssubscribe on node %s: %s",r,a)}):s.once("ready",()=>{s.ssubscribe(...o).catch(a=>{fn("Failed to ssubscribe on node %s: %s",r,a)})})}})})}_slotsAreEqual(e){return this.clusterSlots===void 0?!1:JSON.stringify(this.clusterSlots)===JSON.stringify(e)}hasUnhealthySubscribers(){let e=Array.from(this.shardedSubscribers.values()).some(n=>!n.isHealthy()),r=Array.from(this.subscriberToSlotsIndex.keys()).some(n=>!this.shardedSubscribers.has(n));return e||r}shouldStartSubscriber(e){if(e.isStarted())return!1;if(!e.isLazyConnect())return!0;let r=this.subscriberToSlotsIndex.get(e.getNodeKey());return r?r.some(n=>{let i=this.channels.get(n);return!!(i&&i.length>0)}):!1}};FT.default=nl;nl.MAX_RETRY_ATTEMPTS=10;nl.MAX_BACKOFF_MS=2e3;nl.BASE_BACKOFF_MS=100});var JT=h(UT=>{"use strict";Object.defineProperty(UT,"__esModule",{value:!0});var oz=Zo(),$T=require("events"),il=ea(),az=Us(),cz=Vi(),By=O6(),s_e=Yi(),o_e=Ny(),a_e=kT(),Ir=gt(),c_e=RT(),l_e=Fy(),u_e=V6(),d_e=Q6(),p_e=X6(),f_e=ez(),sl=rl(),lz=zy(),m_e=sz(),Je=(0,Ir.Debug)("cluster"),uz=new WeakSet,Od=class t extends l_e.default{constructor(e,r={}){var n;if(super(),this.slots=[],this._groupsIds={},this._groupsBySlot=Array(16384),this.isCluster=!0,this.retryAttempts=0,this.delayQueue=new f_e.default,this.offlineQueue=new lz,this.isRefreshing=!1,this._refreshSlotsCacheCallbacks=[],this._autoPipelines=new Map,this._runningAutoPipelines=new Set,this._readyDelayedCallbacks=[],this.connectionEpoch=0,$T.EventEmitter.call(this),this.startupNodes=e,this.options=(0,Ir.defaults)({},r,u_e.DEFAULT_CLUSTER_OPTIONS,this.options),this.options.shardedSubscribers&&this.createShardedSubscriberGroup(),this.options.redisOptions&&this.options.redisOptions.keyPrefix&&!this.options.keyPrefix&&(this.options.keyPrefix=this.options.redisOptions.keyPrefix),typeof this.options.scaleReads!="function"&&["all","master","slave"].indexOf(this.options.scaleReads)===-1)throw new Error('Invalid option scaleReads "'+this.options.scaleReads+'". Expected "all", "master", "slave" or a custom function');this.connectionPool=new p_e.default((n=this.options.redisOptions)!==null&&n!==void 0?n:{},this.options.clusterNodeRetryStrategy),this.connectionPool.on("-node",(i,s)=>{this.emit("-node",i)}),this.connectionPool.on("+node",i=>{this.emit("+node",i)}),this.connectionPool.on("drain",()=>{this.setStatus("close")}),this.connectionPool.on("nodeError",(i,s)=>{this.emit("node error",i,s)}),this.subscriber=new d_e.default(this.connectionPool,this),this.options.scripts&&Object.entries(this.options.scripts).forEach(([i,s])=>{this.defineCommand(i,s)}),this.options.lazyConnect?this.setStatus("wait"):this.connect().catch(i=>{Je("connecting failed: %s",i)})}connect(){return new Promise((e,r)=>{if(this.status==="connecting"||this.status==="connect"||this.status==="ready"){r(new Error("Redis is already connecting/connected"));return}let n=++this.connectionEpoch;this.setStatus("connecting"),this.resolveStartupNodeHostnames().then(i=>{if(this.connectionEpoch!==n){Je("discard connecting after resolving startup nodes because epoch not match: %d != %d",n,this.connectionEpoch),r(new il.RedisError("Connection is discarded because a new connection is made"));return}if(this.status!=="connecting"){Je("discard connecting after resolving startup nodes because the status changed to %s",this.status),r(new il.RedisError("Connection is aborted"));return}this.connectionPool.reset(i),this.options.shardedSubscribers&&this.shardedSubscribers.reset(this.slots,this.connectionPool.getNodes("all")).catch(c=>{Je("Error while starting subscribers: %s",c)});let s=()=>{this.setStatus("ready"),this.retryAttempts=0,this.executeOfflineCommands(),this.resetNodesRefreshInterval(),e()},o,a=()=>{this.invokeReadyDelayedCallbacks(void 0),this.removeListener("close",o),this.manuallyClosing=!1,this.setStatus("connect"),this.options.enableReadyCheck?this.readyCheck((c,l)=>{c||l?(Je("Ready check failed (%s). Reconnecting...",c||l),this.status==="connect"&&this.disconnect(!0)):s()}):s()};o=()=>{let c=new Error("None of startup nodes is available");this.removeListener("refresh",a),this.invokeReadyDelayedCallbacks(c),r(c)},this.once("refresh",a),this.once("close",o),this.once("close",this.handleCloseEvent.bind(this)),this.refreshSlotsCache(c=>{c&&c.message===By.default.defaultMessage&&(s_e.default.prototype.silentEmit.call(this,"error",c),this.connectionPool.reset([]))}),this.subscriber.start(),this.options.shardedSubscribers&&this.shardedSubscribers.start().catch(c=>{Je("Error while starting subscribers: %s",c)})}).catch(i=>{this.setStatus("close"),this.handleCloseEvent(i),this.invokeReadyDelayedCallbacks(i),r(i)})})}disconnect(e=!1){let r=this.status;this.setStatus("disconnecting"),e||(this.manuallyClosing=!0),this.reconnectTimeout&&!e&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null,Je("Canceled reconnecting attempts")),this.clearNodesRefreshInterval(),this.subscriber.stop(),this.options.shardedSubscribers&&this.shardedSubscribers.stop(),r==="wait"?(this.setStatus("close"),this.handleCloseEvent()):this.connectionPool.reset([])}quit(e){let r=this.status;if(this.setStatus("disconnecting"),this.manuallyClosing=!0,this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.clearNodesRefreshInterval(),this.subscriber.stop(),this.options.shardedSubscribers&&this.shardedSubscribers.stop(),r==="wait"){let n=(0,az.default)(Promise.resolve("OK"),e);return setImmediate(function(){this.setStatus("close"),this.handleCloseEvent()}.bind(this)),n}return(0,az.default)(Promise.all(this.nodes().map(n=>n.quit().catch(i=>{if(i.message===Ir.CONNECTION_CLOSED_ERROR_MSG)return"OK";throw i}))).then(()=>"OK"),e)}duplicate(e=[],r={}){let n=e.length>0?e:this.startupNodes.slice(0),i=Object.assign({},this.options,r);return new t(n,i)}nodes(e="all"){if(e!=="all"&&e!=="master"&&e!=="slave")throw new Error('Invalid role "'+e+'". Expected "all", "master" or "slave"');return this.connectionPool.getNodes(e)}delayUntilReady(e){this._readyDelayedCallbacks.push(e)}get autoPipelineQueueSize(){let e=0;for(let r of this._autoPipelines.values())e+=r.length;return e}refreshSlotsCache(e){if(e&&this._refreshSlotsCacheCallbacks.push(e),this.isRefreshing)return;this.isRefreshing=!0;let r=this,n=a=>{this.isRefreshing=!1;for(let c of this._refreshSlotsCacheCallbacks)c(a);this._refreshSlotsCacheCallbacks=[]},i=(0,Ir.shuffle)(this.connectionPool.getNodes()),s=null;function o(a){if(a===i.length){let u=new By.default(By.default.defaultMessage,s);return n(u)}let c=i[a],l=`${c.options.host}:${c.options.port}`;Je("getting slot cache from %s",l),r.getInfoFromNode(c,function(u){switch(r.status){case"close":case"end":return n(new Error("Cluster is disconnected."));case"disconnecting":return n(new Error("Cluster is disconnecting."))}u?(r.emit("node error",u,l),s=u,o(a+1)):(r.emit("refresh"),n())})}o(0)}sendCommand(e,r,n){if(this.status==="wait"&&this.connect().catch(Ir.noop),this.status==="end")return e.reject(new Error(Ir.CONNECTION_CLOSED_ERROR_MSG)),e.promise;let i=this.options.scaleReads;i!=="master"&&(e.isReadOnly||(0,oz.exists)(e.name)&&(0,oz.hasFlag)(e.name,"readonly")||(i="master"));let s=n?n.slot:e.getSlot(),o={},a=this;if(!n&&!uz.has(e)){uz.add(e);let l=e.reject;e.reject=function(u){let d=c.bind(null,!0);a.handleError(u,o,{moved:function(p,f){Je("command %s is moved to %s",e.name,f),s=Number(p),a.slots[p]?a.slots[p][0]=f:a.slots[p]=[f],a._groupsBySlot[p]=a._groupsIds[a.slots[p].join(";")],a.connectionPool.findOrCreate(a.natMapper(f)),c(),Je("refreshing slot caches... (triggered by MOVED error)"),a.refreshSlotsCache()},ask:function(p,f){Je("command %s is required to ask %s:%s",e.name,f);let m=a.natMapper(f);a.connectionPool.findOrCreate(m),c(!1,`${m.host}:${m.port}`)},tryagain:d,clusterDown:d,connectionClosed:d,maxRedirections:function(p){l.call(e,p)},defaults:function(){l.call(e,u)}})}}c();function c(l,u){if(a.status==="end"){e.reject(new il.AbortError("Cluster is ended."));return}let d;if(a.status==="ready"||e.name==="cluster"){if(n&&n.redis)d=n.redis;else if(cz.default.checkFlag("ENTER_SUBSCRIBER_MODE",e.name)||cz.default.checkFlag("EXIT_SUBSCRIBER_MODE",e.name)){if(a.options.shardedSubscribers&&(e.name=="ssubscribe"||e.name=="sunsubscribe")){let p=a.shardedSubscribers.getResponsibleSubscriber(s);if(!p){e.reject(new il.AbortError(`No sharded subscriber for slot: ${s}`));return}let f=-1;e.name=="ssubscribe"&&(f=a.shardedSubscribers.addChannels(e.getKeys())),e.name=="sunsubscribe"&&(f=a.shardedSubscribers.removeChannels(e.getKeys())),f!==-1?d=p.getInstance():e.reject(new il.AbortError("Possible CROSSSLOT error: All channels must hash to the same slot"))}else d=a.subscriber.getInstance();if(!d){e.reject(new il.AbortError("No subscriber for the cluster"));return}}else{if(!l){if(typeof s=="number"&&a.slots[s]){let p=a.slots[s];if(typeof i=="function"){let f=p.map(function(m){return a.connectionPool.getInstanceByKey(m)});d=i(f,e),Array.isArray(d)&&(d=(0,Ir.sample)(d)),d||(d=f[0])}else{let f;i==="all"?f=(0,Ir.sample)(p):i==="slave"&&p.length>1?f=(0,Ir.sample)(p,1):f=p[0],d=a.connectionPool.getInstanceByKey(f)}}u&&(d=a.connectionPool.getInstanceByKey(u),d.asking())}if(d||(d=(typeof i=="function"?null:a.connectionPool.getSampleInstance(i))||a.connectionPool.getSampleInstance("all")),d&&!a.options.enableOfflineQueue&&d.status!=="ready"&&d.status!=="wait"){e.reject(new Error(Ir.CONNECTION_CLOSED_ERROR_MSG));return}}n&&!n.redis&&(n.redis=d)}if(!d&&a.options.enableOfflineQueue){a.offlineQueue.push({command:e,stream:r,node:n});return}if(!d){e.reject(new Error("Cluster isn't ready and enableOfflineQueue options is false"));return}d.sendCommand(e,r)}return e.promise}sscanStream(e,r){return this.createScanStream("sscan",{key:e,options:r})}sscanBufferStream(e,r){return this.createScanStream("sscanBuffer",{key:e,options:r})}hscanStream(e,r){return this.createScanStream("hscan",{key:e,options:r})}hscanBufferStream(e,r){return this.createScanStream("hscanBuffer",{key:e,options:r})}zscanStream(e,r){return this.createScanStream("zscan",{key:e,options:r})}zscanBufferStream(e,r){return this.createScanStream("zscanBuffer",{key:e,options:r})}handleError(e,r,n){if(typeof r.value>"u"?r.value=this.options.maxRedirections:r.value-=1,r.value<=0){n.maxRedirections(new Error("Too many Cluster redirections. Last error: "+e));return}let i=e.message.split(" ");if(i[0]==="MOVED"){let s=this.options.retryDelayOnMoved;s&&typeof s=="number"?this.delayQueue.push("moved",n.moved.bind(null,i[1],i[2]),{timeout:s}):n.moved(i[1],i[2])}else i[0]==="ASK"?n.ask(i[1],i[2]):i[0]==="TRYAGAIN"?this.delayQueue.push("tryagain",n.tryagain,{timeout:this.options.retryDelayOnTryAgain}):i[0]==="CLUSTERDOWN"&&this.options.retryDelayOnClusterDown>0?this.delayQueue.push("clusterdown",n.connectionClosed,{timeout:this.options.retryDelayOnClusterDown,callback:this.refreshSlotsCache.bind(this)}):e.message===Ir.CONNECTION_CLOSED_ERROR_MSG&&this.options.retryDelayOnFailover>0&&this.status==="ready"?this.delayQueue.push("failover",n.connectionClosed,{timeout:this.options.retryDelayOnFailover,callback:this.refreshSlotsCache.bind(this)}):n.defaults()}resetOfflineQueue(){this.offlineQueue=new lz}clearNodesRefreshInterval(){this.slotsTimer&&(clearTimeout(this.slotsTimer),this.slotsTimer=null)}resetNodesRefreshInterval(){if(this.slotsTimer||!this.options.slotsRefreshInterval)return;let e=()=>{this.slotsTimer=setTimeout(()=>{Je('refreshing slot caches... (triggered by "slotsRefreshInterval" option)'),this.refreshSlotsCache(()=>{e()})},this.options.slotsRefreshInterval)};e()}setStatus(e){Je("status: %s -> %s",this.status||"[empty]",e),this.status=e,process.nextTick(()=>{this.emit(e)})}handleCloseEvent(e){var r;e&&Je("closed because %s",e);let n;!this.manuallyClosing&&typeof this.options.clusterRetryStrategy=="function"&&(n=this.options.clusterRetryStrategy.call(this,++this.retryAttempts,e)),typeof n=="number"?(this.setStatus("reconnecting"),this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,Je("Cluster is disconnected. Retrying after %dms",n),this.connect().catch(function(i){Je("Got error %s when reconnecting. Ignoring...",i)})},n)):(this.options.shardedSubscribers&&((r=this.subscriberGroupEmitter)===null||r===void 0||r.removeAllListeners()),this.setStatus("end"),this.flushQueue(new Error("None of startup nodes is available")))}flushQueue(e){let r;for(;r=this.offlineQueue.shift();)r.command.reject(e)}executeOfflineCommands(){if(this.offlineQueue.length){Je("send %d commands in offline queue",this.offlineQueue.length);let e=this.offlineQueue;this.resetOfflineQueue();let r;for(;r=e.shift();)this.sendCommand(r.command,r.stream,r.node)}}natMapper(e){let r=typeof e=="string"?e:`${e.host}:${e.port}`,n=null;return this.options.natMap&&typeof this.options.natMap=="function"?n=this.options.natMap(r):this.options.natMap&&typeof this.options.natMap=="object"&&(n=this.options.natMap[r]),n?(Je("NAT mapping %s -> %O",r,n),Object.assign({},n)):typeof e=="string"?(0,sl.nodeKeyToRedisOptions)(e):e}getInfoFromNode(e,r){if(!e)return r(new Error("Node is disconnected"));let n=e.duplicate({enableOfflineQueue:!0,enableReadyCheck:!1,retryStrategy:null,connectionName:(0,sl.getConnectionName)("refresher",this.options.redisOptions&&this.options.redisOptions.connectionName)});n.on("error",Ir.noop),n.cluster("SLOTS",(0,Ir.timeout)((i,s)=>{if(n.disconnect(),i)return Je("error encountered running CLUSTER.SLOTS: %s",i),r(i);if(this.status==="disconnecting"||this.status==="close"||this.status==="end"){Je("ignore CLUSTER.SLOTS results (count: %d) since cluster status is %s",s.length,this.status),r();return}let o=[];Je("cluster slots result count: %d",s.length);for(let c=0;c<s.length;++c){let l=s[c],u=l[0],d=l[1],p=[];for(let f=2;f<l.length;f++){if(!l[f][0])continue;let m=this.natMapper({host:l[f][0],port:l[f][1]});m.readOnly=f!==2,o.push(m),p.push(m.host+":"+m.port)}Je("cluster slots result [%d]: slots %d~%d served by %s",c,u,d,p);for(let f=u;f<=d;f++)this.slots[f]=p}this._groupsIds=Object.create(null);let a=0;for(let c=0;c<16384;c++){let l=(this.slots[c]||[]).join(";");if(!l.length){this._groupsBySlot[c]=void 0;continue}this._groupsIds[l]||(this._groupsIds[l]=++a),this._groupsBySlot[c]=this._groupsIds[l]}this.connectionPool.reset(o),this.options.shardedSubscribers&&this.shardedSubscribers.reset(this.slots,this.connectionPool.getNodes("all")).catch(c=>{Je("Error while starting subscribers: %s",c)}),r()},this.options.slotsRefreshTimeout))}invokeReadyDelayedCallbacks(e){for(let r of this._readyDelayedCallbacks)process.nextTick(r,e);this._readyDelayedCallbacks=[]}readyCheck(e){this.cluster("INFO",(r,n)=>{if(r)return e(r);if(typeof n!="string")return e();let i,s=n.split(`\r
|
||
`);for(let o=0;o<s.length;++o){let a=s[o].split(":");if(a[0]==="cluster_state"){i=a[1];break}}i==="fail"?(Je("cluster state not ok (%s)",i),e(null,i)):e()})}resolveSrv(e){return new Promise((r,n)=>{this.options.resolveSrv(e,(i,s)=>{if(i)return n(i);let o=this,a=(0,sl.groupSrvRecords)(s),c=Object.keys(a).sort((u,d)=>parseInt(u)-parseInt(d));function l(u){if(!c.length)return n(u);let d=c[0],p=a[d],f=(0,sl.weightSrvRecords)(p);p.records.length||c.shift(),o.dnsLookup(f.name).then(m=>r({host:m,port:f.port}),l)}l()})})}dnsLookup(e){return new Promise((r,n)=>{this.options.dnsLookup(e,(i,s)=>{i?(Je("failed to resolve hostname %s to IP: %s",e,i.message),n(i)):(Je("resolved hostname %s to IP %s",e,s),r(s))})})}async resolveStartupNodeHostnames(){if(!Array.isArray(this.startupNodes)||this.startupNodes.length===0)throw new Error("`startupNodes` should contain at least one node.");let e=(0,sl.normalizeNodeOptions)(this.startupNodes),r=(0,sl.getUniqueHostnamesFromOptions)(e);if(r.length===0)return e;let n=await Promise.all(r.map((this.options.useSRVRecords?this.resolveSrv:this.dnsLookup).bind(this))),i=(0,Ir.zipMap)(r,n);return e.map(s=>{let o=i.get(s.host);return o?this.options.useSRVRecords?Object.assign({},s,o):Object.assign({},s,{host:o}):s})}createScanStream(e,{key:r,options:n={}}){return new o_e.default({objectMode:!0,key:r,redis:this,command:e,...n})}createShardedSubscriberGroup(){this.subscriberGroupEmitter=new $T.EventEmitter,this.shardedSubscribers=new m_e.default(this.subscriberGroupEmitter,this.options);let e=r=>{r instanceof By.default&&this.disconnect(!0)};this.subscriberGroupEmitter.on("-node",(r,n)=>{this.emit("-node",r,n),this.refreshSlotsCache(e)}),this.subscriberGroupEmitter.on("subscriberConnectFailed",({delay:r,error:n})=>{this.emit("error",n),setTimeout(()=>{this.refreshSlotsCache(e)},r)}),this.subscriberGroupEmitter.on("moved",()=>{this.refreshSlotsCache(e)}),this.subscriberGroupEmitter.on("-subscriber",()=>{this.emit("-subscriber")}),this.subscriberGroupEmitter.on("+subscriber",()=>{this.emit("+subscriber")}),this.subscriberGroupEmitter.on("nodeError",(r,n)=>{this.emit("nodeError",r,n)}),this.subscriberGroupEmitter.on("subscribersReady",()=>{this.emit("subscribersReady")});for(let r of["smessage","smessageBuffer"])this.subscriberGroupEmitter.on(r,(n,i,s)=>{this.emit(r,n,i,s)})}};(0,c_e.default)(Od,$T.EventEmitter);(0,a_e.addTransactionSupport)(Od.prototype);UT.default=Od});var Hy=h(GT=>{"use strict";Object.defineProperty(GT,"__esModule",{value:!0});var h_e=gt(),y_e=(0,h_e.Debug)("AbstractConnector"),zT=class{constructor(e){this.connecting=!1,this.disconnectTimeout=e}check(e){return!0}disconnect(){if(this.connecting=!1,this.stream){let e=this.stream,r=setTimeout(()=>{y_e("stream %s:%s still open, destroying it",e.remoteAddress,e.remotePort),e.destroy()},this.disconnectTimeout);e.on("close",()=>clearTimeout(r)),e.end()}}};GT.default=zT});var dz=h(HT=>{"use strict";Object.defineProperty(HT,"__esModule",{value:!0});var g_e=require("net"),b_e=require("tls"),v_e=gt(),E_e=Hy(),BT=class extends E_e.default{constructor(e){super(e.disconnectTimeout),this.options=e}connect(e){let{options:r}=this;this.connecting=!0;let n;return"path"in r&&r.path?n={path:r.path}:(n={},"port"in r&&r.port!=null&&(n.port=r.port),"host"in r&&r.host!=null&&(n.host=r.host),"family"in r&&r.family!=null&&(n.family=r.family)),r.tls&&Object.assign(n,r.tls),new Promise((i,s)=>{process.nextTick(()=>{if(!this.connecting){s(new Error(v_e.CONNECTION_CLOSED_ERROR_MSG));return}try{r.tls?this.stream=(0,b_e.connect)(n):this.stream=(0,g_e.createConnection)(n)}catch(o){s(o);return}this.stream.once("error",o=>{this.firstError=o}),i(this.stream)})})}};HT.default=BT});var pz=h(WT=>{"use strict";Object.defineProperty(WT,"__esModule",{value:!0});function S_e(t,e){return(t.host||"127.0.0.1")===(e.host||"127.0.0.1")&&(t.port||26379)===(e.port||26379)}var VT=class{constructor(e){this.cursor=0,this.sentinels=e.slice(0)}next(){let e=this.cursor>=this.sentinels.length;return{done:e,value:e?void 0:this.sentinels[this.cursor++]}}reset(e){e&&this.sentinels.length>1&&this.cursor!==1&&this.sentinels.unshift(...this.sentinels.splice(this.cursor-1)),this.cursor=0}add(e){for(let r=0;r<this.sentinels.length;r++)if(S_e(e,this.sentinels[r]))return!1;return this.sentinels.push(e),!0}toString(){return`${JSON.stringify(this.sentinels)} @${this.cursor}`}};WT.default=VT});var mz=h(Vy=>{"use strict";Object.defineProperty(Vy,"__esModule",{value:!0});Vy.FailoverDetector=void 0;var x_e=gt(),YT=(0,x_e.Debug)("FailoverDetector"),fz="+switch-master",QT=class{constructor(e,r){this.isDisconnected=!1,this.connector=e,this.sentinels=r}cleanup(){this.isDisconnected=!0;for(let e of this.sentinels)e.client.disconnect()}async subscribe(){YT("Starting FailoverDetector");let e=[];for(let r of this.sentinels){let n=r.client.subscribe(fz).catch(i=>{YT("Failed to subscribe to failover messages on sentinel %s:%s (%s)",r.address.host||"127.0.0.1",r.address.port||26739,i.message)});e.push(n),r.client.on("message",i=>{!this.isDisconnected&&i===fz&&this.disconnect()})}await Promise.all(e)}disconnect(){this.isDisconnected=!0,YT("Failover detected, disconnecting"),this.connector.disconnect()}};Vy.FailoverDetector=QT});var Wy=h(jd=>{"use strict";Object.defineProperty(jd,"__esModule",{value:!0});jd.SentinelIterator=void 0;var w_e=require("net"),Cd=gt(),__e=require("tls"),hz=pz();jd.SentinelIterator=hz.default;var I_e=Hy(),T_e=Yi(),k_e=mz(),ol=(0,Cd.Debug)("SentinelConnector"),XT=class extends I_e.default{constructor(e){if(super(e.disconnectTimeout),this.options=e,this.emitter=null,this.failoverDetector=null,!this.options.sentinels.length)throw new Error("Requires at least one sentinel to connect to.");if(!this.options.name)throw new Error("Requires the name of master.");this.sentinelIterator=new hz.default(this.options.sentinels)}check(e){let r=!e.role||this.options.role===e.role;return r||(ol("role invalid, expected %s, but got %s",this.options.role,e.role),this.sentinelIterator.next(),this.sentinelIterator.next(),this.sentinelIterator.reset(!0)),r}disconnect(){super.disconnect(),this.failoverDetector&&this.failoverDetector.cleanup()}connect(e){this.connecting=!0,this.retryAttempts=0;let r,n=async()=>{let i=this.sentinelIterator.next();if(i.done){this.sentinelIterator.reset(!1);let c=typeof this.options.sentinelRetryStrategy=="function"?this.options.sentinelRetryStrategy(++this.retryAttempts):null,l=typeof c!="number"?"All sentinels are unreachable and retry is disabled.":`All sentinels are unreachable. Retrying from scratch after ${c}ms.`;r&&(l+=` Last error: ${r.message}`),ol(l);let u=new Error(l);if(typeof c=="number")return e("error",u),await new Promise(d=>setTimeout(d,c)),n();throw u}let s=null,o=null;try{s=await this.resolve(i.value)}catch(c){o=c}if(!this.connecting)throw new Error(Cd.CONNECTION_CLOSED_ERROR_MSG);let a=i.value.host+":"+i.value.port;if(s)return ol("resolved: %s:%s from sentinel %s",s.host,s.port,a),this.options.enableTLSForSentinelMode&&this.options.tls?(Object.assign(s,this.options.tls),this.stream=(0,__e.connect)(s),this.stream.once("secureConnect",this.initFailoverDetector.bind(this))):(this.stream=(0,w_e.createConnection)(s),this.stream.once("connect",this.initFailoverDetector.bind(this))),this.stream.once("error",c=>{this.firstError=c}),this.stream;{let c=o?"failed to connect to sentinel "+a+" because "+o.message:"connected to sentinel "+a+" successfully, but got an invalid reply: "+s;return ol(c),e("sentinelError",new Error(c)),o&&(r=o),n()}};return n()}async updateSentinels(e){if(!this.options.updateSentinels)return;let r=await e.sentinel("sentinels",this.options.name);Array.isArray(r)&&(r.map(Cd.packObject).forEach(n=>{if((n.flags?n.flags.split(","):[]).indexOf("disconnected")===-1&&n.ip&&n.port){let s=this.sentinelNatResolve(yz(n));this.sentinelIterator.add(s)&&ol("adding sentinel %s:%s",s.host,s.port)}}),ol("Updated internal sentinels: %s",this.sentinelIterator))}async resolveMaster(e){let r=await e.sentinel("get-master-addr-by-name",this.options.name);return await this.updateSentinels(e),this.sentinelNatResolve(Array.isArray(r)?{host:r[0],port:Number(r[1])}:null)}async resolveSlave(e){let r=await e.sentinel("slaves",this.options.name);if(!Array.isArray(r))return null;let n=r.map(Cd.packObject).filter(i=>i.flags&&!i.flags.match(/(disconnected|s_down|o_down)/));return this.sentinelNatResolve(A_e(n,this.options.preferredSlaves))}sentinelNatResolve(e){if(!e||!this.options.natMap)return e;let r=`${e.host}:${e.port}`,n=e;return typeof this.options.natMap=="function"?n=this.options.natMap(r)||e:typeof this.options.natMap=="object"&&(n=this.options.natMap[r]||e),n}connectToSentinel(e,r){return new T_e.default({port:e.port||26379,host:e.host,username:this.options.sentinelUsername||null,password:this.options.sentinelPassword||null,family:e.family||("path"in this.options&&this.options.path?void 0:this.options.family),tls:this.options.sentinelTLS,retryStrategy:null,enableReadyCheck:!1,connectTimeout:this.options.connectTimeout,commandTimeout:this.options.sentinelCommandTimeout,...r})}async resolve(e){let r=this.connectToSentinel(e);r.on("error",R_e);try{return this.options.role==="slave"?await this.resolveSlave(r):await this.resolveMaster(r)}finally{r.disconnect()}}async initFailoverDetector(){var e;if(!this.options.failoverDetector)return;this.sentinelIterator.reset(!0);let r=[];for(;r.length<this.options.sentinelMaxConnections;){let{done:n,value:i}=this.sentinelIterator.next();if(n)break;let s=this.connectToSentinel(i,{lazyConnect:!0,retryStrategy:this.options.sentinelReconnectStrategy});s.on("reconnecting",()=>{var o;(o=this.emitter)===null||o===void 0||o.emit("sentinelReconnecting")}),r.push({address:i,client:s})}this.sentinelIterator.reset(!1),this.failoverDetector&&this.failoverDetector.cleanup(),this.failoverDetector=new k_e.FailoverDetector(this,r),await this.failoverDetector.subscribe(),(e=this.emitter)===null||e===void 0||e.emit("failoverSubscribed")}};jd.default=XT;function A_e(t,e){if(t.length===0)return null;let r;if(typeof e=="function")r=e(t);else if(e!==null&&typeof e=="object"){let n=Array.isArray(e)?e:[e];n.sort((i,s)=>(i.prio||(i.prio=1),s.prio||(s.prio=1),i.prio<s.prio?-1:i.prio>s.prio?1:0));for(let i=0;i<n.length;i++){for(let s=0;s<t.length;s++){let o=t[s];if(o.ip===n[i].ip&&o.port===n[i].port){r=o;break}}if(r)break}}return r||(r=(0,Cd.sample)(t)),yz(r)}function yz(t){return{host:t.ip,port:Number(t.port)}}function R_e(){}});var gz=h(al=>{"use strict";Object.defineProperty(al,"__esModule",{value:!0});al.SentinelConnector=al.StandaloneConnector=void 0;var O_e=dz();al.StandaloneConnector=O_e.default;var C_e=Wy();al.SentinelConnector=C_e.default});var bz=h(ek=>{"use strict";Object.defineProperty(ek,"__esModule",{value:!0});var j_e=ea(),ZT=class extends j_e.AbortError{constructor(e){let r=`Reached the max retries per request limit (which is ${e}). Refer to "maxRetriesPerRequest" option for details.`;super(r),Error.captureStackTrace(this,this.constructor)}get name(){return this.constructor.name}};ek.default=ZT});var vz=h(Yy=>{"use strict";Object.defineProperty(Yy,"__esModule",{value:!0});Yy.MaxRetriesPerRequestError=void 0;var P_e=bz();Yy.MaxRetriesPerRequestError=P_e.default});var Tz=h((j8e,Iz)=>{"use strict";var ok=require("buffer").Buffer,K_e=require("string_decoder").StringDecoder,tk=new K_e,Ez=ea(),D_e=Ez.ReplyError,M_e=Ez.ParserError,Kn=ok.allocUnsafe(32*1024),hr=0,Qy=null,Pd=0,rk=0;function N_e(t){let e=t.buffer.length-1;var r=t.offset,n=0,i=1;for(t.buffer[r]===45&&(i=-1,r++);r<e;){let s=t.buffer[r++];if(s===13)return t.offset=r+1,i*n;n=n*10+(s-48)}}function L_e(t){let e=t.buffer.length-1;var r=t.offset,n=0,i="";for(t.buffer[r]===45&&(i+="-",r++);r<e;){var s=t.buffer[r++];if(s===13)return t.offset=r+1,n!==0&&(i+=n),i;n>429496728?(i+=n*10+(s-48),n=0):s===48&&n===0?i+=0:n=n*10+(s-48)}}function Sz(t){let e=t.offset,r=t.buffer,n=r.length-1;for(var i=e;i<n;)if(r[i++]===13)return t.offset=i+1,t.optionReturnBuffers===!0?t.buffer.slice(e,i-1):t.buffer.toString("utf8",e,i-1)}function xz(t){let e=t.buffer.length-1;for(var r=t.offset,n=0;r<e;){let i=t.buffer[r++];if(i===13)return t.offset=r+1,n;n=n*10+(i-48)}}function q_e(t){return t.optionStringNumbers===!0?L_e(t):N_e(t)}function F_e(t){let e=xz(t);if(e===void 0)return;if(e<0)return null;let r=t.offset+e;if(r+2>t.buffer.length){t.bigStrSize=r+2,t.totalChunkSize=t.buffer.length,t.bufferCache.push(t.buffer);return}let n=t.offset;return t.offset=r+2,t.optionReturnBuffers===!0?t.buffer.slice(n,r):t.buffer.toString("utf8",n,r)}function $_e(t){var e=Sz(t);if(e!==void 0)return t.optionReturnBuffers===!0&&(e=e.toString()),new D_e(e)}function U_e(t,e){let r=new M_e("Protocol error, got "+JSON.stringify(String.fromCharCode(e))+" as reply type byte",JSON.stringify(t.buffer),t.offset);t.buffer=null,t.returnFatalError(r)}function J_e(t){let e=xz(t);if(e===void 0)return;if(e<0)return null;let r=new Array(e);return wz(t,r,0)}function nk(t,e,r){t.arrayCache.push(e),t.arrayPos.push(r)}function ik(t){let e=t.arrayCache.pop();var r=t.arrayPos.pop();if(t.arrayCache.length){let n=ik(t);if(n===void 0){nk(t,e,r);return}e[r++]=n}return wz(t,e,r)}function wz(t,e,r){let n=t.buffer.length;for(;r<e.length;){let i=t.offset;if(t.offset>=n){nk(t,e,r);return}let s=_z(t,t.buffer[t.offset++]);if(s===void 0){t.arrayCache.length||t.bufferCache.length||(t.offset=i),nk(t,e,r);return}e[r]=s,r++}return e}function _z(t,e){switch(e){case 36:return F_e(t);case 43:return Sz(t);case 42:return J_e(t);case 58:return q_e(t);case 45:return $_e(t);default:return U_e(t,e)}}function z_e(){if(Kn.length>50*1024)if(Pd===1||rk>Pd*2){let t=Math.floor(Kn.length/10),e=t<hr?hr:t;hr=0,Kn=Kn.slice(e,Kn.length)}else rk++,Pd--;else clearInterval(Qy),Pd=0,rk=0,Qy=null}function G_e(t){if(Kn.length<t+hr){let e=t>78643200?2:3;hr>1024*1024*111&&(hr=1024*1024*50),Kn=ok.allocUnsafe(t*e+hr),hr=0,Pd++,Qy===null&&(Qy=setInterval(z_e,50))}}function B_e(t){let e=t.bufferCache,r=t.offset;var n=e.length,i=t.bigStrSize-t.totalChunkSize;if(t.offset=i,i<=2){if(n===2)return e[0].toString("utf8",r,e[0].length+i-2);n--,i=e[e.length-2].length+i}for(var s=tk.write(e[0].slice(r)),o=1;o<n-1;o++)s+=tk.write(e[o]);return s+=tk.end(e[o].slice(0,i-2)),s}function H_e(t){let e=t.bufferCache,r=t.offset,n=t.bigStrSize-r-2;var i=e.length,s=t.bigStrSize-t.totalChunkSize;if(t.offset=s,s<=2){if(i===2)return e[0].slice(r,e[0].length+s-2);i--,s=e[e.length-2].length+s}G_e(n);let o=hr;e[0].copy(Kn,o,r,e[0].length),hr+=e[0].length-r;for(var a=1;a<i-1;a++)e[a].copy(Kn,hr),hr+=e[a].length;return e[a].copy(Kn,hr,0,s-2),hr+=s-2,Kn.slice(o,hr)}var sk=class{constructor(e){if(!e)throw new TypeError("Options are mandatory.");if(typeof e.returnError!="function"||typeof e.returnReply!="function")throw new TypeError("The returnReply and returnError options have to be functions.");this.setReturnBuffers(!!e.returnBuffers),this.setStringNumbers(!!e.stringNumbers),this.returnError=e.returnError,this.returnFatalError=e.returnFatalError||e.returnError,this.returnReply=e.returnReply,this.reset()}reset(){this.offset=0,this.buffer=null,this.bigStrSize=0,this.totalChunkSize=0,this.bufferCache=[],this.arrayCache=[],this.arrayPos=[]}setReturnBuffers(e){if(typeof e!="boolean")throw new TypeError("The returnBuffers argument has to be a boolean");this.optionReturnBuffers=e}setStringNumbers(e){if(typeof e!="boolean")throw new TypeError("The stringNumbers argument has to be a boolean");this.optionStringNumbers=e}execute(e){if(this.buffer===null)this.buffer=e,this.offset=0;else if(this.bigStrSize===0){let n=this.buffer.length,i=n-this.offset,s=ok.allocUnsafe(i+e.length);if(this.buffer.copy(s,0,this.offset,n),e.copy(s,i,0,e.length),this.buffer=s,this.offset=0,this.arrayCache.length){let o=ik(this);if(o===void 0)return;this.returnReply(o)}}else if(this.totalChunkSize+e.length>=this.bigStrSize){this.bufferCache.push(e);var r=this.optionReturnBuffers?H_e(this):B_e(this);if(this.bigStrSize=0,this.bufferCache=[],this.buffer=e,this.arrayCache.length&&(this.arrayCache[0][this.arrayPos[0]++]=r,r=ik(this),r===void 0))return;this.returnReply(r)}else{this.bufferCache.push(e),this.totalChunkSize+=e.length;return}for(;this.offset<this.buffer.length;){let n=this.offset,i=this.buffer[this.offset++],s=_z(this,i);if(s===void 0){this.arrayCache.length||this.bufferCache.length||(this.offset=n);return}i===45?this.returnError(s):this.returnReply(s)}this.buffer=null}};Iz.exports=sk});var Az=h((P8e,kz)=>{"use strict";kz.exports=Tz()});var Rz=h(lk=>{"use strict";Object.defineProperty(lk,"__esModule",{value:!0});var ck=class{constructor(){this.set={subscribe:{},psubscribe:{},ssubscribe:{}}}add(e,r){this.set[ak(e)][r]=!0}del(e,r){delete this.set[ak(e)][r]}channels(e){return Object.keys(this.set[ak(e)])}isEmpty(){return this.channels("subscribe").length===0&&this.channels("psubscribe").length===0&&this.channels("ssubscribe").length===0}};lk.default=ck;function ak(t){return t==="unsubscribe"?"subscribe":t==="punsubscribe"?"psubscribe":t==="sunsubscribe"?"ssubscribe":t}});var Pz=h(dk=>{"use strict";Object.defineProperty(dk,"__esModule",{value:!0});var Oz=Vi(),V_e=gt(),W_e=Az(),Y_e=Rz(),Q_e=(0,V_e.Debug)("dataHandler"),uk=class{constructor(e,r){this.redis=e;let n=new W_e({stringNumbers:r.stringNumbers,returnBuffers:!0,returnError:i=>{this.returnError(i)},returnFatalError:i=>{this.returnFatalError(i)},returnReply:i=>{this.returnReply(i)}});e.stream.prependListener("data",i=>{n.execute(i)}),e.stream.resume()}returnFatalError(e){e.message+=". Please report this.",this.redis.recoverFromFatalError(e,e,{offlineQueue:!1})}returnError(e){let r=this.shiftCommand(e);if(r){if(e.command={name:r.command.name,args:r.command.args},r.command.name=="ssubscribe"&&e.message.includes("MOVED")){this.redis.emit("moved");return}this.redis.handleReconnection(e,r)}}returnReply(e){if(this.handleMonitorReply(e)||this.handleSubscriberReply(e))return;let r=this.shiftCommand(e);r&&(Oz.default.checkFlag("ENTER_SUBSCRIBER_MODE",r.command.name)?(this.redis.condition.subscriber=new Y_e.default,this.redis.condition.subscriber.add(r.command.name,e[1].toString()),Cz(r.command,e[2])||this.redis.commandQueue.unshift(r)):Oz.default.checkFlag("EXIT_SUBSCRIBER_MODE",r.command.name)?jz(r.command,e[2])||this.redis.commandQueue.unshift(r):r.command.resolve(e))}handleSubscriberReply(e){if(!this.redis.condition.subscriber)return!1;let r=Array.isArray(e)?e[0].toString():null;switch(Q_e('receive reply "%s" in subscriber mode',r),r){case"message":this.redis.listeners("message").length>0&&this.redis.emit("message",e[1].toString(),e[2]?e[2].toString():""),this.redis.emit("messageBuffer",e[1],e[2]);break;case"pmessage":{let n=e[1].toString();this.redis.listeners("pmessage").length>0&&this.redis.emit("pmessage",n,e[2].toString(),e[3].toString()),this.redis.emit("pmessageBuffer",n,e[2],e[3]);break}case"smessage":{this.redis.listeners("smessage").length>0&&this.redis.emit("smessage",e[1].toString(),e[2]?e[2].toString():""),this.redis.emit("smessageBuffer",e[1],e[2]);break}case"ssubscribe":case"subscribe":case"psubscribe":{let n=e[1].toString();this.redis.condition.subscriber.add(r,n);let i=this.shiftCommand(e);if(!i)return;Cz(i.command,e[2])||this.redis.commandQueue.unshift(i);break}case"sunsubscribe":case"unsubscribe":case"punsubscribe":{let n=e[1]?e[1].toString():null;n&&this.redis.condition.subscriber.del(r,n);let i=e[2];Number(i)===0&&(this.redis.condition.subscriber=!1);let s=this.shiftCommand(e);if(!s)return;jz(s.command,i)||this.redis.commandQueue.unshift(s);break}default:{let n=this.shiftCommand(e);if(!n)return;n.command.resolve(e)}}return!0}handleMonitorReply(e){if(this.redis.status!=="monitoring")return!1;let r=e.toString();if(r==="OK")return!1;let n=r.indexOf(" "),i=r.slice(0,n),s=r.indexOf('"'),o=r.slice(s+1,-1).split('" "').map(c=>c.replace(/\\"/g,'"')),a=r.slice(n+2,s-2).split(" ");return this.redis.emit("monitor",i,o,a[1],a[0]),!0}shiftCommand(e){let r=this.redis.commandQueue.shift();if(!r){let n="Command queue state error. If you can reproduce this, please report it.",i=new Error(n+(e instanceof Error?` Last error: ${e.message}`:` Last reply: ${e.toString()}`));return this.redis.emit("error",i),null}return r}};dk.default=uk;var Gs=new WeakMap;function Cz(t,e){let r=Gs.has(t)?Gs.get(t):t.args.length;return r-=1,r<=0?(t.resolve(e),Gs.delete(t),!0):(Gs.set(t,r),!1)}function jz(t,e){let r=Gs.has(t)?Gs.get(t):t.args.length;return r===0?Number(e)===0?(Gs.delete(t),t.resolve(e),!0):!1:(r-=1,r<=0?(t.resolve(e),!0):(Gs.set(t,r),!1))}});var Kz=h(mn=>{"use strict";Object.defineProperty(mn,"__esModule",{value:!0});mn.readyHandler=mn.errorHandler=mn.closeHandler=mn.connectHandler=void 0;var X_e=ea(),Z_e=Vi(),eIe=vz(),pi=gt(),tIe=Pz(),Ht=(0,pi.Debug)("connection");function rIe(t){return function(){var e;t.setStatus("connect"),t.resetCommandQueue();let r=!1,{connectionEpoch:n}=t;t.condition.auth&&t.auth(t.condition.auth,function(s){n===t.connectionEpoch&&s&&(s.message.indexOf("no password is set")!==-1?console.warn("[WARN] Redis server does not require a password, but a password was supplied."):s.message.indexOf("without any password configured for the default user")!==-1?console.warn("[WARN] This Redis server's `default` user does not require a password, but a password was supplied"):s.message.indexOf("wrong number of arguments for 'auth' command")!==-1?console.warn(`[ERROR] The server returned "wrong number of arguments for 'auth' command". You are probably passing both username and password to Redis version 5 or below. You should only pass the 'password' option for Redis version 5 and under.`):(r=!0,t.recoverFromFatalError(s,s)))}),t.condition.select&&t.select(t.condition.select).catch(s=>{t.silentEmit("error",s)}),new tIe.default(t,{stringNumbers:t.options.stringNumbers});let i=[];t.options.connectionName&&(Ht("set the connection name [%s]",t.options.connectionName),i.push(t.client("setname",t.options.connectionName).catch(pi.noop))),t.options.disableClientInfo||(Ht("set the client info"),i.push((0,pi.getPackageMeta)().then(s=>t.client("SETINFO","LIB-VER",s.version).catch(pi.noop)).catch(pi.noop)),i.push(t.client("SETINFO","LIB-NAME",!((e=t.options)===null||e===void 0)&&e.clientInfoTag?`ioredis(${t.options.clientInfoTag})`:"ioredis").catch(pi.noop))),Promise.all(i).catch(pi.noop).finally(()=>{t.options.enableReadyCheck||mn.readyHandler(t)(),t.options.enableReadyCheck&&t._readyCheck(function(s,o){n===t.connectionEpoch&&(s?r||t.recoverFromFatalError(new Error("Ready check failed: "+s.message),s):t.connector.check(o)?mn.readyHandler(t)():t.disconnect(!0))})})}}mn.connectHandler=rIe;function pk(t){let e=new X_e.AbortError("Command aborted due to connection close");return e.command={name:t.name,args:t.args},e}function nIe(t){var e;let r=0;for(let n=0;n<t.length;){let i=(e=t.peekAt(n))===null||e===void 0?void 0:e.command,s=i.pipelineIndex;if((s===void 0||s===0)&&(r=0),s!==void 0&&s!==r++){t.remove(n,1),i.reject(pk(i));continue}n++}}function iIe(t){var e;for(let r=0;r<t.length;){let n=(e=t.peekAt(r))===null||e===void 0?void 0:e.command;if(n.name==="multi")break;if(n.name==="exec"){t.remove(r,1),n.reject(pk(n));break}n.inTransaction?(t.remove(r,1),n.reject(pk(n))):r++}}function sIe(t){return function(){let r=t.status;if(t.setStatus("close"),t.commandQueue.length&&nIe(t.commandQueue),t.offlineQueue.length&&iIe(t.offlineQueue),r==="ready"&&(t.prevCondition||(t.prevCondition=t.condition),t.commandQueue.length&&(t.prevCommandQueue=t.commandQueue)),t.manuallyClosing)return t.manuallyClosing=!1,Ht("skip reconnecting since the connection is manually closed."),e();if(typeof t.options.retryStrategy!="function")return Ht("skip reconnecting because `retryStrategy` is not a function"),e();let n=t.options.retryStrategy(++t.retryAttempts);if(typeof n!="number")return Ht("skip reconnecting because `retryStrategy` doesn't return a number"),e();Ht("reconnect in %sms",n),t.setStatus("reconnecting",n),t.reconnectTimeout=setTimeout(function(){t.reconnectTimeout=null,t.connect().catch(pi.noop)},n);let{maxRetriesPerRequest:i}=t.options;typeof i=="number"&&(i<0?Ht("maxRetriesPerRequest is negative, ignoring..."):t.retryAttempts%(i+1)===0&&(Ht("reach maxRetriesPerRequest limitation, flushing command queue..."),t.flushQueue(new eIe.MaxRetriesPerRequestError(i))))};function e(){t.setStatus("end"),t.flushQueue(new Error(pi.CONNECTION_CLOSED_ERROR_MSG))}}mn.closeHandler=sIe;function oIe(t){return function(e){Ht("error: %s",e),t.silentEmit("error",e)}}mn.errorHandler=oIe;function aIe(t){return function(){if(t.setStatus("ready"),t.retryAttempts=0,t.options.monitor){t.call("monitor").then(()=>t.setStatus("monitoring"),n=>t.emit("error",n));let{sendCommand:r}=t;t.sendCommand=function(n){return Z_e.default.checkFlag("VALID_IN_MONITOR_MODE",n.name)?r.call(t,n):(n.reject(new Error("Connection is in monitoring mode, can't process commands.")),n.promise)},t.once("close",function(){delete t.sendCommand});return}let e=t.prevCondition?t.prevCondition.select:t.condition.select;if(t.options.readOnly&&(Ht("set the connection to readonly mode"),t.readonly().catch(pi.noop)),t.prevCondition){let r=t.prevCondition;if(t.prevCondition=null,r.subscriber&&t.options.autoResubscribe){t.condition.select!==e&&(Ht("connect to db [%d]",e),t.select(e));let n=r.subscriber.channels("subscribe");n.length&&(Ht("subscribe %d channels",n.length),t.subscribe(n));let i=r.subscriber.channels("psubscribe");i.length&&(Ht("psubscribe %d channels",i.length),t.psubscribe(i));let s=r.subscriber.channels("ssubscribe");if(s.length){Ht("ssubscribe %s",s.length);for(let o of s)t.ssubscribe(o)}}}if(t.prevCommandQueue)if(t.options.autoResendUnfulfilledCommands)for(Ht("resend %d unfulfilled commands",t.prevCommandQueue.length);t.prevCommandQueue.length>0;){let r=t.prevCommandQueue.shift();r.select!==t.condition.select&&r.command.name!=="select"&&t.select(r.select),t.sendCommand(r.command,r.stream)}else t.prevCommandQueue=null;if(t.offlineQueue.length){Ht("send %d commands in offline queue",t.offlineQueue.length);let r=t.offlineQueue;for(t.resetOfflineQueue();r.length>0;){let n=r.shift();n.select!==t.condition.select&&n.command.name!=="select"&&t.select(n.select),t.sendCommand(n.command,n.stream)}}t.condition.select!==e&&(Ht("connect to db [%d]",e),t.select(e))}}mn.readyHandler=aIe});var Dz=h(Xy=>{"use strict";Object.defineProperty(Xy,"__esModule",{value:!0});Xy.DEFAULT_REDIS_OPTIONS=void 0;Xy.DEFAULT_REDIS_OPTIONS={port:6379,host:"localhost",family:0,connectTimeout:1e4,disconnectTimeout:2e3,retryStrategy:function(t){return Math.min(t*50,2e3)},keepAlive:0,noDelay:!0,connectionName:null,disableClientInfo:!1,clientInfoTag:void 0,sentinels:null,name:null,role:"master",sentinelRetryStrategy:function(t){return Math.min(t*10,1e3)},sentinelReconnectStrategy:function(){return 6e4},natMap:null,enableTLSForSentinelMode:!1,updateSentinels:!0,failoverDetector:!1,username:null,password:null,db:0,enableOfflineQueue:!0,enableReadyCheck:!0,autoResubscribe:!0,autoResendUnfulfilledCommands:!0,lazyConnect:!1,keyPrefix:"",reconnectOnError:null,readOnly:!1,stringNumbers:!1,maxRetriesPerRequest:20,maxLoadingRetryTime:1e4,enableAutoPipelining:!1,autoPipeliningIgnoredCommands:[],sentinelMaxConnections:10,blockingTimeoutGrace:100}});var Yi=h(hk=>{"use strict";Object.defineProperty(hk,"__esModule",{value:!0});var Mz=Zo(),Lz=require("events"),fk=Us(),cIe=JT(),ra=Vi(),lIe=gz(),uIe=Wy(),Bs=Kz(),qz=Dz(),dIe=Ny(),pIe=kT(),na=gt(),mk=_T(),fIe=RT(),mIe=Fy(),Hs=Vh(),Nz=zy(),Vs=(0,na.Debug)("redis"),Ws=class t extends mIe.default{constructor(e,r,n){if(super(),this.status="wait",this.isCluster=!1,this.reconnectTimeout=null,this.connectionEpoch=0,this.retryAttempts=0,this.manuallyClosing=!1,this._autoPipelines=new Map,this._runningAutoPipelines=new Set,this.parseOptions(e,r,n),Lz.EventEmitter.call(this),this.resetCommandQueue(),this.resetOfflineQueue(),this.options.Connector)this.connector=new this.options.Connector(this.options);else if(this.options.sentinels){let i=new uIe.default(this.options);i.emitter=this,this.connector=i}else this.connector=new lIe.StandaloneConnector(this.options);this.options.scripts&&Object.entries(this.options.scripts).forEach(([i,s])=>{this.defineCommand(i,s)}),this.options.lazyConnect?this.setStatus("wait"):this.connect().catch(Hs.noop)}static createClient(...e){return new t(...e)}get autoPipelineQueueSize(){let e=0;for(let r of this._autoPipelines.values())e+=r.length;return e}connect(e){let r=(0,mk.traceConnect)(()=>this._connect(),()=>{let{address:n,port:i}=this._getServerAddress();return{serverAddress:n,serverPort:i,connectionEpoch:this.connectionEpoch}});return(0,fk.default)(r,e)}_connect(){return new Promise((e,r)=>{if(this.status==="connecting"||this.status==="connect"||this.status==="ready"){r(new Error("Redis is already connecting/connected"));return}this.connectionEpoch+=1,this.setStatus("connecting");let{options:n}=this;this.condition={select:n.db,auth:n.username?[n.username,n.password]:n.password,subscriber:!1};let i=this;(0,fk.default)(this.connector.connect(function(s,o){i.silentEmit(s,o)}),function(s,o){if(s){i.flushQueue(s),i.silentEmit("error",s),r(s),i.setStatus("end");return}let a=n.tls?"secureConnect":"connect";if("sentinels"in n&&n.sentinels&&!n.enableTLSForSentinelMode&&(a="connect"),i.stream=o,n.noDelay&&o.setNoDelay(!0),typeof n.keepAlive=="number"&&(o.connecting?o.once(a,()=>{o.setKeepAlive(!0,n.keepAlive)}):o.setKeepAlive(!0,n.keepAlive)),o.connecting){if(o.once(a,Bs.connectHandler(i)),n.connectTimeout){let u=!1;o.setTimeout(n.connectTimeout,function(){if(u)return;o.setTimeout(0),o.destroy();let d=new Error("connect ETIMEDOUT");d.errorno="ETIMEDOUT",d.code="ETIMEDOUT",d.syscall="connect",Bs.errorHandler(i)(d)}),o.once(a,function(){u=!0,o.setTimeout(0)})}}else if(o.destroyed){let u=i.connector.firstError;u&&process.nextTick(()=>{Bs.errorHandler(i)(u)}),process.nextTick(Bs.closeHandler(i))}else process.nextTick(Bs.connectHandler(i));o.destroyed||(o.once("error",Bs.errorHandler(i)),o.once("close",Bs.closeHandler(i)));let c=function(){i.removeListener("close",l),e()};var l=function(){i.removeListener("ready",c),r(new Error(na.CONNECTION_CLOSED_ERROR_MSG))};i.once("ready",c),i.once("close",l)})})}disconnect(e=!1){e||(this.manuallyClosing=!0),this.reconnectTimeout&&!e&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.status==="wait"?Bs.closeHandler(this)():this.connector.disconnect()}end(){this.disconnect()}duplicate(e){return new t({...this.options,...e})}get mode(){var e;return this.options.monitor?"monitor":!((e=this.condition)===null||e===void 0)&&e.subscriber?"subscriber":"normal"}monitor(e){let r=this.duplicate({monitor:!0,lazyConnect:!1});return(0,fk.default)(new Promise(function(n,i){r.once("error",i),r.once("monitoring",function(){n(r)})}),e)}sendCommand(e,r){var n,i;if(this.status==="wait"&&this.connect().catch(Hs.noop),this.status==="end")return e.reject(new Error(na.CONNECTION_CLOSED_ERROR_MSG)),e.promise;if(!((n=this.condition)===null||n===void 0)&&n.subscriber&&!ra.default.checkFlag("VALID_IN_SUBSCRIBER_MODE",e.name))return e.reject(new Error("Connection in subscriber mode, only subscriber commands may be used")),e.promise;typeof this.options.commandTimeout=="number"&&e.setTimeout(this.options.commandTimeout);let s=this.getBlockingTimeoutInMs(e),o=this.status==="ready"||!r&&this.status==="connect"&&(0,Mz.exists)(e.name,{caseInsensitive:!0})&&((0,Mz.hasFlag)(e.name,"loading",{nameCaseInsensitive:!0})||ra.default.checkFlag("HANDSHAKE_COMMANDS",e.name));if(this.stream&&this.stream.writable?this.stream._writableState&&this.stream._writableState.ended&&(o=!1):o=!1,o)Vs.enabled&&Vs("write command[%s]: %d -> %s(%o)",this._getDescription(),(i=this.condition)===null||i===void 0?void 0:i.select,e.name,e.args),r?"isPipeline"in r&&r.isPipeline?r.write(e.toWritable(r.destination.redis.stream)):r.write(e.toWritable(r)):this.stream.write(e.toWritable(this.stream)),this.commandQueue.push({command:e,stream:r,select:this.condition.select}),s!==void 0&&e.setBlockingTimeout(s),ra.default.checkFlag("WILL_DISCONNECT",e.name)&&(this.manuallyClosing=!0),this.options.socketTimeout!==void 0&&this.socketTimeoutTimer===void 0&&this.setSocketTimeout();else{if(!this.options.enableOfflineQueue)return e.reject(new Error("Stream isn't writeable and enableOfflineQueue options is false")),e.promise;if(e.name==="quit"&&this.offlineQueue.length===0)return this.disconnect(),e.resolve(Buffer.from("OK")),e.promise;if(Vs.enabled&&Vs("queue command[%s]: %d -> %s(%o)",this._getDescription(),this.condition.select,e.name,e.args),this.offlineQueue.push({command:e,stream:r,select:this.condition.select}),ra.default.checkFlag("BLOCKING_COMMANDS",e.name)){let a=this.getConfiguredBlockingTimeout();a!==void 0&&e.setBlockingTimeout(a)}}if(e.name==="select"&&(0,na.isInt)(e.args[0])){let a=parseInt(e.args[0],10);this.condition.select!==a&&(this.condition.select=a,this.emit("select",a),Vs("switch to db [%d]",this.condition.select))}return!o||e.isTraced?e.promise:(e.isTraced=!0,(0,mk.traceCommand)(()=>e.promise,()=>this._buildCommandContext(e)))}getBlockingTimeoutInMs(e){var r;if(!ra.default.checkFlag("BLOCKING_COMMANDS",e.name))return;let n=this.getConfiguredBlockingTimeout();if(n===void 0)return;let i=e.extractBlockingTimeout();if(typeof i=="number")return i>0?i+((r=this.options.blockingTimeoutGrace)!==null&&r!==void 0?r:qz.DEFAULT_REDIS_OPTIONS.blockingTimeoutGrace):n;if(i===null)return n}getConfiguredBlockingTimeout(){if(typeof this.options.blockingTimeout=="number"&&this.options.blockingTimeout>0)return this.options.blockingTimeout}setSocketTimeout(){this.socketTimeoutTimer=setTimeout(()=>{this.stream.destroy(new Error(`Socket timeout. Expecting data, but didn't receive any in ${this.options.socketTimeout}ms.`)),this.socketTimeoutTimer=void 0},this.options.socketTimeout),this.stream.once("data",()=>{clearTimeout(this.socketTimeoutTimer),this.socketTimeoutTimer=void 0,this.commandQueue.length!==0&&this.setSocketTimeout()})}scanStream(e){return this.createScanStream("scan",{options:e})}scanBufferStream(e){return this.createScanStream("scanBuffer",{options:e})}sscanStream(e,r){return this.createScanStream("sscan",{key:e,options:r})}sscanBufferStream(e,r){return this.createScanStream("sscanBuffer",{key:e,options:r})}hscanStream(e,r){return this.createScanStream("hscan",{key:e,options:r})}hscanBufferStream(e,r){return this.createScanStream("hscanBuffer",{key:e,options:r})}zscanStream(e,r){return this.createScanStream("zscan",{key:e,options:r})}zscanBufferStream(e,r){return this.createScanStream("zscanBuffer",{key:e,options:r})}silentEmit(e,r){let n;if(!(e==="error"&&(n=r,this.status==="end"||this.manuallyClosing&&n instanceof Error&&(n.message===na.CONNECTION_CLOSED_ERROR_MSG||n.syscall==="connect"||n.syscall==="read"))))return this.listeners(e).length>0?this.emit.apply(this,arguments):(n&&n instanceof Error&&console.error("[ioredis] Unhandled error event:",n.stack),!1)}recoverFromFatalError(e,r,n){this.flushQueue(r,n),this.silentEmit("error",r),this.disconnect(!0)}handleReconnection(e,r){var n;let i=!1;switch(this.options.reconnectOnError&&!ra.default.checkFlag("IGNORE_RECONNECT_ON_ERROR",r.command.name)&&(i=this.options.reconnectOnError(e)),i){case 1:case!0:this.status!=="reconnecting"&&this.disconnect(!0),r.command.reject(e);break;case 2:this.status!=="reconnecting"&&this.disconnect(!0),((n=this.condition)===null||n===void 0?void 0:n.select)!==r.select&&r.command.name!=="select"&&this.select(r.select),this.sendCommand(r.command);break;default:r.command.reject(e)}}_getServerAddress(){return"path"in this.options&&this.options.path?{address:this.options.path,port:void 0}:{address:"host"in this.options&&this.options.host||"localhost",port:"port"in this.options&&this.options.port||6379}}_buildCommandContext(e){var r,n,i;let{address:s,port:o}=this._getServerAddress();return{command:e.name,args:(0,mk.sanitizeArgs)(e.name,e.args),database:(i=(n=(r=this.condition)===null||r===void 0?void 0:r.select)!==null&&n!==void 0?n:this.options.db)!==null&&i!==void 0?i:0,serverAddress:s,serverPort:o}}_buildBatchContext(e){var r,n,i;let{address:s,port:o}=this._getServerAddress();return{batchMode:"MULTI",batchSize:e,database:(i=(n=(r=this.condition)===null||r===void 0?void 0:r.select)!==null&&n!==void 0?n:this.options.db)!==null&&i!==void 0?i:0,serverAddress:s,serverPort:o}}_getDescription(){let e;return"path"in this.options&&this.options.path?e=this.options.path:this.stream&&this.stream.remoteAddress&&this.stream.remotePort?e=this.stream.remoteAddress+":"+this.stream.remotePort:"host"in this.options&&this.options.host?e=this.options.host+":"+this.options.port:e="",this.options.connectionName&&(e+=` (${this.options.connectionName})`),e}resetCommandQueue(){this.commandQueue=new Nz}resetOfflineQueue(){this.offlineQueue=new Nz}parseOptions(...e){let r={},n=!1;for(let i=0;i<e.length;++i){let s=e[i];if(!(s===null||typeof s>"u"))if(typeof s=="object")(0,Hs.defaults)(r,s);else if(typeof s=="string")(0,Hs.defaults)(r,(0,na.parseURL)(s)),s.startsWith("rediss://")&&(n=!0);else if(typeof s=="number")r.port=s;else throw new Error("Invalid argument "+s)}n&&(0,Hs.defaults)(r,{tls:!0}),(0,Hs.defaults)(r,t.defaultOptions),typeof r.port=="string"&&(r.port=parseInt(r.port,10)),typeof r.db=="string"&&(r.db=parseInt(r.db,10)),this.options=(0,na.resolveTLSProfile)(r)}setStatus(e,r){Vs.enabled&&Vs("status[%s]: %s -> %s",this._getDescription(),this.status||"[empty]",e),this.status=e,process.nextTick(this.emit.bind(this,e,r))}createScanStream(e,{key:r,options:n={}}){return new dIe.default({objectMode:!0,key:r,redis:this,command:e,...n})}flushQueue(e,r){r=(0,Hs.defaults)({},r,{offlineQueue:!0,commandQueue:!0});let n;if(r.offlineQueue)for(;n=this.offlineQueue.shift();)n.command.reject(e);if(r.commandQueue&&this.commandQueue.length>0)for(this.stream&&this.stream.removeAllListeners("data");n=this.commandQueue.shift();)n.command.reject(e)}_readyCheck(e){let r=this;this.info(function(n,i){if(n)return n.message&&n.message.includes("NOPERM")?(console.warn(`Skipping the ready check because INFO command fails: "${n.message}". You can disable ready check with "enableReadyCheck". More: https://github.com/luin/ioredis/wiki/Disable-ready-check.`),e(null,{})):e(n);if(typeof i!="string")return e(null,i);let s={},o=i.split(`\r
|
||
`);for(let a=0;a<o.length;++a){let[c,...l]=o[a].split(":"),u=l.join(":");u&&(s[c]=u)}if(!s.loading||s.loading==="0")e(null,s);else{let a=(s.loading_eta_seconds||1)*1e3,c=r.options.maxLoadingRetryTime&&r.options.maxLoadingRetryTime<a?r.options.maxLoadingRetryTime:a;Vs("Redis server still loading, trying again in "+c+"ms"),setTimeout(function(){r._readyCheck(e)},c)}}).catch(Hs.noop)}};Ws.Cluster=cIe.default;Ws.Command=ra.default;Ws.defaultOptions=qz.DEFAULT_REDIS_OPTIONS;(0,fIe.default)(Ws,Lz.EventEmitter);(0,pIe.addTransactionSupport)(Ws.prototype);hk.default=Ws});var Uz=h((ze,$z)=>{"use strict";Object.defineProperty(ze,"__esModule",{value:!0});ze.print=ze.ReplyError=ze.SentinelIterator=ze.SentinelConnector=ze.AbstractConnector=ze.Pipeline=ze.ScanStream=ze.Command=ze.Cluster=ze.Redis=ze.default=void 0;ze=$z.exports=Yi().default;var hIe=Yi();Object.defineProperty(ze,"default",{enumerable:!0,get:function(){return hIe.default}});var yIe=Yi();Object.defineProperty(ze,"Redis",{enumerable:!0,get:function(){return yIe.default}});var gIe=JT();Object.defineProperty(ze,"Cluster",{enumerable:!0,get:function(){return gIe.default}});var bIe=Vi();Object.defineProperty(ze,"Command",{enumerable:!0,get:function(){return bIe.default}});var vIe=Ny();Object.defineProperty(ze,"ScanStream",{enumerable:!0,get:function(){return vIe.default}});var EIe=ST();Object.defineProperty(ze,"Pipeline",{enumerable:!0,get:function(){return EIe.default}});var SIe=Hy();Object.defineProperty(ze,"AbstractConnector",{enumerable:!0,get:function(){return SIe.default}});var Fz=Wy();Object.defineProperty(ze,"SentinelConnector",{enumerable:!0,get:function(){return Fz.default}});Object.defineProperty(ze,"SentinelIterator",{enumerable:!0,get:function(){return Fz.SentinelIterator}});ze.ReplyError=ea().ReplyError;Object.defineProperty(ze,"Promise",{get(){return console.warn("ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used."),Promise},set(t){console.warn("ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.")}});function xIe(t,e){console.log(t?"Error: "+t:"Reply: "+e)}ze.print=xIe});var Jz=h(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.addDelayedJob=void 0;var wIe=`--[[
|
||
Adds a delayed job to the queue by doing the following:
|
||
- Increases the job counter if needed.
|
||
- Creates a new job key with the job data.
|
||
- computes timestamp.
|
||
- adds to delayed zset.
|
||
- Emits a global event 'delayed' if the job is delayed.
|
||
Input:
|
||
KEYS[1] 'marker',
|
||
KEYS[2] 'meta'
|
||
KEYS[3] 'id'
|
||
KEYS[4] 'delayed'
|
||
KEYS[5] 'completed'
|
||
KEYS[6] events stream key
|
||
ARGV[1] msgpacked arguments array
|
||
[1] key prefix,
|
||
[2] custom id (use custom instead of one generated automatically)
|
||
[3] name
|
||
[4] timestamp
|
||
[5] parentKey?
|
||
[6] parent dependencies key.
|
||
[7] parent? {id, queueKey}
|
||
[8] repeat job key
|
||
[9] deduplication key
|
||
ARGV[2] Json stringified job data
|
||
ARGV[3] msgpacked options
|
||
Output:
|
||
jobId - OK
|
||
-5 - Missing parent key
|
||
]]
|
||
local metaKey = KEYS[2]
|
||
local idKey = KEYS[3]
|
||
local delayedKey = KEYS[4]
|
||
local completedKey = KEYS[5]
|
||
local eventsKey = KEYS[6]
|
||
local jobId
|
||
local jobIdKey
|
||
local rcall = redis.call
|
||
local args = cmsgpack.unpack(ARGV[1])
|
||
local data = ARGV[2]
|
||
local parentKey = args[5]
|
||
local parent = args[7]
|
||
local repeatJobKey = args[8]
|
||
local deduplicationKey = args[9]
|
||
local parentData
|
||
-- Includes
|
||
--[[
|
||
Adds a delayed job to the queue by doing the following:
|
||
- Creates a new job key with the job data.
|
||
- adds to delayed zset.
|
||
- Emits a global event 'delayed' if the job is delayed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Bake in the job id first 12 bits into the timestamp
|
||
to guarantee correct execution order of delayed jobs
|
||
(up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
|
||
WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
|
||
]]
|
||
local function getDelayedScore(delayedKey, timestamp, delay)
|
||
local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
|
||
local minScore = delayedTimestamp * 0x1000
|
||
local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
|
||
local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
|
||
minScore, "WITHSCORES","LIMIT", 0, 1)
|
||
if #result then
|
||
local currentMaxScore = tonumber(result[2])
|
||
if currentMaxScore ~= nil then
|
||
if currentMaxScore >= maxScore then
|
||
return maxScore, delayedTimestamp
|
||
else
|
||
return currentMaxScore + 1, delayedTimestamp
|
||
end
|
||
end
|
||
end
|
||
return minScore, delayedTimestamp
|
||
end
|
||
local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
|
||
maxEvents, markerKey, delay)
|
||
local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
|
||
rcall("ZADD", delayedKey, score, jobId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
|
||
"jobId", jobId, "delay", delayedTimestamp)
|
||
-- mark that a delayed job is available
|
||
addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
end
|
||
--[[
|
||
Function to debounce a job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to deduplicate a job.
|
||
]]
|
||
--[[
|
||
Function to set the deduplication key for a job.
|
||
Uses TTL from deduplication opts if provided.
|
||
]]
|
||
local function setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
local ttl = deduplicationOpts and deduplicationOpts['ttl']
|
||
if ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||
else
|
||
rcall('SET', deduplicationKey, jobId)
|
||
end
|
||
end
|
||
--[[
|
||
Function to store a deduplicated next job if the existing job is active
|
||
and keepLastIfActive is set. When the active job finishes, the stored
|
||
proto-job is used to create a real job in the queue.
|
||
Returns true if the proto-job was stored, false otherwise.
|
||
]]
|
||
--[[
|
||
Function to check if an item belongs to a list.
|
||
]]
|
||
local function checkItemInList(list, item)
|
||
for _, v in pairs(list) do
|
||
if v == item then
|
||
return 1
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
local function storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationOpts['keepLastIfActive'] and currentDebounceJobId then
|
||
local activeKey = prefix .. "active"
|
||
local activeItems = rcall('LRANGE', activeKey, 0, -1)
|
||
if checkItemInList(activeItems, currentDebounceJobId) then
|
||
local deduplicationNextKey = prefix .. "dn:" .. deduplicationId
|
||
local fields = {'name', jobName, 'data', jobData, 'opts', cjson.encode(fullOpts),
|
||
'jid', jobId}
|
||
if parentKey then
|
||
fields[#fields+1] = 'pk'
|
||
fields[#fields+1] = parentKey
|
||
end
|
||
if parentData then
|
||
fields[#fields+1] = 'pd'
|
||
fields[#fields+1] = parentData
|
||
end
|
||
if parentDependenciesKey then
|
||
fields[#fields+1] = 'pdk'
|
||
fields[#fields+1] = parentDependenciesKey
|
||
end
|
||
if repeatJobKey then
|
||
fields[#fields+1] = 'rjk'
|
||
fields[#fields+1] = repeatJobKey
|
||
end
|
||
rcall('DEL', deduplicationNextKey)
|
||
rcall('HSET', deduplicationNextKey, unpack(fields))
|
||
-- Ensure the dedup key does not expire while the job is active,
|
||
-- so subsequent adds always hit the dedup path and never bypass
|
||
-- the active-check because of a TTL expiry.
|
||
local deduplicationKey = prefix .. "de:" .. deduplicationId
|
||
rcall('PERSIST', deduplicationKey)
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts, jobId, deduplicationKey,
|
||
eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
local ttl = deduplicationOpts['ttl']
|
||
local deduplicationKeyExists
|
||
if ttl and ttl > 0 then
|
||
if deduplicationOpts['extend'] then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if currentDebounceJobId then
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, currentDebounceJobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, currentDebounceJobId, deduplicationOpts)
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
|
||
"jobId", currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
return
|
||
end
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
|
||
end
|
||
end
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
end
|
||
if deduplicationKeyExists then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
local function removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents, currentDeduplicatedJobId,
|
||
jobId, deduplicationId, prefix)
|
||
if rcall("ZREM", delayedKey, currentDeduplicatedJobId) > 0 then
|
||
removeJobKeys(prefix .. currentDeduplicatedJobId)
|
||
rcall("XADD", eventsKey, "*", "event", "removed", "jobId", currentDeduplicatedJobId,
|
||
"prev", "delayed")
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
jobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
jobId, "deduplicationId", deduplicationId, "deduplicatedJobId", currentDeduplicatedJobId)
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
local function deduplicateJob(deduplicationOpts, jobId, delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||
prefix, jobName, jobData, fullOpts, parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
local deduplicationId = deduplicationOpts and deduplicationOpts['id']
|
||
if deduplicationId then
|
||
if deduplicationOpts['replace'] then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if currentDebounceJobId then
|
||
local isRemoved = removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||
currentDebounceJobId, jobId, deduplicationId, prefix)
|
||
if isRemoved then
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
local ttl = deduplicationOpts['ttl']
|
||
if not deduplicationOpts['extend'] and ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'KEEPTTL')
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
end
|
||
return
|
||
else
|
||
storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
return currentDebounceJobId
|
||
end
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
return
|
||
end
|
||
else
|
||
return deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts,
|
||
jobId, deduplicationKey, eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to handle the case when job is duplicated.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
This function is used to update the parent's dependencies if the job
|
||
is already completed and about to be ignored. The parent must get its
|
||
dependencies updated to avoid the parent job being stuck forever in
|
||
the waiting-children state.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move or add dependencies to parent.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized)
|
||
if no pending dependencies.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Move parent to a wait status (wait, prioritized or delayed)
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check if queue is paused or maxed
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
|
||
if queueAttributes[1] then
|
||
return true
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
return activeCount >= tonumber(queueAttributes[2])
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
local parentWaitKey = parentQueueKey .. ":wait"
|
||
local parentPausedKey = parentQueueKey .. ":paused"
|
||
local parentActiveKey = parentQueueKey .. ":active"
|
||
local parentMetaKey = parentQueueKey .. ":meta"
|
||
local parentMarkerKey = parentQueueKey .. ":marker"
|
||
local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
|
||
local priority = tonumber(jobAttributes[1]) or 0
|
||
local delay = tonumber(jobAttributes[2]) or 0
|
||
if delay > 0 then
|
||
local delayedTimestamp = tonumber(timestamp) + delay
|
||
local score = delayedTimestamp * 0x1000
|
||
local parentDelayedKey = parentQueueKey .. ":delayed"
|
||
rcall("ZADD", parentDelayedKey, score, parentId)
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
|
||
delayedTimestamp)
|
||
addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
|
||
else
|
||
if priority == 0 then
|
||
local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
|
||
parentWaitKey, parentPausedKey)
|
||
addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
|
||
else
|
||
local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
|
||
addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
|
||
parentQueueKey .. ":pc", isPausedOrMaxed)
|
||
end
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
|
||
"waiting-children")
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
if rcall("EXISTS", parentKey) == 1 then
|
||
local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
|
||
if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
|
||
rcall("ZREM", parentWaitingChildrenKey, parentId)
|
||
moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
|
||
parentId, timestamp)
|
||
local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
|
||
if doNotHavePendingDependencies then
|
||
moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
||
parentId, jobIdKey, returnvalue, timestamp )
|
||
local processedSet = parentKey .. ":processed"
|
||
rcall("HSET", processedSet, jobIdKey, returnvalue)
|
||
moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
|
||
end
|
||
local function updateExistingJobsParent(parentKey, parent, parentData,
|
||
parentDependenciesKey, completedKey,
|
||
jobIdKey, jobId, timestamp)
|
||
if parentKey ~= nil then
|
||
if rcall("ZSCORE", completedKey, jobId) then
|
||
local returnvalue = rcall("HGET", jobIdKey, "returnvalue")
|
||
updateParentDepsIfNeeded(parentKey, parent['queueKey'],
|
||
parentDependenciesKey, parent['id'],
|
||
jobIdKey, returnvalue, timestamp)
|
||
else
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
end
|
||
rcall("HMSET", jobIdKey, "parentKey", parentKey, "parent", parentData)
|
||
end
|
||
end
|
||
local function handleDuplicatedJob(jobKey, jobId, currentParentKey, currentParent,
|
||
parentData, parentDependenciesKey, completedKey, eventsKey, maxEvents, timestamp)
|
||
local existedParentKey = rcall("HGET", jobKey, "parentKey")
|
||
if not existedParentKey or existedParentKey == currentParentKey then
|
||
updateExistingJobsParent(currentParentKey, currentParent, parentData,
|
||
parentDependenciesKey, completedKey, jobKey,
|
||
jobId, timestamp)
|
||
else
|
||
if currentParentKey ~= nil and currentParentKey ~= existedParentKey
|
||
and (rcall("EXISTS", existedParentKey) == 1) then
|
||
return -7
|
||
end
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
|
||
"duplicated", "jobId", jobId)
|
||
return jobId .. "" -- convert to string
|
||
end
|
||
--[[
|
||
Function to store a job
|
||
]]
|
||
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local jsonOpts = cjson.encode(opts)
|
||
local delay = opts['delay'] or 0
|
||
local priority = opts['priority'] or 0
|
||
local debounceId = opts['de'] and opts['de']['id']
|
||
local optionalValues = {}
|
||
if parentKey ~= nil then
|
||
table.insert(optionalValues, "parentKey")
|
||
table.insert(optionalValues, parentKey)
|
||
table.insert(optionalValues, "parent")
|
||
table.insert(optionalValues, parentData)
|
||
end
|
||
if repeatJobKey then
|
||
table.insert(optionalValues, "rjk")
|
||
table.insert(optionalValues, repeatJobKey)
|
||
end
|
||
if debounceId then
|
||
table.insert(optionalValues, "deid")
|
||
table.insert(optionalValues, debounceId)
|
||
end
|
||
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
||
"timestamp", timestamp, "delay", delay, "priority", priority,
|
||
unpack(optionalValues))
|
||
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
||
return delay, priority
|
||
end
|
||
if parentKey ~= nil then
|
||
if rcall("EXISTS", parentKey) ~= 1 then return -5 end
|
||
parentData = cjson.encode(parent)
|
||
end
|
||
local jobCounter = rcall("INCR", idKey)
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
local opts = cmsgpack.unpack(ARGV[3])
|
||
local parentDependenciesKey = args[6]
|
||
local timestamp = args[4]
|
||
if args[2] == "" then
|
||
jobId = jobCounter .. "" -- convert to string
|
||
jobIdKey = args[1] .. jobId
|
||
else
|
||
jobId = args[2]
|
||
jobIdKey = args[1] .. jobId
|
||
if rcall("EXISTS", jobIdKey) == 1 then
|
||
return handleDuplicatedJob(jobIdKey, jobId, parentKey, parent,
|
||
parentData, parentDependenciesKey, completedKey, eventsKey,
|
||
maxEvents, timestamp)
|
||
end
|
||
end
|
||
local deduplicationJobId = deduplicateJob(opts['de'], jobId, delayedKey, deduplicationKey,
|
||
eventsKey, maxEvents, args[1], args[3], ARGV[2], opts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationJobId then
|
||
return deduplicationJobId
|
||
end
|
||
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2],
|
||
opts, timestamp, parentKey, parentData, repeatJobKey)
|
||
addDelayedJob(jobId, delayedKey, eventsKey, timestamp, maxEvents, KEYS[1], delay)
|
||
-- Check if this job is a child of another job, if so add it to the parents dependencies
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
return jobId
|
||
`;Zy.addDelayedJob={name:"addDelayedJob",content:wIe,keys:6}});var zz=h(eg=>{"use strict";Object.defineProperty(eg,"__esModule",{value:!0});eg.addJobScheduler=void 0;var _Ie=`--[[
|
||
Adds a job scheduler, i.e. a job factory that creates jobs based on a given schedule (repeat options).
|
||
Input:
|
||
KEYS[1] 'repeat' key
|
||
KEYS[2] 'delayed' key
|
||
KEYS[3] 'wait' key
|
||
KEYS[4] 'paused' key
|
||
KEYS[5] 'meta' key
|
||
KEYS[6] 'prioritized' key
|
||
KEYS[7] 'marker' key
|
||
KEYS[8] 'id' key
|
||
KEYS[9] 'events' key
|
||
KEYS[10] 'pc' priority counter
|
||
KEYS[11] 'active' key
|
||
ARGV[1] next milliseconds
|
||
ARGV[2] msgpacked options
|
||
[1] name
|
||
[2] tz?
|
||
[3] pattern?
|
||
[4] endDate?
|
||
[5] every?
|
||
ARGV[3] jobs scheduler id
|
||
ARGV[4] Json stringified template data
|
||
ARGV[5] mspacked template opts
|
||
ARGV[6] msgpacked delayed opts
|
||
ARGV[7] timestamp
|
||
ARGV[8] prefix key
|
||
ARGV[9] producer key
|
||
Output:
|
||
repeatableKey - OK
|
||
]] local rcall = redis.call
|
||
local repeatKey = KEYS[1]
|
||
local delayedKey = KEYS[2]
|
||
local waitKey = KEYS[3]
|
||
local pausedKey = KEYS[4]
|
||
local metaKey = KEYS[5]
|
||
local prioritizedKey = KEYS[6]
|
||
local eventsKey = KEYS[9]
|
||
local nextMillis = ARGV[1]
|
||
local jobSchedulerId = ARGV[3]
|
||
local templateOpts = cmsgpack.unpack(ARGV[5])
|
||
local now = tonumber(ARGV[7])
|
||
local prefixKey = ARGV[8]
|
||
local jobOpts = cmsgpack.unpack(ARGV[6])
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Shared helper to store a job and enqueue it into the appropriate list/set.
|
||
Handles delayed, prioritized, and standard (LIFO/FIFO) jobs.
|
||
Emits the appropriate event after enqueuing ("delayed" or "waiting").
|
||
Returns delay, priority from storeJob.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Adds a delayed job to the queue by doing the following:
|
||
- Creates a new job key with the job data.
|
||
- adds to delayed zset.
|
||
- Emits a global event 'delayed' if the job is delayed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Bake in the job id first 12 bits into the timestamp
|
||
to guarantee correct execution order of delayed jobs
|
||
(up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
|
||
WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
|
||
]]
|
||
local function getDelayedScore(delayedKey, timestamp, delay)
|
||
local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
|
||
local minScore = delayedTimestamp * 0x1000
|
||
local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
|
||
local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
|
||
minScore, "WITHSCORES","LIMIT", 0, 1)
|
||
if #result then
|
||
local currentMaxScore = tonumber(result[2])
|
||
if currentMaxScore ~= nil then
|
||
if currentMaxScore >= maxScore then
|
||
return maxScore, delayedTimestamp
|
||
else
|
||
return currentMaxScore + 1, delayedTimestamp
|
||
end
|
||
end
|
||
end
|
||
return minScore, delayedTimestamp
|
||
end
|
||
local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
|
||
maxEvents, markerKey, delay)
|
||
local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
|
||
rcall("ZADD", delayedKey, score, jobId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
|
||
"jobId", jobId, "delay", delayedTimestamp)
|
||
-- mark that a delayed job is available
|
||
addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
end
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to store a job
|
||
]]
|
||
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local jsonOpts = cjson.encode(opts)
|
||
local delay = opts['delay'] or 0
|
||
local priority = opts['priority'] or 0
|
||
local debounceId = opts['de'] and opts['de']['id']
|
||
local optionalValues = {}
|
||
if parentKey ~= nil then
|
||
table.insert(optionalValues, "parentKey")
|
||
table.insert(optionalValues, parentKey)
|
||
table.insert(optionalValues, "parent")
|
||
table.insert(optionalValues, parentData)
|
||
end
|
||
if repeatJobKey then
|
||
table.insert(optionalValues, "rjk")
|
||
table.insert(optionalValues, repeatJobKey)
|
||
end
|
||
if debounceId then
|
||
table.insert(optionalValues, "deid")
|
||
table.insert(optionalValues, debounceId)
|
||
end
|
||
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
||
"timestamp", timestamp, "delay", delay, "priority", priority,
|
||
unpack(optionalValues))
|
||
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
||
return delay, priority
|
||
end
|
||
local function storeAndEnqueueJob(eventsKey, jobIdKey, jobId, name, data, opts,
|
||
timestamp, parentKey, parentData, repeatJobKey, maxEvents,
|
||
waitKey, pausedKey, activeKey, metaKey, prioritizedKey,
|
||
priorityCounterKey, delayedKey, markerKey)
|
||
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, name, data,
|
||
opts, timestamp, parentKey, parentData, repeatJobKey)
|
||
if delay ~= 0 and delayedKey then
|
||
addDelayedJob(jobId, delayedKey, eventsKey, timestamp, maxEvents, markerKey, delay)
|
||
else
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, activeKey, waitKey, pausedKey)
|
||
if priority > 0 then
|
||
addJobWithPriority(markerKey, prioritizedKey, priority, jobId,
|
||
priorityCounterKey, isPausedOrMaxed)
|
||
else
|
||
local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH'
|
||
addJobInTargetList(target, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", jobId)
|
||
end
|
||
return delay, priority
|
||
end
|
||
local function addJobFromScheduler(jobKey, jobId, opts, waitKey, pausedKey, activeKey, metaKey,
|
||
prioritizedKey, priorityCounter, delayedKey, markerKey, eventsKey, name, maxEvents, timestamp,
|
||
data, jobSchedulerId, repeatDelay)
|
||
opts['delay'] = repeatDelay
|
||
opts['jobId'] = jobId
|
||
storeAndEnqueueJob(eventsKey, jobKey, jobId, name, data, opts,
|
||
timestamp, nil, nil, jobSchedulerId, maxEvents,
|
||
waitKey, pausedKey, activeKey, metaKey, prioritizedKey,
|
||
priorityCounter, delayedKey, markerKey)
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePaused(queueMetaKey)
|
||
return rcall("HEXISTS", queueMetaKey, "paused") == 1
|
||
end
|
||
--[[
|
||
Function to remove job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function removeJob(jobId, hard, baseKey, shouldRemoveDeduplicationKey)
|
||
local jobKey = baseKey .. jobId
|
||
removeParentDependencyKey(jobKey, hard, nil, baseKey)
|
||
if shouldRemoveDeduplicationKey then
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(baseKey, jobId, deduplicationId)
|
||
end
|
||
removeJobKeys(jobKey)
|
||
end
|
||
--[[
|
||
Function to store a job scheduler
|
||
]]
|
||
local function storeJobScheduler(schedulerId, schedulerKey, repeatKey, nextMillis, opts,
|
||
templateData, templateOpts)
|
||
rcall("ZADD", repeatKey, nextMillis, schedulerId)
|
||
local optionalValues = {}
|
||
if opts['tz'] then
|
||
table.insert(optionalValues, "tz")
|
||
table.insert(optionalValues, opts['tz'])
|
||
end
|
||
if opts['limit'] then
|
||
table.insert(optionalValues, "limit")
|
||
table.insert(optionalValues, opts['limit'])
|
||
end
|
||
if opts['pattern'] then
|
||
table.insert(optionalValues, "pattern")
|
||
table.insert(optionalValues, opts['pattern'])
|
||
end
|
||
if opts['startDate'] then
|
||
table.insert(optionalValues, "startDate")
|
||
table.insert(optionalValues, opts['startDate'])
|
||
end
|
||
if opts['endDate'] then
|
||
table.insert(optionalValues, "endDate")
|
||
table.insert(optionalValues, opts['endDate'])
|
||
end
|
||
if opts['every'] then
|
||
table.insert(optionalValues, "every")
|
||
table.insert(optionalValues, opts['every'])
|
||
end
|
||
if opts['offset'] then
|
||
table.insert(optionalValues, "offset")
|
||
table.insert(optionalValues, opts['offset'])
|
||
else
|
||
local offset = rcall("HGET", schedulerKey, "offset")
|
||
if offset then
|
||
table.insert(optionalValues, "offset")
|
||
table.insert(optionalValues, tonumber(offset))
|
||
end
|
||
end
|
||
local jsonTemplateOpts = cjson.encode(templateOpts)
|
||
if jsonTemplateOpts and jsonTemplateOpts ~= '{}' then
|
||
table.insert(optionalValues, "opts")
|
||
table.insert(optionalValues, jsonTemplateOpts)
|
||
end
|
||
if templateData and templateData ~= '{}' then
|
||
table.insert(optionalValues, "data")
|
||
table.insert(optionalValues, templateData)
|
||
end
|
||
table.insert(optionalValues, "ic")
|
||
table.insert(optionalValues, rcall("HGET", schedulerKey, "ic") or 1)
|
||
rcall("DEL", schedulerKey) -- remove all attributes and then re-insert new ones
|
||
rcall("HMSET", schedulerKey, "name", opts['name'], unpack(optionalValues))
|
||
end
|
||
local function getJobSchedulerEveryNextMillis(prevMillis, every, now, offset, startDate)
|
||
offset = tonumber(offset)
|
||
local nextMillis
|
||
if not prevMillis then
|
||
if startDate then
|
||
-- Assuming startDate is passed as milliseconds from JavaScript
|
||
nextMillis = tonumber(startDate)
|
||
nextMillis = nextMillis > now and nextMillis or now
|
||
else
|
||
if offset and offset > 0 then
|
||
-- Align to the next slot that respects the offset
|
||
nextMillis = math.floor(now / every) * every + offset
|
||
if nextMillis <= now then
|
||
nextMillis = nextMillis + every
|
||
end
|
||
else
|
||
nextMillis = now
|
||
end
|
||
end
|
||
else
|
||
nextMillis = prevMillis + every
|
||
-- check if we may have missed some iterations
|
||
if nextMillis < now then
|
||
-- Use the same offset-aware alignment as the initial branch
|
||
-- above so a non-zero offset is preserved across catch-ups
|
||
-- instead of being flattened to (slot + every). When the
|
||
-- aligned slot is itself still in the past, advance by one
|
||
-- full interval; otherwise the aligned slot is the next
|
||
-- iteration.
|
||
local aligned = math.floor(now / every) * every + (offset or 0)
|
||
if aligned <= now then
|
||
nextMillis = aligned + every
|
||
else
|
||
nextMillis = aligned
|
||
end
|
||
end
|
||
end
|
||
if not offset or offset == 0 then
|
||
local timeSlot = math.floor(nextMillis / every) * every;
|
||
offset = nextMillis - timeSlot;
|
||
end
|
||
-- Return a tuple nextMillis, offset
|
||
return math.floor(nextMillis), math.floor(offset)
|
||
end
|
||
-- If we are overriding a repeatable job we must delete the delayed job for
|
||
-- the next iteration.
|
||
local schedulerKey = repeatKey .. ":" .. jobSchedulerId
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
local templateData = ARGV[4]
|
||
local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
|
||
if prevMillis then
|
||
prevMillis = tonumber(prevMillis)
|
||
end
|
||
local schedulerOpts = cmsgpack.unpack(ARGV[2])
|
||
local every = schedulerOpts['every']
|
||
-- For backwards compatibility we also check the offset from the job itself.
|
||
-- could be removed in future major versions.
|
||
local jobOffset = jobOpts['repeat'] and jobOpts['repeat']['offset'] or 0
|
||
local offset = schedulerOpts['offset'] or jobOffset or 0
|
||
local newOffset = offset
|
||
local updatedEvery = false
|
||
if every then
|
||
-- if we changed the 'every' value we need to reset millis to nil
|
||
local millis = prevMillis
|
||
if prevMillis then
|
||
local prevEvery = tonumber(rcall("HGET", schedulerKey, "every"))
|
||
if prevEvery ~= every then
|
||
millis = nil
|
||
updatedEvery = true
|
||
end
|
||
end
|
||
local startDate = schedulerOpts['startDate']
|
||
nextMillis, newOffset = getJobSchedulerEveryNextMillis(millis, every, now, offset, startDate)
|
||
end
|
||
local function removeJobFromScheduler(prefixKey, delayedKey, prioritizedKey, waitKey, pausedKey, jobId, metaKey,
|
||
eventsKey)
|
||
if rcall("ZSCORE", delayedKey, jobId) then
|
||
removeJob(jobId, true, prefixKey, true --[[remove debounce key]] )
|
||
rcall("ZREM", delayedKey, jobId)
|
||
return true
|
||
elseif rcall("ZSCORE", prioritizedKey, jobId) then
|
||
removeJob(jobId, true, prefixKey, true --[[remove debounce key]] )
|
||
rcall("ZREM", prioritizedKey, jobId)
|
||
return true
|
||
else
|
||
local pausedOrWaitKey = waitKey
|
||
if isQueuePaused(metaKey) then
|
||
pausedOrWaitKey = pausedKey
|
||
end
|
||
if rcall("LREM", pausedOrWaitKey, 1, jobId) > 0 then
|
||
removeJob(jobId, true, prefixKey, true --[[remove debounce key]] )
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local removedPrevJob = false
|
||
if prevMillis then
|
||
local currentJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
|
||
local currentJobKey = schedulerKey .. ":" .. prevMillis
|
||
-- In theory it should always exist the currentJobKey if there is a prevMillis unless something has
|
||
-- gone really wrong.
|
||
if rcall("EXISTS", currentJobKey) == 1 then
|
||
removedPrevJob = removeJobFromScheduler(prefixKey, delayedKey, prioritizedKey, waitKey, pausedKey, currentJobId,
|
||
metaKey, eventsKey)
|
||
end
|
||
end
|
||
if removedPrevJob then
|
||
-- The jobs has been removed and we want to replace it, so lets use the same millis.
|
||
if every and not updatedEvery then
|
||
nextMillis = prevMillis
|
||
end
|
||
else
|
||
-- Special case where no job was removed, and we need to add the next iteration.
|
||
schedulerOpts['offset'] = newOffset
|
||
end
|
||
-- Check for job ID collision with existing jobs (in any state)
|
||
local jobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
|
||
local jobKey = prefixKey .. jobId
|
||
-- If there's already a job with this ID, in a state
|
||
-- that is not updatable (active, completed, failed) we must
|
||
-- handle the collision
|
||
local hasCollision = false
|
||
if rcall("EXISTS", jobKey) == 1 then
|
||
if every then
|
||
-- For 'every' case: walk forward through subsequent slots
|
||
-- until we find a free one. Stale completed/failed jobs from
|
||
-- a previous scheduler under the same id can occupy several
|
||
-- consecutive slots (issue #3063), so a single retry is not
|
||
-- enough. The scan is bounded so we don't spin if the
|
||
-- scheduler is genuinely contested.
|
||
local maxSlotScans = 32
|
||
local slotsScanned = 0
|
||
local jobExists
|
||
repeat
|
||
nextMillis = nextMillis + every
|
||
jobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
|
||
jobKey = prefixKey .. jobId
|
||
slotsScanned = slotsScanned + 1
|
||
jobExists = rcall("EXISTS", jobKey)
|
||
until jobExists == 0 or slotsScanned >= maxSlotScans
|
||
if jobExists == 1 then
|
||
-- Every scanned slot still has a job, return error code
|
||
return -11 -- SchedulerJobSlotsBusy
|
||
end
|
||
else
|
||
hasCollision = true
|
||
end
|
||
end
|
||
local delay = nextMillis - now
|
||
-- Fast Clamp delay to minimum of 0
|
||
if delay < 0 then
|
||
delay = 0
|
||
end
|
||
local nextJobKey = schedulerKey .. ":" .. nextMillis
|
||
if not hasCollision or removedPrevJob then
|
||
-- jobId already calculated above during collision check
|
||
storeJobScheduler(jobSchedulerId, schedulerKey, repeatKey, nextMillis, schedulerOpts, templateData, templateOpts)
|
||
rcall("INCR", KEYS[8])
|
||
addJobFromScheduler(nextJobKey, jobId, jobOpts, waitKey, pausedKey, KEYS[11], metaKey, prioritizedKey, KEYS[10],
|
||
delayedKey, KEYS[7], eventsKey, schedulerOpts['name'], maxEvents, now, templateData, jobSchedulerId, delay)
|
||
elseif hasCollision then
|
||
-- For 'pattern' case: return error code
|
||
return -10 -- SchedulerJobIdCollision
|
||
end
|
||
if ARGV[9] ~= "" then
|
||
rcall("HSET", ARGV[9], "nrjid", jobId)
|
||
end
|
||
return {jobId .. "", delay}
|
||
`;eg.addJobScheduler={name:"addJobScheduler",content:_Ie,keys:11}});var Gz=h(tg=>{"use strict";Object.defineProperty(tg,"__esModule",{value:!0});tg.addLog=void 0;var IIe=`--[[
|
||
Add job log
|
||
Input:
|
||
KEYS[1] job id key
|
||
KEYS[2] job logs key
|
||
ARGV[1] id
|
||
ARGV[2] log
|
||
ARGV[3] keepLogs
|
||
Output:
|
||
-1 - Missing job.
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("EXISTS", KEYS[1]) == 1 then -- // Make sure job exists
|
||
local logCount = rcall("RPUSH", KEYS[2], ARGV[2])
|
||
if ARGV[3] ~= '' then
|
||
local keepLogs = tonumber(ARGV[3])
|
||
rcall("LTRIM", KEYS[2], -keepLogs, -1)
|
||
return math.min(keepLogs, logCount)
|
||
end
|
||
return logCount
|
||
else
|
||
return -1
|
||
end
|
||
`;tg.addLog={name:"addLog",content:IIe,keys:2}});var Bz=h(rg=>{"use strict";Object.defineProperty(rg,"__esModule",{value:!0});rg.addParentJob=void 0;var TIe=`--[[
|
||
Adds a parent job to the queue by doing the following:
|
||
- Increases the job counter if needed.
|
||
- Creates a new job key with the job data.
|
||
- adds the job to the waiting-children zset
|
||
Input:
|
||
KEYS[1] 'meta'
|
||
KEYS[2] 'id'
|
||
KEYS[3] 'delayed'
|
||
KEYS[4] 'waiting-children'
|
||
KEYS[5] 'completed'
|
||
KEYS[6] events stream key
|
||
ARGV[1] msgpacked arguments array
|
||
[1] key prefix,
|
||
[2] custom id (will not generate one automatically)
|
||
[3] name
|
||
[4] timestamp
|
||
[5] parentKey?
|
||
[6] parent dependencies key.
|
||
[7] parent? {id, queueKey}
|
||
[8] repeat job key
|
||
[9] deduplication key
|
||
ARGV[2] Json stringified job data
|
||
ARGV[3] msgpacked options
|
||
Output:
|
||
jobId - OK
|
||
-5 - Missing parent key
|
||
]]
|
||
local metaKey = KEYS[1]
|
||
local idKey = KEYS[2]
|
||
local delayedKey = KEYS[3]
|
||
local completedKey = KEYS[5]
|
||
local eventsKey = KEYS[6]
|
||
local jobId
|
||
local jobIdKey
|
||
local rcall = redis.call
|
||
local args = cmsgpack.unpack(ARGV[1])
|
||
local data = ARGV[2]
|
||
local opts = cmsgpack.unpack(ARGV[3])
|
||
local parentKey = args[5]
|
||
local parent = args[7]
|
||
local repeatJobKey = args[8]
|
||
local deduplicationKey = args[9]
|
||
local parentData
|
||
-- Includes
|
||
--[[
|
||
Function to deduplicate a job.
|
||
]]
|
||
--[[
|
||
Function to set the deduplication key for a job.
|
||
Uses TTL from deduplication opts if provided.
|
||
]]
|
||
local function setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
local ttl = deduplicationOpts and deduplicationOpts['ttl']
|
||
if ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||
else
|
||
rcall('SET', deduplicationKey, jobId)
|
||
end
|
||
end
|
||
--[[
|
||
Function to store a deduplicated next job if the existing job is active
|
||
and keepLastIfActive is set. When the active job finishes, the stored
|
||
proto-job is used to create a real job in the queue.
|
||
Returns true if the proto-job was stored, false otherwise.
|
||
]]
|
||
--[[
|
||
Function to check if an item belongs to a list.
|
||
]]
|
||
local function checkItemInList(list, item)
|
||
for _, v in pairs(list) do
|
||
if v == item then
|
||
return 1
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
local function storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationOpts['keepLastIfActive'] and currentDebounceJobId then
|
||
local activeKey = prefix .. "active"
|
||
local activeItems = rcall('LRANGE', activeKey, 0, -1)
|
||
if checkItemInList(activeItems, currentDebounceJobId) then
|
||
local deduplicationNextKey = prefix .. "dn:" .. deduplicationId
|
||
local fields = {'name', jobName, 'data', jobData, 'opts', cjson.encode(fullOpts),
|
||
'jid', jobId}
|
||
if parentKey then
|
||
fields[#fields+1] = 'pk'
|
||
fields[#fields+1] = parentKey
|
||
end
|
||
if parentData then
|
||
fields[#fields+1] = 'pd'
|
||
fields[#fields+1] = parentData
|
||
end
|
||
if parentDependenciesKey then
|
||
fields[#fields+1] = 'pdk'
|
||
fields[#fields+1] = parentDependenciesKey
|
||
end
|
||
if repeatJobKey then
|
||
fields[#fields+1] = 'rjk'
|
||
fields[#fields+1] = repeatJobKey
|
||
end
|
||
rcall('DEL', deduplicationNextKey)
|
||
rcall('HSET', deduplicationNextKey, unpack(fields))
|
||
-- Ensure the dedup key does not expire while the job is active,
|
||
-- so subsequent adds always hit the dedup path and never bypass
|
||
-- the active-check because of a TTL expiry.
|
||
local deduplicationKey = prefix .. "de:" .. deduplicationId
|
||
rcall('PERSIST', deduplicationKey)
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts, jobId, deduplicationKey,
|
||
eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
local ttl = deduplicationOpts['ttl']
|
||
local deduplicationKeyExists
|
||
if ttl and ttl > 0 then
|
||
if deduplicationOpts['extend'] then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if currentDebounceJobId then
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, currentDebounceJobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, currentDebounceJobId, deduplicationOpts)
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
|
||
"jobId", currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
return
|
||
end
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
|
||
end
|
||
end
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
end
|
||
if deduplicationKeyExists then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
end
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to handle the case when job is duplicated.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
This function is used to update the parent's dependencies if the job
|
||
is already completed and about to be ignored. The parent must get its
|
||
dependencies updated to avoid the parent job being stuck forever in
|
||
the waiting-children state.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move or add dependencies to parent.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized)
|
||
if no pending dependencies.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Move parent to a wait status (wait, prioritized or delayed)
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check if queue is paused or maxed
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
|
||
if queueAttributes[1] then
|
||
return true
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
return activeCount >= tonumber(queueAttributes[2])
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
local parentWaitKey = parentQueueKey .. ":wait"
|
||
local parentPausedKey = parentQueueKey .. ":paused"
|
||
local parentActiveKey = parentQueueKey .. ":active"
|
||
local parentMetaKey = parentQueueKey .. ":meta"
|
||
local parentMarkerKey = parentQueueKey .. ":marker"
|
||
local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
|
||
local priority = tonumber(jobAttributes[1]) or 0
|
||
local delay = tonumber(jobAttributes[2]) or 0
|
||
if delay > 0 then
|
||
local delayedTimestamp = tonumber(timestamp) + delay
|
||
local score = delayedTimestamp * 0x1000
|
||
local parentDelayedKey = parentQueueKey .. ":delayed"
|
||
rcall("ZADD", parentDelayedKey, score, parentId)
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
|
||
delayedTimestamp)
|
||
addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
|
||
else
|
||
if priority == 0 then
|
||
local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
|
||
parentWaitKey, parentPausedKey)
|
||
addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
|
||
else
|
||
local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
|
||
addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
|
||
parentQueueKey .. ":pc", isPausedOrMaxed)
|
||
end
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
|
||
"waiting-children")
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
if rcall("EXISTS", parentKey) == 1 then
|
||
local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
|
||
if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
|
||
rcall("ZREM", parentWaitingChildrenKey, parentId)
|
||
moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
|
||
parentId, timestamp)
|
||
local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
|
||
if doNotHavePendingDependencies then
|
||
moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
||
parentId, jobIdKey, returnvalue, timestamp )
|
||
local processedSet = parentKey .. ":processed"
|
||
rcall("HSET", processedSet, jobIdKey, returnvalue)
|
||
moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
|
||
end
|
||
local function updateExistingJobsParent(parentKey, parent, parentData,
|
||
parentDependenciesKey, completedKey,
|
||
jobIdKey, jobId, timestamp)
|
||
if parentKey ~= nil then
|
||
if rcall("ZSCORE", completedKey, jobId) then
|
||
local returnvalue = rcall("HGET", jobIdKey, "returnvalue")
|
||
updateParentDepsIfNeeded(parentKey, parent['queueKey'],
|
||
parentDependenciesKey, parent['id'],
|
||
jobIdKey, returnvalue, timestamp)
|
||
else
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
end
|
||
rcall("HMSET", jobIdKey, "parentKey", parentKey, "parent", parentData)
|
||
end
|
||
end
|
||
local function handleDuplicatedJob(jobKey, jobId, currentParentKey, currentParent,
|
||
parentData, parentDependenciesKey, completedKey, eventsKey, maxEvents, timestamp)
|
||
local existedParentKey = rcall("HGET", jobKey, "parentKey")
|
||
if not existedParentKey or existedParentKey == currentParentKey then
|
||
updateExistingJobsParent(currentParentKey, currentParent, parentData,
|
||
parentDependenciesKey, completedKey, jobKey,
|
||
jobId, timestamp)
|
||
else
|
||
if currentParentKey ~= nil and currentParentKey ~= existedParentKey
|
||
and (rcall("EXISTS", existedParentKey) == 1) then
|
||
return -7
|
||
end
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
|
||
"duplicated", "jobId", jobId)
|
||
return jobId .. "" -- convert to string
|
||
end
|
||
--[[
|
||
Function to store a job
|
||
]]
|
||
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local jsonOpts = cjson.encode(opts)
|
||
local delay = opts['delay'] or 0
|
||
local priority = opts['priority'] or 0
|
||
local debounceId = opts['de'] and opts['de']['id']
|
||
local optionalValues = {}
|
||
if parentKey ~= nil then
|
||
table.insert(optionalValues, "parentKey")
|
||
table.insert(optionalValues, parentKey)
|
||
table.insert(optionalValues, "parent")
|
||
table.insert(optionalValues, parentData)
|
||
end
|
||
if repeatJobKey then
|
||
table.insert(optionalValues, "rjk")
|
||
table.insert(optionalValues, repeatJobKey)
|
||
end
|
||
if debounceId then
|
||
table.insert(optionalValues, "deid")
|
||
table.insert(optionalValues, debounceId)
|
||
end
|
||
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
||
"timestamp", timestamp, "delay", delay, "priority", priority,
|
||
unpack(optionalValues))
|
||
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
||
return delay, priority
|
||
end
|
||
if parentKey ~= nil then
|
||
if rcall("EXISTS", parentKey) ~= 1 then return -5 end
|
||
parentData = cjson.encode(parent)
|
||
end
|
||
local jobCounter = rcall("INCR", idKey)
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
local parentDependenciesKey = args[6]
|
||
local timestamp = args[4]
|
||
if args[2] == "" then
|
||
jobId = jobCounter .. "" -- convert to string
|
||
jobIdKey = args[1] .. jobId
|
||
else
|
||
jobId = args[2]
|
||
jobIdKey = args[1] .. jobId
|
||
if rcall("EXISTS", jobIdKey) == 1 then
|
||
return handleDuplicatedJob(jobIdKey, jobId, parentKey, parent,
|
||
parentData, parentDependenciesKey, completedKey, eventsKey,
|
||
maxEvents, timestamp)
|
||
end
|
||
end
|
||
local deduplicationId = opts['de'] and opts['de']['id']
|
||
if deduplicationId then
|
||
local deduplicationJobId = deduplicateJobWithoutReplace(deduplicationId, opts['de'],
|
||
jobId, deduplicationKey, eventsKey, maxEvents, args[1], args[3], ARGV[2], opts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationJobId then
|
||
return deduplicationJobId
|
||
end
|
||
end
|
||
-- Store the job.
|
||
storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2], opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local waitChildrenKey = KEYS[4]
|
||
rcall("ZADD", waitChildrenKey, timestamp, jobId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
|
||
"waiting-children", "jobId", jobId)
|
||
-- Check if this job is a child of another job, if so add it to the parents dependencies
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
return jobId
|
||
`;rg.addParentJob={name:"addParentJob",content:TIe,keys:6}});var Hz=h(ng=>{"use strict";Object.defineProperty(ng,"__esModule",{value:!0});ng.addPrioritizedJob=void 0;var kIe=`--[[
|
||
Adds a prioritized job to the queue by doing the following:
|
||
- Increases the job counter if needed.
|
||
- Creates a new job key with the job data.
|
||
- Adds the job to the "added" list so that workers gets notified.
|
||
Input:
|
||
KEYS[1] 'marker',
|
||
KEYS[2] 'meta'
|
||
KEYS[3] 'id'
|
||
KEYS[4] 'prioritized'
|
||
KEYS[5] 'delayed'
|
||
KEYS[6] 'completed'
|
||
KEYS[7] 'active'
|
||
KEYS[8] events stream key
|
||
KEYS[9] 'pc' priority counter
|
||
ARGV[1] msgpacked arguments array
|
||
[1] key prefix,
|
||
[2] custom id (will not generate one automatically)
|
||
[3] name
|
||
[4] timestamp
|
||
[5] parentKey?
|
||
[6] parent dependencies key.
|
||
[7] parent? {id, queueKey}
|
||
[8] repeat job key
|
||
[9] deduplication key
|
||
ARGV[2] Json stringified job data
|
||
ARGV[3] msgpacked options
|
||
Output:
|
||
jobId - OK
|
||
-5 - Missing parent key
|
||
]]
|
||
local metaKey = KEYS[2]
|
||
local idKey = KEYS[3]
|
||
local priorityKey = KEYS[4]
|
||
local completedKey = KEYS[6]
|
||
local activeKey = KEYS[7]
|
||
local eventsKey = KEYS[8]
|
||
local priorityCounterKey = KEYS[9]
|
||
local jobId
|
||
local jobIdKey
|
||
local rcall = redis.call
|
||
local args = cmsgpack.unpack(ARGV[1])
|
||
local data = ARGV[2]
|
||
local opts = cmsgpack.unpack(ARGV[3])
|
||
local parentKey = args[5]
|
||
local parent = args[7]
|
||
local repeatJobKey = args[8]
|
||
local deduplicationKey = args[9]
|
||
local parentData
|
||
-- Includes
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to debounce a job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to deduplicate a job.
|
||
]]
|
||
--[[
|
||
Function to set the deduplication key for a job.
|
||
Uses TTL from deduplication opts if provided.
|
||
]]
|
||
local function setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
local ttl = deduplicationOpts and deduplicationOpts['ttl']
|
||
if ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||
else
|
||
rcall('SET', deduplicationKey, jobId)
|
||
end
|
||
end
|
||
--[[
|
||
Function to store a deduplicated next job if the existing job is active
|
||
and keepLastIfActive is set. When the active job finishes, the stored
|
||
proto-job is used to create a real job in the queue.
|
||
Returns true if the proto-job was stored, false otherwise.
|
||
]]
|
||
--[[
|
||
Function to check if an item belongs to a list.
|
||
]]
|
||
local function checkItemInList(list, item)
|
||
for _, v in pairs(list) do
|
||
if v == item then
|
||
return 1
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
local function storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationOpts['keepLastIfActive'] and currentDebounceJobId then
|
||
local activeKey = prefix .. "active"
|
||
local activeItems = rcall('LRANGE', activeKey, 0, -1)
|
||
if checkItemInList(activeItems, currentDebounceJobId) then
|
||
local deduplicationNextKey = prefix .. "dn:" .. deduplicationId
|
||
local fields = {'name', jobName, 'data', jobData, 'opts', cjson.encode(fullOpts),
|
||
'jid', jobId}
|
||
if parentKey then
|
||
fields[#fields+1] = 'pk'
|
||
fields[#fields+1] = parentKey
|
||
end
|
||
if parentData then
|
||
fields[#fields+1] = 'pd'
|
||
fields[#fields+1] = parentData
|
||
end
|
||
if parentDependenciesKey then
|
||
fields[#fields+1] = 'pdk'
|
||
fields[#fields+1] = parentDependenciesKey
|
||
end
|
||
if repeatJobKey then
|
||
fields[#fields+1] = 'rjk'
|
||
fields[#fields+1] = repeatJobKey
|
||
end
|
||
rcall('DEL', deduplicationNextKey)
|
||
rcall('HSET', deduplicationNextKey, unpack(fields))
|
||
-- Ensure the dedup key does not expire while the job is active,
|
||
-- so subsequent adds always hit the dedup path and never bypass
|
||
-- the active-check because of a TTL expiry.
|
||
local deduplicationKey = prefix .. "de:" .. deduplicationId
|
||
rcall('PERSIST', deduplicationKey)
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts, jobId, deduplicationKey,
|
||
eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
local ttl = deduplicationOpts['ttl']
|
||
local deduplicationKeyExists
|
||
if ttl and ttl > 0 then
|
||
if deduplicationOpts['extend'] then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if currentDebounceJobId then
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, currentDebounceJobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, currentDebounceJobId, deduplicationOpts)
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
|
||
"jobId", currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
return
|
||
end
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
|
||
end
|
||
end
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
end
|
||
if deduplicationKeyExists then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
local function removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents, currentDeduplicatedJobId,
|
||
jobId, deduplicationId, prefix)
|
||
if rcall("ZREM", delayedKey, currentDeduplicatedJobId) > 0 then
|
||
removeJobKeys(prefix .. currentDeduplicatedJobId)
|
||
rcall("XADD", eventsKey, "*", "event", "removed", "jobId", currentDeduplicatedJobId,
|
||
"prev", "delayed")
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
jobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
jobId, "deduplicationId", deduplicationId, "deduplicatedJobId", currentDeduplicatedJobId)
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
local function deduplicateJob(deduplicationOpts, jobId, delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||
prefix, jobName, jobData, fullOpts, parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
local deduplicationId = deduplicationOpts and deduplicationOpts['id']
|
||
if deduplicationId then
|
||
if deduplicationOpts['replace'] then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if currentDebounceJobId then
|
||
local isRemoved = removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||
currentDebounceJobId, jobId, deduplicationId, prefix)
|
||
if isRemoved then
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
local ttl = deduplicationOpts['ttl']
|
||
if not deduplicationOpts['extend'] and ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'KEEPTTL')
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
end
|
||
return
|
||
else
|
||
storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
return currentDebounceJobId
|
||
end
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
return
|
||
end
|
||
else
|
||
return deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts,
|
||
jobId, deduplicationKey, eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to store a job
|
||
]]
|
||
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local jsonOpts = cjson.encode(opts)
|
||
local delay = opts['delay'] or 0
|
||
local priority = opts['priority'] or 0
|
||
local debounceId = opts['de'] and opts['de']['id']
|
||
local optionalValues = {}
|
||
if parentKey ~= nil then
|
||
table.insert(optionalValues, "parentKey")
|
||
table.insert(optionalValues, parentKey)
|
||
table.insert(optionalValues, "parent")
|
||
table.insert(optionalValues, parentData)
|
||
end
|
||
if repeatJobKey then
|
||
table.insert(optionalValues, "rjk")
|
||
table.insert(optionalValues, repeatJobKey)
|
||
end
|
||
if debounceId then
|
||
table.insert(optionalValues, "deid")
|
||
table.insert(optionalValues, debounceId)
|
||
end
|
||
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
||
"timestamp", timestamp, "delay", delay, "priority", priority,
|
||
unpack(optionalValues))
|
||
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
||
return delay, priority
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to handle the case when job is duplicated.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
This function is used to update the parent's dependencies if the job
|
||
is already completed and about to be ignored. The parent must get its
|
||
dependencies updated to avoid the parent job being stuck forever in
|
||
the waiting-children state.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move or add dependencies to parent.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized)
|
||
if no pending dependencies.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Move parent to a wait status (wait, prioritized or delayed)
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check if queue is paused or maxed
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
|
||
if queueAttributes[1] then
|
||
return true
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
return activeCount >= tonumber(queueAttributes[2])
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
local parentWaitKey = parentQueueKey .. ":wait"
|
||
local parentPausedKey = parentQueueKey .. ":paused"
|
||
local parentActiveKey = parentQueueKey .. ":active"
|
||
local parentMetaKey = parentQueueKey .. ":meta"
|
||
local parentMarkerKey = parentQueueKey .. ":marker"
|
||
local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
|
||
local priority = tonumber(jobAttributes[1]) or 0
|
||
local delay = tonumber(jobAttributes[2]) or 0
|
||
if delay > 0 then
|
||
local delayedTimestamp = tonumber(timestamp) + delay
|
||
local score = delayedTimestamp * 0x1000
|
||
local parentDelayedKey = parentQueueKey .. ":delayed"
|
||
rcall("ZADD", parentDelayedKey, score, parentId)
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
|
||
delayedTimestamp)
|
||
addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
|
||
else
|
||
if priority == 0 then
|
||
local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
|
||
parentWaitKey, parentPausedKey)
|
||
addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
|
||
else
|
||
local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
|
||
addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
|
||
parentQueueKey .. ":pc", isPausedOrMaxed)
|
||
end
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
|
||
"waiting-children")
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
if rcall("EXISTS", parentKey) == 1 then
|
||
local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
|
||
if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
|
||
rcall("ZREM", parentWaitingChildrenKey, parentId)
|
||
moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
|
||
parentId, timestamp)
|
||
local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
|
||
if doNotHavePendingDependencies then
|
||
moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
||
parentId, jobIdKey, returnvalue, timestamp )
|
||
local processedSet = parentKey .. ":processed"
|
||
rcall("HSET", processedSet, jobIdKey, returnvalue)
|
||
moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
|
||
end
|
||
local function updateExistingJobsParent(parentKey, parent, parentData,
|
||
parentDependenciesKey, completedKey,
|
||
jobIdKey, jobId, timestamp)
|
||
if parentKey ~= nil then
|
||
if rcall("ZSCORE", completedKey, jobId) then
|
||
local returnvalue = rcall("HGET", jobIdKey, "returnvalue")
|
||
updateParentDepsIfNeeded(parentKey, parent['queueKey'],
|
||
parentDependenciesKey, parent['id'],
|
||
jobIdKey, returnvalue, timestamp)
|
||
else
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
end
|
||
rcall("HMSET", jobIdKey, "parentKey", parentKey, "parent", parentData)
|
||
end
|
||
end
|
||
local function handleDuplicatedJob(jobKey, jobId, currentParentKey, currentParent,
|
||
parentData, parentDependenciesKey, completedKey, eventsKey, maxEvents, timestamp)
|
||
local existedParentKey = rcall("HGET", jobKey, "parentKey")
|
||
if not existedParentKey or existedParentKey == currentParentKey then
|
||
updateExistingJobsParent(currentParentKey, currentParent, parentData,
|
||
parentDependenciesKey, completedKey, jobKey,
|
||
jobId, timestamp)
|
||
else
|
||
if currentParentKey ~= nil and currentParentKey ~= existedParentKey
|
||
and (rcall("EXISTS", existedParentKey) == 1) then
|
||
return -7
|
||
end
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
|
||
"duplicated", "jobId", jobId)
|
||
return jobId .. "" -- convert to string
|
||
end
|
||
if parentKey ~= nil then
|
||
if rcall("EXISTS", parentKey) ~= 1 then return -5 end
|
||
parentData = cjson.encode(parent)
|
||
end
|
||
local jobCounter = rcall("INCR", idKey)
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
local parentDependenciesKey = args[6]
|
||
local timestamp = args[4]
|
||
if args[2] == "" then
|
||
jobId = jobCounter .. "" -- convert to string
|
||
jobIdKey = args[1] .. jobId
|
||
else
|
||
jobId = args[2]
|
||
jobIdKey = args[1] .. jobId
|
||
if rcall("EXISTS", jobIdKey) == 1 then
|
||
return handleDuplicatedJob(jobIdKey, jobId, parentKey, parent,
|
||
parentData, parentDependenciesKey, completedKey, eventsKey,
|
||
maxEvents, timestamp)
|
||
end
|
||
end
|
||
local deduplicationJobId = deduplicateJob(opts['de'], jobId, KEYS[5],
|
||
deduplicationKey, eventsKey, maxEvents, args[1], args[3], ARGV[2], opts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationJobId then
|
||
return deduplicationJobId
|
||
end
|
||
-- Store the job.
|
||
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2],
|
||
opts, timestamp, parentKey, parentData,
|
||
repeatJobKey)
|
||
-- Add the job to the prioritized set
|
||
local isPausedOrMaxed = isQueuePausedOrMaxed(metaKey, activeKey)
|
||
addJobWithPriority( KEYS[1], priorityKey, priority, jobId, priorityCounterKey, isPausedOrMaxed)
|
||
-- Emit waiting event
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", jobId)
|
||
-- Check if this job is a child of another job, if so add it to the parents dependencies
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
return jobId
|
||
`;ng.addPrioritizedJob={name:"addPrioritizedJob",content:kIe,keys:9}});var Vz=h(ig=>{"use strict";Object.defineProperty(ig,"__esModule",{value:!0});ig.addRepeatableJob=void 0;var AIe=`--[[
|
||
Adds a repeatable job
|
||
Input:
|
||
KEYS[1] 'repeat' key
|
||
KEYS[2] 'delayed' key
|
||
ARGV[1] next milliseconds
|
||
ARGV[2] msgpacked options
|
||
[1] name
|
||
[2] tz?
|
||
[3] pattern?
|
||
[4] endDate?
|
||
[5] every?
|
||
ARGV[3] legacy custom key TODO: remove this logic in next breaking change
|
||
ARGV[4] custom key
|
||
ARGV[5] prefix key
|
||
Output:
|
||
repeatableKey - OK
|
||
]]
|
||
local rcall = redis.call
|
||
local repeatKey = KEYS[1]
|
||
local delayedKey = KEYS[2]
|
||
local nextMillis = ARGV[1]
|
||
local legacyCustomKey = ARGV[3]
|
||
local customKey = ARGV[4]
|
||
local prefixKey = ARGV[5]
|
||
-- Includes
|
||
--[[
|
||
Function to remove job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function removeJob(jobId, hard, baseKey, shouldRemoveDeduplicationKey)
|
||
local jobKey = baseKey .. jobId
|
||
removeParentDependencyKey(jobKey, hard, nil, baseKey)
|
||
if shouldRemoveDeduplicationKey then
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(baseKey, jobId, deduplicationId)
|
||
end
|
||
removeJobKeys(jobKey)
|
||
end
|
||
local function storeRepeatableJob(repeatKey, customKey, nextMillis, rawOpts)
|
||
rcall("ZADD", repeatKey, nextMillis, customKey)
|
||
local opts = cmsgpack.unpack(rawOpts)
|
||
local optionalValues = {}
|
||
if opts['tz'] then
|
||
table.insert(optionalValues, "tz")
|
||
table.insert(optionalValues, opts['tz'])
|
||
end
|
||
if opts['pattern'] then
|
||
table.insert(optionalValues, "pattern")
|
||
table.insert(optionalValues, opts['pattern'])
|
||
end
|
||
if opts['endDate'] then
|
||
table.insert(optionalValues, "endDate")
|
||
table.insert(optionalValues, opts['endDate'])
|
||
end
|
||
if opts['every'] then
|
||
table.insert(optionalValues, "every")
|
||
table.insert(optionalValues, opts['every'])
|
||
end
|
||
rcall("HMSET", repeatKey .. ":" .. customKey, "name", opts['name'],
|
||
unpack(optionalValues))
|
||
return customKey
|
||
end
|
||
-- If we are overriding a repeatable job we must delete the delayed job for
|
||
-- the next iteration.
|
||
local prevMillis = rcall("ZSCORE", repeatKey, customKey)
|
||
if prevMillis then
|
||
local delayedJobId = "repeat:" .. customKey .. ":" .. prevMillis
|
||
local nextDelayedJobId = repeatKey .. ":" .. customKey .. ":" .. nextMillis
|
||
if rcall("ZSCORE", delayedKey, delayedJobId)
|
||
and rcall("EXISTS", nextDelayedJobId) ~= 1 then
|
||
removeJob(delayedJobId, true, prefixKey, true --[[remove debounce key]])
|
||
rcall("ZREM", delayedKey, delayedJobId)
|
||
end
|
||
end
|
||
-- Keep backwards compatibility with old repeatable jobs (<= 3.0.0)
|
||
if rcall("ZSCORE", repeatKey, legacyCustomKey) ~= false then
|
||
return storeRepeatableJob(repeatKey, legacyCustomKey, nextMillis, ARGV[2])
|
||
end
|
||
return storeRepeatableJob(repeatKey, customKey, nextMillis, ARGV[2])
|
||
`;ig.addRepeatableJob={name:"addRepeatableJob",content:AIe,keys:2}});var Wz=h(sg=>{"use strict";Object.defineProperty(sg,"__esModule",{value:!0});sg.addStandardJob=void 0;var RIe=`--[[
|
||
Adds a job to the queue by doing the following:
|
||
- Increases the job counter if needed.
|
||
- Creates a new job key with the job data.
|
||
- if delayed:
|
||
- computes timestamp.
|
||
- adds to delayed zset.
|
||
- Emits a global event 'delayed' if the job is delayed.
|
||
- if not delayed
|
||
- Adds the jobId to the wait/paused list in one of three ways:
|
||
- LIFO
|
||
- FIFO
|
||
- prioritized.
|
||
- Adds the job to the "added" list so that workers gets notified.
|
||
Input:
|
||
KEYS[1] 'wait',
|
||
KEYS[2] 'paused'
|
||
KEYS[3] 'meta'
|
||
KEYS[4] 'id'
|
||
KEYS[5] 'completed'
|
||
KEYS[6] 'delayed'
|
||
KEYS[7] 'active'
|
||
KEYS[8] events stream key
|
||
KEYS[9] marker key
|
||
ARGV[1] msgpacked arguments array
|
||
[1] key prefix,
|
||
[2] custom id (will not generate one automatically)
|
||
[3] name
|
||
[4] timestamp
|
||
[5] parentKey?
|
||
[6] parent dependencies key.
|
||
[7] parent? {id, queueKey}
|
||
[8] repeat job key
|
||
[9] deduplication key
|
||
ARGV[2] Json stringified job data
|
||
ARGV[3] msgpacked options
|
||
Output:
|
||
jobId - OK
|
||
-5 - Missing parent key
|
||
]]
|
||
local eventsKey = KEYS[8]
|
||
local jobId
|
||
local jobIdKey
|
||
local rcall = redis.call
|
||
local args = cmsgpack.unpack(ARGV[1])
|
||
local data = ARGV[2]
|
||
local opts = cmsgpack.unpack(ARGV[3])
|
||
local parentKey = args[5]
|
||
local parent = args[7]
|
||
local repeatJobKey = args[8]
|
||
local deduplicationKey = args[9]
|
||
local parentData
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to debounce a job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to deduplicate a job.
|
||
]]
|
||
--[[
|
||
Function to set the deduplication key for a job.
|
||
Uses TTL from deduplication opts if provided.
|
||
]]
|
||
local function setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
local ttl = deduplicationOpts and deduplicationOpts['ttl']
|
||
if ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||
else
|
||
rcall('SET', deduplicationKey, jobId)
|
||
end
|
||
end
|
||
--[[
|
||
Function to store a deduplicated next job if the existing job is active
|
||
and keepLastIfActive is set. When the active job finishes, the stored
|
||
proto-job is used to create a real job in the queue.
|
||
Returns true if the proto-job was stored, false otherwise.
|
||
]]
|
||
--[[
|
||
Function to check if an item belongs to a list.
|
||
]]
|
||
local function checkItemInList(list, item)
|
||
for _, v in pairs(list) do
|
||
if v == item then
|
||
return 1
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
local function storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationOpts['keepLastIfActive'] and currentDebounceJobId then
|
||
local activeKey = prefix .. "active"
|
||
local activeItems = rcall('LRANGE', activeKey, 0, -1)
|
||
if checkItemInList(activeItems, currentDebounceJobId) then
|
||
local deduplicationNextKey = prefix .. "dn:" .. deduplicationId
|
||
local fields = {'name', jobName, 'data', jobData, 'opts', cjson.encode(fullOpts),
|
||
'jid', jobId}
|
||
if parentKey then
|
||
fields[#fields+1] = 'pk'
|
||
fields[#fields+1] = parentKey
|
||
end
|
||
if parentData then
|
||
fields[#fields+1] = 'pd'
|
||
fields[#fields+1] = parentData
|
||
end
|
||
if parentDependenciesKey then
|
||
fields[#fields+1] = 'pdk'
|
||
fields[#fields+1] = parentDependenciesKey
|
||
end
|
||
if repeatJobKey then
|
||
fields[#fields+1] = 'rjk'
|
||
fields[#fields+1] = repeatJobKey
|
||
end
|
||
rcall('DEL', deduplicationNextKey)
|
||
rcall('HSET', deduplicationNextKey, unpack(fields))
|
||
-- Ensure the dedup key does not expire while the job is active,
|
||
-- so subsequent adds always hit the dedup path and never bypass
|
||
-- the active-check because of a TTL expiry.
|
||
local deduplicationKey = prefix .. "de:" .. deduplicationId
|
||
rcall('PERSIST', deduplicationKey)
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts, jobId, deduplicationKey,
|
||
eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
local ttl = deduplicationOpts['ttl']
|
||
local deduplicationKeyExists
|
||
if ttl and ttl > 0 then
|
||
if deduplicationOpts['extend'] then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if currentDebounceJobId then
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, currentDebounceJobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, currentDebounceJobId, deduplicationOpts)
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
|
||
"jobId", currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
return
|
||
end
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
|
||
end
|
||
end
|
||
else
|
||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||
end
|
||
if deduplicationKeyExists then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey) then
|
||
return currentDebounceJobId
|
||
end
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
currentDebounceJobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||
return currentDebounceJobId
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
local function removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents, currentDeduplicatedJobId,
|
||
jobId, deduplicationId, prefix)
|
||
if rcall("ZREM", delayedKey, currentDeduplicatedJobId) > 0 then
|
||
removeJobKeys(prefix .. currentDeduplicatedJobId)
|
||
rcall("XADD", eventsKey, "*", "event", "removed", "jobId", currentDeduplicatedJobId,
|
||
"prev", "delayed")
|
||
-- TODO remove debounced event in next breaking change
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||
jobId, "debounceId", deduplicationId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||
jobId, "deduplicationId", deduplicationId, "deduplicatedJobId", currentDeduplicatedJobId)
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
local function deduplicateJob(deduplicationOpts, jobId, delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||
prefix, jobName, jobData, fullOpts, parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
local deduplicationId = deduplicationOpts and deduplicationOpts['id']
|
||
if deduplicationId then
|
||
if deduplicationOpts['replace'] then
|
||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||
if currentDebounceJobId then
|
||
local isRemoved = removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||
currentDebounceJobId, jobId, deduplicationId, prefix)
|
||
if isRemoved then
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
local ttl = deduplicationOpts['ttl']
|
||
if not deduplicationOpts['extend'] and ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'KEEPTTL')
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
end
|
||
return
|
||
else
|
||
storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
|
||
deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
return currentDebounceJobId
|
||
end
|
||
else
|
||
if deduplicationOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, jobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
end
|
||
return
|
||
end
|
||
else
|
||
return deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts,
|
||
jobId, deduplicationKey, eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to handle the case when job is duplicated.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
This function is used to update the parent's dependencies if the job
|
||
is already completed and about to be ignored. The parent must get its
|
||
dependencies updated to avoid the parent job being stuck forever in
|
||
the waiting-children state.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move or add dependencies to parent.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized)
|
||
if no pending dependencies.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Move parent to a wait status (wait, prioritized or delayed)
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check if queue is paused or maxed
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
|
||
if queueAttributes[1] then
|
||
return true
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
return activeCount >= tonumber(queueAttributes[2])
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
local parentWaitKey = parentQueueKey .. ":wait"
|
||
local parentPausedKey = parentQueueKey .. ":paused"
|
||
local parentActiveKey = parentQueueKey .. ":active"
|
||
local parentMetaKey = parentQueueKey .. ":meta"
|
||
local parentMarkerKey = parentQueueKey .. ":marker"
|
||
local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
|
||
local priority = tonumber(jobAttributes[1]) or 0
|
||
local delay = tonumber(jobAttributes[2]) or 0
|
||
if delay > 0 then
|
||
local delayedTimestamp = tonumber(timestamp) + delay
|
||
local score = delayedTimestamp * 0x1000
|
||
local parentDelayedKey = parentQueueKey .. ":delayed"
|
||
rcall("ZADD", parentDelayedKey, score, parentId)
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
|
||
delayedTimestamp)
|
||
addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
|
||
else
|
||
if priority == 0 then
|
||
local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
|
||
parentWaitKey, parentPausedKey)
|
||
addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
|
||
else
|
||
local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
|
||
addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
|
||
parentQueueKey .. ":pc", isPausedOrMaxed)
|
||
end
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
|
||
"waiting-children")
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
if rcall("EXISTS", parentKey) == 1 then
|
||
local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
|
||
if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
|
||
rcall("ZREM", parentWaitingChildrenKey, parentId)
|
||
moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
|
||
parentId, timestamp)
|
||
local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
|
||
if doNotHavePendingDependencies then
|
||
moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
||
parentId, jobIdKey, returnvalue, timestamp )
|
||
local processedSet = parentKey .. ":processed"
|
||
rcall("HSET", processedSet, jobIdKey, returnvalue)
|
||
moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
|
||
end
|
||
local function updateExistingJobsParent(parentKey, parent, parentData,
|
||
parentDependenciesKey, completedKey,
|
||
jobIdKey, jobId, timestamp)
|
||
if parentKey ~= nil then
|
||
if rcall("ZSCORE", completedKey, jobId) then
|
||
local returnvalue = rcall("HGET", jobIdKey, "returnvalue")
|
||
updateParentDepsIfNeeded(parentKey, parent['queueKey'],
|
||
parentDependenciesKey, parent['id'],
|
||
jobIdKey, returnvalue, timestamp)
|
||
else
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
end
|
||
rcall("HMSET", jobIdKey, "parentKey", parentKey, "parent", parentData)
|
||
end
|
||
end
|
||
local function handleDuplicatedJob(jobKey, jobId, currentParentKey, currentParent,
|
||
parentData, parentDependenciesKey, completedKey, eventsKey, maxEvents, timestamp)
|
||
local existedParentKey = rcall("HGET", jobKey, "parentKey")
|
||
if not existedParentKey or existedParentKey == currentParentKey then
|
||
updateExistingJobsParent(currentParentKey, currentParent, parentData,
|
||
parentDependenciesKey, completedKey, jobKey,
|
||
jobId, timestamp)
|
||
else
|
||
if currentParentKey ~= nil and currentParentKey ~= existedParentKey
|
||
and (rcall("EXISTS", existedParentKey) == 1) then
|
||
return -7
|
||
end
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
|
||
"duplicated", "jobId", jobId)
|
||
return jobId .. "" -- convert to string
|
||
end
|
||
--[[
|
||
Function to store a job
|
||
]]
|
||
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local jsonOpts = cjson.encode(opts)
|
||
local delay = opts['delay'] or 0
|
||
local priority = opts['priority'] or 0
|
||
local debounceId = opts['de'] and opts['de']['id']
|
||
local optionalValues = {}
|
||
if parentKey ~= nil then
|
||
table.insert(optionalValues, "parentKey")
|
||
table.insert(optionalValues, parentKey)
|
||
table.insert(optionalValues, "parent")
|
||
table.insert(optionalValues, parentData)
|
||
end
|
||
if repeatJobKey then
|
||
table.insert(optionalValues, "rjk")
|
||
table.insert(optionalValues, repeatJobKey)
|
||
end
|
||
if debounceId then
|
||
table.insert(optionalValues, "deid")
|
||
table.insert(optionalValues, debounceId)
|
||
end
|
||
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
||
"timestamp", timestamp, "delay", delay, "priority", priority,
|
||
unpack(optionalValues))
|
||
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
||
return delay, priority
|
||
end
|
||
if parentKey ~= nil then
|
||
if rcall("EXISTS", parentKey) ~= 1 then return -5 end
|
||
parentData = cjson.encode(parent)
|
||
end
|
||
local jobCounter = rcall("INCR", KEYS[4])
|
||
local metaKey = KEYS[3]
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
local parentDependenciesKey = args[6]
|
||
local timestamp = args[4]
|
||
if args[2] == "" then
|
||
jobId = jobCounter .. "" -- convert to string
|
||
jobIdKey = args[1] .. jobId
|
||
else
|
||
jobId = args[2]
|
||
jobIdKey = args[1] .. jobId
|
||
if rcall("EXISTS", jobIdKey) == 1 then
|
||
return handleDuplicatedJob(jobIdKey, jobId, parentKey, parent,
|
||
parentData, parentDependenciesKey, KEYS[5], eventsKey,
|
||
maxEvents, timestamp)
|
||
end
|
||
end
|
||
local deduplicationJobId = deduplicateJob(opts['de'], jobId, KEYS[6],
|
||
deduplicationKey, eventsKey, maxEvents, args[1], args[3], ARGV[2], opts,
|
||
parentKey, parentData, parentDependenciesKey, repeatJobKey)
|
||
if deduplicationJobId then
|
||
return deduplicationJobId
|
||
end
|
||
-- Store the job.
|
||
storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2], opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[7], KEYS[1], KEYS[2])
|
||
-- LIFO or FIFO
|
||
local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH'
|
||
addJobInTargetList(target, KEYS[9], pushCmd, isPausedOrMaxed, jobId)
|
||
-- Emit waiting event
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", jobId)
|
||
-- Check if this job is a child of another job, if so add it to the parents dependencies
|
||
if parentDependenciesKey ~= nil then
|
||
rcall("SADD", parentDependenciesKey, jobIdKey)
|
||
end
|
||
return jobId
|
||
`;sg.addStandardJob={name:"addStandardJob",content:RIe,keys:9}});var Yz=h(og=>{"use strict";Object.defineProperty(og,"__esModule",{value:!0});og.changeDelay=void 0;var OIe=`--[[
|
||
Change job delay when it is in delayed set.
|
||
Input:
|
||
KEYS[1] delayed key
|
||
KEYS[2] meta key
|
||
KEYS[3] marker key
|
||
KEYS[4] events stream
|
||
ARGV[1] delay
|
||
ARGV[2] timestamp
|
||
ARGV[3] the id of the job
|
||
ARGV[4] job key
|
||
Output:
|
||
0 - OK
|
||
-1 - Missing job.
|
||
-3 - Job not in delayed set.
|
||
Events:
|
||
- delayed key.
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Bake in the job id first 12 bits into the timestamp
|
||
to guarantee correct execution order of delayed jobs
|
||
(up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
|
||
WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
|
||
]]
|
||
local function getDelayedScore(delayedKey, timestamp, delay)
|
||
local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
|
||
local minScore = delayedTimestamp * 0x1000
|
||
local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
|
||
local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
|
||
minScore, "WITHSCORES","LIMIT", 0, 1)
|
||
if #result then
|
||
local currentMaxScore = tonumber(result[2])
|
||
if currentMaxScore ~= nil then
|
||
if currentMaxScore >= maxScore then
|
||
return maxScore, delayedTimestamp
|
||
else
|
||
return currentMaxScore + 1, delayedTimestamp
|
||
end
|
||
end
|
||
end
|
||
return minScore, delayedTimestamp
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
if rcall("EXISTS", ARGV[4]) == 1 then
|
||
local jobId = ARGV[3]
|
||
local delay = tonumber(ARGV[1])
|
||
local score, delayedTimestamp = getDelayedScore(KEYS[1], ARGV[2], delay)
|
||
local numRemovedElements = rcall("ZREM", KEYS[1], jobId)
|
||
if numRemovedElements < 1 then
|
||
return -3
|
||
end
|
||
rcall("HSET", ARGV[4], "delay", delay)
|
||
rcall("ZADD", KEYS[1], score, jobId)
|
||
local maxEvents = getOrSetMaxEvents(KEYS[2])
|
||
rcall("XADD", KEYS[4], "MAXLEN", "~", maxEvents, "*", "event", "delayed",
|
||
"jobId", jobId, "delay", delayedTimestamp)
|
||
-- mark that a delayed job is available
|
||
addDelayMarkerIfNeeded(KEYS[3], KEYS[1])
|
||
return 0
|
||
else
|
||
return -1
|
||
end`;og.changeDelay={name:"changeDelay",content:OIe,keys:4}});var Qz=h(ag=>{"use strict";Object.defineProperty(ag,"__esModule",{value:!0});ag.changePriority=void 0;var CIe=`--[[
|
||
Change job priority
|
||
Input:
|
||
KEYS[1] 'wait',
|
||
KEYS[2] 'paused'
|
||
KEYS[3] 'meta'
|
||
KEYS[4] 'prioritized'
|
||
KEYS[5] 'active'
|
||
KEYS[6] 'pc' priority counter
|
||
KEYS[7] 'marker'
|
||
ARGV[1] priority value
|
||
ARGV[2] prefix key
|
||
ARGV[3] job id
|
||
ARGV[4] lifo
|
||
Output:
|
||
0 - OK
|
||
-1 - Missing job
|
||
]]
|
||
local jobId = ARGV[3]
|
||
local jobKey = ARGV[2] .. jobId
|
||
local priority = tonumber(ARGV[1])
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to push back job considering priority in front of same prioritized jobs.
|
||
]]
|
||
local function pushBackJobWithPriority(prioritizedKey, priority, jobId)
|
||
-- in order to put it at front of same prioritized jobs
|
||
-- we consider prioritized counter as 0
|
||
local score = priority * 0x100000000
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
end
|
||
local function reAddJobWithNewPriority( prioritizedKey, markerKey, targetKey,
|
||
priorityCounter, lifo, priority, jobId, isPausedOrMaxed)
|
||
if priority == 0 then
|
||
local pushCmd = lifo and 'RPUSH' or 'LPUSH'
|
||
addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
else
|
||
if lifo then
|
||
pushBackJobWithPriority(prioritizedKey, priority, jobId)
|
||
else
|
||
addJobWithPriority(markerKey, prioritizedKey, priority, jobId,
|
||
priorityCounter, isPausedOrMaxed)
|
||
end
|
||
end
|
||
end
|
||
if rcall("EXISTS", jobKey) == 1 then
|
||
local metaKey = KEYS[3]
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[5], KEYS[1], KEYS[2])
|
||
local prioritizedKey = KEYS[4]
|
||
local priorityCounterKey = KEYS[6]
|
||
local markerKey = KEYS[7]
|
||
-- Re-add with the new priority
|
||
if rcall("ZREM", prioritizedKey, jobId) > 0 then
|
||
reAddJobWithNewPriority( prioritizedKey, markerKey, target,
|
||
priorityCounterKey, ARGV[4] == '1', priority, jobId, isPausedOrMaxed)
|
||
elseif rcall("LREM", target, -1, jobId) > 0 then
|
||
reAddJobWithNewPriority( prioritizedKey, markerKey, target,
|
||
priorityCounterKey, ARGV[4] == '1', priority, jobId, isPausedOrMaxed)
|
||
end
|
||
rcall("HSET", jobKey, "priority", priority)
|
||
return 0
|
||
else
|
||
return -1
|
||
end
|
||
`;ag.changePriority={name:"changePriority",content:CIe,keys:7}});var Xz=h(cg=>{"use strict";Object.defineProperty(cg,"__esModule",{value:!0});cg.cleanJobsInSet=void 0;var jIe=`--[[
|
||
Remove jobs from the specific set.
|
||
Input:
|
||
KEYS[1] set key,
|
||
KEYS[2] events stream key
|
||
KEYS[3] repeat key
|
||
ARGV[1] jobKey prefix
|
||
ARGV[2] timestamp
|
||
ARGV[3] limit the number of jobs to be removed. 0 is unlimited
|
||
ARGV[4] set name, can be any of 'wait', 'active', 'paused', 'delayed', 'completed', or 'failed'
|
||
]]
|
||
local rcall = redis.call
|
||
local repeatKey = KEYS[3]
|
||
local rangeStart = 0
|
||
local rangeEnd = -1
|
||
local limit = tonumber(ARGV[3])
|
||
-- If we're only deleting _n_ items, avoid retrieving all items
|
||
-- for faster performance
|
||
--
|
||
-- Start from the tail of the list, since that's where oldest elements
|
||
-- are generally added for FIFO lists
|
||
if limit > 0 then
|
||
rangeStart = -1 - limit + 1
|
||
rangeEnd = -1
|
||
end
|
||
-- Includes
|
||
--[[
|
||
Function to clean job list.
|
||
Returns jobIds and deleted count number.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get the latest saved timestamp.
|
||
]]
|
||
local function getTimestamp(jobKey, attributes)
|
||
if #attributes == 1 then
|
||
return rcall("HGET", jobKey, attributes[1])
|
||
end
|
||
local jobTs
|
||
for _, ts in ipairs(rcall("HMGET", jobKey, unpack(attributes))) do
|
||
if (ts) then
|
||
jobTs = ts
|
||
break
|
||
end
|
||
end
|
||
return jobTs
|
||
end
|
||
--[[
|
||
Function to check if the job belongs to a job scheduler and
|
||
current delayed job matches with jobId
|
||
]]
|
||
local function isJobSchedulerJob(jobId, jobKey, jobSchedulersKey)
|
||
local repeatJobKey = rcall("HGET", jobKey, "rjk")
|
||
if repeatJobKey then
|
||
local prevMillis = rcall("ZSCORE", jobSchedulersKey, repeatJobKey)
|
||
if prevMillis then
|
||
local currentDelayedJobId = "repeat:" .. repeatJobKey .. ":" .. prevMillis
|
||
return jobId == currentDelayedJobId
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Function to remove job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function removeJob(jobId, hard, baseKey, shouldRemoveDeduplicationKey)
|
||
local jobKey = baseKey .. jobId
|
||
removeParentDependencyKey(jobKey, hard, nil, baseKey)
|
||
if shouldRemoveDeduplicationKey then
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(baseKey, jobId, deduplicationId)
|
||
end
|
||
removeJobKeys(jobKey)
|
||
end
|
||
local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd,
|
||
timestamp, isWaiting, jobSchedulersKey)
|
||
local jobs = rcall("LRANGE", listKey, rangeStart, rangeEnd)
|
||
local deleted = {}
|
||
local deletedCount = 0
|
||
local jobTS
|
||
local deletionMarker = ''
|
||
local jobIdsLen = #jobs
|
||
for i, job in ipairs(jobs) do
|
||
if limit > 0 and deletedCount >= limit then
|
||
break
|
||
end
|
||
local jobKey = jobKeyPrefix .. job
|
||
if (isWaiting or rcall("EXISTS", jobKey .. ":lock") == 0) and
|
||
not isJobSchedulerJob(job, jobKey, jobSchedulersKey) then
|
||
-- Find the right timestamp of the job to compare to maxTimestamp:
|
||
-- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
|
||
-- * processedOn represents when the job was last attempted, but it doesn't get populated until
|
||
-- the job is first tried
|
||
-- * timestamp is the original job submission time
|
||
-- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs
|
||
-- that have been active within the grace period:
|
||
jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
|
||
if (not jobTS or jobTS <= timestamp) then
|
||
-- replace the entry with a deletion marker; the actual deletion will
|
||
-- occur at the end of the script
|
||
rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
|
||
removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]])
|
||
deletedCount = deletedCount + 1
|
||
table.insert(deleted, job)
|
||
end
|
||
end
|
||
end
|
||
rcall("LREM", listKey, 0, deletionMarker)
|
||
return {deleted, deletedCount}
|
||
end
|
||
--[[
|
||
Function to clean job set.
|
||
Returns jobIds and deleted count number.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to loop in batches.
|
||
Just a bit of warning, some commands as ZREM
|
||
could receive a maximum of 7000 parameters per call.
|
||
]]
|
||
local function batches(n, batchSize)
|
||
local i = 0
|
||
return function()
|
||
local from = i * batchSize + 1
|
||
i = i + 1
|
||
if (from <= n) then
|
||
local to = math.min(from + batchSize - 1, n)
|
||
return from, to
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
We use ZRANGEBYSCORE to make the case where we're deleting a limited number
|
||
of items in a sorted set only run a single iteration. If we simply used
|
||
ZRANGE, we may take a long time traversing through jobs that are within the
|
||
grace period.
|
||
]]
|
||
local function getJobsInZset(zsetKey, rangeEnd, limit)
|
||
if limit > 0 then
|
||
return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd, "LIMIT", 0, limit)
|
||
else
|
||
return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd)
|
||
end
|
||
end
|
||
local function cleanSet(
|
||
setKey,
|
||
jobKeyPrefix,
|
||
rangeEnd,
|
||
timestamp,
|
||
limit,
|
||
attributes,
|
||
isFinished,
|
||
jobSchedulersKey)
|
||
local jobs = getJobsInZset(setKey, rangeEnd, limit)
|
||
local deleted = {}
|
||
local deletedCount = 0
|
||
local jobTS
|
||
for i, job in ipairs(jobs) do
|
||
if limit > 0 and deletedCount >= limit then
|
||
break
|
||
end
|
||
local jobKey = jobKeyPrefix .. job
|
||
-- Extract a Job Scheduler Id from jobId ("repeat:job-scheduler-id:millis")
|
||
-- and check if it is in the scheduled jobs
|
||
if not (jobSchedulersKey and isJobSchedulerJob(job, jobKey, jobSchedulersKey)) then
|
||
if isFinished then
|
||
removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]] )
|
||
deletedCount = deletedCount + 1
|
||
table.insert(deleted, job)
|
||
else
|
||
-- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
|
||
jobTS = getTimestamp(jobKey, attributes)
|
||
if (not jobTS or jobTS <= timestamp) then
|
||
removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]] )
|
||
deletedCount = deletedCount + 1
|
||
table.insert(deleted, job)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
if (#deleted > 0) then
|
||
for from, to in batches(#deleted, 7000) do
|
||
rcall("ZREM", setKey, unpack(deleted, from, to))
|
||
end
|
||
end
|
||
return {deleted, deletedCount}
|
||
end
|
||
local result
|
||
if ARGV[4] == "active" then
|
||
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false --[[ hasFinished ]],
|
||
repeatKey)
|
||
elseif ARGV[4] == "delayed" then
|
||
rangeEnd = "+inf"
|
||
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
||
{"processedOn", "timestamp"}, false --[[ hasFinished ]], repeatKey)
|
||
elseif ARGV[4] == "prioritized" then
|
||
rangeEnd = "+inf"
|
||
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
||
{"timestamp"}, false --[[ hasFinished ]], repeatKey)
|
||
elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
|
||
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true --[[ hasFinished ]],
|
||
repeatKey)
|
||
else
|
||
rangeEnd = ARGV[2]
|
||
-- No need to pass repeat key as in that moment job won't be related to a job scheduler
|
||
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
||
{"finishedOn"}, true --[[ hasFinished ]])
|
||
end
|
||
rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2])
|
||
return result[1]
|
||
`;cg.cleanJobsInSet={name:"cleanJobsInSet",content:jIe,keys:3}});var Zz=h(lg=>{"use strict";Object.defineProperty(lg,"__esModule",{value:!0});lg.drain=void 0;var PIe=`--[[
|
||
Drains the queue, removes all jobs that are waiting
|
||
or delayed, but not active, completed or failed
|
||
Input:
|
||
KEYS[1] 'wait',
|
||
KEYS[2] 'paused'
|
||
KEYS[3] 'delayed'
|
||
KEYS[4] 'prioritized'
|
||
KEYS[5] 'jobschedulers' (repeat)
|
||
ARGV[1] queue key prefix
|
||
ARGV[2] should clean delayed jobs
|
||
]]
|
||
local rcall = redis.call
|
||
local queueBaseKey = ARGV[1]
|
||
--[[
|
||
Functions to remove jobs.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to filter out jobs to ignore from a table.
|
||
]]
|
||
local function filterOutJobsToIgnore(jobs, jobsToIgnore)
|
||
local filteredJobs = {}
|
||
for i = 1, #jobs do
|
||
if not jobsToIgnore[jobs[i]] then
|
||
table.insert(filteredJobs, jobs[i])
|
||
end
|
||
end
|
||
return filteredJobs
|
||
end
|
||
--[[
|
||
Functions to remove jobs.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function removeJob(jobId, hard, baseKey, shouldRemoveDeduplicationKey)
|
||
local jobKey = baseKey .. jobId
|
||
removeParentDependencyKey(jobKey, hard, nil, baseKey)
|
||
if shouldRemoveDeduplicationKey then
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(baseKey, jobId, deduplicationId)
|
||
end
|
||
removeJobKeys(jobKey)
|
||
end
|
||
local function removeJobs(keys, hard, baseKey, max)
|
||
for i, key in ipairs(keys) do
|
||
removeJob(key, hard, baseKey, true --[[remove debounce key]])
|
||
end
|
||
return max - #keys
|
||
end
|
||
local function getListItems(keyName, max)
|
||
return rcall('LRANGE', keyName, 0, max - 1)
|
||
end
|
||
local function removeListJobs(keyName, hard, baseKey, max, jobsToIgnore)
|
||
local jobs = getListItems(keyName, max)
|
||
if jobsToIgnore then
|
||
jobs = filterOutJobsToIgnore(jobs, jobsToIgnore)
|
||
end
|
||
local count = removeJobs(jobs, hard, baseKey, max)
|
||
rcall("LTRIM", keyName, #jobs, -1)
|
||
return count
|
||
end
|
||
-- Includes
|
||
--[[
|
||
Function to loop in batches.
|
||
Just a bit of warning, some commands as ZREM
|
||
could receive a maximum of 7000 parameters per call.
|
||
]]
|
||
local function batches(n, batchSize)
|
||
local i = 0
|
||
return function()
|
||
local from = i * batchSize + 1
|
||
i = i + 1
|
||
if (from <= n) then
|
||
local to = math.min(from + batchSize - 1, n)
|
||
return from, to
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to get ZSet items.
|
||
]]
|
||
local function getZSetItems(keyName, max)
|
||
return rcall('ZRANGE', keyName, 0, max - 1)
|
||
end
|
||
local function removeZSetJobs(keyName, hard, baseKey, max, jobsToIgnore)
|
||
local jobs = getZSetItems(keyName, max)
|
||
if jobsToIgnore then
|
||
jobs = filterOutJobsToIgnore(jobs, jobsToIgnore)
|
||
end
|
||
local count = removeJobs(jobs, hard, baseKey, max)
|
||
if(#jobs > 0) then
|
||
for from, to in batches(#jobs, 7000) do
|
||
rcall("ZREM", keyName, unpack(jobs, from, to))
|
||
end
|
||
end
|
||
return count
|
||
end
|
||
-- We must not remove delayed jobs if they are associated to a job scheduler.
|
||
local scheduledJobs = {}
|
||
local jobSchedulers = rcall("ZRANGE", KEYS[5], 0, -1, "WITHSCORES")
|
||
-- For every job scheduler, get the current delayed job id.
|
||
for i = 1, #jobSchedulers, 2 do
|
||
local jobSchedulerId = jobSchedulers[i]
|
||
local jobSchedulerMillis = jobSchedulers[i + 1]
|
||
local delayedJobId = "repeat:" .. jobSchedulerId .. ":" .. jobSchedulerMillis
|
||
scheduledJobs[delayedJobId] = true
|
||
end
|
||
removeListJobs(KEYS[1], true, queueBaseKey, 0, scheduledJobs) -- wait
|
||
removeListJobs(KEYS[2], true, queueBaseKey, 0, scheduledJobs) -- paused
|
||
if ARGV[2] == "1" then
|
||
removeZSetJobs(KEYS[3], true, queueBaseKey, 0, scheduledJobs) -- delayed
|
||
end
|
||
removeZSetJobs(KEYS[4], true, queueBaseKey, 0, scheduledJobs) -- prioritized
|
||
`;lg.drain={name:"drain",content:PIe,keys:5}});var eG=h(ug=>{"use strict";Object.defineProperty(ug,"__esModule",{value:!0});ug.extendLock=void 0;var KIe=`--[[
|
||
Extend lock and removes the job from the stalled set.
|
||
Input:
|
||
KEYS[1] 'lock',
|
||
KEYS[2] 'stalled'
|
||
ARGV[1] token
|
||
ARGV[2] lock duration in milliseconds
|
||
ARGV[3] jobid
|
||
Output:
|
||
"1" if lock extended successfully.
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("GET", KEYS[1]) == ARGV[1] then
|
||
-- if rcall("SET", KEYS[1], ARGV[1], "PX", ARGV[2], "XX") then
|
||
if rcall("SET", KEYS[1], ARGV[1], "PX", ARGV[2]) then
|
||
rcall("SREM", KEYS[2], ARGV[3])
|
||
return 1
|
||
end
|
||
end
|
||
return 0
|
||
`;ug.extendLock={name:"extendLock",content:KIe,keys:2}});var tG=h(dg=>{"use strict";Object.defineProperty(dg,"__esModule",{value:!0});dg.extendLocks=void 0;var DIe=`--[[
|
||
Extend locks for multiple jobs and remove them from the stalled set if successful.
|
||
Return the list of job IDs for which the operation failed.
|
||
KEYS[1] = stalled key
|
||
ARGV[1] = baseKey
|
||
ARGV[2] = tokens
|
||
ARGV[3] = jobIds
|
||
ARGV[4] = lockDuration (ms)
|
||
Output:
|
||
An array of failed job IDs. If empty, all succeeded.
|
||
]]
|
||
local rcall = redis.call
|
||
local stalledKey = KEYS[1]
|
||
local baseKey = ARGV[1]
|
||
local tokens = cmsgpack.unpack(ARGV[2])
|
||
local jobIds = cmsgpack.unpack(ARGV[3])
|
||
local lockDuration = ARGV[4]
|
||
local jobCount = #jobIds
|
||
local failedJobs = {}
|
||
for i = 1, jobCount, 1 do
|
||
local lockKey = baseKey .. jobIds[i] .. ':lock'
|
||
local jobId = jobIds[i]
|
||
local token = tokens[i]
|
||
local currentToken = rcall("GET", lockKey)
|
||
if currentToken then
|
||
if currentToken == token then
|
||
local setResult = rcall("SET", lockKey, token, "PX", lockDuration)
|
||
if setResult then
|
||
rcall("SREM", stalledKey, jobId)
|
||
else
|
||
table.insert(failedJobs, jobId)
|
||
end
|
||
else
|
||
table.insert(failedJobs, jobId)
|
||
end
|
||
else
|
||
table.insert(failedJobs, jobId)
|
||
end
|
||
end
|
||
return failedJobs
|
||
`;dg.extendLocks={name:"extendLocks",content:DIe,keys:1}});var rG=h(pg=>{"use strict";Object.defineProperty(pg,"__esModule",{value:!0});pg.getCounts=void 0;var MIe=`--[[
|
||
Get counts per provided states
|
||
Input:
|
||
KEYS[1] 'prefix'
|
||
ARGV[1...] types
|
||
]]
|
||
local rcall = redis.call;
|
||
local prefix = KEYS[1]
|
||
local results = {}
|
||
for i = 1, #ARGV do
|
||
local stateKey = prefix .. ARGV[i]
|
||
if ARGV[i] == "wait" or ARGV[i] == "paused" then
|
||
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
||
local marker = rcall("LINDEX", stateKey, -1)
|
||
if marker and string.sub(marker, 1, 2) == "0:" then
|
||
local count = rcall("LLEN", stateKey)
|
||
if count > 1 then
|
||
rcall("RPOP", stateKey)
|
||
results[#results+1] = count-1
|
||
else
|
||
results[#results+1] = 0
|
||
end
|
||
else
|
||
results[#results+1] = rcall("LLEN", stateKey)
|
||
end
|
||
elseif ARGV[i] == "active" then
|
||
results[#results+1] = rcall("LLEN", stateKey)
|
||
else
|
||
results[#results+1] = rcall("ZCARD", stateKey)
|
||
end
|
||
end
|
||
return results
|
||
`;pg.getCounts={name:"getCounts",content:MIe,keys:1}});var nG=h(fg=>{"use strict";Object.defineProperty(fg,"__esModule",{value:!0});fg.getCountsPerPriority=void 0;var NIe=`--[[
|
||
Get counts per provided states
|
||
Input:
|
||
KEYS[1] wait key
|
||
KEYS[2] paused key
|
||
KEYS[3] meta key
|
||
KEYS[4] prioritized key
|
||
ARGV[1...] priorities
|
||
]]
|
||
local rcall = redis.call
|
||
local results = {}
|
||
local waitKey = KEYS[1]
|
||
local pausedKey = KEYS[2]
|
||
local prioritizedKey = KEYS[4]
|
||
-- Includes
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePaused(queueMetaKey)
|
||
return rcall("HEXISTS", queueMetaKey, "paused") == 1
|
||
end
|
||
for i = 1, #ARGV do
|
||
local priority = tonumber(ARGV[i])
|
||
if priority == 0 then
|
||
if isQueuePaused(KEYS[3]) then
|
||
results[#results+1] = rcall("LLEN", pausedKey)
|
||
else
|
||
results[#results+1] = rcall("LLEN", waitKey)
|
||
end
|
||
else
|
||
results[#results+1] = rcall("ZCOUNT", prioritizedKey,
|
||
priority * 0x100000000, (priority + 1) * 0x100000000 - 1)
|
||
end
|
||
end
|
||
return results
|
||
`;fg.getCountsPerPriority={name:"getCountsPerPriority",content:NIe,keys:4}});var iG=h(mg=>{"use strict";Object.defineProperty(mg,"__esModule",{value:!0});mg.getDependencyCounts=void 0;var LIe=`--[[
|
||
Get counts per child states
|
||
Input:
|
||
KEYS[1] processed key
|
||
KEYS[2] unprocessed key
|
||
KEYS[3] ignored key
|
||
KEYS[4] failed key
|
||
ARGV[1...] types
|
||
]]
|
||
local rcall = redis.call;
|
||
local processedKey = KEYS[1]
|
||
local unprocessedKey = KEYS[2]
|
||
local ignoredKey = KEYS[3]
|
||
local failedKey = KEYS[4]
|
||
local results = {}
|
||
for i = 1, #ARGV do
|
||
if ARGV[i] == "processed" then
|
||
results[#results+1] = rcall("HLEN", processedKey)
|
||
elseif ARGV[i] == "unprocessed" then
|
||
results[#results+1] = rcall("SCARD", unprocessedKey)
|
||
elseif ARGV[i] == "ignored" then
|
||
results[#results+1] = rcall("HLEN", ignoredKey)
|
||
else
|
||
results[#results+1] = rcall("ZCARD", failedKey)
|
||
end
|
||
end
|
||
return results
|
||
`;mg.getDependencyCounts={name:"getDependencyCounts",content:LIe,keys:4}});var sG=h(hg=>{"use strict";Object.defineProperty(hg,"__esModule",{value:!0});hg.getJobScheduler=void 0;var qIe=`--[[
|
||
Get job scheduler record.
|
||
Input:
|
||
KEYS[1] 'repeat' key
|
||
ARGV[1] id
|
||
]]
|
||
local rcall = redis.call
|
||
local jobSchedulerKey = KEYS[1] .. ":" .. ARGV[1]
|
||
local score = rcall("ZSCORE", KEYS[1], ARGV[1])
|
||
if score then
|
||
return {rcall("HGETALL", jobSchedulerKey), score} -- get job data
|
||
end
|
||
return {nil, nil}
|
||
`;hg.getJobScheduler={name:"getJobScheduler",content:qIe,keys:1}});var oG=h(yg=>{"use strict";Object.defineProperty(yg,"__esModule",{value:!0});yg.getJobs=void 0;var FIe=`--[[
|
||
Get jobs (id + data) for the provided states.
|
||
Job ids and their hashes are read in the same script so that ids whose hash
|
||
disappears after the id is read (but before the job is loaded) do not appear
|
||
in the result set. Ids without a job hash (for example the deprecated wait
|
||
list marker entry stored in the list) are skipped. For bounded ranges the
|
||
script iterates forward using the range offset as a cursor to backfill
|
||
skipped ids, preserving the requested page size when possible.
|
||
Input:
|
||
KEYS[1] 'prefix'
|
||
ARGV[1] start
|
||
ARGV[2] end
|
||
ARGV[3] asc ('1' | '0')
|
||
ARGV[4] max iterations (backfill bound)
|
||
ARGV[5...] types
|
||
Output:
|
||
results grouped per requested type; each entry is a
|
||
{jobId, {field, value, ...}} tuple
|
||
]]
|
||
local rcall = redis.call
|
||
local prefix = KEYS[1]
|
||
local rangeStart = tonumber(ARGV[1])
|
||
local rangeEnd = tonumber(ARGV[2])
|
||
local asc = ARGV[3] == "1"
|
||
local max_iterations = tonumber(ARGV[4])
|
||
local results = {}
|
||
local function isListType(stateType)
|
||
return stateType == "wait" or stateType == "paused" or stateType == "active"
|
||
end
|
||
-- Fetch a slice of ids for the given state respecting the requested order.
|
||
local function fetchIds(stateKey, stateType, sliceStart, sliceEnd, listLength)
|
||
if isListType(stateType) then
|
||
if asc then
|
||
local modifiedRangeStart
|
||
local modifiedRangeEnd
|
||
if sliceStart == -1 then
|
||
modifiedRangeStart = 0
|
||
else
|
||
modifiedRangeStart = -(sliceStart + 1)
|
||
end
|
||
if sliceEnd == -1 then
|
||
modifiedRangeEnd = 0
|
||
else
|
||
modifiedRangeEnd = -(sliceEnd + 1)
|
||
end
|
||
-- Ascending list slices use negative indexes. When the whole window is
|
||
-- beyond the list length Redis clamps both indexes to 0 and LRANGE would
|
||
-- return the head element, so guard against out-of-range slices with LLEN.
|
||
if listLength ~= nil and sliceStart >= 0 and sliceEnd >= 0 and sliceStart >= listLength then
|
||
return {}
|
||
end
|
||
local ids = rcall("LRANGE", stateKey, modifiedRangeEnd, modifiedRangeStart)
|
||
local reversed = {}
|
||
for i = #ids, 1, -1 do
|
||
reversed[#reversed + 1] = ids[i]
|
||
end
|
||
return reversed
|
||
else
|
||
return rcall("LRANGE", stateKey, sliceStart, sliceEnd)
|
||
end
|
||
else
|
||
if asc then
|
||
return rcall("ZRANGE", stateKey, sliceStart, sliceEnd)
|
||
else
|
||
return rcall("ZREVRANGE", stateKey, sliceStart, sliceEnd)
|
||
end
|
||
end
|
||
end
|
||
-- Fetch the job hash for an id and append it when present.
|
||
local function appendJob(entries, jobId)
|
||
local jobData = rcall("HGETALL", prefix .. jobId)
|
||
if #jobData > 0 then
|
||
entries[#entries + 1] = {jobId, jobData}
|
||
end
|
||
end
|
||
local function cleanupDeprecatedMarker(stateKey, stateType)
|
||
if stateType == "wait" or stateType == "paused" then
|
||
local marker = rcall("LINDEX", stateKey, -1)
|
||
if marker and string.sub(marker, 1, 2) == "0:" then
|
||
local count = rcall("LLEN", stateKey)
|
||
if count > 1 then
|
||
rcall("RPOP", stateKey)
|
||
return count - 1
|
||
end
|
||
return 0
|
||
end
|
||
end
|
||
end
|
||
local function collectJobs(stateKey, stateType)
|
||
local entries = {}
|
||
local listLength
|
||
local cleanedListLength = cleanupDeprecatedMarker(stateKey, stateType)
|
||
if asc and isListType(stateType) and rangeStart >= 0 and rangeEnd >= 0 then
|
||
if cleanedListLength ~= nil then
|
||
listLength = cleanedListLength
|
||
else
|
||
listLength = rcall("LLEN", stateKey)
|
||
end
|
||
end
|
||
-- Unbounded or negative ranges: fetch the exact window and skip missing ids.
|
||
if rangeStart < 0 or rangeEnd < 0 then
|
||
local ids = fetchIds(stateKey, stateType, rangeStart, rangeEnd, listLength)
|
||
for i = 1, #ids do
|
||
appendJob(entries, ids[i])
|
||
end
|
||
return entries
|
||
end
|
||
-- Bounded range: iterate forward to backfill skipped ids.
|
||
local needed = rangeEnd - rangeStart + 1
|
||
local cursor = rangeStart
|
||
local iterations = 0
|
||
while #entries < needed and iterations < max_iterations do
|
||
local ids = fetchIds(stateKey, stateType, cursor, cursor + needed - 1, listLength)
|
||
if #ids == 0 then
|
||
break
|
||
end
|
||
for i = 1, #ids do
|
||
if #entries >= needed then
|
||
break
|
||
end
|
||
appendJob(entries, ids[i])
|
||
end
|
||
cursor = cursor + #ids
|
||
iterations = iterations + 1
|
||
end
|
||
return entries
|
||
end
|
||
for i = 5, #ARGV do
|
||
local stateType = ARGV[i]
|
||
local stateKey = prefix .. stateType
|
||
results[#results + 1] = collectJobs(stateKey, stateType)
|
||
end
|
||
return results
|
||
`;yg.getJobs={name:"getJobs",content:FIe,keys:1}});var aG=h(gg=>{"use strict";Object.defineProperty(gg,"__esModule",{value:!0});gg.getMetrics=void 0;var $Ie=`--[[
|
||
Get metrics
|
||
Input:
|
||
KEYS[1] 'metrics' key
|
||
KEYS[2] 'metrics data' key
|
||
ARGV[1] start index
|
||
ARGV[2] end index
|
||
]]
|
||
local rcall = redis.call;
|
||
local metricsKey = KEYS[1]
|
||
local dataKey = KEYS[2]
|
||
local metrics = rcall("HMGET", metricsKey, "count", "prevTS", "prevCount")
|
||
local data = rcall("LRANGE", dataKey, tonumber(ARGV[1]), tonumber(ARGV[2]))
|
||
local numPoints = rcall("LLEN", dataKey)
|
||
return {metrics, data, numPoints}
|
||
`;gg.getMetrics={name:"getMetrics",content:$Ie,keys:2}});var cG=h(bg=>{"use strict";Object.defineProperty(bg,"__esModule",{value:!0});bg.getRanges=void 0;var UIe=`--[[
|
||
Get job ids per provided states
|
||
Input:
|
||
KEYS[1] 'prefix'
|
||
ARGV[1] start
|
||
ARGV[2] end
|
||
ARGV[3] asc
|
||
ARGV[4...] types
|
||
]]
|
||
local rcall = redis.call
|
||
local prefix = KEYS[1]
|
||
local rangeStart = tonumber(ARGV[1])
|
||
local rangeEnd = tonumber(ARGV[2])
|
||
local asc = ARGV[3]
|
||
local results = {}
|
||
local function getRangeInList(listKey, asc, rangeStart, rangeEnd, results)
|
||
if asc == "1" then
|
||
local modifiedRangeStart
|
||
local modifiedRangeEnd
|
||
if rangeStart == -1 then
|
||
modifiedRangeStart = 0
|
||
else
|
||
modifiedRangeStart = -(rangeStart + 1)
|
||
end
|
||
if rangeEnd == -1 then
|
||
modifiedRangeEnd = 0
|
||
else
|
||
modifiedRangeEnd = -(rangeEnd + 1)
|
||
end
|
||
results[#results+1] = rcall("LRANGE", listKey,
|
||
modifiedRangeEnd,
|
||
modifiedRangeStart)
|
||
else
|
||
results[#results+1] = rcall("LRANGE", listKey, rangeStart, rangeEnd)
|
||
end
|
||
end
|
||
for i = 4, #ARGV do
|
||
local stateKey = prefix .. ARGV[i]
|
||
if ARGV[i] == "wait" or ARGV[i] == "paused" then
|
||
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
||
local marker = rcall("LINDEX", stateKey, -1)
|
||
if marker and string.sub(marker, 1, 2) == "0:" then
|
||
local count = rcall("LLEN", stateKey)
|
||
if count > 1 then
|
||
rcall("RPOP", stateKey)
|
||
getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
|
||
else
|
||
results[#results+1] = {}
|
||
end
|
||
else
|
||
getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
|
||
end
|
||
elseif ARGV[i] == "active" then
|
||
getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
|
||
else
|
||
if asc == "1" then
|
||
results[#results+1] = rcall("ZRANGE", stateKey, rangeStart, rangeEnd)
|
||
else
|
||
results[#results+1] = rcall("ZREVRANGE", stateKey, rangeStart, rangeEnd)
|
||
end
|
||
end
|
||
end
|
||
return results
|
||
`;bg.getRanges={name:"getRanges",content:UIe,keys:1}});var lG=h(vg=>{"use strict";Object.defineProperty(vg,"__esModule",{value:!0});vg.getRateLimitTtl=void 0;var JIe=`--[[
|
||
Get rate limit ttl
|
||
Input:
|
||
KEYS[1] 'limiter'
|
||
KEYS[2] 'meta'
|
||
ARGV[1] maxJobs
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to get current rate limit ttl.
|
||
]]
|
||
local function getRateLimitTTL(maxJobs, rateLimiterKey)
|
||
if maxJobs and maxJobs <= tonumber(rcall("GET", rateLimiterKey) or 0) then
|
||
local pttl = rcall("PTTL", rateLimiterKey)
|
||
if pttl == 0 then
|
||
rcall("DEL", rateLimiterKey)
|
||
end
|
||
if pttl > 0 then
|
||
return pttl
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
local rateLimiterKey = KEYS[1]
|
||
if ARGV[1] ~= "0" then
|
||
return getRateLimitTTL(tonumber(ARGV[1]), rateLimiterKey)
|
||
else
|
||
local rateLimitMax = rcall("HGET", KEYS[2], "max")
|
||
if rateLimitMax then
|
||
return getRateLimitTTL(tonumber(rateLimitMax), rateLimiterKey)
|
||
end
|
||
return rcall("PTTL", rateLimiterKey)
|
||
end
|
||
`;vg.getRateLimitTtl={name:"getRateLimitTtl",content:JIe,keys:2}});var uG=h(Eg=>{"use strict";Object.defineProperty(Eg,"__esModule",{value:!0});Eg.getState=void 0;var zIe=`--[[
|
||
Get a job state
|
||
Input:
|
||
KEYS[1] 'completed' key,
|
||
KEYS[2] 'failed' key
|
||
KEYS[3] 'delayed' key
|
||
KEYS[4] 'active' key
|
||
KEYS[5] 'wait' key
|
||
KEYS[6] 'paused' key
|
||
KEYS[7] 'waiting-children' key
|
||
KEYS[8] 'prioritized' key
|
||
ARGV[1] job id
|
||
Output:
|
||
'completed'
|
||
'failed'
|
||
'delayed'
|
||
'active'
|
||
'prioritized'
|
||
'waiting'
|
||
'waiting-children'
|
||
'unknown'
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("ZSCORE", KEYS[1], ARGV[1]) then
|
||
return "completed"
|
||
end
|
||
if rcall("ZSCORE", KEYS[2], ARGV[1]) then
|
||
return "failed"
|
||
end
|
||
if rcall("ZSCORE", KEYS[3], ARGV[1]) then
|
||
return "delayed"
|
||
end
|
||
if rcall("ZSCORE", KEYS[8], ARGV[1]) then
|
||
return "prioritized"
|
||
end
|
||
-- Includes
|
||
--[[
|
||
Function to check if an item belongs to a list.
|
||
]]
|
||
local function checkItemInList(list, item)
|
||
for _, v in pairs(list) do
|
||
if v == item then
|
||
return 1
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
local active_items = rcall("LRANGE", KEYS[4] , 0, -1)
|
||
if checkItemInList(active_items, ARGV[1]) ~= nil then
|
||
return "active"
|
||
end
|
||
local wait_items = rcall("LRANGE", KEYS[5] , 0, -1)
|
||
if checkItemInList(wait_items, ARGV[1]) ~= nil then
|
||
return "waiting"
|
||
end
|
||
local paused_items = rcall("LRANGE", KEYS[6] , 0, -1)
|
||
if checkItemInList(paused_items, ARGV[1]) ~= nil then
|
||
return "waiting"
|
||
end
|
||
if rcall("ZSCORE", KEYS[7], ARGV[1]) then
|
||
return "waiting-children"
|
||
end
|
||
return "unknown"
|
||
`;Eg.getState={name:"getState",content:zIe,keys:8}});var dG=h(Sg=>{"use strict";Object.defineProperty(Sg,"__esModule",{value:!0});Sg.getStateV2=void 0;var GIe=`--[[
|
||
Get a job state
|
||
Input:
|
||
KEYS[1] 'completed' key,
|
||
KEYS[2] 'failed' key
|
||
KEYS[3] 'delayed' key
|
||
KEYS[4] 'active' key
|
||
KEYS[5] 'wait' key
|
||
KEYS[6] 'paused' key
|
||
KEYS[7] 'waiting-children' key
|
||
KEYS[8] 'prioritized' key
|
||
ARGV[1] job id
|
||
Output:
|
||
'completed'
|
||
'failed'
|
||
'delayed'
|
||
'active'
|
||
'waiting'
|
||
'waiting-children'
|
||
'unknown'
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("ZSCORE", KEYS[1], ARGV[1]) then
|
||
return "completed"
|
||
end
|
||
if rcall("ZSCORE", KEYS[2], ARGV[1]) then
|
||
return "failed"
|
||
end
|
||
if rcall("ZSCORE", KEYS[3], ARGV[1]) then
|
||
return "delayed"
|
||
end
|
||
if rcall("ZSCORE", KEYS[8], ARGV[1]) then
|
||
return "prioritized"
|
||
end
|
||
if rcall("LPOS", KEYS[4] , ARGV[1]) then
|
||
return "active"
|
||
end
|
||
if rcall("LPOS", KEYS[5] , ARGV[1]) then
|
||
return "waiting"
|
||
end
|
||
if rcall("LPOS", KEYS[6] , ARGV[1]) then
|
||
return "waiting"
|
||
end
|
||
if rcall("ZSCORE", KEYS[7] , ARGV[1]) then
|
||
return "waiting-children"
|
||
end
|
||
return "unknown"
|
||
`;Sg.getStateV2={name:"getStateV2",content:GIe,keys:8}});var pG=h(xg=>{"use strict";Object.defineProperty(xg,"__esModule",{value:!0});xg.isFinished=void 0;var BIe=`--[[
|
||
Checks if a job is finished (.i.e. is in the completed or failed set)
|
||
Input:
|
||
KEYS[1] completed key
|
||
KEYS[2] failed key
|
||
KEYS[3] job key
|
||
ARGV[1] job id
|
||
ARGV[2] return value?
|
||
Output:
|
||
0 - Not finished.
|
||
1 - Completed.
|
||
2 - Failed.
|
||
-1 - Missing job.
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("EXISTS", KEYS[3]) ~= 1 then
|
||
if ARGV[2] == "1" then
|
||
return {-1,"Missing key for job " .. KEYS[3] .. ". isFinished"}
|
||
end
|
||
return -1
|
||
end
|
||
if rcall("ZSCORE", KEYS[1], ARGV[1]) then
|
||
if ARGV[2] == "1" then
|
||
local returnValue = rcall("HGET", KEYS[3], "returnvalue")
|
||
return {1,returnValue}
|
||
end
|
||
return 1
|
||
end
|
||
if rcall("ZSCORE", KEYS[2], ARGV[1]) then
|
||
if ARGV[2] == "1" then
|
||
local failedReason = rcall("HGET", KEYS[3], "failedReason")
|
||
return {2,failedReason}
|
||
end
|
||
return 2
|
||
end
|
||
if ARGV[2] == "1" then
|
||
return {0}
|
||
end
|
||
return 0
|
||
`;xg.isFinished={name:"isFinished",content:BIe,keys:3}});var fG=h(wg=>{"use strict";Object.defineProperty(wg,"__esModule",{value:!0});wg.isJobInList=void 0;var HIe=`--[[
|
||
Checks if job is in a given list.
|
||
Input:
|
||
KEYS[1]
|
||
ARGV[1]
|
||
Output:
|
||
1 if element found in the list.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to check if an item belongs to a list.
|
||
]]
|
||
local function checkItemInList(list, item)
|
||
for _, v in pairs(list) do
|
||
if v == item then
|
||
return 1
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
local items = redis.call("LRANGE", KEYS[1] , 0, -1)
|
||
return checkItemInList(items, ARGV[1])
|
||
`;wg.isJobInList={name:"isJobInList",content:HIe,keys:1}});var mG=h(_g=>{"use strict";Object.defineProperty(_g,"__esModule",{value:!0});_g.isMaxed=void 0;var VIe=`--[[
|
||
Checks if queue is maxed.
|
||
Input:
|
||
KEYS[1] meta key
|
||
KEYS[2] active key
|
||
Output:
|
||
1 if element found in the list.
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to check if queue is maxed or not.
|
||
]]
|
||
local function isQueueMaxed(queueMetaKey, activeKey)
|
||
local maxConcurrency = rcall("HGET", queueMetaKey, "concurrency")
|
||
if maxConcurrency then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(maxConcurrency) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
return isQueueMaxed(KEYS[1], KEYS[2])
|
||
`;_g.isMaxed={name:"isMaxed",content:VIe,keys:2}});var hG=h(Ig=>{"use strict";Object.defineProperty(Ig,"__esModule",{value:!0});Ig.moveJobFromActiveToWait=void 0;var WIe=`--[[
|
||
Function to move job from active state to wait.
|
||
Input:
|
||
KEYS[1] active key
|
||
KEYS[2] wait key
|
||
KEYS[3] stalled key
|
||
KEYS[4] paused key
|
||
KEYS[5] meta key
|
||
KEYS[6] limiter key
|
||
KEYS[7] prioritized key
|
||
KEYS[8] marker key
|
||
KEYS[9] event key
|
||
ARGV[1] job id
|
||
ARGV[2] lock token
|
||
ARGV[3] job id key
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to push back job considering priority in front of same prioritized jobs.
|
||
]]
|
||
local function pushBackJobWithPriority(prioritizedKey, priority, jobId)
|
||
-- in order to put it at front of same prioritized jobs
|
||
-- we consider prioritized counter as 0
|
||
local score = priority * 0x100000000
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function removeLock(jobKey, stalledKey, token, jobId)
|
||
if token ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
local lockToken = rcall("GET", lockKey)
|
||
if lockToken == token then
|
||
rcall("DEL", lockKey)
|
||
rcall("SREM", stalledKey, jobId)
|
||
else
|
||
if lockToken then
|
||
-- Lock exists but token does not match
|
||
return -6
|
||
else
|
||
-- Lock is missing completely
|
||
return -2
|
||
end
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
local jobId = ARGV[1]
|
||
local token = ARGV[2]
|
||
local jobKey = ARGV[3]
|
||
if rcall("EXISTS", jobKey) == 0 then
|
||
return -1
|
||
end
|
||
local errorCode = removeLock(jobKey, KEYS[3], token, jobId)
|
||
if errorCode < 0 then
|
||
return errorCode
|
||
end
|
||
local metaKey = KEYS[5]
|
||
local removed = rcall("LREM", KEYS[1], 1, jobId)
|
||
if removed > 0 then
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[1], KEYS[2], KEYS[4])
|
||
local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0
|
||
if priority > 0 then
|
||
pushBackJobWithPriority(KEYS[7], priority, jobId)
|
||
else
|
||
addJobInTargetList(target, KEYS[8], "RPUSH", isPausedOrMaxed, jobId)
|
||
end
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
-- Emit waiting event
|
||
rcall("XADD", KEYS[9], "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", jobId, "prev", "active")
|
||
end
|
||
local pttl = rcall("PTTL", KEYS[6])
|
||
if pttl > 0 then
|
||
return pttl
|
||
else
|
||
return 0
|
||
end
|
||
`;Ig.moveJobFromActiveToWait={name:"moveJobFromActiveToWait",content:WIe,keys:9}});var yG=h(Tg=>{"use strict";Object.defineProperty(Tg,"__esModule",{value:!0});Tg.moveJobsToWait=void 0;var YIe=`--[[
|
||
Move completed, failed or delayed jobs to wait.
|
||
Note: Does not support jobs with priorities.
|
||
Input:
|
||
KEYS[1] base key
|
||
KEYS[2] events stream
|
||
KEYS[3] state key (failed, completed, delayed)
|
||
KEYS[4] 'wait'
|
||
KEYS[5] 'paused'
|
||
KEYS[6] 'meta'
|
||
KEYS[7] 'active'
|
||
KEYS[8] 'marker'
|
||
ARGV[1] count
|
||
ARGV[2] timestamp
|
||
ARGV[3] prev state
|
||
Output:
|
||
1 means the operation is not completed
|
||
0 means the operation is completed
|
||
]]
|
||
local maxCount = tonumber(ARGV[1])
|
||
local timestamp = tonumber(ARGV[2])
|
||
local rcall = redis.call;
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
--[[
|
||
Function to loop in batches.
|
||
Just a bit of warning, some commands as ZREM
|
||
could receive a maximum of 7000 parameters per call.
|
||
]]
|
||
local function batches(n, batchSize)
|
||
local i = 0
|
||
return function()
|
||
local from = i * batchSize + 1
|
||
i = i + 1
|
||
if (from <= n) then
|
||
local to = math.min(from + batchSize - 1, n)
|
||
return from, to
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local metaKey = KEYS[6]
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[7], KEYS[4], KEYS[5])
|
||
local jobs = rcall('ZRANGEBYSCORE', KEYS[3], 0, timestamp, 'LIMIT', 0, maxCount)
|
||
if (#jobs > 0) then
|
||
if ARGV[3] == "failed" then
|
||
for i, key in ipairs(jobs) do
|
||
local jobKey = KEYS[1] .. key
|
||
rcall("HDEL", jobKey, "finishedOn", "processedOn", "failedReason")
|
||
end
|
||
elseif ARGV[3] == "completed" then
|
||
for i, key in ipairs(jobs) do
|
||
local jobKey = KEYS[1] .. key
|
||
rcall("HDEL", jobKey, "finishedOn", "processedOn", "returnvalue")
|
||
end
|
||
end
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
for i, key in ipairs(jobs) do
|
||
-- Emit waiting event
|
||
rcall("XADD", KEYS[2], "MAXLEN", "~", maxEvents, "*", "event",
|
||
"waiting", "jobId", key, "prev", ARGV[3]);
|
||
end
|
||
for from, to in batches(#jobs, 7000) do
|
||
rcall("ZREM", KEYS[3], unpack(jobs, from, to))
|
||
rcall("LPUSH", target, unpack(jobs, from, to))
|
||
end
|
||
addBaseMarkerIfNeeded(KEYS[8], isPausedOrMaxed)
|
||
end
|
||
maxCount = maxCount - #jobs
|
||
if (maxCount <= 0) then return 1 end
|
||
return 0
|
||
`;Tg.moveJobsToWait={name:"moveJobsToWait",content:YIe,keys:8}});var gG=h(kg=>{"use strict";Object.defineProperty(kg,"__esModule",{value:!0});kg.moveStalledJobsToWait=void 0;var QIe=`--[[
|
||
Move stalled jobs to wait.
|
||
Input:
|
||
KEYS[1] 'stalled' (SET)
|
||
KEYS[2] 'wait', (LIST)
|
||
KEYS[3] 'active', (LIST)
|
||
KEYS[4] 'stalled-check', (KEY)
|
||
KEYS[5] 'meta', (KEY)
|
||
KEYS[6] 'paused', (LIST)
|
||
KEYS[7] 'marker'
|
||
KEYS[8] 'event stream' (STREAM)
|
||
KEYS[9] 'repeat' key
|
||
ARGV[1] Max stalled job count
|
||
ARGV[2] queue.toKey('')
|
||
ARGV[3] timestamp
|
||
ARGV[4] max check time
|
||
Events:
|
||
'stalled' with stalled job id.
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to loop in batches.
|
||
Just a bit of warning, some commands as ZREM
|
||
could receive a maximum of 7000 parameters per call.
|
||
]]
|
||
local function batches(n, batchSize)
|
||
local i = 0
|
||
return function()
|
||
local from = i * batchSize + 1
|
||
i = i + 1
|
||
if (from <= n) then
|
||
local to = math.min(from + batchSize - 1, n)
|
||
return from, to
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to move job to wait to be picked up by a waiting worker.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function moveJobToWait(metaKey, activeKey, waitKey, pausedKey, markerKey, eventStreamKey,
|
||
jobId, pushCmd)
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, activeKey, waitKey, pausedKey)
|
||
addJobInTargetList(target, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId", jobId, 'prev', 'active')
|
||
end
|
||
--[[
|
||
Function to trim events, default 10000.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
local function trimEvents(metaKey, eventStreamKey)
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
if maxEvents then
|
||
rcall("XTRIM", eventStreamKey, "MAXLEN", "~", maxEvents)
|
||
else
|
||
rcall("XTRIM", eventStreamKey, "MAXLEN", "~", 10000)
|
||
end
|
||
end
|
||
local stalledKey = KEYS[1]
|
||
local waitKey = KEYS[2]
|
||
local activeKey = KEYS[3]
|
||
local stalledCheckKey = KEYS[4]
|
||
local metaKey = KEYS[5]
|
||
local pausedKey = KEYS[6]
|
||
local markerKey = KEYS[7]
|
||
local eventStreamKey = KEYS[8]
|
||
local repeatKey = KEYS[9]
|
||
local maxStalledJobCount = tonumber(ARGV[1])
|
||
local queueKeyPrefix = ARGV[2]
|
||
local timestamp = ARGV[3]
|
||
local maxCheckTime = ARGV[4]
|
||
if rcall("EXISTS", stalledCheckKey) == 1 then
|
||
return {}
|
||
end
|
||
rcall("SET", stalledCheckKey, timestamp, "PX", maxCheckTime)
|
||
-- Trim events before emitting them to avoid trimming events emitted in this script
|
||
trimEvents(metaKey, eventStreamKey)
|
||
-- Move all stalled jobs to wait
|
||
local stalling = rcall('SMEMBERS', stalledKey)
|
||
local stalled = {}
|
||
if (#stalling > 0) then
|
||
rcall('DEL', stalledKey)
|
||
-- Remove from active list
|
||
for i, jobId in ipairs(stalling) do
|
||
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
||
if string.sub(jobId, 1, 2) == "0:" then
|
||
-- If the jobId is a delay marker ID we just remove it.
|
||
rcall("LREM", activeKey, 1, jobId)
|
||
else
|
||
local jobKey = queueKeyPrefix .. jobId
|
||
-- Check that the lock is also missing, then we can handle this job as really stalled.
|
||
if (rcall("EXISTS", jobKey .. ":lock") == 0) then
|
||
-- Remove from the active queue.
|
||
local removed = rcall("LREM", activeKey, 1, jobId)
|
||
if (removed > 0) then
|
||
-- If this job has been stalled too many times, such as if it crashes the worker, then fail it.
|
||
local stalledCount = rcall("HINCRBY", jobKey, "stc", 1)
|
||
-- Check if this is a repeatable job by looking at job options
|
||
local jobSchedulerId = rcall("HGET", jobKey, "rjk")
|
||
local isRepeatableJob = false
|
||
if jobSchedulerId then
|
||
local schedulerKey = repeatKey .. ":" .. jobSchedulerId
|
||
if rcall("EXISTS", schedulerKey) == 1 then
|
||
isRepeatableJob = true
|
||
else
|
||
-- TODO: remove this check in v6, as it is only needed for legacy repeatable jobs
|
||
-- that stored the scheduler id in the job key but did not create the scheduler hash key
|
||
local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
|
||
if prevMillis then
|
||
isRepeatableJob = true
|
||
end
|
||
end
|
||
end
|
||
-- Only fail job if it exceeds stall limit AND is not a repeatable job
|
||
if stalledCount > maxStalledJobCount and not isRepeatableJob then
|
||
local failedReason = "job stalled more than allowable limit"
|
||
rcall("HSET", jobKey, "defa", failedReason)
|
||
end
|
||
moveJobToWait(metaKey, activeKey, waitKey, pausedKey, markerKey, eventStreamKey, jobId,
|
||
"RPUSH")
|
||
-- Emit the stalled event
|
||
rcall("XADD", eventStreamKey, "*", "event", "stalled", "jobId", jobId)
|
||
table.insert(stalled, jobId)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
-- Mark potentially stalled jobs
|
||
local active = rcall('LRANGE', activeKey, 0, -1)
|
||
if (#active > 0) then
|
||
for from, to in batches(#active, 7000) do
|
||
rcall('SADD', stalledKey, unpack(active, from, to))
|
||
end
|
||
end
|
||
return stalled
|
||
`;kg.moveStalledJobsToWait={name:"moveStalledJobsToWait",content:QIe,keys:9}});var bG=h(Ag=>{"use strict";Object.defineProperty(Ag,"__esModule",{value:!0});Ag.moveToActive=void 0;var XIe=`--[[
|
||
Move next job to be processed to active, lock it and fetch its data. The job
|
||
may be delayed, in that case we need to move it to the delayed set instead.
|
||
This operation guarantees that the worker owns the job during the lock
|
||
expiration time. The worker is responsible of keeping the lock fresh
|
||
so that no other worker picks this job again.
|
||
Input:
|
||
KEYS[1] wait key
|
||
KEYS[2] active key
|
||
KEYS[3] prioritized key
|
||
KEYS[4] stream events key
|
||
KEYS[5] stalled key
|
||
-- Rate limiting
|
||
KEYS[6] rate limiter key
|
||
KEYS[7] delayed key
|
||
-- Delayed jobs
|
||
KEYS[8] paused key
|
||
KEYS[9] meta key
|
||
KEYS[10] pc priority counter
|
||
-- Marker
|
||
KEYS[11] marker key
|
||
-- Arguments
|
||
ARGV[1] key prefix
|
||
ARGV[2] timestamp
|
||
ARGV[3] opts
|
||
opts - token - lock token
|
||
opts - lockDuration
|
||
opts - limiter
|
||
opts - name - worker name
|
||
]]
|
||
local rcall = redis.call
|
||
local waitKey = KEYS[1]
|
||
local activeKey = KEYS[2]
|
||
local eventStreamKey = KEYS[4]
|
||
local rateLimiterKey = KEYS[6]
|
||
local delayedKey = KEYS[7]
|
||
local opts = cmsgpack.unpack(ARGV[3])
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to get current rate limit ttl.
|
||
]]
|
||
local function getRateLimitTTL(maxJobs, rateLimiterKey)
|
||
if maxJobs and maxJobs <= tonumber(rcall("GET", rateLimiterKey) or 0) then
|
||
local pttl = rcall("PTTL", rateLimiterKey)
|
||
if pttl == 0 then
|
||
rcall("DEL", rateLimiterKey)
|
||
end
|
||
if pttl > 0 then
|
||
return pttl
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to move job from prioritized state to active.
|
||
]]
|
||
local function moveJobFromPrioritizedToActive(priorityKey, activeKey, priorityCounterKey)
|
||
local prioritizedJob = rcall("ZPOPMIN", priorityKey)
|
||
if #prioritizedJob > 0 then
|
||
rcall("LPUSH", activeKey, prioritizedJob[1])
|
||
return prioritizedJob[1]
|
||
else
|
||
rcall("DEL", priorityCounterKey)
|
||
end
|
||
end
|
||
--[[
|
||
Function to move job from wait state to active.
|
||
Input:
|
||
opts - token - lock token
|
||
opts - lockDuration
|
||
opts - limiter
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function prepareJobForProcessing(keyPrefix, rateLimiterKey, eventStreamKey,
|
||
jobId, processedOn, maxJobs, limiterDuration, markerKey, opts)
|
||
local jobKey = keyPrefix .. jobId
|
||
-- Check if we need to perform rate limiting.
|
||
if maxJobs then
|
||
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
||
if jobCounter == 1 then
|
||
local integerDuration = math.floor(math.abs(limiterDuration))
|
||
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
||
end
|
||
end
|
||
-- get a lock
|
||
if opts['token'] ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration'])
|
||
end
|
||
local optionalValues = {}
|
||
if opts['name'] then
|
||
-- Set "processedBy" field to the worker name
|
||
table.insert(optionalValues, "pb")
|
||
table.insert(optionalValues, opts['name'])
|
||
end
|
||
rcall("XADD", eventStreamKey, "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
||
rcall("HMSET", jobKey, "processedOn", processedOn, unpack(optionalValues))
|
||
rcall("HINCRBY", jobKey, "ats", 1)
|
||
addBaseMarkerIfNeeded(markerKey, false)
|
||
-- rate limit delay must be 0 in this case to prevent adding more delay
|
||
-- when job that is moved to active needs to be processed
|
||
return {rcall("HGETALL", jobKey), jobId, 0, 0} -- get job data
|
||
end
|
||
--[[
|
||
Updates the delay set, by moving delayed jobs that should
|
||
be processed now to "wait".
|
||
Events:
|
||
'waiting'
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
-- Try to get as much as 1000 jobs at once
|
||
local function promoteDelayedJobs(delayedKey, markerKey, targetKey, prioritizedKey,
|
||
eventStreamKey, prefix, timestamp, priorityCounterKey, isPaused)
|
||
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000 - 1, "LIMIT", 0, 1000)
|
||
if (#jobs > 0) then
|
||
rcall("ZREM", delayedKey, unpack(jobs))
|
||
for _, jobId in ipairs(jobs) do
|
||
local jobKey = prefix .. jobId
|
||
local priority =
|
||
tonumber(rcall("HGET", jobKey, "priority")) or 0
|
||
if priority == 0 then
|
||
-- LIFO or FIFO
|
||
rcall("LPUSH", targetKey, jobId)
|
||
else
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
end
|
||
-- Emit waiting event
|
||
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
||
jobId, "prev", "delayed")
|
||
rcall("HSET", jobKey, "delay", 0)
|
||
end
|
||
addBaseMarkerIfNeeded(markerKey, isPaused)
|
||
end
|
||
end
|
||
local target, isPausedOrMaxed, rateLimitMax, rateLimitDuration = getTargetQueueList(KEYS[9],
|
||
activeKey, waitKey, KEYS[8])
|
||
-- Check if there are delayed jobs that we can move to wait.
|
||
local markerKey = KEYS[11]
|
||
promoteDelayedJobs(delayedKey, markerKey, target, KEYS[3], eventStreamKey, ARGV[1],
|
||
ARGV[2], KEYS[10], isPausedOrMaxed)
|
||
local maxJobs = tonumber(rateLimitMax or (opts['limiter'] and opts['limiter']['max']))
|
||
local expireTime = getRateLimitTTL(maxJobs, rateLimiterKey)
|
||
-- Check if we are rate limited first.
|
||
if expireTime > 0 then return {0, 0, expireTime, 0} end
|
||
-- paused or maxed queue
|
||
if isPausedOrMaxed then return {0, 0, 0, 0} end
|
||
local limiterDuration = (opts['limiter'] and opts['limiter']['duration']) or rateLimitDuration
|
||
-- no job ID, try non-blocking move from wait to active
|
||
local jobId = rcall("RPOPLPUSH", waitKey, activeKey)
|
||
-- Markers in waitlist DEPRECATED in v5: Will be completely removed in v6.
|
||
if jobId and string.sub(jobId, 1, 2) == "0:" then
|
||
rcall("LREM", activeKey, 1, jobId)
|
||
jobId = rcall("RPOPLPUSH", waitKey, activeKey)
|
||
end
|
||
if jobId then
|
||
return prepareJobForProcessing(ARGV[1], rateLimiterKey, eventStreamKey, jobId, ARGV[2],
|
||
maxJobs, limiterDuration, markerKey, opts)
|
||
else
|
||
jobId = moveJobFromPrioritizedToActive(KEYS[3], activeKey, KEYS[10])
|
||
if jobId then
|
||
return prepareJobForProcessing(ARGV[1], rateLimiterKey, eventStreamKey, jobId, ARGV[2],
|
||
maxJobs, limiterDuration, markerKey, opts)
|
||
end
|
||
end
|
||
-- Return the timestamp for the next delayed job if any.
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then return {0, 0, 0, nextTimestamp} end
|
||
return {0, 0, 0, 0}
|
||
`;Ag.moveToActive={name:"moveToActive",content:XIe,keys:11}});var vG=h(Rg=>{"use strict";Object.defineProperty(Rg,"__esModule",{value:!0});Rg.moveToDelayed=void 0;var ZIe=`--[[
|
||
Moves job from active to delayed set.
|
||
Input:
|
||
KEYS[1] marker key
|
||
KEYS[2] active key
|
||
KEYS[3] prioritized key
|
||
KEYS[4] delayed key
|
||
KEYS[5] job key
|
||
KEYS[6] events stream
|
||
KEYS[7] meta key
|
||
KEYS[8] stalled key
|
||
KEYS[9] wait key
|
||
KEYS[10] rate limiter key
|
||
KEYS[11] paused key
|
||
KEYS[12] pc priority counter
|
||
ARGV[1] key prefix
|
||
ARGV[2] timestamp
|
||
ARGV[3] the id of the job
|
||
ARGV[4] queue token
|
||
ARGV[5] delay value
|
||
ARGV[6] skip attempt
|
||
ARGV[7] optional job fields to update
|
||
ARGV[8] fetch next?
|
||
ARGV[9] opts
|
||
Output:
|
||
0 - OK
|
||
-1 - Missing job.
|
||
-3 - Job not in active set.
|
||
Events:
|
||
- delayed key.
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Function to fetch the next job to process.
|
||
Tries to get the next job to avoid an extra roundtrip if the queue is
|
||
not closing and not rate limited.
|
||
Input:
|
||
waitKey - wait list key
|
||
activeKey - active list key
|
||
prioritizedKey - prioritized sorted set key
|
||
eventStreamKey - event stream key
|
||
rateLimiterKey - rate limiter key
|
||
delayedKey - delayed sorted set key
|
||
pausedKey - paused list key
|
||
metaKey - meta hash key
|
||
pcKey - priority counter key
|
||
markerKey - marker key
|
||
prefix - keys prefix
|
||
timestamp - current timestamp
|
||
opts - options table:
|
||
token (required) - lock token used when locking jobs
|
||
lockDuration (required) - lock duration for acquired jobs
|
||
limiter (optional) - rate limiter options table (e.g. { max = number })
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get current rate limit ttl.
|
||
]]
|
||
local function getRateLimitTTL(maxJobs, rateLimiterKey)
|
||
if maxJobs and maxJobs <= tonumber(rcall("GET", rateLimiterKey) or 0) then
|
||
local pttl = rcall("PTTL", rateLimiterKey)
|
||
if pttl == 0 then
|
||
rcall("DEL", rateLimiterKey)
|
||
end
|
||
if pttl > 0 then
|
||
return pttl
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to move job from prioritized state to active.
|
||
]]
|
||
local function moveJobFromPrioritizedToActive(priorityKey, activeKey, priorityCounterKey)
|
||
local prioritizedJob = rcall("ZPOPMIN", priorityKey)
|
||
if #prioritizedJob > 0 then
|
||
rcall("LPUSH", activeKey, prioritizedJob[1])
|
||
return prioritizedJob[1]
|
||
else
|
||
rcall("DEL", priorityCounterKey)
|
||
end
|
||
end
|
||
--[[
|
||
Function to move job from wait state to active.
|
||
Input:
|
||
opts - token - lock token
|
||
opts - lockDuration
|
||
opts - limiter
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function prepareJobForProcessing(keyPrefix, rateLimiterKey, eventStreamKey,
|
||
jobId, processedOn, maxJobs, limiterDuration, markerKey, opts)
|
||
local jobKey = keyPrefix .. jobId
|
||
-- Check if we need to perform rate limiting.
|
||
if maxJobs then
|
||
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
||
if jobCounter == 1 then
|
||
local integerDuration = math.floor(math.abs(limiterDuration))
|
||
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
||
end
|
||
end
|
||
-- get a lock
|
||
if opts['token'] ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration'])
|
||
end
|
||
local optionalValues = {}
|
||
if opts['name'] then
|
||
-- Set "processedBy" field to the worker name
|
||
table.insert(optionalValues, "pb")
|
||
table.insert(optionalValues, opts['name'])
|
||
end
|
||
rcall("XADD", eventStreamKey, "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
||
rcall("HMSET", jobKey, "processedOn", processedOn, unpack(optionalValues))
|
||
rcall("HINCRBY", jobKey, "ats", 1)
|
||
addBaseMarkerIfNeeded(markerKey, false)
|
||
-- rate limit delay must be 0 in this case to prevent adding more delay
|
||
-- when job that is moved to active needs to be processed
|
||
return {rcall("HGETALL", jobKey), jobId, 0, 0} -- get job data
|
||
end
|
||
--[[
|
||
Updates the delay set, by moving delayed jobs that should
|
||
be processed now to "wait".
|
||
Events:
|
||
'waiting'
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
-- Try to get as much as 1000 jobs at once
|
||
local function promoteDelayedJobs(delayedKey, markerKey, targetKey, prioritizedKey,
|
||
eventStreamKey, prefix, timestamp, priorityCounterKey, isPaused)
|
||
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000 - 1, "LIMIT", 0, 1000)
|
||
if (#jobs > 0) then
|
||
rcall("ZREM", delayedKey, unpack(jobs))
|
||
for _, jobId in ipairs(jobs) do
|
||
local jobKey = prefix .. jobId
|
||
local priority =
|
||
tonumber(rcall("HGET", jobKey, "priority")) or 0
|
||
if priority == 0 then
|
||
-- LIFO or FIFO
|
||
rcall("LPUSH", targetKey, jobId)
|
||
else
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
end
|
||
-- Emit waiting event
|
||
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
||
jobId, "prev", "delayed")
|
||
rcall("HSET", jobKey, "delay", 0)
|
||
end
|
||
addBaseMarkerIfNeeded(markerKey, isPaused)
|
||
end
|
||
end
|
||
local function fetchNextJob(waitKey, activeKey, prioritizedKey, eventStreamKey,
|
||
rateLimiterKey, delayedKey, pausedKey, metaKey, pcKey, markerKey, prefix,
|
||
timestamp, opts)
|
||
local target, isPausedOrMaxed, rateLimitMax, rateLimitDuration =
|
||
getTargetQueueList(metaKey, activeKey, waitKey, pausedKey)
|
||
-- Check if there are delayed jobs that can be promoted
|
||
promoteDelayedJobs(delayedKey, markerKey, target, prioritizedKey,
|
||
eventStreamKey, prefix, timestamp, pcKey, isPausedOrMaxed)
|
||
local maxJobs = tonumber(rateLimitMax or (opts['limiter'] and opts['limiter']['max']))
|
||
-- Check if we are rate limited first.
|
||
local expireTime = getRateLimitTTL(maxJobs, rateLimiterKey)
|
||
if expireTime > 0 then
|
||
return {0, 0, expireTime, 0}
|
||
end
|
||
-- paused or maxed queue
|
||
if isPausedOrMaxed then
|
||
return {0, 0, 0, 0}
|
||
end
|
||
local limiterDuration = (opts['limiter'] and opts['limiter']['duration']) or rateLimitDuration
|
||
local jobId = rcall("RPOPLPUSH", waitKey, activeKey)
|
||
if jobId then
|
||
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
||
if string.sub(jobId, 1, 2) == "0:" then
|
||
rcall("LREM", activeKey, 1, jobId)
|
||
-- If jobId is special ID 0:delay (delay greater than 0), then there is no job to process
|
||
-- but if ID is 0:0, then there is at least 1 prioritized job to process
|
||
if jobId == "0:0" then
|
||
jobId = moveJobFromPrioritizedToActive(prioritizedKey, activeKey, pcKey)
|
||
return prepareJobForProcessing(prefix, rateLimiterKey,
|
||
eventStreamKey, jobId, timestamp, maxJobs,
|
||
limiterDuration, markerKey, opts)
|
||
end
|
||
else
|
||
return prepareJobForProcessing(prefix, rateLimiterKey,
|
||
eventStreamKey, jobId, timestamp, maxJobs,
|
||
limiterDuration, markerKey, opts)
|
||
end
|
||
else
|
||
jobId = moveJobFromPrioritizedToActive(prioritizedKey, activeKey, pcKey)
|
||
if jobId then
|
||
return prepareJobForProcessing(prefix, rateLimiterKey,
|
||
eventStreamKey, jobId, timestamp, maxJobs,
|
||
limiterDuration, markerKey, opts)
|
||
end
|
||
end
|
||
-- Return the timestamp for the next delayed job if any.
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- The result is guaranteed to be positive, since the
|
||
-- ZRANGEBYSCORE command would have return a job otherwise.
|
||
return {0, 0, 0, nextTimestamp}
|
||
end
|
||
end
|
||
--[[
|
||
Bake in the job id first 12 bits into the timestamp
|
||
to guarantee correct execution order of delayed jobs
|
||
(up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
|
||
WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
|
||
]]
|
||
local function getDelayedScore(delayedKey, timestamp, delay)
|
||
local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
|
||
local minScore = delayedTimestamp * 0x1000
|
||
local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
|
||
local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
|
||
minScore, "WITHSCORES","LIMIT", 0, 1)
|
||
if #result then
|
||
local currentMaxScore = tonumber(result[2])
|
||
if currentMaxScore ~= nil then
|
||
if currentMaxScore >= maxScore then
|
||
return maxScore, delayedTimestamp
|
||
else
|
||
return currentMaxScore + 1, delayedTimestamp
|
||
end
|
||
end
|
||
end
|
||
return minScore, delayedTimestamp
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
local function removeLock(jobKey, stalledKey, token, jobId)
|
||
if token ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
local lockToken = rcall("GET", lockKey)
|
||
if lockToken == token then
|
||
rcall("DEL", lockKey)
|
||
rcall("SREM", stalledKey, jobId)
|
||
else
|
||
if lockToken then
|
||
-- Lock exists but token does not match
|
||
return -6
|
||
else
|
||
-- Lock is missing completely
|
||
return -2
|
||
end
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
--[[
|
||
Function to update a bunch of fields in a job.
|
||
]]
|
||
local function updateJobFields(jobKey, msgpackedFields)
|
||
if msgpackedFields and #msgpackedFields > 0 then
|
||
local fieldsToUpdate = cmsgpack.unpack(msgpackedFields)
|
||
if fieldsToUpdate then
|
||
rcall("HMSET", jobKey, unpack(fieldsToUpdate))
|
||
end
|
||
end
|
||
end
|
||
local jobKey = KEYS[5]
|
||
local markerKey = KEYS[1]
|
||
local metaKey = KEYS[7]
|
||
local token = ARGV[4]
|
||
if rcall("EXISTS", jobKey) == 1 then
|
||
local errorCode = removeLock(jobKey, KEYS[8], token, ARGV[3])
|
||
if errorCode < 0 then
|
||
return errorCode
|
||
end
|
||
updateJobFields(jobKey, ARGV[7])
|
||
local delayedKey = KEYS[4]
|
||
local jobId = ARGV[3]
|
||
local delay = tonumber(ARGV[5])
|
||
local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId)
|
||
if numRemovedElements < 1 then return -3 end
|
||
local score, delayedTimestamp = getDelayedScore(delayedKey, ARGV[2], delay)
|
||
if ARGV[6] == "0" then
|
||
rcall("HINCRBY", jobKey, "atm", 1)
|
||
end
|
||
rcall("HSET", jobKey, "delay", ARGV[5])
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
rcall("ZADD", delayedKey, score, jobId)
|
||
rcall("XADD", KEYS[6], "MAXLEN", "~", maxEvents, "*", "event", "delayed",
|
||
"jobId", jobId, "delay", delayedTimestamp)
|
||
-- Try to get next job to avoid an extra roundtrip if the queue is not closing,
|
||
-- and not rate limited.
|
||
if (ARGV[8] == "1") then
|
||
local opts = cmsgpack.unpack(ARGV[9])
|
||
local result = fetchNextJob(KEYS[9], KEYS[2], KEYS[3], KEYS[6],
|
||
KEYS[10], KEYS[4], KEYS[11], metaKey, KEYS[12], markerKey,
|
||
ARGV[1], ARGV[2], opts)
|
||
if result and type(result[1]) == "table" then
|
||
return result
|
||
end
|
||
end
|
||
-- Check if we need to push a marker job to wake up sleeping workers.
|
||
addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
return 0
|
||
else
|
||
return -1
|
||
end
|
||
`;Rg.moveToDelayed={name:"moveToDelayed",content:ZIe,keys:12}});var EG=h(Og=>{"use strict";Object.defineProperty(Og,"__esModule",{value:!0});Og.moveToFinished=void 0;var e1e=`--[[
|
||
Move job from active to a finished status (completed or failed)
|
||
A job can only be moved to completed if it was active.
|
||
The job must be locked before it can be moved to a finished status,
|
||
and the lock must be released in this script.
|
||
Input:
|
||
KEYS[1] wait key
|
||
KEYS[2] active key
|
||
KEYS[3] prioritized key
|
||
KEYS[4] event stream key
|
||
KEYS[5] stalled key
|
||
-- Rate limiting
|
||
KEYS[6] rate limiter key
|
||
KEYS[7] delayed key
|
||
KEYS[8] paused key
|
||
KEYS[9] meta key
|
||
KEYS[10] pc priority counter
|
||
KEYS[11] completed/failed key
|
||
KEYS[12] jobId key
|
||
KEYS[13] metrics key
|
||
KEYS[14] marker key
|
||
ARGV[1] jobId
|
||
ARGV[2] timestamp
|
||
ARGV[3] msg property returnvalue / failedReason
|
||
ARGV[4] return value / failed reason
|
||
ARGV[5] target (completed/failed)
|
||
ARGV[6] fetch next?
|
||
ARGV[7] keys prefix
|
||
ARGV[8] opts
|
||
ARGV[9] job fields to update
|
||
opts - token - lock token
|
||
opts - keepJobs
|
||
opts - lockDuration - lock duration in milliseconds
|
||
opts - attempts max attempts
|
||
opts - maxMetricsSize
|
||
opts - fpof - fail parent on fail
|
||
opts - cpof - continue parent on fail
|
||
opts - idof - ignore dependency on fail
|
||
opts - rdof - remove dependency on fail
|
||
opts - name - worker name
|
||
Output:
|
||
0 OK
|
||
-1 Missing key.
|
||
-2 Missing lock.
|
||
-3 Job not in active set
|
||
-4 Job has pending children
|
||
-6 Lock is not owned by this client
|
||
-9 Job has failed children
|
||
Events:
|
||
'completed/failed'
|
||
]]
|
||
local rcall = redis.call
|
||
--- Includes
|
||
--[[
|
||
Functions to collect metrics based on a current and previous count of jobs.
|
||
Granularity is fixed at 1 minute.
|
||
]]
|
||
--[[
|
||
Function to loop in batches.
|
||
Just a bit of warning, some commands as ZREM
|
||
could receive a maximum of 7000 parameters per call.
|
||
]]
|
||
local function batches(n, batchSize)
|
||
local i = 0
|
||
return function()
|
||
local from = i * batchSize + 1
|
||
i = i + 1
|
||
if (from <= n) then
|
||
local to = math.min(from + batchSize - 1, n)
|
||
return from, to
|
||
end
|
||
end
|
||
end
|
||
local function collectMetrics(metaKey, dataPointsList, maxDataPoints,
|
||
timestamp)
|
||
-- Increment current count
|
||
local count = rcall("HINCRBY", metaKey, "count", 1) - 1
|
||
-- Compute how many data points we need to add to the list, N.
|
||
local prevTS = rcall("HGET", metaKey, "prevTS")
|
||
if not prevTS then
|
||
-- If prevTS is nil, set it to the current timestamp
|
||
rcall("HSET", metaKey, "prevTS", timestamp, "prevCount", 0)
|
||
return
|
||
end
|
||
local N = math.min(math.floor(timestamp / 60000) - math.floor(prevTS / 60000), tonumber(maxDataPoints))
|
||
if N > 0 then
|
||
local delta = count - rcall("HGET", metaKey, "prevCount")
|
||
-- If N > 1, add N-1 zeros to the list
|
||
if N > 1 then
|
||
local points = {}
|
||
points[1] = delta
|
||
for i = 2, N do
|
||
points[i] = 0
|
||
end
|
||
for from, to in batches(#points, 7000) do
|
||
rcall("LPUSH", dataPointsList, unpack(points, from, to))
|
||
end
|
||
else
|
||
-- LPUSH delta to the list
|
||
rcall("LPUSH", dataPointsList, delta)
|
||
end
|
||
-- LTRIM to keep list to its max size
|
||
rcall("LTRIM", dataPointsList, 0, maxDataPoints - 1)
|
||
-- update prev count with current count
|
||
rcall("HSET", metaKey, "prevCount", count, "prevTS", timestamp)
|
||
end
|
||
end
|
||
--[[
|
||
Function to fetch the next job to process.
|
||
Tries to get the next job to avoid an extra roundtrip if the queue is
|
||
not closing and not rate limited.
|
||
Input:
|
||
waitKey - wait list key
|
||
activeKey - active list key
|
||
prioritizedKey - prioritized sorted set key
|
||
eventStreamKey - event stream key
|
||
rateLimiterKey - rate limiter key
|
||
delayedKey - delayed sorted set key
|
||
pausedKey - paused list key
|
||
metaKey - meta hash key
|
||
pcKey - priority counter key
|
||
markerKey - marker key
|
||
prefix - keys prefix
|
||
timestamp - current timestamp
|
||
opts - options table:
|
||
token (required) - lock token used when locking jobs
|
||
lockDuration (required) - lock duration for acquired jobs
|
||
limiter (optional) - rate limiter options table (e.g. { max = number })
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to get current rate limit ttl.
|
||
]]
|
||
local function getRateLimitTTL(maxJobs, rateLimiterKey)
|
||
if maxJobs and maxJobs <= tonumber(rcall("GET", rateLimiterKey) or 0) then
|
||
local pttl = rcall("PTTL", rateLimiterKey)
|
||
if pttl == 0 then
|
||
rcall("DEL", rateLimiterKey)
|
||
end
|
||
if pttl > 0 then
|
||
return pttl
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to move job from prioritized state to active.
|
||
]]
|
||
local function moveJobFromPrioritizedToActive(priorityKey, activeKey, priorityCounterKey)
|
||
local prioritizedJob = rcall("ZPOPMIN", priorityKey)
|
||
if #prioritizedJob > 0 then
|
||
rcall("LPUSH", activeKey, prioritizedJob[1])
|
||
return prioritizedJob[1]
|
||
else
|
||
rcall("DEL", priorityCounterKey)
|
||
end
|
||
end
|
||
--[[
|
||
Function to move job from wait state to active.
|
||
Input:
|
||
opts - token - lock token
|
||
opts - lockDuration
|
||
opts - limiter
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function prepareJobForProcessing(keyPrefix, rateLimiterKey, eventStreamKey,
|
||
jobId, processedOn, maxJobs, limiterDuration, markerKey, opts)
|
||
local jobKey = keyPrefix .. jobId
|
||
-- Check if we need to perform rate limiting.
|
||
if maxJobs then
|
||
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
||
if jobCounter == 1 then
|
||
local integerDuration = math.floor(math.abs(limiterDuration))
|
||
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
||
end
|
||
end
|
||
-- get a lock
|
||
if opts['token'] ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration'])
|
||
end
|
||
local optionalValues = {}
|
||
if opts['name'] then
|
||
-- Set "processedBy" field to the worker name
|
||
table.insert(optionalValues, "pb")
|
||
table.insert(optionalValues, opts['name'])
|
||
end
|
||
rcall("XADD", eventStreamKey, "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
||
rcall("HMSET", jobKey, "processedOn", processedOn, unpack(optionalValues))
|
||
rcall("HINCRBY", jobKey, "ats", 1)
|
||
addBaseMarkerIfNeeded(markerKey, false)
|
||
-- rate limit delay must be 0 in this case to prevent adding more delay
|
||
-- when job that is moved to active needs to be processed
|
||
return {rcall("HGETALL", jobKey), jobId, 0, 0} -- get job data
|
||
end
|
||
--[[
|
||
Updates the delay set, by moving delayed jobs that should
|
||
be processed now to "wait".
|
||
Events:
|
||
'waiting'
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
-- Try to get as much as 1000 jobs at once
|
||
local function promoteDelayedJobs(delayedKey, markerKey, targetKey, prioritizedKey,
|
||
eventStreamKey, prefix, timestamp, priorityCounterKey, isPaused)
|
||
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000 - 1, "LIMIT", 0, 1000)
|
||
if (#jobs > 0) then
|
||
rcall("ZREM", delayedKey, unpack(jobs))
|
||
for _, jobId in ipairs(jobs) do
|
||
local jobKey = prefix .. jobId
|
||
local priority =
|
||
tonumber(rcall("HGET", jobKey, "priority")) or 0
|
||
if priority == 0 then
|
||
-- LIFO or FIFO
|
||
rcall("LPUSH", targetKey, jobId)
|
||
else
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
end
|
||
-- Emit waiting event
|
||
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
||
jobId, "prev", "delayed")
|
||
rcall("HSET", jobKey, "delay", 0)
|
||
end
|
||
addBaseMarkerIfNeeded(markerKey, isPaused)
|
||
end
|
||
end
|
||
local function fetchNextJob(waitKey, activeKey, prioritizedKey, eventStreamKey,
|
||
rateLimiterKey, delayedKey, pausedKey, metaKey, pcKey, markerKey, prefix,
|
||
timestamp, opts)
|
||
local target, isPausedOrMaxed, rateLimitMax, rateLimitDuration =
|
||
getTargetQueueList(metaKey, activeKey, waitKey, pausedKey)
|
||
-- Check if there are delayed jobs that can be promoted
|
||
promoteDelayedJobs(delayedKey, markerKey, target, prioritizedKey,
|
||
eventStreamKey, prefix, timestamp, pcKey, isPausedOrMaxed)
|
||
local maxJobs = tonumber(rateLimitMax or (opts['limiter'] and opts['limiter']['max']))
|
||
-- Check if we are rate limited first.
|
||
local expireTime = getRateLimitTTL(maxJobs, rateLimiterKey)
|
||
if expireTime > 0 then
|
||
return {0, 0, expireTime, 0}
|
||
end
|
||
-- paused or maxed queue
|
||
if isPausedOrMaxed then
|
||
return {0, 0, 0, 0}
|
||
end
|
||
local limiterDuration = (opts['limiter'] and opts['limiter']['duration']) or rateLimitDuration
|
||
local jobId = rcall("RPOPLPUSH", waitKey, activeKey)
|
||
if jobId then
|
||
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
||
if string.sub(jobId, 1, 2) == "0:" then
|
||
rcall("LREM", activeKey, 1, jobId)
|
||
-- If jobId is special ID 0:delay (delay greater than 0), then there is no job to process
|
||
-- but if ID is 0:0, then there is at least 1 prioritized job to process
|
||
if jobId == "0:0" then
|
||
jobId = moveJobFromPrioritizedToActive(prioritizedKey, activeKey, pcKey)
|
||
return prepareJobForProcessing(prefix, rateLimiterKey,
|
||
eventStreamKey, jobId, timestamp, maxJobs,
|
||
limiterDuration, markerKey, opts)
|
||
end
|
||
else
|
||
return prepareJobForProcessing(prefix, rateLimiterKey,
|
||
eventStreamKey, jobId, timestamp, maxJobs,
|
||
limiterDuration, markerKey, opts)
|
||
end
|
||
else
|
||
jobId = moveJobFromPrioritizedToActive(prioritizedKey, activeKey, pcKey)
|
||
if jobId then
|
||
return prepareJobForProcessing(prefix, rateLimiterKey,
|
||
eventStreamKey, jobId, timestamp, maxJobs,
|
||
limiterDuration, markerKey, opts)
|
||
end
|
||
end
|
||
-- Return the timestamp for the next delayed job if any.
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- The result is guaranteed to be positive, since the
|
||
-- ZRANGEBYSCORE command would have return a job otherwise.
|
||
return {0, 0, 0, nextTimestamp}
|
||
end
|
||
end
|
||
--[[
|
||
Function to recursively move from waitingChildren to failed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized)
|
||
if no pending dependencies.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Move parent to a wait status (wait, prioritized or delayed)
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Function to check if queue is paused or maxed
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
|
||
if queueAttributes[1] then
|
||
return true
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
return activeCount >= tonumber(queueAttributes[2])
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
local parentWaitKey = parentQueueKey .. ":wait"
|
||
local parentPausedKey = parentQueueKey .. ":paused"
|
||
local parentActiveKey = parentQueueKey .. ":active"
|
||
local parentMetaKey = parentQueueKey .. ":meta"
|
||
local parentMarkerKey = parentQueueKey .. ":marker"
|
||
local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
|
||
local priority = tonumber(jobAttributes[1]) or 0
|
||
local delay = tonumber(jobAttributes[2]) or 0
|
||
if delay > 0 then
|
||
local delayedTimestamp = tonumber(timestamp) + delay
|
||
local score = delayedTimestamp * 0x1000
|
||
local parentDelayedKey = parentQueueKey .. ":delayed"
|
||
rcall("ZADD", parentDelayedKey, score, parentId)
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
|
||
delayedTimestamp)
|
||
addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
|
||
else
|
||
if priority == 0 then
|
||
local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
|
||
parentWaitKey, parentPausedKey)
|
||
addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
|
||
else
|
||
local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
|
||
addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
|
||
parentQueueKey .. ":pc", isPausedOrMaxed)
|
||
end
|
||
rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
|
||
"waiting-children")
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
if rcall("EXISTS", parentKey) == 1 then
|
||
local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
|
||
if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
|
||
rcall("ZREM", parentWaitingChildrenKey, parentId)
|
||
moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
end
|
||
local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
|
||
parentId, timestamp)
|
||
local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
|
||
if doNotHavePendingDependencies then
|
||
moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
|
||
end
|
||
end
|
||
local handleChildFailureAndMoveParentToWait = function (parentQueueKey, parentKey, parentId, jobIdKey, timestamp)
|
||
if rcall("EXISTS", parentKey) == 1 then
|
||
local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
|
||
local parentDelayedKey = parentQueueKey .. ":delayed"
|
||
local parentWaitingChildrenOrDelayedKey
|
||
if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
|
||
parentWaitingChildrenOrDelayedKey = parentWaitingChildrenKey
|
||
elseif rcall("ZSCORE", parentDelayedKey, parentId) then
|
||
parentWaitingChildrenOrDelayedKey = parentDelayedKey
|
||
rcall("HSET", parentKey, "delay", 0)
|
||
end
|
||
if parentWaitingChildrenOrDelayedKey then
|
||
rcall("ZREM", parentWaitingChildrenOrDelayedKey, parentId)
|
||
local deferredFailure = "child " .. jobIdKey .. " failed"
|
||
rcall("HSET", parentKey, "defa", deferredFailure)
|
||
moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
|
||
else
|
||
if not rcall("ZSCORE", parentQueueKey .. ":failed", parentId) then
|
||
local deferredFailure = "child " .. jobIdKey .. " failed"
|
||
rcall("HSET", parentKey, "defa", deferredFailure)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
local moveChildFromDependenciesIfNeeded = function (rawParentData, childKey, failedReason, timestamp)
|
||
if rawParentData then
|
||
local parentData = cjson.decode(rawParentData)
|
||
local parentKey = parentData['queueKey'] .. ':' .. parentData['id']
|
||
local parentDependenciesChildrenKey = parentKey .. ":dependencies"
|
||
if parentData['fpof'] then
|
||
if rcall("SREM", parentDependenciesChildrenKey, childKey) == 1 then
|
||
local parentUnsuccessfulChildrenKey = parentKey .. ":unsuccessful"
|
||
rcall("ZADD", parentUnsuccessfulChildrenKey, timestamp, childKey)
|
||
handleChildFailureAndMoveParentToWait(
|
||
parentData['queueKey'],
|
||
parentKey,
|
||
parentData['id'],
|
||
childKey,
|
||
timestamp
|
||
)
|
||
end
|
||
elseif parentData['cpof'] then
|
||
if rcall("SREM", parentDependenciesChildrenKey, childKey) == 1 then
|
||
local parentFailedChildrenKey = parentKey .. ":failed"
|
||
rcall("HSET", parentFailedChildrenKey, childKey, failedReason)
|
||
moveParentToWaitIfNeeded(parentData['queueKey'], parentKey, parentData['id'], timestamp)
|
||
end
|
||
elseif parentData['idof'] or parentData['rdof'] then
|
||
if rcall("SREM", parentDependenciesChildrenKey, childKey) == 1 then
|
||
moveParentToWaitIfNoPendingDependencies(parentData['queueKey'], parentDependenciesChildrenKey,
|
||
parentKey, parentData['id'], timestamp)
|
||
if parentData['idof'] then
|
||
local parentFailedChildrenKey = parentKey .. ":failed"
|
||
rcall("HSET", parentFailedChildrenKey, childKey, failedReason)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is moved to completed or failed states.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnFinalization(prefixKey,
|
||
deduplicationId, jobId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local pttl = rcall("PTTL", deduplicationKey)
|
||
if pttl == 0 then
|
||
return rcall("DEL", deduplicationKey)
|
||
end
|
||
if pttl == -1 then
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
return rcall("DEL", deduplicationKey)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Functions to remove jobs by max age.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function removeJob(jobId, hard, baseKey, shouldRemoveDeduplicationKey)
|
||
local jobKey = baseKey .. jobId
|
||
removeParentDependencyKey(jobKey, hard, nil, baseKey)
|
||
if shouldRemoveDeduplicationKey then
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(baseKey, jobId, deduplicationId)
|
||
end
|
||
removeJobKeys(jobKey)
|
||
end
|
||
local function removeJobsByMaxAge(timestamp, maxAge, targetSet, prefix, maxLimit)
|
||
local start = timestamp - maxAge * 1000
|
||
local jobIds = rcall("ZREVRANGEBYSCORE", targetSet, start, "-inf", "LIMIT", 0, maxLimit)
|
||
for i, jobId in ipairs(jobIds) do
|
||
removeJob(jobId, false, prefix, false --[[remove debounce key]])
|
||
end
|
||
if #jobIds > 0 then
|
||
if #jobIds < maxLimit then
|
||
rcall("ZREMRANGEBYSCORE", targetSet, "-inf", start)
|
||
else
|
||
for from, to in batches(#jobIds, 7000) do
|
||
rcall("ZREM", targetSet, unpack(jobIds, from, to))
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Functions to remove jobs by max count.
|
||
]]
|
||
-- Includes
|
||
local function removeJobsByMaxCount(maxCount, targetSet, prefix)
|
||
local start = maxCount
|
||
local jobIds = rcall("ZREVRANGE", targetSet, start, -1)
|
||
for i, jobId in ipairs(jobIds) do
|
||
removeJob(jobId, false, prefix, false --[[remove debounce key]])
|
||
end
|
||
rcall("ZREMRANGEBYRANK", targetSet, 0, -(maxCount + 1))
|
||
end
|
||
local function removeLock(jobKey, stalledKey, token, jobId)
|
||
if token ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
local lockToken = rcall("GET", lockKey)
|
||
if lockToken == token then
|
||
rcall("DEL", lockKey)
|
||
rcall("SREM", stalledKey, jobId)
|
||
else
|
||
if lockToken then
|
||
-- Lock exists but token does not match
|
||
return -6
|
||
else
|
||
-- Lock is missing completely
|
||
return -2
|
||
end
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
--[[
|
||
Function to create a new job from stored dedup-next data
|
||
when a deduplicated job with keepLastIfActive finishes.
|
||
At most one next job is created per deduplication ID.
|
||
Multiple triggers while active overwrite the dedup-next data,
|
||
so only the latest data is used.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to set the deduplication key for a job.
|
||
Uses TTL from deduplication opts if provided.
|
||
]]
|
||
local function setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
|
||
local ttl = deduplicationOpts and deduplicationOpts['ttl']
|
||
if ttl and ttl > 0 then
|
||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||
else
|
||
rcall('SET', deduplicationKey, jobId)
|
||
end
|
||
end
|
||
--[[
|
||
Shared helper to store a job and enqueue it into the appropriate list/set.
|
||
Handles delayed, prioritized, and standard (LIFO/FIFO) jobs.
|
||
Emits the appropriate event after enqueuing ("delayed" or "waiting").
|
||
Returns delay, priority from storeJob.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Adds a delayed job to the queue by doing the following:
|
||
- Creates a new job key with the job data.
|
||
- adds to delayed zset.
|
||
- Emits a global event 'delayed' if the job is delayed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Bake in the job id first 12 bits into the timestamp
|
||
to guarantee correct execution order of delayed jobs
|
||
(up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
|
||
WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
|
||
]]
|
||
local function getDelayedScore(delayedKey, timestamp, delay)
|
||
local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
|
||
local minScore = delayedTimestamp * 0x1000
|
||
local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
|
||
local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
|
||
minScore, "WITHSCORES","LIMIT", 0, 1)
|
||
if #result then
|
||
local currentMaxScore = tonumber(result[2])
|
||
if currentMaxScore ~= nil then
|
||
if currentMaxScore >= maxScore then
|
||
return maxScore, delayedTimestamp
|
||
else
|
||
return currentMaxScore + 1, delayedTimestamp
|
||
end
|
||
end
|
||
end
|
||
return minScore, delayedTimestamp
|
||
end
|
||
local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
|
||
maxEvents, markerKey, delay)
|
||
local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
|
||
rcall("ZADD", delayedKey, score, jobId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
|
||
"jobId", jobId, "delay", delayedTimestamp)
|
||
-- mark that a delayed job is available
|
||
addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
end
|
||
--[[
|
||
Function to store a job
|
||
]]
|
||
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local jsonOpts = cjson.encode(opts)
|
||
local delay = opts['delay'] or 0
|
||
local priority = opts['priority'] or 0
|
||
local debounceId = opts['de'] and opts['de']['id']
|
||
local optionalValues = {}
|
||
if parentKey ~= nil then
|
||
table.insert(optionalValues, "parentKey")
|
||
table.insert(optionalValues, parentKey)
|
||
table.insert(optionalValues, "parent")
|
||
table.insert(optionalValues, parentData)
|
||
end
|
||
if repeatJobKey then
|
||
table.insert(optionalValues, "rjk")
|
||
table.insert(optionalValues, repeatJobKey)
|
||
end
|
||
if debounceId then
|
||
table.insert(optionalValues, "deid")
|
||
table.insert(optionalValues, debounceId)
|
||
end
|
||
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
||
"timestamp", timestamp, "delay", delay, "priority", priority,
|
||
unpack(optionalValues))
|
||
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
||
return delay, priority
|
||
end
|
||
local function storeAndEnqueueJob(eventsKey, jobIdKey, jobId, name, data, opts,
|
||
timestamp, parentKey, parentData, repeatJobKey, maxEvents,
|
||
waitKey, pausedKey, activeKey, metaKey, prioritizedKey,
|
||
priorityCounterKey, delayedKey, markerKey)
|
||
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, name, data,
|
||
opts, timestamp, parentKey, parentData, repeatJobKey)
|
||
if delay ~= 0 and delayedKey then
|
||
addDelayedJob(jobId, delayedKey, eventsKey, timestamp, maxEvents, markerKey, delay)
|
||
else
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, activeKey, waitKey, pausedKey)
|
||
if priority > 0 then
|
||
addJobWithPriority(markerKey, prioritizedKey, priority, jobId,
|
||
priorityCounterKey, isPausedOrMaxed)
|
||
else
|
||
local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH'
|
||
addJobInTargetList(target, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", jobId)
|
||
end
|
||
return delay, priority
|
||
end
|
||
local function requeueDeduplicatedJob(prefix, deduplicationId, eventStreamKey,
|
||
metaKey, activeKey, waitKey, pausedKey, markerKey, prioritizedKey,
|
||
priorityCounterKey, delayedKey, timestamp)
|
||
local deduplicationNextKey = prefix .. "dn:" .. deduplicationId
|
||
if rcall("EXISTS", deduplicationNextKey) == 1 then
|
||
local nextData = rcall("HMGET", deduplicationNextKey,
|
||
"name", "data", "opts", "pk", "pd", "pdk", "rjk", "jid")
|
||
-- Always increment the counter to keep it monotonic
|
||
local nextId = rcall("INCR", prefix .. "id") .. ""
|
||
local storedJobId = nextData[8] -- index 8 = "jid" (8th field in the HMGET call above)
|
||
local newJobId
|
||
if storedJobId then
|
||
newJobId = storedJobId
|
||
else
|
||
newJobId = nextId
|
||
end
|
||
local newJobIdKey = prefix .. newJobId
|
||
local newOpts = cjson.decode(nextData[3])
|
||
local deduplicationKey = prefix .. "de:" .. deduplicationId
|
||
local parentKey = nextData[4] or nil
|
||
local parentData = nextData[5] or nil
|
||
local parentDependenciesKey = nextData[6] or nil
|
||
local repeatJobKey = nextData[7] or nil
|
||
-- Set dedup key for the new job (without TTL when keepLastIfActive,
|
||
-- so the key outlives the job's active duration)
|
||
local deOpts = newOpts['de']
|
||
if deOpts and deOpts['keepLastIfActive'] then
|
||
rcall('SET', deduplicationKey, newJobId)
|
||
else
|
||
setDeduplicationKey(deduplicationKey, newJobId, deOpts)
|
||
end
|
||
-- Store and enqueue using the shared helper (handles priority/lifo/delayed)
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
storeAndEnqueueJob(eventStreamKey, newJobIdKey, newJobId, nextData[1], nextData[2],
|
||
newOpts, timestamp, parentKey, parentData, repeatJobKey, maxEvents,
|
||
waitKey, pausedKey, activeKey, metaKey, prioritizedKey,
|
||
priorityCounterKey, delayedKey, markerKey)
|
||
-- Register as child dependency if the job has a parent
|
||
if parentDependenciesKey then
|
||
rcall("SADD", parentDependenciesKey, newJobIdKey)
|
||
end
|
||
-- Only delete the dedup-next hash after the job is fully created,
|
||
-- so that if any step above errors, the data is not permanently lost.
|
||
rcall("DEL", deduplicationNextKey)
|
||
end
|
||
end
|
||
--[[
|
||
Function to trim events, default 10000.
|
||
]]
|
||
-- Includes
|
||
local function trimEvents(metaKey, eventStreamKey)
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
if maxEvents then
|
||
rcall("XTRIM", eventStreamKey, "MAXLEN", "~", maxEvents)
|
||
else
|
||
rcall("XTRIM", eventStreamKey, "MAXLEN", "~", 10000)
|
||
end
|
||
end
|
||
--[[
|
||
Validate and move or add dependencies to parent.
|
||
]]
|
||
-- Includes
|
||
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
||
parentId, jobIdKey, returnvalue, timestamp )
|
||
local processedSet = parentKey .. ":processed"
|
||
rcall("HSET", processedSet, jobIdKey, returnvalue)
|
||
moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
|
||
end
|
||
--[[
|
||
Function to update a bunch of fields in a job.
|
||
]]
|
||
local function updateJobFields(jobKey, msgpackedFields)
|
||
if msgpackedFields and #msgpackedFields > 0 then
|
||
local fieldsToUpdate = cmsgpack.unpack(msgpackedFields)
|
||
if fieldsToUpdate then
|
||
rcall("HMSET", jobKey, unpack(fieldsToUpdate))
|
||
end
|
||
end
|
||
end
|
||
local jobIdKey = KEYS[12]
|
||
if rcall("EXISTS", jobIdKey) == 1 then -- Make sure job exists
|
||
-- Make sure it does not have pending dependencies
|
||
-- It must happen before removing lock
|
||
if ARGV[5] == "completed" then
|
||
if rcall("SCARD", jobIdKey .. ":dependencies") ~= 0 then
|
||
return -4
|
||
end
|
||
if rcall("ZCARD", jobIdKey .. ":unsuccessful") ~= 0 then
|
||
return -9
|
||
end
|
||
end
|
||
local opts = cmsgpack.unpack(ARGV[8])
|
||
local token = opts['token']
|
||
local errorCode = removeLock(jobIdKey, KEYS[5], token, ARGV[1])
|
||
if errorCode < 0 then
|
||
return errorCode
|
||
end
|
||
updateJobFields(jobIdKey, ARGV[9]);
|
||
local attempts = opts['attempts']
|
||
local maxMetricsSize = opts['maxMetricsSize']
|
||
local maxCount = opts['keepJobs']['count']
|
||
local maxAge = opts['keepJobs']['age']
|
||
local maxLimit = opts['keepJobs']['limit'] or 1000
|
||
local jobAttributes = rcall("HMGET", jobIdKey, "parentKey", "parent", "deid")
|
||
local parentKey = jobAttributes[1] or ""
|
||
local parentId = ""
|
||
local parentQueueKey = ""
|
||
if jobAttributes[2] then -- TODO: need to revisit this logic if it's still needed
|
||
local jsonDecodedParent = cjson.decode(jobAttributes[2])
|
||
parentId = jsonDecodedParent['id']
|
||
parentQueueKey = jsonDecodedParent['queueKey']
|
||
end
|
||
local jobId = ARGV[1]
|
||
local timestamp = ARGV[2]
|
||
-- Remove from active list (if not active we shall return error)
|
||
local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId)
|
||
if (numRemovedElements < 1) then
|
||
return -3
|
||
end
|
||
local eventStreamKey = KEYS[4]
|
||
local metaKey = KEYS[9]
|
||
-- Trim events before emitting them to avoid trimming events emitted in this script
|
||
trimEvents(metaKey, eventStreamKey)
|
||
local prefix = ARGV[7]
|
||
removeDeduplicationKeyIfNeededOnFinalization(prefix, jobAttributes[3], jobId)
|
||
-- Check if there is requeue data for this dedup ID (keepLastIfActive mode)
|
||
if jobAttributes[3] then
|
||
requeueDeduplicatedJob(prefix, jobAttributes[3], eventStreamKey,
|
||
metaKey, KEYS[2], KEYS[1], KEYS[8], KEYS[14], KEYS[3], KEYS[10],
|
||
KEYS[7], timestamp)
|
||
end
|
||
-- If job has a parent we need to
|
||
-- 1) remove this job id from parents dependencies
|
||
-- 2) move the job Id to parent "processed" set
|
||
-- 3) push the results into parent "results" list
|
||
-- 4) if parent's dependencies is empty, then move parent to "wait/paused". Note it may be a different queue!.
|
||
if parentId == "" and parentKey ~= "" then
|
||
parentId = getJobIdFromKey(parentKey)
|
||
parentQueueKey = getJobKeyPrefix(parentKey, ":" .. parentId)
|
||
end
|
||
if parentId ~= "" then
|
||
if ARGV[5] == "completed" then
|
||
local dependenciesSet = parentKey .. ":dependencies"
|
||
if rcall("SREM", dependenciesSet, jobIdKey) == 1 then
|
||
updateParentDepsIfNeeded(parentKey, parentQueueKey, dependenciesSet, parentId, jobIdKey, ARGV[4],
|
||
timestamp)
|
||
end
|
||
else
|
||
moveChildFromDependenciesIfNeeded(jobAttributes[2], jobIdKey, ARGV[4], timestamp)
|
||
end
|
||
end
|
||
local attemptsMade = rcall("HINCRBY", jobIdKey, "atm", 1)
|
||
-- Remove job?
|
||
if maxCount ~= 0 then
|
||
local targetSet = KEYS[11]
|
||
-- Add to complete/failed set
|
||
rcall("ZADD", targetSet, timestamp, jobId)
|
||
rcall("HSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn", timestamp)
|
||
-- "returnvalue" / "failedReason" and "finishedOn"
|
||
if ARGV[5] == "failed" then
|
||
rcall("HDEL", jobIdKey, "defa")
|
||
end
|
||
-- Remove old jobs?
|
||
if maxAge ~= nil then
|
||
removeJobsByMaxAge(timestamp, maxAge, targetSet, prefix, maxLimit)
|
||
end
|
||
if maxCount ~= nil and maxCount > 0 then
|
||
removeJobsByMaxCount(maxCount, targetSet, prefix)
|
||
end
|
||
else
|
||
removeJobKeys(jobIdKey)
|
||
if parentKey ~= "" then
|
||
-- TODO: when a child is removed when finished, result or failure in parent
|
||
-- must not be deleted, those value references should be deleted when the parent
|
||
-- is deleted
|
||
removeParentDependencyKey(jobIdKey, false, parentKey, jobAttributes[3])
|
||
end
|
||
end
|
||
rcall("XADD", eventStreamKey, "*", "event", ARGV[5], "jobId", jobId, ARGV[3], ARGV[4], "prev", "active")
|
||
if ARGV[5] == "failed" then
|
||
if tonumber(attemptsMade) >= tonumber(attempts) then
|
||
rcall("XADD", eventStreamKey, "*", "event", "retries-exhausted", "jobId", jobId, "attemptsMade",
|
||
attemptsMade)
|
||
end
|
||
end
|
||
-- Collect metrics
|
||
if maxMetricsSize ~= "" then
|
||
collectMetrics(KEYS[13], KEYS[13] .. ':data', maxMetricsSize, timestamp)
|
||
end
|
||
-- Try to get next job to avoid an extra roundtrip if the queue is not closing,
|
||
-- and not rate limited.
|
||
if (ARGV[6] == "1") then
|
||
local result = fetchNextJob(KEYS[1], KEYS[2], KEYS[3], eventStreamKey,
|
||
KEYS[6], KEYS[7], KEYS[8], metaKey, KEYS[10], KEYS[14], prefix,
|
||
timestamp, opts)
|
||
if result then
|
||
return result
|
||
end
|
||
end
|
||
local waitLen = rcall("LLEN", KEYS[1])
|
||
if waitLen == 0 then
|
||
local activeLen = rcall("LLEN", KEYS[2])
|
||
if activeLen == 0 then
|
||
local prioritizedLen = rcall("ZCARD", KEYS[3])
|
||
if prioritizedLen == 0 then
|
||
rcall("XADD", eventStreamKey, "*", "event", "drained")
|
||
end
|
||
end
|
||
end
|
||
return 0
|
||
else
|
||
return -1
|
||
end
|
||
`;Og.moveToFinished={name:"moveToFinished",content:e1e,keys:14}});var SG=h(Cg=>{"use strict";Object.defineProperty(Cg,"__esModule",{value:!0});Cg.moveToWaitingChildren=void 0;var t1e=`--[[
|
||
Moves job from active to waiting children set.
|
||
Input:
|
||
KEYS[1] active key
|
||
KEYS[2] wait-children key
|
||
KEYS[3] job key
|
||
KEYS[4] job dependencies key
|
||
KEYS[5] job unsuccessful key
|
||
KEYS[6] stalled key
|
||
KEYS[7] events key
|
||
ARGV[1] token
|
||
ARGV[2] child key
|
||
ARGV[3] timestamp
|
||
ARGV[4] jobId
|
||
ARGV[5] prefix
|
||
Output:
|
||
0 - OK
|
||
1 - There are not pending dependencies.
|
||
-1 - Missing job.
|
||
-2 - Missing lock
|
||
-3 - Job not in active set
|
||
-9 - Job has failed children
|
||
]]
|
||
local rcall = redis.call
|
||
local activeKey = KEYS[1]
|
||
local waitingChildrenKey = KEYS[2]
|
||
local jobKey = KEYS[3]
|
||
local jobDependenciesKey = KEYS[4]
|
||
local jobUnsuccessfulKey = KEYS[5]
|
||
local stalledKey = KEYS[6]
|
||
local eventStreamKey = KEYS[7]
|
||
local token = ARGV[1]
|
||
local timestamp = ARGV[3]
|
||
local jobId = ARGV[4]
|
||
--- Includes
|
||
local function removeLock(jobKey, stalledKey, token, jobId)
|
||
if token ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
local lockToken = rcall("GET", lockKey)
|
||
if lockToken == token then
|
||
rcall("DEL", lockKey)
|
||
rcall("SREM", stalledKey, jobId)
|
||
else
|
||
if lockToken then
|
||
-- Lock exists but token does not match
|
||
return -6
|
||
else
|
||
-- Lock is missing completely
|
||
return -2
|
||
end
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
local function removeJobFromActive(activeKey, stalledKey, jobKey, jobId,
|
||
token)
|
||
local errorCode = removeLock(jobKey, stalledKey, token, jobId)
|
||
if errorCode < 0 then
|
||
return errorCode
|
||
end
|
||
local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
|
||
if numRemovedElements < 1 then
|
||
return -3
|
||
end
|
||
return 0
|
||
end
|
||
local function moveToWaitingChildren(activeKey, waitingChildrenKey, stalledKey, eventStreamKey,
|
||
jobKey, jobId, timestamp, token)
|
||
local errorCode = removeJobFromActive(activeKey, stalledKey, jobKey, jobId, token)
|
||
if errorCode < 0 then
|
||
return errorCode
|
||
end
|
||
local score = tonumber(timestamp)
|
||
rcall("ZADD", waitingChildrenKey, score, jobId)
|
||
rcall("XADD", eventStreamKey, "*", "event", "waiting-children", "jobId", jobId, 'prev', 'active')
|
||
return 0
|
||
end
|
||
if rcall("EXISTS", jobKey) == 1 then
|
||
if rcall("ZCARD", jobUnsuccessfulKey) ~= 0 then
|
||
return -9
|
||
else
|
||
if ARGV[2] ~= "" then
|
||
if rcall("SISMEMBER", jobDependenciesKey, ARGV[2]) ~= 0 then
|
||
return moveToWaitingChildren(activeKey, waitingChildrenKey, stalledKey, eventStreamKey,
|
||
jobKey, jobId, timestamp, token)
|
||
end
|
||
return 1
|
||
else
|
||
if rcall("SCARD", jobDependenciesKey) ~= 0 then
|
||
return moveToWaitingChildren(activeKey, waitingChildrenKey, stalledKey, eventStreamKey,
|
||
jobKey, jobId, timestamp, token)
|
||
end
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
return -1
|
||
`;Cg.moveToWaitingChildren={name:"moveToWaitingChildren",content:t1e,keys:7}});var xG=h(jg=>{"use strict";Object.defineProperty(jg,"__esModule",{value:!0});jg.obliterate=void 0;var r1e=`--[[
|
||
Completely obliterates a queue and all of its contents
|
||
This command completely destroys a queue including all of its jobs, current or past
|
||
leaving no trace of its existence. Since this script needs to iterate to find all the job
|
||
keys, consider that this call may be slow for very large queues.
|
||
The queue needs to be "paused" or it will return an error
|
||
If the queue has currently active jobs then the script by default will return error,
|
||
however this behaviour can be overridden using the 'force' option.
|
||
Input:
|
||
KEYS[1] meta
|
||
KEYS[2] base
|
||
ARGV[1] count
|
||
ARGV[2] force
|
||
]]
|
||
local maxCount = tonumber(ARGV[1])
|
||
local baseKey = KEYS[2]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Functions to remove jobs.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove job.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local function removeJob(jobId, hard, baseKey, shouldRemoveDeduplicationKey)
|
||
local jobKey = baseKey .. jobId
|
||
removeParentDependencyKey(jobKey, hard, nil, baseKey)
|
||
if shouldRemoveDeduplicationKey then
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(baseKey, jobId, deduplicationId)
|
||
end
|
||
removeJobKeys(jobKey)
|
||
end
|
||
local function removeJobs(keys, hard, baseKey, max)
|
||
for i, key in ipairs(keys) do
|
||
removeJob(key, hard, baseKey, true --[[remove debounce key]])
|
||
end
|
||
return max - #keys
|
||
end
|
||
--[[
|
||
Functions to remove jobs.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to filter out jobs to ignore from a table.
|
||
]]
|
||
local function filterOutJobsToIgnore(jobs, jobsToIgnore)
|
||
local filteredJobs = {}
|
||
for i = 1, #jobs do
|
||
if not jobsToIgnore[jobs[i]] then
|
||
table.insert(filteredJobs, jobs[i])
|
||
end
|
||
end
|
||
return filteredJobs
|
||
end
|
||
local function getListItems(keyName, max)
|
||
return rcall('LRANGE', keyName, 0, max - 1)
|
||
end
|
||
local function removeListJobs(keyName, hard, baseKey, max, jobsToIgnore)
|
||
local jobs = getListItems(keyName, max)
|
||
if jobsToIgnore then
|
||
jobs = filterOutJobsToIgnore(jobs, jobsToIgnore)
|
||
end
|
||
local count = removeJobs(jobs, hard, baseKey, max)
|
||
rcall("LTRIM", keyName, #jobs, -1)
|
||
return count
|
||
end
|
||
-- Includes
|
||
--[[
|
||
Function to loop in batches.
|
||
Just a bit of warning, some commands as ZREM
|
||
could receive a maximum of 7000 parameters per call.
|
||
]]
|
||
local function batches(n, batchSize)
|
||
local i = 0
|
||
return function()
|
||
local from = i * batchSize + 1
|
||
i = i + 1
|
||
if (from <= n) then
|
||
local to = math.min(from + batchSize - 1, n)
|
||
return from, to
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to get ZSet items.
|
||
]]
|
||
local function getZSetItems(keyName, max)
|
||
return rcall('ZRANGE', keyName, 0, max - 1)
|
||
end
|
||
local function removeZSetJobs(keyName, hard, baseKey, max, jobsToIgnore)
|
||
local jobs = getZSetItems(keyName, max)
|
||
if jobsToIgnore then
|
||
jobs = filterOutJobsToIgnore(jobs, jobsToIgnore)
|
||
end
|
||
local count = removeJobs(jobs, hard, baseKey, max)
|
||
if(#jobs > 0) then
|
||
for from, to in batches(#jobs, 7000) do
|
||
rcall("ZREM", keyName, unpack(jobs, from, to))
|
||
end
|
||
end
|
||
return count
|
||
end
|
||
local function removeLockKeys(keys)
|
||
for i, key in ipairs(keys) do
|
||
rcall("DEL", baseKey .. key .. ':lock')
|
||
end
|
||
end
|
||
-- 1) Check if paused, if not return with error.
|
||
if rcall("HEXISTS", KEYS[1], "paused") ~= 1 then
|
||
return -1 -- Error, NotPaused
|
||
end
|
||
-- 2) Check if there are active jobs, if there are and not "force" return error.
|
||
local activeKey = baseKey .. 'active'
|
||
local activeJobs = getListItems(activeKey, maxCount)
|
||
if (#activeJobs > 0) then
|
||
if(ARGV[2] == "") then
|
||
return -2 -- Error, ExistActiveJobs
|
||
end
|
||
end
|
||
removeLockKeys(activeJobs)
|
||
maxCount = removeJobs(activeJobs, true, baseKey, maxCount)
|
||
rcall("LTRIM", activeKey, #activeJobs, -1)
|
||
if(maxCount <= 0) then
|
||
return 1
|
||
end
|
||
local delayedKey = baseKey .. 'delayed'
|
||
maxCount = removeZSetJobs(delayedKey, true, baseKey, maxCount)
|
||
if(maxCount <= 0) then
|
||
return 1
|
||
end
|
||
local repeatKey = baseKey .. 'repeat'
|
||
local repeatJobsIds = getZSetItems(repeatKey, maxCount)
|
||
for i, key in ipairs(repeatJobsIds) do
|
||
local jobKey = repeatKey .. ":" .. key
|
||
rcall("DEL", jobKey)
|
||
end
|
||
if(#repeatJobsIds > 0) then
|
||
for from, to in batches(#repeatJobsIds, 7000) do
|
||
rcall("ZREM", repeatKey, unpack(repeatJobsIds, from, to))
|
||
end
|
||
end
|
||
maxCount = maxCount - #repeatJobsIds
|
||
if(maxCount <= 0) then
|
||
return 1
|
||
end
|
||
local completedKey = baseKey .. 'completed'
|
||
maxCount = removeZSetJobs(completedKey, true, baseKey, maxCount)
|
||
if(maxCount <= 0) then
|
||
return 1
|
||
end
|
||
local pausedKey = baseKey .. 'paused'
|
||
maxCount = removeListJobs(pausedKey, true, baseKey, maxCount)
|
||
if(maxCount <= 0) then
|
||
return 1
|
||
end
|
||
local prioritizedKey = baseKey .. 'prioritized'
|
||
maxCount = removeZSetJobs(prioritizedKey, true, baseKey, maxCount)
|
||
if(maxCount <= 0) then
|
||
return 1
|
||
end
|
||
local failedKey = baseKey .. 'failed'
|
||
maxCount = removeZSetJobs(failedKey, true, baseKey, maxCount)
|
||
if(maxCount <= 0) then
|
||
return 1
|
||
end
|
||
if(maxCount > 0) then
|
||
rcall("DEL",
|
||
baseKey .. 'events',
|
||
baseKey .. 'delay',
|
||
baseKey .. 'stalled-check',
|
||
baseKey .. 'stalled',
|
||
baseKey .. 'id',
|
||
baseKey .. 'pc',
|
||
baseKey .. 'marker',
|
||
baseKey .. 'meta',
|
||
baseKey .. 'metrics:completed',
|
||
baseKey .. 'metrics:completed:data',
|
||
baseKey .. 'metrics:failed',
|
||
baseKey .. 'metrics:failed:data')
|
||
return 0
|
||
else
|
||
return 1
|
||
end
|
||
`;jg.obliterate={name:"obliterate",content:r1e,keys:2}});var wG=h(Pg=>{"use strict";Object.defineProperty(Pg,"__esModule",{value:!0});Pg.paginate=void 0;var n1e=`--[[
|
||
Paginate a set or hash
|
||
Input:
|
||
KEYS[1] key pointing to the set or hash to be paginated.
|
||
ARGV[1] page start offset
|
||
ARGV[2] page end offset (-1 for all the elements)
|
||
ARGV[3] cursor
|
||
ARGV[4] offset
|
||
ARGV[5] max iterations
|
||
ARGV[6] fetch jobs?
|
||
Output:
|
||
[cursor, offset, items, numItems]
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to achieve pagination for a set or hash.
|
||
This function simulates pagination in the most efficient way possible
|
||
for a set using sscan or hscan.
|
||
The main limitation is that sets are not order preserving, so the
|
||
pagination is not stable. This means that if the set is modified
|
||
between pages, the same element may appear in different pages.
|
||
]] -- Maximum number of elements to be returned by sscan per iteration.
|
||
local maxCount = 100
|
||
-- Finds the cursor, and returns the first elements available for the requested page.
|
||
local function findPage(key, command, pageStart, pageSize, cursor, offset,
|
||
maxIterations, fetchJobs)
|
||
local items = {}
|
||
local jobs = {}
|
||
local iterations = 0
|
||
repeat
|
||
-- Iterate over the set using sscan/hscan.
|
||
local result = rcall(command, key, cursor, "COUNT", maxCount)
|
||
cursor = result[1]
|
||
local members = result[2]
|
||
local step = 1
|
||
if command == "HSCAN" then
|
||
step = 2
|
||
end
|
||
if #members == 0 then
|
||
-- If the result is empty, we can return the result.
|
||
return cursor, offset, items, jobs
|
||
end
|
||
local chunkStart = offset
|
||
local chunkEnd = offset + #members / step
|
||
local pageEnd = pageStart + pageSize
|
||
if chunkEnd < pageStart then
|
||
-- If the chunk is before the page, we can skip it.
|
||
offset = chunkEnd
|
||
elseif chunkStart > pageEnd then
|
||
-- If the chunk is after the page, we can return the result.
|
||
return cursor, offset, items, jobs
|
||
else
|
||
-- If the chunk is overlapping the page, we need to add the elements to the result.
|
||
for i = 1, #members, step do
|
||
if offset >= pageEnd then
|
||
return cursor, offset, items, jobs
|
||
end
|
||
if offset >= pageStart then
|
||
local index = #items + 1
|
||
if fetchJobs ~= nil then
|
||
jobs[#jobs+1] = rcall("HGETALL", members[i])
|
||
end
|
||
if step == 2 then
|
||
items[index] = {members[i], members[i + 1]}
|
||
else
|
||
items[index] = members[i]
|
||
end
|
||
end
|
||
offset = offset + 1
|
||
end
|
||
end
|
||
iterations = iterations + 1
|
||
until cursor == "0" or iterations >= maxIterations
|
||
return cursor, offset, items, jobs
|
||
end
|
||
local key = KEYS[1]
|
||
local scanCommand = "SSCAN"
|
||
local countCommand = "SCARD"
|
||
local type = rcall("TYPE", key)["ok"]
|
||
if type == "none" then
|
||
return {0, 0, {}, 0}
|
||
elseif type == "hash" then
|
||
scanCommand = "HSCAN"
|
||
countCommand = "HLEN"
|
||
elseif type ~= "set" then
|
||
return
|
||
redis.error_reply("Pagination is only supported for sets and hashes.")
|
||
end
|
||
local numItems = rcall(countCommand, key)
|
||
local startOffset = tonumber(ARGV[1])
|
||
local endOffset = tonumber(ARGV[2])
|
||
if endOffset == -1 then
|
||
endOffset = numItems
|
||
end
|
||
local pageSize = (endOffset - startOffset) + 1
|
||
local cursor, offset, items, jobs = findPage(key, scanCommand, startOffset,
|
||
pageSize, ARGV[3], tonumber(ARGV[4]),
|
||
tonumber(ARGV[5]), ARGV[6])
|
||
return {cursor, offset, items, numItems, jobs}
|
||
`;Pg.paginate={name:"paginate",content:n1e,keys:1}});var _G=h(Kg=>{"use strict";Object.defineProperty(Kg,"__esModule",{value:!0});Kg.pause=void 0;var i1e=`--[[
|
||
Pauses or resumes a queue globally.
|
||
Input:
|
||
KEYS[1] 'wait' or 'paused'
|
||
KEYS[2] 'paused' or 'wait'
|
||
KEYS[3] 'meta'
|
||
KEYS[4] 'prioritized'
|
||
KEYS[5] events stream key
|
||
KEYS[6] 'delayed'
|
||
KEYS[7] 'marker'
|
||
ARGV[1] 'paused' or 'resumed'
|
||
Event:
|
||
publish paused or resumed event.
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
local markerKey = KEYS[7]
|
||
local hasJobs = rcall("EXISTS", KEYS[1]) == 1
|
||
--TODO: check this logic to be reused when changing a delay
|
||
if hasJobs then rcall("RENAME", KEYS[1], KEYS[2]) end
|
||
if ARGV[1] == "paused" then
|
||
rcall("HSET", KEYS[3], "paused", 1)
|
||
rcall("DEL", markerKey)
|
||
else
|
||
rcall("HDEL", KEYS[3], "paused")
|
||
if hasJobs or rcall("ZCARD", KEYS[4]) > 0 then
|
||
-- Add marker if there are waiting or priority jobs
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
else
|
||
addDelayMarkerIfNeeded(markerKey, KEYS[6])
|
||
end
|
||
end
|
||
rcall("XADD", KEYS[5], "*", "event", ARGV[1]);
|
||
`;Kg.pause={name:"pause",content:i1e,keys:7}});var IG=h(Dg=>{"use strict";Object.defineProperty(Dg,"__esModule",{value:!0});Dg.promote=void 0;var s1e=`--[[
|
||
Promotes a job that is currently "delayed" to the "waiting" state
|
||
Input:
|
||
KEYS[1] 'delayed'
|
||
KEYS[2] 'wait'
|
||
KEYS[3] 'paused'
|
||
KEYS[4] 'meta'
|
||
KEYS[5] 'prioritized'
|
||
KEYS[6] 'active'
|
||
KEYS[7] 'pc' priority counter
|
||
KEYS[8] 'event stream'
|
||
KEYS[9] 'marker'
|
||
ARGV[1] queue.toKey('')
|
||
ARGV[2] jobId
|
||
Output:
|
||
0 - OK
|
||
-3 - Job not in delayed zset.
|
||
Events:
|
||
'waiting'
|
||
]]
|
||
local rcall = redis.call
|
||
local jobId = ARGV[2]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
if rcall("ZREM", KEYS[1], jobId) == 1 then
|
||
local jobKey = ARGV[1] .. jobId
|
||
local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0
|
||
local metaKey = KEYS[4]
|
||
local markerKey = KEYS[9]
|
||
-- Remove delayed "marker" from the wait list if there is any.
|
||
-- Since we are adding a job we do not need the marker anymore.
|
||
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[6], KEYS[2], KEYS[3])
|
||
local marker = rcall("LINDEX", target, 0)
|
||
if marker and string.sub(marker, 1, 2) == "0:" then rcall("LPOP", target) end
|
||
if priority == 0 then
|
||
-- LIFO or FIFO
|
||
addJobInTargetList(target, markerKey, "LPUSH", isPausedOrMaxed, jobId)
|
||
else
|
||
addJobWithPriority(markerKey, KEYS[5], priority, jobId, KEYS[7], isPausedOrMaxed)
|
||
end
|
||
rcall("XADD", KEYS[8], "*", "event", "waiting", "jobId", jobId, "prev",
|
||
"delayed");
|
||
rcall("HSET", jobKey, "delay", 0)
|
||
return 0
|
||
else
|
||
return -3
|
||
end
|
||
`;Dg.promote={name:"promote",content:s1e,keys:9}});var TG=h(Mg=>{"use strict";Object.defineProperty(Mg,"__esModule",{value:!0});Mg.releaseLock=void 0;var o1e=`--[[
|
||
Release lock
|
||
Input:
|
||
KEYS[1] 'lock',
|
||
ARGV[1] token
|
||
ARGV[2] lock duration in milliseconds
|
||
Output:
|
||
"OK" if lock extended successfully.
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("GET", KEYS[1]) == ARGV[1] then
|
||
return rcall("DEL", KEYS[1])
|
||
else
|
||
return 0
|
||
end
|
||
`;Mg.releaseLock={name:"releaseLock",content:o1e,keys:1}});var kG=h(Ng=>{"use strict";Object.defineProperty(Ng,"__esModule",{value:!0});Ng.removeChildDependency=void 0;var a1e=`--[[
|
||
Break parent-child dependency by removing
|
||
child reference from parent
|
||
Input:
|
||
KEYS[1] 'key' prefix,
|
||
ARGV[1] job key
|
||
ARGV[2] parent key
|
||
Output:
|
||
0 - OK
|
||
1 - There is not relationship.
|
||
-1 - Missing job key
|
||
-5 - Missing parent key
|
||
]]
|
||
local rcall = redis.call
|
||
local jobKey = ARGV[1]
|
||
local parentKey = ARGV[2]
|
||
-- Includes
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
if rcall("EXISTS", jobKey) ~= 1 then return -1 end
|
||
if rcall("EXISTS", parentKey) ~= 1 then return -5 end
|
||
if removeParentDependencyKey(jobKey, false, parentKey, KEYS[1], nil) then
|
||
rcall("HDEL", jobKey, "parentKey", "parent")
|
||
return 0
|
||
else
|
||
return 1
|
||
end`;Ng.removeChildDependency={name:"removeChildDependency",content:a1e,keys:1}});var AG=h(Lg=>{"use strict";Object.defineProperty(Lg,"__esModule",{value:!0});Lg.removeDeduplicationKey=void 0;var c1e=`--[[
|
||
Remove deduplication key if it matches the job id.
|
||
Input:
|
||
KEYS[1] deduplication key
|
||
ARGV[1] job id
|
||
Output:
|
||
0 - false
|
||
1 - true
|
||
]]
|
||
local rcall = redis.call
|
||
local deduplicationKey = KEYS[1]
|
||
local jobId = ARGV[1]
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
return rcall("DEL", deduplicationKey)
|
||
end
|
||
return 0
|
||
`;Lg.removeDeduplicationKey={name:"removeDeduplicationKey",content:c1e,keys:1}});var RG=h(qg=>{"use strict";Object.defineProperty(qg,"__esModule",{value:!0});qg.removeJob=void 0;var l1e=`--[[
|
||
Remove a job from all the statuses it may be in as well as all its data.
|
||
In order to be able to remove a job, it cannot be active.
|
||
Input:
|
||
KEYS[1] jobKey
|
||
KEYS[2] repeat key
|
||
ARGV[1] jobId
|
||
ARGV[2] remove children
|
||
ARGV[3] queue prefix
|
||
Events:
|
||
'removed'
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to check if the job belongs to a job scheduler and
|
||
current delayed job matches with jobId
|
||
]]
|
||
local function isJobSchedulerJob(jobId, jobKey, jobSchedulersKey)
|
||
local repeatJobKey = rcall("HGET", jobKey, "rjk")
|
||
if repeatJobKey then
|
||
local prevMillis = rcall("ZSCORE", jobSchedulersKey, repeatJobKey)
|
||
if prevMillis then
|
||
local currentDelayedJobId = "repeat:" .. repeatJobKey .. ":" .. prevMillis
|
||
return jobId == currentDelayedJobId
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Function to recursively check if there are no locks
|
||
on the jobs to be removed.
|
||
returns:
|
||
boolean
|
||
]]
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
local function isLocked( prefix, jobId, removeChildren)
|
||
local jobKey = prefix .. jobId;
|
||
-- Check if this job is locked
|
||
local lockKey = jobKey .. ':lock'
|
||
local lock = rcall("GET", lockKey)
|
||
if not lock then
|
||
if removeChildren == "1" then
|
||
local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies")
|
||
if (#dependencies > 0) then
|
||
for i, childJobKey in ipairs(dependencies) do
|
||
-- We need to get the jobId for this job.
|
||
local childJobId = getJobIdFromKey(childJobKey)
|
||
local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId)
|
||
local result = isLocked( childJobPrefix, childJobId, removeChildren )
|
||
if result then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
--[[
|
||
Remove a job from all the statuses it may be in as well as all its data,
|
||
including its children. Active children can be ignored.
|
||
Events:
|
||
'removed'
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove from any state.
|
||
returns:
|
||
prev state
|
||
]]
|
||
local function removeJobFromAnyState( prefix, jobId)
|
||
-- We start with the ZSCORE checks, since they have O(1) complexity
|
||
if rcall("ZSCORE", prefix .. "completed", jobId) then
|
||
rcall("ZREM", prefix .. "completed", jobId)
|
||
return "completed"
|
||
elseif rcall("ZSCORE", prefix .. "waiting-children", jobId) then
|
||
rcall("ZREM", prefix .. "waiting-children", jobId)
|
||
return "waiting-children"
|
||
elseif rcall("ZSCORE", prefix .. "delayed", jobId) then
|
||
rcall("ZREM", prefix .. "delayed", jobId)
|
||
return "delayed"
|
||
elseif rcall("ZSCORE", prefix .. "failed", jobId) then
|
||
rcall("ZREM", prefix .. "failed", jobId)
|
||
return "failed"
|
||
elseif rcall("ZSCORE", prefix .. "prioritized", jobId) then
|
||
rcall("ZREM", prefix .. "prioritized", jobId)
|
||
return "prioritized"
|
||
-- We remove only 1 element from the list, since we assume they are not added multiple times
|
||
elseif rcall("LREM", prefix .. "wait", 1, jobId) == 1 then
|
||
return "wait"
|
||
elseif rcall("LREM", prefix .. "paused", 1, jobId) == 1 then
|
||
return "paused"
|
||
elseif rcall("LREM", prefix .. "active", 1, jobId) == 1 then
|
||
return "active"
|
||
end
|
||
return "unknown"
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
local removeJobChildren
|
||
local removeJobWithChildren
|
||
removeJobChildren = function(prefix, jobKey, options)
|
||
-- Check if this job has children
|
||
-- If so, we are going to try to remove the children recursively in a depth-first way
|
||
-- because if some job is locked, we must exit with an error.
|
||
if not options.ignoreProcessed then
|
||
local processed = rcall("HGETALL", jobKey .. ":processed")
|
||
if #processed > 0 then
|
||
for i = 1, #processed, 2 do
|
||
local childJobId = getJobIdFromKey(processed[i])
|
||
local childJobPrefix = getJobKeyPrefix(processed[i], childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
local failed = rcall("HGETALL", jobKey .. ":failed")
|
||
if #failed > 0 then
|
||
for i = 1, #failed, 2 do
|
||
local childJobId = getJobIdFromKey(failed[i])
|
||
local childJobPrefix = getJobKeyPrefix(failed[i], childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
local unsuccessful = rcall("ZRANGE", jobKey .. ":unsuccessful", 0, -1)
|
||
if #unsuccessful > 0 then
|
||
for i = 1, #unsuccessful, 1 do
|
||
local childJobId = getJobIdFromKey(unsuccessful[i])
|
||
local childJobPrefix = getJobKeyPrefix(unsuccessful[i], childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
end
|
||
local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies")
|
||
if #dependencies > 0 then
|
||
for i, childJobKey in ipairs(dependencies) do
|
||
local childJobId = getJobIdFromKey(childJobKey)
|
||
local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
end
|
||
removeJobWithChildren = function(prefix, jobId, parentKey, options)
|
||
local jobKey = prefix .. jobId
|
||
if options.ignoreLocked then
|
||
if isLocked(prefix, jobId) then
|
||
return
|
||
end
|
||
end
|
||
-- Check if job is in the failed zset
|
||
local failedSet = prefix .. "failed"
|
||
if not (options.ignoreProcessed and rcall("ZSCORE", failedSet, jobId)) then
|
||
removeParentDependencyKey(jobKey, false, parentKey, nil)
|
||
if options.removeChildren then
|
||
removeJobChildren(prefix, jobKey, options)
|
||
end
|
||
local prev = removeJobFromAnyState(prefix, jobId)
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(prefix, jobId, deduplicationId)
|
||
if removeJobKeys(jobKey) > 0 then
|
||
local metaKey = prefix .. "meta"
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
rcall("XADD", prefix .. "events", "MAXLEN", "~", maxEvents, "*", "event", "removed",
|
||
"jobId", jobId, "prev", prev)
|
||
end
|
||
end
|
||
end
|
||
local jobId = ARGV[1]
|
||
local shouldRemoveChildren = ARGV[2]
|
||
local prefix = ARGV[3]
|
||
local jobKey = KEYS[1]
|
||
local repeatKey = KEYS[2]
|
||
if isJobSchedulerJob(jobId, jobKey, repeatKey) then
|
||
return -8
|
||
end
|
||
if not isLocked(prefix, jobId, shouldRemoveChildren) then
|
||
local options = {
|
||
removeChildren = shouldRemoveChildren == "1",
|
||
ignoreProcessed = false,
|
||
ignoreLocked = false
|
||
}
|
||
removeJobWithChildren(prefix, jobId, nil, options)
|
||
return 1
|
||
end
|
||
return 0
|
||
`;qg.removeJob={name:"removeJob",content:l1e,keys:2}});var OG=h(Fg=>{"use strict";Object.defineProperty(Fg,"__esModule",{value:!0});Fg.removeJobScheduler=void 0;var u1e=`--[[
|
||
Removes a job scheduler and its next scheduled job.
|
||
Input:
|
||
KEYS[1] job schedulers key
|
||
KEYS[2] delayed jobs key
|
||
KEYS[3] events key
|
||
ARGV[1] job scheduler id
|
||
ARGV[2] prefix key
|
||
Output:
|
||
0 - OK
|
||
1 - Missing repeat job
|
||
Events:
|
||
'removed'
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
local jobSchedulerId = ARGV[1]
|
||
local prefix = ARGV[2]
|
||
local millis = rcall("ZSCORE", KEYS[1], jobSchedulerId)
|
||
if millis then
|
||
-- Delete next programmed job.
|
||
local delayedJobId = "repeat:" .. jobSchedulerId .. ":" .. millis
|
||
if(rcall("ZREM", KEYS[2], delayedJobId) == 1) then
|
||
removeJobKeys(prefix .. delayedJobId)
|
||
rcall("XADD", KEYS[3], "*", "event", "removed", "jobId", delayedJobId, "prev", "delayed")
|
||
end
|
||
end
|
||
if(rcall("ZREM", KEYS[1], jobSchedulerId) == 1) then
|
||
rcall("DEL", KEYS[1] .. ":" .. jobSchedulerId)
|
||
return 0
|
||
end
|
||
return 1
|
||
`;Fg.removeJobScheduler={name:"removeJobScheduler",content:u1e,keys:3}});var CG=h($g=>{"use strict";Object.defineProperty($g,"__esModule",{value:!0});$g.removeOrphanedJobs=void 0;var d1e=`--[[
|
||
Removes orphaned job keys that exist in Redis but are not referenced
|
||
in any queue state set. Checks each candidate atomically.
|
||
Input:
|
||
KEYS[1] base prefix key including trailing colon (e.g. bull:queueName:)
|
||
ARGV[1] number of state key suffixes
|
||
ARGV[2 .. 1+N] state key suffixes (e.g. active, wait, completed, ...)
|
||
ARGV[2+N] number of job sub-key suffixes
|
||
ARGV[3+N .. 2+N+M] job sub-key suffixes (e.g. logs, dependencies, ...)
|
||
ARGV[3+N+M .. end] candidate job IDs to check
|
||
Output:
|
||
number of removed jobs
|
||
]]
|
||
local rcall = redis.call
|
||
local basePrefix = KEYS[1]
|
||
-- Parse state key suffixes and cache their full key names + types.
|
||
local stateKeyCount = tonumber(ARGV[1])
|
||
local stateKeys = {}
|
||
local stateKeyTypes = {}
|
||
for i = 1, stateKeyCount do
|
||
local fullKey = basePrefix .. ARGV[1 + i]
|
||
stateKeys[i] = fullKey
|
||
stateKeyTypes[i] = rcall('TYPE', fullKey)['ok']
|
||
end
|
||
-- Parse job sub-key suffixes.
|
||
local subKeyCountIdx = 2 + stateKeyCount
|
||
local subKeyCount = tonumber(ARGV[subKeyCountIdx])
|
||
local subKeySuffixes = {}
|
||
for i = 1, subKeyCount do
|
||
subKeySuffixes[i] = ARGV[subKeyCountIdx + i]
|
||
end
|
||
-- Process candidate job IDs.
|
||
local candidateStart = subKeyCountIdx + subKeyCount + 1
|
||
local removedCount = 0
|
||
for c = candidateStart, #ARGV do
|
||
local jobId = ARGV[c]
|
||
local found = false
|
||
for i = 1, stateKeyCount do
|
||
local kt = stateKeyTypes[i]
|
||
if kt == 'list' then
|
||
if rcall('LPOS', stateKeys[i], jobId) then
|
||
found = true
|
||
break
|
||
end
|
||
elseif kt == 'zset' then
|
||
if rcall('ZSCORE', stateKeys[i], jobId) then
|
||
found = true
|
||
break
|
||
end
|
||
elseif kt == 'set' then
|
||
if rcall('SISMEMBER', stateKeys[i], jobId) == 1 then
|
||
found = true
|
||
break
|
||
end
|
||
end
|
||
end
|
||
if not found then
|
||
local jobKey = basePrefix .. jobId
|
||
local keysToDelete = { jobKey }
|
||
for _, suffix in ipairs(subKeySuffixes) do
|
||
keysToDelete[#keysToDelete + 1] = jobKey .. ':' .. suffix
|
||
end
|
||
rcall('DEL', unpack(keysToDelete))
|
||
removedCount = removedCount + 1
|
||
end
|
||
end
|
||
return removedCount
|
||
`;$g.removeOrphanedJobs={name:"removeOrphanedJobs",content:d1e,keys:1}});var jG=h(Ug=>{"use strict";Object.defineProperty(Ug,"__esModule",{value:!0});Ug.removeRepeatable=void 0;var p1e=`--[[
|
||
Removes a repeatable job
|
||
Input:
|
||
KEYS[1] repeat jobs key
|
||
KEYS[2] delayed jobs key
|
||
KEYS[3] events key
|
||
ARGV[1] old repeat job id
|
||
ARGV[2] options concat
|
||
ARGV[3] repeat job key
|
||
ARGV[4] prefix key
|
||
Output:
|
||
0 - OK
|
||
1 - Missing repeat job
|
||
Events:
|
||
'removed'
|
||
]]
|
||
local rcall = redis.call
|
||
local millis = rcall("ZSCORE", KEYS[1], ARGV[2])
|
||
-- Includes
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
-- legacy removal TODO: remove in next breaking change
|
||
if millis then
|
||
-- Delete next programmed job.
|
||
local repeatJobId = ARGV[1] .. millis
|
||
if(rcall("ZREM", KEYS[2], repeatJobId) == 1) then
|
||
removeJobKeys(ARGV[4] .. repeatJobId)
|
||
rcall("XADD", KEYS[3], "*", "event", "removed", "jobId", repeatJobId, "prev", "delayed");
|
||
end
|
||
end
|
||
if(rcall("ZREM", KEYS[1], ARGV[2]) == 1) then
|
||
return 0
|
||
end
|
||
-- new removal
|
||
millis = rcall("ZSCORE", KEYS[1], ARGV[3])
|
||
if millis then
|
||
-- Delete next programmed job.
|
||
local repeatJobId = "repeat:" .. ARGV[3] .. ":" .. millis
|
||
if(rcall("ZREM", KEYS[2], repeatJobId) == 1) then
|
||
removeJobKeys(ARGV[4] .. repeatJobId)
|
||
rcall("XADD", KEYS[3], "*", "event", "removed", "jobId", repeatJobId, "prev", "delayed")
|
||
end
|
||
end
|
||
if(rcall("ZREM", KEYS[1], ARGV[3]) == 1) then
|
||
rcall("DEL", KEYS[1] .. ":" .. ARGV[3])
|
||
return 0
|
||
end
|
||
return 1
|
||
`;Ug.removeRepeatable={name:"removeRepeatable",content:p1e,keys:3}});var PG=h(Jg=>{"use strict";Object.defineProperty(Jg,"__esModule",{value:!0});Jg.removeUnprocessedChildren=void 0;var f1e=`--[[
|
||
Remove a job from all the statuses it may be in as well as all its data.
|
||
In order to be able to remove a job, it cannot be active.
|
||
Input:
|
||
KEYS[1] jobKey
|
||
KEYS[2] meta key
|
||
ARGV[1] prefix
|
||
ARGV[2] jobId
|
||
Events:
|
||
'removed' for every children removed
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Remove a job from all the statuses it may be in as well as all its data,
|
||
including its children. Active children can be ignored.
|
||
Events:
|
||
'removed'
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Functions to destructure job key.
|
||
Just a bit of warning, these functions may be a bit slow and affect performance significantly.
|
||
]]
|
||
local getJobIdFromKey = function (jobKey)
|
||
return string.match(jobKey, ".*:(.*)")
|
||
end
|
||
local getJobKeyPrefix = function (jobKey, jobId)
|
||
return string.sub(jobKey, 0, #jobKey - #jobId)
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to check if the job belongs to a job scheduler and
|
||
current delayed job matches with jobId
|
||
]]
|
||
local function isJobSchedulerJob(jobId, jobKey, jobSchedulersKey)
|
||
local repeatJobKey = rcall("HGET", jobKey, "rjk")
|
||
if repeatJobKey then
|
||
local prevMillis = rcall("ZSCORE", jobSchedulersKey, repeatJobKey)
|
||
if prevMillis then
|
||
local currentDelayedJobId = "repeat:" .. repeatJobKey .. ":" .. prevMillis
|
||
return jobId == currentDelayedJobId
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Function to remove deduplication key if needed
|
||
when a job is being removed.
|
||
]]
|
||
local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
|
||
jobId, deduplicationId)
|
||
if deduplicationId then
|
||
local deduplicationKey = prefixKey .. "de:" .. deduplicationId
|
||
local currentJobId = rcall('GET', deduplicationKey)
|
||
if currentJobId and currentJobId == jobId then
|
||
rcall("DEL", deduplicationKey)
|
||
-- Also clean up any pending dedup-next data for this dedup ID
|
||
rcall("DEL", prefixKey .. "dn:" .. deduplicationId)
|
||
return 1
|
||
end
|
||
end
|
||
end
|
||
--[[
|
||
Function to remove from any state.
|
||
returns:
|
||
prev state
|
||
]]
|
||
local function removeJobFromAnyState( prefix, jobId)
|
||
-- We start with the ZSCORE checks, since they have O(1) complexity
|
||
if rcall("ZSCORE", prefix .. "completed", jobId) then
|
||
rcall("ZREM", prefix .. "completed", jobId)
|
||
return "completed"
|
||
elseif rcall("ZSCORE", prefix .. "waiting-children", jobId) then
|
||
rcall("ZREM", prefix .. "waiting-children", jobId)
|
||
return "waiting-children"
|
||
elseif rcall("ZSCORE", prefix .. "delayed", jobId) then
|
||
rcall("ZREM", prefix .. "delayed", jobId)
|
||
return "delayed"
|
||
elseif rcall("ZSCORE", prefix .. "failed", jobId) then
|
||
rcall("ZREM", prefix .. "failed", jobId)
|
||
return "failed"
|
||
elseif rcall("ZSCORE", prefix .. "prioritized", jobId) then
|
||
rcall("ZREM", prefix .. "prioritized", jobId)
|
||
return "prioritized"
|
||
-- We remove only 1 element from the list, since we assume they are not added multiple times
|
||
elseif rcall("LREM", prefix .. "wait", 1, jobId) == 1 then
|
||
return "wait"
|
||
elseif rcall("LREM", prefix .. "paused", 1, jobId) == 1 then
|
||
return "paused"
|
||
elseif rcall("LREM", prefix .. "active", 1, jobId) == 1 then
|
||
return "active"
|
||
end
|
||
return "unknown"
|
||
end
|
||
--[[
|
||
Function to remove job keys.
|
||
]]
|
||
local function removeJobKeys(jobKey)
|
||
return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
|
||
jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
|
||
end
|
||
--[[
|
||
Check if this job has a parent. If so we will just remove it from
|
||
the parent child list, but if it is the last child we should move the parent to "wait/paused"
|
||
which requires code from "moveToFinished"
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local function _moveParentToWait(parentPrefix, parentId, emitEvent)
|
||
local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
|
||
parentPrefix .. "wait", parentPrefix .. "paused")
|
||
addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
|
||
if emitEvent then
|
||
local parentEventStream = parentPrefix .. "events"
|
||
rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
||
end
|
||
end
|
||
local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debounceId)
|
||
if parentKey then
|
||
local parentDependenciesKey = parentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(parentKey)
|
||
local parentPrefix = getJobKeyPrefix(parentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then -- remove parent in same queue
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(parentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(parentKey)
|
||
if debounceId then
|
||
rcall("DEL", parentPrefix .. "de:" .. debounceId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
else
|
||
local parentAttributes = rcall("HMGET", jobKey, "parentKey", "deid")
|
||
local missedParentKey = parentAttributes[1]
|
||
if( (type(missedParentKey) == "string") and missedParentKey ~= ""
|
||
and (rcall("EXISTS", missedParentKey) == 1)) then
|
||
local parentDependenciesKey = missedParentKey .. ":dependencies"
|
||
local result = rcall("SREM", parentDependenciesKey, jobKey)
|
||
if result > 0 then
|
||
local pendingDependencies = rcall("SCARD", parentDependenciesKey)
|
||
if pendingDependencies == 0 then
|
||
local parentId = getJobIdFromKey(missedParentKey)
|
||
local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
|
||
local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
|
||
if numRemovedElements == 1 then
|
||
if hard then
|
||
if parentPrefix == baseKey then
|
||
removeParentDependencyKey(missedParentKey, hard, nil, baseKey, nil)
|
||
removeJobKeys(missedParentKey)
|
||
if parentAttributes[2] then
|
||
rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId)
|
||
end
|
||
else
|
||
_moveParentToWait(parentPrefix, parentId, true)
|
||
end
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Function to recursively check if there are no locks
|
||
on the jobs to be removed.
|
||
returns:
|
||
boolean
|
||
]]
|
||
local function isLocked( prefix, jobId, removeChildren)
|
||
local jobKey = prefix .. jobId;
|
||
-- Check if this job is locked
|
||
local lockKey = jobKey .. ':lock'
|
||
local lock = rcall("GET", lockKey)
|
||
if not lock then
|
||
if removeChildren == "1" then
|
||
local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies")
|
||
if (#dependencies > 0) then
|
||
for i, childJobKey in ipairs(dependencies) do
|
||
-- We need to get the jobId for this job.
|
||
local childJobId = getJobIdFromKey(childJobKey)
|
||
local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId)
|
||
local result = isLocked( childJobPrefix, childJobId, removeChildren )
|
||
if result then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
local removeJobChildren
|
||
local removeJobWithChildren
|
||
removeJobChildren = function(prefix, jobKey, options)
|
||
-- Check if this job has children
|
||
-- If so, we are going to try to remove the children recursively in a depth-first way
|
||
-- because if some job is locked, we must exit with an error.
|
||
if not options.ignoreProcessed then
|
||
local processed = rcall("HGETALL", jobKey .. ":processed")
|
||
if #processed > 0 then
|
||
for i = 1, #processed, 2 do
|
||
local childJobId = getJobIdFromKey(processed[i])
|
||
local childJobPrefix = getJobKeyPrefix(processed[i], childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
local failed = rcall("HGETALL", jobKey .. ":failed")
|
||
if #failed > 0 then
|
||
for i = 1, #failed, 2 do
|
||
local childJobId = getJobIdFromKey(failed[i])
|
||
local childJobPrefix = getJobKeyPrefix(failed[i], childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
local unsuccessful = rcall("ZRANGE", jobKey .. ":unsuccessful", 0, -1)
|
||
if #unsuccessful > 0 then
|
||
for i = 1, #unsuccessful, 1 do
|
||
local childJobId = getJobIdFromKey(unsuccessful[i])
|
||
local childJobPrefix = getJobKeyPrefix(unsuccessful[i], childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
end
|
||
local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies")
|
||
if #dependencies > 0 then
|
||
for i, childJobKey in ipairs(dependencies) do
|
||
local childJobId = getJobIdFromKey(childJobKey)
|
||
local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId)
|
||
removeJobWithChildren(childJobPrefix, childJobId, jobKey, options)
|
||
end
|
||
end
|
||
end
|
||
removeJobWithChildren = function(prefix, jobId, parentKey, options)
|
||
local jobKey = prefix .. jobId
|
||
if options.ignoreLocked then
|
||
if isLocked(prefix, jobId) then
|
||
return
|
||
end
|
||
end
|
||
-- Check if job is in the failed zset
|
||
local failedSet = prefix .. "failed"
|
||
if not (options.ignoreProcessed and rcall("ZSCORE", failedSet, jobId)) then
|
||
removeParentDependencyKey(jobKey, false, parentKey, nil)
|
||
if options.removeChildren then
|
||
removeJobChildren(prefix, jobKey, options)
|
||
end
|
||
local prev = removeJobFromAnyState(prefix, jobId)
|
||
local deduplicationId = rcall("HGET", jobKey, "deid")
|
||
removeDeduplicationKeyIfNeededOnRemoval(prefix, jobId, deduplicationId)
|
||
if removeJobKeys(jobKey) > 0 then
|
||
local metaKey = prefix .. "meta"
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
rcall("XADD", prefix .. "events", "MAXLEN", "~", maxEvents, "*", "event", "removed",
|
||
"jobId", jobId, "prev", prev)
|
||
end
|
||
end
|
||
end
|
||
local prefix = ARGV[1]
|
||
local jobId = ARGV[2]
|
||
local jobKey = KEYS[1]
|
||
local metaKey = KEYS[2]
|
||
local options = {
|
||
removeChildren = "1",
|
||
ignoreProcessed = true,
|
||
ignoreLocked = true
|
||
}
|
||
removeJobChildren(prefix, jobKey, options)
|
||
`;Jg.removeUnprocessedChildren={name:"removeUnprocessedChildren",content:f1e,keys:2}});var KG=h(zg=>{"use strict";Object.defineProperty(zg,"__esModule",{value:!0});zg.reprocessJob=void 0;var m1e=`--[[
|
||
Attempts to reprocess a job
|
||
Input:
|
||
KEYS[1] job key
|
||
KEYS[2] events stream
|
||
KEYS[3] job state
|
||
KEYS[4] wait key
|
||
KEYS[5] meta
|
||
KEYS[6] paused key
|
||
KEYS[7] active key
|
||
KEYS[8] marker key
|
||
ARGV[1] job.id
|
||
ARGV[2] (job.opts.lifo ? 'R' : 'L') + 'PUSH'
|
||
ARGV[3] propVal - failedReason/returnvalue
|
||
ARGV[4] prev state - failed/completed
|
||
ARGV[5] reset attemptsMade - "1" or "0"
|
||
ARGV[6] reset attemptsStarted - "1" or "0"
|
||
Output:
|
||
1 means the operation was a success
|
||
-1 means the job does not exist
|
||
-3 means the job was not found in the expected set.
|
||
]]
|
||
local rcall = redis.call;
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
local jobKey = KEYS[1]
|
||
if rcall("EXISTS", jobKey) == 1 then
|
||
local jobId = ARGV[1]
|
||
if (rcall("ZREM", KEYS[3], jobId) == 1) then
|
||
local attributesToRemove = {}
|
||
if ARGV[5] == "1" then
|
||
table.insert(attributesToRemove, "atm")
|
||
end
|
||
if ARGV[6] == "1" then
|
||
table.insert(attributesToRemove, "ats")
|
||
end
|
||
rcall("HDEL", jobKey, "finishedOn", "processedOn", ARGV[3], unpack(attributesToRemove))
|
||
local target, isPausedOrMaxed = getTargetQueueList(KEYS[5], KEYS[7], KEYS[4], KEYS[6])
|
||
addJobInTargetList(target, KEYS[8], ARGV[2], isPausedOrMaxed, jobId)
|
||
local parentKey = rcall("HGET", jobKey, "parentKey")
|
||
if parentKey and rcall("EXISTS", parentKey) == 1 then
|
||
if ARGV[4] == "failed" then
|
||
if rcall("ZREM", parentKey .. ":unsuccessful", jobKey) == 1 or
|
||
rcall("HDEL", parentKey .. ":failed", jobKey) == 1 then
|
||
rcall("SADD", parentKey .. ":dependencies", jobKey)
|
||
end
|
||
else
|
||
if rcall("HDEL", parentKey .. ":processed", jobKey) == 1 then
|
||
rcall("SADD", parentKey .. ":dependencies", jobKey)
|
||
end
|
||
end
|
||
end
|
||
local maxEvents = getOrSetMaxEvents(KEYS[5])
|
||
-- Emit waiting event
|
||
rcall("XADD", KEYS[2], "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", jobId, "prev", ARGV[4]);
|
||
return 1
|
||
else
|
||
return -3
|
||
end
|
||
else
|
||
return -1
|
||
end
|
||
`;zg.reprocessJob={name:"reprocessJob",content:m1e,keys:8}});var DG=h(Gg=>{"use strict";Object.defineProperty(Gg,"__esModule",{value:!0});Gg.retryJob=void 0;var h1e=`--[[
|
||
Retries a failed job by moving it back to the wait queue.
|
||
Input:
|
||
KEYS[1] 'active',
|
||
KEYS[2] 'wait'
|
||
KEYS[3] 'paused'
|
||
KEYS[4] job key
|
||
KEYS[5] 'meta'
|
||
KEYS[6] events stream
|
||
KEYS[7] delayed key
|
||
KEYS[8] prioritized key
|
||
KEYS[9] 'pc' priority counter
|
||
KEYS[10] 'marker'
|
||
KEYS[11] 'stalled'
|
||
ARGV[1] key prefix
|
||
ARGV[2] timestamp
|
||
ARGV[3] pushCmd
|
||
ARGV[4] jobId
|
||
ARGV[5] token
|
||
ARGV[6] optional job fields to update
|
||
Events:
|
||
'waiting'
|
||
Output:
|
||
0 - OK
|
||
-1 - Missing key
|
||
-2 - Missing lock
|
||
-3 - Job not in active set
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to check if queue is paused or maxed
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
|
||
if queueAttributes[1] then
|
||
return true
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
return activeCount >= tonumber(queueAttributes[2])
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--[[
|
||
Updates the delay set, by moving delayed jobs that should
|
||
be processed now to "wait".
|
||
Events:
|
||
'waiting'
|
||
]]
|
||
-- Includes
|
||
-- Try to get as much as 1000 jobs at once
|
||
local function promoteDelayedJobs(delayedKey, markerKey, targetKey, prioritizedKey,
|
||
eventStreamKey, prefix, timestamp, priorityCounterKey, isPaused)
|
||
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000 - 1, "LIMIT", 0, 1000)
|
||
if (#jobs > 0) then
|
||
rcall("ZREM", delayedKey, unpack(jobs))
|
||
for _, jobId in ipairs(jobs) do
|
||
local jobKey = prefix .. jobId
|
||
local priority =
|
||
tonumber(rcall("HGET", jobKey, "priority")) or 0
|
||
if priority == 0 then
|
||
-- LIFO or FIFO
|
||
rcall("LPUSH", targetKey, jobId)
|
||
else
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
end
|
||
-- Emit waiting event
|
||
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
||
jobId, "prev", "delayed")
|
||
rcall("HSET", jobKey, "delay", 0)
|
||
end
|
||
addBaseMarkerIfNeeded(markerKey, isPaused)
|
||
end
|
||
end
|
||
local function removeLock(jobKey, stalledKey, token, jobId)
|
||
if token ~= "0" then
|
||
local lockKey = jobKey .. ':lock'
|
||
local lockToken = rcall("GET", lockKey)
|
||
if lockToken == token then
|
||
rcall("DEL", lockKey)
|
||
rcall("SREM", stalledKey, jobId)
|
||
else
|
||
if lockToken then
|
||
-- Lock exists but token does not match
|
||
return -6
|
||
else
|
||
-- Lock is missing completely
|
||
return -2
|
||
end
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
--[[
|
||
Function to update a bunch of fields in a job.
|
||
]]
|
||
local function updateJobFields(jobKey, msgpackedFields)
|
||
if msgpackedFields and #msgpackedFields > 0 then
|
||
local fieldsToUpdate = cmsgpack.unpack(msgpackedFields)
|
||
if fieldsToUpdate then
|
||
rcall("HMSET", jobKey, unpack(fieldsToUpdate))
|
||
end
|
||
end
|
||
end
|
||
local target, isPausedOrMaxed = getTargetQueueList(KEYS[5], KEYS[1], KEYS[2], KEYS[3])
|
||
local markerKey = KEYS[10]
|
||
-- Check if there are delayed jobs that we can move to wait.
|
||
-- test example: when there are delayed jobs between retries
|
||
promoteDelayedJobs(KEYS[7], markerKey, target, KEYS[8], KEYS[6], ARGV[1], ARGV[2], KEYS[9], isPausedOrMaxed)
|
||
local jobKey = KEYS[4]
|
||
if rcall("EXISTS", jobKey) == 1 then
|
||
local errorCode = removeLock(jobKey, KEYS[11], ARGV[5], ARGV[4])
|
||
if errorCode < 0 then
|
||
return errorCode
|
||
end
|
||
updateJobFields(jobKey, ARGV[6])
|
||
local numRemovedElements = rcall("LREM", KEYS[1], -1, ARGV[4])
|
||
if (numRemovedElements < 1) then return -3 end
|
||
local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0
|
||
--need to re-evaluate after removing job from active
|
||
isPausedOrMaxed = isQueuePausedOrMaxed(KEYS[5], KEYS[1])
|
||
-- Standard or priority add
|
||
if priority == 0 then
|
||
addJobInTargetList(target, markerKey, ARGV[3], isPausedOrMaxed, ARGV[4])
|
||
else
|
||
addJobWithPriority(markerKey, KEYS[8], priority, ARGV[4], KEYS[9], isPausedOrMaxed)
|
||
end
|
||
rcall("HINCRBY", jobKey, "atm", 1)
|
||
local maxEvents = getOrSetMaxEvents(KEYS[5])
|
||
-- Emit waiting event
|
||
rcall("XADD", KEYS[6], "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", ARGV[4], "prev", "active")
|
||
return 0
|
||
else
|
||
return -1
|
||
end
|
||
`;Gg.retryJob={name:"retryJob",content:h1e,keys:11}});var MG=h(Bg=>{"use strict";Object.defineProperty(Bg,"__esModule",{value:!0});Bg.saveStacktrace=void 0;var y1e=`--[[
|
||
Save stacktrace and failedReason.
|
||
Input:
|
||
KEYS[1] job key
|
||
ARGV[1] stacktrace
|
||
ARGV[2] failedReason
|
||
Output:
|
||
0 - OK
|
||
-1 - Missing key
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("EXISTS", KEYS[1]) == 1 then
|
||
rcall("HMSET", KEYS[1], "stacktrace", ARGV[1], "failedReason", ARGV[2])
|
||
return 0
|
||
else
|
||
return -1
|
||
end
|
||
`;Bg.saveStacktrace={name:"saveStacktrace",content:y1e,keys:1}});var NG=h(Hg=>{"use strict";Object.defineProperty(Hg,"__esModule",{value:!0});Hg.updateData=void 0;var g1e=`--[[
|
||
Update job data
|
||
Input:
|
||
KEYS[1] Job id key
|
||
ARGV[1] data
|
||
Output:
|
||
0 - OK
|
||
-1 - Missing job.
|
||
]]
|
||
local rcall = redis.call
|
||
if rcall("EXISTS",KEYS[1]) == 1 then -- // Make sure job exists
|
||
rcall("HSET", KEYS[1], "data", ARGV[1])
|
||
return 0
|
||
else
|
||
return -1
|
||
end
|
||
`;Hg.updateData={name:"updateData",content:g1e,keys:1}});var LG=h(Vg=>{"use strict";Object.defineProperty(Vg,"__esModule",{value:!0});Vg.updateJobScheduler=void 0;var b1e=`--[[
|
||
Updates a job scheduler and adds next delayed job
|
||
Input:
|
||
KEYS[1] 'repeat' key
|
||
KEYS[2] 'delayed'
|
||
KEYS[3] 'wait' key
|
||
KEYS[4] 'paused' key
|
||
KEYS[5] 'meta'
|
||
KEYS[6] 'prioritized' key
|
||
KEYS[7] 'marker',
|
||
KEYS[8] 'id'
|
||
KEYS[9] events stream key
|
||
KEYS[10] 'pc' priority counter
|
||
KEYS[11] producer key
|
||
KEYS[12] 'active' key
|
||
ARGV[1] next milliseconds
|
||
ARGV[2] jobs scheduler id
|
||
ARGV[3] Json stringified delayed data
|
||
ARGV[4] msgpacked delayed opts
|
||
ARGV[5] timestamp
|
||
ARGV[6] prefix key
|
||
ARGV[7] producer id
|
||
Output:
|
||
next delayed job id - OK
|
||
]] local rcall = redis.call
|
||
local repeatKey = KEYS[1]
|
||
local delayedKey = KEYS[2]
|
||
local waitKey = KEYS[3]
|
||
local pausedKey = KEYS[4]
|
||
local metaKey = KEYS[5]
|
||
local prioritizedKey = KEYS[6]
|
||
local nextMillis = tonumber(ARGV[1])
|
||
local jobSchedulerId = ARGV[2]
|
||
local timestamp = tonumber(ARGV[5])
|
||
local prefixKey = ARGV[6]
|
||
local producerId = ARGV[7]
|
||
local jobOpts = cmsgpack.unpack(ARGV[4])
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Shared helper to store a job and enqueue it into the appropriate list/set.
|
||
Handles delayed, prioritized, and standard (LIFO/FIFO) jobs.
|
||
Emits the appropriate event after enqueuing ("delayed" or "waiting").
|
||
Returns delay, priority from storeJob.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Adds a delayed job to the queue by doing the following:
|
||
- Creates a new job key with the job data.
|
||
- adds to delayed zset.
|
||
- Emits a global event 'delayed' if the job is delayed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add delay marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to return the next delayed job timestamp.
|
||
]]
|
||
local function getNextDelayedTimestamp(delayedKey)
|
||
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
||
if #result then
|
||
local nextTimestamp = tonumber(result[2])
|
||
if nextTimestamp ~= nil then
|
||
return nextTimestamp / 0x1000
|
||
end
|
||
end
|
||
end
|
||
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
||
if nextTimestamp ~= nil then
|
||
-- Replace the score of the marker with the newest known
|
||
-- next timestamp.
|
||
rcall("ZADD", markerKey, nextTimestamp, "1")
|
||
end
|
||
end
|
||
--[[
|
||
Bake in the job id first 12 bits into the timestamp
|
||
to guarantee correct execution order of delayed jobs
|
||
(up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
|
||
WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
|
||
]]
|
||
local function getDelayedScore(delayedKey, timestamp, delay)
|
||
local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
|
||
local minScore = delayedTimestamp * 0x1000
|
||
local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
|
||
local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
|
||
minScore, "WITHSCORES","LIMIT", 0, 1)
|
||
if #result then
|
||
local currentMaxScore = tonumber(result[2])
|
||
if currentMaxScore ~= nil then
|
||
if currentMaxScore >= maxScore then
|
||
return maxScore, delayedTimestamp
|
||
else
|
||
return currentMaxScore + 1, delayedTimestamp
|
||
end
|
||
end
|
||
end
|
||
return minScore, delayedTimestamp
|
||
end
|
||
local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
|
||
maxEvents, markerKey, delay)
|
||
local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
|
||
rcall("ZADD", delayedKey, score, jobId)
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
|
||
"jobId", jobId, "delay", delayedTimestamp)
|
||
-- mark that a delayed job is available
|
||
addDelayMarkerIfNeeded(markerKey, delayedKey)
|
||
end
|
||
--[[
|
||
Function to add job in target list and add marker if needed.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Add marker if needed when a job is available.
|
||
]]
|
||
local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
if not isPausedOrMaxed then
|
||
rcall("ZADD", markerKey, 0, "0")
|
||
end
|
||
end
|
||
local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
rcall(pushCmd, targetKey, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to add job considering priority.
|
||
]]
|
||
-- Includes
|
||
--[[
|
||
Function to get priority score.
|
||
]]
|
||
local function getPriorityScore(priority, priorityCounterKey)
|
||
local prioCounter = rcall("INCR", priorityCounterKey)
|
||
return priority * 0x100000000 + prioCounter % 0x100000000
|
||
end
|
||
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
|
||
isPausedOrMaxed)
|
||
local score = getPriorityScore(priority, priorityCounterKey)
|
||
rcall("ZADD", prioritizedKey, score, jobId)
|
||
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
||
end
|
||
--[[
|
||
Function to check for the meta.paused key to decide if we are paused or not
|
||
(since an empty list and !EXISTS are not really the same).
|
||
]]
|
||
local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
|
||
local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency", "max", "duration")
|
||
if queueAttributes[1] then
|
||
return pausedKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
if queueAttributes[2] then
|
||
local activeCount = rcall("LLEN", activeKey)
|
||
if activeCount >= tonumber(queueAttributes[2]) then
|
||
return waitKey, true, queueAttributes[3], queueAttributes[4]
|
||
else
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
end
|
||
end
|
||
return waitKey, false, queueAttributes[3], queueAttributes[4]
|
||
end
|
||
--[[
|
||
Function to store a job
|
||
]]
|
||
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
||
parentKey, parentData, repeatJobKey)
|
||
local jsonOpts = cjson.encode(opts)
|
||
local delay = opts['delay'] or 0
|
||
local priority = opts['priority'] or 0
|
||
local debounceId = opts['de'] and opts['de']['id']
|
||
local optionalValues = {}
|
||
if parentKey ~= nil then
|
||
table.insert(optionalValues, "parentKey")
|
||
table.insert(optionalValues, parentKey)
|
||
table.insert(optionalValues, "parent")
|
||
table.insert(optionalValues, parentData)
|
||
end
|
||
if repeatJobKey then
|
||
table.insert(optionalValues, "rjk")
|
||
table.insert(optionalValues, repeatJobKey)
|
||
end
|
||
if debounceId then
|
||
table.insert(optionalValues, "deid")
|
||
table.insert(optionalValues, debounceId)
|
||
end
|
||
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
||
"timestamp", timestamp, "delay", delay, "priority", priority,
|
||
unpack(optionalValues))
|
||
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
||
return delay, priority
|
||
end
|
||
local function storeAndEnqueueJob(eventsKey, jobIdKey, jobId, name, data, opts,
|
||
timestamp, parentKey, parentData, repeatJobKey, maxEvents,
|
||
waitKey, pausedKey, activeKey, metaKey, prioritizedKey,
|
||
priorityCounterKey, delayedKey, markerKey)
|
||
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, name, data,
|
||
opts, timestamp, parentKey, parentData, repeatJobKey)
|
||
if delay ~= 0 and delayedKey then
|
||
addDelayedJob(jobId, delayedKey, eventsKey, timestamp, maxEvents, markerKey, delay)
|
||
else
|
||
local target, isPausedOrMaxed = getTargetQueueList(metaKey, activeKey, waitKey, pausedKey)
|
||
if priority > 0 then
|
||
addJobWithPriority(markerKey, prioritizedKey, priority, jobId,
|
||
priorityCounterKey, isPausedOrMaxed)
|
||
else
|
||
local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH'
|
||
addJobInTargetList(target, markerKey, pushCmd, isPausedOrMaxed, jobId)
|
||
end
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
||
"jobId", jobId)
|
||
end
|
||
return delay, priority
|
||
end
|
||
local function addJobFromScheduler(jobKey, jobId, opts, waitKey, pausedKey, activeKey, metaKey,
|
||
prioritizedKey, priorityCounter, delayedKey, markerKey, eventsKey, name, maxEvents, timestamp,
|
||
data, jobSchedulerId, repeatDelay)
|
||
opts['delay'] = repeatDelay
|
||
opts['jobId'] = jobId
|
||
storeAndEnqueueJob(eventsKey, jobKey, jobId, name, data, opts,
|
||
timestamp, nil, nil, jobSchedulerId, maxEvents,
|
||
waitKey, pausedKey, activeKey, metaKey, prioritizedKey,
|
||
priorityCounter, delayedKey, markerKey)
|
||
end
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
local function getJobSchedulerEveryNextMillis(prevMillis, every, now, offset, startDate)
|
||
offset = tonumber(offset)
|
||
local nextMillis
|
||
if not prevMillis then
|
||
if startDate then
|
||
-- Assuming startDate is passed as milliseconds from JavaScript
|
||
nextMillis = tonumber(startDate)
|
||
nextMillis = nextMillis > now and nextMillis or now
|
||
else
|
||
if offset and offset > 0 then
|
||
-- Align to the next slot that respects the offset
|
||
nextMillis = math.floor(now / every) * every + offset
|
||
if nextMillis <= now then
|
||
nextMillis = nextMillis + every
|
||
end
|
||
else
|
||
nextMillis = now
|
||
end
|
||
end
|
||
else
|
||
nextMillis = prevMillis + every
|
||
-- check if we may have missed some iterations
|
||
if nextMillis < now then
|
||
-- Use the same offset-aware alignment as the initial branch
|
||
-- above so a non-zero offset is preserved across catch-ups
|
||
-- instead of being flattened to (slot + every). When the
|
||
-- aligned slot is itself still in the past, advance by one
|
||
-- full interval; otherwise the aligned slot is the next
|
||
-- iteration.
|
||
local aligned = math.floor(now / every) * every + (offset or 0)
|
||
if aligned <= now then
|
||
nextMillis = aligned + every
|
||
else
|
||
nextMillis = aligned
|
||
end
|
||
end
|
||
end
|
||
if not offset or offset == 0 then
|
||
local timeSlot = math.floor(nextMillis / every) * every;
|
||
offset = nextMillis - timeSlot;
|
||
end
|
||
-- Return a tuple nextMillis, offset
|
||
return math.floor(nextMillis), math.floor(offset)
|
||
end
|
||
local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
|
||
-- Validate that scheduler exists.
|
||
-- If it does not exist we should not iterate anymore.
|
||
if prevMillis then
|
||
prevMillis = tonumber(prevMillis)
|
||
local schedulerKey = repeatKey .. ":" .. jobSchedulerId
|
||
local schedulerAttributes = rcall("HMGET", schedulerKey, "name", "data", "every", "startDate", "offset")
|
||
local every = tonumber(schedulerAttributes[3])
|
||
local now = tonumber(timestamp)
|
||
-- If every is not found in scheduler attributes, try to get it from job options
|
||
if not every and jobOpts['repeat'] and jobOpts['repeat']['every'] then
|
||
every = tonumber(jobOpts['repeat']['every'])
|
||
end
|
||
if every then
|
||
local startDate = schedulerAttributes[4]
|
||
local jobOptsOffset = jobOpts['repeat'] and jobOpts['repeat']['offset'] or 0
|
||
local offset = schedulerAttributes[5] or jobOptsOffset or 0
|
||
local newOffset
|
||
nextMillis, newOffset = getJobSchedulerEveryNextMillis(prevMillis, every, now, offset, startDate)
|
||
if not offset then
|
||
rcall("HSET", schedulerKey, "offset", newOffset)
|
||
jobOpts['repeat']['offset'] = newOffset
|
||
end
|
||
end
|
||
local nextDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
|
||
local nextDelayedJobKey = schedulerKey .. ":" .. nextMillis
|
||
local currentDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
|
||
if producerId == currentDelayedJobId then
|
||
local eventsKey = KEYS[9]
|
||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||
if rcall("EXISTS", nextDelayedJobKey) ~= 1 then
|
||
rcall("ZADD", repeatKey, nextMillis, jobSchedulerId)
|
||
rcall("HINCRBY", schedulerKey, "ic", 1)
|
||
rcall("INCR", KEYS[8])
|
||
-- TODO: remove this workaround in next breaking change,
|
||
-- all job-schedulers must save job data
|
||
local templateData = schedulerAttributes[2] or ARGV[3]
|
||
if templateData and templateData ~= '{}' then
|
||
rcall("HSET", schedulerKey, "data", templateData)
|
||
end
|
||
local delay = nextMillis - now
|
||
-- Fast Clamp delay to minimum of 0
|
||
if delay < 0 then
|
||
delay = 0
|
||
end
|
||
jobOpts["delay"] = delay
|
||
addJobFromScheduler(nextDelayedJobKey, nextDelayedJobId, jobOpts, waitKey, pausedKey, KEYS[12], metaKey,
|
||
prioritizedKey, KEYS[10], delayedKey, KEYS[7], eventsKey, schedulerAttributes[1], maxEvents, ARGV[5],
|
||
templateData or '{}', jobSchedulerId, delay)
|
||
-- TODO: remove this workaround in next breaking change
|
||
if KEYS[11] ~= "" then
|
||
rcall("HSET", KEYS[11], "nrjid", nextDelayedJobId)
|
||
end
|
||
return nextDelayedJobId .. "" -- convert to string
|
||
else
|
||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "duplicated", "jobId", nextDelayedJobId)
|
||
end
|
||
end
|
||
end
|
||
`;Vg.updateJobScheduler={name:"updateJobScheduler",content:b1e,keys:12}});var qG=h(Wg=>{"use strict";Object.defineProperty(Wg,"__esModule",{value:!0});Wg.updateProgress=void 0;var v1e=`--[[
|
||
Update job progress
|
||
Input:
|
||
KEYS[1] Job id key
|
||
KEYS[2] event stream key
|
||
KEYS[3] meta key
|
||
ARGV[1] id
|
||
ARGV[2] progress
|
||
Output:
|
||
0 - OK
|
||
-1 - Missing job.
|
||
Event:
|
||
progress(jobId, progress)
|
||
]]
|
||
local rcall = redis.call
|
||
-- Includes
|
||
--[[
|
||
Function to get max events value or set by default 10000.
|
||
]]
|
||
local function getOrSetMaxEvents(metaKey)
|
||
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
||
if not maxEvents then
|
||
maxEvents = 10000
|
||
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
||
end
|
||
return maxEvents
|
||
end
|
||
if rcall("EXISTS", KEYS[1]) == 1 then -- // Make sure job exists
|
||
local maxEvents = getOrSetMaxEvents(KEYS[3])
|
||
rcall("HSET", KEYS[1], "progress", ARGV[2])
|
||
rcall("XADD", KEYS[2], "MAXLEN", "~", maxEvents, "*", "event", "progress",
|
||
"jobId", ARGV[1], "data", ARGV[2]);
|
||
return 0
|
||
else
|
||
return -1
|
||
end
|
||
`;Wg.updateProgress={name:"updateProgress",content:v1e,keys:3}});var FG=h(Yg=>{"use strict";Object.defineProperty(Yg,"__esModule",{value:!0});Yg.updateRepeatableJobMillis=void 0;var E1e=`--[[
|
||
Adds a repeatable job
|
||
Input:
|
||
KEYS[1] 'repeat' key
|
||
ARGV[1] next milliseconds
|
||
ARGV[2] custom key
|
||
ARGV[3] legacy custom key TODO: remove this logic in next breaking change
|
||
Output:
|
||
repeatableKey - OK
|
||
]]
|
||
local rcall = redis.call
|
||
local repeatKey = KEYS[1]
|
||
local nextMillis = ARGV[1]
|
||
local customKey = ARGV[2]
|
||
local legacyCustomKey = ARGV[3]
|
||
if rcall("ZSCORE", repeatKey, customKey) then
|
||
rcall("ZADD", repeatKey, nextMillis, customKey)
|
||
return customKey
|
||
elseif rcall("ZSCORE", repeatKey, legacyCustomKey) ~= false then
|
||
rcall("ZADD", repeatKey, nextMillis, legacyCustomKey)
|
||
return legacyCustomKey
|
||
end
|
||
return ''
|
||
`;Yg.updateRepeatableJobMillis={name:"updateRepeatableJobMillis",content:E1e,keys:1}});var $G=h(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});var B=(nr(),Pt(rr));B.__exportStar(Jz(),z);B.__exportStar(zz(),z);B.__exportStar(Gz(),z);B.__exportStar(Bz(),z);B.__exportStar(Hz(),z);B.__exportStar(Vz(),z);B.__exportStar(Wz(),z);B.__exportStar(Yz(),z);B.__exportStar(Qz(),z);B.__exportStar(Xz(),z);B.__exportStar(Zz(),z);B.__exportStar(eG(),z);B.__exportStar(tG(),z);B.__exportStar(rG(),z);B.__exportStar(nG(),z);B.__exportStar(iG(),z);B.__exportStar(sG(),z);B.__exportStar(oG(),z);B.__exportStar(aG(),z);B.__exportStar(cG(),z);B.__exportStar(lG(),z);B.__exportStar(uG(),z);B.__exportStar(dG(),z);B.__exportStar(pG(),z);B.__exportStar(fG(),z);B.__exportStar(mG(),z);B.__exportStar(hG(),z);B.__exportStar(yG(),z);B.__exportStar(gG(),z);B.__exportStar(bG(),z);B.__exportStar(vG(),z);B.__exportStar(EG(),z);B.__exportStar(SG(),z);B.__exportStar(xG(),z);B.__exportStar(wG(),z);B.__exportStar(_G(),z);B.__exportStar(IG(),z);B.__exportStar(TG(),z);B.__exportStar(kG(),z);B.__exportStar(AG(),z);B.__exportStar(RG(),z);B.__exportStar(OG(),z);B.__exportStar(CG(),z);B.__exportStar(jG(),z);B.__exportStar(PG(),z);B.__exportStar(KG(),z);B.__exportStar(DG(),z);B.__exportStar(MG(),z);B.__exportStar(NG(),z);B.__exportStar(LG(),z);B.__exportStar(qG(),z);B.__exportStar(FG(),z)});var Kd=h(Qg=>{"use strict";Object.defineProperty(Qg,"__esModule",{value:!0});Qg.createIORedisClient=yk;Qg.isIRedisClient=S1e;var UG=new WeakMap;function yk(t){if(t.__bullmq_iredis===!0)return t;let e=UG.get(t);if(e)return e;let r=t.isCluster===!0,n=new Map,i=Object.create(null);i.__bullmq_iredis=!0,i.isCluster=r,i.runCommand=(o,a)=>t[o](a),i.pipeline=(...o)=>JG(t.pipeline(...o)),i.multi=(...o)=>JG(t.multi(...o)),typeof t.duplicate=="function"&&(i.duplicate=o=>{var a;if(r){let c=((a=t.options)===null||a===void 0?void 0:a.redisOptions)||{},l=o?Object.assign(Object.assign({},c),o):c;return yk(t.duplicate(void 0,{redisOptions:l}))}return yk(t.duplicate(o))}),i.hset=(o,a,...c)=>{if(typeof a=="string")return t.hset(o,a,...c);let l=[o];for(let[u,d]of Object.entries(a))l.push(u,d);return t.hset(...l)},i.set=(o,a,c,...l)=>{if(typeof c=="string"||c==null)return t.set(o,a,...c!=null?[c,...l]:[]);let u=[o,a];return c.PX!=null?u.push("PX",c.PX):c.EX!=null&&u.push("EX",c.EX),t.set(...u)},i.zrange=(o,a,c,l,...u)=>typeof l=="string"?t.zrange(o,a,c,l,...u):l?.WITHSCORES?t.zrange(o,a,c,"WITHSCORES"):t.zrange(o,a,c),i.zrevrange=(o,a,c,l,...u)=>typeof l=="string"?t.zrevrange(o,a,c,l,...u):l?.WITHSCORES?t.zrevrange(o,a,c,"WITHSCORES"):t.zrevrange(o,a,c),i.xadd=(o,a,c,...l)=>{if(typeof c=="string")return t.xadd(o,a,c,...l);let u=l[0],d=[o];u?.MAXLEN!=null&&(d.push("MAXLEN"),u.approximate!==!1&&d.push("~"),d.push(u.MAXLEN)),d.push(a);for(let[p,f]of Object.entries(c))d.push(p,f);return t.xadd(...d)},i.xread=(o,...a)=>{if(typeof o=="string")return t.xread(o,...a);let c=a[0],l=[];c?.BLOCK!=null&&l.push("BLOCK",c.BLOCK),c?.COUNT!=null&&l.push("COUNT",c.COUNT),l.push("STREAMS");for(let u of o)l.push(u.key);for(let u of o)l.push(u.id);return t.xread(...l)},i.xtrim=(o,a,c,...l)=>{if(typeof c=="string"||l.length===0)return t.xtrim(o,a,c,...l);let u=l[0],d=[o,a];return u?.approximate!==!1&&d.push("~"),d.push(c),t.xtrim(...d)},i.clientSetName=o=>t.client("SETNAME",o),i.clientList=()=>t.client("LIST"),i.scan=(o,...a)=>{if(a.length===0||typeof a[0]=="string"||typeof a[0]=="function")return t.scan(o,...a);let c=a[0],l=[o];return c?.MATCH!=null&&l.push("MATCH",c.MATCH),c?.COUNT!=null&&l.push("COUNT",c.COUNT),t.scan(...l)};let s=new Proxy(t,{get(o,a){if(a in i)return i[a];let c=Reflect.get(o,a,o);if(typeof c!="function")return c;if(Object.prototype.hasOwnProperty.call(o,a))return c.bind(o);let l=n.get(a);if(l!==void 0)return l;let u=c.bind(o);return n.set(a,u),u},set(o,a,c){return a in i?(i[a]=c,!0):(n.delete(a),Reflect.set(o,a,c))},deleteProperty(o,a){return a in i?!1:(n.delete(a),Reflect.deleteProperty(o,a))},has(o,a){return a in i||Reflect.has(o,a)}});return UG.set(t,s),s}function JG(t){let e=t;e.runCommand=function(s,o){return e[s](o),e};let r=e.hset.bind(e);e.hset=function(s,o){let a=[s];for(let[c,l]of Object.entries(o))a.push(c,l);return r(...a),e};let n=e.hscan.bind(e);e.hscan=function(s,o,a){return a?.COUNT!=null?n(s,o,"COUNT",a.COUNT):n(s,o),e};let i=e.sscan.bind(e);return e.sscan=function(s,o,a){return a?.COUNT!=null?i(s,o,"COUNT",a.COUNT):i(s,o),e},e}function S1e(t){return!t||typeof t!="object"?!1:t.__bullmq_iredis===!0?!0:typeof t.runCommand=="function"&&typeof t.defineCommand=="function"&&typeof t.pipeline=="function"&&typeof t.multi=="function"&&typeof t.duplicate=="function"&&typeof t.scanStream=="function"&&typeof t.connect=="function"&&typeof t.disconnect=="function"&&typeof t.on=="function"&&typeof t.status=="string"&&typeof t.isCluster=="boolean"}});var Md=h(tb=>{"use strict";Object.defineProperty(tb,"__esModule",{value:!0});tb.RedisConnection=void 0;var x1e=(nr(),Pt(rr)),w1e=require("events"),zG=Uz(),gk=gt(),yr=Dr(),_1e=Ay(),I1e=$G(),bk=Kd(),Xg=zo(),T1e=["BullMQ: WARNING! Your redis options maxRetriesPerRequest must be null","and will be overridden by BullMQ."].join(" "),k1e="BullMQ: Your redis options maxRetriesPerRequest must be null.",Zg=Symbol("bullmqClusterReconnectPromise"),vk=Symbol("bullmqClusterPatchedForBlocking"),eb=Symbol("bullmqClusterOriginalBzpopmin"),Ek=Symbol("bullmqClusterWrappedBzpopmin"),cl=Symbol("bullmqClusterPatchRefCount"),ia=Symbol("bullmqClusterClosingRefCount"),GG=3e4,Dd=class t extends w1e.EventEmitter{constructor(e,r){if(super(),this.extraOptions=r,this.capabilities={canDoubleTimeout:!1,canBlockFor1Ms:!0},this.status="initializing",this.dbType="redis",this.packageVersion=_1e.version,this.disabledBlockingClusterReconnect=!1,this.extraOptions=Object.assign({shared:!1,blocking:!0,skipVersionCheck:!1,skipWaitingForReady:!1,clusterReconnectTimeoutMs:GG},r),!(0,yr.isRedisInstance)(e))this.checkBlockingOptions(T1e,e),this.opts=Object.assign({port:6379,host:"127.0.0.1",retryStrategy:function(n){return Math.max(Math.min(Math.exp(n),2e4),1e3)}},e),this.extraOptions.blocking&&(this.opts.maxRetriesPerRequest=null);else{if(this._client=(0,bk.isIRedisClient)(e)?e:(0,bk.createIORedisClient)(e),this._client.options.keyPrefix)throw new Error("BullMQ: ioredis does not support ioredis prefixes, use the prefix option instead.");this._client.isCluster?this.opts=this._client.options.redisOptions:this.opts=this._client.options,this.checkBlockingOptions(k1e,this.opts,!0)}this.skipVersionCheck=r?.skipVersionCheck||!!(this.opts&&this.opts.skipVersionCheck),this.handleClientError=n=>{this.emit("error",n)},this.handleClientClose=()=>{this.emit("close")},this.handleClientReady=()=>{this.emit("ready")},this.initializing=this.init(),this.initializing.catch(n=>this.emit("error",n))}checkBlockingOptions(e,r,n=!1){if(this.extraOptions.blocking&&r&&r.maxRetriesPerRequest){if(n)throw new Error(e);console.error(e)}}static async waitUntilReady(e){if(e.status==="ready"||e.status==="connect"&&(0,yr.isRedisCluster)(e))return;if(e.status==="wait")return e.connect();if(e.status==="end")throw new Xg.ConnectionClosedError(gk.CONNECTION_CLOSED_ERROR_MSG);let r,n,i;try{await new Promise((s,o)=>{let a;i=c=>{a=c},r=()=>{s()},n=()=>{e.status!=="end"?o(a||new Xg.ConnectionClosedError(gk.CONNECTION_CLOSED_ERROR_MSG)):a?o(a):s()},(0,yr.increaseMaxListeners)(e,3),e.once("ready",r),e.on("end",n),e.once("error",i)})}finally{e.removeListener("end",n),e.removeListener("error",i),e.removeListener("ready",r),(0,yr.decreaseMaxListeners)(e,3)}}get client(){return this.initializing}loadCommands(e,r){let n=r||I1e;for(let i in n){let s=`${n[i].name}:${e}`;this._client[s]||this._client.defineCommand(s,{numberOfKeys:n[i].keys,lua:n[i].content})}}async init(){if(!this._client)if(t.clientFactory)this._client=t.clientFactory(this.opts);else{let e=this.opts,{url:r}=e,n=x1e.__rest(e,["url"]),i=r?new zG.default(r,n):new zG.default(n);this._client=(0,bk.createIORedisClient)(i)}if((0,yr.increaseMaxListeners)(this._client,3),this._client.on("error",this.handleClientError),this._client.on("close",this.handleClientClose),this._client.on("ready",this.handleClientReady),this.patchBlockingClusterClient(),this.extraOptions.skipWaitingForReady||await t.waitUntilReady(this._client),this.loadCommands(this.packageVersion),this._client.status!=="end"){let e=await this.getRedisVersionAndType();if(this.version=e.version,this.dbType=e.databaseType,this.skipVersionCheck!==!0&&!this.closing){if((0,yr.isRedisVersionLowerThan)(this.version,t.minimumVersion,this.dbType))throw new Error(`Redis version needs to be greater or equal than ${t.minimumVersion} Current: ${this.version}`);(0,yr.isRedisVersionLowerThan)(this.version,t.recommendedMinimumVersion,this.dbType)&&console.warn(`It is highly recommended to use a minimum Redis version of ${t.recommendedMinimumVersion}
|
||
Current: ${this.version}`)}this.capabilities={canDoubleTimeout:!(0,yr.isRedisVersionLowerThan)(this.version,"6.0.0",this.dbType),canBlockFor1Ms:!(0,yr.isRedisVersionLowerThan)(this.version,"7.0.8",this.dbType)},this.status="ready"}return this._client}patchBlockingClusterClient(){var e;let r=this._client,n=r;if(!this.extraOptions.blocking||!(0,yr.isRedisCluster)(r)||typeof n.bzpopmin!="function")return;let i=(e=this.extraOptions.clusterReconnectTimeoutMs)!==null&&e!==void 0?e:GG;if(n[cl]=(n[cl]||0)+1,this.patchedBlockingClusterClient=n,n[vk])return;let s=n.bzpopmin,o=async(...a)=>{await t.reconnectClusterIfNeeded(n,i);try{return await s.apply(n,a)}catch(c){let l=c;if(t.shouldReconnectClusterAfterError(n,l))try{await t.reconnectCluster(n,i)}catch{}throw l}};n[eb]=s,n[Ek]=o,n[vk]=!0,n.bzpopmin=o}disableBlockingClusterReconnect(){let e=this.patchedBlockingClusterClient;!e||this.disabledBlockingClusterReconnect||(e[ia]=(e[ia]||0)+1,this.disabledBlockingClusterReconnect=!0)}releaseBlockingClusterClientPatch(){let e=this.patchedBlockingClusterClient;if(!e)return;if(this.disabledBlockingClusterReconnect){let n=(e[ia]||1)-1;n>0?e[ia]=n:delete e[ia],this.disabledBlockingClusterReconnect=!1}let r=(e[cl]||1)-1;if(r>0){e[cl]=r,this.patchedBlockingClusterClient=void 0;return}e[eb]&&e.bzpopmin===e[Ek]&&(e.bzpopmin=e[eb]),delete e[cl],delete e[ia],delete e[eb],delete e[Ek],delete e[vk],this.patchedBlockingClusterClient=void 0}static isClusterWithEmptyNodes(e){return typeof e.nodes=="function"&&e.nodes().length===0}static isReconnectingDisabled(e){let r=e[cl]||0,n=e[ia]||0;return r===0||n>=r||e.status==="end"||e.status==="closing"}static async reconnectClusterIfNeeded(e,r){!t.isReconnectingDisabled(e)&&t.isClusterWithEmptyNodes(e)&&await t.reconnectCluster(e,r)}static shouldReconnectClusterAfterError(e,r){var n,i;if(t.isReconnectingDisabled(e))return!1;let s=[r.message,(n=r.cause)===null||n===void 0?void 0:n.message,(i=r.lastNodeError)===null||i===void 0?void 0:i.message].join(" ");return t.isClusterWithEmptyNodes(e)||/Command timed out|Failed to refresh slots cache/i.test(s)}static async reconnectCluster(e,r){t.isReconnectingDisabled(e)||(e[Zg]||(e[Zg]=t.connectClusterWithTimeout(e,r).finally(()=>{e[Zg]=null})),await e[Zg])}static async connectClusterWithTimeout(e,r){e.disconnect(!1);let n;try{await Promise.race([e.connect(),new Promise((i,s)=>{var o;n=setTimeout(()=>{s(new Xg.ConnectionClosedError(`BullMQ: cluster reconnect timed out after ${r}ms`))},r),(o=n.unref)===null||o===void 0||o.call(n)})])}finally{n&&clearTimeout(n)}}async disconnect(e=!0){let r=await this.client;if(r.status!=="end"){let n,i;if(!e)return r.disconnect();let s=new Promise((o,a)=>{(0,yr.increaseMaxListeners)(r,2),r.once("end",o),r.once("error",a),n=o,i=a});r.disconnect();try{await s}finally{(0,yr.decreaseMaxListeners)(r,2),r.removeListener("end",n),r.removeListener("error",i)}}}async reconnect(){let e=await this.client;for(;;){if(this.closing)throw new Xg.ConnectionClosedError(gk.CONNECTION_CLOSED_ERROR_MSG);if(e.status==="ready"||e.status==="connect"&&(0,yr.isRedisCluster)(e))return;if(e.status==="wait"||e.status==="end")return e.connect();try{await t.waitUntilReady(e)}catch(r){if(!["end","connecting","connect","reconnecting"].includes(e.status))throw r}}}async close(e=!1){var r;if(!this.closing){let n=this.status;this.status="closing",this.closing=!0,this.disableBlockingClusterReconnect();try{n==="ready"&&await this.initializing,this.extraOptions.shared||(n=="initializing"||e?(this._client.disconnect(),(r=this.initializing)===null||r===void 0||r.catch(()=>{})):await this._client.quit(),this._client.status="end")}catch(i){if((0,yr.isNotConnectionError)(i))throw i}finally{this.releaseBlockingClusterClientPatch(),this._client.off("error",this.handleClientError),this._client.off("close",this.handleClientClose),this._client.off("ready",this.handleClientReady),(0,yr.decreaseMaxListeners)(this._client,3),this.removeAllListeners(),this.status="closed"}}}async getRedisVersionAndType(){if(this.skipVersionCheck)return{version:t.minimumVersion,databaseType:"redis"};let e=await this._client.info(),r="redis_version:",n="maxmemory_policy:",i=e.split(/\r?\n/),s,o="redis";for(let a=0;a<i.length;a++){let c=i[a];if(c.includes("dragonfly_version:")||c.includes("server:Dragonfly")?(o="dragonfly",c.indexOf("dragonfly_version:")===0&&(s=c.substr(18))):c.includes("valkey_version:")||c.includes("server:Valkey")?(o="valkey",c.indexOf("valkey_version:")===0&&(s=c.substr(15))):c.indexOf(r)===0&&(s=c.substr(r.length),o==="redis"&&(o="redis")),c.indexOf(n)===0){let l=c.substr(n.length);l!=="noeviction"&&console.warn(`IMPORTANT! Eviction policy is ${l}. It should be "noeviction"`)}}if(!s){for(let a of i)if(a.includes("version:")){let c=a.split(":");if(c.length>=2){s=c[1];break}}}return{version:s||t.minimumVersion,databaseType:o}}get redisVersion(){return this.version}get databaseType(){return this.dbType}};tb.RedisConnection=Dd;Dd.minimumVersion="5.0.0";Dd.recommendedMinimumVersion="6.2.0"});var BG=h(nb=>{"use strict";Object.defineProperty(nb,"__esModule",{value:!0});nb.FlowProducer=void 0;var A1e=require("events"),fi=Dr(),R1e=Id(),O1e=Qc(),rb=jy(),C1e=Md(),mi=_r(),Sk=class extends A1e.EventEmitter{constructor(e={connection:{}},r=C1e.RedisConnection){super(),this.opts=e,this.queues=new Map,this.opts=Object.assign({prefix:"bull"},e),this.connection=new r(e.connection,{shared:(0,fi.isRedisInstance)(e.connection),blocking:!1,skipVersionCheck:e.skipVersionCheck,skipWaitingForReady:e.skipWaitingForReady}),(0,fi.forwardConnectionError)(this,this.connection),this.connection.on("close",()=>{this.queues.clear(),this.closing||this.emit("ioredis:close")}),this.queueKeys=new rb.QueueKeys(e.prefix),e?.telemetry&&(this.telemetry=e.telemetry)}createScripts(e){var r;return(r=e.scripts)!==null&&r!==void 0?r:(0,R1e.createScripts)(e)}emit(e,...r){return super.emit(e,...r)}off(e,r){return super.off(e,r),this}on(e,r){return super.on(e,r),this}once(e,r){return super.once(e,r),this}get client(){return this.connection.client}get Job(){return O1e.Job}waitUntilReady(){return this.client}async add(e,r){var n;if(this.closing)return;let s=(await this.connection.client).multi(),o=(n=e?.opts)===null||n===void 0?void 0:n.parent,a=(0,fi.getParentKey)(o),c=a?`${a}:dependencies`:void 0;return(0,fi.trace)(this.telemetry,mi.SpanKind.PRODUCER,e.queueName,"addFlow",e.queueName,async l=>{l?.setAttributes({[mi.TelemetryAttributes.FlowName]:e.name});let u=await this.addNode({multi:s,node:e,queuesOpts:r?.queuesOptions,parent:{parentOpts:o,parentDependenciesKey:c}}),d=await s.exec(),[p]=d||[];if(p){let[f,m]=p;if(f)throw f;if(typeof m=="number"&&m<0)throw this.toFlowError(m,a);typeof m=="string"?u.job.id=m:typeof m=="number"&&(u.job.id=m.toString())}return u})}async getFlow(e){if(this.closing)return;let r=await this.connection.client,n=Object.assign({depth:10,maxChildren:20,prefix:this.opts.prefix},e);return this.getNode(r,n)}async addBulk(e){if(this.closing)return;let n=(await this.connection.client).multi();return(0,fi.trace)(this.telemetry,mi.SpanKind.PRODUCER,"","addBulkFlows","",async i=>{var s,o;i?.setAttributes({[mi.TelemetryAttributes.BulkCount]:e.length,[mi.TelemetryAttributes.BulkNames]:e.map(l=>l.name).join(",")});let a=await this.addNodes(n,e),c=await n.exec();for(let l=0;l<a.length;++l){let u=c?.[l];if(!u)continue;let[d,p]=u;if(d)throw d;if(typeof p=="number"&&p<0)throw this.toFlowError(p,(0,fi.getParentKey)((o=(s=e[l])===null||s===void 0?void 0:s.opts)===null||o===void 0?void 0:o.parent));typeof p=="string"?a[l].job.id=p:typeof p=="number"&&(a[l].job.id=p.toString())}return a})}async addNode({multi:e,node:r,parent:n,queuesOpts:i}){var s,o;let a=r.prefix||this.opts.prefix,c=this.queueFromNode(r,new rb.QueueKeys(a),a),l=i&&i[r.queueName],u=(s=l?.defaultJobOptions)!==null&&s!==void 0?s:{},d=((o=r.opts)===null||o===void 0?void 0:o.jobId)||(0,fi.randomUUID)();return(0,fi.trace)(this.telemetry,mi.SpanKind.PRODUCER,r.queueName,"addNode",r.queueName,async(p,f)=>{var m,y;p?.setAttributes({[mi.TelemetryAttributes.JobName]:r.name,[mi.TelemetryAttributes.JobId]:d});let b=r.opts,v=b?.telemetry;if(f&&b){let k=(m=b.telemetry)===null||m===void 0?void 0:m.omitContext,_=((y=b.telemetry)===null||y===void 0?void 0:y.metadata)||!k&&f;(_||k)&&(v={metadata:_,omitContext:k})}let E=new this.Job(c,r.name,r.data,Object.assign(Object.assign(Object.assign({},u),b),{parent:n?.parentOpts,telemetry:v}),d),S=(0,fi.getParentKey)(n?.parentOpts);if(r.children&&r.children.length>0){let k=d,_=new rb.QueueKeys(r.prefix||this.opts.prefix);await E.addJob(e,{parentDependenciesKey:n?.parentDependenciesKey,addToWaitingChildren:!0,parentKey:S});let O=`${_.toKey(r.queueName,k)}:dependencies`,N=await this.addChildren({multi:e,nodes:r.children,parent:{parentOpts:{id:k,queue:_.getQueueQualifiedName(r.queueName)},parentDependenciesKey:O},queuesOpts:i});return{job:E,children:N}}else return await E.addJob(e,{parentDependenciesKey:n?.parentDependenciesKey,parentKey:S}),{job:E}})}addNodes(e,r){return Promise.all(r.map(n=>{var i;let s=(i=n?.opts)===null||i===void 0?void 0:i.parent,o=(0,fi.getParentKey)(s),a=o?`${o}:dependencies`:void 0;return this.addNode({multi:e,node:n,parent:{parentOpts:s,parentDependenciesKey:a}})}))}async getNode(e,r){let n=this.queueFromNode(r,new rb.QueueKeys(r.prefix),r.prefix),i=await this.Job.fromId(n,r.id);if(i){let{processed:s={},unprocessed:o=[],failed:a=[],ignored:c={}}=await i.getDependencies({failed:{count:r.maxChildren},processed:{count:r.maxChildren},unprocessed:{count:r.maxChildren},ignored:{count:r.maxChildren}}),l=Object.keys(s),u=Object.keys(c),d=l.length+o.length+u.length+a.length,p=r.depth-1;if(d>0&&p){let f=await this.getChildren(e,[...l,...o,...a,...u],p,r.maxChildren);return{job:i,children:f}}else return{job:i}}}addChildren({multi:e,nodes:r,parent:n,queuesOpts:i}){return Promise.all(r.map(s=>this.addNode({multi:e,node:s,parent:n,queuesOpts:i})))}getChildren(e,r,n,i){let s=o=>{let[a,c,l]=o.split(":");return this.getNode(e,{id:l,queueName:c,prefix:a,depth:n,maxChildren:i})};return Promise.all([...r.map(s)])}queueFromNode(e,r,n){let i=`${n}:${e.queueName}`,s=this.queues.get(i);if(s)return s;let o=this,a={client:this.connection.client,name:e.queueName,keys:r.getKeys(e.queueName),toKey:c=>r.toKey(e.queueName,c),opts:{prefix:n,connection:{}},qualifiedName:r.getQueueQualifiedName(e.queueName),get closing(){return o.closing},waitUntilReady:async()=>this.connection.client,removeListener:this.removeListener.bind(this),emit:this.emit.bind(this),on:this.on.bind(this),get redisVersion(){return o.connection.redisVersion},get databaseType(){return o.connection.databaseType},trace:async()=>{}};return a.scripts=this.createScripts(a),this.queues.set(i,a),a}toFlowError(e,r){let n;switch(e){case mi.ErrorCode.ParentJobNotExist:n=new Error(`Missing key for parent job ${r}. addJob`);break;case mi.ErrorCode.ParentJobCannotBeReplaced:n=new Error(`The parent job ${r} cannot be replaced. addJob`);break;default:n=new Error(`Unknown code ${e} error for addJob`)}return n.code=e,n}async close(){this.closing||(this.queues.clear(),this.closing=this.connection.close()),await this.closing}disconnect(){return this.connection.disconnect()}};nb.FlowProducer=Sk});var VG=h(_k=>{"use strict";Object.defineProperty(_k,"__esModule",{value:!0});_k.createNodeRedisClient=M1e;var j1e=(nr(),Pt(rr)),P1e=require("crypto"),K1e=require("events"),D1e=require("stream"),ib=zo();function HG(t){return t.length===1&&Array.isArray(t[0])?t[0]:t}function hi(t){return t?.message==="Disconnects client"||t?.message==="The client is closed"||t?.message==="Connection is closed."}function M1e(t){return new xk(t)}var xk=class t extends K1e.EventEmitter{get status(){return this.statusOverride?this.statusOverride:this.raw.isReady?"ready":this.raw.isOpen?"connect":this.hasConnected?"end":"wait"}set status(e){if(e==="end"&&(this.destroying=!0,this.raw.isOpen))try{this.raw.quit().catch(()=>{})}catch{}this.statusOverride=e}get options(){var e;return(e=this.raw.options)!==null&&e!==void 0?e:{}}set options(e){}constructor(e){super(),this.raw=e,this.scripts=new Map,this.hasConnected=!1,this.destroying=!1,this.isCluster=!1,e.on("ready",()=>{this.hasConnected=!0,this.connectionName?this.raw.clientSetName(this.connectionName).then(()=>this.emit("ready"),()=>this.emit("ready")):this.emit("ready")}),e.on("error",r=>{this.destroying&&hi(r)||this.emit("error",r)}),e.on("end",()=>this.emit("close")),e.on("reconnecting",()=>this.emit("reconnecting")),e.isOpen||(this.connectPromise=e.connect().then(()=>{this.connectPromise=void 0},r=>{this.connectPromise=void 0}))}async connect(){if(this.connectPromise)return this.connectPromise;if(!this.raw.isOpen)return this.connectPromise=this.raw.connect().then(()=>{this.connectPromise=void 0},e=>{throw this.connectPromise=void 0,e}),this.connectPromise;this.raw.isReady||await new Promise((e,r)=>{let n=()=>{o(),e()},i=a=>{o(),r(a)},s=()=>{o(),r(new Error("Connection ended before ready event"))},o=()=>{this.off("ready",n),this.off("error",i),this.off("end",s)};this.once("ready",n),this.once("error",i),this.once("end",s)})}disconnect(e=!1){this.destroying=!0,e||(this.statusOverride="end");try{this.raw.isOpen&&this.raw.destroy()}catch{}this.emit("close"),e?(this.statusOverride=void 0,this.emit("reconnecting"),this.connect().catch(r=>{hi(r)||this.emit("error",r)}).finally(()=>{this.destroying=!1})):this.emit("end")}async quit(){if(this.destroying||this.statusOverride==="end")return setImmediate(()=>{this.emit("end"),this.emit("close")}),"OK";this.destroying=!0;try{if(this.raw.isOpen)try{await this.raw.quit()}catch{}}catch{}return this.statusOverride="end",setImmediate(()=>{this.emit("end"),this.emit("close")}),"OK"}duplicate(...e){let r=this.raw.duplicate(),n=new t(r);for(let[s,o]of this.scripts)n.scripts.set(s,o),n[s]=(...a)=>n.runCommand(s,a);let i=e[0];return i&&typeof i=="object"&&i.connectionName&&(n.connectionName=i.connectionName),n}defineCommand(e,r){let n=(0,P1e.createHash)("sha1").update(r.lua).digest("hex");this.scripts.set(e,{sha:n,lua:r.lua,numberOfKeys:r.numberOfKeys}),this[e]=(...i)=>this.runCommand(e,i),this.raw.scriptLoad(r.lua).catch(()=>{})}async runCommand(e,r){var n,i;let s=this.scripts.get(e);if(!s)throw new Error(`BullMQ: unknown command "${e}"`);let o=HG(r),{sha:a,lua:c,numberOfKeys:l}=s,u=o.slice(0,l).map(String),d=o.slice(l).map(p=>Buffer.isBuffer(p)?p:p==null?"":String(p));try{return await this.raw.evalSha(a,{keys:u,arguments:d})}catch(p){if(this.destroying&&hi(p))return null;if(hi(p))throw new ib.ConnectionClosedError(p.message,p);if(!((i=(n=p?.message)===null||n===void 0?void 0:n.includes)===null||i===void 0)&&i.call(n,"NOSCRIPT"))try{return await this.raw.eval(c,{keys:u,arguments:d})}catch(f){if(this.destroying&&hi(f))return null;throw hi(f)?new ib.ConnectionClosedError(f.message,f):f}throw p}}multi(){return new wk(this.raw.multi(),this.scripts)}pipeline(){return this.multi()}async hgetall(e){let r=await this.raw.hGetAll(e);return r??{}}async hget(e,r){var n;return(n=await this.raw.hGet(e,r))!==null&&n!==void 0?n:null}async hmget(e,...r){return(await this.raw.hmGet(e,r)).map(i=>i??null)}async hset(e,r,...n){if(typeof r=="object")return await this.raw.hSet(e,r);let i={};i[r]=String(n[0]);for(let s=1;s<n.length;s+=2)i[String(n[s])]=String(n[s+1]);return await this.raw.hSet(e,i)}async hdel(e,...r){return await this.raw.hDel(e,r)}async hexists(e,r){return await this.raw.hExists(e,r)?1:0}async get(e){var r;return(r=await this.raw.get(e))!==null&&r!==void 0?r:null}async set(e,r,n){let i={};return n?.PX!=null?i.PX=n.PX:n?.EX!=null&&(i.EX=n.EX),await this.raw.set(e,String(r),i)}async del(...e){return e.length===0?0:await this.raw.del(e)}async zrange(e,r,n,i){if(i?.WITHSCORES){let s=await this.raw.zRangeWithScores(e,r,n),o=[];for(let a of s)o.push(a.value,String(a.score));return o}return await this.raw.zRange(e,r,n)}async zrevrange(e,r,n,i){if(i?.WITHSCORES){let s=await this.raw.zRangeWithScores(e,r,n,{REV:!0}),o=[];for(let a of s)o.push(a.value,String(a.score));return o}return await this.raw.zRange(e,r,n,{REV:!0})}async zcard(e){return await this.raw.zCard(e)}async zscore(e,r){let n=await this.raw.zScore(e,r);return n!=null?String(n):null}async lrange(e,r,n){return await this.raw.lRange(e,r,n)}async llen(e){return await this.raw.lLen(e)}async ltrim(e,r,n){return await this.raw.lTrim(e,r,n),"OK"}async lpos(e,r){var n;return(n=await this.raw.lPos(e,r))!==null&&n!==void 0?n:null}async smembers(e){return await this.raw.sMembers(e)}async xadd(e,r,n,i){let s={};i?.MAXLEN!=null&&(s.TRIM={strategy:"MAXLEN",threshold:i.MAXLEN,strategyModifier:i.approximate===!1?void 0:"~"});let o={};for(let[a,c]of Object.entries(n))o[a]=String(c);return await this.raw.xAdd(e,r,o,s)}async xread(e,r){let n={};r?.BLOCK!=null&&(n.BLOCK=r.BLOCK),r?.COUNT!=null&&(n.COUNT=r.COUNT);let i=e.map(o=>({key:o.key,id:o.id})),s;try{s=await this.raw.xRead(i,n)}catch(o){if(this.destroying&&hi(o))return null;throw hi(o)?new ib.ConnectionClosedError(o.message,o):o}return s?s.map(o=>[o.name,o.messages.map(a=>[a.id,Object.entries(a.message).flat()])]):null}async xtrim(e,r,n,i){let s=i?.approximate===!1?void 0:"~";return await this.raw.xTrim(e,r,n,{strategyModifier:s})}async bzpopmin(e,r){let n;try{n=await this.raw.bzPopMin(e,r)}catch(i){if(this.destroying&&hi(i))return null;throw hi(i)?new ib.ConnectionClosedError(i.message,i):i}return n?[n.key,n.value,String(n.score)]:null}async info(){return await this.raw.info()}async clientSetName(e){return await this.raw.clientSetName(e)}async clientList(){return await this.raw.sendCommand(["CLIENT","LIST"])}async scan(e,r){let n={};r?.MATCH&&(n.MATCH=r.MATCH),r?.COUNT&&(n.COUNT=r.COUNT);let i=await this.raw.scan(String(e),n);return[String(i.cursor),i.keys]}scanStream(e){let r=this.raw,n=this.connectPromise,i={};e.match&&(i.MATCH=e.match),e.count&&(i.COUNT=e.count);let s=new D1e.Readable({objectMode:!0,async read(){var o,a,c,l;try{n&&await n;try{for(var u=!0,d=j1e.__asyncValues(r.scanIterator(i)),p;p=await d.next(),o=p.done,!o;u=!0){l=p.value,u=!1;let f=l;if(!s.push(Array.isArray(f)?f:[f]))return}}catch(f){a={error:f}}finally{try{!u&&!o&&(c=d.return)&&await c.call(d)}finally{if(a)throw a.error}}s.push(null)}catch(f){s.destroy(f)}}});return s}async keys(e){return await this.raw.keys(e)}async exists(...e){return e.length===0?0:await this.raw.exists(e)}async zadd(e,...r){let n=[];for(let i=0;i<r.length;i+=2)n.push({score:Number(r[i]),value:String(r[i+1])});return await this.raw.zAdd(e,n)}async zrem(e,...r){return await this.raw.zRem(e,r)}async xlen(e){return await this.raw.xLen(e)}async xrevrange(e,r,n,...i){let s={};return i[0]==="COUNT"&&(s.COUNT=Number(i[1])),(await this.raw.xRevRange(e,r,n,s)).map(a=>[a.id,Object.entries(a.message).flat()])}async sadd(e,...r){return await this.raw.sAdd(e,r.map(String))}async scard(e){return await this.raw.sCard(e)}async lpush(e,...r){return await this.raw.lPush(e,r)}async rpop(e){return await this.raw.rPop(e)}async incr(e){return await this.raw.incr(e)}async incrby(e,r){return await this.raw.incrBy(e,r)}async flushall(){return await this.raw.flushAll()}},wk=class{constructor(e,r){this.raw=e,this.scripts=r,this.transformers=[]}addIdentityTransformer(){this.transformers.push(e=>e)}hgetall(e){return this.raw.hGetAll(e),this.addIdentityTransformer(),this}hset(e,r){return this.raw.hSet(e,r),this.addIdentityTransformer(),this}hscan(e,r,n){let i={};return n?.COUNT!=null&&(i.COUNT=n.COUNT),this.raw.hScan(e,String(r),i),this.transformers.push(s=>{if(!s)return["0",[]];let o=[];for(let a of s.entries||[])o.push(a.field,a.value);return[String(s.cursor),o]}),this}smembers(e){return this.raw.sMembers(e),this.addIdentityTransformer(),this}sscan(e,r,n){let i={};return n?.COUNT!=null&&(i.COUNT=n.COUNT),this.raw.sScan(e,String(r),i),this.transformers.push(s=>s?[String(s.cursor),s.members||[]]:["0",[]]),this}zrange(e,r,n){return this.raw.zRange(e,r,n),this.addIdentityTransformer(),this}lrange(e,r,n){return this.raw.lRange(e,r,n),this.addIdentityTransformer(),this}llen(e){return this.raw.lLen(e),this.addIdentityTransformer(),this}del(...e){return e.length>0&&(this.raw.del(e),this.addIdentityTransformer()),this}runCommand(e,r){let n=this.scripts.get(e);if(!n)throw new Error(`BullMQ: unknown command "${e}" in transaction`);let i=HG(r),{sha:s,lua:o,numberOfKeys:a}=n,c=i.slice(0,a).map(String),l=i.slice(a).map(u=>Buffer.isBuffer(u)?u:u==null?"":String(u));return this.raw.evalSha(s,{keys:c,arguments:l}),this.addIdentityTransformer(),this}async exec(){let e=await this.raw.exec();return e?e.map((r,n)=>{if(r instanceof Error)return[r,null];let i=this.transformers[n];return[null,i?i(r):r]}):null}}});var QG=h(Tk=>{"use strict";Object.defineProperty(Tk,"__esModule",{value:!0});Tk.createBunRedisClient=$1e;var N1e=require("crypto"),L1e=require("events"),q1e=require("stream"),WG=zo();function YG(t){return t.length===1&&Array.isArray(t[0])?t[0]:t}function F1e(t){var e;let r=(e=t?.message)!==null&&e!==void 0?e:"";return r==="Socket closed unexpectedly"||r.startsWith("Connection closed")||r==="Connection is closed."||r==="Connection has failed"}function sb(t){return t==null?[]:Array.isArray(t)?t.map(String):t instanceof Set?Array.from(t,e=>String(e)):[]}function $1e(t,e){return new Ik(t,e)}var Ik=class t extends L1e.EventEmitter{get status(){return this.statusOverride?this.statusOverride:this.closed?"end":this.raw.connected?"ready":this.hasConnected?"end":"wait"}set status(e){e==="end"&&(this.closing=!0,this.closed=!0),this.statusOverride=e}get options(){return{}}set options(e){}constructor(e,r){super(),this.raw=e,this.scripts=new Map,this.loadedScriptShas=new Set,this.hasConnected=!1,this.closed=!1,this.closing=!1,this.reconnecting=!1,this.reconnectTimer=null,this.reconnectAttempts=0,this.maxReconnectDelay=2e4,this.isCluster=!1,this._setupCallbacks(),r?.lazyConnect||this.connect().catch(()=>{})}_setupCallbacks(){this.raw.onconnect=()=>{this.hasConnected=!0,this.closed=!1,this.closing=!1,this.reconnecting=!1,this.reconnectAttempts=0,this.statusOverride=void 0,this.loadedScriptShas.clear(),this.connectionName?this.clientSetName(this.connectionName).then(()=>this.emit("ready"),()=>this.emit("ready")):this.emit("ready")},this.raw.onclose=e=>{if(this.closing){this.closed=!0,this.emit("close"),this.emit("end");return}this.closed=!0,this.emit("close"),e&&this.emit("error",e),this._scheduleReconnect()}}_scheduleReconnect(){if(this.closing||this.reconnecting)return;this.reconnecting=!0,this.reconnectAttempts++;let e=Math.max(Math.min(Math.exp(this.reconnectAttempts)*100,this.maxReconnectDelay),1e3);this.reconnectTimer=setTimeout(async()=>{if(this.reconnectTimer=null,this.closing){this.reconnecting=!1;return}try{let r=this.raw.constructor,n=new r(this.raw.url);this.raw=n,this.closed=!1,this.connecting=void 0,this._setupCallbacks(),await n.connect()}catch{this.reconnecting=!1,this.closing||this._scheduleReconnect()}},e)}async connect(){let e=this.hasConnected&&(this.closed||!this.raw.connected);if(this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.reconnecting=!1,this.raw.connected&&!e){this.hasConnected=!0,this.closed=!1,this.closing=!1,this.statusOverride=void 0;return}if(!this.connecting){if(this.closed=!1,this.closing=!1,this.statusOverride=void 0,e){let r=this.raw.constructor;this.raw=new r(this.raw.url),this._setupCallbacks()}this.connecting=this.raw.connect().then(()=>{this.hasConnected=!0,this.closed=!1,this.closing=!1,this.statusOverride=void 0}).finally(()=>{this.connecting=void 0})}await this.connecting}_closeRaw(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.reconnecting=!1;let e=this.raw;e.onconnect=()=>{},e.onclose=()=>{},e.onerror=()=>{},e.connected&&setImmediate(()=>{try{e.connected&&e.close()}catch{}})}disconnect(e){if(!(this.closed&&!e))if(e){this.closed=!0,this.statusOverride=void 0;let r=this.raw;r.onclose=()=>{},r.connected&&setImmediate(()=>{try{r.connected&&r.close()}catch{}}),this.emit("close"),this._scheduleReconnect()}else this.closing=!0,this.closed=!0,this.statusOverride="end",this._closeRaw(),this.emit("close"),this.emit("end")}async quit(){return this.closed?(setImmediate(()=>{this.emit("end"),this.emit("close")}),"OK"):(this.closing=!0,this.closed=!0,this.statusOverride="end",this._closeRaw(),setImmediate(()=>{this.emit("end"),this.emit("close")}),"OK")}duplicate(...e){let r=this.raw.constructor,n=new r(this.raw.url),i=new t(n);for(let[o,a]of this.scripts)i.scripts.set(o,a),i[o]=(...c)=>i.runCommand(o,c);let s=e[0];return s&&typeof s=="object"&&s.connectionName&&(i.connectionName=s.connectionName),i}defineCommand(e,r){let n=(0,N1e.createHash)("sha1").update(r.lua).digest("hex");this.scripts.set(e,{sha:n,lua:r.lua,numberOfKeys:r.numberOfKeys}),this[e]=(...i)=>this.runCommand(e,i)}async runCommand(e,r){let n=this.scripts.get(e);if(!n)throw new Error(`BullMQ: unknown command "${e}"`);let i=YG(r),{sha:s,lua:o,numberOfKeys:a}=n,c=i.slice(0,a).map(String),l=i.slice(a).map(p=>Buffer.isBuffer(p)?p:p==null?"":String(p)),u=[s,String(c.length),...c,...l];return(async()=>{var p,f;try{let m=await this.sendCommand("EVALSHA",u);return this.loadedScriptShas.add(s),m}catch(m){if(!((f=(p=m?.message)===null||p===void 0?void 0:p.includes)===null||f===void 0)&&f.call(p,"NOSCRIPT")){let y=[o,String(c.length),...c,...l],b=await this.sendCommand("EVAL",y);return this.loadedScriptShas.add(s),b}throw m}})()}async ensureScriptsLoaded(e){let r=[],n=new Set;for(let i of e)this.loadedScriptShas.has(i.sha)||n.has(i.sha)||(n.add(i.sha),r.push(i));r.length!==0&&await Promise.all(r.map(async i=>{await this.sendCommand("SCRIPT",["LOAD",i.lua]),this.loadedScriptShas.add(i.sha)}))}sendCommand(e,r){return this.closing||this.closed?Promise.reject(new WG.ConnectionClosedError("Connection is closed")):this.raw.send(e,r).catch(n=>{if(F1e(n))return this.closing||this.closed?null:Promise.reject(new WG.ConnectionClosedError(n.message,n));throw n})}multi(){return new ob(this.raw,this.scripts,!0,this)}pipeline(){return new ob(this.raw,this.scripts,!1,this)}async hgetall(e){let r=await this.sendCommand("HGETALL",[e]);if(!r||Array.isArray(r)&&r.length===0)return{};if(Array.isArray(r)){let n={};for(let i=0;i<r.length;i+=2)n[String(r[i])]=String(r[i+1]);return n}return r}async hget(e,r){let n=await this.sendCommand("HGET",[e,r]);return n??null}async hmget(e,...r){return(await this.sendCommand("HMGET",[e,...r])||[]).map(i=>i??null)}async hset(e,r,...n){let i;if(typeof r=="object"){i=[e];for(let[s,o]of Object.entries(r))i.push(s,String(o))}else{i=[e,r,String(n[0])];for(let s=1;s<n.length;s+=2)i.push(String(n[s]),String(n[s+1]))}return await this.sendCommand("HSET",i)}async hdel(e,...r){return await this.sendCommand("HDEL",[e,...r])}async hexists(e,r){let n=await this.sendCommand("HEXISTS",[e,r]);return n===!0||n===1?1:0}async get(e){let r=await this.sendCommand("GET",[e]);return r??null}async set(e,r,n){let i=[e,String(r)];return n?.PX!=null?i.push("PX",String(n.PX)):n?.EX!=null&&i.push("EX",String(n.EX)),await this.sendCommand("SET",i)}async del(...e){return e.length===0?0:await this.sendCommand("DEL",e)}async zrange(e,r,n,i){let s=[e,String(r),String(n)];i?.WITHSCORES&&s.push("WITHSCORES");let o=await this.sendCommand("ZRANGE",s);return o?i?.WITHSCORES&&o.length>0&&Array.isArray(o[0])?o.flatMap(a=>[String(a[0]),String(a[1])]):o.map(String):[]}async zrevrange(e,r,n,i){let s=[e,String(r),String(n)];i?.WITHSCORES&&s.push("WITHSCORES"),s.push("REV");let o=await this.sendCommand("ZRANGE",s);return o?i?.WITHSCORES&&o.length>0&&Array.isArray(o[0])?o.flatMap(a=>[String(a[0]),String(a[1])]):o.map(String):[]}async zcard(e){return await this.sendCommand("ZCARD",[e])}async zscore(e,r){let n=await this.sendCommand("ZSCORE",[e,r]);return n!=null?String(n):null}async lrange(e,r,n){return(await this.sendCommand("LRANGE",[e,String(r),String(n)])||[]).map(String)}async llen(e){return await this.sendCommand("LLEN",[e])}async ltrim(e,r,n){return await this.sendCommand("LTRIM",[e,String(r),String(n)]),"OK"}async lpos(e,r){let n=await this.sendCommand("LPOS",[e,r]);return n??null}async smembers(e){let r=await this.sendCommand("SMEMBERS",[e]);return sb(r)}async xadd(e,r,n,i){let s=[e];i?.MAXLEN!=null&&(s.push("MAXLEN"),i.approximate!==!1&&s.push("~"),s.push(String(i.MAXLEN))),s.push(r);for(let[o,a]of Object.entries(n))s.push(o,String(a));return await this.raw.send("XADD",s)}async xread(e,r){let n=[];r?.COUNT!=null&&n.push("COUNT",String(r.COUNT)),r?.BLOCK!=null&&n.push("BLOCK",String(r.BLOCK)),n.push("STREAMS");for(let s of e)n.push(s.key);for(let s of e)n.push(s.id);let i;try{i=await this.sendCommand("XREAD",n)}catch(s){if(this.closing)return null;throw s}return i?Array.isArray(i)?i.map(s=>{let o=String(s[0]),a=(s[1]||[]).map(c=>{let l=String(c[0]),u=(c[1]||[]).map(String);return[l,u]});return[o,a]}):Object.entries(i).map(([s,o])=>{let a=(o||[]).map(c=>{let l=String(c[0]),u=(c[1]||[]).map(String);return[l,u]});return[s,a]}):null}async xtrim(e,r,n,i){let s=[e,r];return i?.approximate!==!1&&s.push("~"),s.push(String(n)),await this.sendCommand("XTRIM",s)}async bzpopmin(e,r){let n;try{n=await this.sendCommand("BZPOPMIN",[e,String(r)])}catch(i){if(this.closing)return null;throw i}return!n||n.length===0?null:[String(n[0]),String(n[1]),String(n[2])]}async info(){return await this.sendCommand("INFO",[])}async clientSetName(e){return await this.sendCommand("CLIENT",["SETNAME",e])}async clientList(){return await this.sendCommand("CLIENT",["LIST"])}async scan(e,r){let n=[String(e)];r?.MATCH&&n.push("MATCH",r.MATCH),r?.COUNT&&n.push("COUNT",String(r.COUNT));let i=await this.sendCommand("SCAN",n),s=i[1];return[String(i[0]),Array.isArray(s)?s.map(String):[]]}scanStream(e){let r=this,n="0",i=!1,s=new q1e.Readable({objectMode:!0,async read(){if(i&&n==="0"){s.push(null);return}i=!0;try{for(;;){let[o,a]=await r.scan(n,{MATCH:e.match,COUNT:e.count});if(n=o,a.length>0){s.push(a),n==="0"&&s.push(null);return}if(n==="0"){s.push(null);return}}}catch(o){s.destroy(o)}}});return s}async keys(e){return(await this.sendCommand("KEYS",[e])||[]).map(String)}async exists(...e){if(e.length===0)return 0;let r=await this.sendCommand("EXISTS",e);return typeof r=="boolean"?r?1:0:r}async zadd(e,...r){let n=[e];for(let i=0;i<r.length;i+=2)n.push(String(r[i]),String(r[i+1]));return await this.sendCommand("ZADD",n)}async zrem(e,...r){return await this.sendCommand("ZREM",[e,...r])}async xlen(e){return await this.sendCommand("XLEN",[e])}async xrevrange(e,r,n,...i){let s=[e,r,n];i[0]==="COUNT"&&s.push("COUNT",String(i[1]));let o=await this.sendCommand("XREVRANGE",s);return o?o.map(a=>[String(a[0]),(a[1]||[]).map(String)]):[]}async sadd(e,...r){return await this.sendCommand("SADD",[e,...r.map(String)])}async scard(e){return await this.sendCommand("SCARD",[e])}async lpush(e,...r){return await this.sendCommand("LPUSH",[e,...r])}async rpop(e){let r=await this.sendCommand("RPOP",[e]);return r??null}async incr(e){return await this.sendCommand("INCR",[e])}async incrby(e,r){return await this.sendCommand("INCRBY",[e,String(r)])}async flushall(){return await this.sendCommand("FLUSHALL",[])}},ob=class{constructor(e,r,n,i){this.raw=e,this.scripts=r,this.transactional=n,this.adapter=i,this.commands=[],this.transformers=[],this.scriptsToLoad=[]}addCommand(e,r,n){this.commands.push({cmd:e,args:r}),this.transformers.push(n||(i=>i))}hgetall(e){return this.addCommand("HGETALL",[e],r=>{if(!r||Array.isArray(r)&&r.length===0)return{};if(Array.isArray(r)){let n={};for(let i=0;i<r.length;i+=2)n[String(r[i])]=String(r[i+1]);return n}return r}),this}hset(e,r){let n=[e];for(let[i,s]of Object.entries(r))n.push(i,String(s));return this.addCommand("HSET",n),this}hscan(e,r,n){let i=[e,String(r)];return n?.COUNT!=null&&i.push("COUNT",String(n.COUNT)),this.addCommand("HSCAN",i,s=>s?Array.isArray(s)?[String(s[0]),sb(s[1])]:["0",[]]:["0",[]]),this}smembers(e){return this.addCommand("SMEMBERS",[e],r=>sb(r)),this}sscan(e,r,n){let i=[e,String(r)];return n?.COUNT!=null&&i.push("COUNT",String(n.COUNT)),this.addCommand("SSCAN",i,s=>s?Array.isArray(s)?[String(s[0]),sb(s[1])]:["0",[]]:["0",[]]),this}zrange(e,r,n){return this.addCommand("ZRANGE",[e,String(r),String(n)],i=>Array.isArray(i)?i.map(String):[]),this}lrange(e,r,n){return this.addCommand("LRANGE",[e,String(r),String(n)],i=>Array.isArray(i)?i.map(String):[]),this}llen(e){return this.addCommand("LLEN",[e]),this}del(...e){return e.length>0&&this.addCommand("DEL",e),this}runCommand(e,r){let n=this.scripts.get(e);if(!n)throw new Error(`BullMQ: unknown command "${e}" in transaction`);let i=YG(r),{sha:s,numberOfKeys:o}=n,a=i.slice(0,o).map(String),c=i.slice(o).map(l=>Buffer.isBuffer(l)?l:l==null?"":String(l));return this.scriptsToLoad.push(n),this.addCommand("EVALSHA",[s,String(a.length),...a,...c]),this}async exec(){if(this.commands.length===0)return[];if(this.scriptsToLoad.length>0&&await this.adapter.ensureScriptsLoaded(this.scriptsToLoad),!this.transactional)return(await Promise.allSettled(this.commands.map(({cmd:n,args:i})=>this.adapter.sendCommand(n,i)))).map((n,i)=>{if(n.status==="rejected")return[n.reason,null];let s=this.transformers[i];return[null,s?s(n.value):n.value]});let e=r=>{};try{this.raw.send("MULTI",[]).catch(e);for(let{cmd:n,args:i}of this.commands)this.raw.send(n,i).catch(e);let r=await this.raw.send("EXEC",[]);return r?r.map((n,i)=>{if(n instanceof Error)return[n,null];let s=this.transformers[i];return[null,s?s(n):n]}):null}catch(r){try{await this.raw.send("DISCARD",[])}catch{}throw r}}}});var r5=h(Ok=>{"use strict";Object.defineProperty(Ok,"__esModule",{value:!0});Ok.createValkeyGlideClient=Q1e;var U1e=require("crypto"),J1e=require("events"),z1e=require("stream"),ab=zo(),Nd=1;function G1e(){return{commands:[],customCommand(t){this.commands.push(t)}}}function B1e(t){try{let{Batch:e}=require("@valkey/valkey-glide");return typeof e=="function"?new e(t):null}catch{return null}}function ZG(t){return Buffer.isBuffer(t)}function hn(t){return ZG(t)?t:t==null?"":String(t)}function H(t){return ZG(t)?t.toString():String(t)}function ll(t){return Array.isArray(t)&&t.every(e=>e&&typeof e=="object"&&"key"in e&&"value"in e)}function e5(t){return t.length===1&&Array.isArray(t[0])?t[0]:t}function t5(t){if(!t)return{};if(ll(t))return t.reduce((e,r)=>(e[H(r.key)]=H(r.value),e),{});if(t instanceof Map){let e={};for(let[r,n]of t.entries())e[H(r)]=H(n);return e}if(Array.isArray(t)){let e={};for(let r=0;r<t.length;r+=2)e[H(t[r])]=H(t[r+1]);return e}if(typeof t=="object"){let e={};for(let[r,n]of Object.entries(t))e[r]=H(n);return e}return{}}function Rk(t){return t?Array.isArray(t)?ll(t)?t.flatMap(e=>[H(e.key),H(e.value)]):t.every(e=>Array.isArray(e)&&e.length===2)?t.flatMap(e=>{let[r,n]=e;return[H(r),H(n)]}):t.map(e=>H(e)):typeof t=="object"?Object.entries(t).flatMap(([e,r])=>[e,H(r)]):[]:[]}function H1e(t){return t?Array.isArray(t)&&t.every(e=>Array.isArray(e)&&e.length===2&&typeof e[0]<"u"&&Array.isArray(e[1]))||!ll(t)?t:t.map(e=>{let r=H(e.key),n=ll(e.value)?e.value.map(i=>[H(i.key),Rk(i.value)]):[];return[r,n]}):null}function V1e(t){if(Array.isArray(t)&&t.length>=2){let[e,r]=t,n=Array.isArray(r)?r.map(i=>H(i)):[];return[H(e),n]}if(t&&typeof t=="object"){let e=t;if(e.cursor!==void 0&&Array.isArray(e.keys))return[H(e.cursor),e.keys.map(r=>H(r))]}return["0",[]]}function W1e(t){return t?Array.isArray(t)&&t.every(e=>Array.isArray(e)&&e.length===2&&typeof e[0]<"u"&&Array.isArray(e[1]))?t.map(([e,r])=>[H(e),r.map(n=>H(n))]):ll(t)?t.map(e=>[H(e.key),Rk(e.value)]):[]:[]}function XG(t,e=!1){return Array.isArray(t)?e?ll(t)?t.flatMap(r=>[H(r.key),H(r.value)]):t.every(r=>Array.isArray(r)&&r.length>=2&&r[0]!==void 0)?t.flatMap(r=>[H(r[0]),H(r[1])]):t.map(r=>H(r)):t.map(r=>H(r)):[]}function Y1e(t){let[e,...r]=t,n=H(e).toUpperCase();if(n==="BZPOPMIN")return!0;if(n!=="XREAD")return!1;for(let i=0;i<r.length;i+=2)if(H(r[i]).toUpperCase()==="BLOCK")return!0;return!1}function Q1e(t){return new kk(t)}var kk=class t extends J1e.EventEmitter{constructor(e,r){super(),this.connectionName=r,this.scripts=new Map,this.scriptsBySha=new Map,this.scriptLoadPromises=new Map,this.readyEmitted=!1,this.closed=!1,this.operationChain=Promise.resolve(),this.activeBlockingCommands=0,e instanceof Promise?(this.rawPromise=e,this.connect().catch(n=>this.emit("error",n))):this.raw=e}get status(){return this.statusOverride?this.statusOverride:this.closed?"end":this.readyEmitted?"ready":"wait"}set status(e){e==="end"&&this.disconnect(),this.statusOverride=e}get isCluster(){var e,r,n;return((n=(r=(e=this.raw)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.name)!==null&&n!==void 0?n:"").includes("Cluster")}get options(){var e,r,n,i;return(i=(r=(e=this.raw)===null||e===void 0?void 0:e.config)!==null&&r!==void 0?r:(n=this.raw)===null||n===void 0?void 0:n.options)!==null&&i!==void 0?i:{}}set options(e){}ensureOpen(){if(this.closed)throw new ab.ConnectionClosedError}normalizeError(e){throw e instanceof ab.ConnectionClosedError||e instanceof Error&&e.name==="ClosingError"?new ab.ConnectionClosedError(e.message,e):e}async ensureRaw(){if(this.raw)return this.raw;if(!this.rawPromise)throw new Error("BullMQ: Valkey Glide client not initialized - missing raw client and client promise. Please report this as a bug.");return this.raw=await this.rawPromise,this.raw}async runSerialized(e){this.ensureOpen();let r=this.operationChain,n;this.operationChain=new Promise(i=>{n=i}),await r,this.ensureOpen();try{let i=await this.ensureRaw();return this.ensureOpen(),await e(i)}catch(i){this.normalizeError(i)}finally{n()}}async runRawCommand(e,r){let n=Y1e(e);return this.runSerialized(async i=>{n&&this.activeBlockingCommands++;try{return await i.customCommand(e,r)}finally{n&&this.activeBlockingCommands--}})}ensureScriptLoaded(e){let r=this.scriptLoadPromises.get(e.sha);return r||(r=this.runRawCommand(["SCRIPT","LOAD",e.lua]).then(()=>{}).catch(()=>{}),this.scriptLoadPromises.set(e.sha,r)),r}async applyConnectionNameIfNeeded(){this.connectionName&&await this.runRawCommand(["CLIENT","SETNAME",this.connectionName],{decoder:Nd})}async clearConnectionNameIfNeeded(e){if(this.connectionName)try{await e.customCommand(["CLIENT","SETNAME",""],{decoder:Nd})}catch{}}async recreateRaw(){var e,r;let n=await this.ensureRaw(),i=n.constructor,s=(e=i?.createClient)===null||e===void 0?void 0:e.bind(i),o=(r=n.config)!==null&&r!==void 0?r:n.options;if(!s||!o)throw new Error("BullMQ: Cannot recreate Valkey Glide client: missing createClient() method or config object. Ensure the client was created via GlideClient.createClient() or GlideClusterClient.createClient().");this.raw=await s(o),this.scriptLoadPromises.clear()}async connect(){return this.connecting?this.connecting:(this.connecting=(async()=>{this.closed&&this.raw&&await this.recreateRaw(),this.closed=!1,this.statusOverride=void 0,await this.ensureRaw();try{await this.applyConnectionNameIfNeeded()}catch(e){if(this.closed&&e instanceof ab.ConnectionClosedError)return;throw e}this.closed||(this.readyEmitted=!0,this.emit("ready"))})().finally(()=>{this.connecting=void 0}),this.connecting)}closeRaw(){if(!this.closingPromise){let e=()=>{if(this.raw)try{this.raw.close()}catch{}};this.closingPromise=(this.activeBlockingCommands>0?Promise.resolve().then(e):this.operationChain.catch(()=>{}).then(async()=>{this.closed&&(this.raw&&await this.clearConnectionNameIfNeeded(this.raw),e())})).finally(()=>{this.closingPromise=void 0})}return this.closingPromise}disconnect(e=!1){if(!(this.closed&&!e)){if(this.closed=!0,this.readyEmitted=!1,this.statusOverride=e?void 0:"end",this.emit("close"),e){this.closeRaw().then(()=>(this.emit("reconnecting"),this.connect())).catch(r=>this.emit("error",r));return}this.closeRaw(),this.emit("end")}}async quit(){return this.closed?(setImmediate(()=>{this.emit("end"),this.emit("close")}),"OK"):(this.closed=!0,this.readyEmitted=!1,this.statusOverride="end",this.closeRaw(),setImmediate(()=>{this.emit("end"),this.emit("close")}),"OK")}duplicate(...e){var r;let n=(r=e[0])!==null&&r!==void 0?r:{},i=(async()=>{var s,o;let a=await this.ensureRaw(),c=a.constructor,l=(s=c?.createClient)===null||s===void 0?void 0:s.bind(c),u=(o=a.config)!==null&&o!==void 0?o:a.options;if(!l||!u)throw new Error("BullMQ: Cannot duplicate Valkey Glide client: missing createClient() or config. Ensure the client was created via GlideClient.createClient()/GlideClusterClient.createClient().");return l(u)})();return new t(i,n.connectionName)}defineCommand(e,r){let n=(0,U1e.createHash)("sha1").update(r.lua).digest("hex"),i={sha:n,lua:r.lua,numberOfKeys:r.numberOfKeys};this.scripts.set(e,i),this.scriptsBySha.set(n,i),this[e]=(...s)=>this.runCommand(e,s),this.ensureScriptLoaded(i)}async runCommand(e,r){let n=this.scripts.get(e);if(!n)throw new Error(`BullMQ: command "${e}" is not defined. Use defineCommand() before runCommand().`);let i=e5(r),s=i.slice(0,n.numberOfKeys).map(hn),o=i.slice(n.numberOfKeys).map(hn),a=["EVALSHA",n.sha,String(n.numberOfKeys),...s,...o];try{return await this.runRawCommand(a)}catch(c){if(typeof c?.message=="string"&&c.message.toLowerCase().includes("noscript"))return this.runRawCommand(["EVAL",n.lua,String(n.numberOfKeys),...s,...o]);throw c}}multi(){return new Ak(this,this.scripts)}pipeline(){return this.multi()}async hgetall(e){return t5(await this.runRawCommand(["HGETALL",e]))}async hget(e,r){let n=await this.runRawCommand(["HGET",e,r]);return n==null?null:H(n)}async hmget(e,...r){let n=await this.runRawCommand(["HMGET",e,...r]);return Array.isArray(n)?n.map(i=>i==null?null:H(i)):[]}async hset(e,r){let n=["HSET",e];for(let[i,s]of Object.entries(r))n.push(i,hn(s));return Number(await this.runRawCommand(n))}async hdel(e,...r){return Number(await this.runRawCommand(["HDEL",e,...r]))}async hexists(e,r){let n=await this.runRawCommand(["HEXISTS",e,r]);return typeof n=="boolean"?n?1:0:Number(n)}async get(e){let r=await this.runRawCommand(["GET",e]);return r==null?null:H(r)}async set(e,r,n){let i=["SET",e,hn(r)];n?.PX!=null?i.push("PX",String(n.PX)):n?.EX!=null&&i.push("EX",String(n.EX));let s=await this.runRawCommand(i);return s==null?null:H(s)}async del(...e){return e.length===0?0:Number(await this.runRawCommand(["DEL",...e]))}async zrange(e,r,n,i){let s=["ZRANGE",e,String(r),String(n)];i?.WITHSCORES&&s.push("WITHSCORES");let o=await this.runRawCommand(s);return XG(o,i?.WITHSCORES)}async zrevrange(e,r,n,i){let s=["ZREVRANGE",e,String(r),String(n)];i?.WITHSCORES&&s.push("WITHSCORES");let o=await this.runRawCommand(s);return XG(o,i?.WITHSCORES)}async zcard(e){return Number(await this.runRawCommand(["ZCARD",e]))}async zscore(e,r){let n=await this.runRawCommand(["ZSCORE",e,r]);return n==null?null:H(n)}async lrange(e,r,n){let i=await this.runRawCommand(["LRANGE",e,String(r),String(n)]);return Array.isArray(i)?i.map(H):[]}async llen(e){return Number(await this.runRawCommand(["LLEN",e]))}async ltrim(e,r,n){let i=await this.runRawCommand(["LTRIM",e,String(r),String(n)]);return i==null?"OK":H(i)}async lpos(e,r){let n=await this.runRawCommand(["LPOS",e,r]);return n==null?null:Number(n)}async smembers(e){let r=await this.runRawCommand(["SMEMBERS",e]);return Array.isArray(r)?r.map(H):[]}async xadd(e,r,n,i){let s=["XADD",e];i?.MAXLEN!=null&&(s.push("MAXLEN"),i.approximate!==!1&&s.push("~"),s.push(String(i.MAXLEN))),s.push(r);for(let[o,a]of Object.entries(n))s.push(o,hn(a));return H(await this.runRawCommand(s))}async xread(e,r){let n=["XREAD"];r?.BLOCK!=null&&n.push("BLOCK",String(r.BLOCK)),r?.COUNT!=null&&n.push("COUNT",String(r.COUNT)),n.push("STREAMS");for(let i of e)n.push(i.key);for(let i of e)n.push(i.id);return H1e(await this.runRawCommand(n))}async xtrim(e,r,n,i){let s=["XTRIM",e,r];return i?.approximate!==!1&&s.push("~"),s.push(String(n)),Number(await this.runRawCommand(s))}async bzpopmin(e,r){let n=await this.runRawCommand(["BZPOPMIN",e,String(r)]);return n&&Array.isArray(n)&&n.length>=3?[H(n[0]),H(n[1]),H(n[2])]:null}async info(){return H(await this.runRawCommand(["INFO"]))}async clientSetName(e){return this.runRawCommand(["CLIENT","SETNAME",e],{decoder:Nd})}async clientList(){return H(await this.runRawCommand(["CLIENT","LIST"],{decoder:Nd}))}async scan(e,r){let n=["SCAN",String(e)];return r?.MATCH&&n.push("MATCH",r.MATCH),r?.COUNT!=null&&n.push("COUNT",String(r.COUNT)),V1e(await this.runRawCommand(n))}scanStream(e){let r="0",n=!1,i=new z1e.Readable({objectMode:!0,read:()=>{n||(n=!0,(async()=>{do{let[s,o]=await this.scan(r,{MATCH:e.match,COUNT:e.count});if(r=s,o.length>0&&!i.push(o))return}while(r!=="0");i.push(null)})().catch(s=>i.destroy(s)).finally(()=>{n=!1}))}});return i}async keys(e){let r=await this.runRawCommand(["KEYS",e]);return Array.isArray(r)?r.map(H):[]}async exists(...e){if(e.length===0)return 0;let r=await this.runRawCommand(["EXISTS",...e]);return typeof r=="boolean"?r?1:0:Number(r)}async zadd(e,...r){let n=["ZADD",e];for(let i=0;i<r.length;i+=2)n.push(hn(r[i]),hn(r[i+1]));return Number(await this.runRawCommand(n))}async zrem(e,...r){return Number(await this.runRawCommand(["ZREM",e,...r]))}async xlen(e){return Number(await this.runRawCommand(["XLEN",e]))}async xrevrange(e,r,n,...i){let s=["XREVRANGE",e,r,n];return i[0]==="COUNT"&&s.push("COUNT",hn(i[1])),W1e(await this.runRawCommand(s))}async sadd(e,...r){return Number(await this.runRawCommand(["SADD",e,...r.map(n=>hn(n))]))}async scard(e){return Number(await this.runRawCommand(["SCARD",e]))}async lpush(e,...r){return Number(await this.runRawCommand(["LPUSH",e,...r]))}async rpop(e){let r=await this.runRawCommand(["RPOP",e]);return r==null?null:H(r)}async incr(e){return Number(await this.runRawCommand(["INCR",e]))}async incrby(e,r){return Number(await this.runRawCommand(["INCRBY",e,String(r)]))}async flushall(){let e=await this.runRawCommand(["FLUSHALL"]);return e==null?"OK":H(e)}async execQueuedCommands(e){let r=e.map(n=>String(n.args[0]).toUpperCase()==="EVALSHA"?this.scriptsBySha.get(H(n.args[1])):void 0).filter(n=>!!n);return r.length>0&&await Promise.all(r.map(n=>this.ensureScriptLoaded(n))),this.runSerialized(async n=>{if(typeof n.exec=="function"){let i=B1e(!0),s=i??G1e();if(s){for(let a of e)s.customCommand(a.args);let o;try{o=await n.exec(s,!1)}catch(a){if(i)throw a;o=null}if(o)return o.map((a,c)=>{var l;if(a instanceof Error)return[a,null];let u=(l=e[c])===null||l===void 0?void 0:l.transform;return[null,u?u(a):a]});if(i)return null}}await n.customCommand(["MULTI"]);try{for(let o of e)await n.customCommand(o.args,{decoder:Nd});let i=await n.customCommand(["EXEC"]);return i?(Array.isArray(i)?i:[i]).map((o,a)=>{var c;if(o instanceof Error)return[o,null];let l=(c=e[a])===null||c===void 0?void 0:c.transform;return[null,l?l(o):o]}):null}catch(i){try{await n.customCommand(["DISCARD"])}catch{}throw i}})}},Ak=class{constructor(e,r){this.adapter=e,this.scripts=r,this.commands=[]}queueCommand(e,r){return this.commands.push({args:e,transform:r}),this}hgetall(e){return this.queueCommand(["HGETALL",e],t5)}hset(e,r){let n=["HSET",e];for(let[i,s]of Object.entries(r))n.push(i,hn(s));return this.queueCommand(n)}hscan(e,r,n){let i=["HSCAN",e,String(r)];return n?.COUNT!=null&&i.push("COUNT",String(n.COUNT)),this.queueCommand(i,s=>Array.isArray(s)&&s.length>=2?[H(s[0]),Rk(s[1])]:["0",[]])}smembers(e){return this.queueCommand(["SMEMBERS",e],r=>Array.isArray(r)?r.map(n=>H(n)):[])}sscan(e,r,n){let i=["SSCAN",e,String(r)];return n?.COUNT!=null&&i.push("COUNT",String(n.COUNT)),this.queueCommand(i,s=>{if(Array.isArray(s)&&s.length>=2){let o=Array.isArray(s[1])?s[1].map(a=>H(a)):[];return[H(s[0]),o]}return["0",[]]})}zrange(e,r,n){return this.queueCommand(["ZRANGE",e,String(r),String(n)])}lrange(e,r,n){return this.queueCommand(["LRANGE",e,String(r),String(n)])}llen(e){return this.queueCommand(["LLEN",e])}del(...e){return e.length>0&&this.queueCommand(["DEL",...e]),this}runCommand(e,r){let n=this.scripts.get(e);if(!n)throw new Error(`BullMQ: command "${e}" is not defined. Use defineCommand() before adding it to transactions.`);let i=e5(r),s=i.slice(0,n.numberOfKeys).map(hn),o=i.slice(n.numberOfKeys).map(hn);return this.queueCommand(["EVALSHA",n.sha,String(n.numberOfKeys),...s,...o])}exec(){return this.adapter.execQueuedCommands(this.commands)}}});var jB=h(Jr=>{"use strict";Object.defineProperty(Jr,"__esModule",{value:!0});var Xi=class extends Error{},Fk=class extends Xi{constructor(e){super(`Invalid DateTime: ${e.toMessage()}`)}},$k=class extends Xi{constructor(e){super(`Invalid Interval: ${e.toMessage()}`)}},Uk=class extends Xi{constructor(e){super(`Invalid Duration: ${e.toMessage()}`)}},Xs=class extends Xi{},hb=class extends Xi{constructor(e){super(`Invalid unit ${e}`)}},jt=class extends Xi{},yi=class extends Xi{constructor(){super("Zone is an abstract class")}},M="numeric",Nn="short",$r="long",yb={year:M,month:M,day:M},P5={year:M,month:Nn,day:M},X1e={year:M,month:Nn,day:M,weekday:Nn},K5={year:M,month:$r,day:M},D5={year:M,month:$r,day:M,weekday:$r},M5={hour:M,minute:M},N5={hour:M,minute:M,second:M},L5={hour:M,minute:M,second:M,timeZoneName:Nn},q5={hour:M,minute:M,second:M,timeZoneName:$r},F5={hour:M,minute:M,hourCycle:"h23"},$5={hour:M,minute:M,second:M,hourCycle:"h23"},U5={hour:M,minute:M,second:M,hourCycle:"h23",timeZoneName:Nn},J5={hour:M,minute:M,second:M,hourCycle:"h23",timeZoneName:$r},z5={year:M,month:M,day:M,hour:M,minute:M},G5={year:M,month:M,day:M,hour:M,minute:M,second:M},B5={year:M,month:Nn,day:M,hour:M,minute:M},H5={year:M,month:Nn,day:M,hour:M,minute:M,second:M},Z1e={year:M,month:Nn,day:M,weekday:Nn,hour:M,minute:M},V5={year:M,month:$r,day:M,hour:M,minute:M,timeZoneName:Nn},W5={year:M,month:$r,day:M,hour:M,minute:M,second:M,timeZoneName:Nn},Y5={year:M,month:$r,day:M,weekday:$r,hour:M,minute:M,timeZoneName:$r},Q5={year:M,month:$r,day:M,weekday:$r,hour:M,minute:M,second:M,timeZoneName:$r},eo=class{get type(){throw new yi}get name(){throw new yi}get ianaName(){return this.name}get isUniversal(){throw new yi}offsetName(e,r){throw new yi}formatOffset(e,r){throw new yi}offset(e){throw new yi}equals(e){throw new yi}get isValid(){throw new yi}},Ck=null,Jd=class t extends eo{static get instance(){return Ck===null&&(Ck=new t),Ck}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:r,locale:n}){return cB(e,r,n)}formatOffset(e,r){return Ud(this.offset(e),r)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return e.type==="system"}get isValid(){return!0}},Jk=new Map;function eTe(t){let e=Jk.get(t);return e===void 0&&(e=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"}),Jk.set(t,e)),e}var tTe={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function rTe(t,e){let r=t.format(e).replace(/\u200E/g,""),n=/(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(r),[,i,s,o,a,c,l,u]=n;return[o,i,s,a,c,l,u]}function nTe(t,e){let r=t.formatToParts(e),n=[];for(let i=0;i<r.length;i++){let{type:s,value:o}=r[i],a=tTe[s];s==="era"?n[a]=o:Q(a)||(n[a]=parseInt(o,10))}return n}var jk=new Map,Zi=class t extends eo{static create(e){let r=jk.get(e);return r===void 0&&jk.set(e,r=new t(e)),r}static resetCache(){jk.clear(),Jk.clear()}static isValidSpecifier(e){return this.isValidZone(e)}static isValidZone(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch{return!1}}constructor(e){super(),this.zoneName=e,this.valid=t.isValidZone(e)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(e,{format:r,locale:n}){return cB(e,r,n,this.name)}formatOffset(e,r){return Ud(this.offset(e),r)}offset(e){if(!this.valid)return NaN;let r=new Date(e);if(isNaN(r))return NaN;let n=eTe(this.name),[i,s,o,a,c,l,u]=n.formatToParts?nTe(n,r):rTe(n,r);a==="BC"&&(i=-Math.abs(i)+1);let p=wb({year:i,month:s,day:o,hour:c===24?0:c,minute:l,second:u,millisecond:0}),f=+r,m=f%1e3;return f-=m>=0?m:1e3+m,(p-f)/(60*1e3)}equals(e){return e.type==="iana"&&e.name===this.name}get isValid(){return this.valid}},n5={};function iTe(t,e={}){let r=JSON.stringify([t,e]),n=n5[r];return n||(n=new Intl.ListFormat(t,e),n5[r]=n),n}var zk=new Map;function Gk(t,e={}){let r=JSON.stringify([t,e]),n=zk.get(r);return n===void 0&&(n=new Intl.DateTimeFormat(t,e),zk.set(r,n)),n}var Bk=new Map;function sTe(t,e={}){let r=JSON.stringify([t,e]),n=Bk.get(r);return n===void 0&&(n=new Intl.NumberFormat(t,e),Bk.set(r,n)),n}var Hk=new Map;function oTe(t,e={}){let{base:r,...n}=e,i=JSON.stringify([t,n]),s=Hk.get(i);return s===void 0&&(s=new Intl.RelativeTimeFormat(t,e),Hk.set(i,s)),s}var qd=null;function aTe(){return qd||(qd=new Intl.DateTimeFormat().resolvedOptions().locale,qd)}var Vk=new Map;function X5(t){let e=Vk.get(t);return e===void 0&&(e=new Intl.DateTimeFormat(t).resolvedOptions(),Vk.set(t,e)),e}var Wk=new Map;function cTe(t){let e=Wk.get(t);if(!e){let r=new Intl.Locale(t);e="getWeekInfo"in r?r.getWeekInfo():r.weekInfo,"minimalDays"in e||(e={...Z5,...e}),Wk.set(t,e)}return e}function lTe(t){let e=t.indexOf("-x-");e!==-1&&(t=t.substring(0,e));let r=t.indexOf("-u-");if(r===-1)return[t];{let n,i;try{n=Gk(t).resolvedOptions(),i=t}catch{let c=t.substring(0,r);n=Gk(c).resolvedOptions(),i=c}let{numberingSystem:s,calendar:o}=n;return[i,s,o]}}function uTe(t,e,r){return(r||e)&&(t.includes("-u-")||(t+="-u"),r&&(t+=`-ca-${r}`),e&&(t+=`-nu-${e}`)),t}function dTe(t){let e=[];for(let r=1;r<=12;r++){let n=et.utc(2009,r,1);e.push(t(n))}return e}function pTe(t){let e=[];for(let r=1;r<=7;r++){let n=et.utc(2016,11,13+r);e.push(t(n))}return e}function cb(t,e,r,n){let i=t.listingMode();return i==="error"?null:i==="en"?r(e):n(e)}function fTe(t){return t.numberingSystem&&t.numberingSystem!=="latn"?!1:t.numberingSystem==="latn"||!t.locale||t.locale.startsWith("en")||X5(t.locale).numberingSystem==="latn"}var Yk=class{constructor(e,r,n){this.padTo=n.padTo||0,this.floor=n.floor||!1;let{padTo:i,floor:s,...o}=n;if(!r||Object.keys(o).length>0){let a={useGrouping:!1,...n};n.padTo>0&&(a.minimumIntegerDigits=n.padTo),this.inf=sTe(e,a)}}format(e){if(this.inf){let r=this.floor?Math.floor(e):e;return this.inf.format(r)}else{let r=this.floor?Math.floor(e):aA(e,3);return bt(r,this.padTo)}}},Qk=class{constructor(e,r,n){this.opts=n,this.originalZone=void 0;let i;if(this.opts.timeZone)this.dt=e;else if(e.zone.type==="fixed"){let o=-1*(e.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;e.offset!==0&&Zi.create(a).valid?(i=a,this.dt=e):(i="UTC",this.dt=e.offset===0?e:e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone)}else e.zone.type==="system"?this.dt=e:e.zone.type==="iana"?(this.dt=e,i=e.zone.name):(i="UTC",this.dt=e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone);let s={...this.opts};s.timeZone=s.timeZone||i,this.dtf=Gk(r,s)}format(){return this.originalZone?this.formatToParts().map(({value:e})=>e).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let e=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?e.map(r=>{if(r.type==="timeZoneName"){let n=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...r,value:n}}else return r}):e}resolvedOptions(){return this.dtf.resolvedOptions()}},Xk=class{constructor(e,r,n){this.opts={style:"long",...n},!r&&oB()&&(this.rtf=oTe(e,n))}format(e,r){return this.rtf?this.rtf.format(e,r):KTe(r,e,this.opts.numeric,this.opts.style!=="long")}formatToParts(e,r){return this.rtf?this.rtf.formatToParts(e,r):[]}},Z5={firstDay:1,minimalDays:4,weekend:[6,7]},$e=class t{static fromOpts(e){return t.create(e.locale,e.numberingSystem,e.outputCalendar,e.weekSettings,e.defaultToEN)}static create(e,r,n,i,s=!1){let o=e||Ye.defaultLocale,a=o||(s?"en-US":aTe()),c=r||Ye.defaultNumberingSystem,l=n||Ye.defaultOutputCalendar,u=eA(i)||Ye.defaultWeekSettings;return new t(a,c,l,u,o)}static resetCache(){qd=null,zk.clear(),Bk.clear(),Hk.clear(),Vk.clear(),Wk.clear()}static fromObject({locale:e,numberingSystem:r,outputCalendar:n,weekSettings:i}={}){return t.create(e,r,n,i)}constructor(e,r,n,i,s){let[o,a,c]=lTe(e);this.locale=o,this.numberingSystem=r||a||null,this.outputCalendar=n||c||null,this.weekSettings=i,this.intl=uTe(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=fTe(this)),this.fastNumbersCached}listingMode(){let e=this.isEnglish(),r=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return e&&r?"en":"intl"}clone(e){return!e||Object.getOwnPropertyNames(e).length===0?this:t.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,eA(e.weekSettings)||this.weekSettings,e.defaultToEN||!1)}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,r=!1){return cb(this,e,dB,()=>{let n=this.intl==="ja"||this.intl.startsWith("ja-");r&=!n;let i=r?{month:e,day:"numeric"}:{month:e},s=r?"format":"standalone";if(!this.monthsCache[s][e]){let o=n?a=>this.dtFormatter(a,i).format():a=>this.extract(a,i,"month");this.monthsCache[s][e]=dTe(o)}return this.monthsCache[s][e]})}weekdays(e,r=!1){return cb(this,e,mB,()=>{let n=r?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=r?"format":"standalone";return this.weekdaysCache[i][e]||(this.weekdaysCache[i][e]=pTe(s=>this.extract(s,n,"weekday"))),this.weekdaysCache[i][e]})}meridiems(){return cb(this,void 0,()=>hB,()=>{if(!this.meridiemCache){let e={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[et.utc(2016,11,13,9),et.utc(2016,11,13,19)].map(r=>this.extract(r,e,"dayperiod"))}return this.meridiemCache})}eras(e){return cb(this,e,yB,()=>{let r={era:e};return this.eraCache[e]||(this.eraCache[e]=[et.utc(-40,1,1),et.utc(2017,1,1)].map(n=>this.extract(n,r,"era"))),this.eraCache[e]})}extract(e,r,n){let i=this.dtFormatter(e,r),s=i.formatToParts(),o=s.find(a=>a.type.toLowerCase()===n);return o?o.value:null}numberFormatter(e={}){return new Yk(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,r={}){return new Qk(e,this.intl,r)}relFormatter(e={}){return new Xk(this.intl,this.isEnglish(),e)}listFormatter(e={}){return iTe(this.intl,e)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||X5(this.intl).locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:aB()?cTe(this.locale):Z5}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}},Pk=null,Ur=class t extends eo{static get utcInstance(){return Pk===null&&(Pk=new t(0)),Pk}static instance(e){return e===0?t.utcInstance:new t(e)}static parseSpecifier(e){if(e){let r=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(r)return new t(_b(r[1],r[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${Ud(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${Ud(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,r){return Ud(this.fixed,r)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return e.type==="fixed"&&e.fixed===this.fixed}get isValid(){return!0}},gb=class extends eo{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Qs(t,e){if(Q(t)||t===null)return e;if(t instanceof eo)return t;if(vTe(t)){let r=t.toLowerCase();return r==="default"?e:r==="local"||r==="system"?Jd.instance:r==="utc"||r==="gmt"?Ur.utcInstance:Ur.parseSpecifier(r)||Zi.create(t)}else return Zs(t)?Ur.instance(t):typeof t=="object"&&"offset"in t&&typeof t.offset=="function"?t:new gb(t)}var nA={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},i5={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},mTe=nA.hanidec.replace(/[\[|\]]/g,"").split("");function hTe(t){let e=parseInt(t,10);if(isNaN(e)){e="";for(let r=0;r<t.length;r++){let n=t.charCodeAt(r);if(t[r].search(nA.hanidec)!==-1)e+=mTe.indexOf(t[r]);else for(let i in i5){let[s,o]=i5[i];n>=s&&n<=o&&(e+=n-s)}}return parseInt(e,10)}else return e}var Zk=new Map;function yTe(){Zk.clear()}function Dn({numberingSystem:t},e=""){let r=t||"latn",n=Zk.get(r);n===void 0&&(n=new Map,Zk.set(r,n));let i=n.get(e);return i===void 0&&(i=new RegExp(`${nA[r]}${e}`),n.set(e,i)),i}var s5=()=>Date.now(),o5="system",a5=null,c5=null,l5=null,u5=60,d5,p5=null,Ye=class{static get now(){return s5}static set now(e){s5=e}static set defaultZone(e){o5=e}static get defaultZone(){return Qs(o5,Jd.instance)}static get defaultLocale(){return a5}static set defaultLocale(e){a5=e}static get defaultNumberingSystem(){return c5}static set defaultNumberingSystem(e){c5=e}static get defaultOutputCalendar(){return l5}static set defaultOutputCalendar(e){l5=e}static get defaultWeekSettings(){return p5}static set defaultWeekSettings(e){p5=eA(e)}static get twoDigitCutoffYear(){return u5}static set twoDigitCutoffYear(e){u5=e%100}static get throwOnInvalid(){return d5}static set throwOnInvalid(e){d5=e}static resetCaches(){$e.resetCache(),Zi.resetCache(),et.resetCache(),yTe()}},Fr=class{constructor(e,r){this.reason=e,this.explanation=r}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}},eB=[0,31,59,90,120,151,181,212,243,273,304,334],tB=[0,31,60,91,121,152,182,213,244,274,305,335];function gn(t,e){return new Fr("unit out of range",`you specified ${e} (of type ${typeof e}) as a ${t}, which is invalid`)}function iA(t,e,r){let n=new Date(Date.UTC(t,e-1,r));t<100&&t>=0&&n.setUTCFullYear(n.getUTCFullYear()-1900);let i=n.getUTCDay();return i===0?7:i}function rB(t,e,r){return r+(Gd(t)?tB:eB)[e-1]}function nB(t,e){let r=Gd(t)?tB:eB,n=r.findIndex(s=>s<e),i=e-r[n];return{month:n+1,day:i}}function sA(t,e){return(t-e+7)%7+1}function bb(t,e=4,r=1){let{year:n,month:i,day:s}=t,o=rB(n,i,s),a=sA(iA(n,i,s),r),c=Math.floor((o-a+14-e)/7),l;return c<1?(l=n-1,c=zd(l,e,r)):c>zd(n,e,r)?(l=n+1,c=1):l=n,{weekYear:l,weekNumber:c,weekday:a,...Ib(t)}}function f5(t,e=4,r=1){let{weekYear:n,weekNumber:i,weekday:s}=t,o=sA(iA(n,1,e),r),a=fl(n),c=i*7+s-o-7+e,l;c<1?(l=n-1,c+=fl(l)):c>a?(l=n+1,c-=fl(n)):l=n;let{month:u,day:d}=nB(l,c);return{year:l,month:u,day:d,...Ib(t)}}function Kk(t){let{year:e,month:r,day:n}=t,i=rB(e,r,n);return{year:e,ordinal:i,...Ib(t)}}function m5(t){let{year:e,ordinal:r}=t,{month:n,day:i}=nB(e,r);return{year:e,month:n,day:i,...Ib(t)}}function h5(t,e){if(!Q(t.localWeekday)||!Q(t.localWeekNumber)||!Q(t.localWeekYear)){if(!Q(t.weekday)||!Q(t.weekNumber)||!Q(t.weekYear))throw new Xs("Cannot mix locale-based week fields with ISO-based week fields");return Q(t.localWeekday)||(t.weekday=t.localWeekday),Q(t.localWeekNumber)||(t.weekNumber=t.localWeekNumber),Q(t.localWeekYear)||(t.weekYear=t.localWeekYear),delete t.localWeekday,delete t.localWeekNumber,delete t.localWeekYear,{minDaysInFirstWeek:e.getMinDaysInFirstWeek(),startOfWeek:e.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function gTe(t,e=4,r=1){let n=xb(t.weekYear),i=bn(t.weekNumber,1,zd(t.weekYear,e,r)),s=bn(t.weekday,1,7);return n?i?s?!1:gn("weekday",t.weekday):gn("week",t.weekNumber):gn("weekYear",t.weekYear)}function bTe(t){let e=xb(t.year),r=bn(t.ordinal,1,fl(t.year));return e?r?!1:gn("ordinal",t.ordinal):gn("year",t.year)}function iB(t){let e=xb(t.year),r=bn(t.month,1,12),n=bn(t.day,1,vb(t.year,t.month));return e?r?n?!1:gn("day",t.day):gn("month",t.month):gn("year",t.year)}function sB(t){let{hour:e,minute:r,second:n,millisecond:i}=t,s=bn(e,0,23)||e===24&&r===0&&n===0&&i===0,o=bn(r,0,59),a=bn(n,0,59),c=bn(i,0,999);return s?o?a?c?!1:gn("millisecond",i):gn("second",n):gn("minute",r):gn("hour",e)}function Q(t){return typeof t>"u"}function Zs(t){return typeof t=="number"}function xb(t){return typeof t=="number"&&t%1===0}function vTe(t){return typeof t=="string"}function ETe(t){return Object.prototype.toString.call(t)==="[object Date]"}function oB(){try{return typeof Intl<"u"&&!!Intl.RelativeTimeFormat}catch{return!1}}function aB(){try{return typeof Intl<"u"&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch{return!1}}function STe(t){return Array.isArray(t)?t:[t]}function y5(t,e,r){if(t.length!==0)return t.reduce((n,i)=>{let s=[e(i),i];return n&&r(n[0],s[0])===n[0]?n:s},null)[1]}function xTe(t,e){return e.reduce((r,n)=>(r[n]=t[n],r),{})}function hl(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function eA(t){if(t==null)return null;if(typeof t!="object")throw new jt("Week settings must be an object");if(!bn(t.firstDay,1,7)||!bn(t.minimalDays,1,7)||!Array.isArray(t.weekend)||t.weekend.some(e=>!bn(e,1,7)))throw new jt("Invalid week settings");return{firstDay:t.firstDay,minimalDays:t.minimalDays,weekend:Array.from(t.weekend)}}function bn(t,e,r){return xb(t)&&t>=e&&t<=r}function wTe(t,e){return t-e*Math.floor(t/e)}function bt(t,e=2){let r=t<0,n;return r?n="-"+(""+-t).padStart(e,"0"):n=(""+t).padStart(e,"0"),n}function Ys(t){if(!(Q(t)||t===null||t===""))return parseInt(t,10)}function sa(t){if(!(Q(t)||t===null||t===""))return parseFloat(t)}function oA(t){if(!(Q(t)||t===null||t==="")){let e=parseFloat("0."+t)*1e3;return Math.floor(e)}}function aA(t,e,r="round"){let n=10**e;switch(r){case"expand":return t>0?Math.ceil(t*n)/n:Math.floor(t*n)/n;case"trunc":return Math.trunc(t*n)/n;case"round":return Math.round(t*n)/n;case"floor":return Math.floor(t*n)/n;case"ceil":return Math.ceil(t*n)/n;default:throw new RangeError(`Value rounding ${r} is out of range`)}}function Gd(t){return t%4===0&&(t%100!==0||t%400===0)}function fl(t){return Gd(t)?366:365}function vb(t,e){let r=wTe(e-1,12)+1,n=t+(e-r)/12;return r===2?Gd(n)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][r-1]}function wb(t){let e=Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond);return t.year<100&&t.year>=0&&(e=new Date(e),e.setUTCFullYear(t.year,t.month-1,t.day)),+e}function g5(t,e,r){return-sA(iA(t,1,e),r)+e-1}function zd(t,e=4,r=1){let n=g5(t,e,r),i=g5(t+1,e,r);return(fl(t)-n+i)/7}function tA(t){return t>99?t:t>Ye.twoDigitCutoffYear?1900+t:2e3+t}function cB(t,e,r,n=null){let i=new Date(t),s={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};n&&(s.timeZone=n);let o={timeZoneName:e,...s},a=new Intl.DateTimeFormat(r,o).formatToParts(i).find(c=>c.type.toLowerCase()==="timezonename");return a?a.value:null}function _b(t,e){let r=parseInt(t,10);Number.isNaN(r)&&(r=0);let n=parseInt(e,10)||0,i=r<0||Object.is(r,-0)?-n:n;return r*60+i}function lB(t){let e=Number(t);if(typeof t=="boolean"||t===""||!Number.isFinite(e))throw new jt(`Invalid unit value ${t}`);return e}function Eb(t,e){let r={};for(let n in t)if(hl(t,n)){let i=t[n];if(i==null)continue;r[e(n)]=lB(i)}return r}function Ud(t,e){let r=Math.trunc(Math.abs(t/60)),n=Math.trunc(Math.abs(t%60)),i=t>=0?"+":"-";switch(e){case"short":return`${i}${bt(r,2)}:${bt(n,2)}`;case"narrow":return`${i}${r}${n>0?`:${n}`:""}`;case"techie":return`${i}${bt(r,2)}${bt(n,2)}`;default:throw new RangeError(`Value format ${e} is out of range for property format`)}}function Ib(t){return xTe(t,["hour","minute","second","millisecond"])}var _Te=["January","February","March","April","May","June","July","August","September","October","November","December"],uB=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ITe=["J","F","M","A","M","J","J","A","S","O","N","D"];function dB(t){switch(t){case"narrow":return[...ITe];case"short":return[...uB];case"long":return[..._Te];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var pB=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],fB=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],TTe=["M","T","W","T","F","S","S"];function mB(t){switch(t){case"narrow":return[...TTe];case"short":return[...fB];case"long":return[...pB];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var hB=["AM","PM"],kTe=["Before Christ","Anno Domini"],ATe=["BC","AD"],RTe=["B","A"];function yB(t){switch(t){case"narrow":return[...RTe];case"short":return[...ATe];case"long":return[...kTe];default:return null}}function OTe(t){return hB[t.hour<12?0:1]}function CTe(t,e){return mB(e)[t.weekday-1]}function jTe(t,e){return dB(e)[t.month-1]}function PTe(t,e){return yB(e)[t.year<0?0:1]}function KTe(t,e,r="always",n=!1){let i={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},s=["hours","minutes","seconds"].indexOf(t)===-1;if(r==="auto"&&s){let d=t==="days";switch(e){case 1:return d?"tomorrow":`next ${i[t][0]}`;case-1:return d?"yesterday":`last ${i[t][0]}`;case 0:return d?"today":`this ${i[t][0]}`}}let o=Object.is(e,-0)||e<0,a=Math.abs(e),c=a===1,l=i[t],u=n?c?l[1]:l[2]||l[1]:c?i[t][0]:t;return o?`${a} ${u} ago`:`in ${a} ${u}`}function b5(t,e){let r="";for(let n of t)n.literal?r+=n.val:r+=e(n.val);return r}var DTe={D:yb,DD:P5,DDD:K5,DDDD:D5,t:M5,tt:N5,ttt:L5,tttt:q5,T:F5,TT:$5,TTT:U5,TTTT:J5,f:z5,ff:B5,fff:V5,ffff:Y5,F:G5,FF:H5,FFF:W5,FFFF:Q5},qr=class t{static create(e,r={}){return new t(e,r)}static parseFormat(e){let r=null,n="",i=!1,s=[];for(let o=0;o<e.length;o++){let a=e.charAt(o);a==="'"?((n.length>0||i)&&s.push({literal:i||/^\s+$/.test(n),val:n===""?"'":n}),r=null,n="",i=!i):i||a===r?n+=a:(n.length>0&&s.push({literal:/^\s+$/.test(n),val:n}),n=a,r=a)}return n.length>0&&s.push({literal:i||/^\s+$/.test(n),val:n}),s}static macroTokenToFormatOpts(e){return DTe[e]}constructor(e,r){this.opts=r,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,r){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,{...this.opts,...r}).format()}dtFormatter(e,r={}){return this.loc.dtFormatter(e,{...this.opts,...r})}formatDateTime(e,r){return this.dtFormatter(e,r).format()}formatDateTimeParts(e,r){return this.dtFormatter(e,r).formatToParts()}formatInterval(e,r){return this.dtFormatter(e.start,r).dtf.formatRange(e.start.toJSDate(),e.end.toJSDate())}resolvedOptions(e,r){return this.dtFormatter(e,r).resolvedOptions()}num(e,r=0,n=void 0){if(this.opts.forceSimple)return bt(e,r);let i={...this.opts};return r>0&&(i.padTo=r),n&&(i.signDisplay=n),this.loc.numberFormatter(i).format(e)}formatDateTimeFromString(e,r){let n=this.loc.listingMode()==="en",i=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",s=(f,m)=>this.loc.extract(e,f,m),o=f=>e.isOffsetFixed&&e.offset===0&&f.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,f.format):"",a=()=>n?OTe(e):s({hour:"numeric",hourCycle:"h12"},"dayperiod"),c=(f,m)=>n?jTe(e,f):s(m?{month:f}:{month:f,day:"numeric"},"month"),l=(f,m)=>n?CTe(e,f):s(m?{weekday:f}:{weekday:f,month:"long",day:"numeric"},"weekday"),u=f=>{let m=t.macroTokenToFormatOpts(f);return m?this.formatWithSystemDefault(e,m):f},d=f=>n?PTe(e,f):s({era:f},"era"),p=f=>{switch(f){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12===0?12:e.hour%12);case"hh":return this.num(e.hour%12===0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return a();case"d":return i?s({day:"numeric"},"day"):this.num(e.day);case"dd":return i?s({day:"2-digit"},"day"):this.num(e.day,2);case"c":return this.num(e.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"E":return this.num(e.weekday);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return i?s({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return i?s({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return c("short",!0);case"LLLL":return c("long",!0);case"LLLLL":return c("narrow",!0);case"M":return i?s({month:"numeric"},"month"):this.num(e.month);case"MM":return i?s({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return c("short",!1);case"MMMM":return c("long",!1);case"MMMMM":return c("narrow",!1);case"y":return i?s({year:"numeric"},"year"):this.num(e.year);case"yy":return i?s({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return i?s({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return i?s({year:"numeric"},"year"):this.num(e.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"n":return this.num(e.localWeekNumber);case"nn":return this.num(e.localWeekNumber,2);case"ii":return this.num(e.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(e.localWeekYear,4);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return u(f)}};return b5(t.parseFormat(r),p)}formatDurationFromString(e,r){let n=this.opts.signMode==="negativeLargestOnly"?-1:1,i=u=>{switch(u[0]){case"S":return"milliseconds";case"s":return"seconds";case"m":return"minutes";case"h":return"hours";case"d":return"days";case"w":return"weeks";case"M":return"months";case"y":return"years";default:return null}},s=(u,d)=>p=>{let f=i(p);if(f){let m=d.isNegativeDuration&&f!==d.largestUnit?n:1,y;return this.opts.signMode==="negativeLargestOnly"&&f!==d.largestUnit?y="never":this.opts.signMode==="all"?y="always":y="auto",this.num(u.get(f)*m,p.length,y)}else return p},o=t.parseFormat(r),a=o.reduce((u,{literal:d,val:p})=>d?u:u.concat(p),[]),c=e.shiftTo(...a.map(i).filter(u=>u)),l={isNegativeDuration:c<0,largestUnit:Object.keys(c.values)[0]};return b5(o,s(c,l))}},gB=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function yl(...t){let e=t.reduce((r,n)=>r+n.source,"");return RegExp(`^${e}$`)}function gl(...t){return e=>t.reduce(([r,n,i],s)=>{let[o,a,c]=s(e,i);return[{...r,...o},a||n,c]},[{},null,1]).slice(0,2)}function bl(t,...e){if(t==null)return[null,null];for(let[r,n]of e){let i=r.exec(t);if(i)return n(i)}return[null,null]}function bB(...t){return(e,r)=>{let n={},i;for(i=0;i<t.length;i++)n[t[i]]=Ys(e[r+i]);return[n,null,r+i]}}var vB=/(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/,MTe=`(?:${vB.source}?(?:\\[(${gB.source})\\])?)?`,cA=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,EB=RegExp(`${cA.source}${MTe}`),lA=RegExp(`(?:[Tt]${EB.source})?`),NTe=/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,LTe=/(\d{4})-?W(\d\d)(?:-?(\d))?/,qTe=/(\d{4})-?(\d{3})/,FTe=bB("weekYear","weekNumber","weekDay"),$Te=bB("year","ordinal"),UTe=/(\d{4})-(\d\d)-(\d\d)/,SB=RegExp(`${cA.source} ?(?:${vB.source}|(${gB.source}))?`),JTe=RegExp(`(?: ${SB.source})?`);function ml(t,e,r){let n=t[e];return Q(n)?r:Ys(n)}function zTe(t,e){return[{year:ml(t,e),month:ml(t,e+1,1),day:ml(t,e+2,1)},null,e+3]}function vl(t,e){return[{hours:ml(t,e,0),minutes:ml(t,e+1,0),seconds:ml(t,e+2,0),milliseconds:oA(t[e+3])},null,e+4]}function Bd(t,e){let r=!t[e]&&!t[e+1],n=_b(t[e+1],t[e+2]),i=r?null:Ur.instance(n);return[{},i,e+3]}function Hd(t,e){let r=t[e]?Zi.create(t[e]):null;return[{},r,e+1]}var GTe=RegExp(`^T?${cA.source}$`),BTe=/^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;function HTe(t){let[e,r,n,i,s,o,a,c,l]=t,u=e[0]==="-",d=c&&c[0]==="-",p=(f,m=!1)=>f!==void 0&&(m||f&&u)?-f:f;return[{years:p(sa(r)),months:p(sa(n)),weeks:p(sa(i)),days:p(sa(s)),hours:p(sa(o)),minutes:p(sa(a)),seconds:p(sa(c),c==="-0"),milliseconds:p(oA(l),d)}]}var VTe={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function uA(t,e,r,n,i,s,o){let a={year:e.length===2?tA(Ys(e)):Ys(e),month:uB.indexOf(r)+1,day:Ys(n),hour:Ys(i),minute:Ys(s)};return o&&(a.second=Ys(o)),t&&(a.weekday=t.length>3?pB.indexOf(t)+1:fB.indexOf(t)+1),a}var WTe=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function YTe(t){let[,e,r,n,i,s,o,a,c,l,u,d]=t,p=uA(e,i,n,r,s,o,a),f;return c?f=VTe[c]:l?f=0:f=_b(u,d),[p,new Ur(f)]}function QTe(t){return t.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var XTe=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,ZTe=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,eke=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function v5(t){let[,e,r,n,i,s,o,a]=t;return[uA(e,i,n,r,s,o,a),Ur.utcInstance]}function tke(t){let[,e,r,n,i,s,o,a]=t;return[uA(e,a,r,n,i,s,o),Ur.utcInstance]}var rke=yl(NTe,lA),nke=yl(LTe,lA),ike=yl(qTe,lA),ske=yl(EB),xB=gl(zTe,vl,Bd,Hd),oke=gl(FTe,vl,Bd,Hd),ake=gl($Te,vl,Bd,Hd),cke=gl(vl,Bd,Hd);function lke(t){return bl(t,[rke,xB],[nke,oke],[ike,ake],[ske,cke])}function uke(t){return bl(QTe(t),[WTe,YTe])}function dke(t){return bl(t,[XTe,v5],[ZTe,v5],[eke,tke])}function pke(t){return bl(t,[BTe,HTe])}var fke=gl(vl);function mke(t){return bl(t,[GTe,fke])}var hke=yl(UTe,JTe),yke=yl(SB),gke=gl(vl,Bd,Hd);function bke(t){return bl(t,[hke,xB],[yke,gke])}var E5="Invalid Duration",wB={weeks:{days:7,hours:168,minutes:10080,seconds:10080*60,milliseconds:10080*60*1e3},days:{hours:24,minutes:1440,seconds:1440*60,milliseconds:1440*60*1e3},hours:{minutes:60,seconds:3600,milliseconds:3600*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},vke={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:2184*60,seconds:2184*60*60,milliseconds:2184*60*60*1e3},months:{weeks:4,days:30,hours:720,minutes:720*60,seconds:720*60*60,milliseconds:720*60*60*1e3},...wB},yn=146097/400,ul=146097/4800,Eke={years:{quarters:4,months:12,weeks:yn/7,days:yn,hours:yn*24,minutes:yn*24*60,seconds:yn*24*60*60,milliseconds:yn*24*60*60*1e3},quarters:{months:3,weeks:yn/28,days:yn/4,hours:yn*24/4,minutes:yn*24*60/4,seconds:yn*24*60*60/4,milliseconds:yn*24*60*60*1e3/4},months:{weeks:ul/7,days:ul,hours:ul*24,minutes:ul*24*60,seconds:ul*24*60*60,milliseconds:ul*24*60*60*1e3},...wB},aa=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],Ske=aa.slice(0).reverse();function Qi(t,e,r=!1){let n={values:r?e.values:{...t.values,...e.values||{}},loc:t.loc.clone(e.loc),conversionAccuracy:e.conversionAccuracy||t.conversionAccuracy,matrix:e.matrix||t.matrix};return new _t(n)}function _B(t,e){var r;let n=(r=e.milliseconds)!=null?r:0;for(let i of Ske.slice(1))e[i]&&(n+=e[i]*t[i].milliseconds);return n}function S5(t,e){let r=_B(t,e)<0?-1:1;aa.reduceRight((n,i)=>{if(Q(e[i]))return n;if(n){let s=e[n]*r,o=t[i][n],a=Math.floor(s/o);e[i]+=a*r,e[n]-=a*o*r}return i},null),aa.reduce((n,i)=>{if(Q(e[i]))return n;if(n){let s=e[n]%1;e[n]-=s,e[i]+=s*t[n][i]}return i},null)}function x5(t){let e={};for(let[r,n]of Object.entries(t))n!==0&&(e[r]=n);return e}var _t=class t{constructor(e){let r=e.conversionAccuracy==="longterm"||!1,n=r?Eke:vke;e.matrix&&(n=e.matrix),this.values=e.values,this.loc=e.loc||$e.create(),this.conversionAccuracy=r?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=n,this.isLuxonDuration=!0}static fromMillis(e,r){return t.fromObject({milliseconds:e},r)}static fromObject(e,r={}){if(e==null||typeof e!="object")throw new jt(`Duration.fromObject: argument expected to be an object, got ${e===null?"null":typeof e}`);return new t({values:Eb(e,t.normalizeUnit),loc:$e.fromObject(r),conversionAccuracy:r.conversionAccuracy,matrix:r.matrix})}static fromDurationLike(e){if(Zs(e))return t.fromMillis(e);if(t.isDuration(e))return e;if(typeof e=="object")return t.fromObject(e);throw new jt(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,r){let[n]=pke(e);return n?t.fromObject(n,r):t.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static fromISOTime(e,r){let[n]=mke(e);return n?t.fromObject(n,r):t.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static invalid(e,r=null){if(!e)throw new jt("need to specify a reason the Duration is invalid");let n=e instanceof Fr?e:new Fr(e,r);if(Ye.throwOnInvalid)throw new Uk(n);return new t({invalid:n})}static normalizeUnit(e){let r={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e&&e.toLowerCase()];if(!r)throw new hb(e);return r}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,r={}){let n={...r,floor:r.round!==!1&&r.floor!==!1};return this.isValid?qr.create(this.loc,n).formatDurationFromString(this,e):E5}toHuman(e={}){if(!this.isValid)return E5;let r=e.showZeros!==!1,n=aa.map(i=>{let s=this.values[i];return Q(s)||s===0&&!r?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...e,unit:i.slice(0,-1)}).format(s)}).filter(i=>i);return this.loc.listFormatter({type:"conjunction",style:e.listStyle||"narrow",...e}).format(n)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e="P";return this.years!==0&&(e+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(e+=this.months+this.quarters*3+"M"),this.weeks!==0&&(e+=this.weeks+"W"),this.days!==0&&(e+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(e+="T"),this.hours!==0&&(e+=this.hours+"H"),this.minutes!==0&&(e+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(e+=aA(this.seconds+this.milliseconds/1e3,3)+"S"),e==="P"&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;let r=this.toMillis();return r<0||r>=864e5?null:(e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...e,includeOffset:!1},et.fromMillis(r,{zone:"UTC"}).toISOTime(e))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?_B(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;let r=t.fromDurationLike(e),n={};for(let i of aa)(hl(r.values,i)||hl(this.values,i))&&(n[i]=r.get(i)+this.get(i));return Qi(this,{values:n},!0)}minus(e){if(!this.isValid)return this;let r=t.fromDurationLike(e);return this.plus(r.negate())}mapUnits(e){if(!this.isValid)return this;let r={};for(let n of Object.keys(this.values))r[n]=lB(e(this.values[n],n));return Qi(this,{values:r},!0)}get(e){return this[t.normalizeUnit(e)]}set(e){if(!this.isValid)return this;let r={...this.values,...Eb(e,t.normalizeUnit)};return Qi(this,{values:r})}reconfigure({locale:e,numberingSystem:r,conversionAccuracy:n,matrix:i}={}){let o={loc:this.loc.clone({locale:e,numberingSystem:r}),matrix:i,conversionAccuracy:n};return Qi(this,o)}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;let e=this.toObject();return S5(this.matrix,e),Qi(this,{values:e},!0)}rescale(){if(!this.isValid)return this;let e=x5(this.normalize().shiftToAll().toObject());return Qi(this,{values:e},!0)}shiftTo(...e){if(!this.isValid)return this;if(e.length===0)return this;e=e.map(o=>t.normalizeUnit(o));let r={},n={},i=this.toObject(),s;for(let o of aa)if(e.indexOf(o)>=0){s=o;let a=0;for(let l in n)a+=this.matrix[l][o]*n[l],n[l]=0;Zs(i[o])&&(a+=i[o]);let c=Math.trunc(a);r[o]=c,n[o]=(a*1e3-c*1e3)/1e3}else Zs(i[o])&&(n[o]=i[o]);for(let o in n)n[o]!==0&&(r[s]+=o===s?n[o]:n[o]/this.matrix[s][o]);return S5(this.matrix,r),Qi(this,{values:r},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let e={};for(let r of Object.keys(this.values))e[r]=this.values[r]===0?0:-this.values[r];return Qi(this,{values:e},!0)}removeZeros(){if(!this.isValid)return this;let e=x5(this.values);return Qi(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid||!this.loc.equals(e.loc))return!1;function r(n,i){return n===void 0||n===0?i===void 0||i===0:n===i}for(let n of aa)if(!r(this.values[n],e.values[n]))return!1;return!0}},dl="Invalid Interval";function xke(t,e){return!t||!t.isValid?la.invalid("missing or invalid start"):!e||!e.isValid?la.invalid("missing or invalid end"):e<t?la.invalid("end before start",`The end of an interval must be after its start, but you had start=${t.toISO()} and end=${e.toISO()}`):null}var la=class t{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(e,r=null){if(!e)throw new jt("need to specify a reason the Interval is invalid");let n=e instanceof Fr?e:new Fr(e,r);if(Ye.throwOnInvalid)throw new $k(n);return new t({invalid:n})}static fromDateTimes(e,r){let n=Ld(e),i=Ld(r),s=xke(n,i);return s??new t({start:n,end:i})}static after(e,r){let n=_t.fromDurationLike(r),i=Ld(e);return t.fromDateTimes(i,i.plus(n))}static before(e,r){let n=_t.fromDurationLike(r),i=Ld(e);return t.fromDateTimes(i.minus(n),i)}static fromISO(e,r){let[n,i]=(e||"").split("/",2);if(n&&i){let s,o;try{s=et.fromISO(n,r),o=s.isValid}catch{o=!1}let a,c;try{a=et.fromISO(i,r),c=a.isValid}catch{c=!1}if(o&&c)return t.fromDateTimes(s,a);if(o){let l=_t.fromISO(i,r);if(l.isValid)return t.after(s,l)}else if(c){let l=_t.fromISO(n,r);if(l.isValid)return t.before(a,l)}}return t.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static isInterval(e){return e&&e.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get lastDateTime(){return this.isValid&&this.e?this.e.minus(1):null}get isValid(){return this.invalidReason===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(e="milliseconds"){return this.isValid?this.toDuration(e).get(e):NaN}count(e="milliseconds",r){if(!this.isValid)return NaN;let n=this.start.startOf(e,r),i;return r!=null&&r.useLocaleWeeks?i=this.end.reconfigure({locale:n.locale}):i=this.end,i=i.startOf(e,r),Math.floor(i.diff(n,e).get(e))+(i.valueOf()!==this.end.valueOf())}hasSame(e){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,e):!1}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(e){return this.isValid?this.s>e:!1}isBefore(e){return this.isValid?this.e<=e:!1}contains(e){return this.isValid?this.s<=e&&this.e>e:!1}set({start:e,end:r}={}){return this.isValid?t.fromDateTimes(e||this.s,r||this.e):this}splitAt(...e){if(!this.isValid)return[];let r=e.map(Ld).filter(o=>this.contains(o)).sort((o,a)=>o.toMillis()-a.toMillis()),n=[],{s:i}=this,s=0;for(;i<this.e;){let o=r[s]||this.e,a=+o>+this.e?this.e:o;n.push(t.fromDateTimes(i,a)),i=a,s+=1}return n}splitBy(e){let r=_t.fromDurationLike(e);if(!this.isValid||!r.isValid||r.as("milliseconds")===0)return[];let{s:n}=this,i=1,s,o=[];for(;n<this.e;){let a=this.start.plus(r.mapUnits(c=>c*i));s=+a>+this.e?this.e:a,o.push(t.fromDateTimes(n,s)),n=s,i+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s<e.e}abutsStart(e){return this.isValid?+this.e==+e.s:!1}abutsEnd(e){return this.isValid?+e.e==+this.s:!1}engulfs(e){return this.isValid?this.s<=e.s&&this.e>=e.e:!1}equals(e){return!this.isValid||!e.isValid?!1:this.s.equals(e.s)&&this.e.equals(e.e)}intersection(e){if(!this.isValid)return this;let r=this.s>e.s?this.s:e.s,n=this.e<e.e?this.e:e.e;return r>=n?null:t.fromDateTimes(r,n)}union(e){if(!this.isValid)return this;let r=this.s<e.s?this.s:e.s,n=this.e>e.e?this.e:e.e;return t.fromDateTimes(r,n)}static merge(e){let[r,n]=e.sort((i,s)=>i.s-s.s).reduce(([i,s],o)=>s?s.overlaps(o)||s.abutsStart(o)?[i,s.union(o)]:[i.concat([s]),o]:[i,o],[[],null]);return n&&r.push(n),r}static xor(e){let r=null,n=0,i=[],s=e.map(c=>[{time:c.s,type:"s"},{time:c.e,type:"e"}]),o=Array.prototype.concat(...s),a=o.sort((c,l)=>c.time-l.time);for(let c of a)n+=c.type==="s"?1:-1,n===1?r=c.time:(r&&+r!=+c.time&&i.push(t.fromDateTimes(r,c.time)),r=null);return t.merge(i)}difference(...e){return t.xor([this].concat(e)).map(r=>this.intersection(r)).filter(r=>r&&!r.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u2013 ${this.e.toISO()})`:dl}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(e=yb,r={}){return this.isValid?qr.create(this.s.loc.clone(r),e).formatInterval(this):dl}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:dl}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:dl}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:dl}toFormat(e,{separator:r=" \u2013 "}={}){return this.isValid?`${this.s.toFormat(e)}${r}${this.e.toFormat(e)}`:dl}toDuration(e,r){return this.isValid?this.e.diff(this.s,e,r):_t.invalid(this.invalidReason)}mapEndpoints(e){return t.fromDateTimes(e(this.s),e(this.e))}},ca=class{static hasDST(e=Ye.defaultZone){let r=et.now().setZone(e).set({month:12});return!e.isUniversal&&r.offset!==r.set({month:6}).offset}static isValidIANAZone(e){return Zi.isValidZone(e)}static normalizeZone(e){return Qs(e,Ye.defaultZone)}static getStartOfWeek({locale:e=null,locObj:r=null}={}){return(r||$e.create(e)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:e=null,locObj:r=null}={}){return(r||$e.create(e)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:e=null,locObj:r=null}={}){return(r||$e.create(e)).getWeekendDays().slice()}static months(e="long",{locale:r=null,numberingSystem:n=null,locObj:i=null,outputCalendar:s="gregory"}={}){return(i||$e.create(r,n,s)).months(e)}static monthsFormat(e="long",{locale:r=null,numberingSystem:n=null,locObj:i=null,outputCalendar:s="gregory"}={}){return(i||$e.create(r,n,s)).months(e,!0)}static weekdays(e="long",{locale:r=null,numberingSystem:n=null,locObj:i=null}={}){return(i||$e.create(r,n,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:r=null,numberingSystem:n=null,locObj:i=null}={}){return(i||$e.create(r,n,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return $e.create(e).meridiems()}static eras(e="short",{locale:r=null}={}){return $e.create(r,null,"gregory").eras(e)}static features(){return{relative:oB(),localeWeek:aB()}}};function w5(t,e){let r=i=>i.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),n=r(e)-r(t);return Math.floor(_t.fromMillis(n).as("days"))}function wke(t,e,r){let n=[["years",(c,l)=>l.year-c.year],["quarters",(c,l)=>l.quarter-c.quarter+(l.year-c.year)*4],["months",(c,l)=>l.month-c.month+(l.year-c.year)*12],["weeks",(c,l)=>{let u=w5(c,l);return(u-u%7)/7}],["days",w5]],i={},s=t,o,a;for(let[c,l]of n)r.indexOf(c)>=0&&(o=c,i[c]=l(t,e),a=s.plus(i),a>e?(i[c]--,t=s.plus(i),t>e&&(a=t,i[c]--,t=s.plus(i))):t=a);return[t,i,a,o]}function _ke(t,e,r,n){let[i,s,o,a]=wke(t,e,r),c=e-i,l=r.filter(d=>["hours","minutes","seconds","milliseconds"].indexOf(d)>=0);l.length===0&&(o<e&&(o=i.plus({[a]:1})),o!==i&&(s[a]=(s[a]||0)+c/(o-i)));let u=_t.fromObject(s,n);return l.length>0?_t.fromMillis(c,n).shiftTo(...l).plus(u):u}var Ike="missing Intl.DateTimeFormat.formatToParts support";function Oe(t,e=r=>r){return{regex:t,deser:([r])=>e(hTe(r))}}var Tke="\xA0",IB=`[ ${Tke}]`,TB=new RegExp(IB,"g");function kke(t){return t.replace(/\./g,"\\.?").replace(TB,IB)}function _5(t){return t.replace(/\./g,"").replace(TB," ").toLowerCase()}function Mn(t,e){return t===null?null:{regex:RegExp(t.map(kke).join("|")),deser:([r])=>t.findIndex(n=>_5(r)===_5(n))+e}}function I5(t,e){return{regex:t,deser:([,r,n])=>_b(r,n),groups:e}}function lb(t){return{regex:t,deser:([e])=>e}}function Ake(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Rke(t,e){let r=Dn(e),n=Dn(e,"{2}"),i=Dn(e,"{3}"),s=Dn(e,"{4}"),o=Dn(e,"{6}"),a=Dn(e,"{1,2}"),c=Dn(e,"{1,3}"),l=Dn(e,"{1,6}"),u=Dn(e,"{1,9}"),d=Dn(e,"{2,4}"),p=Dn(e,"{4,6}"),f=b=>({regex:RegExp(Ake(b.val)),deser:([v])=>v,literal:!0}),y=(b=>{if(t.literal)return f(b);switch(b.val){case"G":return Mn(e.eras("short"),0);case"GG":return Mn(e.eras("long"),0);case"y":return Oe(l);case"yy":return Oe(d,tA);case"yyyy":return Oe(s);case"yyyyy":return Oe(p);case"yyyyyy":return Oe(o);case"M":return Oe(a);case"MM":return Oe(n);case"MMM":return Mn(e.months("short",!0),1);case"MMMM":return Mn(e.months("long",!0),1);case"L":return Oe(a);case"LL":return Oe(n);case"LLL":return Mn(e.months("short",!1),1);case"LLLL":return Mn(e.months("long",!1),1);case"d":return Oe(a);case"dd":return Oe(n);case"o":return Oe(c);case"ooo":return Oe(i);case"HH":return Oe(n);case"H":return Oe(a);case"hh":return Oe(n);case"h":return Oe(a);case"mm":return Oe(n);case"m":return Oe(a);case"q":return Oe(a);case"qq":return Oe(n);case"s":return Oe(a);case"ss":return Oe(n);case"S":return Oe(c);case"SSS":return Oe(i);case"u":return lb(u);case"uu":return lb(a);case"uuu":return Oe(r);case"a":return Mn(e.meridiems(),0);case"kkkk":return Oe(s);case"kk":return Oe(d,tA);case"W":return Oe(a);case"WW":return Oe(n);case"E":case"c":return Oe(r);case"EEE":return Mn(e.weekdays("short",!1),1);case"EEEE":return Mn(e.weekdays("long",!1),1);case"ccc":return Mn(e.weekdays("short",!0),1);case"cccc":return Mn(e.weekdays("long",!0),1);case"Z":case"ZZ":return I5(new RegExp(`([+-]${a.source})(?::(${n.source}))?`),2);case"ZZZ":return I5(new RegExp(`([+-]${a.source})(${n.source})?`),2);case"z":return lb(/[a-z_+-/]{1,256}?/i);case" ":return lb(/[^\S\n\r]/);default:return f(b)}})(t)||{invalidReason:Ike};return y.token=t,y}var Oke={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function Cke(t,e,r){let{type:n,value:i}=t;if(n==="literal"){let c=/^\s+$/.test(i);return{literal:!c,val:c?" ":i}}let s=e[n],o=n;n==="hour"&&(e.hour12!=null?o=e.hour12?"hour12":"hour24":e.hourCycle!=null?e.hourCycle==="h11"||e.hourCycle==="h12"?o="hour12":o="hour24":o=r.hour12?"hour12":"hour24");let a=Oke[o];if(typeof a=="object"&&(a=a[s]),a)return{literal:!1,val:a}}function jke(t){return[`^${t.map(r=>r.regex).reduce((r,n)=>`${r}(${n.source})`,"")}$`,t]}function Pke(t,e,r){let n=t.match(e);if(n){let i={},s=1;for(let o in r)if(hl(r,o)){let a=r[o],c=a.groups?a.groups+1:1;!a.literal&&a.token&&(i[a.token.val[0]]=a.deser(n.slice(s,s+c))),s+=c}return[n,i]}else return[n,{}]}function Kke(t){let e=s=>{switch(s){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},r=null,n;return Q(t.z)||(r=Zi.create(t.z)),Q(t.Z)||(r||(r=new Ur(t.Z)),n=t.Z),Q(t.q)||(t.M=(t.q-1)*3+1),Q(t.h)||(t.h<12&&t.a===1?t.h+=12:t.h===12&&t.a===0&&(t.h=0)),t.G===0&&t.y&&(t.y=-t.y),Q(t.u)||(t.S=oA(t.u)),[Object.keys(t).reduce((s,o)=>{let a=e(o);return a&&(s[a]=t[o]),s},{}),r,n]}var Dk=null;function Dke(){return Dk||(Dk=et.fromMillis(1555555555555)),Dk}function Mke(t,e){if(t.literal)return t;let r=qr.macroTokenToFormatOpts(t.val),n=RB(r,e);return n==null||n.includes(void 0)?t:n}function kB(t,e){return Array.prototype.concat(...t.map(r=>Mke(r,e)))}var Sb=class{constructor(e,r){if(this.locale=e,this.format=r,this.tokens=kB(qr.parseFormat(r),e),this.units=this.tokens.map(n=>Rke(n,e)),this.disqualifyingUnit=this.units.find(n=>n.invalidReason),!this.disqualifyingUnit){let[n,i]=jke(this.units);this.regex=RegExp(n,"i"),this.handlers=i}}explainFromTokens(e){if(this.isValid){let[r,n]=Pke(e,this.regex,this.handlers),[i,s,o]=n?Kke(n):[null,null,void 0];if(hl(n,"a")&&hl(n,"H"))throw new Xs("Can't include meridiem when specifying 24-hour format");return{input:e,tokens:this.tokens,regex:this.regex,rawMatches:r,matches:n,result:i,zone:s,specificOffset:o}}else return{input:e,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}};function AB(t,e,r){return new Sb(t,r).explainFromTokens(e)}function Nke(t,e,r){let{result:n,zone:i,specificOffset:s,invalidReason:o}=AB(t,e,r);return[n,i,s,o]}function RB(t,e){if(!t)return null;let n=qr.create(e,t).dtFormatter(Dke()),i=n.formatToParts(),s=n.resolvedOptions();return i.map(o=>Cke(o,t,s))}var Mk="Invalid DateTime",T5=864e13;function Fd(t){return new Fr("unsupported zone",`the zone "${t.name}" is not supported`)}function Nk(t){return t.weekData===null&&(t.weekData=bb(t.c)),t.weekData}function Lk(t){return t.localWeekData===null&&(t.localWeekData=bb(t.c,t.loc.getMinDaysInFirstWeek(),t.loc.getStartOfWeek())),t.localWeekData}function oa(t,e){let r={ts:t.ts,zone:t.zone,c:t.c,o:t.o,loc:t.loc,invalid:t.invalid};return new et({...r,...e,old:r})}function OB(t,e,r){let n=t-e*60*1e3,i=r.offset(n);if(e===i)return[n,e];n-=(i-e)*60*1e3;let s=r.offset(n);return i===s?[n,i]:[t-Math.min(i,s)*60*1e3,Math.max(i,s)]}function ub(t,e){t+=e*60*1e3;let r=new Date(t);return{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate(),hour:r.getUTCHours(),minute:r.getUTCMinutes(),second:r.getUTCSeconds(),millisecond:r.getUTCMilliseconds()}}function pb(t,e,r){return OB(wb(t),e,r)}function k5(t,e){let r=t.o,n=t.c.year+Math.trunc(e.years),i=t.c.month+Math.trunc(e.months)+Math.trunc(e.quarters)*3,s={...t.c,year:n,month:i,day:Math.min(t.c.day,vb(n,i))+Math.trunc(e.days)+Math.trunc(e.weeks)*7},o=_t.fromObject({years:e.years-Math.trunc(e.years),quarters:e.quarters-Math.trunc(e.quarters),months:e.months-Math.trunc(e.months),weeks:e.weeks-Math.trunc(e.weeks),days:e.days-Math.trunc(e.days),hours:e.hours,minutes:e.minutes,seconds:e.seconds,milliseconds:e.milliseconds}).as("milliseconds"),a=wb(s),[c,l]=OB(a,r,t.zone);return o!==0&&(c+=o,l=t.zone.offset(c)),{ts:c,o:l}}function pl(t,e,r,n,i,s){let{setZone:o,zone:a}=r;if(t&&Object.keys(t).length!==0||e){let c=e||a,l=et.fromObject(t,{...r,zone:c,specificOffset:s});return o?l:l.setZone(a)}else return et.invalid(new Fr("unparsable",`the input "${i}" can't be parsed as ${n}`))}function db(t,e,r=!0){return t.isValid?qr.create($e.create("en-US"),{allowZ:r,forceSimple:!0}).formatDateTimeFromString(t,e):null}function qk(t,e,r){let n=t.c.year>9999||t.c.year<0,i="";if(n&&t.c.year>=0&&(i+="+"),i+=bt(t.c.year,n?6:4),r==="year")return i;if(e){if(i+="-",i+=bt(t.c.month),r==="month")return i;i+="-"}else if(i+=bt(t.c.month),r==="month")return i;return i+=bt(t.c.day),i}function A5(t,e,r,n,i,s,o){let a=!r||t.c.millisecond!==0||t.c.second!==0,c="";switch(o){case"day":case"month":case"year":break;default:if(c+=bt(t.c.hour),o==="hour")break;if(e){if(c+=":",c+=bt(t.c.minute),o==="minute")break;a&&(c+=":",c+=bt(t.c.second))}else{if(c+=bt(t.c.minute),o==="minute")break;a&&(c+=bt(t.c.second))}if(o==="second")break;a&&(!n||t.c.millisecond!==0)&&(c+=".",c+=bt(t.c.millisecond,3))}return i&&(t.isOffsetFixed&&t.offset===0&&!s?c+="Z":t.o<0?(c+="-",c+=bt(Math.trunc(-t.o/60)),c+=":",c+=bt(Math.trunc(-t.o%60))):(c+="+",c+=bt(Math.trunc(t.o/60)),c+=":",c+=bt(Math.trunc(t.o%60)))),s&&(c+="["+t.zone.ianaName+"]"),c}var CB={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},Lke={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},qke={ordinal:1,hour:0,minute:0,second:0,millisecond:0},fb=["year","month","day","hour","minute","second","millisecond"],Fke=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],$ke=["year","ordinal","hour","minute","second","millisecond"];function mb(t){let e={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[t.toLowerCase()];if(!e)throw new hb(t);return e}function R5(t){switch(t.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return mb(t)}}function Uke(t){if($d===void 0&&($d=Ye.now()),t.type!=="iana")return t.offset($d);let e=t.name,r=rA.get(e);return r===void 0&&(r=t.offset($d),rA.set(e,r)),r}function O5(t,e){let r=Qs(e.zone,Ye.defaultZone);if(!r.isValid)return et.invalid(Fd(r));let n=$e.fromObject(e),i,s;if(Q(t.year))i=Ye.now();else{for(let c of fb)Q(t[c])&&(t[c]=CB[c]);let o=iB(t)||sB(t);if(o)return et.invalid(o);let a=Uke(r);[i,s]=pb(t,a,r)}return new et({ts:i,zone:r,loc:n,o:s})}function C5(t,e,r){let n=Q(r.round)?!0:r.round,i=Q(r.rounding)?"trunc":r.rounding,s=(a,c)=>(a=aA(a,n||r.calendary?0:2,r.calendary?"round":i),e.loc.clone(r).relFormatter(r).format(a,c)),o=a=>r.calendary?e.hasSame(t,a)?0:e.startOf(a).diff(t.startOf(a),a).get(a):e.diff(t,a).get(a);if(r.unit)return s(o(r.unit),r.unit);for(let a of r.units){let c=o(a);if(Math.abs(c)>=1)return s(c,a)}return s(t>e?-0:0,r.units[r.units.length-1])}function j5(t){let e={},r;return t.length>0&&typeof t[t.length-1]=="object"?(e=t[t.length-1],r=Array.from(t).slice(0,t.length-1)):r=Array.from(t),[e,r]}var $d,rA=new Map,et=class t{constructor(e){let r=e.zone||Ye.defaultZone,n=e.invalid||(Number.isNaN(e.ts)?new Fr("invalid input"):null)||(r.isValid?null:Fd(r));this.ts=Q(e.ts)?Ye.now():e.ts;let i=null,s=null;if(!n)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(r))[i,s]=[e.old.c,e.old.o];else{let a=Zs(e.o)&&!e.old?e.o:r.offset(this.ts);i=ub(this.ts,a),n=Number.isNaN(i.year)?new Fr("invalid input"):null,i=n?null:i,s=n?null:a}this._zone=r,this.loc=e.loc||$e.create(),this.invalid=n,this.weekData=null,this.localWeekData=null,this.c=i,this.o=s,this.isLuxonDateTime=!0}static now(){return new t({})}static local(){let[e,r]=j5(arguments),[n,i,s,o,a,c,l]=r;return O5({year:n,month:i,day:s,hour:o,minute:a,second:c,millisecond:l},e)}static utc(){let[e,r]=j5(arguments),[n,i,s,o,a,c,l]=r;return e.zone=Ur.utcInstance,O5({year:n,month:i,day:s,hour:o,minute:a,second:c,millisecond:l},e)}static fromJSDate(e,r={}){let n=ETe(e)?e.valueOf():NaN;if(Number.isNaN(n))return t.invalid("invalid input");let i=Qs(r.zone,Ye.defaultZone);return i.isValid?new t({ts:n,zone:i,loc:$e.fromObject(r)}):t.invalid(Fd(i))}static fromMillis(e,r={}){if(Zs(e))return e<-T5||e>T5?t.invalid("Timestamp out of range"):new t({ts:e,zone:Qs(r.zone,Ye.defaultZone),loc:$e.fromObject(r)});throw new jt(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,r={}){if(Zs(e))return new t({ts:e*1e3,zone:Qs(r.zone,Ye.defaultZone),loc:$e.fromObject(r)});throw new jt("fromSeconds requires a numerical input")}static fromObject(e,r={}){e=e||{};let n=Qs(r.zone,Ye.defaultZone);if(!n.isValid)return t.invalid(Fd(n));let i=$e.fromObject(r),s=Eb(e,R5),{minDaysInFirstWeek:o,startOfWeek:a}=h5(s,i),c=Ye.now(),l=Q(r.specificOffset)?n.offset(c):r.specificOffset,u=!Q(s.ordinal),d=!Q(s.year),p=!Q(s.month)||!Q(s.day),f=d||p,m=s.weekYear||s.weekNumber;if((f||u)&&m)throw new Xs("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(p&&u)throw new Xs("Can't mix ordinal dates with month/day");let y=m||s.weekday&&!f,b,v,E=ub(c,l);y?(b=Fke,v=Lke,E=bb(E,o,a)):u?(b=$ke,v=qke,E=Kk(E)):(b=fb,v=CB);let S=!1;for(let U of b){let te=s[U];Q(te)?S?s[U]=v[U]:s[U]=E[U]:S=!0}let k=y?gTe(s,o,a):u?bTe(s):iB(s),_=k||sB(s);if(_)return t.invalid(_);let O=y?f5(s,o,a):u?m5(s):s,[N,ee]=pb(O,l,n),q=new t({ts:N,zone:n,o:ee,loc:i});return s.weekday&&f&&e.weekday!==q.weekday?t.invalid("mismatched weekday",`you can't specify both a weekday of ${s.weekday} and a date of ${q.toISO()}`):q.isValid?q:t.invalid(q.invalid)}static fromISO(e,r={}){let[n,i]=lke(e);return pl(n,i,r,"ISO 8601",e)}static fromRFC2822(e,r={}){let[n,i]=uke(e);return pl(n,i,r,"RFC 2822",e)}static fromHTTP(e,r={}){let[n,i]=dke(e);return pl(n,i,r,"HTTP",r)}static fromFormat(e,r,n={}){if(Q(e)||Q(r))throw new jt("fromFormat requires an input string and a format");let{locale:i=null,numberingSystem:s=null}=n,o=$e.fromOpts({locale:i,numberingSystem:s,defaultToEN:!0}),[a,c,l,u]=Nke(o,e,r);return u?t.invalid(u):pl(a,c,n,`format ${r}`,e,l)}static fromString(e,r,n={}){return t.fromFormat(e,r,n)}static fromSQL(e,r={}){let[n,i]=bke(e);return pl(n,i,r,"SQL",e)}static invalid(e,r=null){if(!e)throw new jt("need to specify a reason the DateTime is invalid");let n=e instanceof Fr?e:new Fr(e,r);if(Ye.throwOnInvalid)throw new Fk(n);return new t({invalid:n})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}static parseFormatForOpts(e,r={}){let n=RB(e,$e.fromObject(r));return n?n.map(i=>i?i.val:null).join(""):null}static expandFormat(e,r={}){return kB(qr.parseFormat(e),$e.fromObject(r)).map(i=>i.val).join("")}static resetCache(){$d=void 0,rA.clear()}get(e){return this[e]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Nk(this).weekYear:NaN}get weekNumber(){return this.isValid?Nk(this).weekNumber:NaN}get weekday(){return this.isValid?Nk(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?Lk(this).weekday:NaN}get localWeekNumber(){return this.isValid?Lk(this).weekNumber:NaN}get localWeekYear(){return this.isValid?Lk(this).weekYear:NaN}get ordinal(){return this.isValid?Kk(this.c).ordinal:NaN}get monthShort(){return this.isValid?ca.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?ca.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?ca.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?ca.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let e=864e5,r=6e4,n=wb(this.c),i=this.zone.offset(n-e),s=this.zone.offset(n+e),o=this.zone.offset(n-i*r),a=this.zone.offset(n-s*r);if(o===a)return[this];let c=n-o*r,l=n-a*r,u=ub(c,o),d=ub(l,a);return u.hour===d.hour&&u.minute===d.minute&&u.second===d.second&&u.millisecond===d.millisecond?[oa(this,{ts:c}),oa(this,{ts:l})]:[this]}get isInLeapYear(){return Gd(this.year)}get daysInMonth(){return vb(this.year,this.month)}get daysInYear(){return this.isValid?fl(this.year):NaN}get weeksInWeekYear(){return this.isValid?zd(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?zd(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(e={}){let{locale:r,numberingSystem:n,calendar:i}=qr.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:r,numberingSystem:n,outputCalendar:i}}toUTC(e=0,r={}){return this.setZone(Ur.instance(e),r)}toLocal(){return this.setZone(Ye.defaultZone)}setZone(e,{keepLocalTime:r=!1,keepCalendarTime:n=!1}={}){if(e=Qs(e,Ye.defaultZone),e.equals(this.zone))return this;if(e.isValid){let i=this.ts;if(r||n){let s=e.offset(this.ts),o=this.toObject();[i]=pb(o,s,e)}return oa(this,{ts:i,zone:e})}else return t.invalid(Fd(e))}reconfigure({locale:e,numberingSystem:r,outputCalendar:n}={}){let i=this.loc.clone({locale:e,numberingSystem:r,outputCalendar:n});return oa(this,{loc:i})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;let r=Eb(e,R5),{minDaysInFirstWeek:n,startOfWeek:i}=h5(r,this.loc),s=!Q(r.weekYear)||!Q(r.weekNumber)||!Q(r.weekday),o=!Q(r.ordinal),a=!Q(r.year),c=!Q(r.month)||!Q(r.day),l=a||c,u=r.weekYear||r.weekNumber;if((l||o)&&u)throw new Xs("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(c&&o)throw new Xs("Can't mix ordinal dates with month/day");let d;s?d=f5({...bb(this.c,n,i),...r},n,i):Q(r.ordinal)?(d={...this.toObject(),...r},Q(r.day)&&(d.day=Math.min(vb(d.year,d.month),d.day))):d=m5({...Kk(this.c),...r});let[p,f]=pb(d,this.o,this.zone);return oa(this,{ts:p,o:f})}plus(e){if(!this.isValid)return this;let r=_t.fromDurationLike(e);return oa(this,k5(this,r))}minus(e){if(!this.isValid)return this;let r=_t.fromDurationLike(e).negate();return oa(this,k5(this,r))}startOf(e,{useLocaleWeeks:r=!1}={}){if(!this.isValid)return this;let n={},i=_t.normalizeUnit(e);switch(i){case"years":n.month=1;case"quarters":case"months":n.day=1;case"weeks":case"days":n.hour=0;case"hours":n.minute=0;case"minutes":n.second=0;case"seconds":n.millisecond=0;break}if(i==="weeks")if(r){let s=this.loc.getStartOfWeek(),{weekday:o}=this;o<s&&(n.weekNumber=this.weekNumber-1),n.weekday=s}else n.weekday=1;if(i==="quarters"){let s=Math.ceil(this.month/3);n.month=(s-1)*3+1}return this.set(n)}endOf(e,r){return this.isValid?this.plus({[e]:1}).startOf(e,r).minus(1):this}toFormat(e,r={}){return this.isValid?qr.create(this.loc.redefaultToEN(r)).formatDateTimeFromString(this,e):Mk}toLocaleString(e=yb,r={}){return this.isValid?qr.create(this.loc.clone(r),e).formatDateTime(this):Mk}toLocaleParts(e={}){return this.isValid?qr.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e="extended",suppressSeconds:r=!1,suppressMilliseconds:n=!1,includeOffset:i=!0,extendedZone:s=!1,precision:o="milliseconds"}={}){if(!this.isValid)return null;o=mb(o);let a=e==="extended",c=qk(this,a,o);return fb.indexOf(o)>=3&&(c+="T"),c+=A5(this,a,r,n,i,s,o),c}toISODate({format:e="extended",precision:r="day"}={}){return this.isValid?qk(this,e==="extended",mb(r)):null}toISOWeekDate(){return db(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:r=!1,includeOffset:n=!0,includePrefix:i=!1,extendedZone:s=!1,format:o="extended",precision:a="milliseconds"}={}){return this.isValid?(a=mb(a),(i&&fb.indexOf(a)>=3?"T":"")+A5(this,o==="extended",r,e,n,s,a)):null}toRFC2822(){return db(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return db(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?qk(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:r=!1,includeOffsetSpace:n=!0}={}){let i="HH:mm:ss.SSS";return(r||e)&&(n&&(i+=" "),r?i+="z":e&&(i+="ZZ")),db(this,i,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():Mk}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};let r={...this.c};return e.includeConfig&&(r.outputCalendar=this.outputCalendar,r.numberingSystem=this.loc.numberingSystem,r.locale=this.loc.locale),r}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,r="milliseconds",n={}){if(!this.isValid||!e.isValid)return _t.invalid("created by diffing an invalid DateTime");let i={locale:this.locale,numberingSystem:this.numberingSystem,...n},s=STe(r).map(_t.normalizeUnit),o=e.valueOf()>this.valueOf(),a=o?this:e,c=o?e:this,l=_ke(a,c,s,i);return o?l.negate():l}diffNow(e="milliseconds",r={}){return this.diff(t.now(),e,r)}until(e){return this.isValid?la.fromDateTimes(this,e):this}hasSame(e,r,n){if(!this.isValid)return!1;let i=e.valueOf(),s=this.setZone(e.zone,{keepLocalTime:!0});return s.startOf(r,n)<=i&&i<=s.endOf(r,n)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;let r=e.base||t.fromObject({},{zone:this.zone}),n=e.padding?this<r?-e.padding:e.padding:0,i=["years","months","days","hours","minutes","seconds"],s=e.unit;return Array.isArray(e.unit)&&(i=e.unit,s=void 0),C5(r,this.plus(n),{...e,numeric:"always",units:i,unit:s})}toRelativeCalendar(e={}){return this.isValid?C5(e.base||t.fromObject({},{zone:this.zone}),this,{...e,numeric:"auto",units:["years","months","days"],calendary:!0}):null}static min(...e){if(!e.every(t.isDateTime))throw new jt("min requires all arguments be DateTimes");return y5(e,r=>r.valueOf(),Math.min)}static max(...e){if(!e.every(t.isDateTime))throw new jt("max requires all arguments be DateTimes");return y5(e,r=>r.valueOf(),Math.max)}static fromFormatExplain(e,r,n={}){let{locale:i=null,numberingSystem:s=null}=n,o=$e.fromOpts({locale:i,numberingSystem:s,defaultToEN:!0});return AB(o,e,r)}static fromStringExplain(e,r,n={}){return t.fromFormatExplain(e,r,n)}static buildFormatParser(e,r={}){let{locale:n=null,numberingSystem:i=null}=r,s=$e.fromOpts({locale:n,numberingSystem:i,defaultToEN:!0});return new Sb(s,e)}static fromFormatParser(e,r,n={}){if(Q(e)||Q(r))throw new jt("fromFormatParser requires an input string and a format parser");let{locale:i=null,numberingSystem:s=null}=n,o=$e.fromOpts({locale:i,numberingSystem:s,defaultToEN:!0});if(!o.equals(r.locale))throw new jt(`fromFormatParser called with a locale of ${o}, but the format parser was created for ${r.locale}`);let{result:a,zone:c,specificOffset:l,invalidReason:u}=r.explainFromTokens(e);return u?t.invalid(u):pl(a,c,n,`format ${r.format}`,e,l)}static get DATE_SHORT(){return yb}static get DATE_MED(){return P5}static get DATE_MED_WITH_WEEKDAY(){return X1e}static get DATE_FULL(){return K5}static get DATE_HUGE(){return D5}static get TIME_SIMPLE(){return M5}static get TIME_WITH_SECONDS(){return N5}static get TIME_WITH_SHORT_OFFSET(){return L5}static get TIME_WITH_LONG_OFFSET(){return q5}static get TIME_24_SIMPLE(){return F5}static get TIME_24_WITH_SECONDS(){return $5}static get TIME_24_WITH_SHORT_OFFSET(){return U5}static get TIME_24_WITH_LONG_OFFSET(){return J5}static get DATETIME_SHORT(){return z5}static get DATETIME_SHORT_WITH_SECONDS(){return G5}static get DATETIME_MED(){return B5}static get DATETIME_MED_WITH_SECONDS(){return H5}static get DATETIME_MED_WITH_WEEKDAY(){return Z1e}static get DATETIME_FULL(){return V5}static get DATETIME_FULL_WITH_SECONDS(){return W5}static get DATETIME_HUGE(){return Y5}static get DATETIME_HUGE_WITH_SECONDS(){return Q5}};function Ld(t){if(et.isDateTime(t))return t;if(t&&t.valueOf&&Zs(t.valueOf()))return et.fromJSDate(t);if(t&&typeof t=="object")return et.fromObject(t);throw new jt(`Unknown datetime argument: ${t}, of type ${typeof t}`)}var Jke="3.7.2";Jr.DateTime=et;Jr.Duration=_t;Jr.FixedOffsetZone=Ur;Jr.IANAZone=Zi;Jr.Info=ca;Jr.Interval=la;Jr.InvalidZone=gb;Jr.Settings=Ye;Jr.SystemZone=Jd;Jr.VERSION=Jke;Jr.Zone=eo});var KB=h((GUe,PB)=>{"use strict";var ua=jB();ne.prototype.addYear=function(){this._date=this._date.plus({years:1})};ne.prototype.addMonth=function(){this._date=this._date.plus({months:1}).startOf("month")};ne.prototype.addDay=function(){this._date=this._date.plus({days:1}).startOf("day")};ne.prototype.addHour=function(){var t=this._date;this._date=this._date.plus({hours:1}).startOf("hour"),this._date<=t&&(this._date=this._date.plus({hours:1}))};ne.prototype.addMinute=function(){var t=this._date;this._date=this._date.plus({minutes:1}).startOf("minute"),this._date<t&&(this._date=this._date.plus({hours:1}))};ne.prototype.addSecond=function(){var t=this._date;this._date=this._date.plus({seconds:1}).startOf("second"),this._date<t&&(this._date=this._date.plus({hours:1}))};ne.prototype.subtractYear=function(){this._date=this._date.minus({years:1})};ne.prototype.subtractMonth=function(){this._date=this._date.minus({months:1}).endOf("month").startOf("second")};ne.prototype.subtractDay=function(){this._date=this._date.minus({days:1}).endOf("day").startOf("second")};ne.prototype.subtractHour=function(){var t=this._date;this._date=this._date.minus({hours:1}).endOf("hour").startOf("second"),this._date>=t&&(this._date=this._date.minus({hours:1}))};ne.prototype.subtractMinute=function(){var t=this._date;this._date=this._date.minus({minutes:1}).endOf("minute").startOf("second"),this._date>t&&(this._date=this._date.minus({hours:1}))};ne.prototype.subtractSecond=function(){var t=this._date;this._date=this._date.minus({seconds:1}).startOf("second"),this._date>t&&(this._date=this._date.minus({hours:1}))};ne.prototype.getDate=function(){return this._date.day};ne.prototype.getFullYear=function(){return this._date.year};ne.prototype.getDay=function(){var t=this._date.weekday;return t==7?0:t};ne.prototype.getMonth=function(){return this._date.month-1};ne.prototype.getHours=function(){return this._date.hour};ne.prototype.getMinutes=function(){return this._date.minute};ne.prototype.getSeconds=function(){return this._date.second};ne.prototype.getMilliseconds=function(){return this._date.millisecond};ne.prototype.getTime=function(){return this._date.valueOf()};ne.prototype.getUTCDate=function(){return this._getUTC().day};ne.prototype.getUTCFullYear=function(){return this._getUTC().year};ne.prototype.getUTCDay=function(){var t=this._getUTC().weekday;return t==7?0:t};ne.prototype.getUTCMonth=function(){return this._getUTC().month-1};ne.prototype.getUTCHours=function(){return this._getUTC().hour};ne.prototype.getUTCMinutes=function(){return this._getUTC().minute};ne.prototype.getUTCSeconds=function(){return this._getUTC().second};ne.prototype.toISOString=function(){return this._date.toUTC().toISO()};ne.prototype.toJSON=function(){return this._date.toJSON()};ne.prototype.setDate=function(t){this._date=this._date.set({day:t})};ne.prototype.setFullYear=function(t){this._date=this._date.set({year:t})};ne.prototype.setDay=function(t){this._date=this._date.set({weekday:t})};ne.prototype.setMonth=function(t){this._date=this._date.set({month:t+1})};ne.prototype.setHours=function(t){this._date=this._date.set({hour:t})};ne.prototype.setMinutes=function(t){this._date=this._date.set({minute:t})};ne.prototype.setSeconds=function(t){this._date=this._date.set({second:t})};ne.prototype.setMilliseconds=function(t){this._date=this._date.set({millisecond:t})};ne.prototype._getUTC=function(){return this._date.toUTC()};ne.prototype.toString=function(){return this.toDate().toString()};ne.prototype.toDate=function(){return this._date.toJSDate()};ne.prototype.isLastDayOfMonth=function(){var t=this._date.plus({days:1}).startOf("day");return this._date.month!==t.month};ne.prototype.isLastWeekdayOfMonth=function(){var t=this._date.plus({days:7}).startOf("day");return this._date.month!==t.month};function ne(t,e){var r={zone:e};if(t?t instanceof ne?this._date=t._date:t instanceof Date?this._date=ua.DateTime.fromJSDate(t,r):typeof t=="number"?this._date=ua.DateTime.fromMillis(t,r):typeof t=="string"&&(this._date=ua.DateTime.fromISO(t,r),this._date.isValid||(this._date=ua.DateTime.fromRFC2822(t,r)),this._date.isValid||(this._date=ua.DateTime.fromSQL(t,r)),this._date.isValid||(this._date=ua.DateTime.fromFormat(t,"EEE, d MMM yyyy HH:mm:ss",r))):this._date=ua.DateTime.local(),!this._date||!this._date.isValid)throw new Error("CronDate: unhandled timestamp: "+JSON.stringify(t));e&&e!==this._date.zoneName&&(this._date=this._date.setZone(e))}PB.exports=ne});var NB=h((BUe,MB)=>{"use strict";function da(t){return{start:t,count:1}}function DB(t,e){t.end=e,t.step=e-t.start,t.count=2}function dA(t,e,r){e&&(e.count===2?(t.push(da(e.start)),t.push(da(e.end))):t.push(e)),r&&t.push(r)}function zke(t){for(var e=[],r=void 0,n=0;n<t.length;n++){var i=t[n];typeof i!="number"?(dA(e,r,da(i)),r=void 0):r?r.count===1?DB(r,i):r.step===i-r.end?(r.count++,r.end=i):r.count===2?(e.push(da(r.start)),r=da(r.end),DB(r,i)):(dA(e,r),r=da(i)):r=da(i)}return dA(e,r),e}MB.exports=zke});var qB=h((HUe,LB)=>{"use strict";var Gke=NB();function Bke(t,e,r){var n=Gke(t);if(n.length===1){var i=n[0],s=i.step;if(s===1&&i.start===e&&i.end===r)return"*";if(s!==1&&i.start===e&&i.end===r-s+1)return"*/"+s}for(var o=[],a=0,c=n.length;a<c;++a){var l=n[a];if(l.count===1){o.push(l.start);continue}var s=l.step;if(l.step===1){o.push(l.start+"-"+l.end);continue}var u=l.start==0?l.count-1:l.count;l.step*u>l.end?o=o.concat(Array.from({length:l.end-l.start+1}).map(function(p,f){var m=l.start+f;return(m-l.start)%l.step===0?m:null}).filter(function(p){return p!=null})):l.end===r-l.step+1?o.push(l.start+"/"+l.step):o.push(l.start+"-"+l.end+"/"+l.step)}return o.join(",")}LB.exports=Bke});var UB=h((VUe,$B)=>{"use strict";var pa=KB(),Hke=qB(),FB=1e4;function L(t,e){this._options=e,this._utc=e.utc||!1,this._tz=this._utc?"UTC":e.tz,this._currentDate=new pa(e.currentDate,this._tz),this._startDate=e.startDate?new pa(e.startDate,this._tz):null,this._endDate=e.endDate?new pa(e.endDate,this._tz):null,this._isIterator=e.iterator||!1,this._hasIterated=!1,this._nthDayOfWeek=e.nthDayOfWeek||0,this.fields=L._freezeFields(t)}L.map=["second","minute","hour","dayOfMonth","month","dayOfWeek"];L.predefined={"@yearly":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@hourly":"0 * * * *"};L.constraints=[{min:0,max:59,chars:[]},{min:0,max:59,chars:[]},{min:0,max:23,chars:[]},{min:1,max:31,chars:["L"]},{min:1,max:12,chars:[]},{min:0,max:7,chars:["L"]}];L.daysInMonth=[31,29,31,30,31,30,31,31,30,31,30,31];L.aliases={month:{jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12},dayOfWeek:{sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}};L.parseDefaults=["0","*","*","*","*","*"];L.standardValidCharacters=/^[,*\d/-]+$/;L.dayOfWeekValidCharacters=/^[?,*\dL#/-]+$/;L.dayOfMonthValidCharacters=/^[?,*\dL/-]+$/;L.validCharacters={second:L.standardValidCharacters,minute:L.standardValidCharacters,hour:L.standardValidCharacters,dayOfMonth:L.dayOfMonthValidCharacters,month:L.standardValidCharacters,dayOfWeek:L.dayOfWeekValidCharacters};L._isValidConstraintChar=function(e,r){return typeof r!="string"?!1:e.chars.some(function(n){return r.indexOf(n)>-1})};L._parseField=function(e,r,n){switch(e){case"month":case"dayOfWeek":var i=L.aliases[e];r=r.replace(/[a-z]{3}/gi,function(c){if(c=c.toLowerCase(),typeof i[c]<"u")return i[c];throw new Error('Validation error, cannot resolve alias "'+c+'"')});break}if(!L.validCharacters[e].test(r))throw new Error("Invalid characters, got value: "+r);r.indexOf("*")!==-1?r=r.replace(/\*/g,n.min+"-"+n.max):r.indexOf("?")!==-1&&(r=r.replace(/\?/g,n.min+"-"+n.max));function s(c){var l=[];function u(m){if(m instanceof Array)for(var y=0,b=m.length;y<b;y++){var v=m[y];if(L._isValidConstraintChar(n,v)){l.push(v);continue}if(typeof v!="number"||Number.isNaN(v)||v<n.min||v>n.max)throw new Error("Constraint error, got value "+v+" expected range "+n.min+"-"+n.max);l.push(v)}else{if(L._isValidConstraintChar(n,m)){l.push(m);return}var E=+m;if(Number.isNaN(E)||E<n.min||E>n.max)throw new Error("Constraint error, got value "+m+" expected range "+n.min+"-"+n.max);e==="dayOfWeek"&&(E=E%7),l.push(E)}}var d=c.split(",");if(!d.every(function(m){return m.length>0}))throw new Error("Invalid list value format");if(d.length>1)for(var p=0,f=d.length;p<f;p++)u(o(d[p]));else u(o(c));return l.sort(L._sortCompareFn),l}function o(c){var l=1,u=c.split("/");if(u.length>2)throw new Error("Invalid repeat: "+c);return u.length>1?(u[0]==+u[0]&&(u=[u[0]+"-"+n.max,u[1]]),a(u[0],u[u.length-1])):a(c,l)}function a(c,l){var u=[],d=c.split("-");if(d.length>1){if(d.length<2)return+c;if(!d[0].length){if(!d[1].length)throw new Error("Invalid range: "+c);return+c}var p=+d[0],f=+d[1];if(Number.isNaN(p)||Number.isNaN(f)||p<n.min||f>n.max)throw new Error("Constraint error, got range "+p+"-"+f+" expected range "+n.min+"-"+n.max);if(p>f)throw new Error("Invalid range: "+c);var m=+l;if(Number.isNaN(m)||m<=0)throw new Error("Constraint error, cannot repeat at every "+m+" time.");e==="dayOfWeek"&&f%7===0&&u.push(0);for(var y=p,b=f;y<=b;y++){var v=u.indexOf(y)!==-1;!v&&m>0&&m%l===0?(m=1,u.push(y)):m++}return u}return Number.isNaN(+c)?c:+c}return s(r)};L._sortCompareFn=function(t,e){var r=typeof t=="number",n=typeof e=="number";return r&&n?t-e:!r&&n?1:r&&!n?-1:t.localeCompare(e)};L._handleMaxDaysInMonth=function(t){if(t.month.length===1){var e=L.daysInMonth[t.month[0]-1];if(t.dayOfMonth[0]>e)throw new Error("Invalid explicit day of month definition");return t.dayOfMonth.filter(function(r){return r==="L"?!0:r<=e}).sort(L._sortCompareFn)}};L._freezeFields=function(t){for(var e=0,r=L.map.length;e<r;++e){var n=L.map[e],i=t[n];t[n]=Object.freeze(i)}return Object.freeze(t)};L.prototype._applyTimezoneShift=function(t,e,r){if(r==="Month"||r==="Day"){var n=t.getTime();t[e+r]();var i=t.getTime();n===i&&(t.getMinutes()===0&&t.getSeconds()===0?t.addHour():t.getMinutes()===59&&t.getSeconds()===59&&t.subtractHour())}else{var s=t.getHours();t[e+r]();var o=t.getHours(),a=o-s;a===2?this.fields.hour.length!==24&&(this._dstStart=o):a===0&&t.getMinutes()===0&&t.getSeconds()===0&&this.fields.hour.length!==24&&(this._dstEnd=o)}};L.prototype._findSchedule=function(e){function r(v,E){for(var S=0,k=E.length;S<k;S++)if(E[S]>=v)return E[S]===v;return E[0]===v}function n(v,E){if(E<6){if(v.getDate()<8&&E===1)return!0;var S=v.getDate()%7?1:0,k=v.getDate()-v.getDate()%7,_=Math.floor(k/7)+S;return _===E}return!1}function i(v){return v.length>0&&v.some(function(E){return typeof E=="string"&&E.indexOf("L")>=0})}e=e||!1;var s=e?"subtract":"add",o=new pa(this._currentDate,this._tz),a=this._startDate,c=this._endDate,l=o.getTime(),u=0;function d(v){return v.some(function(E){if(!i([E]))return!1;var S=Number.parseInt(E[0])%7;if(Number.isNaN(S))throw new Error("Invalid last weekday of the month expression: "+E);return o.getDay()===S&&o.isLastWeekdayOfMonth()})}for(;u<FB;){if(u++,e){if(a&&o.getTime()-a.getTime()<0)throw new Error("Out of the timespan range")}else if(c&&c.getTime()-o.getTime()<0)throw new Error("Out of the timespan range");var p=r(o.getDate(),this.fields.dayOfMonth);i(this.fields.dayOfMonth)&&(p=p||o.isLastDayOfMonth());var f=r(o.getDay(),this.fields.dayOfWeek);i(this.fields.dayOfWeek)&&(f=f||d(this.fields.dayOfWeek));var m=this.fields.dayOfMonth.length>=L.daysInMonth[o.getMonth()],y=this.fields.dayOfWeek.length===L.constraints[5].max-L.constraints[5].min+1,b=o.getHours();if(!p&&(!f||y)){this._applyTimezoneShift(o,s,"Day");continue}if(!m&&y&&!p){this._applyTimezoneShift(o,s,"Day");continue}if(m&&!y&&!f){this._applyTimezoneShift(o,s,"Day");continue}if(this._nthDayOfWeek>0&&!n(o,this._nthDayOfWeek)){this._applyTimezoneShift(o,s,"Day");continue}if(!r(o.getMonth()+1,this.fields.month)){this._applyTimezoneShift(o,s,"Month");continue}if(r(b,this.fields.hour)){if(this._dstEnd===b&&!e){this._dstEnd=null,this._applyTimezoneShift(o,"add","Hour");continue}}else if(this._dstStart!==b){this._dstStart=null,this._applyTimezoneShift(o,s,"Hour");continue}else if(!r(b-1,this.fields.hour)){o[s+"Hour"]();continue}if(!r(o.getMinutes(),this.fields.minute)){this._applyTimezoneShift(o,s,"Minute");continue}if(!r(o.getSeconds(),this.fields.second)){this._applyTimezoneShift(o,s,"Second");continue}if(l===o.getTime()){s==="add"||o.getMilliseconds()===0?this._applyTimezoneShift(o,s,"Second"):o.setMilliseconds(0);continue}break}if(u>=FB)throw new Error("Invalid expression, loop limit exceeded");return this._currentDate=new pa(o,this._tz),this._hasIterated=!0,o};L.prototype.next=function(){var e=this._findSchedule();return this._isIterator?{value:e,done:!this.hasNext()}:e};L.prototype.prev=function(){var e=this._findSchedule(!0);return this._isIterator?{value:e,done:!this.hasPrev()}:e};L.prototype.hasNext=function(){var t=this._currentDate,e=this._hasIterated;try{return this._findSchedule(),!0}catch{return!1}finally{this._currentDate=t,this._hasIterated=e}};L.prototype.hasPrev=function(){var t=this._currentDate,e=this._hasIterated;try{return this._findSchedule(!0),!0}catch{return!1}finally{this._currentDate=t,this._hasIterated=e}};L.prototype.iterate=function(e,r){var n=[];if(e>=0)for(var i=0,s=e;i<s;i++)try{var o=this.next();n.push(o),r&&r(o,i)}catch{break}else for(var i=0,s=e;i>s;i--)try{var o=this.prev();n.push(o),r&&r(o,i)}catch{break}return n};L.prototype.reset=function(e){this._currentDate=new pa(e||this._options.currentDate)};L.prototype.stringify=function(e){for(var r=[],n=e?0:1,i=L.map.length;n<i;++n){var s=L.map[n],o=this.fields[s],a=L.constraints[n];s==="dayOfMonth"&&this.fields.month.length===1?a={min:1,max:L.daysInMonth[this.fields.month[0]-1]}:s==="dayOfWeek"&&(a={min:0,max:6},o=o[o.length-1]===7?o.slice(0,-1):o),r.push(Hke(o,a.min,a.max))}return r.join(" ")};L.parse=function(e,r){var n=this;typeof r=="function"&&(r={});function i(s,o){o||(o={}),typeof o.currentDate>"u"&&(o.currentDate=new pa(void 0,n._tz)),L.predefined[s]&&(s=L.predefined[s]);var a=[],c=(s+"").trim().split(/\s+/);if(c.length>6)throw new Error("Invalid cron expression");for(var l=L.map.length-c.length,u=0,d=L.map.length;u<d;++u){var p=L.map[u],f=c[c.length>d?u:u-l];if(u<l||!f)a.push(L._parseField(p,L.parseDefaults[u],L.constraints[u]));else{var m=p==="dayOfWeek"?E(f):f;a.push(L._parseField(p,m,L.constraints[u]))}}for(var y={},u=0,d=L.map.length;u<d;u++){var b=L.map[u];y[b]=a[u]}var v=L._handleMaxDaysInMonth(y);return y.dayOfMonth=v||y.dayOfMonth,new L(y,o);function E(S){var k=S.split("#");if(k.length>1){var _=+k[k.length-1];if(/,/.test(S))throw new Error("Constraint error, invalid dayOfWeek `#` and `,` special characters are incompatible");if(/\//.test(S))throw new Error("Constraint error, invalid dayOfWeek `#` and `/` special characters are incompatible");if(/-/.test(S))throw new Error("Constraint error, invalid dayOfWeek `#` and `-` special characters are incompatible");if(k.length>2||Number.isNaN(_)||_<1||_>5)throw new Error("Constraint error, invalid dayOfWeek occurrence number (#)");return o.nthDayOfWeek=_,k[0]}return S}}return i(e,r)};L.fieldsToExpression=function(e,r){function n(p,f,m){if(!f)throw new Error("Validation error, Field "+p+" is missing");if(f.length===0)throw new Error("Validation error, Field "+p+" contains no values");for(var y=0,b=f.length;y<b;y++){var v=f[y];if(!L._isValidConstraintChar(m,v)&&(typeof v!="number"||Number.isNaN(v)||v<m.min||v>m.max))throw new Error("Constraint error, got value "+v+" expected range "+m.min+"-"+m.max)}}for(var i={},s=0,o=L.map.length;s<o;++s){var a=L.map[s],c=e[a];n(a,c,L.constraints[s]);for(var l=[],u=-1;++u<c.length;)l[u]=c[u];if(c=l.sort(L._sortCompareFn).filter(function(p,f,m){return!f||p!==m[f-1]}),c.length!==l.length)throw new Error("Validation error, Field "+a+" contains duplicate values");i[a]=c}var d=L._handleMaxDaysInMonth(i);return i.dayOfMonth=d||i.dayOfMonth,new L(i,r||{})};$B.exports=L});var pA=h((WUe,JB)=>{"use strict";var Tb=UB();function to(){}to._parseEntry=function(e){var r=e.split(" ");if(r.length===6)return{interval:Tb.parse(e)};if(r.length>6)return{interval:Tb.parse(r.slice(0,6).join(" ")),command:r.slice(6,r.length)};throw new Error("Invalid entry: "+e)};to.parseExpression=function(e,r){return Tb.parse(e,r)};to.fieldsToExpression=function(e,r){return Tb.fieldsToExpression(e,r)};to.parseString=function(e){for(var r=e.split(`
|
||
`),n={variables:{},expressions:[],errors:{}},i=0,s=r.length;i<s;i++){var o=r[i],a=null,c=o.trim();if(c.length>0){if(c.match(/^#/))continue;if(a=c.match(/^(.*)=(.*)$/))n.variables[a[1]]=a[2];else{var l=null;try{l=to._parseEntry("0 "+c),n.expressions.push(l.interval)}catch(u){n.errors[c]=u}}}}return n};to.parseFile=function(e,r){require("fs").readFile(e,function(n,i){if(n){r(n);return}return r(null,to.parseString(i.toString()))})};JB.exports=to});var ro=h(kb=>{"use strict";Object.defineProperty(kb,"__esModule",{value:!0});kb.QueueBase=void 0;var Vke=require("events"),El=Dr(),Wke=Id(),Yke=Md(),Qke=Qc(),Xke=jy(),fA=class extends Vke.EventEmitter{constructor(e,r={connection:{}},n=Yke.RedisConnection,i=!1){if(super(),this.name=e,this.opts=r,this.closed=!1,this.hasBlockingConnection=!1,this.hasBlockingConnection=i,this.opts=Object.assign({prefix:"bull"},r),!e)throw new Error("Queue name must be provided");if(e.includes(":"))throw new Error("Queue name cannot contain :");this.connection=new n(r.connection,{shared:(0,El.isRedisInstance)(r.connection),blocking:i,skipVersionCheck:r.skipVersionCheck,skipWaitingForReady:r.skipWaitingForReady}),(0,El.forwardConnectionError)(this,this.connection),this.connection.on("close",()=>{this.closing||this.emit("ioredis:close")});let s=new Xke.QueueKeys(r.prefix);this.qualifiedName=s.getQueueQualifiedName(e),this.keys=s.getKeys(e),this.toKey=o=>s.toKey(e,o),this.createScripts()}get client(){return this.connection.client}createScripts(){this.scripts=(0,Wke.createScripts)(this)}get redisVersion(){return this.connection.redisVersion}get databaseType(){return this.connection.databaseType}get Job(){return Qke.Job}emit(e,...r){try{return super.emit(e,...r)}catch(n){try{return super.emit("error",n)}catch(i){return console.error(i),!1}}}waitUntilReady(){return this.client}base64Name(){return Buffer.from(this.name).toString("base64")}clientName(e=""){let r=this.base64Name();return`${this.opts.prefix}:${r}${e}`}async close(){this.closing||(this.closing=this.connection.close()),await this.closing,this.closed=!0}disconnect(){return this.connection.disconnect()}async checkConnectionError(e,r=El.DELAY_TIME_5){try{return await e()}catch(n){if((0,El.isNotConnectionError)(n)&&this.emit("error",n),!this.closing&&r)await(0,El.delay)(r);else return}}trace(e,r,n,i,s){return(0,El.trace)(this.opts.telemetry,e,this.name,r,n,i,s)}};kb.QueueBase=fA});var Rb=h(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});fa.defaultRepeatStrategy=fa.JobScheduler=void 0;var Zke=(nr(),Pt(rr)),eAe=pA(),Ab=Qc(),tAe=ro(),Vd=_r(),rAe=Dr(),mA=class extends tAe.QueueBase{constructor(e,r,n){super(e,r,n),this.repeatStrategy=r.settings&&r.settings.repeatStrategy||fa.defaultRepeatStrategy}async upsertJobScheduler(e,r,n,i,s,{override:o,producerId:a}){let{every:c,limit:l,pattern:u,offset:d}=r;if(u&&c)throw new Error("Both .pattern and .every options are defined for this repeatable job");if(!u&&!c)throw new Error("Either .pattern or .every options must be defined for this repeatable job");if(r.immediately&&r.startDate)throw new Error("Both .immediately and .startDate options are defined for this repeatable job");r.immediately&&r.every&&console.warn("Using option immediately with every does not affect the job's schedule. Job will run immediately anyway.");let p=r.count?r.count+1:1;if(typeof r.limit<"u"&&p>r.limit)return;let f=Date.now(),{endDate:m}=r;if(m&&f>new Date(m).getTime())return;let y=s.prevMillis||0;f=y<f?f:y;let{immediately:b}=r,v=Zke.__rest(r,["immediately"]),E,S=c&&d?d:null;if(u&&(E=await this.repeatStrategy(f,r,n),E<f&&(E=f)),E||c)return this.trace(Vd.SpanKind.PRODUCER,"add",`${this.name}.${n}`,async(k,_)=>{var O,N;let ee=s.telemetry;if(_){let U=(O=s.telemetry)===null||O===void 0?void 0:O.omitContext,te=((N=s.telemetry)===null||N===void 0?void 0:N.metadata)||!U&&_;(te||U)&&(ee={metadata:te,omitContext:U})}let q=this.getNextJobOpts(E,e,Object.assign(Object.assign({},s),{repeat:v,telemetry:ee}),p,S);if(o){E<f&&(E=f);let[U,te]=await this.scripts.addJobScheduler(e,E,JSON.stringify(typeof i>"u"?{}:i),Ab.Job.optsAsJSON(s),{name:n,startDate:r.startDate?new Date(r.startDate).getTime():void 0,endDate:m?new Date(m).getTime():void 0,tz:r.tz,pattern:u,every:c,limit:l,offset:S},Ab.Job.optsAsJSON(q),a),Ge=typeof te=="string"?parseInt(te,10):te,T=new this.Job(this,n,i,Object.assign(Object.assign({},q),{delay:Ge}),U);return T.id=U,k?.setAttributes({[Vd.TelemetryAttributes.JobSchedulerId]:e,[Vd.TelemetryAttributes.JobId]:T.id}),T}else{let U=await this.scripts.updateJobSchedulerNextMillis(e,E,JSON.stringify(typeof i>"u"?{}:i),Ab.Job.optsAsJSON(q),a);if(U){let te=new this.Job(this,n,i,q,U);return te.id=U,k?.setAttributes({[Vd.TelemetryAttributes.JobSchedulerId]:e,[Vd.TelemetryAttributes.JobId]:te.id}),te}}})}getNextJobOpts(e,r,n,i,s){var o,a;let c=this.getSchedulerNextJobId({jobSchedulerId:r,nextMillis:e}),l=Date.now(),u=e+s-l,d=Object.assign(Object.assign({},n),{jobId:c,delay:u<0?0:u,timestamp:l,prevMillis:e,repeatJobKey:r});return d.repeat=Object.assign(Object.assign({},n.repeat),{offset:s,count:i,startDate:!((o=n.repeat)===null||o===void 0)&&o.startDate?new Date(n.repeat.startDate).getTime():void 0,endDate:!((a=n.repeat)===null||a===void 0)&&a.endDate?new Date(n.repeat.endDate).getTime():void 0}),d}async removeJobScheduler(e){return this.scripts.removeJobScheduler(e)}async getSchedulerData(e,r,n){let i=await e.hgetall(this.toKey("repeat:"+r));return this.transformSchedulerData(r,i,n)}transformSchedulerData(e,r,n){if(r&&Object.keys(r).length>0){let i={key:e,name:r.name,next:n};return r.ic&&(i.iterationCount=parseInt(r.ic)),r.limit&&(i.limit=parseInt(r.limit)),r.startDate&&(i.startDate=parseInt(r.startDate)),r.endDate&&(i.endDate=parseInt(r.endDate)),r.tz&&(i.tz=r.tz),r.pattern&&(i.pattern=r.pattern),r.every&&(i.every=parseInt(r.every)),r.offset&&(i.offset=parseInt(r.offset)),(r.data||r.opts)&&(i.template=this.getTemplateFromJSON(r.data,r.opts)),i}if(e.includes(":"))return this.keyToData(e,n)}keyToData(e,r){let n=e.split(":"),i=n.slice(4).join(":")||null;return{key:e,name:n[0],id:n[1]||null,endDate:parseInt(n[2])||null,tz:n[3]||null,pattern:i,next:r}}async isJobScheduler(e){return await(await this.client).hexists(`${this.keys.repeat}:${e}`,"ic")===1}async getScheduler(e){let[r,n]=await this.scripts.getJobScheduler(e);return this.transformSchedulerData(e,r?(0,rAe.array2obj)(r):null,n?parseInt(n):null)}getTemplateFromJSON(e,r){let n={};return e&&(n.data=JSON.parse(e)),r&&(n.opts=Ab.Job.optsFromJSON(r)),n}async getJobSchedulers(e=0,r=-1,n=!1){let i=await this.client,s=this.keys.repeat,o=n?await i.zrange(s,e,r,{WITHSCORES:!0}):await i.zrevrange(s,e,r,{WITHSCORES:!0}),a=[];for(let c=0;c<o.length;c+=2)a.push(this.getSchedulerData(i,o[c],parseInt(o[c+1])));return Promise.all(a)}async getSchedulersCount(){let e=this.keys.repeat;return(await this.client).zcard(e)}getSchedulerNextJobId({nextMillis:e,jobSchedulerId:r}){return`repeat:${r}:${e}`}};fa.JobScheduler=mA;var nAe=(t,e)=>{let{pattern:r}=e,n=new Date(t),i=e.startDate&&new Date(e.startDate),s=i>n?i:n,o=(0,eAe.parseExpression)(r,Object.assign(Object.assign({},e),{currentDate:s}));try{return e.immediately?new Date().getTime():o.next().getTime()}catch{}};fa.defaultRepeatStrategy=nAe});var yA=h(Cb=>{"use strict";Object.defineProperty(Cb,"__esModule",{value:!0});Cb.LockManager=void 0;var iAe=Gh(),Ob=_r(),hA=class{constructor(e,r){this.worker=e,this.opts=r,this.trackedJobs=new Map,this.closed=!1}start(){this.closed||this.opts.lockRenewTime>0&&this.startLockExtenderTimer()}async extendLocks(e){await this.worker.trace(Ob.SpanKind.INTERNAL,"extendLocks",this.worker.name,async r=>{r?.setAttributes({[Ob.TelemetryAttributes.WorkerId]:this.opts.workerId,[Ob.TelemetryAttributes.WorkerName]:this.opts.workerName,[Ob.TelemetryAttributes.WorkerJobsToExtendLocks]:e});try{let n=e.map(o=>{var a;return((a=this.trackedJobs.get(o))===null||a===void 0?void 0:a.token)||""}),i=await this.worker.extendJobLocks(e,n,this.opts.lockDuration);if(i.length>0){this.worker.emit("lockRenewalFailed",i);for(let o of i)this.worker.emit("error",new Error(`could not renew lock for job ${o}`))}let s=e.filter(o=>!i.includes(o));s.length>0&&this.worker.emit("locksRenewed",{count:s.length,jobIds:s})}catch(n){this.worker.emit("error",n)}})}startLockExtenderTimer(){clearTimeout(this.lockRenewalTimer),this.closed||(this.lockRenewalTimer=setTimeout(async()=>{let e=Date.now(),r=[];for(let n of this.trackedJobs.keys()){let i=this.trackedJobs.get(n),{ts:s,token:o,abortController:a}=i;if(!s){this.trackedJobs.set(n,{token:o,ts:e,abortController:a});continue}s+this.opts.lockRenewTime/2<e&&(this.trackedJobs.set(n,{token:o,ts:e,abortController:a}),r.push(n))}r.length&&await this.extendLocks(r),this.startLockExtenderTimer()},this.opts.lockRenewTime/2))}async close(){this.closed||(this.closed=!0,this.lockRenewalTimer&&(clearTimeout(this.lockRenewalTimer),this.lockRenewalTimer=void 0),this.trackedJobs.clear())}trackJob(e,r,n,i=!1){let s=i?new iAe.AbortController:void 0;return!this.closed&&e&&this.trackedJobs.set(e,{token:r,ts:n,abortController:s}),s}untrackJob(e){this.trackedJobs.delete(e)}getActiveJobCount(){return this.trackedJobs.size}isRunning(){return!this.closed&&this.lockRenewalTimer!==void 0}cancelJob(e,r){let n=this.trackedJobs.get(e);return n?.abortController?(n.abortController.abort(r),!0):!1}cancelAllJobs(e){for(let r of this.trackedJobs.values())r.abortController&&r.abortController.abort(e)}getTrackedJobIds(){return Array.from(this.trackedJobs.keys())}};Cb.LockManager=hA});var BB=h(Pb=>{"use strict";Object.defineProperty(Pb,"__esModule",{value:!0});Pb.QueueEvents=void 0;var zB=(nr(),Pt(rr)),jb=Dr(),sAe=ro(),GB=Kd(),gA=class extends sAe.QueueBase{constructor(e,r={connection:{}},n){var{connection:i,autorun:s=!0}=r,o=zB.__rest(r,["connection","autorun"]);super(e,Object.assign(Object.assign({},o),{connection:(0,jb.isRedisInstance)(i)?((0,GB.isIRedisClient)(i)?i:(0,GB.createIORedisClient)(i)).duplicate():i}),n,!0),this.running=!1,this.blocking=!1,this.opts=Object.assign({blockingTimeout:1e4},this.opts),s&&this.run().catch(a=>this.emit("error",a))}emit(e,...r){return super.emit(e,...r)}off(e,r){return super.off(e,r),this}on(e,r){return super.on(e,r),this}once(e,r){return super.once(e,r),this}async run(){if(this.running)throw new Error("Queue Events is already running.");try{this.running=!0;let e=await this.client;try{await e.clientSetName(this.clientName(jb.QUEUE_EVENT_SUFFIX))}catch(r){if(!jb.clientCommandMessageReg.test(r.message)&&!this.closing)throw r}await this.consumeEvents(e)}catch(e){throw this.running=!1,e}}async consumeEvents(e){let r=this.opts,n=this.keys.events,i=r.lastEventId||"$";for(;!this.closing;){this.blocking=!0;let s=await this.checkConnectionError(()=>e.xread([{key:n,id:i}],{BLOCK:r.blockingTimeout}));if(this.blocking=!1,s){let a=s[0][1];for(let c=0;c<a.length;c++){i=a[c][0];let l=(0,jb.array2obj)(a[c][1]);switch(l.event){case"progress":l.data=JSON.parse(l.data);break;case"completed":l.returnvalue=JSON.parse(l.returnvalue);break;case"delayed":l.delay=Number(l.delay);break}let{event:u}=l,d=zB.__rest(l,["event"]);u==="drained"?this.emit(u,i):(this.emit(u,d,i),d.jobId&&this.emit(`${u}:${d.jobId}`,d,i))}}}}async close(){return this.closing||(this.closing=(async()=>{try{(await this.client).disconnect(),await this.connection.close(this.blocking)}finally{this.closed=!0}})()),this.closing}};Pb.QueueEvents=gA});var HB=h(Kb=>{"use strict";Object.defineProperty(Kb,"__esModule",{value:!0});Kb.QueueEventsProducer=void 0;var oAe=(nr(),Pt(rr)),aAe=ro(),bA=class extends aAe.QueueBase{constructor(e,r={connection:{}},n){super(e,Object.assign({blockingConnection:!1},r),n),this.opts=r}async publishEvent(e,r=1e3){let n=await this.client,i=this.keys.events,{eventName:s}=e,o=oAe.__rest(e,["eventName"]),a=Object.assign({event:s},o);await n.xadd(i,"*",a,{MAXLEN:r,approximate:!0})}async close(){this.closing||(this.closing=this.connection.close()),await this.closing}};Kb.QueueEventsProducer=bA});var xA=h(Db=>{"use strict";Object.defineProperty(Db,"__esModule",{value:!0});Db.QueueGetters=void 0;var cAe=(nr(),Pt(rr)),lAe=ro(),vA=Dr(),EA=_r();function VB(t){return String(t).replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n")}var SA=class extends lAe.QueueBase{getJob(e){return this.Job.fromId(this,e)}commandByType(e,r,n){return e.map(i=>{i=i==="waiting"?"wait":i;let s=this.toKey(i);switch(i){case"completed":case"failed":case"delayed":case"prioritized":case"repeat":case"waiting-children":return n(s,r?"zcard":"zrange");case"active":case"wait":case"paused":return n(s,r?"llen":"lrange")}})}sanitizeJobTypes(e){let r=typeof e=="string"?[e]:e;if(Array.isArray(r)&&r.length>0){let n=[...r];return n.indexOf("waiting")!==-1&&n.push("paused"),[...new Set(n)]}return["active","completed","delayed","failed","paused","prioritized","waiting","waiting-children"]}async count(){return await this.getJobCountByTypes("waiting","paused","delayed","prioritized","waiting-children")}async getRateLimitTtl(e){return this.scripts.getRateLimitTtl(e)}async getDebounceJobId(e){return(await this.client).get(`${this.keys.de}:${e}`)}async getDeduplicationJobId(e){return(await this.client).get(`${this.keys.de}:${e}`)}async getGlobalConcurrency(){let r=await(await this.client).hget(this.keys.meta,"concurrency");return r?Number(r):null}async getGlobalRateLimit(){let e=await this.client,[r,n]=await e.hmget(this.keys.meta,"max","duration");return r&&n?{max:Number(r),duration:Number(n)}:null}async getJobCountByTypes(...e){let r=await this.getJobCounts(...e);return Object.values(r).reduce((n,i)=>n+i,0)}async getJobCounts(...e){let r=this.sanitizeJobTypes(e),n=await this.scripts.getCounts(r),i={};return n.forEach((s,o)=>{i[r[o]]=s||0}),i}async recordJobCountsMetric(...e){var r;let n=await this.getJobCounts(...e),i=(r=this.opts.telemetry)===null||r===void 0?void 0:r.meter;if(i&&typeof i.createGauge=="function"){let s=i.createGauge(EA.MetricNames.QueueJobsCount,{description:"Number of jobs in the queue by state",unit:"{jobs}"});for(let[o,a]of Object.entries(n))s.record(a,{[EA.TelemetryAttributes.QueueName]:this.name,[EA.TelemetryAttributes.QueueJobsState]:o})}return n}getJobState(e){return this.scripts.getState(e)}async getMeta(){let r=await(await this.client).hgetall(this.keys.meta),{concurrency:n,max:i,duration:s,paused:o,"opts.maxLenEvents":a}=r,l=cAe.__rest(r,["concurrency","max","duration","paused","opts.maxLenEvents"]);return n&&(l.concurrency=Number(n)),a&&(l.maxLenEvents=Number(a)),i&&(l.max=Number(i)),s&&(l.duration=Number(s)),l.paused=o==="1",l}getCompletedCount(){return this.getJobCountByTypes("completed")}getFailedCount(){return this.getJobCountByTypes("failed")}getDelayedCount(){return this.getJobCountByTypes("delayed")}getActiveCount(){return this.getJobCountByTypes("active")}getPrioritizedCount(){return this.getJobCountByTypes("prioritized")}async getCountsPerPriority(e){let r=[...new Set(e)],n=await this.scripts.getCountsPerPriority(r),i={};return n.forEach((s,o)=>{i[`${r[o]}`]=s||0}),i}getWaitingCount(){return this.getJobCountByTypes("waiting")}getWaitingChildrenCount(){return this.getJobCountByTypes("waiting-children")}getWaiting(e=0,r=-1){return this.getJobs(["waiting"],e,r,!0)}getWaitingChildren(e=0,r=-1){return this.getJobs(["waiting-children"],e,r,!0)}getActive(e=0,r=-1){return this.getJobs(["active"],e,r,!0)}getDelayed(e=0,r=-1){return this.getJobs(["delayed"],e,r,!0)}getPrioritized(e=0,r=-1){return this.getJobs(["prioritized"],e,r,!0)}getCompleted(e=0,r=-1){return this.getJobs(["completed"],e,r,!1)}getFailed(e=0,r=-1){return this.getJobs(["failed"],e,r,!1)}async getDependencies(e,r,n,i){let s=this.toKey(r=="processed"?`${e}:processed`:`${e}:dependencies`),{items:o,total:a,jobs:c}=await this.scripts.paginate(s,{start:n,end:i,fetchJobs:!0});return{items:o,jobs:c,total:a}}async getRanges(e,r=0,n=1,i=!1){let s=[];this.commandByType(e,!1,(c,l)=>{switch(l){case"lrange":s.push("lrange");break;case"zrange":s.push("zrange");break}});let o=await this.scripts.getRanges(e,r,n,i),a=[];return o.forEach((c,l)=>{let u=c||[];i&&s[l]==="lrange"?a=a.concat(u.reverse()):a=a.concat(u)}),[...new Set(a)]}async getJobs(e,r=0,n=-1,i=!1){let s=this.sanitizeJobTypes(e);return(await this.scripts.getJobs(s,r,n,i)).reduce((a,c)=>{for(let[l,u]of c||[])a.push(this.Job.fromJSON(this,(0,vA.array2obj)(u),l));return a},[])}async getJobLogs(e,r=0,n=-1,i=!0){let o=(await this.client).multi(),a=this.toKey(e+":logs");i?o.lrange(a,r,n):o.lrange(a,-(n+1),-(r+1)),o.llen(a);let c=await o.exec();return i||c[0][1].reverse(),{logs:c[0][1],count:c[1][1]}}async baseGetClients(e){let r=await this.client;try{if(r.isCluster&&typeof r.nodes=="function"){let n=r.nodes(),i=[];for(let o=0;o<n.length;o++){let a=n[o],c=typeof a.clientList=="function"?await a.clientList():await a.client("LIST"),l=this.parseClientList(c,e);i.push(l)}return i.reduce((o,a)=>o.length>a.length?o:a,[])}else{let n=await r.clientList();return this.parseClientList(n,e)}}catch(n){if(!vA.clientCommandMessageReg.test(n.message))throw n;return[{name:"GCP does not support client list"}]}}getWorkers(){let e=`${this.clientName()}`,r=`${this.clientName()}:w:`,n=i=>i&&(i===e||i.startsWith(r));return this.baseGetClients(n)}async getWorkersCount(){return(await this.getWorkers()).length}async getQueueEvents(){let e=`${this.clientName()}${vA.QUEUE_EVENT_SUFFIX}`;return this.baseGetClients(r=>r===e)}async getMetrics(e,r=0,n=-1){let[i,s,o]=await this.scripts.getMetrics(e,r,n);return{meta:{count:parseInt(i[0]||"0",10),prevTS:parseInt(i[1]||"0",10),prevCount:parseInt(i[2]||"0",10)},data:s.map(a=>+a||0),count:o}}parseClientList(e,r){let n=e.split(/\r?\n/),i=[];return n.forEach(s=>{let o={};s.split(" ").forEach(function(l){let u=l.indexOf("="),d=l.substring(0,u),p=l.substring(u+1);o[d]=p});let c=o.name;r(c)&&(o.name=this.name,o.rawname=c,i.push(o))}),i}async exportPrometheusMetrics(e){let r=await this.getJobCounts(),n=[];n.push("# HELP bullmq_job_count Number of jobs in the queue by state"),n.push("# TYPE bullmq_job_count gauge");let i=VB(this.name),s=e?Object.keys(e).reduce((c,l)=>`${c}, ${l}="${VB(e[l])}"`,""):"";for(let[c,l]of Object.entries(r))n.push(`bullmq_job_count{queue="${i}", state="${c}"${s}} ${l}`);let[o,a]=await Promise.all([this.getMetrics("completed"),this.getMetrics("failed")]);return n.push("# HELP bullmq_job_completed_total Total number of completed jobs"),n.push("# TYPE bullmq_job_completed_total counter"),n.push(`bullmq_job_completed_total{queue="${i}"${s}} ${o.meta.count}`),n.push("# HELP bullmq_job_failed_total Total number of failed jobs"),n.push("# TYPE bullmq_job_failed_total counter"),n.push(`bullmq_job_failed_total{queue="${i}"${s}} ${a.meta.count}`),n.join(`
|
||
`)}};Db.QueueGetters=SA});var Mb=h(ma=>{"use strict";Object.defineProperty(ma,"__esModule",{value:!0});ma.getNextMillis=ma.Repeat=void 0;var uAe=(nr(),Pt(rr)),dAe=pA(),pAe=require("crypto"),fAe=ro(),wA=class extends fAe.QueueBase{constructor(e,r,n){super(e,r,n),this.repeatStrategy=r.settings&&r.settings.repeatStrategy||ma.getNextMillis,this.repeatKeyHashAlgorithm=r.settings&&r.settings.repeatKeyHashAlgorithm||"md5"}async updateRepeatableJob(e,r,n,{override:i}){var s,o;let a=Object.assign({},n.repeat);(s=a.pattern)!==null&&s!==void 0||(a.pattern=a.cron),delete a.cron;let c=a.count?a.count+1:1;if(typeof a.limit<"u"&&c>a.limit)return;let l=Date.now(),{endDate:u}=a;if(u&&l>new Date(u).getTime())return;let d=n.prevMillis||0;l=d<l?l:d;let p=await this.repeatStrategy(l,a,e),{every:f,pattern:m}=a,y=!!((f||m)&&a.immediately),b=y&&f?l-p:void 0;if(p){!d&&n.jobId&&(a.jobId=n.jobId);let v=WB(e,a),E=(o=n.repeat.key)!==null&&o!==void 0?o:this.hash(v),S;if(i)S=await this.scripts.addRepeatableJob(E,p,{name:e,endDate:u?new Date(u).getTime():void 0,tz:a.tz,pattern:m,every:f},v);else{let O=await this.client;S=await this.scripts.updateRepeatableJobMillis(O,E,p,v)}let{immediately:k}=a,_=uAe.__rest(a,["immediately"]);return this.createNextJob(e,p,S,Object.assign(Object.assign({},n),{repeat:Object.assign({offset:b},_)}),r,c,y)}}async createNextJob(e,r,n,i,s,o,a){let c=this.getRepeatJobKey(e,r,n,s),l=Date.now(),u=r+(i.repeat.offset?i.repeat.offset:0)-l,d=Object.assign(Object.assign({},i),{jobId:c,delay:u<0||a?0:u,timestamp:l,prevMillis:r,repeatJobKey:n});return d.repeat=Object.assign(Object.assign({},i.repeat),{count:o}),this.Job.create(this,e,s,d)}getRepeatJobKey(e,r,n,i){return n.split(":").length>2?this.getRepeatJobId({name:e,nextMillis:r,namespace:this.hash(n),jobId:i?.id}):this.getRepeatDelayedJobId({customKey:n,nextMillis:r})}async removeRepeatable(e,r,n){var i;let s=WB(e,Object.assign(Object.assign({},r),{jobId:n})),o=(i=r.key)!==null&&i!==void 0?i:this.hash(s),a=this.getRepeatJobId({name:e,nextMillis:"",namespace:this.hash(s),jobId:n??r.jobId,key:r.key});return this.scripts.removeRepeatable(a,s,o)}async removeRepeatableByKey(e){let r=this.keyToData(e),n=this.getRepeatJobId({name:r.name,nextMillis:"",namespace:this.hash(e),jobId:r.id});return this.scripts.removeRepeatable(n,"",e)}async getRepeatableData(e,r,n){let i=await e.hgetall(this.toKey("repeat:"+r));return i?{key:r,name:i.name,endDate:parseInt(i.endDate)||null,tz:i.tz||null,pattern:i.pattern||null,every:i.every||null,next:n}:this.keyToData(r,n)}keyToData(e,r){let n=e.split(":"),i=n.slice(4).join(":")||null;return{key:e,name:n[0],id:n[1]||null,endDate:parseInt(n[2])||null,tz:n[3]||null,pattern:i,next:r}}async getRepeatableJobs(e=0,r=-1,n=!1){let i=await this.client,s=this.keys.repeat,o=n?await i.zrange(s,e,r,{WITHSCORES:!0}):await i.zrevrange(s,e,r,{WITHSCORES:!0}),a=[];for(let c=0;c<o.length;c+=2)a.push(this.getRepeatableData(i,o[c],parseInt(o[c+1])));return Promise.all(a)}async getRepeatableCount(){return(await this.client).zcard(this.toKey("repeat"))}hash(e){return(0,pAe.createHash)(this.repeatKeyHashAlgorithm).update(e).digest("hex")}getRepeatDelayedJobId({nextMillis:e,customKey:r}){return`repeat:${r}:${e}`}getRepeatJobId({name:e,nextMillis:r,namespace:n,jobId:i,key:s}){return`repeat:${s??this.hash(`${e}${i||""}${n}`)}:${r}`}};ma.Repeat=wA;function WB(t,e){let r=e.endDate?new Date(e.endDate).getTime():"",n=e.tz||"",i=e.pattern,s=i||String(e.every)||"",o=e.jobId?e.jobId:"";return`${t}:${o}:${r}:${n}:${s}`}var mAe=(t,e)=>{let r=e.pattern;if(r&&e.every)throw new Error("Both .pattern and .every options are defined for this repeatable job");if(e.every)return Math.floor(t/e.every)*e.every+(e.immediately?0:e.every);let n=e.startDate&&new Date(e.startDate)>new Date(t)?new Date(e.startDate):new Date(t),i=(0,dAe.parseExpression)(r,Object.assign(Object.assign({},e),{currentDate:n}));try{return e.immediately?new Date().getTime():i.next().getTime()}catch{}};ma.getNextMillis=mAe});var YB=h(Nb=>{"use strict";Object.defineProperty(Nb,"__esModule",{value:!0});Nb.Queue=void 0;var hAe=Qc(),yAe=xA(),gAe=Mb(),de=_r(),bAe=Rb(),vAe=Ay(),EAe=Dr(),_A=class extends yAe.QueueGetters{constructor(e,r,n){var i;super(e,Object.assign({},r),n),this.token=(0,EAe.randomUUID)(),this.libName="bullmq",this.jobsOpts=(i=r?.defaultJobOptions)!==null&&i!==void 0?i:{},this.waitUntilReady().then(s=>{if(!this.closing&&!r?.skipMetasUpdate)return s.hset(this.keys.meta,this.metaValues)}).catch(s=>{})}emit(e,...r){return super.emit(e,...r)}off(e,r){return super.off(e,r),this}on(e,r){return super.on(e,r),this}once(e,r){return super.once(e,r),this}get defaultJobOptions(){return Object.assign({},this.jobsOpts)}get metaValues(){var e,r,n,i;return{"opts.maxLenEvents":(i=(n=(r=(e=this.opts)===null||e===void 0?void 0:e.streams)===null||r===void 0?void 0:r.events)===null||n===void 0?void 0:n.maxLen)!==null&&i!==void 0?i:1e4,version:`${this.libName}:${vAe.version}`}}async getVersion(){return await(await this.client).hget(this.keys.meta,"version")}get repeat(){return new Promise(async e=>{this._repeat||(this._repeat=new gAe.Repeat(this.name,Object.assign(Object.assign({},this.opts),{connection:await this.client})),this._repeat.on("error",this.emit.bind(this,"error"))),e(this._repeat)})}get jobScheduler(){return new Promise(async e=>{this._jobScheduler||(this._jobScheduler=new bAe.JobScheduler(this.name,Object.assign(Object.assign({},this.opts),{connection:await this.client})),this._jobScheduler.on("error",this.emit.bind(this,"error"))),e(this._jobScheduler)})}async setGlobalConcurrency(e){return(await this.client).hset(this.keys.meta,{concurrency:e})}async setGlobalRateLimit(e,r){return(await this.client).hset(this.keys.meta,{max:e,duration:r})}async removeGlobalConcurrency(){return(await this.client).hdel(this.keys.meta,"concurrency")}async removeGlobalRateLimit(){return(await this.client).hdel(this.keys.meta,"max","duration")}async add(e,r,n){return this.trace(de.SpanKind.PRODUCER,"add",`${this.name}.${e}`,async(i,s)=>{var o;if(s&&!(!((o=n?.telemetry)===null||o===void 0)&&o.omitContext)){let c={metadata:s};n=Object.assign(Object.assign({},n),{telemetry:c})}let a=await this.addJob(e,r,n);return i?.setAttributes({[de.TelemetryAttributes.JobName]:e,[de.TelemetryAttributes.JobId]:a.id}),a})}async addJob(e,r,n){if(n&&n.repeat){if(n.repeat.endDate&&+new Date(n.repeat.endDate)<Date.now())throw new Error("End date must be greater than current timestamp");return(await this.repeat).updateRepeatableJob(e,r,Object.assign(Object.assign({},this.jobsOpts),n),{override:!0})}else{let i=n?.jobId;if(i=="0"||i?.startsWith("0:"))throw new Error("JobId cannot be '0' or start with 0:");let s=Object.assign(Object.assign(Object.assign({},this.jobsOpts),n),{jobId:i}),o=await this.Job.create(this,e,r,s);return this.emit("waiting",o),o}}async addBulk(e){return this.trace(de.SpanKind.PRODUCER,"addBulk",this.name,async(r,n)=>(r&&r.setAttributes({[de.TelemetryAttributes.BulkNames]:e.map(i=>i.name),[de.TelemetryAttributes.BulkCount]:e.length}),await this.Job.createBulk(this,e.map(i=>{var s,o,a,c,l,u;let d=(s=i.opts)===null||s===void 0?void 0:s.telemetry;if(n){let f=(a=(o=i.opts)===null||o===void 0?void 0:o.telemetry)===null||a===void 0?void 0:a.omitContext,m=((l=(c=i.opts)===null||c===void 0?void 0:c.telemetry)===null||l===void 0?void 0:l.metadata)||!f&&n;(m||f)&&(d={metadata:m,omitContext:f})}let p=Object.assign(Object.assign(Object.assign({},this.jobsOpts),i.opts),{jobId:(u=i.opts)===null||u===void 0?void 0:u.jobId,telemetry:d});return{name:i.name,data:i.data,opts:p}}))))}async upsertJobScheduler(e,r,n){var i,s;if(r.endDate&&+new Date(r.endDate)<Date.now())throw new Error("End date must be greater than current timestamp");return(await this.jobScheduler).upsertJobScheduler(e,r,(i=n?.name)!==null&&i!==void 0?i:e,(s=n?.data)!==null&&s!==void 0?s:{},Object.assign(Object.assign({},this.jobsOpts),n?.opts),{override:!0})}async pause(){await this.trace(de.SpanKind.INTERNAL,"pause",this.name,async()=>{await this.scripts.pause(!0),this.emit("paused")})}async close(){await this.trace(de.SpanKind.INTERNAL,"close",this.name,async()=>{this.closing||this._repeat&&await this._repeat.close(),await super.close()})}async rateLimit(e){await this.trace(de.SpanKind.INTERNAL,"rateLimit",this.name,async r=>{r?.setAttributes({[de.TelemetryAttributes.QueueRateLimit]:e}),await this.client.then(n=>n.set(this.keys.limiter,Number.MAX_SAFE_INTEGER,{PX:e}))})}async resume(){await this.trace(de.SpanKind.INTERNAL,"resume",this.name,async()=>{await this.scripts.pause(!1),this.emit("resumed")})}async isPaused(){return await(await this.client).hexists(this.keys.meta,"paused")===1}isMaxed(){return this.scripts.isMaxed()}async getRepeatableJobs(e,r,n){return(await this.repeat).getRepeatableJobs(e,r,n)}async getJobScheduler(e){return(await this.jobScheduler).getScheduler(e)}async getJobSchedulers(e,r,n){return(await this.jobScheduler).getJobSchedulers(e,r,n)}async getJobSchedulersCount(){return(await this.jobScheduler).getSchedulersCount()}async removeRepeatable(e,r,n){return this.trace(de.SpanKind.INTERNAL,"removeRepeatable",`${this.name}.${e}`,async i=>(i?.setAttributes({[de.TelemetryAttributes.JobName]:e,[de.TelemetryAttributes.JobId]:n}),!await(await this.repeat).removeRepeatable(e,r,n)))}async removeJobScheduler(e){return!await(await this.jobScheduler).removeJobScheduler(e)}async removeDebounceKey(e){return this.trace(de.SpanKind.INTERNAL,"removeDebounceKey",`${this.name}`,async r=>(r?.setAttributes({[de.TelemetryAttributes.JobKey]:e}),await(await this.client).del(`${this.keys.de}:${e}`)))}async removeDeduplicationKey(e){return this.trace(de.SpanKind.INTERNAL,"removeDeduplicationKey",`${this.name}`,async r=>(r?.setAttributes({[de.TelemetryAttributes.DeduplicationKey]:e}),(await this.client).del(`${this.keys.de}:${e}`)))}async removeRateLimitKey(){return(await this.client).del(this.keys.limiter)}async removeRepeatableByKey(e){return this.trace(de.SpanKind.INTERNAL,"removeRepeatableByKey",`${this.name}`,async r=>(r?.setAttributes({[de.TelemetryAttributes.JobKey]:e}),!await(await this.repeat).removeRepeatableByKey(e)))}async remove(e,{removeChildren:r=!0}={}){return this.trace(de.SpanKind.INTERNAL,"remove",this.name,async n=>{n?.setAttributes({[de.TelemetryAttributes.JobId]:e,[de.TelemetryAttributes.JobOptions]:JSON.stringify({removeChildren:r})});let i=await this.scripts.remove(e,r);return i===1&&this.emit("removed",e),i})}async updateJobProgress(e,r){await this.trace(de.SpanKind.INTERNAL,"updateJobProgress",this.name,async n=>{n?.setAttributes({[de.TelemetryAttributes.JobId]:e,[de.TelemetryAttributes.JobProgress]:JSON.stringify(r)}),await this.scripts.updateProgress(e,r),this.emit("progress",e,r)})}async addJobLog(e,r,n){return hAe.Job.addJobLog(this,e,r,n)}async drain(e=!1){await this.trace(de.SpanKind.INTERNAL,"drain",this.name,async r=>{r?.setAttributes({[de.TelemetryAttributes.QueueDrainDelay]:e}),await this.scripts.drain(e)})}async clean(e,r,n="completed"){return this.trace(de.SpanKind.INTERNAL,"clean",this.name,async i=>{let s=r||1/0,o=Math.min(1e4,s),a=Date.now()-e,c=0,l=[],u=n==="waiting"?"wait":n;for(;c<s;){let d=await this.scripts.cleanJobsInSet(u,a,o);if(this.emit("cleaned",d,u),c+=d.length,l.push(...d),d.length<o)break}return i?.setAttributes({[de.TelemetryAttributes.QueueGrace]:e,[de.TelemetryAttributes.JobType]:n,[de.TelemetryAttributes.QueueCleanLimit]:s,[de.TelemetryAttributes.JobIds]:l}),l})}async obliterate(e){await this.trace(de.SpanKind.INTERNAL,"obliterate",this.name,async()=>{await this.pause();let r=0;do r=await this.scripts.obliterate(Object.assign({force:!1,count:1e3},e));while(r)})}async retryJobs(e={}){await this.trace(de.SpanKind.PRODUCER,"retryJobs",this.name,async r=>{r?.setAttributes({[de.TelemetryAttributes.QueueOptions]:JSON.stringify(e)});let n=0;do n=await this.scripts.retryJobs(e.state,e.count,e.timestamp);while(n)})}async promoteJobs(e={}){await this.trace(de.SpanKind.INTERNAL,"promoteJobs",this.name,async r=>{r?.setAttributes({[de.TelemetryAttributes.QueueOptions]:JSON.stringify(e)});let n=0;do n=await this.scripts.promoteJobs(e.count);while(n)})}async trimEvents(e){return this.trace(de.SpanKind.INTERNAL,"trimEvents",this.name,async r=>(r?.setAttributes({[de.TelemetryAttributes.QueueEventMaxLength]:e}),await(await this.client).xtrim(this.keys.events,"MAXLEN",e,{approximate:!0})))}async removeDeprecatedPriorityKey(){return(await this.client).del(this.toKey("priority"))}async removeOrphanedJobs(e=1e3,r=0){let n=await this.client,i=new Set(Object.keys(this.keys)),s=Object.keys(this.keys).filter(d=>d!==""),o=["logs","dependencies","processed","failed","unsuccessful","lock"],a=this.qualifiedName+":",c=a+"*",l=0,u="0";do{let[d,p]=await n.scan(u,{MATCH:c,COUNT:e});u=d;let f=new Set;for(let y of p){let b=y.slice(a.length);if(i.has(b))continue;let v=b.indexOf(":");if(v!==-1){let S=b.slice(0,v);if(i.has(S))continue}let E=v===-1?b:b.slice(0,v);if(v!==-1){let S=b.slice(v+1);if(!o.includes(S))continue}f.add(E)}if(f.size===0)continue;let m=await this.scripts.removeOrphanedJobs([...f],s,o);if(l+=m||0,r>0&&l>=r)break}while(u!=="0");return l}};Nb.Queue=_A});var TA=h(IA=>{"use strict";Object.defineProperty(IA,"__esModule",{value:!0});var vt=_r(),SAe=(t,e)=>async function(n,i,s){let o,a,c,l;try{let u=new Promise((d,p)=>{(async()=>{try{c=(m,y)=>{p(new Error("Unexpected exit code: "+m+" signal: "+y))},o=await e.retain(t),o.on("exit",c),a=async m=>{var y,b,v,E,S,k;try{switch(m.cmd){case vt.ParentCommand.Completed:d(m.value);break;case vt.ParentCommand.Failed:case vt.ParentCommand.Error:{let _=new Error;Object.assign(_,(y=m.value)!==null&&y!==void 0?y:m.err),p(_);break}case vt.ParentCommand.Progress:await n.updateProgress(m.value);break;case vt.ParentCommand.Log:await n.log(m.value);break;case vt.ParentCommand.MoveToDelayed:await n.moveToDelayed((b=m.value)===null||b===void 0?void 0:b.timestamp,(v=m.value)===null||v===void 0?void 0:v.token);break;case vt.ParentCommand.MoveToWait:await n.moveToWait((E=m.value)===null||E===void 0?void 0:E.token);break;case vt.ParentCommand.MoveToWaitingChildren:{let _=await n.moveToWaitingChildren((S=m.value)===null||S===void 0?void 0:S.token,(k=m.value)===null||k===void 0?void 0:k.opts);o.send({requestId:m.requestId,cmd:vt.ChildCommand.MoveToWaitingChildrenResponse,value:_})}break;case vt.ParentCommand.Update:await n.updateData(m.value);break;case vt.ParentCommand.GetChildrenValues:{let _=await n.getChildrenValues();o.send({requestId:m.requestId,cmd:vt.ChildCommand.GetChildrenValuesResponse,value:_})}break;case vt.ParentCommand.GetIgnoredChildrenFailures:{let _=await n.getIgnoredChildrenFailures();o.send({requestId:m.requestId,cmd:vt.ChildCommand.GetIgnoredChildrenFailuresResponse,value:_})}break;case vt.ParentCommand.GetDependenciesCount:{let _=await n.getDependenciesCount(m.value);o.send({requestId:m.requestId,cmd:vt.ChildCommand.GetDependenciesCountResponse,value:_})}break;case vt.ParentCommand.GetDependencies:{let _=await n.getDependencies(m.value);o.send({requestId:m.requestId,cmd:vt.ChildCommand.GetDependenciesResponse,value:_})}break}}catch(_){p(_)}},o.on("message",a),o.send({cmd:vt.ChildCommand.Start,job:n.asJSONSandbox(),token:i}),s&&(l=()=>{try{o.send({cmd:vt.ChildCommand.Cancel,value:s.reason})}catch{}},s.aborted?l():s.addEventListener("abort",l,{once:!0}))}catch(m){p(m)}})()});return await u,u}finally{s&&l&&s.removeEventListener("abort",l),o&&(o.off("message",a),o.off("exit",c),o.exitCode===null&&o.signalCode===null&&e.release(o))}};IA.default=SAe});var e9=h((qb,ZB)=>{"use strict";Object.defineProperty(qb,"__esModule",{value:!0});qb.Worker=void 0;var Lb=require("fs"),xAe=require("url"),Wd=require("path"),wAe=Gh(),es=Dr(),_Ae=ro(),IAe=Mb(),TAe=HI(),kAe=Md(),QB=Kd(),AAe=TA(),RAe=$I(),ha=ly(),pe=_r(),OAe=Rb(),CAe=yA(),jAe=10;function XB(t){return t.status==="ready"||t.status==="connect"&&(0,es.isRedisCluster)(t)}var kA=class extends _Ae.QueueBase{static RateLimitError(){return new ha.RateLimitError}constructor(e,r,n,i){if(super(e,Object.assign(Object.assign({drainDelay:5,concurrency:1,lockDuration:3e4,maximumRateLimitDelay:3e4,maxStalledCount:1,stalledInterval:3e4,autorun:!0,runRetryDelay:15e3},n),{blockingConnection:!0}),i),this.abortDelayController=null,this.blockUntil=0,this.drained=!1,this.limitUntil=0,this.processorAcceptsSignal=!1,this.stalledCheckerRunning=!1,this.waiting=null,this.running=!1,this.mainLoopRunning=null,!n||!n.connection)throw new Error("Worker requires a connection");if(typeof this.opts.maxStalledCount!="number"||this.opts.maxStalledCount<0)throw new Error("maxStalledCount must be greater or equal than 0");if(typeof this.opts.maxStartedAttempts=="number"&&this.opts.maxStartedAttempts<0)throw new Error("maxStartedAttempts must be greater or equal than 0");if(typeof this.opts.stalledInterval!="number"||this.opts.stalledInterval<=0)throw new Error("stalledInterval must be greater than 0");if(typeof this.opts.drainDelay!="number"||this.opts.drainDelay<=0)throw new Error("drainDelay must be greater than 0");if(this.concurrency=this.opts.concurrency,this.opts.lockRenewTime=this.opts.lockRenewTime||this.opts.lockDuration/2,this.id=(0,es.randomUUID)(),this.createLockManager(),r){if(typeof r=="function")this.processFn=r,this.processorAcceptsSignal=r.length>=3;else{if(r instanceof xAe.URL){if(!Lb.existsSync(r))throw new Error(`URL ${r} does not exist in the local file system`);r=r.href}else{let d=r+([".js",".ts",".flow",".cjs",".mjs"].includes(Wd.extname(r))?"":".js");if(!Lb.existsSync(d))throw new Error(`File ${d} does not exist`)}let o=Wd.dirname(ZB.filename||__CM_FILENAME__),a=Wd.join(o,"main-worker.js"),c=Wd.join(o,"main.js"),l=this.opts.useWorkerThreads?a:c;try{Lb.statSync(l)}catch{let d=this.opts.useWorkerThreads?"main-worker.js":"main.js";l=Wd.join(process.cwd(),`dist/cjs/classes/${d}`),Lb.statSync(l)}this.childPool=new TAe.ChildPool({mainFile:l,useWorkerThreads:this.opts.useWorkerThreads,workerForkOptions:this.opts.workerForkOptions,workerThreadsOptions:this.opts.workerThreadsOptions}),this.createSandbox(r),this.processorAcceptsSignal=!0}this.opts.autorun&&this.run().catch(o=>this.emit("error",o))}let s=this.clientName()+(this.opts.name?`:w:${this.opts.name}`:"");this.blockingConnection=new kAe.RedisConnection((0,es.isRedisInstance)(n.connection)?((0,QB.isIRedisClient)(n.connection)?n.connection:(0,QB.createIORedisClient)(n.connection)).duplicate({connectionName:s}):Object.assign(Object.assign({},n.connection),{connectionName:s}),{shared:!1,blocking:!0,skipVersionCheck:n.skipVersionCheck}),(0,es.forwardConnectionError)(this,this.blockingConnection),this.blockingConnection.on("ready",()=>setTimeout(()=>this.emit("ready"),0))}createLockManager(){this.lockManager=new CAe.LockManager(this,{lockRenewTime:this.opts.lockRenewTime,lockDuration:this.opts.lockDuration,workerId:this.id,workerName:this.opts.name})}createSandbox(e){this.processFn=(0,AAe.default)(e,this.childPool).bind(this)}async extendJobLocks(e,r,n){return this.scripts.extendLocks(e,r,n)}emit(e,...r){return super.emit(e,...r)}off(e,r){return super.off(e,r),this}on(e,r){return super.on(e,r),this}once(e,r){return super.once(e,r),this}callProcessJob(e,r,n){return this.processFn(e,r,n)}createJob(e,r){return this.Job.fromJSON(this,e,r)}async waitUntilReady(){return await super.waitUntilReady(),this.blockingConnection.client}cancelJob(e,r){return this.lockManager.cancelJob(e,r)}cancelAllJobs(e){this.lockManager.cancelAllJobs(e)}set concurrency(e){if(typeof e!="number"||e<1||!isFinite(e))throw new Error("concurrency must be a finite number greater than 0");this._concurrency=e}get concurrency(){return this._concurrency}get repeat(){return new Promise(async e=>{if(!this._repeat){let r=await this.client;this._repeat=new IAe.Repeat(this.name,Object.assign(Object.assign({},this.opts),{connection:r})),this._repeat.on("error",this.emit.bind(this,"error"))}e(this._repeat)})}get jobScheduler(){return new Promise(async e=>{if(!this._jobScheduler){let r=await this.client;this._jobScheduler=new OAe.JobScheduler(this.name,Object.assign(Object.assign({},this.opts),{connection:r})),this._jobScheduler.on("error",this.emit.bind(this,"error"))}e(this._jobScheduler)})}async run(){if(!this.processFn)throw new Error("No process function is defined.");if(this.running)throw new Error("Worker is already running.");try{if(this.running=!0,this.closing||this.paused)return;await this.startStalledCheckTimer(),this.opts.skipLockRenewal||this.lockManager.start();let e=await this.client,r=await this.blockingConnection.client;this.mainLoopRunning=this.mainLoop(e,r),await this.mainLoopRunning}finally{this.running=!1}}async waitForRateLimit(){var e;let r=this.limitUntil;if(r>Date.now()){(e=this.abortDelayController)===null||e===void 0||e.abort(),this.abortDelayController=new wAe.AbortController;let n=this.getRateLimitDelay(r-Date.now());await this.delay(n,this.abortDelayController),this.drained=!1,this.limitUntil=0}}async mainLoop(e,r){let n=new RAe.AsyncFifoQueue,i=0;for(;!this.closing&&!this.paused||n.numTotal()>0;){for(;!this.closing&&!this.paused&&!this.waiting&&n.numTotal()<this._concurrency&&!this.isRateLimited();){let o=`${this.id}:${i++}`,a=this.retryIfFailed(()=>this._getNextJob(e,r,o,{block:!0}),{delayInMs:this.opts.runRetryDelay,onlyEmitError:!0});if(n.add(a),this.waiting&&n.numTotal()>1||!await a&&n.numTotal()>1||this.blockUntil)break}let s;do s=await n.fetch();while(!s&&n.numQueued()>0);if(s){let o=s.token;n.add(this.processJob(s,o,()=>n.numTotal()<=this._concurrency))}else n.numQueued()===0&&await this.waitForRateLimit()}}async getNextJob(e,{block:r=!0}={}){let n=await this.getTracedNextJob(e,{block:r});for(;n;){let i=this.getUnrecoverableErrorMessage(n);if(!i)break;await this.handleFailed(new ha.UnrecoverableError(i),n,e,()=>!1),n=await this.getTracedNextJob(e,{block:r})}return n}async getTracedNextJob(e,{block:r=!0}={}){var n,i;let s=await this._getNextJob(await this.client,await this.blockingConnection.client,e,{block:r});return this.trace(pe.SpanKind.INTERNAL,"getNextJob",this.name,async o=>(o?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.QueueName]:this.name,[pe.TelemetryAttributes.WorkerName]:this.opts.name,[pe.TelemetryAttributes.WorkerOptions]:JSON.stringify({block:r}),[pe.TelemetryAttributes.JobId]:s?.id}),s),(i=(n=s?.opts)===null||n===void 0?void 0:n.telemetry)===null||i===void 0?void 0:i.metadata)}async _getNextJob(e,r,n,{block:i=!0}={}){if(this.paused||this.closing)return;let s;if(this.drained&&i&&!this.limitUntil&&!this.waiting){this.waiting=this.waitForJob(r,this.blockUntil);try{this.blockUntil=await this.waiting,(this.blockUntil<=0||this.blockUntil-Date.now()<1)&&(s=await this.moveToActive(e,n,this.opts.name))}finally{this.waiting=null}}else this.isRateLimited()||(s=await this.moveToActive(e,n,this.opts.name));return s}async rateLimit(e){await this.trace(pe.SpanKind.INTERNAL,"rateLimit",this.name,async r=>{r?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.WorkerRateLimit]:e}),await this.client.then(n=>n.set(this.keys.limiter,Number.MAX_SAFE_INTEGER,{PX:e}))})}get minimumBlockTimeout(){return this.blockingConnection.capabilities.canBlockFor1Ms?.001:.002}isRateLimited(){return this.limitUntil>Date.now()}async moveToActive(e,r,n){let[i,s,o,a]=await this.scripts.moveToActive(e,r,n);return this.updateDelays(o,a),this.nextJobFromJobData(i,s,r)}async waitForJob(e,r){if(this.paused)return 1/0;let n;try{if(!this.closing&&!this.isRateLimited()){let i=this.getBlockTimeout(r);if(i>0){i=this.blockingConnection.capabilities.canDoubleTimeout?i:Math.ceil(i);let s=!1,o=new Promise(c=>{n=setTimeout(()=>{s=!0,c(null)},i*1e3+1e3)});this.updateDelays();let a=await Promise.race([e.bzpopmin(this.keys.marker,i),o]);if(s&&!this.closing&&(XB(e)||await this.blockingConnection.reconnect(),XB(e)&&!this.closing&&(await this.blockingConnection.disconnect(!0),this.closing||await this.blockingConnection.reconnect())),a){let[,c,l]=a;if(c){let u=parseInt(l);return r&&u>r?r:u}}}return 0}}catch(i){if((0,es.isNotConnectionError)(i)&&this.emit("error",i),!this.closing&&e.status==="end")try{await e.connect()}catch(s){e.status==="end"&&(0,es.isNotConnectionError)(s)&&this.emit("error",s)}this.closing||await this.delay()}finally{clearTimeout(n)}return 1/0}getBlockTimeout(e){let r=this.opts;if(e){let n=e-Date.now();return n<=0?n:n<this.minimumBlockTimeout*1e3?this.minimumBlockTimeout:Math.min(n/1e3,jAe)}else return Math.max(r.drainDelay,this.minimumBlockTimeout)}getRateLimitDelay(e){return Math.min(e,this.opts.maximumRateLimitDelay)}async delay(e,r){await(0,es.delay)(e||es.DELAY_TIME_1,r)}updateDelays(e=0,r=0){let n=Math.max(e,0);n>0?this.limitUntil=Date.now()+n:this.limitUntil=0,this.blockUntil=Math.max(r,0)||0}async nextJobFromJobData(e,r,n){if(!e)this.drained||(this.emit("drained"),this.drained=!0);else{this.drained=!1;let i=this.createJob(e,r);i.token=n;try{await this.retryIfFailed(async()=>{let s=!!i.repeatJobKey,o=s&&i.repeatJobKey.split(":").length>=5,a=s&&!o;o&&(a=await(await this.jobScheduler).isJobScheduler(i.repeatJobKey)),a?await(await this.jobScheduler).upsertJobScheduler(i.repeatJobKey,i.opts.repeat,i.name,i.data,i.opts,{override:!1,producerId:i.id}):i.opts.repeat&&await(await this.repeat).updateRepeatableJob(i.name,i.data,i.opts,{override:!1})},{delayInMs:this.opts.runRetryDelay})}catch(s){let o=s instanceof Error?s.message:String(s),a=new Error(`Failed to add repeatable job for next iteration: ${o}`);this.emit("error",a);return}return this.emit("active",i,"waiting"),i}}async processJob(e,r,n=()=>!0){var i,s;let o=(s=(i=e.opts)===null||i===void 0?void 0:i.telemetry)===null||s===void 0?void 0:s.metadata;return this.trace(pe.SpanKind.CONSUMER,"process",this.name,async a=>{a?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.WorkerName]:this.opts.name,[pe.TelemetryAttributes.JobId]:e.id,[pe.TelemetryAttributes.JobName]:e.name});let c=this.lockManager.trackJob(e.id,r,e.processedOn,this.processorAcceptsSignal);try{let l=this.getUnrecoverableErrorMessage(e);if(l)return await this.retryIfFailed(()=>(this.lockManager.untrackJob(e.id),this.handleFailed(new ha.UnrecoverableError(l),e,r,n,a)),{delayInMs:this.opts.runRetryDelay,span:a});let u=await this.callProcessJob(e,r,c?c.signal:void 0);return await this.retryIfFailed(()=>(this.lockManager.untrackJob(e.id),this.handleCompleted(u,e,r,n,a)),{delayInMs:this.opts.runRetryDelay,span:a})}catch(l){return await this.retryIfFailed(()=>(this.lockManager.untrackJob(e.id),this.handleFailed(l,e,r,n,a)),{delayInMs:this.opts.runRetryDelay,span:a,onlyEmitError:!0})}finally{this.lockManager.untrackJob(e.id);let l=Date.now();a?.setAttributes({[pe.TelemetryAttributes.JobFinishedTimestamp]:l,[pe.TelemetryAttributes.JobAttemptFinishedTimestamp]:e.finishedOn||l,[pe.TelemetryAttributes.JobProcessedTimestamp]:e.processedOn})}},o)}getUnrecoverableErrorMessage(e){if(e.deferredFailure)return e.deferredFailure;if(this.opts.maxStartedAttempts&&this.opts.maxStartedAttempts<e.attemptsStarted)return"job started more than allowable limit"}async handleCompleted(e,r,n,i=()=>!0,s){if(!this.connection.closing){let o=await r.moveToCompleted(e,n,i()&&!(this.closing||this.paused));if(this.emit("completed",r,e,"active"),s?.addEvent("job completed",{[pe.TelemetryAttributes.JobResult]:JSON.stringify(e)}),s?.setAttributes({[pe.TelemetryAttributes.JobAttemptsMade]:r.attemptsMade}),Array.isArray(o)){let[a,c,l,u]=o;return this.updateDelays(l,u),this.nextJobFromJobData(a,c,n)}}}async handleFailed(e,r,n,i=()=>!0,s){if(!this.connection.closing){if(e.message===ha.RATE_LIMIT_ERROR){let c=await this.moveLimitedBackToWait(r,n);this.limitUntil=c>0?Date.now()+c:0;return}let o=i()&&!(this.closing||this.paused);if(e instanceof ha.DelayedError||e.name=="DelayedError"||e instanceof ha.WaitingError||e.name=="WaitingError"||e instanceof ha.WaitingChildrenError||e.name=="WaitingChildrenError"){if(!o)return;let c=await this.client;return this.moveToActive(c,n,this.opts.name)}let a=await r.moveToFailed(e,n,o);if(this.emit("failed",r,e,"active"),s?.addEvent("job failed",{[pe.TelemetryAttributes.JobFailedReason]:e.message}),s?.setAttributes({[pe.TelemetryAttributes.JobAttemptsMade]:r.attemptsMade}),Array.isArray(a)){let[c,l,u,d]=a;return this.updateDelays(u,d),this.nextJobFromJobData(c,l,n)}}}async pause(e){await this.trace(pe.SpanKind.INTERNAL,"pause",this.name,async r=>{var n;r?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.WorkerName]:this.opts.name,[pe.TelemetryAttributes.WorkerDoNotWaitActive]:e}),this.paused||(this.paused=!0,e||await this.whenCurrentJobsFinished(),(n=this.stalledCheckStopper)===null||n===void 0||n.call(this),this.emit("paused"))})}resume(){(!this.running||this.paused)&&this.trace(pe.SpanKind.INTERNAL,"resume",this.name,e=>{e?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.WorkerName]:this.opts.name}),this.paused=!1,this.running?this.startStalledCheckTimer().catch(r=>{this.emit("error",r)}):this.processFn&&this.run(),this.emit("resumed")}).catch(e=>{this.emit("error",e)})}isPaused(){return!!this.paused}isRunning(){return this.running}async close(e=!1){return this.closing?this.closing:(this.closing=(async()=>{await this.trace(pe.SpanKind.INTERNAL,"close",this.name,async r=>{var n,i;r?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.WorkerName]:this.opts.name,[pe.TelemetryAttributes.WorkerForceClose]:e}),this.emit("closing","closing queue"),(n=this.abortDelayController)===null||n===void 0||n.abort();let s=[()=>e||this.whenCurrentJobsFinished(!1),()=>this.lockManager.close(),()=>{var o;return(o=this.childPool)===null||o===void 0?void 0:o.clean()},()=>this.blockingConnection.close(e),()=>this.connection.close(e)];for(let o of s)try{await o()}catch(a){this.emit("error",a)}(i=this.stalledCheckStopper)===null||i===void 0||i.call(this),this.closed=!0,this.emit("closed")})})(),await this.closing)}async startStalledCheckTimer(){this.opts.skipStalledCheck||!this.closing&&!this.stalledCheckerRunning&&await this.trace(pe.SpanKind.INTERNAL,"startStalledCheckTimer",this.name,async e=>{e?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.WorkerName]:this.opts.name}),this.stalledCheckerRunning=!0,this.stalledChecker().catch(r=>{this.emit("error",r)}).finally(()=>{this.stalledCheckerRunning=!1})})}async stalledChecker(){for(;!(this.closing||this.paused);)await this.checkConnectionError(()=>this.moveStalledJobsToWait()),await new Promise(e=>{let r=setTimeout(e,this.opts.stalledInterval);this.stalledCheckStopper=()=>{clearTimeout(r),e()}})}async whenCurrentJobsFinished(e=!0){this.mainLoopRunning?(await this.blockingConnection.disconnect(!0),await this.mainLoopRunning):e=!1,e&&await this.blockingConnection.reconnect()}async retryIfFailed(e,r){var n;let i=0,s=r.maxRetries||1/0;do try{return await e()}catch(o){if((n=r.span)===null||n===void 0||n.recordException(o.message),(0,es.isNotConnectionError)(o)){if(!this.paused&&!this.closing&&this.emit("error",o),r.onlyEmitError)return;throw o}else if(r.delayInMs&&!this.closing&&!this.closed&&await this.delay(r.delayInMs,this.abortDelayController),i+1>=s)throw o}while(++i<s)}async moveStalledJobsToWait(){await this.trace(pe.SpanKind.INTERNAL,"moveStalledJobsToWait",this.name,async e=>{let r=await this.scripts.moveStalledJobsToWait();e?.setAttributes({[pe.TelemetryAttributes.WorkerId]:this.id,[pe.TelemetryAttributes.WorkerName]:this.opts.name,[pe.TelemetryAttributes.WorkerStalledJobs]:r}),r.forEach(n=>{e?.addEvent("job stalled",{[pe.TelemetryAttributes.JobId]:n}),this.emit("stalled",n,"active")})})}moveLimitedBackToWait(e,r){return e.moveToWait(r)}};qb.Worker=kA});var t9=h(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});var Qe=(nr(),Pt(rr));Qe.__exportStar($I(),Ue);Qe.__exportStar(UI(),Ue);Qe.__exportStar(zI(),Ue);Qe.__exportStar(HI(),Ue);Qe.__exportStar(N3(),Ue);Qe.__exportStar(ly(),Ue);Qe.__exportStar(BG(),Ue);Qe.__exportStar(Kd(),Ue);Qe.__exportStar(VG(),Ue);Qe.__exportStar(QG(),Ue);Qe.__exportStar(r5(),Ue);Qe.__exportStar(Qc(),Ue);Qe.__exportStar(Rb(),Ue);Qe.__exportStar(yA(),Ue);Qe.__exportStar(ro(),Ue);Qe.__exportStar(BB(),Ue);Qe.__exportStar(HB(),Ue);Qe.__exportStar(xA(),Ue);Qe.__exportStar(jy(),Ue);Qe.__exportStar(YB(),Ue);Qe.__exportStar(Md(),Ue);Qe.__exportStar(Mb(),Ue);Qe.__exportStar(TA(),Ue);Qe.__exportStar(W1(),Ue);Qe.__exportStar(e9(),Ue)});var n9=h(r9=>{"use strict";Object.defineProperty(r9,"__esModule",{value:!0})});var s9=h(i9=>{"use strict";Object.defineProperty(i9,"__esModule",{value:!0})});var a9=h(o9=>{"use strict";Object.defineProperty(o9,"__esModule",{value:!0})});var l9=h(c9=>{"use strict";Object.defineProperty(c9,"__esModule",{value:!0})});var d9=h(u9=>{"use strict";Object.defineProperty(u9,"__esModule",{value:!0})});var f9=h(p9=>{"use strict";Object.defineProperty(p9,"__esModule",{value:!0})});var h9=h(m9=>{"use strict";Object.defineProperty(m9,"__esModule",{value:!0})});var g9=h(y9=>{"use strict";Object.defineProperty(y9,"__esModule",{value:!0})});var v9=h(b9=>{"use strict";Object.defineProperty(b9,"__esModule",{value:!0})});var S9=h(E9=>{"use strict";Object.defineProperty(E9,"__esModule",{value:!0})});var w9=h(x9=>{"use strict";Object.defineProperty(x9,"__esModule",{value:!0})});var I9=h(_9=>{"use strict";Object.defineProperty(_9,"__esModule",{value:!0})});var k9=h(T9=>{"use strict";Object.defineProperty(T9,"__esModule",{value:!0})});var R9=h(A9=>{"use strict";Object.defineProperty(A9,"__esModule",{value:!0})});var C9=h(O9=>{"use strict";Object.defineProperty(O9,"__esModule",{value:!0})});var P9=h(j9=>{"use strict";Object.defineProperty(j9,"__esModule",{value:!0})});var D9=h(K9=>{"use strict";Object.defineProperty(K9,"__esModule",{value:!0})});var N9=h(M9=>{"use strict";Object.defineProperty(M9,"__esModule",{value:!0})});var q9=h(Fb=>{"use strict";Object.defineProperty(Fb,"__esModule",{value:!0});Fb.ClientType=void 0;var L9;(function(t){t.blocking="blocking",t.normal="normal"})(L9||(Fb.ClientType=L9={}))});var $9=h(F9=>{"use strict";Object.defineProperty(F9,"__esModule",{value:!0})});var J9=h(U9=>{"use strict";Object.defineProperty(U9,"__esModule",{value:!0})});var G9=h(z9=>{"use strict";Object.defineProperty(z9,"__esModule",{value:!0})});var H9=h(B9=>{"use strict";Object.defineProperty(B9,"__esModule",{value:!0})});var W9=h(V9=>{"use strict";Object.defineProperty(V9,"__esModule",{value:!0})});var Q9=h(Y9=>{"use strict";Object.defineProperty(Y9,"__esModule",{value:!0})});var Z9=h(X9=>{"use strict";Object.defineProperty(X9,"__esModule",{value:!0})});var tH=h(eH=>{"use strict";Object.defineProperty(eH,"__esModule",{value:!0})});var nH=h(rH=>{"use strict";Object.defineProperty(rH,"__esModule",{value:!0})});var sH=h(iH=>{"use strict";Object.defineProperty(iH,"__esModule",{value:!0})});var aH=h(oH=>{"use strict";Object.defineProperty(oH,"__esModule",{value:!0})});var lH=h(cH=>{"use strict";Object.defineProperty(cH,"__esModule",{value:!0})});var dH=h(uH=>{"use strict";Object.defineProperty(uH,"__esModule",{value:!0})});var fH=h(pH=>{"use strict";Object.defineProperty(pH,"__esModule",{value:!0})});var hH=h(mH=>{"use strict";Object.defineProperty(mH,"__esModule",{value:!0})});var yH=h(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});var Ie=(nr(),Pt(rr));Ie.__exportStar(n9(),Ee);Ie.__exportStar(s9(),Ee);Ie.__exportStar(a9(),Ee);Ie.__exportStar(l9(),Ee);Ie.__exportStar(d9(),Ee);Ie.__exportStar(f9(),Ee);Ie.__exportStar(h9(),Ee);Ie.__exportStar(g9(),Ee);Ie.__exportStar(v9(),Ee);Ie.__exportStar(S9(),Ee);Ie.__exportStar(w9(),Ee);Ie.__exportStar(I9(),Ee);Ie.__exportStar(k9(),Ee);Ie.__exportStar(R9(),Ee);Ie.__exportStar(C9(),Ee);Ie.__exportStar(P9(),Ee);Ie.__exportStar(D9(),Ee);Ie.__exportStar(N9(),Ee);Ie.__exportStar(q9(),Ee);Ie.__exportStar($9(),Ee);Ie.__exportStar(J9(),Ee);Ie.__exportStar(G9(),Ee);Ie.__exportStar(H9(),Ee);Ie.__exportStar(W9(),Ee);Ie.__exportStar(Q9(),Ee);Ie.__exportStar(Z9(),Ee);Ie.__exportStar(tH(),Ee);Ie.__exportStar(nH(),Ee);Ie.__exportStar(sH(),Ee);Ie.__exportStar(aH(),Ee);Ie.__exportStar(lH(),Ee);Ie.__exportStar(dH(),Ee);Ie.__exportStar(fH(),Ee);Ie.__exportStar(hH(),Ee)});var bH=h(gH=>{"use strict";Object.defineProperty(gH,"__esModule",{value:!0})});var EH=h(vH=>{"use strict";Object.defineProperty(vH,"__esModule",{value:!0})});var xH=h(SH=>{"use strict";Object.defineProperty(SH,"__esModule",{value:!0})});var _H=h(wH=>{"use strict";Object.defineProperty(wH,"__esModule",{value:!0})});var TH=h(IH=>{"use strict";Object.defineProperty(IH,"__esModule",{value:!0})});var AH=h(kH=>{"use strict";Object.defineProperty(kH,"__esModule",{value:!0})});var OH=h(RH=>{"use strict";Object.defineProperty(RH,"__esModule",{value:!0})});var jH=h(CH=>{"use strict";Object.defineProperty(CH,"__esModule",{value:!0})});var KH=h(PH=>{"use strict";Object.defineProperty(PH,"__esModule",{value:!0})});var MH=h(DH=>{"use strict";Object.defineProperty(DH,"__esModule",{value:!0})});var LH=h(NH=>{"use strict";Object.defineProperty(NH,"__esModule",{value:!0})});var qH=h(zr=>{"use strict";Object.defineProperty(zr,"__esModule",{value:!0});var Ln=(nr(),Pt(rr));Ln.__exportStar(bH(),zr);Ln.__exportStar(EH(),zr);Ln.__exportStar(xH(),zr);Ln.__exportStar(_H(),zr);Ln.__exportStar(TH(),zr);Ln.__exportStar(AH(),zr);Ln.__exportStar(OH(),zr);Ln.__exportStar(jH(),zr);Ln.__exportStar(KH(),zr);Ln.__exportStar(MH(),zr);Ln.__exportStar(LH(),zr)});var $H=h(FH=>{"use strict";Object.defineProperty(FH,"__esModule",{value:!0})});var UH=h(ts=>{"use strict";Object.defineProperty(ts,"__esModule",{value:!0});var ya=(nr(),Pt(rr));ya.__exportStar(t9(),ts);ya.__exportStar(_r(),ts);ya.__exportStar(yH(),ts);ya.__exportStar(qH(),ts);ya.__exportStar(Dr(),ts);ya.__exportStar($H(),ts);ya.__exportStar(Id(),ts)});var Sl,PAe,$b,JH=R(()=>{"use strict";Sl=tt(UH(),1);fe();PAe=300*1e3,$b=class t{name;config;concurrency;lockDurationMs;defaultJobOptions;queueFactory;workerFactory;queue=null;worker=null;queueEvents=null;started=!1;counters={stalled:0,errored:0};listeners=[];jobStartTimes=new Map;recentlyStalled=new Map;static STALLED_DEDUPE_WINDOW_MS=3e4;constructor(e){this.name=e.name,this.config=e.config,this.concurrency=e.concurrency??1,this.lockDurationMs=e.lockDurationMs??PAe,this.defaultJobOptions=e.defaultJobOptions??{attempts:3,backoff:{type:"exponential",delay:5e3},removeOnComplete:{age:10080*60,count:1e3},removeOnFail:{age:720*60*60,count:1e3}},this.queueFactory=e.queueFactory,this.workerFactory=e.workerFactory}getQueue(){if(this.queue)return this.queue;let e={connection:this.config.connection,prefix:this.config.prefix,defaultJobOptions:this.defaultJobOptions};return this.queue=this.queueFactory?this.queueFactory(this.name,e):new Sl.Queue(this.name,e),this.queue}async addToQueue(e,r,n){await this.getQueue().add(this.name,r,{...this.defaultJobOptions,...n,jobId:e})}async add(e,r,n){if(e.includes(":"))throw new Error(`server job ID must not contain ':' (got ${e})`);try{await this.addToQueue(e,r,n)}catch(i){let s=i instanceof Error?i:new Error(String(i));throw this.toRedisUnavailableError(s)}}async getJob(e){try{return await this.getQueue().getJob(e)}catch(r){let n=r instanceof Error?r:new Error(String(r));throw this.toRedisUnavailableError(n)}}async remove(e){try{await this.getQueue().remove(e)}catch(r){let n=r instanceof Error?r:new Error(String(r));throw this.toRedisUnavailableError(n)}}async readCounts(){let e=await this.getQueue().getJobCounts("waiting","active","delayed","failed","completed");return{waiting:e.waiting??0,active:e.active??0,delayed:e.delayed??0,failed:e.failed??0,completed:e.completed??0}}async getCounts(){try{return await this.readCounts()}catch(e){let r=e instanceof Error?e:new Error(String(e));throw this.toRedisUnavailableError(r)}}notifyStalled(e,r){if(this.recentlyStalled.has(e)){x.debug?.("QUEUE",`[generation] job=${e} stalled (suppressed duplicate from ${r})`,{queue:this.name,jobId:e,source:r});return}let n=setTimeout(()=>{this.recentlyStalled.delete(e)},t.STALLED_DEDUPE_WINDOW_MS);typeof n.unref=="function"&&n.unref(),this.recentlyStalled.set(e,n),this.counters.stalled+=1,x.warn("QUEUE",`[generation] job=${e} stalled${r==="queue-events"?" (queue-events)":""}`,{queue:this.name,jobId:e,source:r});for(let i of this.listeners)try{i.onStalled?.(e)}catch{}}notifyQueueError(e,r){this.counters.errored+=1,x.warn("QUEUE",`${this.name} ${r} error`,{error:e instanceof Error?e.message:String(e)});for(let n of this.listeners)try{n.onError?.(e)}catch{}}start(e){if(this.started)throw new Error(`ServerJobQueue ${this.name} is already started`);let r={connection:this.config.connection,prefix:this.config.prefix,autorun:!1,concurrency:this.concurrency,lockDuration:this.lockDurationMs},n=this.workerFactory?this.workerFactory(this.name,e,r):new Sl.Worker(this.name,e,r);if(n.on("error",i=>this.notifyQueueError(i,"worker")),typeof n.on=="function"){let i=n;i.on("active",s=>{s.id&&this.jobStartTimes.set(s.id,Date.now())}),i.on("completed",(s,o)=>{let a=s.id?this.jobStartTimes.get(s.id):void 0,c=a?Date.now()-a:0;s.id&&this.jobStartTimes.delete(s.id);let l=s.data?.source_type??"?";x.info("QUEUE",`[generation] job=${s.id??"?"} source_type=${l} duration=${c}ms`,{queue:this.name,jobId:s.id??null,sourceType:l,durationMs:c});for(let u of this.listeners)try{u.onCompleted?.(s.id??"?",c,o)}catch{}}),i.on("failed",(s,o)=>{s?.id&&this.jobStartTimes.delete(s.id);let a=s?.data?.source_type??"?",c=s?.attemptsMade??0;x.warn("QUEUE",`[generation] job=${s?.id??"?"} source_type=${a} attempts=${c} reason=${o.message}`,{queue:this.name,jobId:s?.id??null,sourceType:a,attemptsMade:c,reason:o.message});for(let l of this.listeners)try{l.onFailed?.(s?.id,c,o.message)}catch{}}),i.on("progress",(s,o)=>{x.debug?.("QUEUE",`[generation] job=${s.id??"?"} progress`,{queue:this.name,jobId:s.id??null,progress:o})}),i.on("stalled",s=>this.notifyStalled(s,"worker"))}if(n.run(),this.worker=n,!this.workerFactory)try{let i=new Sl.QueueEvents(this.name,{connection:this.config.connection,prefix:this.config.prefix});i.on("stalled",({jobId:s})=>this.notifyStalled(s,"queue-events")),i.on("error",s=>this.notifyQueueError(s,"queue-events")),this.queueEvents=i}catch(i){x.warn("QUEUE",`${this.name} failed to start QueueEvents listener`,{error:i instanceof Error?i.message:String(i)})}this.started=!0}observe(e){this.listeners.push(e)}getLifecycleCounters(){return{...this.counters}}isStarted(){return this.started}async close(){let e=[];if(this.queueEvents){try{await this.queueEvents.close()}catch(r){let n=r instanceof Error?r:new Error(String(r));x.warn("QUEUE",`${this.name} failed to close QueueEvents`,{queue:this.name},n),e.push(n)}this.queueEvents=null}if(this.worker){try{await this.worker.close()}catch(r){let n=r instanceof Error?r:new Error(String(r));x.warn("QUEUE",`${this.name} failed to close worker`,{queue:this.name},n),e.push(n)}this.worker=null,this.started=!1}if(this.queue){try{await this.queue.close()}catch(r){let n=r instanceof Error?r:new Error(String(r));x.warn("QUEUE",`${this.name} failed to close queue`,{queue:this.name},n),e.push(n)}this.queue=null}for(let r of this.recentlyStalled.values())clearTimeout(r);if(this.recentlyStalled.clear(),e.length>0)throw e[0]}toRedisUnavailableError(e){let r=e instanceof Error?e.message:String(e);return new Error(`ServerJobQueue ${this.name} requires Redis/Valkey when CLAUDE_MEM_QUEUE_ENGINE=bullmq: ${r}`)}}});var AA,ga,RA=R(()=>{"use strict";JH();wh();fe();AA=["event","summary"],ga=class{constructor(e,r){this.config=e;if(e.engine!=="bullmq")throw new Error(`ActiveServerQueueManager requires CLAUDE_MEM_QUEUE_ENGINE=bullmq (got ${e.engine}); do not instantiate when bullmq is not selected.`);this.queues=r??this.buildQueues(e)}config;kind="queue-manager";queues;closed=!1;getQueue(e){let r=this.queues.get(e);if(!r)throw new Error(`unknown server generation job kind: ${e}`);return r}start(e,r){this.getQueue(e).start(r)}getHealth(){if(this.closed)return{status:"errored",reason:"queue-manager closed"};let e=AA.map(r=>({kind:r,name:Mc[r]}));return{status:"active",reason:"BullMQ-backed queue manager wired",details:{engine:this.config.engine,mode:this.config.mode,host:this.config.host,port:this.config.port,prefix:this.config.prefix,lanes:e}}}async getLaneMetrics(){let e=[];for(let r of AA){let n=this.queues.get(r);if(!n)continue;let i=n.getLifecycleCounters();try{e.push(await this.readLaneMetric(r,n,i.stalled))}catch(s){let o=s instanceof Error?s:new Error(String(s));x.warn("QUEUE","failed to read lane counts; reporting lane as unavailable",{kind:r,name:Mc[r]},o),e.push({kind:r,name:Mc[r],waiting:0,active:0,completed:0,failed:0,delayed:0,stalled:i.stalled,unavailable:!0,unavailableReason:o.message})}}return e}async readLaneMetric(e,r,n){let i=await r.getCounts();return{kind:e,name:Mc[e],waiting:i.waiting,active:i.active,completed:i.completed,failed:i.failed,delayed:i.delayed,stalled:n,unavailable:!1}}async close(){if(this.closed)return;this.closed=!0;let e=[];for(let r of this.queues.values())try{await r.close()}catch(n){let i=n instanceof Error?n:new Error(String(n));x.warn("QUEUE","error closing server job queue",{},i),e.push(i)}if(e.length>0)throw x.warn("QUEUE","errors closing server queue manager",{count:e.length,first:e[0].message}),e[0]}buildQueues(e){let r=new Map;for(let n of AA)r.set(n,new $b({name:Mc[n],config:e}));return r}}});var OA,Yd,Gb,zH,Jb,Ub,zb,GH=R(()=>{"use strict";OA=tt(Ef(),1),Yd=tt(require("path"),1),Gb=require("fs");Hn();fe();zH=(()=>{let t=go();return[Yd.default.join(t,"ui","viewer.html"),Yd.default.join(t,"plugin","ui","viewer.html")]})(),Jb=zH.find(t=>(0,Gb.existsSync)(t))??null,Ub=Jb?(0,Gb.readFileSync)(Jb):null;Jb?x.info("SYSTEM","Cached viewer.html at boot (server runtime)",{path:Jb,bytes:Ub.byteLength}):x.warn("SYSTEM","viewer.html not found for server runtime",{candidates:zH});zb=class{setupRoutes(e){let r=go();e.use(OA.default.static(Yd.default.join(r,"ui"))),e.use(OA.default.static(Yd.default.join(r,"plugin","ui"))),e.get("/",(n,i)=>{if(!Ub){i.status(503).json({error:"ViewerUnavailable",message:"Viewer UI not found at any expected location"});return}i.setHeader("Content-Type","text/html; charset=utf-8"),i.send(Ub)})}static hasViewerHtml(){return Ub!==null}}});var Bb,Qd,KAe,no,Hb=R(()=>{"use strict";Bb=require("fs"),Qd=require("path");fe();Hn();KAe=/^[a-z0-9]+(?:-[a-z0-9]+)*(?:--[a-z0-9]+(?:-[a-z0-9]+)*)?$/,no=class t{static instance=null;activeMode=null;activeModeId=null;modeDirs;constructor(){let e=go(),r=[...process.env.CLAUDE_MEM_MODES_DIR?[process.env.CLAUDE_MEM_MODES_DIR]:[],(0,Qd.join)(Le.dataDir(),"modes"),(0,Qd.join)(e,"modes"),(0,Qd.join)(e,"..","plugin","modes")];this.modeDirs=[...new Set(r)]}static getInstance(){return t.instance||(t.instance=new t),t.instance}parseInheritance(e){let r=e.split("--");if(r.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(r.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:r[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,r){let n={...e};for(let i in r){let s=r[i],o=e[i];this.isPlainObject(s)&&this.isPlainObject(o)?n[i]=this.deepMerge(o,s):n[i]=s}return n}loadModeFile(e){if(!KAe.test(e))throw new Error(`Invalid mode ID: ${e}`);let r=this.modeDirs.map(i=>(0,Qd.join)(i,`${e}.json`)).find(i=>(0,Bb.existsSync)(i));if(!r)throw new Error(`Mode file not found: ${e}.json (searched: ${this.modeDirs.join(", ")})`);let n=(0,Bb.readFileSync)(r,"utf-8");return JSON.parse(n)}loadMode(e){let r=this.parseInheritance(e);if(!r.hasParent)try{let c=this.loadModeFile(e);return this.activeMode=c,this.activeModeId=e,x.debug("SYSTEM",`Loaded mode: ${c.name} (${e})`,void 0,{types:c.observation_types.map(l=>l.id),concepts:c.observation_concepts.map(l=>l.id)}),c}catch(c){if(c instanceof Error?x.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{message:c.message}):x.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{error:String(c)}),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:n,overrideId:i}=r,s;try{s=this.loadMode(n)}catch(c){c instanceof Error?x.warn("WORKER",`Parent mode '${n}' not found for ${e}, falling back to 'code'`,{message:c.message}):x.warn("WORKER",`Parent mode '${n}' not found for ${e}, falling back to 'code'`,{error:String(c)}),s=this.loadMode("code")}let o;try{o=this.loadModeFile(i),x.debug("SYSTEM",`Loaded override file: ${i} for parent ${n}`)}catch(c){return c instanceof Error?x.warn("WORKER",`Override file '${i}' not found, using parent mode '${n}' only`,{message:c.message}):x.warn("WORKER",`Override file '${i}' not found, using parent mode '${n}' only`,{error:String(c)}),this.activeMode=s,s}if(!o)return x.warn("SYSTEM",`Invalid override file: ${i}, using parent mode '${n}' only`),this.activeMode=s,s;let a=this.deepMerge(s,o);return this.activeMode=a,this.activeModeId=e,x.debug("SYSTEM",`Loaded mode with inheritance: ${a.name} (${e} = ${n} + ${i})`,void 0,{parent:n,override:i,types:a.observation_types.map(c=>c.id),concepts:a.observation_concepts.map(c=>c.id)}),a}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getActiveModeId(){if(!this.activeModeId)throw new Error("No mode loaded. Call loadMode() first.");return this.activeModeId}getObservationTypes(){return this.getActiveMode().observation_types}getTypeIcon(e){return this.getObservationTypes().find(n=>n.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(n=>n.id===e)?.work_emoji||"\u{1F4DD}"}}});function BH(t){return{id:t.id,name:t.name,metadata:ht(t.metadata),createdAtEpoch:De(t.created_at),updatedAtEpoch:De(t.updated_at)}}function DAe(t){return{teamId:t.team_id,userId:t.user_id,role:t.role,metadata:ht(t.metadata),createdAtEpoch:De(t.created_at),updatedAtEpoch:De(t.updated_at)}}var ba,Vb=R(()=>{"use strict";wn();ba=class{constructor(e){this.client=e}client;async create(e){let r=e.id??Ze(),n=await se(this.client,`
|
||
INSERT INTO teams (id, name, metadata)
|
||
VALUES ($1, $2, $3::jsonb)
|
||
RETURNING *
|
||
`,[r,e.name,JSON.stringify(e.metadata??{})]);return BH(n)}async addMember(e){let r=await se(this.client,`
|
||
INSERT INTO team_members (team_id, user_id, role, metadata)
|
||
VALUES ($1, $2, $3, $4::jsonb)
|
||
ON CONFLICT (team_id, user_id) DO UPDATE SET
|
||
role = excluded.role,
|
||
metadata = excluded.metadata,
|
||
updated_at = now()
|
||
RETURNING *
|
||
`,[e.teamId,e.userId,e.role,JSON.stringify(e.metadata??{})]);return DAe(r)}async getByIdForUser(e){let r=await se(this.client,`
|
||
SELECT teams.*
|
||
FROM teams
|
||
INNER JOIN team_members ON team_members.team_id = teams.id
|
||
WHERE teams.id = $1 AND team_members.user_id = $2
|
||
`,[e.id,e.userId]);return r?BH(r):null}}});async function Wb(t){if(LAe(t)){let e=await t.connect();try{await Wb(e)}finally{e.release()}return}await t.query("BEGIN");try{await NAe(t),await t.query("COMMIT")}catch(e){let r=e instanceof Error?e:new Error(String(e));throw x.error("SYSTEM","postgres schema bootstrap failed, rolling back",{},r),await t.query("ROLLBACK"),e}}async function NAe(t){await t.query(qAe),await t.query(`
|
||
INSERT INTO server_beta_schema_migrations (version, description)
|
||
VALUES ($1, $2)
|
||
ON CONFLICT (version) DO NOTHING
|
||
`,[Xd,"phase 1 postgres observation storage foundation"])}function LAe(t){let e=t;return typeof e.connect=="function"&&typeof e.release!="function"&&typeof e.totalCount=="number"&&typeof e.idleCount=="number"&&typeof e.waitingCount=="number"}var Xd,MAe,qAe,CA=R(()=>{"use strict";fe();Xd=1,MAe=["server_beta_schema_migrations","teams","projects","team_members","api_keys","audit_log","server_sessions","agent_events","observation_generation_jobs","observations","observation_sources","observation_generation_job_events","usage_events","rate_limit_counters"];qAe=`
|
||
CREATE TABLE IF NOT EXISTS server_beta_schema_migrations (
|
||
version INTEGER PRIMARY KEY,
|
||
description TEXT NOT NULL,
|
||
applied_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS teams (
|
||
id TEXT PRIMARY KEY,
|
||
name TEXT NOT NULL,
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS projects (
|
||
id TEXT PRIMARY KEY,
|
||
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL,
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
UNIQUE (id, team_id)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS team_members (
|
||
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
||
user_id TEXT NOT NULL,
|
||
role TEXT NOT NULL,
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
PRIMARY KEY (team_id, user_id)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS api_keys (
|
||
id TEXT PRIMARY KEY,
|
||
key_hash TEXT NOT NULL UNIQUE,
|
||
team_id TEXT REFERENCES teams(id) ON DELETE CASCADE,
|
||
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
||
actor_id TEXT NOT NULL,
|
||
scopes JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||
revoked_at TIMESTAMPTZ,
|
||
expires_at TIMESTAMPTZ,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
CHECK (project_id IS NULL OR team_id IS NOT NULL),
|
||
FOREIGN KEY (project_id, team_id) REFERENCES projects(id, team_id) ON DELETE CASCADE
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS audit_log (
|
||
id TEXT PRIMARY KEY,
|
||
team_id TEXT REFERENCES teams(id) ON DELETE SET NULL,
|
||
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
||
actor_id TEXT,
|
||
api_key_id TEXT REFERENCES api_keys(id) ON DELETE SET NULL,
|
||
action TEXT NOT NULL,
|
||
resource_type TEXT NOT NULL,
|
||
resource_id TEXT,
|
||
details JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
CHECK (project_id IS NULL OR team_id IS NOT NULL),
|
||
FOREIGN KEY (project_id, team_id) REFERENCES projects(id, team_id) ON DELETE SET NULL
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS server_sessions (
|
||
id TEXT PRIMARY KEY,
|
||
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
||
external_session_id TEXT,
|
||
idempotency_key TEXT,
|
||
content_session_id TEXT,
|
||
agent_id TEXT,
|
||
agent_type TEXT,
|
||
platform_source TEXT,
|
||
generation_status TEXT NOT NULL DEFAULT 'idle',
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
ended_at TIMESTAMPTZ,
|
||
last_generated_at TIMESTAMPTZ,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
FOREIGN KEY (project_id, team_id) REFERENCES projects(id, team_id) ON DELETE CASCADE
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS agent_events (
|
||
id TEXT PRIMARY KEY,
|
||
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
||
server_session_id TEXT REFERENCES server_sessions(id) ON DELETE SET NULL,
|
||
source_adapter TEXT NOT NULL,
|
||
source_event_id TEXT,
|
||
idempotency_key TEXT NOT NULL,
|
||
event_type TEXT NOT NULL,
|
||
payload JSONB NOT NULL,
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
occurred_at TIMESTAMPTZ NOT NULL,
|
||
received_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
UNIQUE (idempotency_key),
|
||
UNIQUE (id, project_id, team_id),
|
||
FOREIGN KEY (project_id, team_id) REFERENCES projects(id, team_id) ON DELETE CASCADE
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS observation_generation_jobs (
|
||
id TEXT PRIMARY KEY,
|
||
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
||
agent_event_id TEXT REFERENCES agent_events(id) ON DELETE CASCADE,
|
||
source_type TEXT NOT NULL CHECK (source_type IN ('agent_event', 'session_summary', 'observation_reindex')),
|
||
source_id TEXT NOT NULL,
|
||
server_session_id TEXT REFERENCES server_sessions(id) ON DELETE SET NULL,
|
||
job_type TEXT NOT NULL,
|
||
status TEXT NOT NULL CHECK (status IN ('queued', 'processing', 'completed', 'failed', 'cancelled')),
|
||
idempotency_key TEXT NOT NULL UNIQUE,
|
||
bullmq_job_id TEXT UNIQUE,
|
||
attempts INTEGER NOT NULL DEFAULT 0,
|
||
max_attempts INTEGER NOT NULL DEFAULT 3,
|
||
next_attempt_at TIMESTAMPTZ,
|
||
locked_at TIMESTAMPTZ,
|
||
locked_by TEXT,
|
||
completed_at TIMESTAMPTZ,
|
||
failed_at TIMESTAMPTZ,
|
||
cancelled_at TIMESTAMPTZ,
|
||
last_error JSONB,
|
||
payload JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
CHECK (
|
||
(source_type = 'agent_event' AND agent_event_id IS NOT NULL AND source_id = agent_event_id)
|
||
OR
|
||
(source_type = 'session_summary' AND agent_event_id IS NULL AND server_session_id IS NOT NULL AND source_id = server_session_id)
|
||
OR
|
||
(source_type = 'observation_reindex' AND agent_event_id IS NULL)
|
||
),
|
||
FOREIGN KEY (agent_event_id, project_id, team_id) REFERENCES agent_events(id, project_id, team_id) ON DELETE CASCADE,
|
||
FOREIGN KEY (project_id, team_id) REFERENCES projects(id, team_id) ON DELETE CASCADE
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS observations (
|
||
id TEXT PRIMARY KEY,
|
||
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
||
server_session_id TEXT REFERENCES server_sessions(id) ON DELETE SET NULL,
|
||
kind TEXT NOT NULL DEFAULT 'observation',
|
||
content TEXT NOT NULL,
|
||
content_search TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', content)) STORED,
|
||
generation_key TEXT,
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
embedding JSONB,
|
||
created_by_job_id TEXT REFERENCES observation_generation_jobs(id) ON DELETE SET NULL,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
FOREIGN KEY (project_id, team_id) REFERENCES projects(id, team_id) ON DELETE CASCADE
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS observation_sources (
|
||
id TEXT PRIMARY KEY,
|
||
observation_id TEXT NOT NULL REFERENCES observations(id) ON DELETE CASCADE,
|
||
agent_event_id TEXT REFERENCES agent_events(id) ON DELETE CASCADE,
|
||
generation_job_id TEXT REFERENCES observation_generation_jobs(id) ON DELETE SET NULL,
|
||
source_type TEXT NOT NULL CHECK (source_type IN ('agent_event', 'session_summary', 'observation_reindex', 'manual')),
|
||
source_id TEXT NOT NULL,
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
UNIQUE (observation_id, source_type, source_id),
|
||
UNIQUE (source_type, source_id, generation_job_id, observation_id),
|
||
CHECK (
|
||
(source_type = 'agent_event' AND agent_event_id IS NOT NULL AND source_id = agent_event_id)
|
||
OR
|
||
(source_type <> 'agent_event' AND agent_event_id IS NULL)
|
||
)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS observation_generation_job_events (
|
||
id TEXT PRIMARY KEY,
|
||
generation_job_id TEXT NOT NULL REFERENCES observation_generation_jobs(id) ON DELETE CASCADE,
|
||
event_type TEXT NOT NULL CHECK (event_type IN ('queued', 'enqueued', 'processing', 'retry_scheduled', 'completed', 'failed', 'cancelled')),
|
||
status_after TEXT NOT NULL CHECK (status_after IN ('queued', 'processing', 'completed', 'failed', 'cancelled')),
|
||
attempt INTEGER NOT NULL DEFAULT 0,
|
||
details JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_agent_events_project_session ON agent_events(project_id, server_session_id, occurred_at);
|
||
ALTER TABLE server_sessions ADD COLUMN IF NOT EXISTS idempotency_key TEXT;
|
||
ALTER TABLE server_sessions DROP CONSTRAINT IF EXISTS server_sessions_project_id_external_session_id_key;
|
||
-- #2560 \u2014 platform_source on agent_events (consistent with server_sessions and
|
||
-- the plan-09 scoping): which platform produced the event (claude-code,
|
||
-- opencode, cursor, ...). Idempotent so an existing DB upgrades in place.
|
||
ALTER TABLE agent_events ADD COLUMN IF NOT EXISTS platform_source TEXT;
|
||
CREATE INDEX IF NOT EXISTS idx_agent_events_platform_source
|
||
ON agent_events(team_id, project_id, platform_source, occurred_at)
|
||
WHERE platform_source IS NOT NULL;
|
||
CREATE INDEX IF NOT EXISTS idx_server_sessions_platform_source
|
||
ON server_sessions(team_id, project_id, platform_source, started_at)
|
||
WHERE platform_source IS NOT NULL;
|
||
ALTER TABLE observations ADD COLUMN IF NOT EXISTS content_search TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', content)) STORED;
|
||
ALTER TABLE observations DROP CONSTRAINT IF EXISTS observations_generation_key_key;
|
||
ALTER TABLE observation_generation_jobs DROP CONSTRAINT IF EXISTS observation_generation_jobs_source_type_source_id_job_type_key;
|
||
CREATE UNIQUE INDEX IF NOT EXISTS idx_server_sessions_project_idempotency
|
||
ON server_sessions(project_id, idempotency_key)
|
||
WHERE idempotency_key IS NOT NULL;
|
||
CREATE UNIQUE INDEX IF NOT EXISTS idx_server_sessions_external_session_legacy
|
||
ON server_sessions(project_id, external_session_id)
|
||
WHERE external_session_id IS NOT NULL AND platform_source IS NULL;
|
||
CREATE UNIQUE INDEX IF NOT EXISTS idx_server_sessions_external_session_platform
|
||
ON server_sessions(project_id, platform_source, external_session_id)
|
||
WHERE external_session_id IS NOT NULL AND platform_source IS NOT NULL;
|
||
DROP INDEX IF EXISTS idx_server_sessions_content_session;
|
||
-- Supports platform-aware session linkage lookup on the /v1/events ingest path.
|
||
CREATE INDEX IF NOT EXISTS idx_server_sessions_content_session_platform
|
||
ON server_sessions(team_id, project_id, platform_source, content_session_id, started_at DESC)
|
||
WHERE content_session_id IS NOT NULL;
|
||
CREATE UNIQUE INDEX IF NOT EXISTS idx_observations_generation_key_scope
|
||
ON observations(team_id, project_id, generation_key)
|
||
WHERE generation_key IS NOT NULL;
|
||
CREATE UNIQUE INDEX IF NOT EXISTS idx_observation_jobs_source_scope
|
||
ON observation_generation_jobs(team_id, project_id, source_type, source_id, job_type);
|
||
CREATE INDEX IF NOT EXISTS idx_projects_team ON projects(team_id, id);
|
||
CREATE INDEX IF NOT EXISTS idx_agent_events_team_project ON agent_events(team_id, project_id, occurred_at);
|
||
CREATE INDEX IF NOT EXISTS idx_observations_project_session ON observations(project_id, server_session_id, created_at);
|
||
CREATE INDEX IF NOT EXISTS idx_observations_team_project ON observations(team_id, project_id, created_at);
|
||
CREATE INDEX IF NOT EXISTS idx_observations_content_search ON observations USING GIN (content_search);
|
||
CREATE INDEX IF NOT EXISTS idx_observation_sources_event ON observation_sources(agent_event_id);
|
||
CREATE INDEX IF NOT EXISTS idx_observation_sources_source ON observation_sources(source_type, source_id);
|
||
CREATE INDEX IF NOT EXISTS idx_observation_jobs_status_next_attempt ON observation_generation_jobs(status, next_attempt_at, created_at);
|
||
CREATE INDEX IF NOT EXISTS idx_observation_jobs_team_project ON observation_generation_jobs(team_id, project_id, status, created_at);
|
||
CREATE INDEX IF NOT EXISTS idx_observation_jobs_event ON observation_generation_jobs(agent_event_id);
|
||
CREATE INDEX IF NOT EXISTS idx_observation_jobs_source ON observation_generation_jobs(source_type, source_id);
|
||
CREATE INDEX IF NOT EXISTS idx_observation_job_events_job_created ON observation_generation_job_events(generation_job_id, created_at);
|
||
CREATE INDEX IF NOT EXISTS idx_audit_log_scope_created ON audit_log(project_id, team_id, created_at);
|
||
|
||
-- Usage metering: append-only per-team usage, aggregated for quotas + billing.
|
||
-- kind is open-ended ('request', 'tokens_in', 'tokens_out', 'observation', ...).
|
||
CREATE TABLE IF NOT EXISTS usage_events (
|
||
id TEXT PRIMARY KEY,
|
||
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
||
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
||
kind TEXT NOT NULL,
|
||
quantity BIGINT NOT NULL DEFAULT 1,
|
||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_usage_events_team_created ON usage_events(team_id, created_at);
|
||
CREATE INDEX IF NOT EXISTS idx_usage_events_team_kind_created ON usage_events(team_id, kind, created_at);
|
||
|
||
-- Fixed-window rate-limit counters. subject_id is the api key id (per-key limit).
|
||
CREATE TABLE IF NOT EXISTS rate_limit_counters (
|
||
subject_id TEXT NOT NULL,
|
||
window_start TIMESTAMPTZ NOT NULL,
|
||
count BIGINT NOT NULL DEFAULT 0,
|
||
PRIMARY KEY (subject_id, window_start)
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_rate_limit_counters_window ON rate_limit_counters(window_start);
|
||
`});var Yb={};io(Yb,{PostgresAgentEventsRepository:()=>Xr,PostgresAuthRepository:()=>Nt,PostgresDataDeletionRepository:()=>cc,PostgresObservationGenerationJobEventsRepository:()=>Wt,PostgresObservationGenerationJobRepository:()=>dt,PostgresObservationRepository:()=>Zr,PostgresObservationSourcesRepository:()=>xo,PostgresProjectsRepository:()=>_n,PostgresRateLimitRepository:()=>$o,PostgresServerSessionsRepository:()=>zt,PostgresTeamsRepository:()=>ba,PostgresUsageRepository:()=>Kr,SERVER_POSTGRES_SCHEMA_VERSION:()=>Xd,SERVER_POSTGRES_TABLES:()=>MAe,bootstrapServerPostgresSchema:()=>Wb,buildAgentEventIdempotencyKey:()=>XM,buildObservationGenerationJobIdempotencyKey:()=>eN,buildObservationGenerationKey:()=>fS,buildServerSessionIdempotencyKey:()=>g$,closePostgresPool:()=>ele,createPostgresPool:()=>em,createPostgresStorageRepositories:()=>FAe,getPostgresDatabaseUrl:()=>XL,getSharedPostgresPool:()=>gx,parsePostgresConfig:()=>yu,withPostgresTransaction:()=>In});function FAe(t){return{teams:new ba(t),projects:new _n(t),auth:new Nt(t),sessions:new zt(t),agentEvents:new Xr(t),observations:new Zr(t),observationSources:new xo(t),observationGenerationJobs:new dt(t),observationGenerationJobEvents:new Wt(t),usage:new Kr(t),rateLimits:new $o(t)}}var Zd=R(()=>{"use strict";Qa();Oi();fs();su();Xa();js();Vb();Uo();xh();Qa();Oi();Zf();bx();fs();su();Ao();Xa();xh();CA();js();Vb();Uo()});function HH(t){return process.platform==="win32"?Math.round(t*jA.WINDOWS_MULTIPLIER):t}var jA,VH=R(()=>{"use strict";jA={HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5}});var Qb,PA,ep,$Ae,tp,WH=R(()=>{"use strict";Qb=require("fs"),PA=require("path"),ep=require("os");VH();Xl();$Ae="security_alert",tp=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(HH(jA.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_DATA_DIR:(0,PA.join)((0,ep.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,PA.join)((0,ep.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,ep.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let r=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,r){let n=r?this.applyEnvOverrides(e):e;return n.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(n.CLAUDE_MEM_WORKER_HOST),n}static getInt(e){let r=this.get(e);return parseInt(r,10)}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e,r=!0){try{if(!(0,Qb.existsSync)(e)){let l=this.getAllDefaults();try{za(e,l),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(u){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,u instanceof Error?u.message:String(u))}return this.finalizeSettings(l,r)}let n=(0,Qb.readFileSync)(e,"utf-8"),i=yo(n),s=i,o=i.env&&typeof i.env=="object"&&!Array.isArray(i.env),a=o&&Object.keys(i).some(l=>l!=="env");if(o&&(s=i.env,!a))try{za(e,s),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(l){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,l instanceof Error?l.message:String(l))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===$Ae){s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{za(e,a?{...i,env:s}:s),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(l){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,l instanceof Error?l.message:String(l))}}let c={...this.DEFAULTS};for(let l of Object.keys(this.DEFAULTS))s[l]!==void 0&&(c[l]=s[l]);return this.finalizeSettings(c,r)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let i=this.getAllDefaults();return this.finalizeSettings(i,r)}}}});function UAe(){let t=xl("CLAUDE_MEM_QUEUE_ENGINE").trim().toLowerCase();if(t==="sqlite"||t==="bullmq")return t;throw new Error(`Invalid CLAUDE_MEM_QUEUE_ENGINE=${t}; expected sqlite or bullmq`)}function XH(){let t=UAe(),e=JAe(xl("CLAUDE_MEM_REDIS_MODE")),r=xl("CLAUDE_MEM_REDIS_URL").trim()||null,n=xl("CLAUDE_MEM_REDIS_HOST").trim()||"127.0.0.1",i=zAe(xl("CLAUDE_MEM_REDIS_PORT")),s=GAe(xl("CLAUDE_MEM_QUEUE_REDIS_PREFIX")),o=r?HAe(r):BAe(n,i);return{engine:t,mode:e,url:r,host:r?YH(r).host:n,port:r?YH(r).port:i,prefix:s,connection:o}}function xl(t){if(process.env[t]!==void 0)return process.env[t];if((0,QH.existsSync)($E)){let e=tp.loadFromFile($E,!1)[t];if(e!==void 0)return e}return tp.get(t)}function JAe(t){let e=t.trim().toLowerCase();if(e==="external"||e==="managed"||e==="docker")return e;throw new Error(`Invalid CLAUDE_MEM_REDIS_MODE=${t}; expected external, managed, or docker`)}function zAe(t){let e=Number.parseInt(t,10);if(!Number.isInteger(e)||e<=0||e>65535)throw new Error(`Invalid CLAUDE_MEM_REDIS_PORT=${t}; expected a TCP port`);return e}function GAe(t){return(t.trim()||"claude_mem").replace(/[^a-zA-Z0-9_-]/g,"_")}function BAe(t,e){return{host:t,port:e,maxRetriesPerRequest:null,connectTimeout:1e3,lazyConnect:!0}}function HAe(t){let e=new URL(t);if(e.protocol!=="redis:"&&e.protocol!=="rediss:")throw new Error("CLAUDE_MEM_REDIS_URL must use redis:// or rediss://");let r=e.pathname.length>1?Number.parseInt(e.pathname.slice(1),10):void 0;if(r!==void 0&&(!Number.isInteger(r)||r<0))throw new Error(`Invalid Redis database in CLAUDE_MEM_REDIS_URL: ${e.pathname}`);return{host:e.hostname||"127.0.0.1",port:e.port?Number.parseInt(e.port,10):6379,username:e.username?decodeURIComponent(e.username):void 0,password:e.password?decodeURIComponent(e.password):void 0,db:r,tls:e.protocol==="rediss:"?{}:void 0,maxRetriesPerRequest:null,connectTimeout:1e3,lazyConnect:!0}}function YH(t){let e=new URL(t);return{host:e.hostname||"127.0.0.1",port:e.port?Number.parseInt(e.port,10):6379}}var QH,ZH=R(()=>{"use strict";QH=require("fs");WH();Hn()});function Xb(t){let e=Object.fromEntries(rV.map(i=>[i,0]));eV.lastIndex=0;let r=0,n=t.replace(eV,(i,s)=>(e[s]=(e[s]??0)+1,r+=1,""));return r>tV&&x.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:r,maxAllowed:tV,contentLength:t.length}),{stripped:n.trim(),counts:e}}var rV,eV,tV,VAe,HJe,VJe,KA=R(()=>{"use strict";fe();rV=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],eV=new RegExp(`<(${rV.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g"),tV=100;VAe=["task-notification"],HJe=new RegExp(`^\\s*<(${VAe.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),VJe=256*1024});function wl(t,e={}){let r=e.mode??WAe(),n=!1,i=!0,s=[];for(let m of t.events){let y=sV(m);y.hadPrivate&&(n=!0),y.body.length>0&&(i=!1,s.push(y.body))}let o=t.events.length>0&&i,a=t.project.serverSessionId?`
|
||
<server_session_id>${rs(t.project.serverSessionId)}</server_session_id>`:"",c=t.project.projectName?`
|
||
<project_name>${rs(t.project.projectName)}</project_name>`:"",l=YAe(r),u=t.job.sourceType==="session_summary",d=["You are reviewing a complete agent session. Return a single","<summary>...</summary> XML block describing the arc of the session. If the","session contains nothing worth recording (e.g., everything was scrubbed by","privacy filters or the activity was trivial), return a single self-closing","<skip_summary /> tag and nothing else. Do not include any prose outside the XML.","","Schema for the <summary> block (at least one of the first five is required):","<summary>"," <request>what the user asked for</request>"," <investigated>what was explored, and how</investigated>"," <learned>durable findings worth remembering later</learned>"," <completed>what was actually done</completed>"," <next_steps>what is left open</next_steps>"," <notes>anything else worth keeping</notes>","</summary>"],p=["You are observing an agent at work. Return one or more","<observation>...</observation> XML blocks summarizing durable, useful","discoveries from the events above. If the events contain nothing worth","recording (e.g., everything was scrubbed by privacy filters or the","activity was trivial), return a single self-closing <skip_summary />","tag and nothing else. Do not include any prose outside the XML.","","Schema for each <observation> block:",l];return{prompt:["<server_beta_observation_request>",` <project_id>${rs(t.project.projectId)}</project_id>`,` <team_id>${rs(t.project.teamId)}</team_id>`+a+c,` <generation_job_id>${rs(t.job.id)}</generation_job_id>`," <agent_events>",s.length>0?s.join(`
|
||
`):" <!-- empty after privacy stripping -->"," </agent_events>","</server_beta_observation_request>","",...u?d:p].join(`
|
||
`),hadPrivateContent:n,skippedAll:o}}function sV(t){let e=typeof t.payload=="string"?t.payload:JSON.stringify(t.payload??{},null,2),r=Xb(e),n=(r.counts.private??0)>0,i=r.stripped.length>iV?r.stripped.slice(0,iV)+`
|
||
[...truncated]`:r.stripped;return i.trim().length===0?{body:"",hadPrivate:n}:{body:[" <agent_event>",` <id>${rs(t.id)}</id>`,` <event_type>${rs(t.eventType)}</event_type>`,` <source_adapter>${rs(t.sourceAdapter)}</source_adapter>`,` <occurred_at>${new Date(t.occurredAtEpoch).toISOString()}</occurred_at>`," <payload>",rs(i)," </payload>"," </agent_event>"].join(`
|
||
`),hadPrivate:n}}function oV(t){let{body:e}=sV(t);return e.length===0?0:Buffer.byteLength(e,"utf8")+1}function WAe(){try{return no.getInstance().getActiveMode()}catch(t){let e=t instanceof Error?t:new Error(String(t));return x.warn("SDK","Failed to load active mode; using fallback observation types",{fallbackTypes:nV.map(r=>r.id)},e),{observation_types:nV}}}function YAe(t){return["<observation>",` <type>[ ${t.observation_types.map(r=>r.id).join(" | ")} ]</type>`," <title>...</title>"," <subtitle>...</subtitle>"," <facts><fact>...</fact></facts>"," <narrative>...</narrative>"," <concepts><concept>...</concept></concepts>"," <files_read><file>...</file></files_read>"," <files_modified><file>...</file></files_modified>","</observation>"].join(`
|
||
`)}function rs(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var nV,iV,rp=R(()=>{"use strict";Hb();KA();fe();nV=[{id:"discovery"},{id:"progress"},{id:"blocker"},{id:"decision"}],iV=16*1024});function Zb(t){if(!t)return;let e=Number(t);if(!Number.isNaN(e)&&e>=0)return Math.floor(e*1e3);let r=Date.parse(t);if(!Number.isNaN(r)){let n=r-Date.now();return n>0?n:0}}function _l(t){let{status:e,providerLabel:r}=t,i=(t.bodyText??"").toLowerCase(),s=t.headers?Zb(t.headers.get("retry-after")):void 0,o=e===void 0?t.cause:new Error(`${r} HTTP error (status ${e})`);if(i.includes("quota exceeded")||i.includes("insufficient credits")||i.includes("insufficient_quota")||i.includes("resource_exhausted")||i.includes("key limit exceeded")||i.includes("limit exceeded")&&e!==429||i.includes("negative credit")||e===402)return new Ce(`${r} quota exhausted${e!==void 0?` (status ${e})`:""}`,{kind:"quota_exhausted",cause:o});if(e===429)return new Ce(`${r} rate limit (429)`,{kind:"rate_limit",cause:o,...s!==void 0?{retryAfterMs:s}:{}});if(e===401||e===403)return new Ce(`${r} auth error (status ${e})`,{kind:"auth_invalid",cause:o});if(e===400||e===404)return new Ce(`${r} bad request (status ${e})`,{kind:"unrecoverable",cause:o});if(e!==void 0&&e>=500&&e<600)return new Ce(`${r} upstream error (status ${e})`,{kind:"transient",cause:o});if(e===void 0){let a=t.cause instanceof Error?t.cause.message:String(t.cause);return new Ce(`${r} network error: ${a}`,{kind:"transient",cause:t.cause})}return new Ce(`${r} API error (status ${e})`,{kind:"unrecoverable",cause:o})}var Ce,np=R(()=>{"use strict";Ce=class extends Error{kind;retryAfterMs;cause;constructor(e,r){super(e),this.name="ServerClassifiedProviderError",this.kind=r.kind,this.cause=r.cause,r.retryAfterMs!==void 0&&(this.retryAfterMs=r.retryAfterMs)}}});function QAe(t){let e=t.match(/^\s*```(?:xml)?\s*\n([\s\S]*?)\n```\s*$/i);return e?e[1]:t}function DA(t,e){if(typeof t!="string"||!t.trim())return{valid:!1};t=QAe(t);let r=/<skip_summary(?:\s+reason="([^"]*)")?\s*\/>/.exec(t);if(r)return{valid:!0,observations:[],summary:{request:null,investigated:null,learned:null,completed:null,next_steps:null,notes:null,skipped:!0,skip_reason:r[1]??null}};let n=/<(observation|summary)\b/i.exec(t);if(!n)return{valid:!1};if(n[1].toLowerCase()==="observation"){let o=eRe(t,e);return o.length===0?{valid:!1}:{valid:!0,observations:o,summary:null}}let s=tRe(t,e);return s?{valid:!0,observations:[],summary:s}:{valid:!1}}function eRe(t,e){let r=[],n=/<observation>([\s\S]*?)<\/observation>/g,i;for(;(i=n.exec(t))!==null;){let s=i[1],o=gi(s,"type"),a=nRe(gi(s,"title")),c=gi(s,"subtitle"),l=gi(s,"narrative"),u=ev(s,"facts","fact"),d=ev(s,"concepts","concept"),p=ev(s,"files_read","file"),f=ev(s,"files_modified","file"),y=no.getInstance().getActiveMode().observation_types.map(_=>_.id),b=y[0],v=b;o?(v=o,y.includes(o)||x.error("PARSER",`Invalid observation type: ${o}, preserving emitted type`,{correlationId:e})):x.error("PARSER",`Observation missing type field, defaulting to the first declared type: "${b}"`,{correlationId:e});let E=d.map(_=>{let O=_.indexOf(":");return(O===-1?_:_.slice(0,O)).trim()}).filter(_=>_!==""&&_!==v),S=a,k=l;if(E.length!==d.length&&x.debug("PARSER","Removed observation type from concepts array",{correlationId:e,type:v,originalConcepts:d,cleanedConcepts:E}),!a&&!l&&u.length===0&&E.length===0){let _=iRe(s);if(!_){x.warn("PARSER","Skipping empty observation (all content fields null)",{correlationId:e,type:v});continue}let O=sRe(_);S=O.title,k=O.narrative,x.warn("PARSER","Salvaged unstructured observation prose as narrative",{correlationId:e,type:v,chars:_.length})}r.push({type:v,title:S,subtitle:c,facts:u,narrative:k,concepts:E,files_read:p,files_modified:f})}return r}function tRe(t,e){let n=/<summary>([\s\S]*?)<\/summary>/.exec(t);if(!n)return null;let i=n[1],s=gi(i,"request"),o=gi(i,"investigated"),a=gi(i,"learned"),c=gi(i,"completed"),l=gi(i,"next_steps"),u=gi(i,"notes");return!s&&!o&&!a&&!c&&!l?(x.warn("PARSER","Summary block has no sub-tags \u2014 rejecting false positive",{correlationId:e}),null):{request:s,investigated:o,learned:a,completed:c,next_steps:l,notes:u}}function nRe(t){if(t===null)return null;let e=rRe.exec(t);if(!e)return t;let r=e[1].trim();return r===""?t:r}function gi(t,e){let n=new RegExp(`<${e}>([\\s\\S]*?)</${e}>`).exec(t);if(!n)return null;let i=n[1].trim();return i===""?null:i}function ev(t,e,r){let n=[],s=new RegExp(`<${e}>([\\s\\S]*?)</${e}>`).exec(t);if(!s)return n;let o=s[1],a=new RegExp(`<${r}>([\\s\\S]*?)</${r}>`,"g"),c;for(;(c=a.exec(o))!==null;){let l=c[1].trim();l&&n.push(l)}return n}function iRe(t){if(/<\/?(summary|skip_summary)\b/i.test(t))return null;let e=t.replace(/<(type|title|subtitle|narrative|facts|concepts|files_read|files_modified)(?:\s*\/>|>[\s\S]*?<\/\1>)/g," ").replace(/<[^>]+>/g," ").replace(/\r\n/g,`
|
||
`).split(`
|
||
`).map(r=>r.trim()).filter(r=>r!=="").join(`
|
||
`).trim();return e===""?null:e}function sRe(t){let e=t.split(`
|
||
`).map(c=>c.trim()).filter(c=>c!==""),r=e[0]??t.trim(),n=Array.from(ZAe.segment(r),c=>c.segment),i=n.length>XAe,s=i?`${n.slice(0,aV).join("")}...`:r,a=(i?[n.slice(aV).join("").trim(),...e.slice(1)]:e.slice(1)).filter(c=>c!=="").join(`
|
||
`).trim();return{title:s,narrative:a===""?null:a}}var XAe,aV,ZAe,rRe,cV=R(()=>{"use strict";fe();Hb();XAe=120,aV=117,ZAe=new Intl.Segmenter(void 0,{granularity:"grapheme"});rRe=/^\[\*\*title\*\*:\s*([\s\S]+?)\s*\]$/});async function lV(t){let{job:e,rawText:r}=t,n=DA(r,e.id);if(!n.valid)return{kind:"parse_error",jobId:e.id,reason:"parser rejected response"};let i=n.observations??[],o=n.summary?.skipped===!0||i.length===0,a=await dV(t,i.map(c=>({kind:c.type??"observation",content:pV(c),metadata:{title:c.title,subtitle:c.subtitle,facts:c.facts,narrative:c.narrative,concepts:c.concepts,files_read:c.files_read,files_modified:c.files_modified}})),o);if(a.kind==="completed"&&process.env.CLAUDE_MEM_USAGE_METERING==="1")try{await oRe(t,a.observations.length)}catch(c){x.warn("SYSTEM","usage metering record failed (post-commit)",{jobId:t.job.id,error:c instanceof Error?c.message:String(c)})}return a}async function ip(t){await In(t.pool,async e=>{let r=new dt(e),n=new Wt(e),i=await r.getByIdForScope({id:t.job.id,projectId:t.job.projectId,teamId:t.job.teamId});if(!i||i.status==="completed"||i.status==="cancelled")return;let s=t.retryable&&i.attempts<i.maxAttempts,o=s?"queued":"failed";await r.transitionStatus({id:i.id,projectId:i.projectId,teamId:i.teamId,status:o,lastError:{reason:t.reason,classification:t.classification??null},...s?{nextAttemptAt:new Date(Date.now()+lRe(i.attempts))}:{}}),await n.append({generationJobId:i.id,projectId:i.projectId,teamId:i.teamId,eventType:s?"retry_scheduled":"failed",statusAfter:o,attempt:i.attempts,details:{reason:t.reason,classification:t.classification??null,workerId:t.workerId??null}})})}async function uV(t){let{job:e,rawText:r}=t;if(e.sourceType!=="session_summary")return{kind:"parse_error",jobId:e.id,reason:"session summary processor invoked on non-summary job"};let n=DA(r,e.id);if(!n.valid)return{kind:"parse_error",jobId:e.id,reason:"parser rejected summary response"};let i=n.summary??null,s=i?.skipped===!0,o=!i&&!s?n.observations:[],a=i?cRe(i):o.map(u=>pV(u)).join(`
|
||
|
||
`),c=s||a.trim().length===0,l=c?[]:[{kind:"summary",content:a,metadata:{request:i?.request??null,investigated:i?.investigated??null,learned:i?.learned??null,completed:i?.completed??null,next_steps:i?.next_steps??null,notes:i?.notes??null}}];return dV(t,l,c)}async function dV(t,e,r){let{job:n}=t;return In(t.pool,async i=>{let s=new Zr(i),o=new xo(i),a=new dt(i),c=new Wt(i),l=new Nt(i),u=await a.getByIdForScope({id:n.id,projectId:n.projectId,teamId:n.teamId});if(!u)throw new Error(`generation job ${n.id} not found in scope`);if(u.status==="completed"||u.status==="cancelled"||u.status==="failed")return x.info("SYSTEM","generation job already in terminal status; skipping persistence",{jobId:u.id,status:u.status}),{kind:"completed",jobId:u.id,observations:[],privateContentDetected:r};let d=await aRe(i,u.serverSessionId,u.id),p=[];for(let m=0;m<e.length;m++){let{kind:y,content:b,metadata:v}=e[m];if(!b||b.trim().length===0)continue;let E=Xb(b);if(!E.stripped||E.stripped.trim().length===0)continue;let S=fS({generationJobId:u.id,parsedObservationIndex:m,content:E.stripped}),k=await s.create({projectId:u.projectId,teamId:u.teamId,serverSessionId:u.serverSessionId,kind:y,content:E.stripped,generationKey:S,metadata:{...v,project:d,provider:t.providerLabel,model:t.modelId??null},createdByJobId:u.id});p.push(k),await o.addSource({observationId:k.id,projectId:u.projectId,teamId:u.teamId,sourceType:u.sourceType,sourceId:u.sourceId,agentEventId:u.agentEventId??null,generationJobId:u.id,metadata:{provider:t.providerLabel,parsedObservationIndex:m,source_adapter:t.sourceAdapter??null,actor_id:t.actorId??null,api_key_id:t.apiKeyId??null}});let _={teamId:u.teamId,projectId:u.projectId,actorId:t.actorId??null,apiKeyId:t.apiKeyId??null,action:"observation.created",resourceType:"observation",resourceId:k.id,details:{generationJobId:u.id,sourceType:u.sourceType,sourceId:u.sourceId,provider:t.providerLabel,model:t.modelId??null,sourceAdapter:t.sourceAdapter??null,parsedObservationIndex:m,kind:y}};try{await l.createAuditLog(_)}catch(O){x.warn("SYSTEM","audit_log observation.created insert failed",{observationId:k.id,error:O instanceof Error?O.message:String(O)})}}await a.transitionStatus({id:u.id,projectId:u.projectId,teamId:u.teamId,status:"completed"}),await c.append({generationJobId:u.id,projectId:u.projectId,teamId:u.teamId,eventType:"completed",statusAfter:"completed",attempt:u.attempts,details:{provider:t.providerLabel,model:t.modelId??null,observationCount:p.length,privateContentDetected:r,workerId:t.workerId??null,sourceType:u.sourceType}});let f={teamId:u.teamId,projectId:u.projectId,actorId:t.actorId??null,apiKeyId:t.apiKeyId??null,action:"generation_job.completed",resourceType:"observation_generation_job",resourceId:u.id,details:{generationJobId:u.id,provider:t.providerLabel,model:t.modelId??null,observationCount:p.length,observationIds:p.map(m=>m.id),sourceAdapter:t.sourceAdapter??null,sourceType:u.sourceType}};try{await l.createAuditLog(f)}catch(m){x.warn("SYSTEM","audit log insert failed during generation",{jobId:u.id,error:m instanceof Error?m.message:String(m)})}return{kind:"completed",jobId:u.id,observations:p,privateContentDetected:r}})}async function oRe(t,e){let r=new Kr(t.pool);t.tokensUsed&&t.tokensUsed>0&&await r.record({teamId:t.job.teamId,projectId:t.job.projectId,kind:"tokens",quantity:t.tokensUsed,metadata:{jobId:t.job.id,provider:t.providerLabel,model:t.modelId??null}}),e>0&&await r.record({teamId:t.job.teamId,projectId:t.job.projectId,kind:"observation",quantity:e,metadata:{jobId:t.job.id}})}async function aRe(t,e,r){if(!e)return null;let n=await t.query("SELECT metadata->>'project' AS project FROM server_sessions WHERE id = $1",[e]);return n.rows.length===0?(x.debug("SYSTEM","session row not found during project lookup; observation will have project: null",{jobId:r,serverSessionId:e}),null):n.rows[0]?.project??null}function cRe(t){let e=[];return t.request&&e.push(`Request: ${t.request}`),t.investigated&&e.push(`Investigated: ${t.investigated}`),t.learned&&e.push(`Learned: ${t.learned}`),t.completed&&e.push(`Completed: ${t.completed}`),t.next_steps&&e.push(`Next steps: ${t.next_steps}`),t.notes&&e.push(`Notes: ${t.notes}`),e.join(`
|
||
|
||
`).trim()}function pV(t){let e=[];return t.title&&e.push(t.title),t.subtitle&&e.push(t.subtitle),t.narrative&&e.push(t.narrative),t.facts&&t.facts.length>0&&e.push(t.facts.map(r=>`- ${r}`).join(`
|
||
`)),e.length===0&&t.concepts&&t.concepts.length>0&&e.push(`Concepts: ${t.concepts.join(", ")}`),e.join(`
|
||
|
||
`).trim()}function lRe(t){let e=5e3*Math.pow(5,Math.max(0,t));return Math.min(e,600*1e3)}var fV=R(()=>{"use strict";cV();fe();su();fs();Oi();Uo();Ao();KA()});function uRe(t){return oV(t)}function dRe(t){let e=c=>uRe(c),r=0;for(let c of t)r+=e(c);if(r<=MA)return t;let n=MA/2,i=[],s=0;for(let c of t){let l=e(c);if(s+l>n)break;i.push(c),s+=l}let o=[],a=0;for(let c=t.length-1;c>=i.length;c-=1){let l=t[c],u=e(l);if(a+u>MA-s)break;o.unshift(l),a+=u}return[...i,...o]}var tv,MA,rv,mV=R(()=>{"use strict";fe();Qa();rp();fs();Xa();Oi();wh();np();fV();js();tv=class extends Error{reason;constructor(e,r){super(r),this.reason=e}},MA=Number.parseInt(process.env.CLAUDE_MEM_SUMMARY_INPUT_BUDGET_BYTES??"",10)||6e5;rv=class{constructor(e){this.options=e}options;async process(e){let r=`bullmq:${e.id??"?"}`,n=e.data?.request_id??null,i;try{i=E$(e.data)}catch(a){if(a instanceof ld)x.error("SYSTEM","rejecting malformed job payload at execution",{correlationId:r,issues:a.issues});else{let c=a instanceof Error?a:new Error(String(a));x.error("SYSTEM","unexpected error validating job payload",{correlationId:r},c)}throw a}let s=await this.loadCanonicalOutbox(i.generation_job_id);if(!s)return x.info("SYSTEM","job row not found by id; nothing to do",{correlationId:r,generationJobId:i.generation_job_id}),{jobId:i.generation_job_id,status:"completed",observationCount:0};if(s.teamId!==i.team_id||s.projectId!==i.project_id){let a=new tv("scope_mismatch",`BullMQ payload team/project does not match outbox row (jobId=${i.generation_job_id})`);throw await this.auditScopeViolation(i,s,a,r),await ip({pool:this.options.pool,job:s,reason:a.message,classification:"scope_mismatch",retryable:!1,...this.options.workerId!==void 0?{workerId:this.options.workerId}:{}}),a}if(i.api_key_id&&await this.isApiKeyRevoked(i.api_key_id)){let c=new tv("revoked_key",`api key ${i.api_key_id} is revoked; refusing to generate for outbox ${s.id}`);throw await this.auditRevokedKey(i,s,c,r),await ip({pool:this.options.pool,job:s,reason:c.message,classification:"revoked_key",retryable:!1,...this.options.workerId!==void 0?{workerId:this.options.workerId}:{}}),c}let o=await this.lockOutbox(i.generation_job_id,i.team_id,i.project_id);if(!o)return x.info("SYSTEM","job no longer exists or is in terminal status; nothing to do",{correlationId:r,generationJobId:i.generation_job_id}),{jobId:i.generation_job_id,status:"completed",observationCount:0};x.info("SYSTEM","[generation] job locked for processing",{correlationId:r,jobId:o.id,bullmqJobId:e.id??null,requestId:n,sourceType:o.sourceType,attempt:o.attempts}),await this.auditEvent({teamId:o.teamId,projectId:o.projectId,apiKeyId:i.api_key_id,actorId:i.actor_id,action:"generation_job.processing",resourceId:o.id,details:{sourceType:o.sourceType,sourceId:o.sourceId,sourceAdapter:i.source_adapter,attempt:o.attempts,correlationId:r,requestId:n}});try{return await this.generateAndPersist(e,i,o,r,n)}catch(a){let c=a instanceof Ce?a:null,l=c?c.kind==="transient"||c.kind==="rate_limit":!1;throw await ip({pool:this.options.pool,job:o,reason:a instanceof Error?a.message:String(a),classification:c?.kind??"unknown",retryable:l,...this.options.workerId!==void 0?{workerId:this.options.workerId}:{}}),a}}async generateAndPersist(e,r,n,i,s){let o=await this.loadEvents(n,r),a=await this.loadProject(n),c=await this.options.provider.generate({job:n,events:o,project:{projectId:n.projectId,teamId:n.teamId,serverSessionId:n.serverSessionId,projectName:a?.name??null}}),l={pool:this.options.pool,job:n,rawText:c.rawText,modelId:c.modelId,providerLabel:c.providerLabel,tokensUsed:c.tokensUsed,apiKeyId:r.api_key_id,actorId:r.actor_id,sourceAdapter:r.source_adapter,...this.options.workerId!==void 0?{workerId:this.options.workerId}:{}},u=n.sourceType==="session_summary"?await uV(l):await lV(l);if(u.kind==="parse_error")throw await ip({pool:this.options.pool,job:n,reason:u.reason,classification:"parse_error",retryable:!1,...this.options.workerId!==void 0?{workerId:this.options.workerId}:{}}),new Error(`generation parse error: ${u.reason}`);return x.info("SYSTEM","generation completed",{correlationId:i,jobId:u.jobId,bullmqJobId:e.id??null,requestId:s,observationCount:u.observations.length,privateContentDetected:u.privateContentDetected}),{jobId:u.jobId,status:"completed",observationCount:u.observations.length}}async loadCanonicalOutbox(e){let n=(await this.options.pool.query("SELECT * FROM observation_generation_jobs WHERE id = $1",[e])).rows[0];return n?{id:n.id,projectId:n.project_id,teamId:n.team_id,agentEventId:n.agent_event_id,sourceType:n.source_type,sourceId:n.source_id,serverSessionId:n.server_session_id,jobType:n.job_type,status:n.status,idempotencyKey:n.idempotency_key,bullmqJobId:n.bullmq_job_id,attempts:n.attempts,maxAttempts:n.max_attempts,nextAttemptAtEpoch:n.next_attempt_at?.getTime()??null,lockedAtEpoch:n.locked_at?.getTime()??null,lockedBy:n.locked_by,completedAtEpoch:n.completed_at?.getTime()??null,failedAtEpoch:n.failed_at?.getTime()??null,cancelledAtEpoch:n.cancelled_at?.getTime()??null,lastError:n.last_error&&typeof n.last_error=="object"?n.last_error:null,payload:n.payload&&typeof n.payload=="object"&&!Array.isArray(n.payload)?n.payload:{},createdAtEpoch:n.created_at.getTime(),updatedAtEpoch:n.updated_at.getTime()}:null}async isApiKeyRevoked(e){let n=(await this.options.pool.query("SELECT revoked_at, expires_at FROM api_keys WHERE id = $1",[e])).rows[0];return!!(!n||n.revoked_at||n.expires_at&&n.expires_at.getTime()<=Date.now())}async auditScopeViolation(e,r,n,i){x.error("SYSTEM","BullMQ payload scope mismatch \u2014 refusing to generate",{correlationId:i,generationJobId:e.generation_job_id,payloadTeamId:e.team_id,payloadProjectId:e.project_id,canonicalTeamId:r.teamId,canonicalProjectId:r.projectId}),await this.auditEvent({teamId:r.teamId,projectId:r.projectId,apiKeyId:e.api_key_id,actorId:e.actor_id,action:"generation_job.scope_violation",resourceId:r.id,details:{reason:"scope_mismatch",message:n.message,payloadTeamId:e.team_id,payloadProjectId:e.project_id,canonicalTeamId:r.teamId,canonicalProjectId:r.projectId,sourceAdapter:e.source_adapter,correlationId:i}})}async auditRevokedKey(e,r,n,i){x.warn("SYSTEM","api key revoked between enqueue and execute \u2014 refusing to generate",{correlationId:i,generationJobId:e.generation_job_id,apiKeyId:e.api_key_id}),await this.auditEvent({teamId:r.teamId,projectId:r.projectId,apiKeyId:e.api_key_id,actorId:e.actor_id,action:"generation_job.revoked_key",resourceId:r.id,details:{reason:"revoked_key",message:n.message,sourceAdapter:e.source_adapter,correlationId:i}})}async auditEvent(e){try{await this.insertAuditLog(e)}catch(r){x.warn("SYSTEM","audit_log insert failed in ProviderObservationGenerator",{action:e.action,error:r instanceof Error?r.message:String(r)})}}async insertAuditLog(e){await new Nt(this.options.pool).createAuditLog({teamId:e.teamId,projectId:e.projectId,actorId:e.actorId,apiKeyId:e.apiKeyId,action:e.action,resourceType:"observation_generation_job",resourceId:e.resourceId,details:e.details??{}})}async lockOutbox(e,r,n){let i=new dt(this.options.pool),s=await i.getByIdForScope({id:e,projectId:n,teamId:r});return!s||s.status==="completed"||s.status==="cancelled"||s.status==="failed"?null:s.status==="processing"?(x.info("SYSTEM","generation job already in processing; skipping duplicate worker run",{jobId:s.id,lockedBy:s.lockedBy,lockedAtEpoch:s.lockedAtEpoch,attempts:s.attempts}),null):await i.transitionStatus({id:s.id,projectId:s.projectId,teamId:s.teamId,status:"processing",lockedBy:this.options.workerId??"server-beta-worker"})}async loadEvents(e,r){let n=new Xr(this.options.pool);if(e.sourceType==="session_summary"){if(!e.serverSessionId)return[];let s=await new zt(this.options.pool).listUnprocessedEvents({serverSessionId:e.serverSessionId,projectId:e.projectId,teamId:e.teamId});return dRe(s)}if(e.sourceType!=="agent_event")return[];if(r.kind==="event"){let i=await n.getByIdForScope({id:r.agent_event_id,projectId:e.projectId,teamId:e.teamId});return i?[i]:[]}return[]}async loadProject(e){return await new _n(this.options.pool).getByIdForTeam(e.projectId,e.teamId)}}});var sp,hV=R(()=>{"use strict";fe();Oi();mV();sp=class{constructor(e){this.options=e;this.workerId=e.workerId??`server-${process.pid}`,this.generator=e.generatorFactory?e.generatorFactory(e.pool,e.provider,this.workerId):new rv({pool:e.pool,provider:e.provider,workerId:this.workerId})}options;kind="generation-worker-manager";started=!1;closed=!1;generator;workerId;start(){if(this.started)return;let e=async r=>{try{return await this.generator.process(r)}catch(n){throw x.warn("SYSTEM","observation generator failed",{jobId:r.id,kind:r.data.kind,error:n instanceof Error?n.message:String(n)}),n}};this.options.queueManager.start("event",e),this.options.queueManager.start("summary",e);for(let r of["event","summary"])try{this.options.queueManager.getQueue(r).observe({onStalled:i=>{this.auditStalledJob(i,r)}})}catch(n){x.warn("SYSTEM",`failed to wire stalled observer for ${r} lane`,{error:n instanceof Error?n.message:String(n)})}this.started=!0}async auditStalledJob(e,r){try{await this.writeStalledJobAuditRow(e,r)}catch(n){x.warn("SYSTEM","failed to audit stalled generation_job",{bullmqJobId:e,error:n instanceof Error?n.message:String(n)})}}async writeStalledJobAuditRow(e,r){let i=(await this.options.pool.query("SELECT id, team_id, project_id FROM observation_generation_jobs WHERE bullmq_job_id = $1 LIMIT 1",[e])).rows[0];if(!i)return;await new Nt(this.options.pool).createAuditLog({teamId:i.team_id,projectId:i.project_id,actorId:null,apiKeyId:null,action:"generation_job.stalled",resourceType:"observation_generation_job",resourceId:i.id,details:{lane:r,bullmqJobId:e}})}getHealth(){return this.closed?{status:"errored",reason:"generation-worker-manager closed"}:{status:this.started?"active":"disabled",reason:this.started?"BullMQ Worker attached to event queue with ProviderObservationGenerator":"wired but not started",details:{provider:this.options.provider.providerLabel,workerId:this.workerId}}}async close(){this.closed||(this.closed=!0)}}});function NA(t){let e=t.status,r=t.bodyText??"",n=r.toLowerCase(),i=t.headers?Zb(t.headers.get("retry-after")):void 0;if(n.includes("overloaded"))return new Ce(`Anthropic overloaded${e!==void 0?` (status ${e})`:""}`,{kind:"transient",cause:t.cause});if(e===401||e===403||n.includes("invalid api key"))return new Ce(`Anthropic auth invalid${e!==void 0?` (status ${e})`:""}`,{kind:"auth_invalid",cause:t.cause});if(e===429)return new Ce("Anthropic rate limit (429)",{kind:"rate_limit",cause:t.cause,...i!==void 0?{retryAfterMs:i}:{}});if(n.includes("quota exceeded"))return new Ce("Anthropic quota exhausted",{kind:"quota_exhausted",cause:t.cause});if(n.includes("prompt is too long")||n.includes("context window")||n.includes("max_tokens"))return new Ce("Anthropic context overflow",{kind:"unrecoverable",cause:t.cause});if(e===529)return new Ce("Anthropic overloaded (529)",{kind:"transient",cause:t.cause});if(e!==void 0&&e>=500&&e<600)return new Ce(`Anthropic upstream error (status ${e})`,{kind:"transient",cause:t.cause});if(e===400)return new Ce("Anthropic bad request (400)",{kind:"unrecoverable",cause:t.cause});if(e===void 0){let s=t.cause instanceof Error?t.cause.message:String(t.cause);return new Ce(`Anthropic network error: ${s}`,{kind:"transient",cause:t.cause})}return new Ce(`Anthropic API error: ${e}${r?` - ${r.substring(0,200)}`:""}`,{kind:"unrecoverable",cause:t.cause})}async function yRe(t){try{return await t.text()}catch(e){let r=e instanceof Error?e:new Error(String(e));return x.warn("SDK","Failed to read Anthropic error response body",{provider:"claude",status:t.status},r),""}}var pRe,fRe,mRe,hRe,nv,yV=R(()=>{"use strict";fe();np();rp();pRe="https://api.anthropic.com/v1/messages",fRe="2023-06-01",mRe="claude-sonnet-5",hRe=mRe,nv=class{providerLabel="claude";apiKey;model;maxOutputTokens;fetchImpl;constructor(e){if(!e.apiKey)throw new Ce("Anthropic API key not configured",{kind:"auth_invalid",cause:new Error("apiKey is required")});this.apiKey=e.apiKey,this.model=e.model??hRe,this.maxOutputTokens=e.maxOutputTokens??4096,this.fetchImpl=e.fetchImpl??fetch}async generate(e,r){let{prompt:n,skippedAll:i}=wl(e);if(i)return{rawText:'<skip_summary reason="all_events_private" />',providerLabel:this.providerLabel,modelId:this.model};let s;try{s=await this.postMessages(n,r)}catch(d){let p=d instanceof Error?d:new Error(String(d));throw NA({cause:p})}if(!s.ok){let d=await yRe(s);throw NA({status:s.status,bodyText:d,headers:s.headers,cause:new Error(`Anthropic API error: ${s.status} - ${d}`)})}let o;try{o=await s.json()}catch(d){let p=d instanceof Error?d:new Error(String(d));throw new Ce("Anthropic returned invalid JSON",{kind:"parse_error",cause:p})}if(o.error)throw NA({status:s.status,bodyText:`${o.error.type??""} ${o.error.message??""}`,headers:s.headers,cause:new Error(`Anthropic API error: ${o.error.type} - ${o.error.message}`)});let c=(Array.isArray(o.content)?o.content:[]).filter(d=>d?.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
|
||
`).trim();c||x.warn("SDK","Anthropic returned empty content array",{provider:"claude",model:this.model});let l=o.usage??{},u=typeof l.input_tokens=="number"||typeof l.output_tokens=="number"?(l.input_tokens??0)+(l.output_tokens??0):void 0;return{rawText:c,...u!==void 0?{tokensUsed:u}:{},providerLabel:this.providerLabel,modelId:this.model}}postMessages(e,r){return this.fetchImpl(pRe,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.apiKey,"anthropic-version":fRe},body:JSON.stringify({model:this.model,max_tokens:this.maxOutputTokens,temperature:.3,messages:[{role:"user",content:e}]}),signal:r})}}});function vRe(t){let e=t.toLowerCase();return e.includes("api key not valid")||e.includes("api_key_invalid")||e.includes("api key expired")||e.includes("invalid api key")?"api_key":e.includes("please ensure that multiturn requests alternate")||e.includes("alternate between user and model")||e.includes("first content should be with role")||e.includes("contents")&&e.includes("role")&&(e.includes("user")||e.includes("model"))?"role_sequence":e.includes("context limit")||e.includes("context length")||e.includes("too many tokens")||e.includes("input is too long")||e.includes("prompt is too long")||e.includes("request payload size exceeds")||e.includes("token")&&(e.includes("exceed")||e.includes("maximum")||e.includes("limit"))?"context_limit":e.includes("model not found")||e.includes("model_unsupported")||e.includes("unsupported model")||e.includes("not supported for generatecontent")||e.includes("not supported by this model")||e.includes("model")&&e.includes("not supported")||e.includes("models/")&&e.includes("not found")?"model_unsupported":"unknown_bad_request"}function ERe(t){let e=t.toLowerCase();return e.includes("quota exceeded")||e.includes("insufficient credits")||e.includes("insufficient_quota")||e.includes("resource_exhausted")}function LA(t){let e=t.status,r=t.bodyText??"";if(e===400&&!ERe(r)){let n=vRe(r);return new Ce(`Gemini bad request: ${n}`,{kind:"unrecoverable",cause:new Error("Gemini HTTP error (status 400)")})}return _l({...t,providerLabel:"Gemini"})}async function SRe(t){try{return await t.text()}catch(e){let r=e instanceof Error?e:new Error(String(e));return x.warn("SDK","Failed to read Gemini error response body",{provider:"gemini",status:t.status},r),""}}var gRe,bRe,iv,gV=R(()=>{"use strict";fe();np();rp();gRe="https://generativelanguage.googleapis.com/v1beta/models",bRe="gemini-flash-latest";iv=class{providerLabel="gemini";apiKey;model;maxOutputTokens;fetchImpl;constructor(e){if(!e.apiKey)throw new Ce("Gemini API key not configured",{kind:"auth_invalid",cause:new Error("apiKey is required")});this.apiKey=e.apiKey,this.model=e.model??bRe,this.maxOutputTokens=e.maxOutputTokens??4096,this.fetchImpl=e.fetchImpl??fetch}async generate(e,r){let{prompt:n,skippedAll:i}=wl(e);if(i)return{rawText:'<skip_summary reason="all_events_private" />',providerLabel:this.providerLabel,modelId:this.model};let s=`${gRe}/${encodeURIComponent(this.model)}:generateContent?key=${encodeURIComponent(this.apiKey)}`,o;try{o=await this.postGenerateContent(s,n,r)}catch(u){let d=u instanceof Error?u:new Error(String(u));throw LA({cause:d})}if(!o.ok){let u=await SRe(o);throw LA({status:o.status,bodyText:u,headers:o.headers,cause:new Error(`Gemini HTTP error (status ${o.status})`)})}let a;try{a=await o.json()}catch(u){let d=u instanceof Error?u:new Error(String(u));throw new Ce("Gemini returned invalid JSON",{kind:"parse_error",cause:d})}if(a.error)throw LA({status:o.status,bodyText:`${a.error.status??""} ${a.error.message??""}`,headers:o.headers,cause:new Error(`Gemini HTTP error (status ${o.status})`)});let c=a.candidates?.[0]?.content?.parts?.[0]?.text?.trim()??"";c||x.warn("SDK","Gemini returned empty content",{provider:"gemini",model:this.model});let l=typeof a.usageMetadata?.totalTokenCount=="number"?a.usageMetadata.totalTokenCount:void 0;return{rawText:c,...l!==void 0?{tokensUsed:l}:{},providerLabel:this.providerLabel,modelId:this.model}}postGenerateContent(e,r,n){return this.fetchImpl(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:[{role:"user",parts:[{text:r}]}],generationConfig:{temperature:.3,maxOutputTokens:this.maxOutputTokens}}),signal:n})}}});function vV(t){let e=(t??"").trim();if(!e)return xRe;let r=e.replace(/\/+$/,"");return r.toLowerCase().endsWith(bV)?r:`${r}${bV}`}var xRe,bV,EV=R(()=>{"use strict";xRe="https://openrouter.ai/api/v1/chat/completions",bV="/chat/completions"});function SV(t,e){return{"HTTP-Referer":t||qA,"X-OpenRouter-Title":e||FA,"X-OpenRouter-Categories":wRe}}var qA,FA,wRe,xV=R(()=>{"use strict";qA="https://github.com/thedotmack/claude-mem",FA="Claude-Mem",wRe="cli-agent,creative-writing"});function _Re(t,e){let r;try{let o=JSON.parse(e);o.error&&typeof o.error=="object"&&!Array.isArray(o.error)&&(r=o.error)}catch{}let n=typeof r?.message=="string"?r.message:e,i=/unsupported\s+parameter[\s\S]*max_tokens[\s\S]*(?:use|replace)[\s\S]*max_completion_tokens/i.test(n),s=r?.param==="max_tokens"&&/max_completion_tokens/i.test(e)&&(r.code==="unsupported_parameter"||r.code===400||r.code==="400");return(t===400||t>=200&&t<300&&!!r)&&(i||s)}async function wV(t,e,r,n,i){let s={...n,max_tokens:i},o=await t(e,{...r,body:JSON.stringify(s)});if(o.status!==400&&(o.status<200||o.status>=300||o.status===204||o.status===205))return o;let a="",c=o;try{let d=new Uint8Array(await o.clone().arrayBuffer());a=new TextDecoder().decode(d),c=new Response(o.body===null?null:d,{status:o.status,statusText:o.statusText,headers:o.headers})}catch{return o}if(!_Re(o.status,a))return c;let{max_tokens:l,...u}=n;return t(e,{...r,body:JSON.stringify({...u,max_completion_tokens:i})})}var _V=R(()=>{"use strict"});async function TRe(t){try{return await t.text()}catch(e){let r=e instanceof Error?e:new Error(String(e));return x.warn("SDK","Failed to read OpenRouter error response body",{provider:"openrouter"},r),""}}var IRe,sv,IV=R(()=>{"use strict";EV();xV();_V();fe();np();rp();IRe="anthropic/claude-3.5-sonnet",sv=class{providerLabel="openrouter";apiKey;model;apiUrl;maxOutputTokens;siteUrl;appName;fetchImpl;constructor(e){if(!e.apiKey)throw new Ce("OpenRouter API key not configured",{kind:"auth_invalid",cause:new Error("apiKey is required")});this.apiKey=e.apiKey,this.model=e.model??IRe,this.apiUrl=vV(e.baseUrl),this.maxOutputTokens=e.maxOutputTokens??4096,this.siteUrl=e.siteUrl??qA,this.appName=e.appName??FA,this.fetchImpl=e.fetchImpl??fetch}async generate(e,r){let{prompt:n,skippedAll:i}=wl(e);if(i)return{rawText:'<skip_summary reason="all_events_private" />',providerLabel:this.providerLabel,modelId:this.model};let s;try{s=await this.postChatCompletion(n,r)}catch(l){let u=l instanceof Error?l:new Error(String(l));throw _l({cause:u,providerLabel:"OpenRouter"})}if(!s.ok){let l=await TRe(s);throw _l({status:s.status,bodyText:l,headers:s.headers,cause:new Error(`OpenRouter API error: ${s.status} - ${l}`),providerLabel:"OpenRouter"})}let o;try{o=await s.json()}catch(l){let u=l instanceof Error?l:new Error(String(l));throw new Ce("OpenRouter returned invalid JSON",{kind:"parse_error",cause:u})}if(o.error)throw _l({status:s.status,bodyText:`${o.error.code??""} ${o.error.message??""}`,headers:s.headers,cause:new Error(`OpenRouter API error: ${o.error.code} - ${o.error.message}`),providerLabel:"OpenRouter"});let a=o.choices?.[0]?.message?.content?.trim()??"";a||x.warn("SDK","OpenRouter returned empty content",{provider:"openrouter",model:this.model});let c=typeof o.usage?.total_tokens=="number"?o.usage.total_tokens:void 0;return{rawText:a,...c!==void 0?{tokensUsed:c}:{},providerLabel:this.providerLabel,modelId:this.model}}postChatCompletion(e,r){return wV(this.fetchImpl,this.apiUrl,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,...SV(this.siteUrl,this.appName),"Content-Type":"application/json"},signal:r},{model:this.model,messages:[{role:"user",content:e}],temperature:.3},this.maxOutputTokens)}}});var ov,av,Il,TV=R(()=>{"use strict";ov=class{constructor(e){this.reason=e}reason;getHealth(){return{status:"disabled",reason:this.reason}}async close(){}},av=class extends ov{kind="queue-manager"},Il=class extends ov{kind="generation-worker-manager"}});var $A={};io($A,{createServerService:()=>kRe,detectDockerEnvironment:()=>AV,loadServerMode:()=>OV,resolveServerMaxOutputTokens:()=>cv,validateServerEnv:()=>RV});function AV(t=process.env){if(t.CLAUDE_MEM_DOCKER==="1"||t.CLAUDE_MEM_DOCKER==="true")return!0;try{if((0,kV.existsSync)("/.dockerenv"))return!0}catch{}return!1}function RV(t={}){let e=t.env??process.env,r=t.isDocker??AV(e),n=[],i=(e.CLAUDE_MEM_RUNTIME??"").trim();i?i!=="server"&&i!=="server-beta"&&r&&n.push(`CLAUDE_MEM_RUNTIME=${i} is invalid in Docker; the server image only runs CLAUDE_MEM_RUNTIME=server (or legacy CLAUDE_MEM_RUNTIME=server-beta).`):r&&x.warn("SYSTEM","CLAUDE_MEM_RUNTIME unset; server container assumes runtime=server");let s=(e.CLAUDE_MEM_AUTH_MODE??"api-key").trim();r&&(s==="local-dev"&&n.push("CLAUDE_MEM_AUTH_MODE=local-dev is not allowed in Docker. Set CLAUDE_MEM_AUTH_MODE=api-key and create a key with `claude-mem server api-key create`."),(e.CLAUDE_MEM_ALLOW_LOCAL_DEV_BYPASS==="1"||e.CLAUDE_MEM_ALLOW_LOCAL_DEV_BYPASS==="true")&&n.push("CLAUDE_MEM_ALLOW_LOCAL_DEV_BYPASS is not allowed in Docker. Loopback bypass cannot be enforced inside a container; remove the variable."));let o=(e.CLAUDE_MEM_QUEUE_ENGINE??"").trim().toLowerCase();r&&(o?o!=="bullmq"&&n.push(`CLAUDE_MEM_QUEUE_ENGINE=${o} is not allowed in Docker. Only "bullmq" is supported (no in-process queues across container boundaries).`):n.push('CLAUDE_MEM_QUEUE_ENGINE is required in Docker; set it to "bullmq".'));let a=!!(e.CLAUDE_MEM_SERVER_DATABASE_URL??"").trim();a||n.push("CLAUDE_MEM_SERVER_DATABASE_URL is required to start the server (Postgres connection string).");let c=!!(e.CLAUDE_MEM_REDIS_URL??"").trim();if(o==="bullmq"&&!c&&n.push("CLAUDE_MEM_REDIS_URL is required when CLAUDE_MEM_QUEUE_ENGINE=bullmq."),n.length>0){let l=["server startup configuration is invalid:",...n.map(u=>` - ${u}`)].join(`
|
||
`);throw new Error(l)}return{isDocker:r,runtime:i||"server",authMode:s,queueEngine:o||"disabled",hasDatabaseUrl:a,hasRedisUrl:c}}function OV(){let t=no.getInstance();t.loadMode("code"),t.getActiveMode(),x.info("SYSTEM","Server mode loaded",{mode:"code"})}async function kRe(t={}){t.skipEnvValidation||RV(),OV();let e=t.pool??gx({requireDatabaseUrl:!0}),r=await jRe(e,t.bootstrapSchema??!0),n=t.queueManager??CRe(),i=t.generationDisabled??(process.env.CLAUDE_MEM_GENERATION_DISABLED==="1"||process.env.CLAUDE_MEM_GENERATION_DISABLED==="true"),s=t.generationWorkerManager??(i?new Il("CLAUDE_MEM_GENERATION_DISABLED is set; this server runs HTTP only. A separate `claude-mem server worker start` process consumes the BullMQ queues."):ARe(e,n,t.generationProvider)),o={runtime:"server-beta",postgres:{pool:e,bootstrap:r},authMode:t.authMode??PRe(process.env.CLAUDE_MEM_AUTH_MODE),queueManager:n,generationWorkerManager:s};return s instanceof sp&&s.start(),new op({graph:o})}function ARe(t,e,r){if(!(e instanceof ga))return new Il("queue manager is disabled; set CLAUDE_MEM_QUEUE_ENGINE=bullmq to enable provider generation.");let n=r??RRe();return n?new sp({pool:t,queueManager:e,provider:n}):new Il("no server generation provider configured; set CLAUDE_MEM_SERVER_PROVIDER and the matching API key to enable.")}function RRe(){let t=(process.env.CLAUDE_MEM_SERVER_PROVIDER??"").trim().toLowerCase();if(!t)return null;try{return ORe(t)}catch(e){let r=e instanceof Error?e:new Error(String(e));return x.warn("SYSTEM","server: failed to construct generation provider from env; generation disabled",{provider:t},r),null}}function cv(){let t=process.env.CLAUDE_MEM_SERVER_MAX_OUTPUT_TOKENS;if(!t)return;let e=Number(t);if(!Number.isInteger(e)||e<=0){x.warn("SYSTEM","server: ignoring invalid CLAUDE_MEM_SERVER_MAX_OUTPUT_TOKENS",{value:t});return}return e}function ORe(t){if(t==="claude"||t==="anthropic"){let e=process.env.ANTHROPIC_API_KEY??process.env.CLAUDE_MEM_ANTHROPIC_API_KEY??"";if(!e)return null;let r={apiKey:e};process.env.CLAUDE_MEM_SERVER_MODEL&&(r.model=process.env.CLAUDE_MEM_SERVER_MODEL);let n=cv();return n!==void 0&&(r.maxOutputTokens=n),new nv(r)}if(t==="gemini"){let e=process.env.GEMINI_API_KEY??process.env.CLAUDE_MEM_GEMINI_API_KEY??"";if(!e)return null;let r={apiKey:e};process.env.CLAUDE_MEM_SERVER_MODEL&&(r.model=process.env.CLAUDE_MEM_SERVER_MODEL);let n=cv();return n!==void 0&&(r.maxOutputTokens=n),new iv(r)}if(t==="openrouter"){let e=process.env.OPENROUTER_API_KEY??process.env.CLAUDE_MEM_OPENROUTER_API_KEY??"";if(!e)return null;let r={apiKey:e};process.env.CLAUDE_MEM_SERVER_MODEL&&(r.model=process.env.CLAUDE_MEM_SERVER_MODEL);let n=process.env.CLAUDE_MEM_OPENROUTER_BASE_URL??process.env.OPENROUTER_BASE_URL;n&&(r.baseUrl=n);let i=cv();return i!==void 0&&(r.maxOutputTokens=i),new sv(r)}return null}function CRe(){let t=XH();return t.engine!=="bullmq"?new av(`Queue engine is "${t.engine}"; set CLAUDE_MEM_QUEUE_ENGINE=bullmq to activate the server queue manager.`):new ga(t)}async function jRe(t,e){if(!e)return{initialized:!1,schemaVersion:null,appliedAt:null};await Wb(t);let n=(await t.query(`
|
||
SELECT version, applied_at
|
||
FROM server_beta_schema_migrations
|
||
WHERE version = $1
|
||
`,[Xd])).rows[0];return{initialized:n?.version===Xd,schemaVersion:typeof n?.version=="number"?n.version:null,appliedAt:n?.applied_at?new Date(n.applied_at).toISOString():null}}function PRe(t){return t==="local-dev"||t==="disabled"?t:"api-key"}var kV,UA=R(()=>{"use strict";kV=require("fs");fe();Hb();Zd();CA();ZH();RA();hV();yV();gV();IV();CV();TV()});var $V={};io($V,{HOOK_API_KEY_SCOPES:()=>MV,bootstrapServerApiKey:()=>NV,createRawApiKey:()=>LV,hashApiKey:()=>qV,persistServerSettings:()=>DRe,rotateServerApiKey:()=>KRe});async function NV(t={}){let e=t.closePool??t.pool===void 0,r=t.pool??FV();try{let n=await MRe(r),i=await NRe(r,n),s=LV(),o=qV(s),a=new Nt(r),c=await a.createApiKey({keyHash:o,teamId:n,projectId:i,actorId:KV,scopes:[...MV]});return await a.createAuditLog({teamId:n,projectId:i,actorId:KV,apiKeyId:c.id,action:"api_key.create",resourceType:"api_key",resourceId:c.id,details:{source:"server-bootstrap"}}),{rawKey:s,apiKeyId:c.id,teamId:n,projectId:i}}finally{e&&await r.end().catch(()=>{})}}async function KRe(t={}){let e=t.pool===void 0,r=t.pool??FV();try{return t.previousApiKeyId&&await r.query("UPDATE api_keys SET revoked_at = now() WHERE id = $1 AND revoked_at IS NULL",[t.previousApiKeyId]),await NV({pool:r,closePool:!1})}finally{e&&await r.end().catch(()=>{})}}function DRe(t,e){let r=(0,DV.dirname)(t);(0,va.existsSync)(r)||(0,va.mkdirSync)(r,{recursive:!0});let n={};if((0,va.existsSync)(t))try{n=rM(t)}catch(s){let o=s instanceof Error?s:new Error(String(s));x.warn("HOOK","Failed to read existing settings file; starting fresh",{settingsPath:t},o),n={}}let i=n.env&&typeof n.env=="object"?n.env:n;i.CLAUDE_MEM_SERVER_API_KEY=e.apiKey,i.CLAUDE_MEM_SERVER_PROJECT_ID=e.projectId,e.serverBaseUrl&&(i.CLAUDE_MEM_SERVER_URL=e.serverBaseUrl),za(t,n);try{(0,va.chmodSync)(t,384)}catch{}}function LV(){return`cmem_${(0,lv.randomBytes)(32).toString("base64url")}`}function qV(t){return(0,lv.createHash)("sha256").update(t).digest("hex")}async function MRe(t){let e=await t.query("SELECT id FROM teams WHERE name = $1 LIMIT 1",[jV]);return e.rows[0]?e.rows[0].id:(await new ba(t).create({name:jV,metadata:{source:"local-hook-bootstrap"}})).id}async function NRe(t,e){let r=await t.query("SELECT id FROM projects WHERE team_id = $1 AND name = $2 LIMIT 1",[e,PV]);return r.rows[0]?r.rows[0].id:(await new _n(t).create({teamId:e,name:PV,metadata:{source:"local-hook-bootstrap"}})).id}function FV(){let t=yu({requireDatabaseUrl:!0});if(!t)throw new Error("Cannot bootstrap server API key: CLAUDE_MEM_SERVER_DATABASE_URL is not set.");return em(t)}var lv,va,DV,jV,PV,KV,MV,UV=R(()=>{"use strict";lv=require("crypto"),va=require("fs"),DV=require("path");fe();Xl();Ao();Zf();Oi();Xa();Vb();jV="local-hook-team",PV="local-hook-project",KV="system:local-hook-bootstrap",MV=Object.freeze(["events:write","sessions:write","observations:read","jobs:read"])});var HRe={};io(HRe,{ServerService:()=>op,assertServerRuntimeForCli:()=>BA,migrateServerPostgresApiKeyScopes:()=>XV,runServerApiKeyCli:()=>zA,runServerGenerationWorker:()=>eW,runServerJobsCli:()=>ZV,runServerServiceCli:()=>dv,startCommandWantsDaemon:()=>QV});module.exports=Pt(HRe);async function YV(t){let e=t.queueManager;if(!(e instanceof ga))return[];try{return await e.getLaneMetrics()}catch{return[]}}function FRe(t){let e=t.getHttpServer()?.address();return e&&typeof e!="string"?e.port:null}function QV(t){return t.some(e=>e==="--daemon"||e==="-d")}async function dv(t=process.argv.slice(2)){let e=t[0]??"--daemon",r=tW(),n=process.env.CLAUDE_MEM_SERVER_HOST??WV;if(e==="worker"){let i=(t[1]??"--daemon").toLowerCase();if(i==="start"||i==="--daemon"||i==="run"){await eW();return}console.error("Usage: server-service worker start"),process.exit(1)}if(e==="server"&&t[1]?.toLowerCase()==="api-key"){await zA(t.slice(2));return}if(e==="server"&&t[1]?.toLowerCase()==="keys"){await zA(["list","--active",...t.slice(2)]);return}if(e==="server"&&t[1]?.toLowerCase()==="jobs"){await ZV(t.slice(2));return}switch(e){case"start":{let i=uv();if(ds(i)){console.log(JSON.stringify({status:"ready",runtime:Ea,pid:i.pid,port:i.port}));return}if(QV(t.slice(1))){let o=URe(r);o===void 0&&(console.error("Failed to spawn server daemon."),process.exit(1)),console.log(JSON.stringify({status:"starting",runtime:Ea,pid:o,port:r}));return}await JV(r,n);return}case"stop":{let i=uv();if(!ds(i)){GA(),console.log("Server is not running");return}if(process.platform==="win32")try{await Vn(i.pid)}catch(s){console.error(`Failed to stop server (PID ${i.pid}): ${s instanceof Error?s.message:String(s)}`),console.error("The server may still be running \u2014 leaving its PID file in place."),process.exit(1)}else process.kill(i.pid,"SIGTERM");await BRe(i.pid,qRe),Rt(i.pid)&&(console.error(`Server PID ${i.pid} did not exit; leaving its PID file in place.`),process.exit(1)),GA(),console.log("Server stopped");return}case"restart":{await dv(["stop"]),await dv(["start","--daemon"]);return}case"status":{let i=zRe(),s=uv();i&&ds(s)?(console.log("Server is running"),console.log(` PID: ${i.pid}`),console.log(` Port: ${i.port}`),console.log(` Runtime: ${i.runtime}`),console.log(` Started: ${i.startedAt}`)):console.log("Server is not running");return}case"--daemon":{await JV(r,n);return}default:console.error("Usage: server-service start [--daemon] | stop | restart | status"),console.error(" start run the server in the foreground (default; systemd Type=simple)"),console.error(" start --daemon detach and run as a background daemon"),console.error(" stop stop a running daemon"),console.error(" restart stop then start (daemon)"),console.error(" status print runtime status"),console.error(" server api-key create|list|revoke|migrate-scopes manage Postgres API keys"),console.error(" server keys alias for api-key list --active (no secrets)"),console.error(" server jobs [list|inspect <id>] list/inspect generation jobs"),process.exit(1)}}async function JV(t,e){let r=uv();(ds(r)||await GRe(t,e))&&process.exit(0);let{createServerService:n}=await Promise.resolve().then(()=>(UA(),$A)),i=await n(),s=async()=>{await i.stop(),process.exit(0)};process.once("SIGTERM",s),process.once("SIGINT",s),await i.start()}function BA(t,e=process.env){let r=(e.CLAUDE_MEM_RUNTIME??"").trim().toLowerCase();if(r&&r!=="server"&&r!=="server-beta")throw new Error(`\`server ${t}\` is a server runtime command, but CLAUDE_MEM_RUNTIME=${r}. Set CLAUDE_MEM_RUNTIME=server (and CLAUDE_MEM_SERVER_DATABASE_URL) to run server operations, or use the worker CLI (\`worker-service ...\`) for the worker runtime.`);if(!(e.CLAUDE_MEM_SERVER_DATABASE_URL??"").trim())throw new Error(`CLAUDE_MEM_SERVER_DATABASE_URL is required for \`server ${t}\`. This command talks to the server Postgres backend; export the connection string before running it.`)}async function zA(t){let e=t[0]?.toLowerCase(),r=HA(t.slice(1));try{BA("api-key")}catch(l){console.error(l instanceof Error?l.message:String(l)),process.exit(1)}if(e==="migrate-scopes"){await XV(t.slice(1));return}let{getSharedPostgresPool:n}=await Promise.resolve().then(()=>(Zd(),Yb)),{PostgresAuthRepository:i}=await Promise.resolve().then(()=>(Oi(),rN)),{createHash:s,randomBytes:o}=await import("crypto"),a=n({requireDatabaseUrl:!0}),c=new i(a);if(e==="create"){let l=(r.scope??r.scopes??"memories:read").split(",").map(y=>y.trim()).filter(Boolean),u=r.team??null,d=r.project??null;if(!u||!d){let{bootstrapServerApiKey:y}=await Promise.resolve().then(()=>(UV(),$V)),b=await y({pool:a,closePool:!1});u=b.teamId,d=b.projectId}let p=`cmem_${o(24).toString("hex")}`,f=s("sha256").update(p).digest("hex"),m=await c.createApiKey({keyHash:f,teamId:u,projectId:d,scopes:l,actorId:"system:server-cli"});console.log(JSON.stringify({id:m.id,key:p,name:r.name??"server-api-key",teamId:u,projectId:d,scopes:l},null,2));return}if(e==="list"){let l=r.team??null,u=Number.parseInt(r.limit??"100",10),d=Number.parseInt(r.offset??"0",10),p=Number.isFinite(u)&&u>0&&u<=500?u:100,f=Number.isFinite(d)&&d>=0?d:0,m=[],y=[];r.active&&m.push("revoked_at IS NULL AND (expires_at IS NULL OR expires_at > now())"),l&&(y.push(l),m.push(`team_id = $${y.length}`));let b=m.length>0?`WHERE ${m.join(" AND ")}`:"";y.push(p,f);let v=await a.query(`SELECT id, team_id, project_id, scopes, revoked_at, expires_at, last_used_at, created_at
|
||
FROM api_keys
|
||
${b}
|
||
ORDER BY created_at DESC
|
||
LIMIT $${y.length-1} OFFSET $${y.length}`,y);console.log(JSON.stringify({teamId:l,limit:p,offset:f,count:v.rows.length,keys:v.rows.map(E=>({id:E.id,teamId:E.team_id,projectId:E.project_id,scopes:E.scopes,status:E.revoked_at?"revoked":"active",lastUsedAt:E.last_used_at?.toISOString()??null,expiresAt:E.expires_at?.toISOString()??null,createdAt:E.created_at.toISOString()}))},null,2));return}if(e==="revoke"){let l=t[1];l||(console.error("Usage: server-service server api-key revoke <id>"),process.exit(1)),(await a.query(`UPDATE api_keys SET revoked_at = now()
|
||
WHERE id = $1 AND revoked_at IS NULL
|
||
RETURNING id`,[l])).rowCount===0&&(console.error(`API key not found or already revoked: ${l}`),process.exit(1)),console.log(JSON.stringify({id:l,status:"revoked"},null,2));return}console.error(`Unknown server api-key subcommand: ${e??"(none)"}`),console.error("Usage: server-service server api-key create|list|revoke|migrate-scopes"),process.exit(1)}async function XV(t){let e=t[0]&&!t[0].startsWith("--")?t[0]:void 0,r=HA(t);e||(console.error("Usage: server-service server api-key migrate-scopes <id> [--scope a,b]"),process.exit(1));let n=(r.scope??r.scopes??$Re.join(",")).split(",").map(a=>a.trim()).filter(Boolean),{getSharedPostgresPool:i}=await Promise.resolve().then(()=>(Zd(),Yb));(await i({requireDatabaseUrl:!0}).query(`UPDATE api_keys
|
||
SET scopes = $2::jsonb, updated_at = now()
|
||
WHERE id = $1 AND revoked_at IS NULL
|
||
RETURNING id, scopes`,[e,JSON.stringify(n)])).rowCount===0&&(console.error(`API key not found or revoked: ${e}`),process.exit(1)),console.log(JSON.stringify({id:e,scopes:n,status:"scopes-migrated"},null,2))}async function ZV(t){try{BA("jobs")}catch(p){console.error(p instanceof Error?p.message:String(p)),process.exit(1)}let e=(t[0]&&!t[0].startsWith("--")?t[0]:"list").toLowerCase(),{getSharedPostgresPool:r}=await Promise.resolve().then(()=>(Zd(),Yb)),n=r({requireDatabaseUrl:!0});if(e==="inspect"){let p=t[1];p||(console.error("Usage: server-service server jobs inspect <id>"),process.exit(1));let f=await n.query(`SELECT id, project_id, team_id, source_type, source_id, status, attempts,
|
||
max_attempts, created_at, completed_at, failed_at, last_error, payload
|
||
FROM observation_generation_jobs WHERE id = $1`,[p]);f.rowCount===0&&(console.error(`Generation job not found: ${p}`),process.exit(1)),console.log(JSON.stringify(f.rows[0],null,2));return}let i=HA(e==="list"?t.slice(1):t),s=i.status??null,o=Number.parseInt(i.limit??"50",10),c=[Number.isFinite(o)&&o>0&&o<=500?o:50],l="";s&&(c.unshift(s),l="WHERE status = $1");let u=c.length,d=await n.query(`SELECT id, project_id, team_id, source_type, status, attempts, created_at
|
||
FROM observation_generation_jobs
|
||
${l}
|
||
ORDER BY created_at DESC
|
||
LIMIT $${u}`,c);console.log(JSON.stringify({status:s??"any",count:d.rows.length,jobs:d.rows.map(p=>({id:p.id,projectId:p.project_id,teamId:p.team_id,sourceType:p.source_type,status:p.status,attempts:p.attempts,createdAt:p.created_at.toISOString()}))},null,2))}function HA(t){return(0,VV.parseArgs)({args:t,options:{scope:{type:"string"},scopes:{type:"string"},team:{type:"string"},project:{type:"string"},name:{type:"string"},limit:{type:"string"},offset:{type:"string"},status:{type:"string"},active:{type:"boolean"}},strict:!1,allowPositionals:!0}).values}async function eW(){let{validateServerEnv:t,createServerService:e}=await Promise.resolve().then(()=>(UA(),$A));t(),delete process.env.CLAUDE_MEM_GENERATION_DISABLED;let r=await e(),n=r.getRuntimeState();x.info("SYSTEM","Server generation worker started (no HTTP)",{pid:process.pid,queue:n.boundaries.queueManager,generation:n.boundaries.generationWorkerManager}),console.log(JSON.stringify({status:"worker-running",runtime:Ea,pid:process.pid}));let i=!1,s=async()=>{if(!i){i=!0;try{await r.stop()}finally{process.exit(0)}}};process.once("SIGTERM",s),process.once("SIGINT",s),await new Promise(()=>{})}function tW(){let t=Number.parseInt(process.env.CLAUDE_MEM_SERVER_PORT??"",10);return Number.isInteger(t)&&t>0?t:LRe+(process.getuid?.()??77)%100}function URe(t){let e=typeof __CM_FILENAME__<"u"?__CM_FILENAME__:(0,HV.fileURLToPath)(VRe.url);(0,Vt.mkdirSync)(Le.dataDir(),{recursive:!0});let r=(0,zV.spawn)(process.execPath,[e,"--daemon"],{detached:!0,stdio:"ignore",windowsHide:!0,cwd:Le.dataDir(),env:{...Ha(process.env),CLAUDE_MEM_SERVER_PORT:String(t)}});return r.unref(),r.pid}function JRe(t){(0,Vt.mkdirSync)((0,BV.dirname)(Le.serverRuntime()),{recursive:!0});let e={pid:t.pid,port:t.port,startedAt:t.startedAt,startToken:Ti(t.pid)??void 0};(0,Vt.writeFileSync)(Le.serverPid(),JSON.stringify(e,null,2)),(0,Vt.writeFileSync)(Le.serverPort(),`${t.port}
|
||
`),(0,Vt.writeFileSync)(Le.serverRuntime(),JSON.stringify(t,null,2))}function uv(){if(!(0,Vt.existsSync)(Le.serverPid()))return null;try{return JSON.parse((0,Vt.readFileSync)(Le.serverPid(),"utf-8"))}catch(t){let e=t instanceof Error?t:new Error(String(t));return x.warn("SYSTEM","Failed to read server PID file",{path:Le.serverPid()},e),null}}function zRe(){if(!(0,Vt.existsSync)(Le.serverRuntime()))return null;try{return JSON.parse((0,Vt.readFileSync)(Le.serverRuntime(),"utf-8"))}catch(t){let e=t instanceof Error?t:new Error(String(t));return x.warn("SYSTEM","Failed to read server runtime state file",{path:Le.serverRuntime()},e),null}}function GA(){(0,Vt.rmSync)(Le.serverPid(),{force:!0}),(0,Vt.rmSync)(Le.serverPort(),{force:!0}),(0,Vt.rmSync)(Le.serverRuntime(),{force:!0})}async function GRe(t,e){return new Promise(r=>{let n=GV.default.connect({port:t,host:e});n.once("connect",()=>{n.destroy(),r(!0)}),n.once("error",()=>r(!1))})}async function BRe(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(!ds({pid:t,port:0,startedAt:""}))return;await new Promise(n=>setTimeout(n,100))}}var zV,Vt,GV,BV,HV,VV,VRe,Ea,WV,LRe,qRe,JA,op,$Re,CV=R(()=>{zV=require("child_process"),Vt=require("fs"),GV=tt(require("net"),1),BV=require("path"),HV=require("url"),VV=require("util");WM();Hn();fe();vo();eu();tu();q$();KI();$$();RA();GH();VRe={},Ea="server-beta",WV="127.0.0.1",LRe=37877,qRe=15e3,JA=class{constructor(e){this.graph=e}graph;setupRoutes(e){e.get("/healthz",(r,n)=>{n.json({status:"ok",runtime:Ea})}),e.get("/v1/info",async(r,n)=>{let i=await YV(this.graph);n.json({name:"claude-mem-server",runtime:Ea,authMode:this.graph.authMode,postgres:{initialized:this.graph.postgres.bootstrap.initialized,schemaVersion:this.graph.postgres.bootstrap.schemaVersion},boundaries:{queueManager:this.graph.queueManager.getHealth(),generationWorkerManager:this.graph.generationWorkerManager.getHealth()},queueLanes:i})})}};op=class{graph;host;requestedPort;boundPort=null;persistRuntimeState;server=null;stopping=!1;constructor(e){this.graph=e.graph,this.host=e.host??process.env.CLAUDE_MEM_SERVER_HOST??WV,this.requestedPort=e.port??tW(),this.persistRuntimeState=e.persistRuntimeState??!0}async start(){if(this.server)return;let e=new Cf({securityHeaders:!0,getInitializationComplete:()=>this.graph.postgres.bootstrap.initialized,getMcpReady:()=>!0,onShutdown:()=>this.stop(),onRestart:async()=>{await this.stop(),await this.start()},workerPath:"",runtime:Ea,getAiStatus:()=>({provider:"disabled",authMethod:this.graph.authMode,lastInteraction:null}),getQueueHealth:async()=>{let i=this.graph.queueManager.getHealth(),s=i.details??{};if(i.status!=="active"||s.engine!=="bullmq")return null;let o=await YV(this.graph);return{engine:"bullmq",redis:{status:"ok",mode:String(s.mode??"unknown"),host:String(s.host??"127.0.0.1"),port:typeof s.port=="number"?s.port:6379,prefix:String(s.prefix??"claude_mem")},lanes:o.map(a=>({kind:a.kind,name:a.name,waiting:a.waiting,active:a.active,completed:a.completed,failed:a.failed,delayed:a.delayed,stalled:a.stalled,unavailable:a.unavailable,...a.unavailableReason?{unavailableReason:a.unavailableReason}:{}}))}}});e.registerRoutes(new JA(this.graph));let r=new Th({pool:this.graph.postgres.pool,queueManager:this.graph.queueManager,authMode:this.graph.authMode==="disabled"?"api-key":this.graph.authMode});e.registerRoutes(r);let n=this.graph.authMode==="disabled"?"api-key":this.graph.authMode;e.registerRoutes(new Rh({pool:this.graph.postgres.pool,ingestEvents:r.getIngestEventsService(),authMode:n})),e.registerRoutes(new Oh({pool:this.graph.postgres.pool,endSession:r.getEndSessionService(),authMode:n})),e.registerRoutes(new zb),e.finalizeRoutes(),await e.listen(this.requestedPort,this.host),this.server=e,this.boundPort=FRe(e)??this.requestedPort,this.persistRuntimeState&&JRe(this.runtimeState()),x.info("SYSTEM","Server started",{host:this.host,port:this.boundPort,pid:process.pid})}async stop(){if(!this.stopping){this.stopping=!0;try{if(this.server){try{await this.server.close()}catch(e){let r=e instanceof Error?e:new Error(String(e));if(r.code!=="ERR_SERVER_NOT_RUNNING")throw e;x.warn("SYSTEM","Server was already stopped when close was requested",{},r)}this.server=null}await Promise.all([this.graph.queueManager.close(),this.graph.generationWorkerManager.close()]),await this.graph.postgres.pool.end()}finally{this.persistRuntimeState&&GA(),this.boundPort=null,this.stopping=!1,x.info("SYSTEM","Server stopped")}}}getRuntimeState(){return this.runtimeState()}runtimeState(){return{runtime:Ea,pid:process.pid,port:this.boundPort??this.requestedPort,host:this.host,startedAt:new Date().toISOString(),bootstrap:this.graph.postgres.bootstrap,boundaries:{queueManager:this.graph.queueManager.getHealth(),generationWorkerManager:this.graph.generationWorkerManager.getHealth()}}}};$Re=["memories:read","memories:write"];(process.argv[1]?.endsWith("ServerService.ts")||process.argv[1]?.endsWith("server-service.cjs")||process.argv[1]?.endsWith("ServerBetaService.ts")||process.argv[1]?.endsWith("server-beta-service.cjs"))&&dv().catch(t=>{console.error(t instanceof Error?t.message:String(t)),process.exit(1)})});CV();0&&(module.exports={ServerService,assertServerRuntimeForCli,migrateServerPostgresApiKeyScopes,runServerApiKeyCli,runServerGenerationWorker,runServerJobsCli,runServerServiceCli,startCommandWantsDaemon});
|
||
/*! Bundled license information:
|
||
|
||
depd/index.js:
|
||
(*!
|
||
* depd
|
||
* Copyright(c) 2014-2018 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
statuses/index.js:
|
||
(*!
|
||
* statuses
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
toidentifier/index.js:
|
||
(*!
|
||
* toidentifier
|
||
* Copyright(c) 2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
http-errors/index.js:
|
||
(*!
|
||
* http-errors
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
bytes/index.js:
|
||
(*!
|
||
* bytes
|
||
* Copyright(c) 2012-2014 TJ Holowaychuk
|
||
* Copyright(c) 2015 Jed Watson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
unpipe/index.js:
|
||
(*!
|
||
* unpipe
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
raw-body/index.js:
|
||
(*!
|
||
* raw-body
|
||
* Copyright(c) 2013-2014 Jonathan Ong
|
||
* Copyright(c) 2014-2022 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
ee-first/index.js:
|
||
(*!
|
||
* ee-first
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* MIT Licensed
|
||
*)
|
||
|
||
on-finished/index.js:
|
||
(*!
|
||
* on-finished
|
||
* Copyright(c) 2013 Jonathan Ong
|
||
* Copyright(c) 2014 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
content-type/dist/index.js:
|
||
content-type/dist/index.js:
|
||
content-type/index.js:
|
||
content-type/dist/index.js:
|
||
(*!
|
||
* content-type
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
mime-db/index.js:
|
||
(*!
|
||
* mime-db
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2015-2022 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
mime-types/index.js:
|
||
(*!
|
||
* mime-types
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
media-typer/index.js:
|
||
(*!
|
||
* media-typer
|
||
* Copyright(c) 2014-2017 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
type-is/index.js:
|
||
(*!
|
||
* type-is
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
body-parser/lib/read.js:
|
||
body-parser/lib/types/raw.js:
|
||
body-parser/lib/types/text.js:
|
||
body-parser/index.js:
|
||
(*!
|
||
* body-parser
|
||
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
body-parser/lib/types/json.js:
|
||
body-parser/lib/types/urlencoded.js:
|
||
(*!
|
||
* body-parser
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
encodeurl/index.js:
|
||
(*!
|
||
* encodeurl
|
||
* Copyright(c) 2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
escape-html/index.js:
|
||
(*!
|
||
* escape-html
|
||
* Copyright(c) 2012-2013 TJ Holowaychuk
|
||
* Copyright(c) 2015 Andreas Lubbe
|
||
* Copyright(c) 2015 Tiancheng "Timothy" Gu
|
||
* MIT Licensed
|
||
*)
|
||
|
||
parseurl/index.js:
|
||
(*!
|
||
* parseurl
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2014-2017 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
finalhandler/index.js:
|
||
(*!
|
||
* finalhandler
|
||
* Copyright(c) 2014-2022 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
express/lib/view.js:
|
||
express/lib/application.js:
|
||
express/lib/request.js:
|
||
express/lib/express.js:
|
||
express/index.js:
|
||
(*!
|
||
* express
|
||
* Copyright(c) 2009-2013 TJ Holowaychuk
|
||
* Copyright(c) 2013 Roman Shtylman
|
||
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
etag/index.js:
|
||
(*!
|
||
* etag
|
||
* Copyright(c) 2014-2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
forwarded/index.js:
|
||
(*!
|
||
* forwarded
|
||
* Copyright(c) 2014-2017 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
proxy-addr/index.js:
|
||
(*!
|
||
* proxy-addr
|
||
* Copyright(c) 2014-2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
express/lib/utils.js:
|
||
express/lib/response.js:
|
||
(*!
|
||
* express
|
||
* Copyright(c) 2009-2013 TJ Holowaychuk
|
||
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
router/lib/layer.js:
|
||
router/lib/route.js:
|
||
router/index.js:
|
||
(*!
|
||
* router
|
||
* Copyright(c) 2013 Roman Shtylman
|
||
* Copyright(c) 2014-2022 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
negotiator/lib/accept.js:
|
||
(*!
|
||
* negotiator
|
||
* Copyright(c) 2026 Blake Embrey
|
||
* MIT Licensed
|
||
*)
|
||
|
||
negotiator/index.js:
|
||
(*!
|
||
* negotiator
|
||
* Copyright(c) 2012 Federico Romero
|
||
* Copyright(c) 2012-2014 Isaac Z. Schlueter
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
accepts/index.js:
|
||
(*!
|
||
* accepts
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
fresh/index.js:
|
||
(*!
|
||
* fresh
|
||
* Copyright(c) 2012 TJ Holowaychuk
|
||
* Copyright(c) 2016-2017 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
range-parser/index.js:
|
||
(*!
|
||
* range-parser
|
||
* Copyright(c) 2012-2014 TJ Holowaychuk
|
||
* Copyright(c) 2015-2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
content-disposition/index.js:
|
||
(*!
|
||
* content-disposition
|
||
* Copyright(c) 2014-2017 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
cookie/index.js:
|
||
(*!
|
||
* cookie
|
||
* Copyright(c) 2012-2014 Roman Shtylman
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
send/index.js:
|
||
(*!
|
||
* send
|
||
* Copyright(c) 2012 TJ Holowaychuk
|
||
* Copyright(c) 2014-2022 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
vary/index.js:
|
||
(*!
|
||
* vary
|
||
* Copyright(c) 2014-2017 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
serve-static/index.js:
|
||
(*!
|
||
* serve-static
|
||
* Copyright(c) 2010 Sencha Inc.
|
||
* Copyright(c) 2011 TJ Holowaychuk
|
||
* Copyright(c) 2014-2016 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
*/
|
||
//# sourceMappingURL=server-service.cjs.map
|