dnssd-advertise 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/LICENSE.md +22 -0
- package/README.md +56 -0
- package/dist/dnssd-advertise.d.ts +28 -0
- package/dist/dnssd-advertise.js +2552 -0
- package/dist/dnssd-advertise.js.map +1 -0
- package/dist/dnssd-advertise.mjs +2550 -0
- package/dist/dnssd-advertise.mjs.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dnssd-advertise.mjs","sources":["../node_modules/.pnpm/dns-message@1.0.3/node_modules/dns-message/dist/dns-message.mjs","../src/nics.ts","../src/service.ts","../src/socket.ts","../src/constants.ts","../src/scheduler.ts","../src/advertise.ts"],"sourcesContent":["let t = function(t) {\n t[t.QUERY = 0] = \"QUERY\";\n t[t.RESPONSE = 32768] = \"RESPONSE\";\n return t;\n}({});\n\nlet e = function(t) {\n t[t.A = 1] = \"A\";\n t[t.NS = 2] = \"NS\";\n t[t.CNAME = 5] = \"CNAME\";\n t[t.SOA = 6] = \"SOA\";\n t[t.NULL = 10] = \"NULL\";\n t[t.PTR = 12] = \"PTR\";\n t[t.HINFO = 13] = \"HINFO\";\n t[t.MX = 15] = \"MX\";\n t[t.TXT = 16] = \"TXT\";\n t[t.RP = 17] = \"RP\";\n t[t.AFSDB = 18] = \"AFSDB\";\n t[t.SIG = 24] = \"SIG\";\n t[t.KEY = 25] = \"KEY\";\n t[t.AAAA = 28] = \"AAAA\";\n t[t.LOC = 29] = \"LOC\";\n t[t.SRV = 33] = \"SRV\";\n t[t.NAPTR = 35] = \"NAPTR\";\n t[t.KX = 36] = \"KX\";\n t[t.CERT = 37] = \"CERT\";\n t[t.DNAME = 39] = \"DNAME\";\n t[t.OPT = 41] = \"OPT\";\n t[t.APL = 42] = \"APL\";\n t[t.DS = 43] = \"DS\";\n t[t.SSHFP = 44] = \"SSHFP\";\n t[t.IPSECKEY = 45] = \"IPSECKEY\";\n t[t.RRSIG = 46] = \"RRSIG\";\n t[t.NSEC = 47] = \"NSEC\";\n t[t.DNSKEY = 48] = \"DNSKEY\";\n t[t.DHCID = 49] = \"DHCID\";\n t[t.NSEC3 = 50] = \"NSEC3\";\n t[t.NSEC3PARAM = 51] = \"NSEC3PARAM\";\n t[t.TLSA = 52] = \"TLSA\";\n t[t.HIP = 55] = \"HIP\";\n t[t.CDS = 59] = \"CDS\";\n t[t.CDNSKEY = 60] = \"CDNSKEY\";\n t[t.SVCB = 64] = \"SVCB\";\n t[t.HTTPS = 65] = \"HTTPS\";\n t[t.SPF = 99] = \"SPF\";\n t[t.TKEY = 249] = \"TKEY\";\n t[t.TSIG = 250] = \"TSIG\";\n t[t.IXFR = 251] = \"IXFR\";\n t[t.AXFR = 252] = \"AXFR\";\n t[t.ANY = 255] = \"ANY\";\n t[t.CAA = 257] = \"CAA\";\n t[t.TA = 32768] = \"TA\";\n t[t.DLV = 32769] = \"DLV\";\n return t;\n}({});\n\nlet n = function(t) {\n t[t.IN = 1] = \"IN\";\n t[t.CS = 2] = \"CS\";\n t[t.CH = 3] = \"CH\";\n t[t.HS = 4] = \"HS\";\n t[t.ANY = 255] = \"ANY\";\n return t;\n}({});\n\nlet r = function(t) {\n t[t.NOERR = 0] = \"NOERR\";\n t[t.FORMERR = 1] = \"FORMERR\";\n t[t.SERVFAIL = 2] = \"SERVFAIL\";\n t[t.NXDOMAIN = 3] = \"NXDOMAIN\";\n t[t.NOTIMP = 4] = \"NOTIMP\";\n t[t.REFUSED = 5] = \"REFUSED\";\n t[t.YXDOMAIN = 6] = \"YXDOMAIN\";\n t[t.YXRRSET = 7] = \"YXRRSET\";\n t[t.NXRRSET = 8] = \"NXRRSET\";\n t[t.NOTAUTH = 9] = \"NOTAUTH\";\n t[t.NOTZONE = 10] = \"NOTZONE\";\n t[t.CHECKING_DISABLED = 16] = \"CHECKING_DISABLED\";\n t[t.AUTHENTIC_DATA = 32] = \"AUTHENTIC_DATA\";\n t[t.RECURSION_AVAILABLE = 128] = \"RECURSION_AVAILABLE\";\n t[t.RECURSION_DESIRED = 256] = \"RECURSION_DESIRED\";\n t[t.TRUNCATED_RESPONSE = 512] = \"TRUNCATED_RESPONSE\";\n t[t.AUTHORITATIVE_ANSWER = 1024] = \"AUTHORITATIVE_ANSWER\";\n return t;\n}({});\n\nlet s = function(t) {\n t[t.OPTION_0 = 0] = \"OPTION_0\";\n t[t.LLQ = 1] = \"LLQ\";\n t[t.UL = 2] = \"UL\";\n t[t.NSID = 3] = \"NSID\";\n t[t.OPTION_4 = 4] = \"OPTION_4\";\n t[t.DAU = 5] = \"DAU\";\n t[t.DHU = 6] = \"DHU\";\n t[t.N3U = 7] = \"N3U\";\n t[t.CLIENT_SUBNET = 8] = \"CLIENT_SUBNET\";\n t[t.EXPIRE = 9] = \"EXPIRE\";\n t[t.COOKIE = 10] = \"COOKIE\";\n t[t.TCP_KEEPALIVE = 11] = \"TCP_KEEPALIVE\";\n t[t.PADDING = 12] = \"PADDING\";\n t[t.CHAIN = 13] = \"CHAIN\";\n t[t.KEY_TAG = 14] = \"KEY_TAG\";\n t[t.DEVICEID = 26946] = \"DEVICEID\";\n t[t.OPTION_65535 = 65535] = \"OPTION_65535\";\n return t;\n}({});\n\nconst a = new TextEncoder;\n\nconst i = new TextDecoder;\n\nconst o = \"undefined\" != typeof Buffer ? t => Buffer.byteLength(t) : t => {\n let e = t.length;\n for (let n = e - 1; n >= 0; n--) {\n const r = t.charCodeAt(n);\n if (r > 127 && r <= 2047) {\n e++;\n } else if (r > 2047 && r <= 65535) {\n e += 2;\n }\n if (r >= 56320 && r <= 57343) {\n n--;\n }\n }\n return e;\n};\n\nconst c = {\n bytes(t) {\n let e = 2;\n switch (t) {\n case \"\":\n case \".\":\n case \"..\":\n return 1;\n\n default:\n if (\".\" === t[0]) {\n e--;\n }\n if (\".\" === t[t.length - 1]) {\n e--;\n }\n e += t.replace(/\\\\\\./g, \".\").length;\n if (e > 255) {\n throw new RangeError(`Name \"${t}\" is above 255 byte limit.`);\n }\n return e;\n }\n },\n write(t, e, n) {\n const r = a.encode(n);\n for (let s = 46 === r[0] ? 1 : 0, a = 0; s < r.byteLength; s = a + 1) {\n a = r.indexOf(46, s);\n while (a > -1 && 92 === r[a - 1]) {\n a = r.indexOf(46, a + 1);\n }\n if (-1 === a) {\n a = r.byteLength;\n }\n if (a === s) {\n continue;\n } else if (a - s > 63) {\n throw new RangeError(`Label in \"${n}\" is above 63 byte limit.`);\n }\n let i = e + 1;\n for (let e = s; e < a; e++) {\n if (92 === r[e] && 46 === r[e + 1]) {\n e++;\n }\n t.setUint8(i++, r[e]);\n }\n t.setUint8(e, i - e - 1);\n e = i;\n s = a + 1;\n }\n return e + 1;\n },\n read(t, e) {\n const n = [];\n let r = e.offset;\n let s = e;\n while (1) {\n const e = t.getUint8(s.offset);\n if (0 === e) {\n advance(s, 1);\n break;\n } else if (!(192 & e)) {\n advance(s, 1);\n const r = sliceView(t, s, e);\n n.push(i.decode(r).replace(/\\./g, \"\\\\.\"));\n } else {\n const e = t.getUint16(s.offset) - 49152;\n advance(s, 2);\n if (e < r) {\n s = {\n offset: r = e,\n length: 0\n };\n } else {\n break;\n }\n }\n }\n return n.join(\".\") || \".\";\n }\n};\n\nconst f = {\n bytes: t => \"string\" == typeof t ? o(t) : t.byteLength,\n write(t, e, n) {\n const r = \"string\" == typeof n ? a.encode(n) : n;\n new Uint8Array(t.buffer, t.byteOffset + e, r.byteLength).set(r);\n return e += r.byteLength;\n },\n read: (t, e) => sliceView(t, e)\n};\n\nconst d = {\n bytes: t => t.byteLength + 1,\n write(t, e, n) {\n t.setUint8(e++, n.byteLength);\n new Uint8Array(t.buffer, t.byteOffset + e, n.byteLength).set(n);\n return e += n.byteLength;\n },\n read(t, e) {\n const n = t.getUint8(e.offset);\n advance(e, 1);\n return sliceView(t, e, n);\n }\n};\n\nconst u = {\n bytes: t => o(t) + 1,\n write(t, e, n) {\n const r = a.encode(n);\n t.setUint8(e++, r.byteLength);\n return f.write(t, e, r);\n },\n read(t, e) {\n const n = t.getUint8(e.offset);\n advance(e, 1);\n return i.decode(sliceView(t, e, n));\n }\n};\n\nconst l = {\n bytes(t) {\n const e = [];\n for (let n = 0; n < t.length; n++) {\n e[t[n] >> 8] = Math.max(e[t[n] >> 8] || 0, 255 & t[n]);\n }\n let n = 0;\n for (let t = 0; t < e.length; t++) {\n if (null != e[t]) {\n n += 2 + Math.ceil((e[t] + 1) / 8);\n }\n }\n return n;\n },\n write(t, e, n) {\n const r = [];\n for (let t = 0; t < n.length; t++) {\n (r[n[t] >> 8] || (r[n[t] >> 8] = []))[n[t] >> 3 & 31] |= 1 << 7 - (7 & n[t]);\n }\n for (let n = 0; n < r.length; n++) {\n const s = r[n];\n if (null != s) {\n t.setUint8(e++, n);\n t.setUint8(e++, s.length);\n for (let n = 0; n < s.length; n++) {\n t.setUint8(e++, s[n]);\n }\n }\n }\n return e;\n },\n read(t, e) {\n const {offset: n, length: r} = e;\n const s = [];\n while (e.offset - n < r) {\n const n = t.getUint8(e.offset);\n const r = t.getUint8(e.offset + 1);\n for (let a = 0; a < r; a++) {\n const r = t.getUint8(e.offset + 2 + a);\n for (let t = 0; t < 8; t++) {\n if (r & 1 << 7 - t) {\n s.push(n << 8 | a << 3 | t);\n }\n }\n }\n advance(e, 2 + r);\n }\n return s;\n }\n};\n\nconst g = {\n bytes: () => 4,\n write(t, e, n) {\n const r = n.split(\".\", 4);\n for (let n = 0; n < 4; n++) {\n t.setUint8(e++, parseInt(r[n], 10));\n }\n return e;\n },\n read(t, e) {\n const n = Math.min(e.length, 4);\n const r = new Array(4).fill(0).map((r, s) => s < n ? t.getUint8(e.offset + s) : 0).join(\".\");\n advance(e, n);\n return r;\n }\n};\n\nconst y = {\n bytes: () => 2,\n write(t, e, n) {\n t.setUint16(e, n);\n return e + 2;\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n advance(e, 2);\n return n;\n }\n};\n\nconst U = {\n bytes: () => 16,\n write(t, e, n) {\n const r = n.indexOf(\"::\");\n const s = (r > -1 ? n.slice(0, r) : n).split(\":\");\n const a = r > -1 ? n.slice(r + 2).split(\":\") : [];\n const i = a.length > 0 && a[a.length - 1].includes(\".\") ? a.pop() : void 0;\n for (let n = 0; n < s.length; n++) {\n t.setUint16(e, parseInt(s[n], 16));\n e += 2;\n }\n for (let n = 8 - (s.length + a.length + (i ? 2 : 0)); n > 0; n--) {\n t.setUint16(e, 0);\n e += 2;\n }\n for (let n = 0; n < a.length; n++) {\n t.setUint16(e, parseInt(a[n], 16));\n e += 2;\n }\n if (i) {\n const n = i.split(\".\", 4).map(t => parseInt(t, 10));\n t.setUint16(e, n[0] << 8 | n[1]);\n t.setUint16(e + 2, n[2] << 8 | n[3]);\n e += 4;\n }\n return e;\n },\n read(t, e) {\n let n = \"\";\n const r = Math.min(e.length, 16);\n for (let s = 0; s < r; s += 2) {\n if (0 !== s) {\n n += \":\";\n }\n n += t.getUint16(e.offset + s).toString(16);\n }\n advance(e, r);\n return n.replace(/(^|:)0(:0)*:0(:|$)/, \"$1::$3\").replace(/:{3,4}/, \"::\");\n }\n};\n\nconst withRDLength = t => ({\n bytes: e => t.bytes(e) + 2,\n write(e, n, r) {\n const s = n;\n n = t.write(e, n + 2, r);\n e.setUint16(s, n - s - 2);\n return n;\n },\n read(e, n) {\n const {offset: r, length: s} = n;\n const a = n.length = e.getUint16(n.offset);\n n.offset += 2;\n const i = t.read(e, n);\n n.offset = r + 2 + a;\n n.length = s;\n return i;\n }\n});\n\nconst array = t => ({\n bytes(e) {\n let n = 0;\n for (let r = 0; null != e && r < e.length; r++) {\n n += t.bytes(e[r]);\n }\n return n;\n },\n write(e, n, r) {\n for (let s = 0; null != r && s < r.length; s++) {\n n = t.write(e, n, r[s]);\n }\n return n;\n },\n read(e, n) {\n const {offset: r, length: s} = n;\n const a = [];\n while (n.offset - r < s) {\n a.push(t.read(e, n));\n }\n return a;\n }\n});\n\nconst advance = (t, e) => {\n t.offset += 0 | e;\n t.length -= 0 | e;\n t.length &= ~(t.length >> 31);\n};\n\nconst sliceView = (t, e, n = e.length) => {\n const r = new Uint8Array(t.buffer, t.byteOffset + e.offset, n);\n advance(e, n);\n return r;\n};\n\nconst h = 32768;\n\nconst w = {\n bytes: t => c.bytes(t.name) + 4,\n write(t, e, r) {\n let s = r.class || n.IN;\n if (r.qu) {\n s |= h;\n }\n e = c.write(t, e, r.name);\n t.setUint16(e, r.type);\n t.setUint16(e + 2, s);\n return e += 4;\n },\n read(t, e) {\n const r = c.read(t, e);\n const s = t.getUint16(e.offset);\n let a = t.getUint16(e.offset + 2) || n.ANY;\n let i = !1;\n if (a !== n.ANY && a & h) {\n a &= -32769;\n i = !0;\n }\n advance(e, 4);\n return {\n name: r,\n type: s,\n class: a,\n qu: i\n };\n }\n};\n\nlet b = function(t) {\n t[t.v4 = 1] = \"v4\";\n t[t.v6 = 2] = \"v6\";\n return t;\n}({});\n\nconst E = withRDLength({\n bytes: t => f.bytes(t.data),\n write: (t, e, n) => f.write(t, e, n.data),\n read: (t, e) => ({\n code: s.OPTION_0,\n data: f.read(t, e)\n })\n});\n\nconst A = \"(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\";\n\nconst p = new RegExp(`^${`(?:${A}\\\\.){3}${A}`}$`);\n\nconst N = withRDLength({\n bytes: t => Math.ceil((t.sourcePrefixLength || 0) / 8) + 4,\n write(t, e, n) {\n const r = n.sourcePrefixLength || 0;\n const s = n.scopePrefixLength || 0;\n const a = n.family || (p.test(n.ip) ? b.v4 : b.v6);\n const i = Math.ceil(r / 8);\n t.setUint16(e, a);\n t.setUint8(e + 2, r);\n t.setUint8(e + 3, s);\n e += 4;\n const o = ((t, e) => {\n const n = new ArrayBuffer(t.bytes(e));\n const r = t.write(new DataView(n), 0, e);\n return new Uint8Array(n, 0, r);\n })(a === b.v4 ? g : U, n.ip);\n for (let n = 0; n < i; n++) {\n t.setUint8(e++, o[n]);\n }\n return e;\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n const r = t.getUint8(e.offset + 2);\n const a = t.getUint8(e.offset + 3);\n advance(e, 4);\n return {\n code: s.CLIENT_SUBNET,\n family: n,\n sourcePrefixLength: r,\n scopePrefixLength: a,\n ip: n === b.v4 ? g.read(t, e) : U.read(t, e)\n };\n }\n});\n\nconst S = withRDLength({\n bytes: t => t.timeout ? 2 : 0,\n write(t, e, n) {\n if (n.timeout) {\n t.setUint16(e, n.timeout);\n e += 2;\n }\n return e;\n },\n read(t, e) {\n if (e.length) {\n const n = t.getUint16(e.offset);\n advance(e, 2);\n return {\n code: s.TCP_KEEPALIVE,\n timeout: n\n };\n } else {\n return {\n code: s.TCP_KEEPALIVE,\n timeout: void 0\n };\n }\n }\n});\n\nconst T = withRDLength({\n bytes: t => t.length || 0,\n write: (t, e, n) => e + (n.length || 0),\n read(t, e) {\n const {length: n} = e;\n advance(e, n);\n return {\n code: s.PADDING,\n length: n\n };\n }\n});\n\nconst I = withRDLength({\n bytes: t => 2 * t.tags.length,\n write(t, e, n) {\n for (let r = 0; r < n.tags.length; r++) {\n t.setUint16(e, n.tags[r]);\n e += 2;\n }\n return e;\n },\n read(t, e) {\n const {offset: n, length: r} = e;\n const a = [];\n while (e.offset - n < r) {\n a.push(t.getUint16(e.offset));\n advance(e, 2);\n }\n return {\n code: s.KEY_TAG,\n tags: a\n };\n }\n});\n\nconst isUnknownOpt = t => !!t.data;\n\nconst P = {\n bytes(t) {\n if (isUnknownOpt(t)) {\n return E.bytes(t) + 2;\n }\n switch (t.code) {\n case s.CLIENT_SUBNET:\n return N.bytes(t) + 2;\n\n case s.TCP_KEEPALIVE:\n return S.bytes(t) + 2;\n\n case s.PADDING:\n return T.bytes(t) + 2;\n\n case s.KEY_TAG:\n return I.bytes(t) + 2;\n }\n },\n write(t, e, n) {\n t.setUint16(e, n.code);\n e += 2;\n if (isUnknownOpt(n)) {\n return E.write(t, e, n);\n }\n switch (n.code) {\n case s.CLIENT_SUBNET:\n return N.write(t, e, n);\n\n case s.TCP_KEEPALIVE:\n return S.write(t, e, n);\n\n case s.PADDING:\n return T.write(t, e, n);\n\n case s.KEY_TAG:\n return I.write(t, e, n);\n }\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n advance(e, 2);\n switch (n) {\n case s.CLIENT_SUBNET:\n return N.read(t, e);\n\n case s.TCP_KEEPALIVE:\n return S.read(t, e);\n\n case s.PADDING:\n return T.read(t, e);\n\n case s.KEY_TAG:\n return I.read(t, e);\n\n default:\n const r = E.read(t, e);\n r.code = n;\n return r;\n }\n }\n};\n\nlet R = function(t) {\n t[t.Mandatory = 0] = \"Mandatory\";\n t[t.Alpn = 1] = \"Alpn\";\n t[t.NoDefaultAlpn = 2] = \"NoDefaultAlpn\";\n t[t.Port = 3] = \"Port\";\n t[t.Ipv4Hint = 4] = \"Ipv4Hint\";\n t[t.EchConfig = 5] = \"EchConfig\";\n t[t.Ipv6Hint = 6] = \"Ipv6Hint\";\n t[t.DohPath = 7] = \"DohPath\";\n t[t.Odoh = 32769] = \"Odoh\";\n return t;\n}({});\n\nconst D = withRDLength(array(y));\n\nconst C = withRDLength(array(u));\n\nconst m = withRDLength(y);\n\nconst O = withRDLength(array(g));\n\nconst L = withRDLength(array(U));\n\nconst v = withRDLength(f);\n\nconst H = {\n bytes(t) {\n let e = 0;\n if (null != t.mandatory) {\n e += D.bytes(t.mandatory) + 2;\n }\n if (null != t.alpn) {\n e += C.bytes(t.alpn) + 2;\n }\n if (t[\"no-default-alpn\"]) {\n e += 4;\n }\n if (null != t.port) {\n e += m.bytes(t.port) + 2;\n }\n if (t.ipv4hint) {\n e += O.bytes(t.ipv4hint) + 2;\n }\n if (t.ipv6hint) {\n e += L.bytes(t.ipv6hint) + 2;\n }\n if (t.echconfig) {\n e += v.bytes(t.echconfig) + 2;\n }\n if (t.dohpath) {\n e += v.bytes(t.dohpath) + 2;\n }\n if (t.odoh) {\n e += v.bytes(t.odoh) + 2;\n }\n return e;\n },\n write(t, e, n) {\n if (null != n.mandatory) {\n t.setUint16(e, R.Mandatory);\n e = D.write(t, e + 2, n.mandatory);\n }\n if (null != n.alpn) {\n t.setUint16(e, R.Alpn);\n e = C.write(t, e + 2, n.alpn);\n }\n if (n[\"no-default-alpn\"]) {\n t.setUint16(e, R.NoDefaultAlpn);\n t.setUint16(e + 2, 0);\n e += 4;\n }\n if (null != n.port) {\n t.setUint16(e, R.Port);\n e = m.write(t, e + 2, n.port);\n }\n if (n.ipv4hint) {\n t.setUint16(e, R.Ipv4Hint);\n e = O.write(t, e + 2, n.ipv4hint);\n }\n if (n.ipv6hint) {\n t.setUint16(e, R.Ipv6Hint);\n e = L.write(t, e + 2, n.ipv6hint);\n }\n if (n.echconfig) {\n t.setUint16(e, R.EchConfig);\n e = v.write(t, e + 2, n.echconfig);\n }\n if (n.dohpath) {\n t.setUint16(e, R.DohPath);\n e = v.write(t, e + 2, n.dohpath);\n }\n if (n.odoh) {\n t.setUint16(e, R.Odoh);\n e = v.write(t, e + 2, n.odoh);\n }\n return e;\n },\n read(t, e) {\n const {length: n, offset: r} = e;\n const s = {\n mandatory: void 0,\n alpn: void 0,\n \"no-default-alpn\": !1,\n port: void 0,\n ipv4hint: void 0,\n ipv6hint: void 0,\n echconfig: void 0,\n dohpath: void 0,\n odoh: void 0\n };\n while (e.offset - r < n) {\n const n = t.getUint16(e.offset);\n advance(e, 2);\n switch (n) {\n case R.Mandatory:\n s.mandatory = D.read(t, e);\n break;\n\n case R.Alpn:\n s.alpn = C.read(t, e);\n break;\n\n case R.NoDefaultAlpn:\n s[\"no-default-alpn\"] = !0;\n advance(e, 2);\n break;\n\n case R.Port:\n s.port = m.read(t, e);\n break;\n\n case R.Ipv4Hint:\n s.ipv4hint = O.read(t, e);\n break;\n\n case R.Ipv6Hint:\n s.ipv6hint = L.read(t, e);\n break;\n\n case R.EchConfig:\n s.echconfig = v.read(t, e);\n break;\n\n case R.DohPath:\n s.dohpath = i.decode(v.read(t, e));\n break;\n\n case R.Odoh:\n s.odoh = v.read(t, e);\n break;\n\n default:\n v.read(t, e);\n }\n }\n return s;\n }\n};\n\nconst x = withRDLength(f);\n\nconst _ = withRDLength(c);\n\nconst M = withRDLength(g);\n\nconst V = withRDLength(U);\n\nconst Y = withRDLength(array(u));\n\nconst K = withRDLength({\n bytes: t => c.bytes(t.target) + 6,\n write(t, e, n) {\n t.setUint16(e, n.priority || 0);\n t.setUint16(e + 2, n.weight || 0);\n t.setUint16(e + 4, n.port || 0);\n return c.write(t, e + 6, n.target);\n },\n read(t, e) {\n const n = {\n priority: 0,\n weight: 0,\n port: 0,\n target: \"\"\n };\n n.priority = t.getUint16(e.offset);\n n.weight = t.getUint16(e.offset + 2);\n n.port = t.getUint16(e.offset + 4);\n advance(e, 6);\n n.target = c.read(t, e);\n return n;\n }\n});\n\nconst X = withRDLength({\n bytes: t => u.bytes(t.cpu) + u.bytes(t.os),\n write(t, e, n) {\n e = u.write(t, e, n.cpu);\n return e = u.write(t, e, n.os);\n },\n read: (t, e) => ({\n cpu: u.read(t, e),\n os: u.read(t, e)\n })\n});\n\nconst toCaaTag = t => {\n switch (t) {\n case \"issue\":\n case \"issuewild\":\n case \"iodef\":\n return t;\n\n default:\n return \"issue\";\n }\n};\n\nconst F = withRDLength({\n bytes: t => u.bytes(t.tag) + f.bytes(t.value) + 1,\n write(t, e, n) {\n let r = n.flags || 0;\n if (n.issuerCritical) {\n r |= 128;\n }\n t.setUint8(e, r);\n e = u.write(t, e + 1, n.tag);\n return e = f.write(t, e, n.value);\n },\n read(t, e) {\n const n = t.getUint8(e.offset);\n advance(e, 1);\n return {\n flags: n,\n tag: toCaaTag(u.read(t, e)),\n value: f.read(t, e),\n issuerCritical: !!(128 & n)\n };\n }\n});\n\nconst G = withRDLength({\n bytes: t => c.bytes(t.mname) + c.bytes(t.rname) + 20,\n write(t, e, n) {\n e = c.write(t, e, n.mname);\n e = c.write(t, e, n.rname);\n t.setUint32(e, n.serial || 0);\n t.setUint32(e + 4, n.refresh || 0);\n t.setUint32(e + 8, n.retry || 0);\n t.setUint32(e + 12, n.expire || 0);\n t.setUint32(e + 16, n.minimum || 0);\n return e + 20;\n },\n read(t, e) {\n const n = {\n mname: c.read(t, e),\n rname: c.read(t, e),\n serial: t.getUint32(e.offset),\n refresh: t.getUint32(e.offset + 4),\n retry: t.getUint32(e.offset + 8),\n expire: t.getUint32(e.offset + 12),\n minimum: t.getUint32(e.offset + 16)\n };\n e.offset += 20;\n e.length -= 20;\n return n;\n }\n});\n\nconst B = withRDLength({\n bytes: t => c.bytes(t.exchange) + 2,\n write(t, e, n) {\n t.setUint16(e, n.preference || 0);\n return c.write(t, e + 2, n.exchange);\n },\n read(t, e) {\n const n = {\n preference: t.getUint16(e.offset),\n exchange: \"\"\n };\n advance(e, 2);\n n.exchange = c.read(t, e);\n return n;\n }\n});\n\nconst k = withRDLength({\n bytes: t => f.bytes(t.key) + 4,\n write(t, e, n) {\n t.setUint16(e, n.flags);\n t.setUint8(e + 2, 3);\n t.setUint8(e + 3, n.algorithm);\n return f.write(t, e + 4, n.key);\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n const r = t.getUint8(e.offset + 3);\n advance(e, 4);\n return {\n flags: n,\n algorithm: r,\n key: f.read(t, e)\n };\n }\n});\n\nconst $ = withRDLength({\n bytes: t => 18 + c.bytes(t.signersName) + f.bytes(t.signature),\n write(t, e, n) {\n t.setUint16(e, n.typeCovered);\n t.setUint8(e + 2, n.algorithm);\n t.setUint8(e + 3, n.labels);\n t.setUint32(e + 4, n.originalTTL);\n t.setUint32(e + 8, n.expiration);\n t.setUint32(e + 12, n.inception);\n t.setUint16(e + 16, n.keyTag);\n e = c.write(t, e + 18, n.signersName);\n return e = f.write(t, e, n.signature);\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n const r = t.getUint8(e.offset + 2);\n const s = t.getUint8(e.offset + 3);\n const a = t.getUint32(e.offset + 4);\n const i = t.getUint32(e.offset + 8);\n const o = t.getUint32(e.offset + 12);\n const d = t.getUint16(e.offset + 16);\n advance(e, 18);\n return {\n typeCovered: n,\n algorithm: r,\n labels: s,\n originalTTL: a,\n expiration: i,\n inception: o,\n keyTag: d,\n signersName: c.read(t, e),\n signature: f.read(t, e)\n };\n }\n});\n\nconst q = withRDLength({\n bytes: t => c.bytes(t.mbox) + c.bytes(t.txt),\n write(t, e, n) {\n e = c.write(t, e, n.mbox);\n return e = c.write(t, e, n.txt);\n },\n read: (t, e) => ({\n mbox: c.read(t, e),\n txt: c.read(t, e)\n })\n});\n\nconst Q = withRDLength({\n bytes: t => c.bytes(t.nextDomain) + l.bytes(t.rrtypes),\n write(t, e, n) {\n e = c.write(t, e, n.nextDomain);\n return e = l.write(t, e, n.rrtypes);\n },\n read: (t, e) => ({\n nextDomain: c.read(t, e),\n rrtypes: l.read(t, e)\n })\n});\n\nconst j = withRDLength({\n bytes: t => d.bytes(t.salt) + d.bytes(t.nextDomain) + l.bytes(t.rrtypes) + 4,\n write(t, e, n) {\n t.setUint8(e, n.algorithm);\n t.setUint8(e + 1, n.flags);\n t.setUint16(e + 2, n.iterations);\n e = d.write(t, e + 4, n.salt);\n e = d.write(t, e, n.nextDomain);\n return e = l.write(t, e, n.rrtypes);\n },\n read(t, e) {\n const n = t.getUint8(e.offset);\n const r = t.getUint8(e.offset + 1);\n const s = t.getUint16(e.offset + 2);\n advance(e, 4);\n return {\n algorithm: n,\n flags: r,\n iterations: s,\n salt: d.read(t, e),\n nextDomain: d.read(t, e),\n rrtypes: l.read(t, e)\n };\n }\n});\n\nconst z = withRDLength({\n bytes: t => f.bytes(t.fingerprint) + 2,\n write(t, e, n) {\n t.setUint8(e, n.algorithm);\n t.setUint8(e + 1, n.hash);\n return f.write(t, e + 2, n.fingerprint);\n },\n read(t, e) {\n const n = t.getUint8(e.offset);\n const r = t.getUint8(e.offset + 1);\n advance(e, 2);\n return {\n algorithm: n,\n hash: r,\n fingerprint: f.read(t, e)\n };\n }\n});\n\nconst W = withRDLength({\n bytes: t => f.bytes(t.digest) + 4,\n write(t, e, n) {\n t.setUint16(e, n.keyTag);\n t.setUint8(e + 2, n.algorithm);\n t.setUint8(e + 3, n.digestType);\n return e = f.write(t, e + 4, n.digest);\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n const r = t.getUint8(e.offset + 2);\n const s = t.getUint8(e.offset + 3);\n advance(e, 4);\n return {\n keyTag: n,\n algorithm: r,\n digestType: s,\n digest: f.read(t, e)\n };\n }\n});\n\nconst Z = withRDLength({\n bytes: t => u.bytes(t.flags) + u.bytes(t.services) + u.bytes(t.regexp) + c.bytes(t.replacement) + 4,\n write(t, e, n) {\n t.setUint16(e, n.order);\n t.setUint16(e + 2, n.preference);\n e = u.write(t, e + 4, n.flags);\n e = u.write(t, e, n.services);\n e = u.write(t, e, n.regexp);\n return e = c.write(t, e, n.replacement);\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n const r = t.getUint16(e.offset + 2);\n advance(e, 4);\n return {\n order: n,\n preference: r,\n flags: u.read(t, e),\n services: u.read(t, e),\n regexp: u.read(t, e),\n replacement: c.read(t, e)\n };\n }\n});\n\nconst J = withRDLength({\n bytes: t => f.bytes(t.certificate) + 3,\n write(t, e, n) {\n t.setUint8(e, n.usage);\n t.setUint8(e + 1, n.selector);\n t.setUint8(e + 2, n.matchingType);\n return f.write(t, e + 3, n.certificate);\n },\n read(t, e) {\n const n = t.getUint8(e.offset);\n const r = t.getUint8(e.offset + 1);\n const s = t.getUint8(e.offset + 2);\n advance(e, 3);\n return {\n usage: n,\n selector: r,\n matchingType: s,\n certificate: f.read(t, e)\n };\n }\n});\n\nconst tt = withRDLength({\n bytes: t => c.bytes(t.name) + H.bytes(t.params) + 2,\n write(t, e, n) {\n t.setUint16(e, n.priority || 0);\n e = c.write(t, e + 2, n.name);\n return e = H.write(t, e, n.params);\n },\n read(t, e) {\n const n = t.getUint16(e.offset);\n advance(e, 2);\n return {\n name: c.read(t, e),\n priority: n,\n params: H.read(t, e)\n };\n }\n});\n\nconst et = withRDLength(array(P));\n\nconst nt = 32768;\n\nconst rt = {\n bytes(t) {\n const n = 8 + c.bytes(t.type === e.OPT ? \".\" : t.name);\n switch (t.type) {\n case e.A:\n return n + M.bytes(t.data);\n\n case e.NS:\n return n + _.bytes(t.data);\n\n case e.SOA:\n return n + G.bytes(t.data);\n\n case e.HINFO:\n return n + X.bytes(t.data);\n\n case e.MX:\n return n + B.bytes(t.data);\n\n case e.TXT:\n return n + Y.bytes(t.data);\n\n case e.RP:\n return n + q.bytes(t.data);\n\n case e.AAAA:\n return n + V.bytes(t.data);\n\n case e.SRV:\n return n + K.bytes(t.data);\n\n case e.NAPTR:\n return n + Z.bytes(t.data);\n\n case e.OPT:\n return n + et.bytes(t.data);\n\n case e.DS:\n return n + W.bytes(t.data);\n\n case e.SSHFP:\n return n + z.bytes(t.data);\n\n case e.RRSIG:\n return n + $.bytes(t.data);\n\n case e.NSEC:\n return n + Q.bytes(t.data);\n\n case e.DNSKEY:\n return n + k.bytes(t.data);\n\n case e.NSEC3:\n return n + j.bytes(t.data);\n\n case e.TLSA:\n return n + J.bytes(t.data);\n\n case e.SVCB:\n case e.HTTPS:\n return n + tt.bytes(t.data);\n\n case e.CAA:\n return n + F.bytes(t.data);\n\n case e.PTR:\n case e.CNAME:\n case e.DNAME:\n return n + _.bytes(t.data);\n\n default:\n return n + x.bytes(t.data);\n }\n },\n write(t, n, r) {\n if (r.type === e.OPT) {\n n = c.write(t, n, \".\");\n t.setUint16(n, r.type);\n t.setUint16(n + 2, r.udpPayloadSize || 4096);\n t.setUint8(n + 4, r.extendedRcode || 0);\n t.setUint8(n + 5, r.ednsVersion || 0);\n t.setUint16(n + 6, r.flags || 0);\n return et.write(t, n += 8, r.data);\n }\n n = c.write(t, n, r.name);\n t.setUint16(n, r.type);\n t.setUint16(n + 2, (r.class || 0) | (r.flush ? nt : 0));\n t.setUint32(n + 4, r.ttl || 0);\n n += 8;\n switch (r.type) {\n case e.A:\n return M.write(t, n, r.data);\n\n case e.NS:\n return _.write(t, n, r.data);\n\n case e.SOA:\n return G.write(t, n, r.data);\n\n case e.HINFO:\n return X.write(t, n, r.data);\n\n case e.MX:\n return B.write(t, n, r.data);\n\n case e.TXT:\n return Y.write(t, n, r.data);\n\n case e.RP:\n return q.write(t, n, r.data);\n\n case e.AAAA:\n return V.write(t, n, r.data);\n\n case e.SRV:\n return K.write(t, n, r.data);\n\n case e.NAPTR:\n return Z.write(t, n, r.data);\n\n case e.DS:\n return W.write(t, n, r.data);\n\n case e.SSHFP:\n return z.write(t, n, r.data);\n\n case e.RRSIG:\n return $.write(t, n, r.data);\n\n case e.NSEC:\n return Q.write(t, n, r.data);\n\n case e.DNSKEY:\n return k.write(t, n, r.data);\n\n case e.NSEC3:\n return j.write(t, n, r.data);\n\n case e.TLSA:\n return J.write(t, n, r.data);\n\n case e.SVCB:\n case e.HTTPS:\n return tt.write(t, n, r.data);\n\n case e.CAA:\n return F.write(t, n, r.data);\n\n case e.PTR:\n case e.CNAME:\n case e.DNAME:\n return _.write(t, n, r.data);\n\n default:\n return x.write(t, n, r.data);\n }\n },\n read(t, n) {\n const r = c.read(t, n);\n const s = t.getUint16(n.offset);\n if (s === e.OPT) {\n const e = t.getUint16(n.offset + 2) || 4096;\n const r = t.getUint8(n.offset + 4);\n const a = t.getUint8(n.offset + 5);\n const i = t.getUint16(n.offset + 6);\n advance(n, 8);\n return {\n type: s,\n udpPayloadSize: e,\n extendedRcode: r,\n ednsVersion: a,\n flags: i,\n data: et.read(t, n)\n };\n }\n const a = t.getUint16(n.offset + 2);\n const i = t.getUint32(n.offset + 4);\n advance(n, 8);\n const o = {\n name: r,\n type: s,\n class: -32769 & a,\n flush: !!(a & nt),\n ttl: i,\n data: null\n };\n switch (o.type) {\n case e.A:\n o.data = M.read(t, n);\n return o;\n\n case e.NS:\n o.data = _.read(t, n);\n return o;\n\n case e.SOA:\n o.data = G.read(t, n);\n return o;\n\n case e.HINFO:\n o.data = X.read(t, n);\n return o;\n\n case e.MX:\n o.data = B.read(t, n);\n return o;\n\n case e.TXT:\n o.data = Y.read(t, n);\n return o;\n\n case e.RP:\n o.data = q.read(t, n);\n return o;\n\n case e.AAAA:\n o.data = V.read(t, n);\n return o;\n\n case e.SRV:\n o.data = K.read(t, n);\n return o;\n\n case e.NAPTR:\n o.data = Z.read(t, n);\n return o;\n\n case e.DS:\n o.data = W.read(t, n);\n return o;\n\n case e.SSHFP:\n o.data = z.read(t, n);\n return o;\n\n case e.RRSIG:\n o.data = $.read(t, n);\n return o;\n\n case e.NSEC:\n o.data = Q.read(t, n);\n return o;\n\n case e.DNSKEY:\n o.data = k.read(t, n);\n return o;\n\n case e.NSEC3:\n o.data = j.read(t, n);\n return o;\n\n case e.TLSA:\n o.data = J.read(t, n);\n return o;\n\n case e.SVCB:\n case e.HTTPS:\n o.data = tt.read(t, n);\n return o;\n\n case e.CAA:\n o.data = F.read(t, n);\n return o;\n\n case e.PTR:\n case e.CNAME:\n case e.DNAME:\n o.data = _.read(t, n);\n return o;\n\n default:\n o.data = x.read(t, n);\n return o;\n }\n }\n};\n\nconst readList = (t, e, n, r) => {\n if (!r) {\n return;\n }\n const {offset: s, length: a} = n;\n const i = [];\n for (let o = 0; o < r && n.offset - s < a; o++) {\n i.push(t.read(e, n));\n }\n return i;\n};\n\nconst st = {\n bytes(t) {\n const {questions: e, answers: n, authorities: r, additionals: s} = t;\n let a = 12;\n let i = 0;\n for (i = 0; e && i < e.length; i++) {\n a += w.bytes(e[i]);\n }\n for (i = 0; n && i < n.length; i++) {\n a += rt.bytes(n[i]);\n }\n for (i = 0; r && i < r.length; i++) {\n a += rt.bytes(r[i]);\n }\n for (i = 0; s && i < s.length; i++) {\n a += rt.bytes(s[i]);\n }\n return a;\n },\n write(e, n, r) {\n const {questions: s, answers: a, authorities: i, additionals: o} = r;\n let c = 32767 & (r.flags || 0) | (r.type || t.QUERY) | (r.rtype || 0);\n e.setUint16(n, r.id || 0);\n e.setUint16(n + 2, c);\n e.setUint16(n + 4, r.questions?.length || 0);\n e.setUint16(n + 6, r.answers?.length || 0);\n e.setUint16(n + 8, r.authorities?.length || 0);\n e.setUint16(n + 10, r.additionals?.length || 0);\n n += 12;\n let f = 0;\n for (f = 0; s && f < s.length; f++) {\n n = w.write(e, n, s[f]);\n }\n for (f = 0; a && f < a.length; f++) {\n n = rt.write(e, n, a[f]);\n }\n for (f = 0; i && f < i.length; f++) {\n n = rt.write(e, n, i[f]);\n }\n for (f = 0; o && f < o.length; f++) {\n n = rt.write(e, n, o[f]);\n }\n return n;\n },\n read(e, n) {\n const r = e.getUint16(n.offset);\n const s = e.getUint16(n.offset + 2);\n const a = e.getUint16(n.offset + 4);\n const i = e.getUint16(n.offset + 6);\n const o = e.getUint16(n.offset + 8);\n const c = e.getUint16(n.offset + 10);\n advance(n, 12);\n return {\n id: r,\n flags: s,\n rtype: 15 & s,\n type: s & t.RESPONSE ? t.RESPONSE : t.QUERY,\n questions: readList(w, e, n, a),\n answers: readList(rt, e, n, i),\n authorities: readList(rt, e, n, o),\n additionals: readList(rt, e, n, c)\n };\n }\n};\n\nfunction decode(t) {\n const e = \"buffer\" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);\n return st.read(e, {\n offset: 0,\n length: e.byteLength\n });\n}\n\nfunction streamDecode(t) {\n const e = \"buffer\" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);\n const n = Math.min(e.byteLength - 2, e.getUint16(0));\n return st.read(e, {\n offset: 2,\n length: n\n });\n}\n\nfunction encodingLength(t) {\n return st.bytes(t);\n}\n\nfunction encode(t) {\n const e = new ArrayBuffer(st.bytes(t));\n const n = st.write(new DataView(e), 0, t);\n return new Uint8Array(e, 0, n);\n}\n\nfunction streamEncode(t) {\n const e = new ArrayBuffer(st.bytes(t) + 2);\n const n = new DataView(e);\n const r = st.write(n, 2, t);\n n.setUint16(0, r - 2);\n return new Uint8Array(e, 0, r);\n}\n\nexport { s as OptCode, r as PacketFlag, t as PacketType, n as RecordClass, e as RecordType, decode, encode, encodingLength, streamDecode, streamEncode };\n//# sourceMappingURL=dns-message.mjs.map\n","import os from 'node:os';\n\nimport { IPType } from './constants';\n\nexport type { NetworkInterfaceInfo } from 'node:os';\n\nexport interface NetworkBinding {\n readonly iname: string;\n readonly family: IPType;\n readonly address: string;\n readonly netmask: string;\n readonly mac: string;\n readonly internal: boolean;\n readonly cidr: string | null;\n readonly scopeid?: number;\n}\n\nexport const networkInterfaces = (() => {\n let _interfaces: ReturnType<typeof os.networkInterfaces> | null = null;\n let _promise: Promise<unknown> | null = null;\n return () => {\n if (!_interfaces) _interfaces = os.networkInterfaces();\n if (!_promise)\n _promise = Promise.resolve().then(() => (_interfaces = _promise = null));\n return _interfaces;\n };\n})();\n\nexport const networkInterfaceNames = (): string[] => {\n const inames: string[] = [];\n const interfaces = networkInterfaces();\n for (const iname in interfaces) {\n const bindings = interfaces[iname];\n if (bindings?.some(binding => !binding.internal)) {\n inames.push(iname);\n }\n }\n return inames.length ? inames : Object.keys(interfaces);\n};\n\nexport const interfaceBindings = (\n iname: string,\n family: IPType\n): NetworkBinding[] | undefined => {\n const bindings = networkInterfaces()\n [iname]?.filter(binding => binding.family === family)\n .map(binding => ({ ...binding, family, iname }));\n return bindings?.length ? bindings : undefined;\n};\n\nexport const hasScopeid = (\n bind: NetworkBinding\n): bind is NetworkBinding & { scopeid: number } => {\n return bind.scopeid != null && bind.scopeid > 0;\n};\n\nexport const hostname = () => os.hostname();\n\nexport const fingerprint = (port: number, seed: number) => {\n const value = `${hostname()}:${port}`;\n let hash = 5381;\n if (seed !== 0) hash = (hash << 5) + hash + (seed & 0xff);\n for (let i = 0, l = value.length; i < l; i++)\n hash = (hash << 5) + hash + value.charCodeAt(i);\n return (hash & 0xffff).toString(16).toUpperCase().padStart(4, '0');\n};\n","import {\n Packet,\n RecordType,\n RecordClass,\n SrvAnswer,\n AAnswer,\n AAAAAnswer,\n PacketType,\n TxtAnswer,\n PtrAnswer,\n PacketFlag,\n Answer,\n Question,\n encode,\n} from 'dns-message';\n\nimport { fingerprint, NetworkBinding } from './nics';\nimport { IPType, DNSSD_NAME, LABEL_LENGTH } from './constants';\nimport type { AdvertiseParams } from './advertise';\n\nexport type TxtValue = string | number | boolean | null | undefined;\n\nexport interface ServiceInput extends AdvertiseParams {\n nameSeed: number;\n hostnameSeed: number;\n}\n\nexport interface ServiceRecord {\n domain: string;\n fqdnOut: string;\n fqdnIn: string;\n host: string;\n port: number;\n subtypes: Record<string, true | undefined>;\n txt: string[];\n ttl: number;\n}\n\nexport const createServiceInput = (options: AdvertiseParams): ServiceInput => ({\n ...options,\n nameSeed: 0,\n hostnameSeed: 0,\n});\n\nconst sanitizeSubtype = (subtype: string): string =>\n subtype\n .trim()\n .replace(/[^a-zA-Z0-9-_.]/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n\nconst sanitizeLabel = (label: string): string =>\n label\n .trim()\n .replace(/\\.local\\.?$/i, '')\n .replace(/[^a-zA-Z0-9-]/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase()\n .slice(0, LABEL_LENGTH);\n\nconst sanitizeName = (name: string): string =>\n name.trim().replace(/\\.+/, '_').slice(0, LABEL_LENGTH);\n\nconst createServiceHost = (input: string, seed: number) => {\n let host = sanitizeLabel(input);\n if (seed) {\n const match = /[-_](\\d+)$/.exec(host);\n if (match) {\n const prefix = host.slice(0, -match[0].length);\n const postfix = parseInt(match[1], 10);\n const suffix = `-${(postfix || seed) + 1}`;\n host = prefix.slice(0, LABEL_LENGTH - suffix.length) + suffix;\n } else {\n const suffix = `-${seed + 1}`;\n host = host.slice(0, LABEL_LENGTH - suffix.length) + suffix;\n }\n }\n return host;\n};\n\nconst createServiceName = (input: string, port: number, seed: number) => {\n const name = sanitizeName(input);\n if (seed) {\n const suffix = ` (${fingerprint(port, seed - 1)})`;\n return name.slice(0, LABEL_LENGTH - suffix.length) + suffix;\n } else {\n return name;\n }\n};\n\nexport const createServiceRecord = (input: ServiceInput): ServiceRecord => {\n const host = createServiceHost(input.hostname, input.hostnameSeed);\n const name = createServiceName(input.name, input.port, input.nameSeed);\n const domain = `_${sanitizeLabel(input.type)}._${sanitizeLabel(input.protocol)}.local`;\n const fqdnOut = `${name}.${domain}`;\n const txt: string[] = [];\n for (const key in input.txt) {\n const value = input.txt[key];\n if (typeof value === 'string' || typeof value === 'number') {\n txt.push(`${key}=${value}`);\n } else if (typeof value === 'boolean' && value) {\n txt.push(key);\n }\n }\n return {\n domain,\n fqdnOut,\n fqdnIn: fqdnOut.toLowerCase(),\n host: `${host}.local`,\n port: input.port >>> 0,\n subtypes: (input.subtypes || []).reduce((set, subtype) => {\n set[`${sanitizeSubtype(subtype)}._sub.${domain}`] = true;\n return set;\n }, Object.create(null)),\n txt,\n ttl: input.ttl || 250,\n };\n};\n\nconst srvAnswer = (srv: ServiceRecord, ttl: number): SrvAnswer => ({\n type: RecordType.SRV,\n class: RecordClass.IN,\n name: srv.fqdnOut,\n ttl,\n flush: true,\n data: {\n priority: 0,\n weight: 0,\n port: srv.port,\n target: srv.host,\n },\n});\n\nconst txtAnswer = (srv: ServiceRecord, ttl: number): TxtAnswer => ({\n type: RecordType.TXT,\n class: RecordClass.IN,\n name: srv.fqdnOut,\n ttl,\n flush: true,\n data: srv.txt,\n});\n\nconst ptrAnswer = (name: string, data: string, ttl: number): PtrAnswer => ({\n type: RecordType.PTR,\n class: RecordClass.IN,\n name,\n ttl,\n flush: false,\n data,\n});\n\nconst ptrAnswers = (srv: ServiceRecord, ttl: number): PtrAnswer[] => [\n ptrAnswer(srv.domain, srv.fqdnOut, ttl),\n ptrAnswer(DNSSD_NAME, srv.domain, ttl),\n ...Object.keys(srv.subtypes).map(subtype =>\n ptrAnswer(subtype, srv.fqdnOut, ttl)\n ),\n];\n\nconst aAnswers = (\n srv: ServiceRecord,\n bindings: NetworkBinding[],\n ttl: number\n): AAnswer[] =>\n bindings\n .filter(binding => binding.family === IPType.v4)\n .map(binding => ({\n type: RecordType.A,\n class: RecordClass.IN,\n name: srv.host,\n ttl,\n flush: true,\n data: binding.address,\n }));\n\nconst aaaaAnswers = (\n srv: ServiceRecord,\n bindings: NetworkBinding[],\n ttl: number\n): AAAAAnswer[] =>\n bindings\n .filter(binding => binding.family === IPType.v6)\n .map(binding => ({\n type: RecordType.AAAA,\n class: RecordClass.IN,\n name: srv.host,\n ttl,\n flush: true,\n data: binding.address,\n }));\n\nconst answers = (\n srv: ServiceRecord,\n bindings: NetworkBinding[],\n ttl: number\n) => [\n ...ptrAnswers(srv, ttl),\n srvAnswer(srv, ttl),\n txtAnswer(srv, ttl),\n ...aAnswers(srv, bindings, ttl),\n ...aaaaAnswers(srv, bindings, ttl),\n];\n\nexport const announceMessage = (\n srv: ServiceRecord,\n bindings: NetworkBinding[]\n) =>\n encode({\n type: PacketType.RESPONSE,\n flags: PacketFlag.AUTHORITATIVE_ANSWER,\n answers: answers(srv, bindings, srv.ttl),\n });\n\nexport const goodbyeMessage = (\n srv: ServiceRecord,\n bindings: NetworkBinding[]\n) =>\n encode({\n type: PacketType.RESPONSE,\n flags: PacketFlag.AUTHORITATIVE_ANSWER,\n answers: answers(srv, bindings, 0),\n });\n\nexport const probeMessage = (srv: ServiceRecord, bindings: NetworkBinding[]) =>\n encode({\n type: PacketType.QUERY,\n questions: [\n {\n name: srv.fqdnOut,\n type: RecordType.ANY,\n class: RecordClass.IN,\n qu: true,\n },\n {\n name: srv.host,\n type: RecordType.ANY,\n class: RecordClass.IN,\n qu: true,\n },\n ],\n authorities: [\n srvAnswer(srv, srv.ttl),\n ...aAnswers(srv, bindings, srv.ttl),\n ...aaaaAnswers(srv, bindings, srv.ttl),\n ],\n });\n\nexport const enum ConflictFlag {\n NONE = 0,\n NAME = 1 << 0,\n\n HOSTNAME_A = 1 << 1,\n HOSTNAME_AAAA = 1 << 2,\n HOSTNAME = ConflictFlag.HOSTNAME_A | ConflictFlag.HOSTNAME_AAAA,\n}\n\nconst checkAnswerConflicts = (\n answers: Answer[],\n srv: ServiceRecord,\n bindings: NetworkBinding[]\n): ConflictFlag => {\n let flag = ConflictFlag.NONE;\n const v4Addresses = new Set(\n bindings\n .filter(binding => binding.family === IPType.v4)\n .map(binding => binding.address)\n );\n const v6Addresses = new Set(\n bindings\n .filter(binding => binding.family === IPType.v6)\n .map(binding => binding.address)\n );\n for (const answer of answers) {\n const answerName = answer.name?.toLowerCase();\n if (\n answer.type === RecordType.SRV &&\n answerName === srv.fqdnIn &&\n (answer.data.port !== srv.port ||\n answer.data.target.toLowerCase() !== srv.host)\n ) {\n flag |= ConflictFlag.NAME;\n } else if (\n answer.type === RecordType.A &&\n answerName === srv.host &&\n !v4Addresses.has(answer.data)\n ) {\n flag |= ConflictFlag.HOSTNAME_A;\n } else if (\n answer.type === RecordType.AAAA &&\n answerName === srv.host &&\n !v6Addresses.has(answer.data.toLowerCase())\n ) {\n flag |= ConflictFlag.HOSTNAME_AAAA;\n }\n }\n return flag;\n};\n\nconst isSupportedQuestion = (question: Question): boolean =>\n question.type === RecordType.ANY ||\n question.type === RecordType.A ||\n question.type === RecordType.AAAA ||\n question.type === RecordType.SRV ||\n question.type === RecordType.TXT ||\n question.type === RecordType.PTR;\n\nexport const checkResponseConflicts = (\n packet: Packet,\n srv: ServiceRecord,\n bindings: NetworkBinding[]\n): ConflictFlag => {\n let flag = ConflictFlag.NONE;\n if (packet.type === PacketType.RESPONSE) {\n if (packet.answers?.length)\n flag |= checkAnswerConflicts(packet.answers, srv, bindings);\n if (packet.additionals?.length)\n flag |= checkAnswerConflicts(packet.additionals, srv, bindings);\n }\n return flag;\n};\n\nconst checkQuestionConflicts = (\n packet: Packet,\n srv: ServiceRecord,\n bindings: NetworkBinding[]\n): ConflictFlag => {\n if (\n packet.type !== PacketType.QUERY ||\n !packet.questions?.length ||\n !packet.authorities?.length\n ) {\n return ConflictFlag.NONE;\n }\n const hasMatchingQuestion = packet.questions.some(question => {\n const questionName = question.name.toLowerCase();\n return (\n isSupportedQuestion(question) &&\n (questionName === srv.host || questionName === srv.fqdnIn)\n );\n });\n return hasMatchingQuestion\n ? checkAnswerConflicts(packet.authorities, srv, bindings)\n : ConflictFlag.NONE;\n};\n\nexport const checkConflicts = (\n packet: Packet,\n srv: ServiceRecord,\n bindings: NetworkBinding[]\n): ConflictFlag => {\n return packet.type === PacketType.RESPONSE\n ? checkResponseConflicts(packet, srv, bindings)\n : checkQuestionConflicts(packet, srv, bindings);\n};\n\nexport const responseMessage = (\n packet: Packet,\n srv: ServiceRecord,\n bindings: NetworkBinding[],\n unicast: boolean\n) => {\n if (packet.type !== PacketType.QUERY || !packet.questions?.length) {\n return null;\n }\n\n const ptr: Record<string, true | undefined> = Object.create(null);\n\n let hasSRV = false;\n let hasTXT = false;\n let hasA = false;\n let hasAAAA = false;\n\n if (packet.answers) {\n for (const answer of packet.answers) {\n const answerName = answer.name?.toLowerCase();\n switch (answer.type) {\n case RecordType.SRV:\n hasSRV ||= answerName === srv.fqdnIn;\n break;\n case RecordType.TXT:\n hasTXT ||= answerName === srv.fqdnIn;\n break;\n case RecordType.A:\n hasA ||= answerName === srv.host;\n break;\n case RecordType.AAAA:\n hasAAAA ||= answerName === srv.host;\n break;\n case RecordType.PTR: {\n switch (answerName) {\n case srv.domain:\n if (answer.data.toLowerCase() === srv.fqdnIn)\n ptr[srv.domain] = true;\n break;\n case DNSSD_NAME:\n if (answer.data.toLowerCase() === srv.domain)\n ptr[DNSSD_NAME] = true;\n break;\n default:\n if (\n answerName &&\n srv.subtypes[answerName] &&\n answer.data.toLowerCase() === srv.fqdnIn\n ) {\n ptr[answerName] = true;\n }\n }\n break;\n }\n }\n }\n }\n\n const answers: Answer[] = [];\n const additionals: Answer[] = [];\n for (const question of packet.questions) {\n if (!!question.qu !== unicast) {\n continue;\n }\n const questionName = question.name.toLowerCase();\n switch (question.type) {\n case RecordType.SRV:\n if (!hasSRV && questionName === srv.fqdnIn) {\n answers.push(srvAnswer(srv, srv.ttl));\n hasSRV = true;\n }\n break;\n case RecordType.TXT:\n if (!hasTXT && questionName === srv.fqdnIn) {\n answers.push(txtAnswer(srv, srv.ttl));\n hasTXT = true;\n }\n break;\n case RecordType.A:\n if (!hasA && questionName === srv.host) {\n answers.push(...aAnswers(srv, bindings, srv.ttl));\n hasA = true;\n }\n break;\n case RecordType.AAAA:\n if (!hasAAAA && questionName === srv.host) {\n answers.push(...aaaaAnswers(srv, bindings, srv.ttl));\n hasAAAA = true;\n }\n break;\n case RecordType.PTR: {\n switch (questionName) {\n case srv.domain:\n if (!ptr[srv.domain]) {\n answers.push(ptrAnswer(srv.domain, srv.fqdnOut, srv.ttl));\n ptr[srv.domain] = true;\n }\n break;\n case DNSSD_NAME:\n if (!ptr[DNSSD_NAME]) {\n answers.push(ptrAnswer(DNSSD_NAME, srv.domain, srv.ttl));\n ptr[DNSSD_NAME] = true;\n }\n break;\n default:\n if (srv.subtypes[questionName]) {\n answers.push(ptrAnswer(questionName, srv.fqdnOut, srv.ttl));\n ptr[questionName] = true;\n }\n }\n break;\n }\n case RecordType.ANY: {\n switch (questionName) {\n case srv.fqdnIn:\n if (!hasSRV) {\n answers.push(srvAnswer(srv, srv.ttl));\n hasSRV = true;\n }\n if (!hasTXT) {\n answers.push(txtAnswer(srv, srv.ttl));\n hasTXT = true;\n }\n break;\n case srv.host:\n if (!hasA) {\n answers.push(...aAnswers(srv, bindings, srv.ttl));\n hasA = true;\n }\n if (!hasAAAA) {\n answers.push(...aaaaAnswers(srv, bindings, srv.ttl));\n hasAAAA = true;\n }\n break;\n case srv.domain:\n if (!ptr[srv.domain]) {\n answers.push(ptrAnswer(srv.domain, srv.fqdnOut, srv.ttl));\n ptr[srv.domain] = true;\n }\n break;\n case DNSSD_NAME:\n if (!ptr[DNSSD_NAME]) {\n answers.push(ptrAnswer(DNSSD_NAME, srv.domain, srv.ttl));\n ptr[DNSSD_NAME] = true;\n }\n break;\n default:\n if (srv.subtypes[questionName]) {\n answers.push(ptrAnswer(questionName, srv.fqdnOut, srv.ttl));\n ptr[questionName] = true;\n }\n }\n }\n }\n }\n\n if (ptr[srv.domain] && !hasSRV) {\n additionals.push(srvAnswer(srv, srv.ttl));\n hasSRV = true;\n }\n if (ptr[srv.domain] && !hasTXT) {\n additionals.push(txtAnswer(srv, srv.ttl));\n hasTXT = true;\n }\n if (hasSRV && !hasA) {\n additionals.push(...aAnswers(srv, bindings, srv.ttl));\n hasA = true;\n }\n if (hasSRV && !hasAAAA) {\n additionals.push(...aaaaAnswers(srv, bindings, srv.ttl));\n hasAAAA = true;\n }\n\n if (answers.length > 0) {\n return encode({\n type: PacketType.RESPONSE,\n flags: PacketFlag.AUTHORITATIVE_ANSWER,\n answers,\n additionals,\n });\n } else {\n return null;\n }\n};\n","import dgram from 'node:dgram';\n\nimport { IPType, MDNSAddress, MDNS_PORT } from './constants';\nimport { type NetworkBinding, interfaceBindings, hasScopeid } from './nics';\n\ninterface QueuedMessage {\n onSent(error: Error | null): void;\n message: Uint8Array;\n address: string;\n port: number;\n}\n\ninterface SocketSettings {\n readonly family: IPType;\n readonly bindings: NetworkBinding[];\n readonly memberships: Set<string>;\n readonly multicastAddress: string;\n readonly multicastInterface: string;\n}\n\nexport interface RemoteInfo {\n readonly socket: Socket;\n readonly family: IPType;\n readonly address: string;\n readonly port: number;\n reply(message: Uint8Array): Promise<void>;\n}\n\nexport interface SocketParams {\n onMessage(msg: Buffer, rinfo: RemoteInfo): Promise<void> | void;\n}\n\nexport interface Socket {\n readonly closed: boolean;\n readonly bindings: NetworkBinding[];\n send(message: Uint8Array): Promise<void>;\n refresh(): boolean;\n close(): void;\n}\n\ninterface SocketState {\n settings: SocketSettings;\n socket: dgram.Socket;\n}\n\nconst createSocketSettings = (\n iname: string,\n family: IPType\n): SocketSettings | null => {\n const multicastAddress =\n family === IPType.v4 ? MDNSAddress.v4 : MDNSAddress.v6;\n const bindings = interfaceBindings(iname, family);\n if (!bindings?.length) {\n return null;\n }\n const memberships = new Set<string>();\n let multicastInterface: string;\n if (family === IPType.v4) {\n multicastInterface = bindings[0].address;\n for (const binding of bindings) memberships.add(binding.address);\n } else {\n const interfaceId =\n process.platform === 'win32'\n ? bindings.find(hasScopeid)?.scopeid.toString()\n : iname;\n if (!interfaceId) {\n return null;\n }\n memberships.add((multicastInterface = `::%${interfaceId}`));\n }\n return {\n family,\n bindings,\n memberships,\n multicastAddress,\n multicastInterface,\n };\n};\n\nconst addMembership = (\n socket: dgram.Socket,\n settings: SocketSettings,\n membership: string\n): boolean => {\n try {\n socket.addMembership(settings.multicastAddress, membership);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nconst dropMembership = (\n socket: dgram.Socket,\n settings: SocketSettings,\n membership: string\n): boolean => {\n try {\n socket.dropMembership(settings.multicastAddress, membership);\n return true;\n } catch {\n return false;\n }\n};\n\nconst createInterfaceSocket = (\n iname: string,\n family: IPType,\n params: SocketParams\n): Socket => {\n const messageQueue: QueuedMessage[] = [];\n\n let timer: Promise<void> | null = null;\n let state: SocketState | null = initSocket();\n\n function initSocket() {\n const settings = createSocketSettings(iname, family);\n if (!settings) {\n return null;\n }\n const dgramSocket = dgram.createSocket(\n family === IPType.v4\n ? { type: 'udp4', reuseAddr: true }\n : { type: 'udp6', reuseAddr: true, ipv6Only: true }\n );\n dgramSocket.unref();\n dgramSocket.on('message', async (message, rinfo) => {\n try {\n await params.onMessage(message, {\n socket,\n family: rinfo.family === 'IPv6' ? IPType.v6 : IPType.v4,\n address: rinfo.address,\n port: rinfo.port,\n reply(message) {\n return send(message, rinfo.address, rinfo.port);\n },\n });\n } catch {\n // ignore errors here onMessage calls\n }\n });\n scheduleTimer(\n new Promise<void>((resolve, reject) => {\n dgramSocket.prependOnceListener('error', reject);\n dgramSocket.prependOnceListener('close', closeSocket);\n dgramSocket.bind(MDNS_PORT, () => {\n try {\n setupSocket(dgramSocket, settings);\n resolve();\n } catch (error) {\n closeSocket();\n reject(error);\n } finally {\n dgramSocket.removeListener('error', reject);\n dgramSocket.on('error', closeSocket);\n }\n });\n })\n );\n return { settings, socket: dgramSocket };\n }\n\n function setupSocket(\n dgramSocket: dgram.Socket,\n newSettings: SocketSettings\n ): boolean {\n const prevSettings =\n newSettings !== state?.settings ? state?.settings : null;\n let hasChanged =\n !!prevSettings &&\n prevSettings.multicastInterface !== newSettings.multicastInterface;\n try {\n dgramSocket.setMulticastTTL(255);\n dgramSocket.setMulticastLoopback(true);\n dgramSocket.setMulticastInterface(newSettings.multicastInterface);\n } catch {\n closeSocket();\n return false;\n }\n if (prevSettings) {\n for (const prevMembership of prevSettings.memberships) {\n if (!newSettings.memberships.has(prevMembership)) {\n dropMembership(dgramSocket, prevSettings, prevMembership);\n hasChanged = true;\n }\n }\n }\n for (const membership of newSettings.memberships) {\n if (!prevSettings?.memberships.has(membership)) {\n const added = addMembership(dgramSocket, newSettings, membership);\n if (!added) {\n newSettings.memberships.delete(membership);\n } else if (prevSettings) {\n hasChanged = true;\n }\n }\n }\n if (!newSettings.memberships.size) {\n closeSocket();\n return false;\n } else if (state) {\n state.settings = newSettings;\n }\n return hasChanged;\n }\n\n function closeSocket() {\n if (state) {\n const { socket } = state;\n state = null;\n try {\n socket.close();\n } catch {}\n }\n }\n\n function sendImmediate(input: QueuedMessage) {\n try {\n if (state) {\n state.socket.send(\n input.message,\n 0,\n input.message.byteLength,\n input.port,\n input.address,\n input.onSent\n );\n } else {\n // Silently drops message if the socket is closed\n input.onSent(null);\n }\n } catch (error: any) {\n input.onSent(error);\n }\n }\n\n function flushQueue(timerId: Promise<unknown> | null) {\n if (timerId === null || timer === timerId) {\n timer = null;\n }\n let message: QueuedMessage | undefined;\n while (!timer && (message = messageQueue.shift()) != null) {\n sendImmediate(message);\n }\n }\n\n function waitTick() {\n return new Promise(resolve => setTimeout(resolve, 0).unref());\n }\n\n function scheduleTimer(promise = waitTick()) {\n if (!timer) {\n const timerId = (timer = promise.then(\n () => flushQueue(timerId),\n () => flushQueue(null)\n ));\n }\n }\n\n async function send(message: Uint8Array, address: string, port: number) {\n return new Promise<void>((resolve, reject) => {\n scheduleTimer();\n messageQueue.push({\n message,\n address,\n port,\n onSent(error) {\n if (error != null) {\n reject(error);\n } else {\n resolve();\n }\n },\n });\n });\n }\n\n const socket: Socket = {\n get closed() {\n return !state;\n },\n get bindings() {\n return state?.settings.bindings ?? [];\n },\n async send(message: Uint8Array) {\n if (state) {\n await send(message, state.settings.multicastAddress, MDNS_PORT);\n }\n },\n refresh() {\n if (state) {\n const newSettings = createSocketSettings(iname, family);\n if (newSettings) {\n return setupSocket(state.socket, newSettings);\n } else {\n closeSocket();\n return false;\n }\n } else {\n state = initSocket();\n return !!state;\n }\n },\n close() {\n closeSocket();\n flushQueue(null);\n },\n };\n\n return socket;\n};\n\nexport const createSocket = (iname: string, params: SocketParams): Socket => {\n const ipv4 = createInterfaceSocket(iname, IPType.v4, params);\n const ipv6 = createInterfaceSocket(iname, IPType.v6, params);\n return {\n get closed() {\n return ipv4.closed && ipv6.closed;\n },\n get bindings() {\n return [...ipv4.bindings, ...ipv6.bindings];\n },\n async send(message: Uint8Array) {\n await Promise.all([ipv4.send(message), ipv6.send(message)]);\n },\n refresh() {\n const hasIPv4Changed = ipv4.refresh();\n const hasIPv6Changed = ipv6.refresh();\n return hasIPv4Changed || hasIPv6Changed;\n },\n close() {\n ipv4.close();\n ipv6.close();\n },\n };\n};\n","import { createScheduler, Scheduler } from './scheduler';\nimport {\n createServiceRecord,\n createServiceInput,\n ServiceInput,\n ServiceRecord,\n} from './service';\nimport { createSocket, Socket, SocketParams } from './socket';\nimport { hostname, networkInterfaceNames } from './nics';\nimport type { AdvertiseParams } from './advertise';\n\nexport enum IPType {\n v4 = 'IPv4',\n v6 = 'IPv6',\n}\n\nexport enum MDNSAddress {\n v4 = '224.0.0.251',\n v6 = 'ff02::fb',\n}\n\nexport const LABEL_LENGTH = 63;\nexport const MDNS_PORT = 5353;\nexport const DNSSD_NAME = '_services._dns-sd._udp.local';\nexport const MAX_SETUPS = 15;\nexport const SCHEDULER_WINDOW = 100;\nexport const SCHEDULER_MIN = 20;\n\nexport interface Services {\n onError(error: unknown): void;\n createSocket(iname: string, params: SocketParams): Socket;\n createScheduler(): Scheduler;\n createServiceInput(params: AdvertiseParams): ServiceInput;\n createServiceRecord(input: ServiceInput): ServiceRecord;\n networkInterfaceNames(): string[];\n hostname(): string;\n}\n\nexport const defaultServices: Services = {\n onError() {},\n createSocket,\n createScheduler,\n createServiceInput,\n createServiceRecord,\n networkInterfaceNames,\n hostname,\n};\n","import { SCHEDULER_MIN, SCHEDULER_WINDOW } from './constants';\n\nexport const enum TaskKind {\n SEND,\n PROBE,\n ANNOUNCE,\n REOPEN,\n}\n\ninterface Timer {\n time: number;\n tasks: Set<() => unknown>;\n timeout: ReturnType<typeof setTimeout>;\n}\n\nconst timersByKind = new Map<TaskKind, Set<Timer>>();\n\nconst randomDelay = (min: number, max: number): number =>\n min + Math.floor(Math.random() * (max - min + 1));\n\nconst shouldRetry = (kind: TaskKind, attempt: number): boolean => {\n switch (kind) {\n case TaskKind.SEND:\n return attempt < 4;\n case TaskKind.PROBE:\n return attempt < 4;\n case TaskKind.ANNOUNCE:\n return attempt < 3;\n case TaskKind.REOPEN:\n return true;\n }\n};\n\nconst getDelay = (kind: TaskKind, attempt: number): number => {\n switch (kind) {\n case TaskKind.SEND:\n return randomDelay(20, 120);\n case TaskKind.PROBE:\n return attempt ? 250 : randomDelay(0, 250);\n case TaskKind.ANNOUNCE:\n return attempt ? 1000 * 2 ** (Math.min(attempt, 3) - 1) : 0;\n case TaskKind.REOPEN:\n return 6000;\n }\n};\n\nconst runTimer = (\n kind: TaskKind,\n delay: number,\n task: () => void\n): (() => void) => {\n const time = Date.now() + delay;\n let timers = timersByKind.get(kind);\n let timer: Timer | undefined;\n if (timers) {\n for (const scheduledTimer of timers) {\n if (\n kind === TaskKind.REOPEN ||\n Math.abs(scheduledTimer.time - time) <= SCHEDULER_WINDOW\n ) {\n timer = scheduledTimer;\n break;\n }\n }\n } else {\n timers = new Set();\n timersByKind.set(kind, timers);\n }\n if (!timer) {\n const timeout = setTimeout(() => {\n timers.delete(timer!);\n for (const task of timer!.tasks) task();\n }, delay);\n if ('unref' in timeout) {\n timeout.unref();\n }\n timers.add(\n (timer = {\n time,\n tasks: new Set(),\n timeout,\n })\n );\n }\n timer.tasks.add(task);\n return () => {\n timer.tasks.delete(task);\n if (!timer.tasks.size) {\n clearTimeout(timer.timeout);\n timers.delete(timer);\n }\n };\n};\n\nexport interface TaskInfo<T> {\n readonly attempt: number;\n retry(delay?: number): Promise<T>;\n}\n\nexport interface Task<T> {\n (info: TaskInfo<T>): PromiseLike<T> | T;\n}\n\nexport interface Scheduler {\n schedule<T>(kind: TaskKind, task: Task<T>): Promise<T>;\n cancel(): void;\n}\n\nexport class AbortError extends Error {\n static isAbortError(input: any): input is AbortError {\n return input && typeof input === 'object' && input.name === 'AbortError';\n }\n\n constructor() {\n super('Operation cancelled');\n this.name = 'AbortError';\n }\n}\n\nexport function createScheduler(): Scheduler {\n const cancelFns = new Set<() => void>();\n async function schedule<T>(kind: TaskKind, task: Task<T>): Promise<T> {\n async function schedule(attempt: number, delay = getDelay(kind, attempt)) {\n return new Promise<T>(async (resolve, reject) => {\n const delayMin = Math.max(delay, SCHEDULER_MIN);\n const cancelTimer = runTimer(kind, delayMin, async () => {\n cancelFns.delete(onCancel);\n let isRetrying = false;\n try {\n const result = await task({\n attempt,\n async retry(delay) {\n isRetrying = true;\n return schedule(attempt + 1, delay);\n },\n });\n resolve(result);\n } catch (error) {\n if (!isRetrying && shouldRetry(kind, attempt)) {\n schedule(attempt + 1, delay).then(resolve, reject);\n } else {\n reject(error);\n }\n }\n });\n function onCancel() {\n reject(new AbortError());\n cancelTimer();\n }\n cancelFns.add(onCancel);\n });\n }\n return await schedule(0);\n }\n return {\n schedule,\n cancel() {\n for (const cancel of cancelFns) cancel();\n cancelFns.clear();\n },\n };\n}\n\nexport function cancelAll() {\n for (const timers of timersByKind.values()) {\n for (const timer of timers) {\n clearTimeout(timer.timeout);\n }\n }\n timersByKind.clear();\n}\n","import { type Packet, decode } from 'dns-message';\n\nimport type { RemoteInfo } from './socket';\nimport { AbortError, TaskKind } from './scheduler';\nimport { MAX_SETUPS, defaultServices, Services } from './constants';\n\nimport {\n TxtValue,\n ConflictFlag,\n checkResponseConflicts,\n checkConflicts,\n responseMessage,\n probeMessage,\n announceMessage,\n goodbyeMessage,\n} from './service';\n\nexport interface AdvertiseOptions {\n /** Instance/display name of the service */\n name: string;\n /** Service type without protocol (e.g. \"http\") */\n type: string;\n /** Protocol used by the service (typically \"tcp\" or \"udp\") */\n protocol: 'tcp' | 'udp' | (string & {});\n /** Hostname of device offering the service */\n hostname?: string;\n /** Port the service is listening on */\n port: number;\n /** List of subtypes for selective discovery */\n subtypes?: string[];\n /** Service metadata */\n txt?: Record<string, TxtValue>;\n /** TTL to apply to service records */\n ttl?: number;\n}\n\nexport interface AdvertiseParams {\n name: string;\n type: string;\n protocol: string;\n hostname: string;\n port: number;\n subtypes: string[];\n txt: Record<string, TxtValue>;\n ttl: number;\n}\n\nconst enum AdvertiserState {\n PROBING = 0,\n ADVERTISE = 2,\n CLOSED = 3,\n}\n\nexport interface AdvertiserHandle {\n readonly promise: Promise<void>;\n close(): Promise<void>;\n}\n\nexport function createInterfaceAdvertiser(\n iname: string,\n params: AdvertiseParams,\n services: Services\n): AdvertiserHandle {\n const input = services.createServiceInput(params);\n const scheduler = services.createScheduler();\n\n let loops = 0;\n let probes = 0;\n let srv = services.createServiceRecord(input);\n let state = AdvertiserState.PROBING;\n let conflict = ConflictFlag.NONE;\n\n const socket = services.createSocket(iname, {\n async onMessage(msg, rinfo) {\n if (state === AdvertiserState.CLOSED) {\n return;\n }\n const packet = decode(msg);\n if (state === AdvertiserState.PROBING) {\n probes++;\n conflict |= checkConflicts(packet, srv, socket.bindings);\n return;\n } else if (state === AdvertiserState.ADVERTISE) {\n conflict = checkResponseConflicts(packet, srv, socket.bindings);\n if (resolveConflicts()) {\n state = AdvertiserState.PROBING;\n return;\n }\n\n try {\n await sendReply(packet, rinfo);\n } catch (error) {\n if (!AbortError.isAbortError(error)) {\n services.onError(error);\n }\n }\n }\n },\n });\n\n async function sendReply(packet: Packet, rinfo: RemoteInfo) {\n const unicastMsg = responseMessage(packet, srv, socket.bindings, false);\n const multicastMsg = responseMessage(packet, srv, socket.bindings, true);\n await Promise.all([\n unicastMsg &&\n scheduler.schedule(TaskKind.SEND, () => rinfo.reply(unicastMsg)),\n multicastMsg &&\n scheduler.schedule(TaskKind.SEND, () => socket.send(multicastMsg)),\n ]);\n }\n\n async function sendProbe() {\n const msg = probeMessage(srv, socket.bindings);\n await scheduler.schedule(TaskKind.SEND, () => socket.send(msg));\n }\n\n async function sendAnnouncement() {\n const msg = announceMessage(srv, socket.bindings);\n await scheduler.schedule(TaskKind.SEND, () => socket.send(msg));\n }\n\n async function sendGoodbye() {\n const msg = goodbyeMessage(srv, socket.bindings);\n await scheduler.schedule(TaskKind.SEND, () => socket.send(msg));\n }\n\n function resolveConflicts() {\n if (conflict !== ConflictFlag.NONE) {\n if (conflict & ConflictFlag.NAME) input.nameSeed++;\n if (conflict & ConflictFlag.HOSTNAME) input.hostnameSeed++;\n srv = services.createServiceRecord(input);\n conflict = ConflictFlag.NONE;\n return true;\n } else {\n return false;\n }\n }\n\n async function probe() {\n probes = 0;\n conflict = ConflictFlag.NONE;\n\n await scheduler.schedule(TaskKind.PROBE, async task => {\n if (socket.closed) {\n state = AdvertiserState.CLOSED;\n return;\n } else if (state !== AdvertiserState.PROBING) {\n return;\n } else if (task.attempt >= 3) {\n if (probes) {\n // If we have seen no conflicts we're fine to continue\n state =\n conflict === ConflictFlag.NONE\n ? AdvertiserState.ADVERTISE\n : AdvertiserState.CLOSED;\n } else {\n // If we haven't seen loopback traffic, the socket isn't active\n state = AdvertiserState.CLOSED;\n }\n return;\n } else {\n resolveConflicts();\n await sendProbe();\n return task.retry();\n }\n });\n\n return next();\n }\n\n async function announce() {\n while (state === AdvertiserState.ADVERTISE && !socket.closed) {\n const didRefresh = await scheduler.schedule(\n TaskKind.ANNOUNCE,\n async task => {\n if (state !== AdvertiserState.ADVERTISE) {\n return false;\n } else if (task.attempt > 2 && socket.refresh()) {\n return true;\n }\n if (!socket.closed) {\n await sendAnnouncement();\n if (task.attempt < 3) {\n return task.retry();\n }\n }\n return false;\n }\n );\n\n if (!didRefresh) {\n await scheduler.schedule(TaskKind.REOPEN, async task => {\n if (state !== AdvertiserState.ADVERTISE) {\n return;\n } else if (!socket.refresh() && !socket.closed) {\n return task.retry();\n }\n });\n }\n }\n\n return next();\n }\n\n async function reopen() {\n scheduler.cancel();\n if (loops++ > MAX_SETUPS) {\n return;\n }\n await scheduler.schedule(TaskKind.REOPEN, async task => {\n if (\n state === AdvertiserState.CLOSED &&\n socket.refresh() &&\n !socket.closed\n ) {\n return task.retry();\n } else if (!socket.closed) {\n state = AdvertiserState.PROBING;\n return;\n }\n });\n return next();\n }\n\n function next() {\n switch (state) {\n case AdvertiserState.PROBING:\n return probe();\n case AdvertiserState.ADVERTISE:\n return announce();\n case AdvertiserState.CLOSED:\n return reopen();\n }\n }\n\n return {\n promise: (async () => {\n try {\n state = AdvertiserState.PROBING;\n await next();\n scheduler.cancel();\n } catch (error) {\n if (!AbortError.isAbortError(error)) {\n services.onError(error);\n }\n } finally {\n socket.close();\n }\n })(),\n async close() {\n try {\n scheduler.cancel();\n if (state !== AdvertiserState.CLOSED) {\n state = AdvertiserState.CLOSED;\n await sendGoodbye();\n }\n scheduler.cancel();\n } catch (error) {\n if (!AbortError.isAbortError(error)) {\n services.onError(error);\n }\n } finally {\n socket.close();\n }\n },\n };\n}\n\nexport function advertiseInternal(\n params: AdvertiseParams,\n services: Services\n): () => Promise<void> {\n const inames = new Set(services.networkInterfaceNames());\n const handles = new Map<string, AdvertiserHandle>();\n const scheduler = services.createScheduler();\n\n for (const iname of inames) {\n handles.set(iname, createInterfaceAdvertiser(iname, params, services));\n }\n\n scheduler.schedule(TaskKind.REOPEN, task => {\n try {\n const inames = new Set(services.networkInterfaceNames());\n for (const iname of inames) {\n if (!handles.has(iname)) {\n handles.set(\n iname,\n createInterfaceAdvertiser(iname, params, services)\n );\n }\n }\n for (const [iname, handle] of handles) {\n if (!inames.has(iname)) {\n handles.delete(iname);\n handle.close();\n }\n }\n return task.retry();\n } catch (error) {\n if (!AbortError.isAbortError(error)) {\n services.onError(error);\n }\n }\n });\n\n return async () => {\n scheduler.cancel();\n await Promise.all([...handles.values()].map(handle => handle.close()));\n };\n}\n\nexport function advertise(options: AdvertiseOptions): () => Promise<void> {\n return advertiseInternal(\n {\n name: options.name,\n type: options.type,\n protocol: options.protocol,\n hostname: options.hostname || defaultServices.hostname(),\n port: options.port,\n subtypes: options.subtypes || [],\n txt: options.txt || {},\n ttl: options.ttl || 250,\n },\n defaultServices\n );\n}\n"],"names":["t","QUERY","RESPONSE","e","A","NS","CNAME","SOA","NULL","PTR","HINFO","MX","TXT","RP","AFSDB","SIG","KEY","AAAA","LOC","SRV","NAPTR","KX","CERT","DNAME","OPT","APL","DS","SSHFP","IPSECKEY","RRSIG","NSEC","DNSKEY","DHCID","NSEC3","NSEC3PARAM","TLSA","HIP","CDS","CDNSKEY","SVCB","HTTPS","SPF","TKEY","TSIG","IXFR","AXFR","ANY","CAA","TA","DLV","n","IN","CS","CH","HS","r","NOERR","FORMERR","SERVFAIL","NXDOMAIN","NOTIMP","REFUSED","YXDOMAIN","YXRRSET","NXRRSET","NOTAUTH","NOTZONE","CHECKING_DISABLED","AUTHENTIC_DATA","RECURSION_AVAILABLE","RECURSION_DESIRED","TRUNCATED_RESPONSE","AUTHORITATIVE_ANSWER","s","OPTION_0","LLQ","UL","NSID","OPTION_4","DAU","DHU","N3U","CLIENT_SUBNET","EXPIRE","COOKIE","TCP_KEEPALIVE","PADDING","CHAIN","KEY_TAG","DEVICEID","OPTION_65535","a","TextEncoder","i","TextDecoder","o","Buffer","byteLength","length","charCodeAt","c","bytes","replace","RangeError","write","encode","indexOf","setUint8","read","offset","getUint8","advance","sliceView","push","decode","getUint16","join","f","Uint8Array","buffer","byteOffset","set","d","u","l","Math","max","ceil","g","split","parseInt","min","Array","fill","map","y","setUint16","U","slice","includes","pop","toString","withRDLength","array","w","name","class","qu","type","b","v4","v6","E","data","code","p","RegExp","N","sourcePrefixLength","scopePrefixLength","family","test","ip","ArrayBuffer","DataView","S","timeout","T","I","tags","isUnknownOpt","P","R","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","EchConfig","Ipv6Hint","DohPath","Odoh","D","C","m","O","L","v","H","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","x","_","M","V","Y","K","target","priority","weight","X","cpu","os","toCaaTag","F","tag","value","flags","issuerCritical","G","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","B","exchange","preference","k","key","algorithm","$","signersName","signature","typeCovered","labels","originalTTL","expiration","inception","keyTag","q","mbox","txt","Q","nextDomain","rrtypes","j","salt","iterations","z","fingerprint","hash","W","digest","digestType","Z","services","regexp","replacement","order","J","certificate","usage","selector","matchingType","tt","params","et","rt","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","st","questions","answers","authorities","additionals","rtype","id","networkInterfaces","_interfaces","_promise","Promise","resolve","then","hasScopeid","bind","scopeid","hostname","sanitizeLabel","label","trim","toLowerCase","LABEL_LENGTH","createServiceName","input","seed","sanitizeName","suffix","toUpperCase","padStart","srvAnswer","srv","RecordType","RecordClass","fqdnOut","host","txtAnswer","ptrAnswer","ptrAnswers","domain","DNSSD_NAME","Object","keys","subtypes","subtype","aAnswers","bindings","filter","binding","IPType","address","aaaaAnswers","ConflictFlag","HOSTNAME_A","HOSTNAME_AAAA","checkAnswerConflicts","flag","NONE","v4Addresses","Set","v6Addresses","answer","answerName","fqdnIn","NAME","has","checkResponseConflicts","packet","PacketType","checkQuestionConflicts","some","question","questionName","isSupportedQuestion","responseMessage","unicast","ptr","create","hasSRV","hasTXT","hasA","hasAAAA","PacketFlag","createSocketSettings","iname","multicastAddress","MDNSAddress","interfaceBindings","undefined","memberships","multicastInterface","add","interfaceId","process","platform","find","addMembership","socket","settings","membership","error","dropMembership","createInterfaceSocket","messageQueue","timer","state","initSocket","dgramSocket","dgram","createSocket","reuseAddr","ipv6Only","unref","on","async","message","rinfo","onMessage","reply","send","scheduleTimer","reject","prependOnceListener","closeSocket","MDNS_PORT","setupSocket","removeListener","newSettings","prevSettings","hasChanged","setMulticastTTL","setMulticastLoopback","setMulticastInterface","prevMembership","delete","size","close","sendImmediate","onSent","flushQueue","timerId","shift","promise","waitTick","setTimeout","closed","defaultServices","onError","ipv4","ipv6","all","hasIPv4Changed","hasIPv6Changed","createScheduler","cancelFns","schedule","kind","task","attempt","delay","getDelay","delayMin","cancelTimer","runTimer","onCancel","isRetrying","result","shouldRetry","AbortError","cancel","clear","createServiceInput","options","nameSeed","hostnameSeed","createServiceRecord","createServiceHost","match","exec","prefix","protocol","reduce","sanitizeSubtype","networkInterfaceNames","inames","interfaces","internal","TaskKind","timersByKind","Map","randomDelay","floor","random","SEND","PROBE","ANNOUNCE","REOPEN","time","Date","now","timers","get","scheduledTimer","abs","tasks","clearTimeout","Error","isAbortError","constructor","super","this","AdvertiserState","createInterfaceAdvertiser","scheduler","loops","probes","PROBING","conflict","msg","CLOSED","checkConflicts","ADVERTISE","resolveConflicts","sendReply","unicastMsg","multicastMsg","sendProbe","probeMessage","sendAnnouncement","announceMessage","sendGoodbye","goodbyeMessage","HOSTNAME","next","probe","announce","reopen","advertise","advertiseInternal","handles","handle","values"],"mappings":";;;;AAAA,IAAIA,IAAI,SAASA;EACfA,EAAEA,EAAEC,QAAQ,KAAK;EACjBD,EAAEA,EAAEE,WAAW,SAAS;EACxB,OAAOF;AACT,CAJQ,CAIN;;AAEF,IAAIG,IAAI,SAASH;EACfA,EAAEA,EAAEI,IAAI,KAAK;EACbJ,EAAEA,EAAEK,KAAK,KAAK;EACdL,EAAEA,EAAEM,QAAQ,KAAK;EACjBN,EAAEA,EAAEO,MAAM,KAAK;EACfP,EAAEA,EAAEQ,OAAO,MAAM;EACjBR,EAAEA,EAAES,MAAM,MAAM;EAChBT,EAAEA,EAAEU,QAAQ,MAAM;EAClBV,EAAEA,EAAEW,KAAK,MAAM;EACfX,EAAEA,EAAEY,MAAM,MAAM;EAChBZ,EAAEA,EAAEa,KAAK,MAAM;EACfb,EAAEA,EAAEc,QAAQ,MAAM;EAClBd,EAAEA,EAAEe,MAAM,MAAM;EAChBf,EAAEA,EAAEgB,MAAM,MAAM;EAChBhB,EAAEA,EAAEiB,OAAO,MAAM;EACjBjB,EAAEA,EAAEkB,MAAM,MAAM;EAChBlB,EAAEA,EAAEmB,MAAM,MAAM;EAChBnB,EAAEA,EAAEoB,QAAQ,MAAM;EAClBpB,EAAEA,EAAEqB,KAAK,MAAM;EACfrB,EAAEA,EAAEsB,OAAO,MAAM;EACjBtB,EAAEA,EAAEuB,QAAQ,MAAM;EAClBvB,EAAEA,EAAEwB,MAAM,MAAM;EAChBxB,EAAEA,EAAEyB,MAAM,MAAM;EAChBzB,EAAEA,EAAE0B,KAAK,MAAM;EACf1B,EAAEA,EAAE2B,QAAQ,MAAM;EAClB3B,EAAEA,EAAE4B,WAAW,MAAM;EACrB5B,EAAEA,EAAE6B,QAAQ,MAAM;EAClB7B,EAAEA,EAAE8B,OAAO,MAAM;EACjB9B,EAAEA,EAAE+B,SAAS,MAAM;EACnB/B,EAAEA,EAAEgC,QAAQ,MAAM;EAClBhC,EAAEA,EAAEiC,QAAQ,MAAM;EAClBjC,EAAEA,EAAEkC,aAAa,MAAM;EACvBlC,EAAEA,EAAEmC,OAAO,MAAM;EACjBnC,EAAEA,EAAEoC,MAAM,MAAM;EAChBpC,EAAEA,EAAEqC,MAAM,MAAM;EAChBrC,EAAEA,EAAEsC,UAAU,MAAM;EACpBtC,EAAEA,EAAEuC,OAAO,MAAM;EACjBvC,EAAEA,EAAEwC,QAAQ,MAAM;EAClBxC,EAAEA,EAAEyC,MAAM,MAAM;EAChBzC,EAAEA,EAAE0C,OAAO,OAAO;EAClB1C,EAAEA,EAAE2C,OAAO,OAAO;EAClB3C,EAAEA,EAAE4C,OAAO,OAAO;EAClB5C,EAAEA,EAAE6C,OAAO,OAAO;EAClB7C,EAAEA,EAAE8C,MAAM,OAAO;EACjB9C,EAAEA,EAAE+C,MAAM,OAAO;EACjB/C,EAAEA,EAAEgD,KAAK,SAAS;EAClBhD,EAAEA,EAAEiD,MAAM,SAAS;EACnB,OAAOjD;AACT,CAhDQ,CAgDN;;AAEF,IAAIkD,IAAI,SAASlD;EACfA,EAAEA,EAAEmD,KAAK,KAAK;EACdnD,EAAEA,EAAEoD,KAAK,KAAK;EACdpD,EAAEA,EAAEqD,KAAK,KAAK;EACdrD,EAAEA,EAAEsD,KAAK,KAAK;EACdtD,EAAEA,EAAE8C,MAAM,OAAO;EACjB,OAAO9C;AACT,CAPQ,CAON;;AAEF,IAAIuD,IAAI,SAASvD;EACfA,EAAEA,EAAEwD,QAAQ,KAAK;EACjBxD,EAAEA,EAAEyD,UAAU,KAAK;EACnBzD,EAAEA,EAAE0D,WAAW,KAAK;EACpB1D,EAAEA,EAAE2D,WAAW,KAAK;EACpB3D,EAAEA,EAAE4D,SAAS,KAAK;EAClB5D,EAAEA,EAAE6D,UAAU,KAAK;EACnB7D,EAAEA,EAAE8D,WAAW,KAAK;EACpB9D,EAAEA,EAAE+D,UAAU,KAAK;EACnB/D,EAAEA,EAAEgE,UAAU,KAAK;EACnBhE,EAAEA,EAAEiE,UAAU,KAAK;EACnBjE,EAAEA,EAAEkE,UAAU,MAAM;EACpBlE,EAAEA,EAAEmE,oBAAoB,MAAM;EAC9BnE,EAAEA,EAAEoE,iBAAiB,MAAM;EAC3BpE,EAAEA,EAAEqE,sBAAsB,OAAO;EACjCrE,EAAEA,EAAEsE,oBAAoB,OAAO;EAC/BtE,EAAEA,EAAEuE,qBAAqB,OAAO;EAChCvE,EAAEA,EAAEwE,uBAAuB,QAAQ;EACnC,OAAOxE;AACT,CAnBQ,CAmBN;;AAEF,IAAIyE,IAAI,SAASzE;EACfA,EAAEA,EAAE0E,WAAW,KAAK;EACpB1E,EAAEA,EAAE2E,MAAM,KAAK;EACf3E,EAAEA,EAAE4E,KAAK,KAAK;EACd5E,EAAEA,EAAE6E,OAAO,KAAK;EAChB7E,EAAEA,EAAE8E,WAAW,KAAK;EACpB9E,EAAEA,EAAE+E,MAAM,KAAK;EACf/E,EAAEA,EAAEgF,MAAM,KAAK;EACfhF,EAAEA,EAAEiF,MAAM,KAAK;EACfjF,EAAEA,EAAEkF,gBAAgB,KAAK;EACzBlF,EAAEA,EAAEmF,SAAS,KAAK;EAClBnF,EAAEA,EAAEoF,SAAS,MAAM;EACnBpF,EAAEA,EAAEqF,gBAAgB,MAAM;EAC1BrF,EAAEA,EAAEsF,UAAU,MAAM;EACpBtF,EAAEA,EAAEuF,QAAQ,MAAM;EAClBvF,EAAEA,EAAEwF,UAAU,MAAM;EACpBxF,EAAEA,EAAEyF,WAAW,SAAS;EACxBzF,EAAEA,EAAE0F,eAAe,SAAS;EAC5B,OAAO1F;AACT,CAnBQ,CAmBN;;AAEF,MAAM2F,IAAI,IAAIC;;AAEd,MAAMC,IAAI,IAAIC;;AAEd,MAAMC,IAAI,sBAAsBC,SAAShG,KAAKgG,OAAOC,WAAWjG,KAAKA;EACnE,IAAIG,IAAIH,EAAEkG;EACV,KAAK,IAAIhD,IAAI/C,IAAI,GAAG+C,KAAK,GAAGA,KAAK;IAC/B,MAAMK,IAAIvD,EAAEmG,WAAWjD;IACvB,IAAIK,IAAI,OAAOA,KAAK;MAClBpD;WACK,IAAIoD,IAAI,QAAQA,KAAK;MAC1BpD,KAAK;;IAEP,IAAIoD,KAAK,SAASA,KAAK;MACrBL;;AAEJ;EACA,OAAO/C;;;AAGT,MAAMiG,IAAI;EACR,KAAAC,CAAMrG;IACJ,IAAIG,IAAI;IACR,QAAQH;KACP,KAAK;KACL,KAAK;KACL,KAAK;MACJ,OAAO;;KAER;MACC,IAAI,QAAQA,EAAE;QACZG;;MAEF,IAAI,QAAQH,EAAEA,EAAEkG,SAAS;QACvB/F;;MAEFA,KAAKH,EAAEsG,QAAQ,SAAS,KAAKJ;MAC7B,IAAI/F,IAAI;QACN,MAAM,IAAIoG,WAAW,SAASvG;;MAEhC,OAAOG;;AAEX;EACA,KAAAqG,CAAMxG,GAAGG,GAAG+C;IACV,MAAMK,IAAIoC,EAAEc,OAAOvD;IACnB,KAAK,IAAIuB,IAAI,OAAOlB,EAAE,KAAK,IAAI,GAAGoC,IAAI,GAAGlB,IAAIlB,EAAE0C,YAAYxB,IAAIkB,IAAI,GAAG;MACpEA,IAAIpC,EAAEmD,QAAQ,IAAIjC;MAClB,OAAOkB,KAAI,KAAM,OAAOpC,EAAEoC,IAAI;QAC5BA,IAAIpC,EAAEmD,QAAQ,IAAIf,IAAI;;MAExB,KAAI,MAAOA;QACTA,IAAIpC,EAAE0C;;MAER,IAAIN,MAAMlB;QACR;aACK,IAAIkB,IAAIlB,IAAI;QACjB,MAAM,IAAI8B,WAAW,aAAarD;;MAEpC,IAAI2C,IAAI1F,IAAI;MACZ,KAAK,IAAIA,IAAIsE,GAAGtE,IAAIwF,GAAGxF,KAAK;QAC1B,IAAI,OAAOoD,EAAEpD,MAAM,OAAOoD,EAAEpD,IAAI;UAC9BA;;QAEFH,EAAE2G,SAASd,KAAKtC,EAAEpD;AACpB;MACAH,EAAE2G,SAASxG,GAAG0F,IAAI1F,IAAI;MACtBA,IAAI0F;MACJpB,IAAIkB,IAAI;AACV;IACA,OAAOxF,IAAI;AACb;EACA,IAAAyG,CAAK5G,GAAGG;IACN,MAAM+C,IAAI;IACV,IAAIK,IAAIpD,EAAE0G;IACV,IAAIpC,IAAItE;IACR,OAAO,GAAG;MACR,MAAMA,IAAIH,EAAE8G,SAASrC,EAAEoC;MACvB,IAAI,MAAM1G,GAAG;QACX4G,QAAQtC,GAAG;QACX;AACF,aAAO,MAAM,MAAMtE,IAAI;QACrB4G,QAAQtC,GAAG;QACX,MAAMlB,IAAIyD,UAAUhH,GAAGyE,GAAGtE;QAC1B+C,EAAE+D,KAAKpB,EAAEqB,OAAO3D,GAAG+C,QAAQ,OAAO;AACpC,aAAO;QACL,MAAMnG,IAAIH,EAAEmH,UAAU1C,EAAEoC,UAAU;QAClCE,QAAQtC,GAAG;QACX,IAAItE,IAAIoD;UACNkB,IAAI;YACFoC,QAAQtD,IAAIpD;YACZ+F,QAAQ;;;UAGV;;AAEJ;AACF;IACA,OAAOhD,EAAEkE,KAAK,QAAQ;AACxB;;;AAGF,MAAMC,IAAI;EACRhB,OAAOrG,KAAK,mBAAmBA,IAAI+F,EAAE/F,KAAKA,EAAEiG;EAC5C,KAAAO,CAAMxG,GAAGG,GAAG+C;IACV,MAAMK,IAAI,mBAAmBL,IAAIyC,EAAEc,OAAOvD,KAAKA;IAC/C,IAAIoE,WAAWtH,EAAEuH,QAAQvH,EAAEwH,aAAarH,GAAGoD,EAAE0C,YAAYwB,IAAIlE;IAC7D,OAAOpD,IAAKoD,EAAE0C;AAChB;EACAW,MAAM,CAAC5G,GAAGG,MAAM6G,UAAUhH,GAAGG;;;AAG/B,MAAMuH,IAAI;EACRrB,OAAOrG,KAAKA,EAAEiG,aAAa;EAC3B,KAAAO,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAE2G,SAASxG,KAAK+C,EAAE+C;IAClB,IAAIqB,WAAWtH,EAAEuH,QAAQvH,EAAEwH,aAAarH,GAAG+C,EAAE+C,YAAYwB,IAAIvE;IAC7D,OAAO/C,IAAK+C,EAAE+C;AAChB;EACA,IAAAW,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAE8G,SAAS3G,EAAE0G;IACvBE,QAAQ5G,GAAG;IACX,OAAO6G,UAAUhH,GAAGG,GAAG+C;AACzB;;;AAGF,MAAMyE,IAAI;EACRtB,OAAOrG,KAAK+F,EAAE/F,KAAK;EACnB,KAAAwG,CAAMxG,GAAGG,GAAG+C;IACV,MAAMK,IAAIoC,EAAEc,OAAOvD;IACnBlD,EAAE2G,SAASxG,KAAKoD,EAAE0C;IAClB,OAAOoB,EAAEb,MAAMxG,GAAGG,GAAGoD;AACvB;EACA,IAAAqD,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAE8G,SAAS3G,EAAE0G;IACvBE,QAAQ5G,GAAG;IACX,OAAO0F,EAAEqB,OAAOF,UAAUhH,GAAGG,GAAG+C;AAClC;;;AAGF,MAAM0E,IAAI;EACR,KAAAvB,CAAMrG;IACJ,MAAMG,IAAI;IACV,KAAK,IAAI+C,IAAI,GAAGA,IAAIlD,EAAEkG,QAAQhD;MAC5B/C,EAAEH,EAAEkD,MAAM,KAAK2E,KAAKC,IAAI3H,EAAEH,EAAEkD,MAAM,MAAM,GAAG,MAAMlD,EAAEkD;;IAErD,IAAIA,IAAI;IACR,KAAK,IAAIlD,IAAI,GAAGA,IAAIG,EAAE+F,QAAQlG;MAC5B,IAAI,QAAQG,EAAEH;QACZkD,KAAK,IAAI2E,KAAKE,MAAM5H,EAAEH,KAAK,KAAK;;;IAGpC,OAAOkD;AACT;EACA,KAAAsD,CAAMxG,GAAGG,GAAG+C;IACV,MAAMK,IAAI;IACV,KAAK,IAAIvD,IAAI,GAAGA,IAAIkD,EAAEgD,QAAQlG;OAC3BuD,EAAEL,EAAElD,MAAM,OAAOuD,EAAEL,EAAElD,MAAM,KAAK,KAAKkD,EAAElD,MAAM,IAAI,OAAO,KAAK,KAAK,IAAIkD,EAAElD;;IAE3E,KAAK,IAAIkD,IAAI,GAAGA,IAAIK,EAAE2C,QAAQhD,KAAK;MACjC,MAAMuB,IAAIlB,EAAEL;MACZ,IAAI,QAAQuB,GAAG;QACbzE,EAAE2G,SAASxG,KAAK+C;QAChBlD,EAAE2G,SAASxG,KAAKsE,EAAEyB;QAClB,KAAK,IAAIhD,IAAI,GAAGA,IAAIuB,EAAEyB,QAAQhD;UAC5BlD,EAAE2G,SAASxG,KAAKsE,EAAEvB;;AAEtB;AACF;IACA,OAAO/C;AACT;EACA,IAAAyG,CAAK5G,GAAGG;IACN,OAAO0G,QAAQ3D,GAAGgD,QAAQ3C,KAAKpD;IAC/B,MAAMsE,IAAI;IACV,OAAOtE,EAAE0G,SAAS3D,IAAIK,GAAG;MACvB,MAAML,IAAIlD,EAAE8G,SAAS3G,EAAE0G;MACvB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;MAChC,KAAK,IAAIlB,IAAI,GAAGA,IAAIpC,GAAGoC,KAAK;QAC1B,MAAMpC,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS,IAAIlB;QACpC,KAAK,IAAI3F,IAAI,GAAGA,IAAI,GAAGA;UACrB,IAAIuD,IAAI,KAAK,IAAIvD;YACfyE,EAAEwC,KAAK/D,KAAK,IAAIyC,KAAK,IAAI3F;;;AAG/B;MACA+G,QAAQ5G,GAAG,IAAIoD;AACjB;IACA,OAAOkB;AACT;;;AAGF,MAAMuD,IAAI;EACR3B,OAAO,MAAM;EACb,KAAAG,CAAMxG,GAAGG,GAAG+C;IACV,MAAMK,IAAIL,EAAE+E,MAAM,KAAK;IACvB,KAAK,IAAI/E,IAAI,GAAGA,IAAI,GAAGA;MACrBlD,EAAE2G,SAASxG,KAAK+H,SAAS3E,EAAEL,IAAI;;IAEjC,OAAO/C;AACT;EACA,IAAAyG,CAAK5G,GAAGG;IACN,MAAM+C,IAAI2E,KAAKM,IAAIhI,EAAE+F,QAAQ;IAC7B,MAAM3C,IAAI,IAAI6E,MAAM,GAAGC,KAAK,GAAGC,IAAI,CAAC/E,GAAGkB,MAAMA,IAAIvB,IAAIlD,EAAE8G,SAAS3G,EAAE0G,SAASpC,KAAK,GAAG2C,KAAK;IACxFL,QAAQ5G,GAAG+C;IACX,OAAOK;AACT;;;AAGF,MAAMgF,IAAI;EACRlC,OAAO,MAAM;EACb,KAAAG,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C;IACf,OAAO/C,IAAI;AACb;EACA,IAAAyG,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxBE,QAAQ5G,GAAG;IACX,OAAO+C;AACT;;;AAGF,MAAMuF,IAAI;EACRpC,OAAO,MAAM;EACb,KAAAG,CAAMxG,GAAGG,GAAG+C;IACV,MAAMK,IAAIL,EAAEwD,QAAQ;IACpB,MAAMjC,KAAKlB,KAAI,IAAKL,EAAEwF,MAAM,GAAGnF,KAAKL,GAAG+E,MAAM;IAC7C,MAAMtC,IAAIpC,KAAI,IAAKL,EAAEwF,MAAMnF,IAAI,GAAG0E,MAAM,OAAO;IAC/C,MAAMpC,IAAIF,EAAEO,SAAS,KAAKP,EAAEA,EAAEO,SAAS,GAAGyC,SAAS,OAAOhD,EAAEiD,aAAQ;IACpE,KAAK,IAAI1F,IAAI,GAAGA,IAAIuB,EAAEyB,QAAQhD,KAAK;MACjClD,EAAEwI,UAAUrI,GAAG+H,SAASzD,EAAEvB,IAAI;MAC9B/C,KAAK;AACP;IACA,KAAK,IAAI+C,IAAI,KAAKuB,EAAEyB,SAASP,EAAEO,UAAUL,IAAI,IAAI,KAAK3C,IAAI,GAAGA,KAAK;MAChElD,EAAEwI,UAAUrI,GAAG;MACfA,KAAK;AACP;IACA,KAAK,IAAI+C,IAAI,GAAGA,IAAIyC,EAAEO,QAAQhD,KAAK;MACjClD,EAAEwI,UAAUrI,GAAG+H,SAASvC,EAAEzC,IAAI;MAC9B/C,KAAK;AACP;IACA,IAAI0F,GAAG;MACL,MAAM3C,IAAI2C,EAAEoC,MAAM,KAAK,GAAGK,IAAItI,KAAKkI,SAASlI,GAAG;MAC/CA,EAAEwI,UAAUrI,GAAG+C,EAAE,MAAM,IAAIA,EAAE;MAC7BlD,EAAEwI,UAAUrI,IAAI,GAAG+C,EAAE,MAAM,IAAIA,EAAE;MACjC/C,KAAK;AACP;IACA,OAAOA;AACT;EACA,IAAAyG,CAAK5G,GAAGG;IACN,IAAI+C,IAAI;IACR,MAAMK,IAAIsE,KAAKM,IAAIhI,EAAE+F,QAAQ;IAC7B,KAAK,IAAIzB,IAAI,GAAGA,IAAIlB,GAAGkB,KAAK,GAAG;MAC7B,IAAI,MAAMA;QACRvB,KAAK;;MAEPA,KAAKlD,EAAEmH,UAAUhH,EAAE0G,SAASpC,GAAGoE,SAAS;AAC1C;IACA9B,QAAQ5G,GAAGoD;IACX,OAAOL,EAAEoD,QAAQ,sBAAsB,UAAUA,QAAQ,UAAU;AACrE;;;AAGF,MAAMwC,eAAe9I,MAAC;EACpBqG,OAAOlG,KAAKH,EAAEqG,MAAMlG,KAAK;EACzB,KAAAqG,CAAMrG,GAAG+C,GAAGK;IACV,MAAMkB,IAAIvB;IACVA,IAAIlD,EAAEwG,MAAMrG,GAAG+C,IAAI,GAAGK;IACtBpD,EAAEqI,UAAU/D,GAAGvB,IAAIuB,IAAI;IACvB,OAAOvB;AACT;EACA,IAAA0D,CAAKzG,GAAG+C;IACN,OAAO2D,QAAQtD,GAAG2C,QAAQzB,KAAKvB;IAC/B,MAAMyC,IAAIzC,EAAEgD,SAAS/F,EAAEgH,UAAUjE,EAAE2D;IACnC3D,EAAE2D,UAAU;IACZ,MAAMhB,IAAI7F,EAAE4G,KAAKzG,GAAG+C;IACpBA,EAAE2D,SAAStD,IAAI,IAAIoC;IACnBzC,EAAEgD,SAASzB;IACX,OAAOoB;AACT;;;AAGF,MAAMkD,QAAQ/I,MAAC;EACb,KAAAqG,CAAMlG;IACJ,IAAI+C,IAAI;IACR,KAAK,IAAIK,IAAI,GAAG,QAAQpD,KAAKoD,IAAIpD,EAAE+F,QAAQ3C;MACzCL,KAAKlD,EAAEqG,MAAMlG,EAAEoD;;IAEjB,OAAOL;AACT;EACA,KAAAsD,CAAMrG,GAAG+C,GAAGK;IACV,KAAK,IAAIkB,IAAI,GAAG,QAAQlB,KAAKkB,IAAIlB,EAAE2C,QAAQzB;MACzCvB,IAAIlD,EAAEwG,MAAMrG,GAAG+C,GAAGK,EAAEkB;;IAEtB,OAAOvB;AACT;EACA,IAAA0D,CAAKzG,GAAG+C;IACN,OAAO2D,QAAQtD,GAAG2C,QAAQzB,KAAKvB;IAC/B,MAAMyC,IAAI;IACV,OAAOzC,EAAE2D,SAAStD,IAAIkB;MACpBkB,EAAEsB,KAAKjH,EAAE4G,KAAKzG,GAAG+C;;IAEnB,OAAOyC;AACT;;;AAGF,MAAMoB,UAAU,CAAC/G,GAAGG;EAClBH,EAAE6G,UAAU,IAAI1G;EAChBH,EAAEkG,UAAU,IAAI/F;EAChBH,EAAEkG,YAAYlG,EAAEkG,UAAU;;;AAG5B,MAAMc,YAAY,CAAChH,GAAGG,GAAG+C,IAAI/C,EAAE+F;EAC7B,MAAM3C,IAAI,IAAI+D,WAAWtH,EAAEuH,QAAQvH,EAAEwH,aAAarH,EAAE0G,QAAQ3D;EAC5D6D,QAAQ5G,GAAG+C;EACX,OAAOK;;;AAKT,MAAMyF,IAAI;EACR3C,OAAOrG,KAAKoG,EAAEC,MAAMrG,EAAEiJ,QAAQ;EAC9B,KAAAzC,CAAMxG,GAAGG,GAAGoD;IACV,IAAIkB,IAAIlB,EAAE2F,SAAShG,EAAEC;IACrB,IAAII,EAAE4F;MACJ1E,KAPI;;IASNtE,IAAIiG,EAAEI,MAAMxG,GAAGG,GAAGoD,EAAE0F;IACpBjJ,EAAEwI,UAAUrI,GAAGoD,EAAE6F;IACjBpJ,EAAEwI,UAAUrI,IAAI,GAAGsE;IACnB,OAAOtE,IAAK;AACd;EACA,IAAAyG,CAAK5G,GAAGG;IACN,MAAMoD,IAAI6C,EAAEQ,KAAK5G,GAAGG;IACpB,MAAMsE,IAAIzE,EAAEmH,UAAUhH,EAAE0G;IACxB,IAAIlB,IAAI3F,EAAEmH,UAAUhH,EAAE0G,SAAS,MAAM3D,EAAEJ;IACvC,IAAI+C,KAAI;IACR,IAAIF,MAAMzC,EAAEJ,OAnBN,QAmBa6C,GAAO;MACxBA,MAAK;MACLE,KAAI;AACN;IACAkB,QAAQ5G,GAAG;IACX,OAAO;MACL8I,MAAM1F;MACN6F,MAAM3E;MACNyE,OAAOvD;MACPwD,IAAItD;;AAER;;;AAGF,IAAIwD,IAAI,SAASrJ;EACfA,EAAEA,EAAEsJ,KAAK,KAAK;EACdtJ,EAAEA,EAAEuJ,KAAK,KAAK;EACd,OAAOvJ;AACT,CAJQ,CAIN;;AAEF,MAAMwJ,IAAIV,aAAa;EACrBzC,OAAOrG,KAAKqH,EAAEhB,MAAMrG,EAAEyJ;EACtBjD,OAAO,CAACxG,GAAGG,GAAG+C,MAAMmE,EAAEb,MAAMxG,GAAGG,GAAG+C,EAAEuG;EACpC7C,MAAM,CAAC5G,GAAGG,OAAC;IACTuJ,MAAMjF,EAAEC;IACR+E,MAAMpC,EAAET,KAAK5G,GAAGG;;;;AAIpB,MAAMC,IAAI;;AAEV,MAAMuJ,IAAI,IAAIC,OAAO,OAAUxJ,WAAWA;;AAE1C,MAAMyJ,IAAIf,aAAa;EACrBzC,OAAOrG,KAAK6H,KAAKE,MAAM/H,EAAE8J,sBAAsB,KAAK,KAAK;EACzD,KAAAtD,CAAMxG,GAAGG,GAAG+C;IACV,MAAMK,IAAIL,EAAE4G,sBAAsB;IAClC,MAAMrF,IAAIvB,EAAE6G,qBAAqB;IACjC,MAAMpE,IAAIzC,EAAE8G,WAAWL,EAAEM,KAAK/G,EAAEgH,MAAMb,EAAEC,KAAKD,EAAEE;IAC/C,MAAM1D,IAAIgC,KAAKE,KAAKxE,IAAI;IACxBvD,EAAEwI,UAAUrI,GAAGwF;IACf3F,EAAE2G,SAASxG,IAAI,GAAGoD;IAClBvD,EAAE2G,SAASxG,IAAI,GAAGsE;IAClBtE,KAAK;IACL,MAAM4F,IAAI,EAAE/F,GAAGG;MACb,MAAM+C,IAAI,IAAIiH,YAAYnK,EAAEqG,MAAMlG;MAClC,MAAMoD,IAAIvD,EAAEwG,MAAM,IAAI4D,SAASlH,IAAI,GAAG/C;MACtC,OAAO,IAAImH,WAAWpE,GAAG,GAAGK;AAC7B,MAJS,CAIPoC,MAAM0D,EAAEC,KAAKtB,IAAIS,GAAGvF,EAAEgH;IACzB,KAAK,IAAIhH,IAAI,GAAGA,IAAI2C,GAAG3C;MACrBlD,EAAE2G,SAASxG,KAAK4F,EAAE7C;;IAEpB,OAAO/C;AACT;EACA,IAAAyG,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChC,MAAMlB,IAAI3F,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChCE,QAAQ5G,GAAG;IACX,OAAO;MACLuJ,MAAMjF,EAAES;MACR8E,QAAQ9G;MACR4G,oBAAoBvG;MACpBwG,mBAAmBpE;MACnBuE,IAAIhH,MAAMmG,EAAEC,KAAKtB,EAAEpB,KAAK5G,GAAGG,KAAKsI,EAAE7B,KAAK5G,GAAGG;;AAE9C;;;AAGF,MAAMkK,IAAIvB,aAAa;EACrBzC,OAAOrG,KAAKA,EAAEsK,UAAU,IAAI;EAC5B,KAAA9D,CAAMxG,GAAGG,GAAG+C;IACV,IAAIA,EAAEoH,SAAS;MACbtK,EAAEwI,UAAUrI,GAAG+C,EAAEoH;MACjBnK,KAAK;AACP;IACA,OAAOA;AACT;EACA,IAAAyG,CAAK5G,GAAGG;IACN,IAAIA,EAAE+F,QAAQ;MACZ,MAAMhD,IAAIlD,EAAEmH,UAAUhH,EAAE0G;MACxBE,QAAQ5G,GAAG;MACX,OAAO;QACLuJ,MAAMjF,EAAEY;QACRiF,SAASpH;;AAEb;MACE,OAAO;QACLwG,MAAMjF,EAAEY;QACRiF,cAAS;;;AAGf;;;AAGF,MAAMC,IAAIzB,aAAa;EACrBzC,OAAOrG,KAAKA,EAAEkG,UAAU;EACxBM,OAAO,CAACxG,GAAGG,GAAG+C,MAAM/C,KAAK+C,EAAEgD,UAAU;EACrC,IAAAU,CAAK5G,GAAGG;IACN,OAAO+F,QAAQhD,KAAK/C;IACpB4G,QAAQ5G,GAAG+C;IACX,OAAO;MACLwG,MAAMjF,EAAEa;MACRY,QAAQhD;;AAEZ;;;AAGF,MAAMsH,IAAI1B,aAAa;EACrBzC,OAAOrG,KAAK,IAAIA,EAAEyK,KAAKvE;EACvB,KAAAM,CAAMxG,GAAGG,GAAG+C;IACV,KAAK,IAAIK,IAAI,GAAGA,IAAIL,EAAEuH,KAAKvE,QAAQ3C,KAAK;MACtCvD,EAAEwI,UAAUrI,GAAG+C,EAAEuH,KAAKlH;MACtBpD,KAAK;AACP;IACA,OAAOA;AACT;EACA,IAAAyG,CAAK5G,GAAGG;IACN,OAAO0G,QAAQ3D,GAAGgD,QAAQ3C,KAAKpD;IAC/B,MAAMwF,IAAI;IACV,OAAOxF,EAAE0G,SAAS3D,IAAIK,GAAG;MACvBoC,EAAEsB,KAAKjH,EAAEmH,UAAUhH,EAAE0G;MACrBE,QAAQ5G,GAAG;AACb;IACA,OAAO;MACLuJ,MAAMjF,EAAEe;MACRiF,MAAM9E;;AAEV;;;AAGF,MAAM+E,eAAe1K,OAAOA,EAAEyJ;;AAE9B,MAAMkB,IAAI;EACR,KAAAtE,CAAMrG;IACJ,IAAI0K,aAAa1K;MACf,OAAOwJ,EAAEnD,MAAMrG,KAAK;;IAEtB,QAAQA,EAAE0J;KACT,KAAKjF,EAAES;MACN,OAAO2E,EAAExD,MAAMrG,KAAK;;KAErB,KAAKyE,EAAEY;MACN,OAAOgF,EAAEhE,MAAMrG,KAAK;;KAErB,KAAKyE,EAAEa;MACN,OAAOiF,EAAElE,MAAMrG,KAAK;;KAErB,KAAKyE,EAAEe;MACN,OAAOgF,EAAEnE,MAAMrG,KAAK;;AAExB;EACA,KAAAwG,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAEwG;IACjBvJ,KAAK;IACL,IAAIuK,aAAaxH;MACf,OAAOsG,EAAEhD,MAAMxG,GAAGG,GAAG+C;;IAEvB,QAAQA,EAAEwG;KACT,KAAKjF,EAAES;MACN,OAAO2E,EAAErD,MAAMxG,GAAGG,GAAG+C;;KAEtB,KAAKuB,EAAEY;MACN,OAAOgF,EAAE7D,MAAMxG,GAAGG,GAAG+C;;KAEtB,KAAKuB,EAAEa;MACN,OAAOiF,EAAE/D,MAAMxG,GAAGG,GAAG+C;;KAEtB,KAAKuB,EAAEe;MACN,OAAOgF,EAAEhE,MAAMxG,GAAGG,GAAG+C;;AAEzB;EACA,IAAA0D,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxBE,QAAQ5G,GAAG;IACX,QAAQ+C;KACP,KAAKuB,EAAES;MACN,OAAO2E,EAAEjD,KAAK5G,GAAGG;;KAElB,KAAKsE,EAAEY;MACN,OAAOgF,EAAEzD,KAAK5G,GAAGG;;KAElB,KAAKsE,EAAEa;MACN,OAAOiF,EAAE3D,KAAK5G,GAAGG;;KAElB,KAAKsE,EAAEe;MACN,OAAOgF,EAAE5D,KAAK5G,GAAGG;;KAElB;MACC,MAAMoD,IAAIiG,EAAE5C,KAAK5G,GAAGG;MACpBoD,EAAEmG,OAAOxG;MACT,OAAOK;;AAEX;;;AAGF,IAAIqH,IAAI,SAAS5K;EACfA,EAAEA,EAAE6K,YAAY,KAAK;EACrB7K,EAAEA,EAAE8K,OAAO,KAAK;EAChB9K,EAAEA,EAAE+K,gBAAgB,KAAK;EACzB/K,EAAEA,EAAEgL,OAAO,KAAK;EAChBhL,EAAEA,EAAEiL,WAAW,KAAK;EACpBjL,EAAEA,EAAEkL,YAAY,KAAK;EACrBlL,EAAEA,EAAEmL,WAAW,KAAK;EACpBnL,EAAEA,EAAEoL,UAAU,KAAK;EACnBpL,EAAEA,EAAEqL,OAAO,SAAS;EACpB,OAAOrL;AACT,CAXQ,CAWN;;AAEF,MAAMsL,IAAIxC,aAAaC,MAAMR;;AAE7B,MAAMgD,IAAIzC,aAAaC,MAAMpB;;AAE7B,MAAM6D,IAAI1C,aAAaP;;AAEvB,MAAMkD,IAAI3C,aAAaC,MAAMf;;AAE7B,MAAM0D,IAAI5C,aAAaC,MAAMN;;AAE7B,MAAMkD,IAAI7C,aAAazB;;AAEvB,MAAMuE,IAAI;EACR,KAAAvF,CAAMrG;IACJ,IAAIG,IAAI;IACR,IAAI,QAAQH,EAAE6L;MACZ1L,KAAKmL,EAAEjF,MAAMrG,EAAE6L,aAAa;;IAE9B,IAAI,QAAQ7L,EAAE8L;MACZ3L,KAAKoL,EAAElF,MAAMrG,EAAE8L,QAAQ;;IAEzB,IAAI9L,EAAE;MACJG,KAAK;;IAEP,IAAI,QAAQH,EAAE+L;MACZ5L,KAAKqL,EAAEnF,MAAMrG,EAAE+L,QAAQ;;IAEzB,IAAI/L,EAAEgM;MACJ7L,KAAKsL,EAAEpF,MAAMrG,EAAEgM,YAAY;;IAE7B,IAAIhM,EAAEiM;MACJ9L,KAAKuL,EAAErF,MAAMrG,EAAEiM,YAAY;;IAE7B,IAAIjM,EAAEkM;MACJ/L,KAAKwL,EAAEtF,MAAMrG,EAAEkM,aAAa;;IAE9B,IAAIlM,EAAEmM;MACJhM,KAAKwL,EAAEtF,MAAMrG,EAAEmM,WAAW;;IAE5B,IAAInM,EAAEoM;MACJjM,KAAKwL,EAAEtF,MAAMrG,EAAEoM,QAAQ;;IAEzB,OAAOjM;AACT;EACA,KAAAqG,CAAMxG,GAAGG,GAAG+C;IACV,IAAI,QAAQA,EAAE2I,WAAW;MACvB7L,EAAEwI,UAAUrI,GAAGyK,EAAEC;MACjB1K,IAAImL,EAAE9E,MAAMxG,GAAGG,IAAI,GAAG+C,EAAE2I;AAC1B;IACA,IAAI,QAAQ3I,EAAE4I,MAAM;MAClB9L,EAAEwI,UAAUrI,GAAGyK,EAAEE;MACjB3K,IAAIoL,EAAE/E,MAAMxG,GAAGG,IAAI,GAAG+C,EAAE4I;AAC1B;IACA,IAAI5I,EAAE,oBAAoB;MACxBlD,EAAEwI,UAAUrI,GAAGyK,EAAEG;MACjB/K,EAAEwI,UAAUrI,IAAI,GAAG;MACnBA,KAAK;AACP;IACA,IAAI,QAAQ+C,EAAE6I,MAAM;MAClB/L,EAAEwI,UAAUrI,GAAGyK,EAAEI;MACjB7K,IAAIqL,EAAEhF,MAAMxG,GAAGG,IAAI,GAAG+C,EAAE6I;AAC1B;IACA,IAAI7I,EAAE8I,UAAU;MACdhM,EAAEwI,UAAUrI,GAAGyK,EAAEK;MACjB9K,IAAIsL,EAAEjF,MAAMxG,GAAGG,IAAI,GAAG+C,EAAE8I;AAC1B;IACA,IAAI9I,EAAE+I,UAAU;MACdjM,EAAEwI,UAAUrI,GAAGyK,EAAEO;MACjBhL,IAAIuL,EAAElF,MAAMxG,GAAGG,IAAI,GAAG+C,EAAE+I;AAC1B;IACA,IAAI/I,EAAEgJ,WAAW;MACflM,EAAEwI,UAAUrI,GAAGyK,EAAEM;MACjB/K,IAAIwL,EAAEnF,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEgJ;AAC1B;IACA,IAAIhJ,EAAEiJ,SAAS;MACbnM,EAAEwI,UAAUrI,GAAGyK,EAAEQ;MACjBjL,IAAIwL,EAAEnF,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEiJ;AAC1B;IACA,IAAIjJ,EAAEkJ,MAAM;MACVpM,EAAEwI,UAAUrI,GAAGyK,EAAES;MACjBlL,IAAIwL,EAAEnF,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEkJ;AAC1B;IACA,OAAOjM;AACT;EACA,IAAAyG,CAAK5G,GAAGG;IACN,OAAO+F,QAAQhD,GAAG2D,QAAQtD,KAAKpD;IAC/B,MAAMsE,IAAI;MACRoH,gBAAW;MACXC,WAAM;MACN,oBAAmB;MACnBC,WAAM;MACNC,eAAU;MACVC,eAAU;MACVC,gBAAW;MACXC,cAAS;MACTC,WAAM;;IAER,OAAOjM,EAAE0G,SAAStD,IAAIL,GAAG;MACvB,MAAMA,IAAIlD,EAAEmH,UAAUhH,EAAE0G;MACxBE,QAAQ5G,GAAG;MACX,QAAQ+C;OACP,KAAK0H,EAAEC;QACNpG,EAAEoH,YAAYP,EAAE1E,KAAK5G,GAAGG;QACxB;;OAED,KAAKyK,EAAEE;QACNrG,EAAEqH,OAAOP,EAAE3E,KAAK5G,GAAGG;QACnB;;OAED,KAAKyK,EAAEG;QACNtG,EAAE,sBAAqB;QACvBsC,QAAQ5G,GAAG;QACX;;OAED,KAAKyK,EAAEI;QACNvG,EAAEsH,OAAOP,EAAE5E,KAAK5G,GAAGG;QACnB;;OAED,KAAKyK,EAAEK;QACNxG,EAAEuH,WAAWP,EAAE7E,KAAK5G,GAAGG;QACvB;;OAED,KAAKyK,EAAEO;QACN1G,EAAEwH,WAAWP,EAAE9E,KAAK5G,GAAGG;QACvB;;OAED,KAAKyK,EAAEM;QACNzG,EAAEyH,YAAYP,EAAE/E,KAAK5G,GAAGG;QACxB;;OAED,KAAKyK,EAAEQ;QACN3G,EAAE0H,UAAUtG,EAAEqB,OAAOyE,EAAE/E,KAAK5G,GAAGG;QAC/B;;OAED,KAAKyK,EAAES;QACN5G,EAAE2H,OAAOT,EAAE/E,KAAK5G,GAAGG;QACnB;;OAED;QACCwL,EAAE/E,KAAK5G,GAAGG;;AAEd;IACA,OAAOsE;AACT;;;AAGF,MAAM4H,IAAIvD,aAAazB;;AAEvB,MAAMiF,IAAIxD,aAAa1C;;AAEvB,MAAMmG,IAAIzD,aAAad;;AAEvB,MAAMwE,IAAI1D,aAAaL;;AAEvB,MAAMgE,IAAI3D,aAAaC,MAAMpB;;AAE7B,MAAM+E,IAAI5D,aAAa;EACrBzC,OAAOrG,KAAKoG,EAAEC,MAAMrG,EAAE2M,UAAU;EAChC,KAAAnG,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAE0J,YAAY;IAC7B5M,EAAEwI,UAAUrI,IAAI,GAAG+C,EAAE2J,UAAU;IAC/B7M,EAAEwI,UAAUrI,IAAI,GAAG+C,EAAE6I,QAAQ;IAC7B,OAAO3F,EAAEI,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEyJ;AAC7B;EACA,IAAA/F,CAAK5G,GAAGG;IACN,MAAM+C,IAAI;MACR0J,UAAU;MACVC,QAAQ;MACRd,MAAM;MACNY,QAAQ;;IAEVzJ,EAAE0J,WAAW5M,EAAEmH,UAAUhH,EAAE0G;IAC3B3D,EAAE2J,SAAS7M,EAAEmH,UAAUhH,EAAE0G,SAAS;IAClC3D,EAAE6I,OAAO/L,EAAEmH,UAAUhH,EAAE0G,SAAS;IAChCE,QAAQ5G,GAAG;IACX+C,EAAEyJ,SAASvG,EAAEQ,KAAK5G,GAAGG;IACrB,OAAO+C;AACT;;;AAGF,MAAM4J,IAAIhE,aAAa;EACrBzC,OAAOrG,KAAK2H,EAAEtB,MAAMrG,EAAE+M,OAAOpF,EAAEtB,MAAMrG,EAAEgN;EACvC,KAAAxG,CAAMxG,GAAGG,GAAG+C;IACV/C,IAAIwH,EAAEnB,MAAMxG,GAAGG,GAAG+C,EAAE6J;IACpB,OAAWpF,EAAEnB,MAAMxG,GAAGG,GAAG+C,EAAE8J;AAC7B;EACApG,MAAM,CAAC5G,GAAGG,OAAC;IACT4M,KAAKpF,EAAEf,KAAK5G,GAAGG;IACf6M,IAAIrF,EAAEf,KAAK5G,GAAGG;;;;AAIlB,MAAM8M,WAAWjN;EACf,QAAQA;GACP,KAAK;GACL,KAAK;GACL,KAAK;IACJ,OAAOA;;GAER;IACC,OAAO;;;;AAIX,MAAMkN,IAAIpE,aAAa;EACrBzC,OAAOrG,KAAK2H,EAAEtB,MAAMrG,EAAEmN,OAAO9F,EAAEhB,MAAMrG,EAAEoN,SAAS;EAChD,KAAA5G,CAAMxG,GAAGG,GAAG+C;IACV,IAAIK,IAAIL,EAAEmK,SAAS;IACnB,IAAInK,EAAEoK;MACJ/J,KAAK;;IAEPvD,EAAE2G,SAASxG,GAAGoD;IACdpD,IAAIwH,EAAEnB,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEiK;IACxB,OAAW9F,EAAEb,MAAMxG,GAAGG,GAAG+C,EAAEkK;AAC7B;EACA,IAAAxG,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAE8G,SAAS3G,EAAE0G;IACvBE,QAAQ5G,GAAG;IACX,OAAO;MACLkN,OAAOnK;MACPiK,KAAKF,SAAStF,EAAEf,KAAK5G,GAAGG;MACxBiN,OAAO/F,EAAET,KAAK5G,GAAGG;MACjBmN,mBAAmB,MAAMpK;;AAE7B;;;AAGF,MAAMqK,IAAIzE,aAAa;EACrBzC,OAAOrG,KAAKoG,EAAEC,MAAMrG,EAAEwN,SAASpH,EAAEC,MAAMrG,EAAEyN,SAAS;EAClD,KAAAjH,CAAMxG,GAAGG,GAAG+C;IACV/C,IAAIiG,EAAEI,MAAMxG,GAAGG,GAAG+C,EAAEsK;IACpBrN,IAAIiG,EAAEI,MAAMxG,GAAGG,GAAG+C,EAAEuK;IACpBzN,EAAE0N,UAAUvN,GAAG+C,EAAEyK,UAAU;IAC3B3N,EAAE0N,UAAUvN,IAAI,GAAG+C,EAAE0K,WAAW;IAChC5N,EAAE0N,UAAUvN,IAAI,GAAG+C,EAAE2K,SAAS;IAC9B7N,EAAE0N,UAAUvN,IAAI,IAAI+C,EAAE4K,UAAU;IAChC9N,EAAE0N,UAAUvN,IAAI,IAAI+C,EAAE6K,WAAW;IACjC,OAAO5N,IAAI;AACb;EACA,IAAAyG,CAAK5G,GAAGG;IACN,MAAM+C,IAAI;MACRsK,OAAOpH,EAAEQ,KAAK5G,GAAGG;MACjBsN,OAAOrH,EAAEQ,KAAK5G,GAAGG;MACjBwN,QAAQ3N,EAAEgO,UAAU7N,EAAE0G;MACtB+G,SAAS5N,EAAEgO,UAAU7N,EAAE0G,SAAS;MAChCgH,OAAO7N,EAAEgO,UAAU7N,EAAE0G,SAAS;MAC9BiH,QAAQ9N,EAAEgO,UAAU7N,EAAE0G,SAAS;MAC/BkH,SAAS/N,EAAEgO,UAAU7N,EAAE0G,SAAS;;IAElC1G,EAAE0G,UAAU;IACZ1G,EAAE+F,UAAU;IACZ,OAAOhD;AACT;;;AAGF,MAAM+K,IAAInF,aAAa;EACrBzC,OAAOrG,KAAKoG,EAAEC,MAAMrG,EAAEkO,YAAY;EAClC,KAAA1H,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAEiL,cAAc;IAC/B,OAAO/H,EAAEI,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEgL;AAC7B;EACA,IAAAtH,CAAK5G,GAAGG;IACN,MAAM+C,IAAI;MACRiL,YAAYnO,EAAEmH,UAAUhH,EAAE0G;MAC1BqH,UAAU;;IAEZnH,QAAQ5G,GAAG;IACX+C,EAAEgL,WAAW9H,EAAEQ,KAAK5G,GAAGG;IACvB,OAAO+C;AACT;;;AAGF,MAAMkL,IAAItF,aAAa;EACrBzC,OAAOrG,KAAKqH,EAAEhB,MAAMrG,EAAEqO,OAAO;EAC7B,KAAA7H,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAEmK;IACjBrN,EAAE2G,SAASxG,IAAI,GAAG;IAClBH,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEoL;IACpB,OAAOjH,EAAEb,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEmL;AAC7B;EACA,IAAAzH,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChCE,QAAQ5G,GAAG;IACX,OAAO;MACLkN,OAAOnK;MACPoL,WAAW/K;MACX8K,KAAKhH,EAAET,KAAK5G,GAAGG;;AAEnB;;;AAGF,MAAMoO,IAAIzF,aAAa;EACrBzC,OAAOrG,KAAK,KAAKoG,EAAEC,MAAMrG,EAAEwO,eAAenH,EAAEhB,MAAMrG,EAAEyO;EACpD,KAAAjI,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAEwL;IACjB1O,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEoL;IACpBtO,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEyL;IACpB3O,EAAE0N,UAAUvN,IAAI,GAAG+C,EAAE0L;IACrB5O,EAAE0N,UAAUvN,IAAI,GAAG+C,EAAE2L;IACrB7O,EAAE0N,UAAUvN,IAAI,IAAI+C,EAAE4L;IACtB9O,EAAEwI,UAAUrI,IAAI,IAAI+C,EAAE6L;IACtB5O,IAAIiG,EAAEI,MAAMxG,GAAGG,IAAI,IAAI+C,EAAEsL;IACzB,OAAWnH,EAAEb,MAAMxG,GAAGG,GAAG+C,EAAEuL;AAC7B;EACA,IAAA7H,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChC,MAAMpC,IAAIzE,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChC,MAAMlB,IAAI3F,EAAEgO,UAAU7N,EAAE0G,SAAS;IACjC,MAAMhB,IAAI7F,EAAEgO,UAAU7N,EAAE0G,SAAS;IACjC,MAAMd,IAAI/F,EAAEgO,UAAU7N,EAAE0G,SAAS;IACjC,MAAMa,IAAI1H,EAAEmH,UAAUhH,EAAE0G,SAAS;IACjCE,QAAQ5G,GAAG;IACX,OAAO;MACLuO,aAAaxL;MACboL,WAAW/K;MACXoL,QAAQlK;MACRmK,aAAajJ;MACbkJ,YAAYhJ;MACZiJ,WAAW/I;MACXgJ,QAAQrH;MACR8G,aAAapI,EAAEQ,KAAK5G,GAAGG;MACvBsO,WAAWpH,EAAET,KAAK5G,GAAGG;;AAEzB;;;AAGF,MAAM6O,IAAIlG,aAAa;EACrBzC,OAAOrG,KAAKoG,EAAEC,MAAMrG,EAAEiP,QAAQ7I,EAAEC,MAAMrG,EAAEkP;EACxC,KAAA1I,CAAMxG,GAAGG,GAAG+C;IACV/C,IAAIiG,EAAEI,MAAMxG,GAAGG,GAAG+C,EAAE+L;IACpB,OAAW7I,EAAEI,MAAMxG,GAAGG,GAAG+C,EAAEgM;AAC7B;EACAtI,MAAM,CAAC5G,GAAGG,OAAC;IACT8O,MAAM7I,EAAEQ,KAAK5G,GAAGG;IAChB+O,KAAK9I,EAAEQ,KAAK5G,GAAGG;;;;AAInB,MAAMgP,IAAIrG,aAAa;EACrBzC,OAAOrG,KAAKoG,EAAEC,MAAMrG,EAAEoP,cAAcxH,EAAEvB,MAAMrG,EAAEqP;EAC9C,KAAA7I,CAAMxG,GAAGG,GAAG+C;IACV/C,IAAIiG,EAAEI,MAAMxG,GAAGG,GAAG+C,EAAEkM;IACpB,OAAWxH,EAAEpB,MAAMxG,GAAGG,GAAG+C,EAAEmM;AAC7B;EACAzI,MAAM,CAAC5G,GAAGG,OAAC;IACTiP,YAAYhJ,EAAEQ,KAAK5G,GAAGG;IACtBkP,SAASzH,EAAEhB,KAAK5G,GAAGG;;;;AAIvB,MAAMmP,IAAIxG,aAAa;EACrBzC,OAAOrG,KAAK0H,EAAErB,MAAMrG,EAAEuP,QAAQ7H,EAAErB,MAAMrG,EAAEoP,cAAcxH,EAAEvB,MAAMrG,EAAEqP,WAAW;EAC3E,KAAA7I,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAE2G,SAASxG,GAAG+C,EAAEoL;IAChBtO,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEmK;IACpBrN,EAAEwI,UAAUrI,IAAI,GAAG+C,EAAEsM;IACrBrP,IAAIuH,EAAElB,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEqM;IACxBpP,IAAIuH,EAAElB,MAAMxG,GAAGG,GAAG+C,EAAEkM;IACpB,OAAWxH,EAAEpB,MAAMxG,GAAGG,GAAG+C,EAAEmM;AAC7B;EACA,IAAAzI,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAE8G,SAAS3G,EAAE0G;IACvB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChC,MAAMpC,IAAIzE,EAAEmH,UAAUhH,EAAE0G,SAAS;IACjCE,QAAQ5G,GAAG;IACX,OAAO;MACLmO,WAAWpL;MACXmK,OAAO9J;MACPiM,YAAY/K;MACZ8K,MAAM7H,EAAEd,KAAK5G,GAAGG;MAChBiP,YAAY1H,EAAEd,KAAK5G,GAAGG;MACtBkP,SAASzH,EAAEhB,KAAK5G,GAAGG;;AAEvB;;;AAGF,MAAMsP,IAAI3G,aAAa;EACrBzC,OAAOrG,KAAKqH,EAAEhB,MAAMrG,EAAE0P,eAAe;EACrC,KAAAlJ,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAE2G,SAASxG,GAAG+C,EAAEoL;IAChBtO,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEyM;IACpB,OAAOtI,EAAEb,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEwM;AAC7B;EACA,IAAA9I,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAE8G,SAAS3G,EAAE0G;IACvB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChCE,QAAQ5G,GAAG;IACX,OAAO;MACLmO,WAAWpL;MACXyM,MAAMpM;MACNmM,aAAarI,EAAET,KAAK5G,GAAGG;;AAE3B;;;AAGF,MAAMyP,IAAI9G,aAAa;EACrBzC,OAAOrG,KAAKqH,EAAEhB,MAAMrG,EAAE6P,UAAU;EAChC,KAAArJ,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAE6L;IACjB/O,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEoL;IACpBtO,EAAE2G,SAASxG,IAAI,GAAG+C,EAAE4M;IACpB,OAAWzI,EAAEb,MAAMxG,GAAGG,IAAI,GAAG+C,EAAE2M;AACjC;EACA,IAAAjJ,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChC,MAAMpC,IAAIzE,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChCE,QAAQ5G,GAAG;IACX,OAAO;MACL4O,QAAQ7L;MACRoL,WAAW/K;MACXuM,YAAYrL;MACZoL,QAAQxI,EAAET,KAAK5G,GAAGG;;AAEtB;;;AAGF,MAAM4P,IAAIjH,aAAa;EACrBzC,OAAOrG,KAAK2H,EAAEtB,MAAMrG,EAAEqN,SAAS1F,EAAEtB,MAAMrG,EAAEgQ,YAAYrI,EAAEtB,MAAMrG,EAAEiQ,UAAU7J,EAAEC,MAAMrG,EAAEkQ,eAAe;EAClG,KAAA1J,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAEiN;IACjBnQ,EAAEwI,UAAUrI,IAAI,GAAG+C,EAAEiL;IACrBhO,IAAIwH,EAAEnB,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEmK;IACxBlN,IAAIwH,EAAEnB,MAAMxG,GAAGG,GAAG+C,EAAE8M;IACpB7P,IAAIwH,EAAEnB,MAAMxG,GAAGG,GAAG+C,EAAE+M;IACpB,OAAW7J,EAAEI,MAAMxG,GAAGG,GAAG+C,EAAEgN;AAC7B;EACA,IAAAtJ,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxB,MAAMtD,IAAIvD,EAAEmH,UAAUhH,EAAE0G,SAAS;IACjCE,QAAQ5G,GAAG;IACX,OAAO;MACLgQ,OAAOjN;MACPiL,YAAY5K;MACZ8J,OAAO1F,EAAEf,KAAK5G,GAAGG;MACjB6P,UAAUrI,EAAEf,KAAK5G,GAAGG;MACpB8P,QAAQtI,EAAEf,KAAK5G,GAAGG;MAClB+P,aAAa9J,EAAEQ,KAAK5G,GAAGG;;AAE3B;;;AAGF,MAAMiQ,KAAItH,aAAa;EACrBzC,OAAOrG,KAAKqH,EAAEhB,MAAMrG,EAAEqQ,eAAe;EACrC,KAAA7J,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAE2G,SAASxG,GAAG+C,EAAEoN;IAChBtQ,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEqN;IACpBvQ,EAAE2G,SAASxG,IAAI,GAAG+C,EAAEsN;IACpB,OAAOnJ,EAAEb,MAAMxG,GAAGG,IAAI,GAAG+C,EAAEmN;AAC7B;EACA,IAAAzJ,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAE8G,SAAS3G,EAAE0G;IACvB,MAAMtD,IAAIvD,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChC,MAAMpC,IAAIzE,EAAE8G,SAAS3G,EAAE0G,SAAS;IAChCE,QAAQ5G,GAAG;IACX,OAAO;MACLmQ,OAAOpN;MACPqN,UAAUhN;MACViN,cAAc/L;MACd4L,aAAahJ,EAAET,KAAK5G,GAAGG;;AAE3B;;;AAGF,MAAMsQ,KAAK3H,aAAa;EACtBzC,OAAOrG,KAAKoG,EAAEC,MAAMrG,EAAEiJ,QAAQ2C,EAAEvF,MAAMrG,EAAE0Q,UAAU;EAClD,KAAAlK,CAAMxG,GAAGG,GAAG+C;IACVlD,EAAEwI,UAAUrI,GAAG+C,EAAE0J,YAAY;IAC7BzM,IAAIiG,EAAEI,MAAMxG,GAAGG,IAAI,GAAG+C,EAAE+F;IACxB,OAAW2C,EAAEpF,MAAMxG,GAAGG,GAAG+C,EAAEwN;AAC7B;EACA,IAAA9J,CAAK5G,GAAGG;IACN,MAAM+C,IAAIlD,EAAEmH,UAAUhH,EAAE0G;IACxBE,QAAQ5G,GAAG;IACX,OAAO;MACL8I,MAAM7C,EAAEQ,KAAK5G,GAAGG;MAChByM,UAAU1J;MACVwN,QAAQ9E,EAAEhF,KAAK5G,GAAGG;;AAEtB;;;AAGF,MAAMwQ,KAAK7H,aAAaC,MAAM4B;;AAI9B,MAAMiG,KAAK;EACT,KAAAvK,CAAMrG;IACJ,MAAMkD,IAAI,IAAIkD,EAAEC,MAAMrG,EAAEoJ,SAASjJ,EAAEqB,MAAM,MAAMxB,EAAEiJ;IACjD,QAAQjJ,EAAEoJ;KACT,KAAKjJ,EAAEC;MACN,OAAO8C,IAAIqJ,EAAElG,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEE;MACN,OAAO6C,IAAIoJ,EAAEjG,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEI;MACN,OAAO2C,IAAIqK,EAAElH,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEO;MACN,OAAOwC,IAAI4J,EAAEzG,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEQ;MACN,OAAOuC,IAAI+K,EAAE5H,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAES;MACN,OAAOsC,IAAIuJ,EAAEpG,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEU;MACN,OAAOqC,IAAI8L,EAAE3I,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEc;MACN,OAAOiC,IAAIsJ,EAAEnG,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEgB;MACN,OAAO+B,IAAIwJ,EAAErG,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEiB;MACN,OAAO8B,IAAI6M,EAAE1J,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEqB;MACN,OAAO0B,IAAIyN,GAAGtK,MAAMrG,EAAEyJ;;KAEvB,KAAKtJ,EAAEuB;MACN,OAAOwB,IAAI0M,EAAEvJ,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEwB;MACN,OAAOuB,IAAIuM,EAAEpJ,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAE0B;MACN,OAAOqB,IAAIqL,EAAElI,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAE2B;MACN,OAAOoB,IAAIiM,EAAE9I,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAE4B;MACN,OAAOmB,IAAIkL,EAAE/H,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAE8B;MACN,OAAOiB,IAAIoM,EAAEjJ,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEgC;MACN,OAAOe,IAAIkN,GAAE/J,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEoC;KACP,KAAKpC,EAAEqC;MACN,OAAOU,IAAIuN,GAAGpK,MAAMrG,EAAEyJ;;KAEvB,KAAKtJ,EAAE4C;MACN,OAAOG,IAAIgK,EAAE7G,MAAMrG,EAAEyJ;;KAEtB,KAAKtJ,EAAEM;KACP,KAAKN,EAAEG;KACP,KAAKH,EAAEoB;MACN,OAAO2B,IAAIoJ,EAAEjG,MAAMrG,EAAEyJ;;KAEtB;MACC,OAAOvG,IAAImJ,EAAEhG,MAAMrG,EAAEyJ;;AAEzB;EACA,KAAAjD,CAAMxG,GAAGkD,GAAGK;IACV,IAAIA,EAAE6F,SAASjJ,EAAEqB,KAAK;MACpB0B,IAAIkD,EAAEI,MAAMxG,GAAGkD,GAAG;MAClBlD,EAAEwI,UAAUtF,GAAGK,EAAE6F;MACjBpJ,EAAEwI,UAAUtF,IAAI,GAAGK,EAAEsN,kBAAkB;MACvC7Q,EAAE2G,SAASzD,IAAI,GAAGK,EAAEuN,iBAAiB;MACrC9Q,EAAE2G,SAASzD,IAAI,GAAGK,EAAEwN,eAAe;MACnC/Q,EAAEwI,UAAUtF,IAAI,GAAGK,EAAE8J,SAAS;MAC9B,OAAOsD,GAAGnK,MAAMxG,GAAGkD,KAAK,GAAGK,EAAEkG;AAC/B;IACAvG,IAAIkD,EAAEI,MAAMxG,GAAGkD,GAAGK,EAAE0F;IACpBjJ,EAAEwI,UAAUtF,GAAGK,EAAE6F;IACjBpJ,EAAEwI,UAAUtF,IAAI,IAAIK,EAAE2F,SAAS,MAAM3F,EAAEyN,QAxFhC,QAwF6C;IACpDhR,EAAE0N,UAAUxK,IAAI,GAAGK,EAAE0N,OAAO;IAC5B/N,KAAK;IACL,QAAQK,EAAE6F;KACT,KAAKjJ,EAAEC;MACN,OAAOmM,EAAE/F,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEE;MACN,OAAOiM,EAAE9F,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEI;MACN,OAAOgN,EAAE/G,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEO;MACN,OAAOoM,EAAEtG,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEQ;MACN,OAAOsN,EAAEzH,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAES;MACN,OAAO6L,EAAEjG,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEU;MACN,OAAOmO,EAAExI,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEc;MACN,OAAOuL,EAAEhG,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEgB;MACN,OAAOuL,EAAElG,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEiB;MACN,OAAO2O,EAAEvJ,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEuB;MACN,OAAOkO,EAAEpJ,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEwB;MACN,OAAO8N,EAAEjJ,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAE0B;MACN,OAAO0M,EAAE/H,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAE2B;MACN,OAAOqN,EAAE3I,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAE4B;MACN,OAAOqM,EAAE5H,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAE8B;MACN,OAAOqN,EAAE9I,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEgC;MACN,OAAOiO,GAAE5J,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEoC;KACP,KAAKpC,EAAEqC;MACN,OAAOiO,GAAGjK,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAEzB,KAAKtJ,EAAE4C;MACN,OAAOmK,EAAE1G,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB,KAAKtJ,EAAEM;KACP,KAAKN,EAAEG;KACP,KAAKH,EAAEoB;MACN,OAAO+K,EAAE9F,MAAMxG,GAAGkD,GAAGK,EAAEkG;;KAExB;MACC,OAAO4C,EAAE7F,MAAMxG,GAAGkD,GAAGK,EAAEkG;;AAE3B;EACA,IAAA7C,CAAK5G,GAAGkD;IACN,MAAMK,IAAI6C,EAAEQ,KAAK5G,GAAGkD;IACpB,MAAMuB,IAAIzE,EAAEmH,UAAUjE,EAAE2D;IACxB,IAAIpC,MAAMtE,EAAEqB,KAAK;MACf,MAAMrB,IAAIH,EAAEmH,UAAUjE,EAAE2D,SAAS,MAAM;MACvC,MAAMtD,IAAIvD,EAAE8G,SAAS5D,EAAE2D,SAAS;MAChC,MAAMlB,IAAI3F,EAAE8G,SAAS5D,EAAE2D,SAAS;MAChC,MAAMhB,IAAI7F,EAAEmH,UAAUjE,EAAE2D,SAAS;MACjCE,QAAQ7D,GAAG;MACX,OAAO;QACLkG,MAAM3E;QACNoM,gBAAgB1Q;QAChB2Q,eAAevN;QACfwN,aAAapL;QACb0H,OAAOxH;QACP4D,MAAMkH,GAAG/J,KAAK5G,GAAGkD;;AAErB;IACA,MAAMyC,IAAI3F,EAAEmH,UAAUjE,EAAE2D,SAAS;IACjC,MAAMhB,IAAI7F,EAAEgO,UAAU9K,EAAE2D,SAAS;IACjCE,QAAQ7D,GAAG;IACX,MAAM6C,IAAI;MACRkD,MAAM1F;MACN6F,MAAM3E;MACNyE,QAAO,QAASvD;MAChBqL,UAxLK,QAwLKrL;MACVsL,KAAKpL;MACL4D,MAAM;;IAER,QAAQ1D,EAAEqD;KACT,KAAKjJ,EAAEC;MACN2F,EAAE0D,OAAO8C,EAAE3F,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEE;MACN0F,EAAE0D,OAAO6C,EAAE1F,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEI;MACNwF,EAAE0D,OAAO8D,EAAE3G,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEO;MACNqF,EAAE0D,OAAOqD,EAAElG,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEQ;MACNoF,EAAE0D,OAAOwE,EAAErH,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAES;MACNmF,EAAE0D,OAAOgD,EAAE7F,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEU;MACNkF,EAAE0D,OAAOuF,EAAEpI,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEc;MACN8E,EAAE0D,OAAO+C,EAAE5F,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEgB;MACN4E,EAAE0D,OAAOiD,EAAE9F,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEiB;MACN2E,EAAE0D,OAAOsG,EAAEnJ,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEuB;MACNqE,EAAE0D,OAAOmG,EAAEhJ,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEwB;MACNoE,EAAE0D,OAAOgG,EAAE7I,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAE0B;MACNkE,EAAE0D,OAAO8E,EAAE3H,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAE2B;MACNiE,EAAE0D,OAAO0F,EAAEvI,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAE4B;MACNgE,EAAE0D,OAAO2E,EAAExH,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAE8B;MACN8D,EAAE0D,OAAO6F,EAAE1I,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEgC;MACN4D,EAAE0D,OAAO2G,GAAExJ,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEoC;KACP,KAAKpC,EAAEqC;MACNuD,EAAE0D,OAAOgH,GAAG7J,KAAK5G,GAAGkD;MACpB,OAAO6C;;KAER,KAAK5F,EAAE4C;MACNgD,EAAE0D,OAAOyD,EAAEtG,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER,KAAK5F,EAAEM;KACP,KAAKN,EAAEG;KACP,KAAKH,EAAEoB;MACNwE,EAAE0D,OAAO6C,EAAE1F,KAAK5G,GAAGkD;MACnB,OAAO6C;;KAER;MACCA,EAAE0D,OAAO4C,EAAEzF,KAAK5G,GAAGkD;MACnB,OAAO6C;;AAEX;;;AAGF,MAAMmL,WAAW,CAAClR,GAAGG,GAAG+C,GAAGK;EACzB,KAAKA;IACH;;EAEF,OAAOsD,QAAQpC,GAAGyB,QAAQP,KAAKzC;EAC/B,MAAM2C,IAAI;EACV,KAAK,IAAIE,IAAI,GAAGA,IAAIxC,KAAKL,EAAE2D,SAASpC,IAAIkB,GAAGI;IACzCF,EAAEoB,KAAKjH,EAAE4G,KAAKzG,GAAG+C;;EAEnB,OAAO2C;;;AAGT,MAAMsL,KAAK;EACT,KAAA9K,CAAMrG;IACJ,OAAOoR,WAAWjR,GAAGkR,SAASnO,GAAGoO,aAAa/N,GAAGgO,aAAa9M,KAAKzE;IACnE,IAAI2F,IAAI;IACR,IAAIE,IAAI;IACR,KAAKA,IAAI,GAAG1F,KAAK0F,IAAI1F,EAAE+F,QAAQL;MAC7BF,KAAKqD,EAAE3C,MAAMlG,EAAE0F;;IAEjB,KAAKA,IAAI,GAAG3C,KAAK2C,IAAI3C,EAAEgD,QAAQL;MAC7BF,KAAKiL,GAAGvK,MAAMnD,EAAE2C;;IAElB,KAAKA,IAAI,GAAGtC,KAAKsC,IAAItC,EAAE2C,QAAQL;MAC7BF,KAAKiL,GAAGvK,MAAM9C,EAAEsC;;IAElB,KAAKA,IAAI,GAAGpB,KAAKoB,IAAIpB,EAAEyB,QAAQL;MAC7BF,KAAKiL,GAAGvK,MAAM5B,EAAEoB;;IAElB,OAAOF;AACT;EACA,KAAAa,CAAMrG,GAAG+C,GAAGK;IACV,OAAO6N,WAAW3M,GAAG4M,SAAS1L,GAAG2L,aAAazL,GAAG0L,aAAaxL,KAAKxC;IACnE,IAAI6C,IAAI,SAAS7C,EAAE8J,SAAS,MAAM9J,EAAE6F,QAAQpJ,EAAEC,UAAUsD,EAAEiO,SAAS;IACnErR,EAAEqI,UAAUtF,GAAGK,EAAEkO,MAAM;IACvBtR,EAAEqI,UAAUtF,IAAI,GAAGkD;IACnBjG,EAAEqI,UAAUtF,IAAI,GAAGK,EAAE6N,WAAWlL,UAAU;IAC1C/F,EAAEqI,UAAUtF,IAAI,GAAGK,EAAE8N,SAASnL,UAAU;IACxC/F,EAAEqI,UAAUtF,IAAI,GAAGK,EAAE+N,aAAapL,UAAU;IAC5C/F,EAAEqI,UAAUtF,IAAI,IAAIK,EAAEgO,aAAarL,UAAU;IAC7ChD,KAAK;IACL,IAAImE,IAAI;IACR,KAAKA,IAAI,GAAG5C,KAAK4C,IAAI5C,EAAEyB,QAAQmB;MAC7BnE,IAAI8F,EAAExC,MAAMrG,GAAG+C,GAAGuB,EAAE4C;;IAEtB,KAAKA,IAAI,GAAG1B,KAAK0B,IAAI1B,EAAEO,QAAQmB;MAC7BnE,IAAI0N,GAAGpK,MAAMrG,GAAG+C,GAAGyC,EAAE0B;;IAEvB,KAAKA,IAAI,GAAGxB,KAAKwB,IAAIxB,EAAEK,QAAQmB;MAC7BnE,IAAI0N,GAAGpK,MAAMrG,GAAG+C,GAAG2C,EAAEwB;;IAEvB,KAAKA,IAAI,GAAGtB,KAAKsB,IAAItB,EAAEG,QAAQmB;MAC7BnE,IAAI0N,GAAGpK,MAAMrG,GAAG+C,GAAG6C,EAAEsB;;IAEvB,OAAOnE;AACT;EACA,IAAA0D,CAAKzG,GAAG+C;IACN,MAAMK,IAAIpD,EAAEgH,UAAUjE,EAAE2D;IACxB,MAAMpC,IAAItE,EAAEgH,UAAUjE,EAAE2D,SAAS;IACjC,MAAMlB,IAAIxF,EAAEgH,UAAUjE,EAAE2D,SAAS;IACjC,MAAMhB,IAAI1F,EAAEgH,UAAUjE,EAAE2D,SAAS;IACjC,MAAMd,IAAI5F,EAAEgH,UAAUjE,EAAE2D,SAAS;IACjC,MAAMT,IAAIjG,EAAEgH,UAAUjE,EAAE2D,SAAS;IACjCE,QAAQ7D,GAAG;IACX,OAAO;MACLuO,IAAIlO;MACJ8J,OAAO5I;MACP+M,OAAO,KAAK/M;MACZ2E,MAAM3E,IAAIzE,EAAEE,WAAWF,EAAEE,WAAWF,EAAEC;MACtCmR,WAAWF,SAASlI,GAAG7I,GAAG+C,GAAGyC;MAC7B0L,SAASH,SAASN,IAAIzQ,GAAG+C,GAAG2C;MAC5ByL,aAAaJ,SAASN,IAAIzQ,GAAG+C,GAAG6C;MAChCwL,aAAaL,SAASN,IAAIzQ,GAAG+C,GAAGkD;;AAEpC;;;AAwBF,SAASK,OAAOzG;EACd,MAAMG,IAAI,IAAIgK,YAAYgH,GAAG9K,MAAMrG;EACnC,MAAMkD,IAAIiO,GAAG3K,MAAM,IAAI4D,SAASjK,IAAI,GAAGH;EACvC,OAAO,IAAIsH,WAAWnH,GAAG,GAAG+C;AAC9B;;AC79CO,MAAMwO,KAAoB;EAC/B,IAAIC,IAA8D;EAClE,IAAIC,IAAoC;EACxC,OAAO;IACL,KAAKD;MAAaA,IAAc3E,EAAG0E;;IACnC,KAAKE;MACHA,IAAWC,QAAQC,UAAUC,KAAK,MAAOJ,IAAcC,IAAW;;IACpE,OAAOD;;AAEV,EATgC;;AAiC1B,MAAMK,aACXC,KAEuB,QAAhBA,EAAKC,WAAmBD,EAAKC,UAAU;;AAGzC,MAAMC,WAAWA,MAAMnF,EAAGmF;;ACLjC,MAAMC,gBAAiBC,KACrBA,EACGC,OACAhM,QAAQ,gBAAgB,IACxBA,QAAQ,kBAAkB,KAC1BA,QAAQ,YAAY,IACpBiM,cACA7J,MAAM,GAAG8J;;AAsBd,MAAMC,oBAAoBA,CAACC,GAAe3G,GAAc4G;EACtD,MAAM1J,IArBcA,MACpBA,EAAKqJ,OAAOhM,QAAQ,OAAO,KAAKoC,MAAM,GAAG8J,IAoB5BI,CAAaF;EAC1B,IAAIC,GAAM;IACR,MAAME,IAAS,KDzBQnD,EAAC3D,GAAc4G;MACxC,MAAMvF,IAAQ,GAAG+E,cAAcpG;MAC/B,IAAI4D,IAAO;MACX,IAAa,MAATgD;QAAYhD,KAAQA,KAAQ,KAAKA,KAAe,MAAPgD;;MAC7C,KAAK,IAAI9M,IAAI,GAAG+B,IAAIwF,EAAMlH,QAAQL,IAAI+B,GAAG/B;QACvC8J,KAAQA,KAAQ,KAAKA,IAAOvC,EAAMjH,WAAWN;;MAC/C,QAAe,QAAP8J,GAAe9G,SAAS,IAAIiK,cAAcC,SAAS,GAAG;MCmBxCrD,CAAY3D,GAAM4G,IAAO;IAC7C,OAAO1J,EAAKP,MAAM,GAAG8J,KAAeK,EAAO3M,UAAU2M;AACvD;IACE,OAAO5J;;;;AAiCX,MAAM+J,YAAYA,CAACC,GAAoBhC,OAAW;EAChD7H,MAAM8J,EAAW/R;EACjB+H,OAAOiK,EAAYhQ;EACnB8F,MAAMgK,EAAIG;EACVnC;EACAD,QAAO;EACPvH,MAAM;IACJmD,UAAU;IACVC,QAAQ;IACRd,MAAMkH,EAAIlH;IACVY,QAAQsG,EAAII;;;;AAIhB,MAAMC,YAAYA,CAACL,GAAoBhC,OAAW;EAChD7H,MAAM8J,EAAWtS;EACjBsI,OAAOiK,EAAYhQ;EACnB8F,MAAMgK,EAAIG;EACVnC;EACAD,QAAO;EACPvH,MAAMwJ,EAAI/D;;;AAGZ,MAAMqE,YAAYA,CAACtK,GAAcQ,GAAcwH,OAAW;EACxD7H,MAAM8J,EAAWzS;EACjByI,OAAOiK,EAAYhQ;EACnB8F;EACAgI;EACAD,QAAO;EACPvH;;;AAGF,MAAM+J,aAAaA,CAACP,GAAoBhC,MAA6B,EACnEsC,UAAUN,EAAIQ,QAAQR,EAAIG,SAASnC,IACnCsC,UAAUG,IAAYT,EAAIQ,QAAQxC,OAC/B0C,OAAOC,KAAKX,EAAIY,UAAUvL,IAAIwL,KAC/BP,UAAUO,GAASb,EAAIG,SAASnC;;AAIpC,MAAM8C,WAAWA,CACfd,GACAe,GACA/C,MAEA+C,EACGC,OAAOC,KAAWA,EAAQlK,WAAWmK,GAAO7K,IAC5ChB,IAAI4L,MAAO;EACV9K,MAAM8J,EAAW9S;EACjB8I,OAAOiK,EAAYhQ;EACnB8F,MAAMgK,EAAII;EACVpC;EACAD,QAAO;EACPvH,MAAMyK,EAAQE;;;AAGpB,MAAMC,cAAcA,CAClBpB,GACAe,GACA/C,MAEA+C,EACGC,OAAOC,KAAWA,EAAQlK,WAAWmK,GAAO5K,IAC5CjB,IAAI4L,MAAO;EACV9K,MAAM8J,EAAWjS;EACjBiI,OAAOiK,EAAYhQ;EACnB8F,MAAMgK,EAAII;EACVpC;EACAD,QAAO;EACPvH,MAAMyK,EAAQE;;;AAGpB,MAAM/C,UAAUA,CACd4B,GACAe,GACA/C,MACG,KACAuC,WAAWP,GAAKhC,IACnB+B,UAAUC,GAAKhC,IACfqC,UAAUL,GAAKhC,OACZ8C,SAASd,GAAKe,GAAU/C,OACxBoD,YAAYpB,GAAKe,GAAU/C;;AA+ChC,IAAkBqD,cAAAA;EAAAA,EAAAA,EAAY,OAAA,KAAA;EAAZA,EAAAA,EAAY,OAAA,KAAA;EAAZA,EAAAA,EAAY,aAAA,KAAA;EAAZA,EAAAA,EAAY,gBAAA,KAAA;EAAZA,EAAAA,EAAY,WAMjBA,EAAaC,aAAaD,EAAaE,iBAAa;EAAA,OAN/CF;AAAY,EAAA;;AAS9B,MAAMG,uBAAuBA,CAC3BpD,GACA4B,GACAe;EAEA,IAAIU,IAAOJ,GAAaK;EACxB,MAAMC,IAAc,IAAIC,IACtBb,EACGC,OAAOC,KAAWA,EAAQlK,WAAWmK,GAAO7K,IAC5ChB,IAAI4L,KAAWA,EAAQE;EAE5B,MAAMU,IAAc,IAAID,IACtBb,EACGC,OAAOC,KAAWA,EAAQlK,WAAWmK,GAAO5K,IAC5CjB,IAAI4L,KAAWA,EAAQE;EAE5B,KAAK,MAAMW,KAAU1D,GAAS;IAC5B,MAAM2D,IAAaD,EAAO9L,MAAMsJ;IAChC,IACEwC,EAAO3L,SAAS8J,EAAW/R,OAC3B6T,MAAe/B,EAAIgC,WAClBF,EAAOtL,KAAKsC,SAASkH,EAAIlH,QACxBgJ,EAAOtL,KAAKkD,OAAO4F,kBAAkBU,EAAII;MAE3CqB,KAAQJ,GAAaY;WAChB,IACLH,EAAO3L,SAAS8J,EAAW9S,KAC3B4U,MAAe/B,EAAII,SAClBuB,EAAYO,IAAIJ,EAAOtL;MAExBiL,KAAQJ,GAAaC;WAChB,IACLQ,EAAO3L,SAAS8J,EAAWjS,QAC3B+T,MAAe/B,EAAII,SAClByB,EAAYK,IAAIJ,EAAOtL,KAAK8I;MAE7BmC,KAAQJ,GAAaE;;AAEzB;EACA,OAAOE;;;AAWF,MAAMU,yBAAyBA,CACpCC,GACApC,GACAe;EAEA,IAAIU,IAAOJ,GAAaK;EACxB,IAAIU,EAAOjM,SAASkM,EAAWpV,UAAU;IACvC,IAAImV,EAAOhE,SAASnL;MAClBwO,KAAQD,qBAAqBY,EAAOhE,SAAS4B,GAAKe;;IACpD,IAAIqB,EAAO9D,aAAarL;MACtBwO,KAAQD,qBAAqBY,EAAO9D,aAAa0B,GAAKe;;AAC1D;EACA,OAAOU;;;AAGT,MAAMa,yBAAyBA,CAC7BF,GACApC,GACAe;EAEA,IACEqB,EAAOjM,SAASkM,EAAWrV,UAC1BoV,EAAOjE,WAAWlL,WAClBmP,EAAO/D,aAAapL;IAErB,OAAOoO,GAAaK;;EAStB,OAP4BU,EAAOjE,UAAUoE,KAAKC;IAChD,MAAMC,IAAeD,EAASxM,KAAKsJ;IACnC,OArCyBkD,MAC3BA,EAASrM,SAAS8J,EAAWpQ,OAC7B2S,EAASrM,SAAS8J,EAAW9S,KAC7BqV,EAASrM,SAAS8J,EAAWjS,QAC7BwU,EAASrM,SAAS8J,EAAW/R,OAC7BsU,EAASrM,SAAS8J,EAAWtS,OAC7B6U,EAASrM,SAAS8J,EAAWzS,IAgCzBkV,CAAoBF,OACnBC,MAAiBzC,EAAII,QAAQqC,MAAiBzC,EAAIgC;OAInDR,qBAAqBY,EAAO/D,aAAa2B,GAAKe,KAC9CM,GAAaK;;;AAaZ,MAAMiB,kBAAkBA,CAC7BP,GACApC,GACAe,GACA6B;EAEA,IAAIR,EAAOjM,SAASkM,EAAWrV,UAAUoV,EAAOjE,WAAWlL;IACzD,OAAO;;EAGT,MAAM4P,IAAwCnC,OAAOoC,OAAO;EAE5D,IAAIC,KAAS;EACb,IAAIC,KAAS;EACb,IAAIC,KAAO;EACX,IAAIC,KAAU;EAEd,IAAId,EAAOhE;IACT,KAAK,MAAM0D,KAAUM,EAAOhE,SAAS;MACnC,MAAM2D,IAAaD,EAAO9L,MAAMsJ;MAChC,QAAQwC,EAAO3L;OACb,KAAK8J,EAAW/R;QACd6U,MAAWhB,MAAe/B,EAAIgC;QAC9B;;OACF,KAAK/B,EAAWtS;QACdqV,MAAWjB,MAAe/B,EAAIgC;QAC9B;;OACF,KAAK/B,EAAW9S;QACd8V,MAASlB,MAAe/B,EAAII;QAC5B;;OACF,KAAKH,EAAWjS;QACdkV,MAAYnB,MAAe/B,EAAII;QAC/B;;OACF,KAAKH,EAAWzS;QACd,QAAQuU;SACN,KAAK/B,EAAIQ;UACP,IAAIsB,EAAOtL,KAAK8I,kBAAkBU,EAAIgC;YACpCa,EAAI7C,EAAIQ,WAAU;;UACpB;;SACF,KAAKC;UACH,IAAIqB,EAAOtL,KAAK8I,kBAAkBU,EAAIQ;YACpCqC,EAAIpC,OAAc;;UACpB;;SACF;UACE,IACEsB,KACA/B,EAAIY,SAASmB,MACbD,EAAOtL,KAAK8I,kBAAkBU,EAAIgC;YAElCa,EAAId,MAAc;;;;AAM9B;;EAGF,MAAM3D,IAAoB;EAC1B,MAAME,IAAwB;EAC9B,KAAK,MAAMkE,KAAYJ,EAAOjE,WAAW;IACvC,MAAMqE,EAAStM,OAAO0M;MACpB;;IAEF,MAAMH,IAAeD,EAASxM,KAAKsJ;IACnC,QAAQkD,EAASrM;KACf,KAAK8J,EAAW/R;MACd,KAAK6U,KAAUN,MAAiBzC,EAAIgC,QAAQ;QAC1C5D,EAAQpK,KAAK+L,UAAUC,GAAKA,EAAIhC;QAChC+E,KAAS;AACX;MACA;;KACF,KAAK9C,EAAWtS;MACd,KAAKqV,KAAUP,MAAiBzC,EAAIgC,QAAQ;QAC1C5D,EAAQpK,KAAKqM,UAAUL,GAAKA,EAAIhC;QAChCgF,KAAS;AACX;MACA;;KACF,KAAK/C,EAAW9S;MACd,KAAK8V,KAAQR,MAAiBzC,EAAII,MAAM;QACtChC,EAAQpK,QAAQ8M,SAASd,GAAKe,GAAUf,EAAIhC;QAC5CiF,KAAO;AACT;MACA;;KACF,KAAKhD,EAAWjS;MACd,KAAKkV,KAAWT,MAAiBzC,EAAII,MAAM;QACzChC,EAAQpK,QAAQoN,YAAYpB,GAAKe,GAAUf,EAAIhC;QAC/CkF,KAAU;AACZ;MACA;;KACF,KAAKjD,EAAWzS;MACd,QAAQiV;OACN,KAAKzC,EAAIQ;QACP,KAAKqC,EAAI7C,EAAIQ,SAAS;UACpBpC,EAAQpK,KAAKsM,UAAUN,EAAIQ,QAAQR,EAAIG,SAASH,EAAIhC;UACpD6E,EAAI7C,EAAIQ,WAAU;AACpB;QACA;;OACF,KAAKC;QACH,KAAKoC,EAAIpC,KAAa;UACpBrC,EAAQpK,KAAKsM,UAAUG,IAAYT,EAAIQ,QAAQR,EAAIhC;UACnD6E,EAAIpC,OAAc;AACpB;QACA;;OACF;QACE,IAAIT,EAAIY,SAAS6B,IAAe;UAC9BrE,EAAQpK,KAAKsM,UAAUmC,GAAczC,EAAIG,SAASH,EAAIhC;UACtD6E,EAAIJ,MAAgB;AACtB;;MAEJ;;KAEF,KAAKxC,EAAWpQ;MACd,QAAQ4S;OACN,KAAKzC,EAAIgC;QACP,KAAKe,GAAQ;UACX3E,EAAQpK,KAAK+L,UAAUC,GAAKA,EAAIhC;UAChC+E,KAAS;AACX;QACA,KAAKC,GAAQ;UACX5E,EAAQpK,KAAKqM,UAAUL,GAAKA,EAAIhC;UAChCgF,KAAS;AACX;QACA;;OACF,KAAKhD,EAAII;QACP,KAAK6C,GAAM;UACT7E,EAAQpK,QAAQ8M,SAASd,GAAKe,GAAUf,EAAIhC;UAC5CiF,KAAO;AACT;QACA,KAAKC,GAAS;UACZ9E,EAAQpK,QAAQoN,YAAYpB,GAAKe,GAAUf,EAAIhC;UAC/CkF,KAAU;AACZ;QACA;;OACF,KAAKlD,EAAIQ;QACP,KAAKqC,EAAI7C,EAAIQ,SAAS;UACpBpC,EAAQpK,KAAKsM,UAAUN,EAAIQ,QAAQR,EAAIG,SAASH,EAAIhC;UACpD6E,EAAI7C,EAAIQ,WAAU;AACpB;QACA;;OACF,KAAKC;QACH,KAAKoC,EAAIpC,KAAa;UACpBrC,EAAQpK,KAAKsM,UAAUG,IAAYT,EAAIQ,QAAQR,EAAIhC;UACnD6E,EAAIpC,OAAc;AACpB;QACA;;OACF;QACE,IAAIT,EAAIY,SAAS6B,IAAe;UAC9BrE,EAAQpK,KAAKsM,UAAUmC,GAAczC,EAAIG,SAASH,EAAIhC;UACtD6E,EAAIJ,MAAgB;AACtB;;;AAIV;EAEA,IAAII,EAAI7C,EAAIQ,YAAYuC,GAAQ;IAC9BzE,EAAYtK,KAAK+L,UAAUC,GAAKA,EAAIhC;IACpC+E,KAAS;AACX;EACA,IAAIF,EAAI7C,EAAIQ,YAAYwC,GAAQ;IAC9B1E,EAAYtK,KAAKqM,UAAUL,GAAKA,EAAIhC;IACpCgF,KAAS;AACX;EACA,IAAID,MAAWE,GAAM;IACnB3E,EAAYtK,QAAQ8M,SAASd,GAAKe,GAAUf,EAAIhC;IAChDiF,KAAO;AACT;EACA,IAAIF,MAAWG,GAAS;IACtB5E,EAAYtK,QAAQoN,YAAYpB,GAAKe,GAAUf,EAAIhC;IACnDkF,KAAU;AACZ;EAEA,IAAI9E,EAAQnL,SAAS;IACnB,OAAOO,OAAO;MACZ2C,MAAMkM,EAAWpV;MACjBmN,OAAO+I,EAAW5R;MAClB6M;MACAE;;;IAGF,OAAO;;;;AC3eX,MAAM8E,uBAAuBA,CAC3BC,GACAtM;EAEA,MAAMuM,IACJvM,MAAWmK,GAAO7K,KAAKkN,GAAYlN,KAAKkN,GAAYjN;EACtD,MAAMyK,IFXyByC,EAC/BH,GACAtM;IAEA,MAAMgK,IAAWtC,KACd4E,IAAQrC,OAAOC,KAAWA,EAAQlK,WAAWA,GAC7C1B,IAAI4L,MAAO;SAAUA;MAASlK;MAAQsM;;IACzC,OAAOtC,GAAU9N,SAAS8N,SAAW0C;IEIpBD,CAAkBH,GAAOtM;EAC1C,KAAKgK,GAAU9N;IACb,OAAO;;EAET,MAAMyQ,IAAc,IAAI9B;EACxB,IAAI+B;EACJ,IAAI5M,MAAWmK,GAAO7K,IAAI;IACxBsN,IAAqB5C,EAAS,GAAGI;IACjC,KAAK,MAAMF,KAAWF;MAAU2C,EAAYE,IAAI3C,EAAQE;;AAC1D,SAAO;IACL,MAAM0C,IACiB,YAArBC,QAAQC,WACJhD,EAASiD,KAAKjF,aAAaE,QAAQrJ,aACnCyN;IACN,KAAKQ;MACH,OAAO;;IAETH,EAAYE,IAAKD,IAAqB,MAAME;AAC9C;EACA,OAAO;IACL9M;IACAgK;IACA2C;IACAJ;IACAK;;;;AAIJ,MAAMM,gBAAgBA,CACpBC,GACAC,GACAC;EAEA;IACEF,EAAOD,cAAcE,EAASb,kBAAkBc;IAChD,QAAO;AACT,IAAE,OAAOC;IACP,QAAO;AACT;;;AAGF,MAAMC,iBAAiBA,CACrBJ,GACAC,GACAC;EAEA;IACEF,EAAOI,eAAeH,EAASb,kBAAkBc;IACjD,QAAO;AACT,IAAE;IACA,QAAO;AACT;;;AAGF,MAAMG,wBAAwBA,CAC5BlB,GACAtM,GACA0G;EAEA,MAAM+G,IAAgC;EAEtC,IAAIC,IAA8B;EAClC,IAAIC,IAA4BC;EAEhC,SAASA;IACP,MAAMR,IAAWf,qBAAqBC,GAAOtM;IAC7C,KAAKoN;MACH,OAAO;;IAET,MAAMS,IAAcC,EAAMC,aACxB/N,MAAWmK,GAAO7K,KACd;MAAEF,MAAM;MAAQ4O,YAAW;QAC3B;MAAE5O,MAAM;MAAQ4O,YAAW;MAAMC,WAAU;;IAEjDJ,EAAYK;IACZL,EAAYM,GAAG,WAAWC,OAAOC,GAASC;MACxC;cACQ5H,EAAO6H,UAAUF,GAAS;UAC9BlB;UACAnN,QAAyB,WAAjBsO,EAAMtO,SAAoBmK,GAAO5K,KAAK4K,GAAO7K;UACrD8K,SAASkE,EAAMlE;UACfrI,MAAMuM,EAAMvM;UACZyM,OAAMH,KACGI,KAAKJ,GAASC,EAAMlE,SAASkE,EAAMvM;;AAGhD,QAAE,OACA;;IAGJ2M,cACE,IAAI7G,QAAc,CAACC,GAAS6G;MAC1Bd,EAAYe,oBAAoB,SAASD;MACzCd,EAAYe,oBAAoB,SAASC;MACzChB,EAAY5F,KAAK6G,IAAW;QAC1B;UACEC,YAAYlB,GAAaT;UACzBtF;AACF,UAAE,OAAOwF;UACPuB;UACAF,EAAOrB;AACT,UAAC;UACCO,EAAYmB,eAAe,SAASL;UACpCd,EAAYM,GAAG,SAASU;AAC1B;;;IAIN,OAAO;MAAEzB;MAAUD,QAAQU;;AAC7B;EAEA,SAASkB,YACPlB,GACAoB;IAEA,MAAMC,IACJD,MAAgBtB,GAAOP,WAAWO,GAAOP,WAAW;IACtD,IAAI+B,MACAD,KACFA,EAAatC,uBAAuBqC,EAAYrC;IAClD;MACEiB,EAAYuB,gBAAgB;MAC5BvB,EAAYwB,sBAAqB;MACjCxB,EAAYyB,sBAAsBL,EAAYrC;AAChD,MAAE;MACAiC;MACA,QAAO;AACT;IACA,IAAIK;MACF,KAAK,MAAMK,KAAkBL,EAAavC;QACxC,KAAKsC,EAAYtC,YAAYxB,IAAIoE,IAAiB;UAChDhC,eAAeM,GAAaqB,GAAcK;UAC1CJ,KAAa;AACf;;;IAGJ,KAAK,MAAM9B,KAAc4B,EAAYtC;MACnC,KAAKuC,GAAcvC,YAAYxB,IAAIkC,IAAa;QAE9C,KADcH,cAAcW,GAAaoB,GAAa5B;UAEpD4B,EAAYtC,YAAY6C,OAAOnC;eAC1B,IAAI6B;UACTC,KAAa;;AAEjB;;IAEF,KAAKF,EAAYtC,YAAY8C,MAAM;MACjCZ;MACA,QAAO;AACT,WAAO,IAAIlB;MACTA,EAAMP,WAAW6B;;IAEnB,OAAOE;AACT;EAEA,SAASN;IACP,IAAIlB,GAAO;MACT,OAAMR,QAAEA,KAAWQ;MACnBA,IAAQ;MACR;QACER,EAAOuC;AACT,QAAE,OAAO;AACX;AACF;EAEA,SAASC,cAAcjH;IACrB;MACE,IAAIiF;QACFA,EAAMR,OAAOsB,KACX/F,EAAM2F,SACN,GACA3F,EAAM2F,QAAQpS,YACdyM,EAAM3G,MACN2G,EAAM0B,SACN1B,EAAMkH;;QAIRlH,EAAMkH,OAAO;;AAEjB,MAAE,OAAOtC;MACP5E,EAAMkH,OAAOtC;AACf;AACF;EAEA,SAASuC,WAAWC;IAClB,IAAgB,SAAZA,KAAoBpC,MAAUoC;MAChCpC,IAAQ;;IAEV,IAAIW;IACJ,QAAQX,KAA6C,SAAnCW,IAAUZ,EAAasC;MACvCJ,cAActB;;AAElB;EAMA,SAASK,cAAcsB,IAJvB,SAASC;IACP,OAAO,IAAIpI,QAAQC,KAAWoI,WAAWpI,GAAS,GAAGoG;AACvD,GAEiC+B;IAC/B,KAAKvC,GAAO;MACV,MAAMoC,IAAWpC,IAAQsC,EAAQjI,KAC/B,MAAM8H,WAAWC,IACjB,MAAMD,WAAW;AAErB;AACF;EAEAzB,eAAeK,KAAKJ,GAAqBjE,GAAiBrI;IACxD,OAAO,IAAI8F,QAAc,CAACC,GAAS6G;MACjCD;MACAjB,EAAaxQ,KAAK;QAChBoR;QACAjE;QACArI;QACA6N,MAAAA,CAAOtC;UACL,IAAa,QAATA;YACFqB,EAAOrB;;YAEPxF;;AAEJ;;;AAGN;EAEA,MAAMqF,IAAiB;IACrB,UAAIgD;MACF,QAAQxC;AACV;IACA,YAAI3D;MACF,OAAO2D,GAAOP,SAASpD,YAAY;AACrC;IACA,UAAMyE,CAAKJ;MACT,IAAIV;cACIc,KAAKJ,GAASV,EAAMP,SAASb,kBAAkBuC;;AAEzD;IACAlL,OAAAA;MACE,IAAI+J,GAAO;QACT,MAAMsB,IAAc5C,qBAAqBC,GAAOtM;QAChD,IAAIiP;UACF,OAAOF,YAAYpB,EAAMR,QAAQ8B;eAC5B;UACLJ;UACA,QAAO;AACT;AACF,aAAO;QACLlB,IAAQC;QACR,SAASD;AACX;AACF;IACA+B,KAAAA;MACEb;MACAgB,WAAW;AACb;;EAGF,OAAO1C;;;AC1ST,IAAYhD,cAAAA;EAAAA,EAAM,KAAA;EAANA,EAAM,KAAA;EAAA,OAANA;AAAM,EAAA;;AAKlB,IAAYqC,cAAAA;EAAAA,EAAW,KAAA;EAAXA,EAAW,KAAA;EAAA,OAAXA;AAAW,EAAA;;AAKhB,MAAMhE,KAAe;;AACrB,MAAMsG,KAAY;;AAClB,MAAMpF,KAAa;;AAenB,MAAM0G,KAA4B;EACvCC,OAAAA,IAAW;EACXtC,cDgR0BA,CAACzB,GAAe5F;IAC1C,MAAM4J,IAAO9C,sBAAsBlB,GAAOnC,GAAO7K,IAAIoH;IACrD,MAAM6J,IAAO/C,sBAAsBlB,GAAOnC,GAAO5K,IAAImH;IACrD,OAAO;MACL,UAAIyJ;QACF,OAAOG,EAAKH,UAAUI,EAAKJ;AAC7B;MACA,YAAInG;QACF,OAAO,KAAIsG,EAAKtG,aAAauG,EAAKvG;AACpC;MACA,UAAMyE,CAAKJ;cACHxG,QAAQ2I,IAAI,EAACF,EAAK7B,KAAKJ,IAAUkC,EAAK9B,KAAKJ;AACnD;MACAzK,OAAAA;QACE,MAAM6M,IAAiBH,EAAK1M;QAC5B,MAAM8M,IAAiBH,EAAK3M;QAC5B,OAAO6M,KAAkBC;AAC3B;MACAhB,KAAAA;QACEY,EAAKZ;QACLa,EAAKb;AACP;;;ECpSFiB,iBC8EK,SAASA;IACd,MAAMC,IAAY,IAAI/F;IAkCtB,OAAO;MACLgG,UAlCFzC,eAAeyC,SAAYC,GAAgBC;QA+BzC,aA9BA3C,eAAeyC,SAASG,GAAiBC,IAAQC,SAASJ,GAAME;UAC9D,OAAO,IAAInJ,QAAWuG,OAAOtG,GAAS6G;YACpC,MAAMwC,IAAWtT,KAAKC,IAAImT,GDlGL;YCmGrB,MAAMG,IAAcC,SAASP,GAAMK,GAAU/C;cAC3CwC,EAAUpB,OAAO8B;cACjB,IAAIC,KAAa;cACjB;gBACE,MAAMC,UAAeT,EAAK;kBACxBC;kBACA,WAAMnN,CAAMoN;oBACVM,KAAa;oBACb,OAAOV,SAASG,IAAU,GAAGC;AAC/B;;gBAEFnJ,EAAQ0J;AACV,gBAAE,OAAOlE;gBACP,KAAKiE,KAAcE,YAAYX,GAAME;kBACnCH,SAASG,IAAU,GAAGC,GAAOlJ,KAAKD,GAAS6G;;kBAE3CA,EAAOrB;;AAEX;;YAEF,SAASgE;cACP3C,EAAO,IAAI+C;cACXN;AACF;YACAR,EAAU/D,IAAIyE;;AAElB,SACaT,CAAS;AACxB;MAGEc,MAAAA;QACE,KAAK,MAAMA,KAAUf;UAAWe;;QAChCf,EAAUgB;AACZ;;AAEJ;EDvHEC,oBFJiCC,MAAwB;OACtDA;IACHC,UAAU;IACVC,cAAc;;EEEdC,qBF+CkCvJ;IAClC,MAAMW,IA5BkB6I,EAACxJ,GAAeC;MACxC,IAAIU,IAAOjB,cAAcM;MACzB,IAAIC,GAAM;QACR,MAAMwJ,IAAQ,aAAaC,KAAK/I;QAChC,IAAI8I,GAAO;UACT,MAAME,IAAShJ,EAAK3K,MAAM,IAAIyT,EAAM,GAAGjW;UAEvC,MAAM2M,IAAS,KADC3K,SAASiU,EAAM,IAAI,OACJxJ,KAAQ;UACvCU,IAAOgJ,EAAO3T,MAAM,GAAG8J,KAAeK,EAAO3M,UAAU2M;AACzD,eAAO;UACL,MAAMA,IAAS,IAAIF,IAAO;UAC1BU,IAAOA,EAAK3K,MAAM,GAAG8J,KAAeK,EAAO3M,UAAU2M;AACvD;AACF;MACA,OAAOQ;MAcM6I,CAAkBxJ,EAAMP,UAAUO,EAAMsJ;IACrD,MAAM/S,IAAOwJ,kBAAkBC,EAAMzJ,MAAMyJ,EAAM3G,MAAM2G,EAAMqJ;IAC7D,MAAMtI,IAAS,IAAIrB,cAAcM,EAAMtJ,UAAUgJ,cAAcM,EAAM4J;IACrE,MAAMlJ,IAAU,GAAGnK,KAAQwK;IAC3B,MAAMvE,IAAgB;IACtB,KAAK,MAAMb,KAAOqE,EAAMxD,KAAK;MAC3B,MAAM9B,IAAQsF,EAAMxD,IAAIb;MACxB,IAAqB,mBAAVjB,KAAuC,mBAAVA;QACtC8B,EAAIjI,KAAK,GAAGoH,KAAOjB;aACd,IAAqB,oBAAVA,KAAuBA;QACvC8B,EAAIjI,KAAKoH;;AAEb;IACA,OAAO;MACLoF;MACAL;MACA6B,QAAQ7B,EAAQb;MAChBc,MAAM,GAAGA;MACTtH,MAAM2G,EAAM3G,SAAS;MACrB8H,WAAWnB,EAAMmB,YAAY,IAAI0I,OAAO,CAAC9U,GAAKqM;QAC5CrM,EAAI,GAnEeqM,MACvBA,EACGxB,OACAhM,QAAQ,oBAAoB,KAC5BA,QAAQ,YAAY,IACpBiM,cA8DQiK,CAAgB1I,WAAiBL,QAAY;QACpD,OAAOhM;SACNkM,OAAOoC,OAAO;MACjB7G;MACA+B,KAAKyB,EAAMzB,OAAO;;;EEvEpBwL,uBHhBmCA;IACnC,MAAMC,IAAmB;IACzB,MAAMC,IAAajL;IACnB,KAAK,MAAM4E,KAASqG,GAAY;MAC9B,MAAM3I,IAAW2I,EAAWrG;MAC5B,IAAItC,GAAUwB,KAAKtB,MAAYA,EAAQ0I;QACrCF,EAAOzV,KAAKqP;;AAEhB;IACA,OAAOoG,EAAOxW,SAASwW,IAAS/I,OAAOC,KAAK+I;;EGQ5CxK;;;AC3CF,IAAkB0K,cAAAA;EAAAA,EAAAA,EAAQ,OAAA,KAAA;EAARA,EAAAA,EAAQ,QAAA,KAAA;EAARA,EAAAA,EAAQ,WAAA,KAAA;EAARA,EAAAA,EAAQ,SAAA,KAAA;EAAA,OAARA;AAAQ,EAAA;;AAa1B,MAAMC,KAAe,IAAIC;;AAEzB,MAAMC,cAAcA,CAAC7U,GAAaL,MAChCK,IAAMN,KAAKoV,MAAMpV,KAAKqV,YAAYpV,IAAMK,IAAM;;AAEhD,MAAMsT,cAAcA,CAACX,GAAgBE;EACnC,QAAQF;GACN,KAAK+B,GAASM;GAEd,KAAKN,GAASO;IACZ,OAAOpC,IAAU;;GACnB,KAAK6B,GAASQ;IACZ,OAAOrC,IAAU;;GACnB,KAAK6B,GAASS;IACZ,QAAO;;;;AAIb,MAAMpC,WAAWA,CAACJ,GAAgBE;EAChC,QAAQF;GACN,KAAK+B,GAASM;IACZ,OAAOH,YAAY,IAAI;;GACzB,KAAKH,GAASO;IACZ,OAAOpC,IAAU,MAAMgC,YAAY,GAAG;;GACxC,KAAKH,GAASQ;IACZ,OAAOrC,IAAU,MAAO,MAAMnT,KAAKM,IAAI6S,GAAS,KAAK,KAAK;;GAC5D,KAAK6B,GAASS;IACZ,OAAO;;;;AAIb,MAAMjC,WAAWA,CACfP,GACAG,GACAF;EAEA,MAAMwC,IAAOC,KAAKC,QAAQxC;EAC1B,IAAIyC,IAASZ,GAAaa,IAAI7C;EAC9B,IAAIpD;EACJ,IAAIgG;IACF,KAAK,MAAME,KAAkBF;MAC3B,IACE5C,MAAS+B,GAASS,UAClBzV,KAAKgW,IAAID,EAAeL,OAAOA,MDjCP,KCkCxB;QACA7F,IAAQkG;QACR;AACF;;SAEG;IACLF,IAAS,IAAI7I;IACbiI,GAAarV,IAAIqT,GAAM4C;AACzB;EACA,KAAKhG,GAAO;IACV,MAAMpN,IAAU4P,WAAW;MACzBwD,EAAOlE,OAAO9B;MACd,KAAK,MAAMqD,KAAQrD,EAAOoG;QAAO/C;;OAChCE;IACH,IAAI,WAAW3Q;MACbA,EAAQ4N;;IAEVwF,EAAO7G,IACJa,IAAQ;MACP6F;MACAO,OAAO,IAAIjJ;MACXvK;;AAGN;EACAoN,EAAMoG,MAAMjH,IAAIkE;EAChB,OAAO;IACLrD,EAAMoG,MAAMtE,OAAOuB;IACnB,KAAKrD,EAAMoG,MAAMrE,MAAM;MACrBsE,aAAarG,EAAMpN;MACnBoT,EAAOlE,OAAO9B;AAChB;;;;AAkBG,MAAMgE,mBAAmBsC;EAC9B,mBAAOC,CAAavL;IAClB,OAAOA,KAA0B,mBAAVA,KAAqC,iBAAfA,EAAMzJ;AACrD;EAEAiV,WAAAA;IACEC,MAAM;IACNC,KAAKnV,OAAO;AACd;;;ACrGiB,IAgCRoV,cAAAA;EAAAA,EAAAA,EAAe,UAAA,KAAA;EAAfA,EAAAA,EAAe,YAAA,KAAA;EAAfA,EAAAA,EAAe,SAAA,KAAA;EAAA,OAAfA;AAAe,EAAfA,MAAe,CAAA;;AAWnB,SAASC,0BACdhI,GACA5F,GACAV;EAEA,MAAM0C,IAAQ1C,EAAS6L,mBAAmBnL;EAC1C,MAAM6N,IAAYvO,EAAS2K;EAE3B,IAAI6D,IAAQ;EACZ,IAAIC,IAAS;EACb,IAAIxL,IAAMjD,EAASiM,oBAAoBvJ;EACvC,IAAIiF,IAAQ0G,GAAgBK;EAC5B,IAAIC,IAAWrK,GAAaK;EAE5B,MAAMwC,IAASnH,EAAS+H,aAAazB,GAAO;IAC1C,eAAMiC,CAAUqG,GAAKtG;MACnB,IAAIX,MAAU0G,GAAgBQ;QAC5B;;MAEF,MAAMxJ,INw4CZ,SAASnO,OAAOlH;QACd,MAAMG,IAAI,YAAYH,IAAI,IAAIoK,SAASpK,EAAEuH,QAAQvH,EAAEwH,YAAYxH,EAAEiG,cAAc,IAAImE,SAASpK;QAC5F,OAAOmR,GAAGvK,KAAKzG,GAAG;UAChB0G,QAAQ;UACRX,QAAQ/F,EAAE8F;;AAEd,OM94CqBiB,CAAO0X;MACtB,IAAIjH,MAAU0G,GAAgBK,SAAS;QACrCD;QACAE,KJyQsBG,EAC5BzJ,GACApC,GACAe,MAEOqB,EAAOjM,SAASkM,EAAWpV,WAC9BkV,uBAAuBC,GAAQpC,GAAKe,KACpCuB,uBAAuBF,GAAQpC,GAAKe,GIhRtB8K,CAAezJ,GAAQpC,GAAKkE,EAAOnD;QAC/C;AACF,aAAO,IAAI2D,MAAU0G,GAAgBU,WAAW;QAC9CJ,IAAWvJ,uBAAuBC,GAAQpC,GAAKkE,EAAOnD;QACtD,IAAIgL,oBAAoB;UACtBrH,IAAQ0G,GAAgBK;UACxB;AACF;QAEA;gBAWNtG,eAAe6G,UAAU5J,GAAgBiD;YACvC,MAAM4G,IAAatJ,gBAAgBP,GAAQpC,GAAKkE,EAAOnD,WAAU;YACjE,MAAMmL,IAAevJ,gBAAgBP,GAAQpC,GAAKkE,EAAOnD,WAAU;kBAC7DnC,QAAQ2I,IAAI,EAChB0E,KACEX,EAAU1D,SAASgC,GAASM,MAAM,MAAM7E,EAAME,MAAM0G,KACtDC,KACEZ,EAAU1D,SAASgC,GAASM,MAAM,MAAMhG,EAAOsB,KAAK0G;AAE1D,WAnBcF,CAAU5J,GAAQiD;AAC1B,UAAE,OAAOhB;UACP,KAAKoE,WAAWuC,aAAa3G;YAC3BtH,EAASqK,QAAQ/C;;AAErB;AACF;AACF;;EAcFc,eAAegH;IACb,MAAMR,IJ+GkBS,EAACpM,GAAoBe,MAC/CvN,OAAO;MACL2C,MAAMkM,EAAWrV;MACjBmR,WAAW,EACT;QACEnI,MAAMgK,EAAIG;QACVhK,MAAM8J,EAAWpQ;QACjBoG,OAAOiK,EAAYhQ;QACnBgG,KAAI;SAEN;QACEF,MAAMgK,EAAII;QACVjK,MAAM8J,EAAWpQ;QACjBoG,OAAOiK,EAAYhQ;QACnBgG,KAAI;;MAGRmI,aAAa,EACX0B,UAAUC,GAAKA,EAAIhC,SAChB8C,SAASd,GAAKe,GAAUf,EAAIhC,SAC5BoD,YAAYpB,GAAKe,GAAUf,EAAIhC;OInIxBoO,CAAapM,GAAKkE,EAAOnD;UAC/BuK,EAAU1D,SAASgC,GAASM,MAAM,MAAMhG,EAAOsB,KAAKmG;AAC5D;EAEAxG,eAAekH;IACb,MAAMV,IJsFqBW,EAC7BtM,GACAe,MAEAvN,OAAO;MACL2C,MAAMkM,EAAWpV;MACjBmN,OAAO+I,EAAW5R;MAClB6M,SAASA,QAAQ4B,GAAKe,GAAUf,EAAIhC;OI7FxBsO,CAAgBtM,GAAKkE,EAAOnD;UAClCuK,EAAU1D,SAASgC,GAASM,MAAM,MAAMhG,EAAOsB,KAAKmG;AAC5D;EAEAxG,eAAeoH;IACb,MAAMZ,IJ2FoBa,EAC5BxM,GACAe,MAEAvN,OAAO;MACL2C,MAAMkM,EAAWpV;MACjBmN,OAAO+I,EAAW5R;MAClB6M,SAASA,QAAQ4B,GAAKe,GAAU;OIlGpByL,CAAexM,GAAKkE,EAAOnD;UACjCuK,EAAU1D,SAASgC,GAASM,MAAM,MAAMhG,EAAOsB,KAAKmG;AAC5D;EAEA,SAASI;IACP,IAAIL,MAAarK,GAAaK,MAAM;MAClC,IAAIgK,IAAWrK,GAAaY;QAAMxC,EAAMqJ;;MACxC,IAAI4C,IAAWrK,GAAaoL;QAAUhN,EAAMsJ;;MAC5C/I,IAAMjD,EAASiM,oBAAoBvJ;MACnCiM,IAAWrK,GAAaK;MACxB,QAAO;AACT;MACE,QAAO;;AAEX;EAwFA,SAASgL;IACP,QAAQhI;KACN,KAAK0G,GAAgBK;MACnB,OAzFNtG,eAAewH;QACbnB,IAAS;QACTE,IAAWrK,GAAaK;cAElB4J,EAAU1D,SAASgC,GAASO,OAAOhF;UACvC,IAAIjB,EAAOgD,QAAQ;YACjBxC,IAAQ0G,GAAgBQ;YACxB;AACF,iBAAO,IAAIlH,MAAU0G,GAAgBK;YACnC;iBACK,IAAI3D,EAAKC,WAAW,GAAG;YAC5B,IAAIyD;cAEF9G,IACEgH,MAAarK,GAAaK,OACtB0J,GAAgBU,YAChBV,GAAgBQ;;cAGtBlH,IAAQ0G,GAAgBQ;;YAE1B;AACF,iBAAO;YACLG;kBACMI;YACN,OAAOrE,EAAKlN;AACd;;QAGF,OAAO8R;AACT,OA2DaC;;KACT,KAAKvB,GAAgBU;MACnB,OA3DN3G,eAAeyH;QACb,OAAOlI,MAAU0G,GAAgBU,cAAc5H,EAAOgD;UAmBpD,WAlByBoE,EAAU1D,SACjCgC,GAASQ,UACTjF;YACE,IAAIT,MAAU0G,GAAgBU;cAC5B,QAAO;mBACF,IAAIhE,EAAKC,UAAU,KAAK7D,EAAOvJ;cACpC,QAAO;;YAET,KAAKuJ,EAAOgD,QAAQ;oBACZmF;cACN,IAAIvE,EAAKC,UAAU;gBACjB,OAAOD,EAAKlN;;AAEhB;YACA,QAAO;;kBAKH0Q,EAAU1D,SAASgC,GAASS,QAAQlF;cACxC,IAAIT,MAAU0G,GAAgBU;gBAC5B;qBACK,KAAK5H,EAAOvJ,cAAcuJ,EAAOgD;gBACtC,OAAOY,EAAKlN;;;;;QAMpB,OAAO8R;AACT,OA2BaE;;KACT,KAAKxB,GAAgBQ;MACnB,OA3BNzG,eAAe0H;QACbvB,EAAU5C;QACV,IAAI6C,MFtLkB;UEuLpB;;cAEID,EAAU1D,SAASgC,GAASS,QAAQlF;UACxC,IACET,MAAU0G,GAAgBQ,UAC1B1H,EAAOvJ,cACNuJ,EAAOgD;YAER,OAAOY,EAAKlN;iBACP,KAAKsJ,EAAOgD,QAAQ;YACzBxC,IAAQ0G,GAAgBK;YACxB;AACF;;QAEF,OAAOiB;AACT,OASaG;;AAEb;EAEA,OAAO;IACL9F,SAAS;MACP;QACErC,IAAQ0G,GAAgBK;cAClBiB;QACNpB,EAAU5C;AACZ,QAAE,OAAOrE;QACP,KAAKoE,WAAWuC,aAAa3G;UAC3BtH,EAASqK,QAAQ/C;;AAErB,QAAC;QACCH,EAAOuC;AACT;AACD,MAZQ;IAaT,WAAMA;MACJ;QACE6E,EAAU5C;QACV,IAAIhE,MAAU0G,GAAgBQ,QAAQ;UACpClH,IAAQ0G,GAAgBQ;gBAClBW;AACR;QACAjB,EAAU5C;AACZ,QAAE,OAAOrE;QACP,KAAKoE,WAAWuC,aAAa3G;UAC3BtH,EAASqK,QAAQ/C;;AAErB,QAAC;QACCH,EAAOuC;AACT;AACF;;AAEJ;;AA6CO,SAASqG,UAAUjE;EACxB,OA5CK,SAASkE,kBACdtP,GACAV;IAEA,MAAM0M,IAAS,IAAI7H,IAAI7E,EAASyM;IAChC,MAAMwD,IAAU,IAAIlD;IACpB,MAAMwB,IAAYvO,EAAS2K;IAE3B,KAAK,MAAMrE,KAASoG;MAClBuD,EAAQxY,IAAI6O,GAAOgI,0BAA0BhI,GAAO5F,GAAQV;;IAG9DuO,EAAU1D,SAASgC,GAASS,QAAQvC;MAClC;QACE,MAAM2B,IAAS,IAAI7H,IAAI7E,EAASyM;QAChC,KAAK,MAAMnG,KAASoG;UAClB,KAAKuD,EAAQ9K,IAAImB;YACf2J,EAAQxY,IACN6O,GACAgI,0BAA0BhI,GAAO5F,GAAQV;;;QAI/C,KAAK,OAAOsG,GAAO4J,MAAWD;UAC5B,KAAKvD,EAAOvH,IAAImB,IAAQ;YACtB2J,EAAQzG,OAAOlD;YACf4J,EAAOxG;AACT;;QAEF,OAAOqB,EAAKlN;AACd,QAAE,OAAOyJ;QACP,KAAKoE,WAAWuC,aAAa3G;UAC3BtH,EAASqK,QAAQ/C;;AAErB;;IAGF,OAAOc;MACLmG,EAAU5C;YACJ9J,QAAQ2I,IAAI,KAAIyF,EAAQE,WAAU7X,IAAI4X,KAAUA,EAAOxG;;AAEjE,GAGSsG,CACL;IACE/W,MAAM6S,EAAQ7S;IACdG,MAAM0S,EAAQ1S;IACdkT,UAAUR,EAAQQ;IAClBnK,UAAU2J,EAAQ3J,YAAYiI,GAAgBjI;IAC9CpG,MAAM+P,EAAQ/P;IACd8H,UAAUiI,EAAQjI,YAAY;IAC9B3E,KAAK4M,EAAQ5M,OAAO,CAAA;IACpB+B,KAAK6K,EAAQ7K,OAAO;KAEtBmJ;AAEJ;;","x_google_ignoreList":[0]}
|
package/package.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dnssd-advertise",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A Bonjour DNS-SD service announcer via mDNS on UDP",
|
|
5
|
+
"author": "Phil Pluckthun <phil@kitten.sh>",
|
|
6
|
+
"source": "./src/index.ts",
|
|
7
|
+
"main": "./dist/dnssd-advertise",
|
|
8
|
+
"module": "./dist/dnssd-advertise.mjs",
|
|
9
|
+
"types": "./dist/dnssd-advertise.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"LICENSE.md",
|
|
12
|
+
"README.md",
|
|
13
|
+
"CHANGELOG.md",
|
|
14
|
+
"dist/"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"test": "vitest test",
|
|
18
|
+
"test:run": "vitest test --run",
|
|
19
|
+
"prebench": "pnpm run build",
|
|
20
|
+
"bench": "vitest bench",
|
|
21
|
+
"build": "rollup -c ./scripts/rollup.config.mjs",
|
|
22
|
+
"postbuild": "tsc --lib esnext,dom,dom.iterable --target esnext --module nodenext --moduleResolution nodenext --noEmit ./dist/dnssd-advertise.d.ts",
|
|
23
|
+
"check": "tsc --noEmit",
|
|
24
|
+
"clean": "rimraf dist node_modules/.cache",
|
|
25
|
+
"prepublishOnly": "run-s clean build check test:run",
|
|
26
|
+
"prepare": "node ./scripts/prepare.js || true",
|
|
27
|
+
"changeset:version": "changeset version && pnpm install --lockfile-only",
|
|
28
|
+
"changeset:publish": "changeset publish"
|
|
29
|
+
},
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/dnssd-advertise.d.ts",
|
|
33
|
+
"import": "./dist/dnssd-advertise.mjs",
|
|
34
|
+
"require": "./dist/dnssd-advertise.js",
|
|
35
|
+
"source": "./src/index.ts"
|
|
36
|
+
},
|
|
37
|
+
"./package.json": "./package.json"
|
|
38
|
+
},
|
|
39
|
+
"prettier": {
|
|
40
|
+
"singleQuote": true,
|
|
41
|
+
"arrowParens": "avoid",
|
|
42
|
+
"trailingComma": "es5"
|
|
43
|
+
},
|
|
44
|
+
"lint-staged": {
|
|
45
|
+
"*.{js,ts,json,md}": "prettier --write"
|
|
46
|
+
},
|
|
47
|
+
"keywords": [
|
|
48
|
+
"mdns",
|
|
49
|
+
"dnssd",
|
|
50
|
+
"dns-sd",
|
|
51
|
+
"bonjour",
|
|
52
|
+
"advertise",
|
|
53
|
+
"announce"
|
|
54
|
+
],
|
|
55
|
+
"license": "MIT",
|
|
56
|
+
"repository": "https://github.com/kitten/dnssd-advertise",
|
|
57
|
+
"bugs": {
|
|
58
|
+
"url": "https://github.com/kitten/dnssd-advertise/issues"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@babel/plugin-transform-typescript": "^7.28.5",
|
|
62
|
+
"@changesets/cli": "^2.29.7",
|
|
63
|
+
"@changesets/get-github-info": "^0.6.0",
|
|
64
|
+
"@rollup/plugin-babel": "^6.1.0",
|
|
65
|
+
"@rollup/plugin-commonjs": "^29.0.0",
|
|
66
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
67
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
68
|
+
"@types/node": "^25.0.3",
|
|
69
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
70
|
+
"dns-message": "^1.0.3",
|
|
71
|
+
"dotenv": "^17.2.3",
|
|
72
|
+
"lint-staged": "^16.2.6",
|
|
73
|
+
"npm-run-all": "^4.1.5",
|
|
74
|
+
"prettier": "^3.6.2",
|
|
75
|
+
"rimraf": "^6.1.0",
|
|
76
|
+
"rollup": "^4.53.3",
|
|
77
|
+
"rollup-plugin-cjs-check": "^1.0.3",
|
|
78
|
+
"rollup-plugin-dts": "^6.2.3",
|
|
79
|
+
"typescript": "^5.9.3",
|
|
80
|
+
"vitest": "^4.0.10"
|
|
81
|
+
},
|
|
82
|
+
"publishConfig": {
|
|
83
|
+
"access": "public"
|
|
84
|
+
}
|
|
85
|
+
}
|