helia 4.1.0-9ac5909 → 4.1.0-9c8a2c0
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/dist/index.min.js +17 -17
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +7 -6
- package/src/version.ts +1 -1
package/dist/index.min.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Helia = factory()}(typeof self !== 'undefined' ? self : this, function () {
|
|
2
|
-
"use strict";var Helia=(()=>{var ex=Object.create;var Ic=Object.defineProperty;var tx=Object.getOwnPropertyDescriptor;var rx=Object.getOwnPropertyNames;var nx=Object.getPrototypeOf,ox=Object.prototype.hasOwnProperty;var De=(r,e)=>()=>(r&&(e=r(r=0)),e);var le=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ge=(r,e)=>{for(var t in e)Ic(r,t,{get:e[t],enumerable:!0})},Z3=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of rx(e))!ox.call(r,o)&&o!==t&&Ic(r,o,{get:()=>e[o],enumerable:!(n=tx(e,o))||n.enumerable});return r};var Ne=(r,e,t)=>(t=r!=null?ex(nx(r)):{},Z3(e||!r||!r.__esModule?Ic(t,"default",{value:r,enumerable:!0}):t,r)),Dc=r=>Z3(Ic({},"__esModule",{value:!0}),r);var x4=le((zP,E4)=>{E4.exports=b4;var w4=128,qx=127,Wx=~qx,zx=Math.pow(2,31);function b4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=zx;)e[t++]=r&255|w4,r/=128;for(;r&Wx;)e[t++]=r&255|w4,r>>>=7;return e[t]=r|0,b4.bytes=t-n+1,e}});var S4=le((GP,_4)=>{_4.exports=Bf;var Gx=128,v4=127;function Bf(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Bf.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&v4)<<o:(i&v4)*Math.pow(2,o),o+=7}while(i>=Gx);return Bf.bytes=s-n,t}});var A4=le((YP,R4)=>{var Yx=Math.pow(2,7),Qx=Math.pow(2,14),Xx=Math.pow(2,21),jx=Math.pow(2,28),Zx=Math.pow(2,35),Jx=Math.pow(2,42),ev=Math.pow(2,49),tv=Math.pow(2,56),rv=Math.pow(2,63);R4.exports=function(r){return r<Yx?1:r<Qx?2:r<Xx?3:r<jx?4:r<Zx?5:r<Jx?6:r<ev?7:r<tv?8:r<rv?9:10}});var D4=le((QP,I4)=>{I4.exports={encode:x4(),decode:S4(),encodingLength:A4()}});var C4=le((XP,k4)=>{"use strict";var T4=D4();k4.exports=r=>{if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=T4.decode(r);e.push(t),r=r.slice(T4.decode.bytes)}return e}});var P4=le((jP,N4)=>{var $s=1e3,Hs=$s*60,qs=Hs*60,Yo=qs*24,nv=Yo*7,ov=Yo*365.25;N4.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return sv(r);if(t==="number"&&isFinite(r))return e.long?av(r):iv(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function sv(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*ov;case"weeks":case"week":case"w":return t*nv;case"days":case"day":case"d":return t*Yo;case"hours":case"hour":case"hrs":case"hr":case"h":return t*qs;case"minutes":case"minute":case"mins":case"min":case"m":return t*Hs;case"seconds":case"second":case"secs":case"sec":case"s":return t*$s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function iv(r){var e=Math.abs(r);return e>=Yo?Math.round(r/Yo)+"d":e>=qs?Math.round(r/qs)+"h":e>=Hs?Math.round(r/Hs)+"m":e>=$s?Math.round(r/$s)+"s":r+"ms"}function av(r){var e=Math.abs(r);return e>=Yo?Nc(r,e,Yo,"day"):e>=qs?Nc(r,e,qs,"hour"):e>=Hs?Nc(r,e,Hs,"minute"):e>=$s?Nc(r,e,$s,"second"):r+" ms"}function Nc(r,e,t,n){var o=e>=t*1.5;return Math.round(r/t)+" "+n+(o?"s":"")}});var L4=le((ZP,O4)=>{function cv(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=P4(),t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,f=null,m,h;function p(...y){if(!p.enabled)return;let w=p,E=Number(new Date),b=E-(u||E);w.diff=b,w.prev=u,w.curr=E,u=E,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let S=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(A,D)=>{if(A==="%%")return"%";S++;let _=t.formatters[D];if(typeof _=="function"){let k=y[S];A=_.call(w,k),y.splice(S,1),S--}return A}),t.formatArgs.call(w,y),(w.log||t.log).apply(w,y)}return p.namespace=d,p.useColors=t.useColors(),p.color=t.selectColor(d),p.extend=n,p.destroy=t.destroy,Object.defineProperty(p,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(m!==t.namespaces&&(m=t.namespaces,h=t.enabled(d)),h),set:y=>{f=y}}),typeof t.init=="function"&&t.init(p),p}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),m=f.length;for(u=0;u<m;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.slice(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}O4.exports=cv});var B4=le((Qt,Pc)=>{Qt.formatArgs=uv;Qt.save=dv;Qt.load=fv;Qt.useColors=lv;Qt.storage=hv();Qt.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Qt.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function lv(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function uv(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Pc.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}Qt.log=console.debug||console.log||(()=>{});function dv(r){try{r?Qt.storage.setItem("debug",r):Qt.storage.removeItem("debug")}catch{}}function fv(){let r;try{r=Qt.storage.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function hv(){try{return localStorage}catch{}}Pc.exports=L4()(Qt);var{formatters:pv}=Pc.exports;pv.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var F4=le((pO,U4)=>{U4.exports=Ff;var M4=128,wv=127,bv=~wv,Ev=Math.pow(2,31);function Ff(r,e,t){if(Number.MAX_SAFE_INTEGER&&r>Number.MAX_SAFE_INTEGER)throw Ff.bytes=0,new RangeError("Could not encode varint");e=e||[],t=t||0;for(var n=t;r>=Ev;)e[t++]=r&255|M4,r/=128;for(;r&bv;)e[t++]=r&255|M4,r>>>=7;return e[t]=r|0,Ff.bytes=t-n+1,e}});var $4=le((mO,K4)=>{K4.exports=Vf;var xv=128,V4=127;function Vf(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a||o>49)throw Vf.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&V4)<<o:(i&V4)*Math.pow(2,o),o+=7}while(i>=xv);return Vf.bytes=s-n,t}});var q4=le((gO,H4)=>{var vv=Math.pow(2,7),_v=Math.pow(2,14),Sv=Math.pow(2,21),Rv=Math.pow(2,28),Av=Math.pow(2,35),Iv=Math.pow(2,42),Dv=Math.pow(2,49),Tv=Math.pow(2,56),kv=Math.pow(2,63);H4.exports=function(r){return r<vv?1:r<_v?2:r<Sv?3:r<Rv?4:r<Av?5:r<Iv?6:r<Dv?7:r<Tv?8:r<kv?9:10}});var z4=le((yO,W4)=>{W4.exports={encode:F4(),decode:$4(),encodingLength:q4()}});var Zo=le((wB,g8)=>{"use strict";function m8(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function h_(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return m8(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),m8(new o,t)}}g8.exports=h_});var E8=le((UB,b8)=>{"use strict";b8.exports=function(){return Date.now()}});var v8=le((FB,x8)=>{"use strict";var Qc=E8(),wh=class{constructor(e,t,n){let o=this;this._started=Qc(),this._rescheduled=0,this._scheduled=t,this._args=n,this._triggered=!1,this._timerWrapper=()=>{o._rescheduled>0?(o._scheduled=o._rescheduled-(Qc()-o._started),o._schedule(o._scheduled)):(o._triggered=!0,e.apply(null,o._args))},this._timer=setTimeout(this._timerWrapper,t)}reschedule(e){e||(e=this._scheduled);let t=Qc();t+e-(this._started+this._scheduled)<0?(clearTimeout(this._timer),this._schedule(e)):this._triggered?this._schedule(e):(this._started=t,this._rescheduled=e)}_schedule(e){this._triggered=!1,this._started=Qc(),this._rescheduled=0,this._scheduled=e,this._timer=setTimeout(this._timerWrapper,e)}clear(){clearTimeout(this._timer)}};function R_(){if(typeof arguments[0]!="function")throw new Error("callback needed");if(typeof arguments[1]!="number")throw new Error("timeout needed");let r;if(arguments.length>0){r=new Array(arguments.length-2);for(var e=0;e<r.length;e++)r[e]=arguments[e+2]}return new wh(arguments[0],arguments[1],r)}x8.exports=R_});var R8=le((VB,S8)=>{"use strict";var{AbortController:A_}=globalThis,_8=v8(),bh=class r extends A_{constructor(e){super(),this._ms=e,this._timer=_8(()=>this.abort(),e),Object.setPrototypeOf(this,r.prototype)}abort(){return this._timer.clear(),super.abort()}clear(){this._timer.clear()}reset(){this._timer.clear(),this._timer=_8(()=>this.abort(),this._ms)}};S8.exports={TimeoutController:bh}});var Jc=le((jB,_h)=>{"use strict";var Ys=typeof Reflect=="object"?Reflect:null,C8=Ys&&typeof Ys.apply=="function"?Ys.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},jc;Ys&&typeof Ys.ownKeys=="function"?jc=Ys.ownKeys:Object.getOwnPropertySymbols?jc=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:jc=function(e){return Object.getOwnPropertyNames(e)};function k_(r){console&&console.warn&&console.warn(r)}var P8=Number.isNaN||function(e){return e!==e};function Pe(){Pe.init.call(this)}_h.exports=Pe;_h.exports.once=O_;Pe.EventEmitter=Pe;Pe.prototype._events=void 0;Pe.prototype._eventsCount=0;Pe.prototype._maxListeners=void 0;var N8=10;function Zc(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(Pe,"defaultMaxListeners",{enumerable:!0,get:function(){return N8},set:function(r){if(typeof r!="number"||r<0||P8(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");N8=r}});Pe.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};Pe.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||P8(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function O8(r){return r._maxListeners===void 0?Pe.defaultMaxListeners:r._maxListeners}Pe.prototype.getMaxListeners=function(){return O8(this)};Pe.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o=e==="error",s=this._events;if(s!==void 0)o=o&&s.error===void 0;else if(!o)return!1;if(o){var i;if(t.length>0&&(i=t[0]),i instanceof Error)throw i;var a=new Error("Unhandled error."+(i?" ("+i.message+")":""));throw a.context=i,a}var c=s[e];if(c===void 0)return!1;if(typeof c=="function")C8(c,this,t);else for(var l=c.length,d=F8(c,l),n=0;n<l;++n)C8(d[n],this,t);return!0};function L8(r,e,t,n){var o,s,i;if(Zc(t),s=r._events,s===void 0?(s=r._events=Object.create(null),r._eventsCount=0):(s.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),s=r._events),i=s[e]),i===void 0)i=s[e]=t,++r._eventsCount;else if(typeof i=="function"?i=s[e]=n?[t,i]:[i,t]:n?i.unshift(t):i.push(t),o=O8(r),o>0&&i.length>o&&!i.warned){i.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=r,a.type=e,a.count=i.length,k_(a)}return r}Pe.prototype.addListener=function(e,t){return L8(this,e,t,!1)};Pe.prototype.on=Pe.prototype.addListener;Pe.prototype.prependListener=function(e,t){return L8(this,e,t,!0)};function C_(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function B8(r,e,t){var n={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},o=C_.bind(n);return o.listener=t,n.wrapFn=o,o}Pe.prototype.once=function(e,t){return Zc(t),this.on(e,B8(this,e,t)),this};Pe.prototype.prependOnceListener=function(e,t){return Zc(t),this.prependListener(e,B8(this,e,t)),this};Pe.prototype.removeListener=function(e,t){var n,o,s,i,a;if(Zc(t),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(s=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,s=i;break}if(s<0)return this;s===0?n.shift():N_(n,s),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};Pe.prototype.off=Pe.prototype.removeListener;Pe.prototype.removeAllListeners=function(e){var t,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var s=Object.keys(n),i;for(o=0;o<s.length;++o)i=s[o],i!=="removeListener"&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=n[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(o=t.length-1;o>=0;o--)this.removeListener(e,t[o]);return this};function M8(r,e,t){var n=r._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?t?[o.listener||o]:[o]:t?P_(o):F8(o,o.length)}Pe.prototype.listeners=function(e){return M8(this,e,!0)};Pe.prototype.rawListeners=function(e){return M8(this,e,!1)};Pe.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):U8.call(r,e)};Pe.prototype.listenerCount=U8;function U8(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}Pe.prototype.eventNames=function(){return this._eventsCount>0?jc(this._events):[]};function F8(r,e){for(var t=new Array(e),n=0;n<e;++n)t[n]=r[n];return t}function N_(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop()}function P_(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function O_(r,e){return new Promise(function(t,n){function o(i){r.removeListener(e,s),n(i)}function s(){typeof r.removeListener=="function"&&r.removeListener("error",o),t([].slice.call(arguments))}V8(r,e,s,{once:!0}),e!=="error"&&L_(r,o,{once:!0})})}function L_(r,e,t){typeof r.on=="function"&&V8(r,"error",e,t)}function V8(r,e,t,n){if(typeof r.on=="function")n.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function o(s){n.once&&r.removeEventListener(e,o),t(s)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});var z8=le((q8,W8)=>{"use strict";var B_=Math.exp;q8=W8.exports=function(e){if(typeof e!="number")throw new Error("must provide a timespan to the moving average constructor");if(e<=0)throw new Error("must provide a timespan > 0 to the moving average constructor");let t,n=0,o=0,s=0,i,a={};function c(l,d){return 1-B_(-(l-d)/e)}return a.push=function(d,u){if(i){let f=c(d,i),m=u-t,h=f*m;t=f*u+(1-f)*t,n=(1-f)*(n+m*h),o=Math.sqrt(n),s=t+f*m}else t=u;i=d},a.movingAverage=function(){return t},a.variance=function(){return n},a.deviation=function(){return o},a.forecast=function(){return s},a}});var t6=le(ui=>{"use strict";var _R="[object ArrayBuffer]",In=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===_R}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let s=0;s<n.length;s++)if(n[s]!==o[s])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},u0="string",SR=/^[0-9a-f]+$/i,RR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,AR=/^[a-zA-Z0-9-_]+$/,Dl=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=In.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},wr=class{static toString(e,t=!1){let n=In.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},Tl=class r{static isHex(e){return typeof e===u0&&SR.test(e)}static isBase64(e){return typeof e===u0&&RR.test(e)}static isBase64Url(e){return typeof e===u0&&AR.test(e)}static ToString(e,t="utf8"){let n=In.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return wr.toString(n,!0);case"utf16":case"utf16be":return wr.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return wr.fromString(e,!0);case"utf16":case"utf16be":return wr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=In.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return Dl.fromString(e);case"utf16":case"utf16be":return wr.fromString(e);case"utf16le":case"usc2":return wr.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return Dl.toString(e);case"utf16":case"utf16be":return wr.toString(e);case"utf16le":case"usc2":return wr.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=In.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=In.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return wr.toString(e,t)}static FromUtf16String(e,t=!1){return wr.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};Tl.DEFAULT_UTF8_ENCODING="utf8";function IR(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function DR(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function TR(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}ui.BufferSourceConverter=In;ui.Convert=Tl;ui.assign=IR;ui.combine=DR;ui.isEqual=TR});var bu=le((l$,T0)=>{var c$=function(){typeof T0<"u"&&(T0.exports=p);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(_){var k=_-_%1;return k==0&&(_<0||_===0&&1/_!=1/0)?-0:k},d=p.prototype,u=(p.fromDate=function(_){return new p(+_)},p.fromInt64BE=S(0,1,2,3,0,4),p.fromInt64LE=S(3,2,1,0,4,0),p.fromString=function(N){var k,P=new p,N=(N+="").replace(/^\s*[+\-]?\d+/,function(F){var F=+F,Y=1970+(F-1970)%400;return P.year=F-Y,Y}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(O,F,Y){return F<0&&(Y*=-1),k=6e4*(60*+F+ +Y),""}).replace(/\.\d+$/,function(O){return P.nano=+(O+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,P.time=k=Date.UTC.apply(Date,N)-(k||0),isNaN(k))throw new TypeError("Invalid Date");return y(P)},p.fromTimeT=function(_){return E(_,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(_){return this.nano+=+_||0,this},d.getNano=function(){var _=y(this);return(_.time%1e3*a+ +_.nano+1e9)%1e9},d.getTimeT=function(){var k=y(this),_=Math.floor(k.time/1e3),k=k.year;return k&&(_+=k*t*r/e),_},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(y(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(_){var k=this,P=k.toDate(),N={H:function(){return A(P.getUTCHours())},L:function(){return D(P.getUTCMilliseconds(),3)},M:function(){return A(P.getUTCMinutes())},N:function(){return D(k.getNano(),9)},S:function(){return A(P.getUTCSeconds())},Y:function(){var O=k.getYear();return 999999<O?"+"+O:9999<O?"+"+D(O,6):0<=O?D(O,4):-999999<=O?"-"+D(-O,6):O},a:function(){return m[P.getUTCDay()]},b:function(){return f[P.getUTCMonth()]},d:function(){return A(P.getUTCDate())},e:function(){return function(O){return(9<O?"":" ")+(0|O)}(P.getUTCDate())},m:function(){return A(P.getUTCMonth()+1)}};return function O(F){return F.replace(/%./g,function(Y){var C=Y[1],I=h[C],C=N[C];return I?O(I):C?C():Y})}(_||u)},d.writeInt64BE=b(0,1,2,3,0,4),d.writeInt64LE=b(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],h={"%":"%",F:"%Y-%m-%d",n:`
|
|
3
|
-
`,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return p;function p(_,k,P){var N=this;if(!(N instanceof p))return new p(_,k,P);N.time=+_||0,N.nano=+k||0,N.year=+P||0,y(N)}function y(_){var k,P,N,O=_.year,F=_.time,Y=_.nano,I=((Y<0||a<=Y)&&(Y-=(P=Math.floor(Y/a))*a,F+=P,P=1),O%e);return(F<-s||s<F||I)&&((k=l(F/o))&&(O+=k*e,F-=k*o),(N=w(F)).setUTCFullYear(I+N.getUTCFullYear()),N=(F=+N)+(k=l((O-=I)/e))*o,k&&-s<=N&&N<=s&&(O-=k*e,F=N),P=1),P&&(_.year=O,_.time=F,_.nano=Y),_}function w(_){var k=new Date(0);return k.setTime(_),k}function E(O,N){O=+O||0;var P=l((N=(N|0)*i)/n)+l(O/n),N=N%n+O%n,O=l(N/n);return O&&(P+=O,N-=O*n),new p(1e3*N,0,P*e)}function b(_,k,P,N,O,F){return function(I,C){var T=y(this);I=I||new Array(8),R(I,C|=0);var v=Math.floor(T.time/1e3),T=T.year*(t*r/e),$=l(T/i)+l(v/i),T=T%i+v%i,v=Math.floor(T/i);return v&&($+=v,T-=v*i),Y(I,C+O,$),Y(I,C+F,T),I};function Y(I,C,$){I[C+_]=$>>24&255,I[C+k]=$>>16&255,I[C+P]=$>>8&255,I[C+N]=255&$}}function S(_,k,P,N,O,F){return function(I,C){R(I,C|=0);var $=Y(I,C+O);return E(Y(I,C+F),$)};function Y(I,C){return 16777216*I[C+_]+(I[C+k]<<16|I[C+P]<<8|I[C+N])}}function R(_,k){if(_=_&&_.length,_==null)throw new TypeError("Invalid Buffer");if(_<k+8)throw new RangeError("Out of range")}function A(_){return(9<_?"":"0")+(0|_)}function D(_,k){return(c+(0|_)).substr(-k)}}()});var S7=le((qH,F0)=>{"use strict";var zA=Object.prototype.hasOwnProperty,Lt="~";function Va(){}Object.create&&(Va.prototype=Object.create(null),new Va().__proto__||(Lt=!1));function GA(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function _7(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new GA(t,n||r,o),i=Lt?Lt+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function Mu(r,e){--r._eventsCount===0?r._events=new Va:delete r._events[e]}function Nt(){this._events=new Va,this._eventsCount=0}Nt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)zA.call(t,n)&&e.push(Lt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Nt.prototype.listeners=function(e){var t=Lt?Lt+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Nt.prototype.listenerCount=function(e){var t=Lt?Lt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Nt.prototype.emit=function(e,t,n,o,s,i){var a=Lt?Lt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,m;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(m=1,d=new Array(l-1);m<l;m++)d[m-1]=arguments[m];c[u].fn.apply(c[u].context,d)}}return!0};Nt.prototype.on=function(e,t,n){return _7(this,e,t,n,!1)};Nt.prototype.once=function(e,t,n){return _7(this,e,t,n,!0)};Nt.prototype.removeListener=function(e,t,n,o){var s=Lt?Lt+e:e;if(!this._events[s])return this;if(!t)return Mu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Mu(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:Mu(this,s)}return this};Nt.prototype.removeAllListeners=function(e){var t;return e?(t=Lt?Lt+e:e,this._events[t]&&Mu(this,t)):(this._events=new Va,this._eventsCount=0),this};Nt.prototype.off=Nt.prototype.removeListener;Nt.prototype.addListener=Nt.prototype.on;Nt.prefixed=Lt;Nt.EventEmitter=Nt;typeof F0<"u"&&(F0.exports=Nt)});var X0=le((cz,L7)=>{L7.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var jg=le(Za=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,m,h;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}h=e(c),m=h[0],d=h[1],c=c.substring(d),l.push(m)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,m;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),m=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===m)throw new Error("empty octet");return[f,u]},r=function(){function c(l,d){var u,f,m,h;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(h=l.split("/",2),l=h[0],d=h[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(p){throw u=p,new Error("Invalid mask: "+d)}for(f=m=32;m>=0;f=--m)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(p){throw u=p,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(i(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),Za.ip2long=i,Za.long2ip=a,Za.Netmask=r}).call(Za)});var Q9=le((uee,Y9)=>{function WD(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}Y9.exports=WD});var Cy=le((goe,ky)=>{"use strict";ky.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var My=le((Ly,By)=>{"use strict";var gd=Cy(),{hasOwnProperty:Py}=Object.prototype,{propertyIsEnumerable:bT}=Object,Vi=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),ET=Ly,Ny={concatArrays:!1,ignoreUndefined:!1},yd=r=>{let e=[];for(let t in r)Py.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)bT.call(r,n)&&e.push(n)}return e};function Ki(r){return Array.isArray(r)?xT(r):gd(r)?vT(r):r}function xT(r){let e=r.slice(0,0);return yd(r).forEach(t=>{Vi(e,t,Ki(r[t]))}),e}function vT(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return yd(r).forEach(t=>{Vi(e,t,Ki(r[t]))}),e}var Oy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Vi(r,o,Sp(r[o],e[o],n)):Vi(r,o,Ki(e[o])))}),r),_T=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(s=>{let i=[];for(let a=0;a<s.length;a++)Py.call(s,a)&&(i.push(String(a)),s===r?Vi(n,o++,s[a]):Vi(n,o++,Ki(s[a])));n=Oy(n,s,yd(s).filter(a=>!i.includes(a)),t)}),n};function Sp(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?_T(r,e,t):!gd(e)||!gd(r)?Ki(e):Oy(r,e,yd(e),t)}By.exports=function(...r){let e=Sp(Ki(Ny),this!==ET&&this||{},Ny),t={_:{}};for(let n of r)if(n!==void 0){if(!gd(n))throw new TypeError("`"+n+"` is not an Option Object");t=Sp(t,{_:n},e)}return t._}});var Vy=le((woe,Fy)=>{"use strict";function ST(r){return r>=55296&&r<=56319}function RT(r){return r>=56320&&r<=57343}Fy.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],ST(i)&&RT(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var $y=le((boe,Ky)=>{"use strict";function AT(r){return r>=55296&&r<=56319}function IT(r){return r>=56320&&r<=57343}Ky.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),IT(o)?s!=null&&AT(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var qy=le((Eoe,Hy)=>{"use strict";var DT=Vy(),TT=$y();Hy.exports=DT.bind(null,TT)});var Gy=le((xoe,zy)=>{"use strict";var kT=qy(),CT=/[\/\?<>\\:\*\|"]/g,NT=/[\x00-\x1f\x80-\x9f]/g,PT=/^\.+$/,OT=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,LT=/[\. ]+$/;function Wy(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(CT,e).replace(NT,e).replace(PT,e).replace(OT,e).replace(LT,e);return kT(t,255)}zy.exports=function(r,e){var t=e&&e.replacement||"",n=Wy(r,t);return t===""?n:Wy(n,"")}});var vw=le((Nie,xw)=>{"use strict";function Ek(r){if(r.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),t=0;t<e.length;t++)e[t]=255;for(var n=0;n<r.length;n++){var o=r.charAt(n),s=o.charCodeAt(0);if(e[s]!==255)throw new TypeError(o+" is ambiguous");e[s]=n}var i=r.length,a=r.charAt(0),c=Math.log(i)/Math.log(256),l=Math.log(256)/Math.log(i);function d(m){if(m instanceof Uint8Array||(ArrayBuffer.isView(m)?m=new Uint8Array(m.buffer,m.byteOffset,m.byteLength):Array.isArray(m)&&(m=Uint8Array.from(m))),!(m instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(m.length===0)return"";for(var h=0,p=0,y=0,w=m.length;y!==w&&m[y]===0;)y++,h++;for(var E=(w-y)*l+1>>>0,b=new Uint8Array(E);y!==w;){for(var S=m[y],R=0,A=E-1;(S!==0||R<p)&&A!==-1;A--,R++)S+=256*b[A]>>>0,b[A]=S%i>>>0,S=S/i>>>0;if(S!==0)throw new Error("Non-zero carry");p=R,y++}for(var D=E-p;D!==E&&b[D]===0;)D++;for(var _=a.repeat(h);D<E;++D)_+=r.charAt(b[D]);return _}function u(m){if(typeof m!="string")throw new TypeError("Expected String");if(m.length===0)return new Uint8Array;var h=0;if(m[h]!==" "){for(var p=0,y=0;m[h]===a;)p++,h++;for(var w=(m.length-h)*c+1>>>0,E=new Uint8Array(w);m[h];){var b=e[m.charCodeAt(h)];if(b===255)return;for(var S=0,R=w-1;(b!==0||S<y)&&R!==-1;R--,S++)b+=i*E[R]>>>0,E[R]=b%256>>>0,b=b/256>>>0;if(b!==0)throw new Error("Non-zero carry");y=S,h++}if(m[h]!==" "){for(var A=w-y;A!==w&&E[A]===0;)A++;for(var D=new Uint8Array(p+(w-A)),_=p;A!==w;)D[_++]=E[A++];return D}}}function f(m){var h=u(m);if(h)return h;throw new Error("Non-base"+i+" character")}return{encode:d,decodeUnsafe:u,decode:f}}xw.exports=Ek});var Cd=le((Pie,_w)=>{"use strict";var xk=new TextDecoder,vk=r=>xk.decode(r),_k=new TextEncoder,Sk=r=>_k.encode(r);function Rk(r,e){let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}_w.exports={decodeText:vk,encodeText:Sk,concat:Rk}});var Rw=le((Oie,Sw)=>{"use strict";var{encodeText:Ak}=Cd(),qp=class{constructor(e,t,n,o){this.name=e,this.code=t,this.codeBuf=Ak(this.code),this.alphabet=o,this.codec=n(o)}encode(e){return this.codec.encode(e)}decode(e){for(let t of e)if(this.alphabet&&this.alphabet.indexOf(t)<0)throw new Error(`invalid character '${t}' in '${e}'`);return this.codec.decode(e)}};Sw.exports=qp});var Iw=le((Lie,Aw)=>{"use strict";var Ik=(r,e,t)=>{let n={};for(let l=0;l<e.length;++l)n[e[l]]=l;let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=n[r[l]];if(d===void 0)throw new SyntaxError("Invalid character "+r[l]);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||255&a<<8-i)throw new SyntaxError("Unexpected end of data");return s},Dk=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},Tk=r=>e=>({encode(t){return Dk(t,e,r)},decode(t){return Ik(t,e,r)}});Aw.exports={rfc4648:Tk}});var Cw=le((Bie,kw)=>{"use strict";var yc=vw(),kk=Rw(),{rfc4648:_t}=Iw(),{decodeText:Ck,encodeText:Nk}=Cd(),Pk=()=>({encode:Ck,decode:Nk}),Dw=[["identity","\0",Pk,""],["base2","0",_t(1),"01"],["base8","7",_t(3),"01234567"],["base10","9",yc,"0123456789"],["base16","f",_t(4),"0123456789abcdef"],["base16upper","F",_t(4),"0123456789ABCDEF"],["base32hex","v",_t(5),"0123456789abcdefghijklmnopqrstuv"],["base32hexupper","V",_t(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV"],["base32hexpad","t",_t(5),"0123456789abcdefghijklmnopqrstuv="],["base32hexpadupper","T",_t(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV="],["base32","b",_t(5),"abcdefghijklmnopqrstuvwxyz234567"],["base32upper","B",_t(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"],["base32pad","c",_t(5),"abcdefghijklmnopqrstuvwxyz234567="],["base32padupper","C",_t(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567="],["base32z","h",_t(5),"ybndrfg8ejkmcpqxot1uwisza345h769"],["base36","k",yc,"0123456789abcdefghijklmnopqrstuvwxyz"],["base36upper","K",yc,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"],["base58btc","z",yc,"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"],["base58flickr","Z",yc,"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"],["base64","m",_t(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"],["base64pad","M",_t(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="],["base64url","u",_t(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"],["base64urlpad","U",_t(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="]],Tw=Dw.reduce((r,e)=>(r[e[0]]=new kk(e[0],e[1],e[2],e[3]),r),{}),Ok=Dw.reduce((r,e)=>(r[e[1]]=Tw[e[0]],r),{});kw.exports={names:Tw,codes:Ok}});var Ow=le((zn,Pw)=>{"use strict";var zi=Cw(),{encodeText:Lk,decodeText:Nd,concat:Nw}=Cd();function Bk(r,e){if(!e)throw new Error("requires an encoded Uint8Array");let{name:t,codeBuf:n}=Cs(r);return Vk(t,e),Nw([n,e],n.length+e.length)}function Mk(r,e){let t=Cs(r),n=Lk(t.encode(e));return Nw([t.codeBuf,n],t.codeBuf.length+n.length)}function Uk(r){r instanceof Uint8Array&&(r=Nd(r));let e=r[0];return["f","F","v","V","t","T","b","B","c","C","h","k","K"].includes(e)&&(r=r.toLowerCase()),Cs(r[0]).decode(r.substring(1))}function Fk(r){if(r instanceof Uint8Array&&(r=Nd(r)),Object.prototype.toString.call(r)!=="[object String]")return!1;try{return Cs(r[0]).name}catch{return!1}}function Vk(r,e){Cs(r).decode(Nd(e))}function Cs(r){if(Object.prototype.hasOwnProperty.call(zi.names,r))return zi.names[r];if(Object.prototype.hasOwnProperty.call(zi.codes,r))return zi.codes[r];throw new Error(`Unsupported encoding: ${r}`)}function Kk(r){return r instanceof Uint8Array&&(r=Nd(r)),Cs(r[0])}zn=Pw.exports=Bk;zn.encode=Mk;zn.decode=Uk;zn.isEncoded=Fk;zn.encoding=Cs;zn.encodingFromData=Kk;var $k=Object.freeze(zi.names),Hk=Object.freeze(zi.codes);zn.names=$k;zn.codes=Hk});var Uw=le((Mie,Mw)=>{Mw.exports=Bw;var Lw=128,qk=127,Wk=~qk,zk=Math.pow(2,31);function Bw(r,e,t){e=e||[],t=t||0;for(var n=t;r>=zk;)e[t++]=r&255|Lw,r/=128;for(;r&Wk;)e[t++]=r&255|Lw,r>>>=7;return e[t]=r|0,Bw.bytes=t-n+1,e}});var Kw=le((Uie,Vw)=>{Vw.exports=Wp;var Gk=128,Fw=127;function Wp(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Wp.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&Fw)<<o:(i&Fw)*Math.pow(2,o),o+=7}while(i>=Gk);return Wp.bytes=s-n,t}});var Hw=le((Fie,$w)=>{var Yk=Math.pow(2,7),Qk=Math.pow(2,14),Xk=Math.pow(2,21),jk=Math.pow(2,28),Zk=Math.pow(2,35),Jk=Math.pow(2,42),eC=Math.pow(2,49),tC=Math.pow(2,56),rC=Math.pow(2,63);$w.exports=function(r){return r<Yk?1:r<Qk?2:r<Xk?3:r<jk?4:r<Zk?5:r<Jk?6:r<eC?7:r<tC?8:r<rC?9:10}});var Ww=le((Vie,qw)=>{qw.exports={encode:Uw(),decode:Kw(),encodingLength:Hw()}});var Gw=le((Kie,zw)=>{"use strict";var nC=Object.freeze({identity:0,sha1:17,"sha2-256":18,"sha2-512":19,"sha3-512":20,"sha3-384":21,"sha3-256":22,"sha3-224":23,"shake-128":24,"shake-256":25,"keccak-224":26,"keccak-256":27,"keccak-384":28,"keccak-512":29,blake3:30,"murmur3-128":34,"murmur3-32":35,"dbl-sha2-256":86,md4:212,md5:213,bmt:214,"sha2-256-trunc254-padded":4114,"ripemd-128":4178,"ripemd-160":4179,"ripemd-256":4180,"ripemd-320":4181,x11:4352,kangarootwelve:7425,"sm3-256":21325,"blake2b-8":45569,"blake2b-16":45570,"blake2b-24":45571,"blake2b-32":45572,"blake2b-40":45573,"blake2b-48":45574,"blake2b-56":45575,"blake2b-64":45576,"blake2b-72":45577,"blake2b-80":45578,"blake2b-88":45579,"blake2b-96":45580,"blake2b-104":45581,"blake2b-112":45582,"blake2b-120":45583,"blake2b-128":45584,"blake2b-136":45585,"blake2b-144":45586,"blake2b-152":45587,"blake2b-160":45588,"blake2b-168":45589,"blake2b-176":45590,"blake2b-184":45591,"blake2b-192":45592,"blake2b-200":45593,"blake2b-208":45594,"blake2b-216":45595,"blake2b-224":45596,"blake2b-232":45597,"blake2b-240":45598,"blake2b-248":45599,"blake2b-256":45600,"blake2b-264":45601,"blake2b-272":45602,"blake2b-280":45603,"blake2b-288":45604,"blake2b-296":45605,"blake2b-304":45606,"blake2b-312":45607,"blake2b-320":45608,"blake2b-328":45609,"blake2b-336":45610,"blake2b-344":45611,"blake2b-352":45612,"blake2b-360":45613,"blake2b-368":45614,"blake2b-376":45615,"blake2b-384":45616,"blake2b-392":45617,"blake2b-400":45618,"blake2b-408":45619,"blake2b-416":45620,"blake2b-424":45621,"blake2b-432":45622,"blake2b-440":45623,"blake2b-448":45624,"blake2b-456":45625,"blake2b-464":45626,"blake2b-472":45627,"blake2b-480":45628,"blake2b-488":45629,"blake2b-496":45630,"blake2b-504":45631,"blake2b-512":45632,"blake2s-8":45633,"blake2s-16":45634,"blake2s-24":45635,"blake2s-32":45636,"blake2s-40":45637,"blake2s-48":45638,"blake2s-56":45639,"blake2s-64":45640,"blake2s-72":45641,"blake2s-80":45642,"blake2s-88":45643,"blake2s-96":45644,"blake2s-104":45645,"blake2s-112":45646,"blake2s-120":45647,"blake2s-128":45648,"blake2s-136":45649,"blake2s-144":45650,"blake2s-152":45651,"blake2s-160":45652,"blake2s-168":45653,"blake2s-176":45654,"blake2s-184":45655,"blake2s-192":45656,"blake2s-200":45657,"blake2s-208":45658,"blake2s-216":45659,"blake2s-224":45660,"blake2s-232":45661,"blake2s-240":45662,"blake2s-248":45663,"blake2s-256":45664,"skein256-8":45825,"skein256-16":45826,"skein256-24":45827,"skein256-32":45828,"skein256-40":45829,"skein256-48":45830,"skein256-56":45831,"skein256-64":45832,"skein256-72":45833,"skein256-80":45834,"skein256-88":45835,"skein256-96":45836,"skein256-104":45837,"skein256-112":45838,"skein256-120":45839,"skein256-128":45840,"skein256-136":45841,"skein256-144":45842,"skein256-152":45843,"skein256-160":45844,"skein256-168":45845,"skein256-176":45846,"skein256-184":45847,"skein256-192":45848,"skein256-200":45849,"skein256-208":45850,"skein256-216":45851,"skein256-224":45852,"skein256-232":45853,"skein256-240":45854,"skein256-248":45855,"skein256-256":45856,"skein512-8":45857,"skein512-16":45858,"skein512-24":45859,"skein512-32":45860,"skein512-40":45861,"skein512-48":45862,"skein512-56":45863,"skein512-64":45864,"skein512-72":45865,"skein512-80":45866,"skein512-88":45867,"skein512-96":45868,"skein512-104":45869,"skein512-112":45870,"skein512-120":45871,"skein512-128":45872,"skein512-136":45873,"skein512-144":45874,"skein512-152":45875,"skein512-160":45876,"skein512-168":45877,"skein512-176":45878,"skein512-184":45879,"skein512-192":45880,"skein512-200":45881,"skein512-208":45882,"skein512-216":45883,"skein512-224":45884,"skein512-232":45885,"skein512-240":45886,"skein512-248":45887,"skein512-256":45888,"skein512-264":45889,"skein512-272":45890,"skein512-280":45891,"skein512-288":45892,"skein512-296":45893,"skein512-304":45894,"skein512-312":45895,"skein512-320":45896,"skein512-328":45897,"skein512-336":45898,"skein512-344":45899,"skein512-352":45900,"skein512-360":45901,"skein512-368":45902,"skein512-376":45903,"skein512-384":45904,"skein512-392":45905,"skein512-400":45906,"skein512-408":45907,"skein512-416":45908,"skein512-424":45909,"skein512-432":45910,"skein512-440":45911,"skein512-448":45912,"skein512-456":45913,"skein512-464":45914,"skein512-472":45915,"skein512-480":45916,"skein512-488":45917,"skein512-496":45918,"skein512-504":45919,"skein512-512":45920,"skein1024-8":45921,"skein1024-16":45922,"skein1024-24":45923,"skein1024-32":45924,"skein1024-40":45925,"skein1024-48":45926,"skein1024-56":45927,"skein1024-64":45928,"skein1024-72":45929,"skein1024-80":45930,"skein1024-88":45931,"skein1024-96":45932,"skein1024-104":45933,"skein1024-112":45934,"skein1024-120":45935,"skein1024-128":45936,"skein1024-136":45937,"skein1024-144":45938,"skein1024-152":45939,"skein1024-160":45940,"skein1024-168":45941,"skein1024-176":45942,"skein1024-184":45943,"skein1024-192":45944,"skein1024-200":45945,"skein1024-208":45946,"skein1024-216":45947,"skein1024-224":45948,"skein1024-232":45949,"skein1024-240":45950,"skein1024-248":45951,"skein1024-256":45952,"skein1024-264":45953,"skein1024-272":45954,"skein1024-280":45955,"skein1024-288":45956,"skein1024-296":45957,"skein1024-304":45958,"skein1024-312":45959,"skein1024-320":45960,"skein1024-328":45961,"skein1024-336":45962,"skein1024-344":45963,"skein1024-352":45964,"skein1024-360":45965,"skein1024-368":45966,"skein1024-376":45967,"skein1024-384":45968,"skein1024-392":45969,"skein1024-400":45970,"skein1024-408":45971,"skein1024-416":45972,"skein1024-424":45973,"skein1024-432":45974,"skein1024-440":45975,"skein1024-448":45976,"skein1024-456":45977,"skein1024-464":45978,"skein1024-472":45979,"skein1024-480":45980,"skein1024-488":45981,"skein1024-496":45982,"skein1024-504":45983,"skein1024-512":45984,"skein1024-520":45985,"skein1024-528":45986,"skein1024-536":45987,"skein1024-544":45988,"skein1024-552":45989,"skein1024-560":45990,"skein1024-568":45991,"skein1024-576":45992,"skein1024-584":45993,"skein1024-592":45994,"skein1024-600":45995,"skein1024-608":45996,"skein1024-616":45997,"skein1024-624":45998,"skein1024-632":45999,"skein1024-640":46e3,"skein1024-648":46001,"skein1024-656":46002,"skein1024-664":46003,"skein1024-672":46004,"skein1024-680":46005,"skein1024-688":46006,"skein1024-696":46007,"skein1024-704":46008,"skein1024-712":46009,"skein1024-720":46010,"skein1024-728":46011,"skein1024-736":46012,"skein1024-744":46013,"skein1024-752":46014,"skein1024-760":46015,"skein1024-768":46016,"skein1024-776":46017,"skein1024-784":46018,"skein1024-792":46019,"skein1024-800":46020,"skein1024-808":46021,"skein1024-816":46022,"skein1024-824":46023,"skein1024-832":46024,"skein1024-840":46025,"skein1024-848":46026,"skein1024-856":46027,"skein1024-864":46028,"skein1024-872":46029,"skein1024-880":46030,"skein1024-888":46031,"skein1024-896":46032,"skein1024-904":46033,"skein1024-912":46034,"skein1024-920":46035,"skein1024-928":46036,"skein1024-936":46037,"skein1024-944":46038,"skein1024-952":46039,"skein1024-960":46040,"skein1024-968":46041,"skein1024-976":46042,"skein1024-984":46043,"skein1024-992":46044,"skein1024-1000":46045,"skein1024-1008":46046,"skein1024-1016":46047,"skein1024-1024":46048,"poseidon-bls12_381-a2-fc1":46081,"poseidon-bls12_381-a2-fc1-sc":46082});zw.exports={names:nC}});function oC(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,E=h.length;w!==E&&h[w]===0;)w++,p++;for(var b=(E-w)*d+1>>>0,S=new Uint8Array(b);w!==E;){for(var R=h[w],A=0,D=b-1;(R!==0||A<y)&&D!==-1;D--,A++)R+=256*S[D]>>>0,S[D]=R%a>>>0,R=R/a>>>0;if(R!==0)throw new Error("Non-zero carry");y=A,w++}for(var _=b-y;_!==b&&S[_]===0;)_++;for(var k=c.repeat(p);_<b;++_)k+=r.charAt(S[_]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var E=(h.length-p)*l+1>>>0,b=new Uint8Array(E);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var R=0,A=E-1;(S!==0||R<w)&&A!==-1;A--,R++)S+=a*b[A]>>>0,b[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=R,p++}if(h[p]!==" "){for(var D=E-w;D!==E&&b[D]===0;)D++;for(var _=new Uint8Array(y+(E-D)),k=y;D!==E;)_[k++]=b[D++];return _}}}function m(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:m}}var sC,iC,Yw,Qw=De(()=>{sC=oC,iC=sC,Yw=iC});var Hie,Xw,Gn,jw,Zw,Vo=De(()=>{Hie=new Uint8Array(0),Xw=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},Gn=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")},jw=r=>new TextEncoder().encode(r),Zw=r=>new TextDecoder().decode(r)});var zp,Gp,Yp,eb,Qp,Gi,Ko,aC,cC,Je,Zr=De(()=>{Qw();Vo();zp=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},Gp=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return eb(this,e)}},Yp=class{constructor(e){this.decoders=e}or(e){return eb(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},eb=(r,e)=>new Yp({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),Qp=class{constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new zp(e,t,n),this.decoder=new Gp(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},Gi=({name:r,prefix:e,encode:t,decode:n})=>new Qp(r,e,t,n),Ko=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:o}=Yw(t,e);return Gi({prefix:r,name:e,encode:n,decode:s=>Gn(o(s))})},aC=(r,e,t,n)=>{let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i},cC=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},Je=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>Gi({prefix:e,name:r,encode(o){return cC(o,n,t)},decode(o){return aC(o,n,t,r)}})});var Xp={};ge(Xp,{identity:()=>lC});var lC,tb=De(()=>{Zr();Vo();lC=Gi({prefix:"\0",name:"identity",encode:r=>Zw(r),decode:r=>jw(r)})});var jp={};ge(jp,{base2:()=>uC});var uC,rb=De(()=>{Zr();uC=Je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1})});var Zp={};ge(Zp,{base8:()=>dC});var dC,nb=De(()=>{Zr();dC=Je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3})});var Jp={};ge(Jp,{base10:()=>fC});var fC,ob=De(()=>{Zr();fC=Ko({prefix:"9",name:"base10",alphabet:"0123456789"})});var e3={};ge(e3,{base16:()=>hC,base16upper:()=>pC});var hC,pC,sb=De(()=>{Zr();hC=Je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),pC=Je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4})});var t3={};ge(t3,{base32:()=>Yi,base32hex:()=>wC,base32hexpad:()=>EC,base32hexpadupper:()=>xC,base32hexupper:()=>bC,base32pad:()=>gC,base32padupper:()=>yC,base32upper:()=>mC,base32z:()=>vC});var Yi,mC,gC,yC,wC,bC,EC,xC,vC,r3=De(()=>{Zr();Yi=Je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),mC=Je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),gC=Je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),yC=Je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),wC=Je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),bC=Je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),EC=Je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),xC=Je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),vC=Je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5})});var n3={};ge(n3,{base36:()=>_C,base36upper:()=>SC});var _C,SC,ib=De(()=>{Zr();_C=Ko({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),SC=Ko({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"})});var o3={};ge(o3,{base58btc:()=>pn,base58flickr:()=>RC});var pn,RC,s3=De(()=>{Zr();pn=Ko({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),RC=Ko({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"})});var i3={};ge(i3,{base64:()=>AC,base64pad:()=>IC,base64url:()=>DC,base64urlpad:()=>TC});var AC,IC,DC,TC,ab=De(()=>{Zr();AC=Je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),IC=Je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),DC=Je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),TC=Je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6})});var a3={};ge(a3,{base256emoji:()=>OC});function NC(r){return r.reduce((e,t)=>(e+=kC[t],e),"")}function PC(r){let e=[];for(let t of r){let n=CC[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var cb,kC,CC,OC,lb=De(()=>{Zr();cb=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),kC=cb.reduce((r,e,t)=>(r[t]=e,r),[]),CC=cb.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);OC=Gi({prefix:"\u{1F680}",name:"base256emoji",encode:NC,decode:PC})});function fb(r,e,t){e=e||[],t=t||0;for(var n=t;r>=UC;)e[t++]=r&255|ub,r/=128;for(;r&MC;)e[t++]=r&255|ub,r>>>=7;return e[t]=r|0,fb.bytes=t-n+1,e}function c3(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw c3.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&db)<<o:(i&db)*Math.pow(2,o),o+=7}while(i>=VC);return c3.bytes=s-n,t}var LC,ub,BC,MC,UC,FC,VC,db,KC,$C,HC,qC,WC,zC,GC,YC,QC,XC,jC,ZC,wc,hb=De(()=>{LC=fb,ub=128,BC=127,MC=~BC,UC=Math.pow(2,31);FC=c3,VC=128,db=127;KC=Math.pow(2,7),$C=Math.pow(2,14),HC=Math.pow(2,21),qC=Math.pow(2,28),WC=Math.pow(2,35),zC=Math.pow(2,42),GC=Math.pow(2,49),YC=Math.pow(2,56),QC=Math.pow(2,63),XC=function(r){return r<KC?1:r<$C?2:r<HC?3:r<qC?4:r<WC?5:r<zC?6:r<GC?7:r<YC?8:r<QC?9:10},jC={encode:LC,decode:FC,encodingLength:XC},ZC=jC,wc=ZC});var bc,Qi,Xi,Od=De(()=>{hb();bc=(r,e=0)=>[wc.decode(r,e),wc.decode.bytes],Qi=(r,e,t=0)=>(wc.encode(r,e,t),e),Xi=r=>wc.encodingLength(r)});var Ns,pb,mb,ji,xc=De(()=>{Vo();Od();Ns=(r,e)=>{let t=e.byteLength,n=Xi(r),o=n+Xi(t),s=new Uint8Array(o+t);return Qi(r,s,0),Qi(t,s,n),s.set(e,o),new ji(r,t,e,s)},pb=r=>{let e=Gn(r),[t,n]=bc(e),[o,s]=bc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new ji(t,o,i,e)},mb=(r,e)=>r===e?!0:r.code===e.code&&r.size===e.size&&Xw(r.bytes,e.bytes),ji=class{constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}}});var u3,l3,d3=De(()=>{xc();u3=({name:r,code:e,encode:t})=>new l3(r,e,t),l3=class{constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Ns(this.code,t):t.then(n=>Ns(this.code,n))}else throw Error("Unknown type, must be binary type")}}});var f3={};ge(f3,{sha256:()=>JC,sha512:()=>eN});var yb,JC,eN,wb=De(()=>{d3();yb=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),JC=u3({name:"sha2-256",code:18,encode:yb("SHA-256")}),eN=u3({name:"sha2-512",code:19,encode:yb("SHA-512")})});var h3={};ge(h3,{identity:()=>nN});var bb,tN,Eb,rN,nN,xb=De(()=>{Vo();xc();bb=0,tN="identity",Eb=Gn,rN=r=>Ns(bb,Eb(r)),nN={code:bb,name:tN,encode:Eb,digest:rN}});var vb=De(()=>{Vo()});var uae,dae,_b=De(()=>{uae=new TextEncoder,dae=new TextDecoder});var Md,iN,aN,cN,vc,lN,Sb,Rb,Ld,Bd,uN,dN,fN,Ab=De(()=>{Od();xc();s3();r3();Vo();Md=class r{constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this.byteOffset=o.byteOffset,this.byteLength=o.byteLength,this.asCID=this,this._baseCache=new Map,Object.defineProperties(this,{byteOffset:Bd,byteLength:Bd,code:Ld,version:Ld,multihash:Ld,bytes:Ld,_baseCache:Bd,asCID:Bd})}toV0(){switch(this.version){case 0:return this;default:{let{code:e,multihash:t}=this;if(e!==vc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==lN)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Ns(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}equals(e){return e&&this.code===e.code&&this.version===e.version&&mb(this.multihash,e.multihash)}toString(e){let{bytes:t,version:n,_baseCache:o}=this;switch(n){case 0:return aN(t,o,e||pn.encoder);default:return cN(t,o,e||Yi.encoder)}}toJSON(){return{code:this.code,version:this.version,hash:this.multihash.bytes}}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return"CID("+this.toString()+")"}static isCID(e){return dN(/^0\.0/,fN),!!(e&&(e[Rb]||e.asCID===e))}get toBaseEncodedString(){throw new Error("Deprecated, use .toString()")}get codec(){throw new Error('"codec" property is deprecated, use integer "code" property instead')}get buffer(){throw new Error("Deprecated .buffer property, use .bytes to get Uint8Array instead")}get multibaseName(){throw new Error('"multibaseName" property is deprecated')}get prefix(){throw new Error('"prefix" property is deprecated')}static asCID(e){if(e instanceof r)return e;if(e!=null&&e.asCID===e){let{version:t,code:n,multihash:o,bytes:s}=e;return new r(t,n,o,s||Sb(t,n,o.bytes))}else if(e!=null&&e[Rb]===!0){let{version:t,multihash:n,code:o}=e,s=pb(n);return r.create(t,o,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");switch(e){case 0:{if(t!==vc)throw new Error(`Version 0 CID must use dag-pb (code: ${vc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Sb(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,vc,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new ji(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=bc(e.subarray(t));return t+=f,u},o=n(),s=vc;if(o===18?(o=0,t=0):o===1&&(s=n()),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=iN(e,t),s=r.decode(o);return s._baseCache.set(n,e),s}},iN=(r,e)=>{switch(r[0]){case"Q":{let t=e||pn;return[pn.prefix,t.decode(`${pn.prefix}${r}`)]}case pn.prefix:{let t=e||pn;return[pn.prefix,t.decode(r)]}case Yi.prefix:{let t=e||Yi;return[Yi.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},aN=(r,e,t)=>{let{prefix:n}=t;if(n!==pn.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o},cN=(r,e,t)=>{let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o},vc=112,lN=18,Sb=(r,e,t)=>{let n=Xi(r),o=n+Xi(e),s=new Uint8Array(o+t.byteLength);return Qi(r,s,0),Qi(e,s,n),s.set(t,o),s},Rb=Symbol.for("@ipld/js-cid/CID"),Ld={writable:!1,configurable:!1,enumerable:!0},Bd={writable:!1,enumerable:!1,configurable:!1},uN="0.0.0-dev",dN=(r,e)=>{if(r.test(uN))console.warn(e);else throw new Error(e)},fN=`CID.isCID(v) is deprecated and will be removed in the next major release.
|
|
2
|
+
"use strict";var Helia=(()=>{var KE=Object.create;var vc=Object.defineProperty;var $E=Object.getOwnPropertyDescriptor;var HE=Object.getOwnPropertyNames;var qE=Object.getPrototypeOf,WE=Object.prototype.hasOwnProperty;var Ae=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ie=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),pe=(r,e)=>{for(var t in e)vc(r,t,{get:e[t],enumerable:!0})},V3=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of HE(e))!WE.call(r,o)&&o!==t&&vc(r,o,{get:()=>e[o],enumerable:!(n=$E(e,o))||n.enumerable});return r};var Ye=(r,e,t)=>(t=r!=null?KE(qE(r)):{},V3(e||!r||!r.__esModule?vc(t,"default",{value:r,enumerable:!0}):t,r)),Rc=r=>V3(vc({},"__esModule",{value:!0}),r);var K4=Ie((PO,V4)=>{var Ks=1e3,$s=Ks*60,Hs=$s*60,qo=Hs*24,Ix=qo*7,Dx=qo*365.25;V4.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return Tx(r);if(t==="number"&&isFinite(r))return e.long?Cx(r):kx(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function Tx(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*Dx;case"weeks":case"week":case"w":return t*Ix;case"days":case"day":case"d":return t*qo;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Hs;case"minutes":case"minute":case"mins":case"min":case"m":return t*$s;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ks;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function kx(r){var e=Math.abs(r);return e>=qo?Math.round(r/qo)+"d":e>=Hs?Math.round(r/Hs)+"h":e>=$s?Math.round(r/$s)+"m":e>=Ks?Math.round(r/Ks)+"s":r+"ms"}function Cx(r){var e=Math.abs(r);return e>=qo?Wc(r,e,qo,"day"):e>=Hs?Wc(r,e,Hs,"hour"):e>=$s?Wc(r,e,$s,"minute"):e>=Ks?Wc(r,e,Ks,"second"):r+" ms"}function Wc(r,e,t,n){var o=e>=t*1.5;return Math.round(r/t)+" "+n+(o?"s":"")}});var H4=Ie((OO,$4)=>{function Nx(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=K4(),t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,f=null,g,h;function p(...y){if(!p.enabled)return;let w=p,b=Number(new Date),E=b-(u||b);w.diff=E,w.prev=u,w.curr=b,u=b,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let S=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(A,D)=>{if(A==="%%")return"%";S++;let R=t.formatters[D];if(typeof R=="function"){let k=y[S];A=R.call(w,k),y.splice(S,1),S--}return A}),t.formatArgs.call(w,y),(w.log||t.log).apply(w,y)}return p.namespace=d,p.useColors=t.useColors(),p.color=t.selectColor(d),p.extend=n,p.destroy=t.destroy,Object.defineProperty(p,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(g!==t.namespaces&&(g=t.namespaces,h=t.enabled(d)),h),set:y=>{f=y}}),typeof t.init=="function"&&t.init(p),p}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),g=f.length;for(u=0;u<g;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.slice(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}$4.exports=Nx});var hh=Ie((jt,Gc)=>{jt.formatArgs=Ox;jt.save=Lx;jt.load=Bx;jt.useColors=Px;jt.storage=Ux();jt.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();jt.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Px(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Ox(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Gc.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}jt.log=console.debug||console.log||(()=>{});function Lx(r){try{r?jt.storage.setItem("debug",r):jt.storage.removeItem("debug")}catch{}}function Bx(){let r;try{r=jt.storage.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Ux(){try{return localStorage}catch{}}Gc.exports=H4()(jt);var{formatters:Mx}=Gc.exports;Mx.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Wo=Ie((WO,z4)=>{"use strict";function G4(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function Kx(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return G4(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),G4(new o,t)}}z4.exports=Kx});var p8=Ie(fa=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,g,h;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}h=e(c),g=h[0],d=h[1],c=c.substring(d),l.push(g)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,g;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),g=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===g)throw new Error("empty octet");return[f,u]},r=function(){function c(l,d){var u,f,g,h;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(h=l.split("/",2),l=h[0],d=h[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(p){throw u=p,new Error("Invalid mask: "+d)}for(f=g=32;g>=0;f=--g)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(p){throw u=p,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(i(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),fa.ip2long=i,fa.long2ip=a,fa.Netmask=r}).call(fa)});var i6=Ie(oi=>{"use strict";var HR="[object ArrayBuffer]",In=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===HR}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let s=0;s<n.length;s++)if(n[s]!==o[s])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},a0="string",qR=/^[0-9a-f]+$/i,WR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,GR=/^[a-zA-Z0-9-_]+$/,Pl=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=In.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},xr=class{static toString(e,t=!1){let n=In.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},Ol=class r{static isHex(e){return typeof e===a0&&qR.test(e)}static isBase64(e){return typeof e===a0&&WR.test(e)}static isBase64Url(e){return typeof e===a0&&GR.test(e)}static ToString(e,t="utf8"){let n=In.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return xr.toString(n,!0);case"utf16":case"utf16be":return xr.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return xr.fromString(e,!0);case"utf16":case"utf16be":return xr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=In.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return Pl.fromString(e);case"utf16":case"utf16be":return xr.fromString(e);case"utf16le":case"usc2":return xr.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return Pl.toString(e);case"utf16":case"utf16be":return xr.toString(e);case"utf16le":case"usc2":return xr.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=In.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=In.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return xr.toString(e,t)}static FromUtf16String(e,t=!1){return xr.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};Ol.DEFAULT_UTF8_ENCODING="utf8";function zR(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function YR(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function QR(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}oi.BufferSourceConverter=In;oi.Convert=Ol;oi.assign=zR;oi.combine=YR;oi.isEqual=QR});var Su=Ie((tK,A0)=>{var eK=function(){typeof A0<"u"&&(A0.exports=p);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(R){var k=R-R%1;return k==0&&(R<0||R===0&&1/R!=1/0)?-0:k},d=p.prototype,u=(p.fromDate=function(R){return new p(+R)},p.fromInt64BE=S(0,1,2,3,0,4),p.fromInt64LE=S(3,2,1,0,4,0),p.fromString=function(N){var k,O=new p,N=(N+="").replace(/^\s*[+\-]?\d+/,function(F){var F=+F,Y=1970+(F-1970)%400;return O.year=F-Y,Y}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(L,F,Y){return F<0&&(Y*=-1),k=6e4*(60*+F+ +Y),""}).replace(/\.\d+$/,function(L){return O.nano=+(L+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,O.time=k=Date.UTC.apply(Date,N)-(k||0),isNaN(k))throw new TypeError("Invalid Date");return y(O)},p.fromTimeT=function(R){return b(R,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(R){return this.nano+=+R||0,this},d.getNano=function(){var R=y(this);return(R.time%1e3*a+ +R.nano+1e9)%1e9},d.getTimeT=function(){var k=y(this),R=Math.floor(k.time/1e3),k=k.year;return k&&(R+=k*t*r/e),R},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(y(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(R){var k=this,O=k.toDate(),N={H:function(){return A(O.getUTCHours())},L:function(){return D(O.getUTCMilliseconds(),3)},M:function(){return A(O.getUTCMinutes())},N:function(){return D(k.getNano(),9)},S:function(){return A(O.getUTCSeconds())},Y:function(){var L=k.getYear();return 999999<L?"+"+L:9999<L?"+"+D(L,6):0<=L?D(L,4):-999999<=L?"-"+D(-L,6):L},a:function(){return g[O.getUTCDay()]},b:function(){return f[O.getUTCMonth()]},d:function(){return A(O.getUTCDate())},e:function(){return function(L){return(9<L?"":" ")+(0|L)}(O.getUTCDate())},m:function(){return A(O.getUTCMonth()+1)}};return function L(F){return F.replace(/%./g,function(Y){var C=Y[1],I=h[C],C=N[C];return I?L(I):C?C():Y})}(R||u)},d.writeInt64BE=E(0,1,2,3,0,4),d.writeInt64LE=E(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],h={"%":"%",F:"%Y-%m-%d",n:`
|
|
3
|
+
`,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return p;function p(R,k,O){var N=this;if(!(N instanceof p))return new p(R,k,O);N.time=+R||0,N.nano=+k||0,N.year=+O||0,y(N)}function y(R){var k,O,N,L=R.year,F=R.time,Y=R.nano,I=((Y<0||a<=Y)&&(Y-=(O=Math.floor(Y/a))*a,F+=O,O=1),L%e);return(F<-s||s<F||I)&&((k=l(F/o))&&(L+=k*e,F-=k*o),(N=w(F)).setUTCFullYear(I+N.getUTCFullYear()),N=(F=+N)+(k=l((L-=I)/e))*o,k&&-s<=N&&N<=s&&(L-=k*e,F=N),O=1),O&&(R.year=L,R.time=F,R.nano=Y),R}function w(R){var k=new Date(0);return k.setTime(R),k}function b(L,N){L=+L||0;var O=l((N=(N|0)*i)/n)+l(L/n),N=N%n+L%n,L=l(N/n);return L&&(O+=L,N-=L*n),new p(1e3*N,0,O*e)}function E(R,k,O,N,L,F){return function(I,C){var T=y(this);I=I||new Array(8),_(I,C|=0);var v=Math.floor(T.time/1e3),T=T.year*(t*r/e),$=l(T/i)+l(v/i),T=T%i+v%i,v=Math.floor(T/i);return v&&($+=v,T-=v*i),Y(I,C+L,$),Y(I,C+F,T),I};function Y(I,C,$){I[C+R]=$>>24&255,I[C+k]=$>>16&255,I[C+O]=$>>8&255,I[C+N]=255&$}}function S(R,k,O,N,L,F){return function(I,C){_(I,C|=0);var $=Y(I,C+L);return b(Y(I,C+F),$)};function Y(I,C){return 16777216*I[C+R]+(I[C+k]<<16|I[C+O]<<8|I[C+N])}}function _(R,k){if(R=R&&R.length,R==null)throw new TypeError("Invalid Buffer");if(R<k+8)throw new RangeError("Out of range")}function A(R){return(9<R?"":"0")+(0|R)}function D(R,k){return(c+(0|R)).substr(-k)}}()});var T5=Ie((U$,B0)=>{"use strict";var f_=Object.prototype.hasOwnProperty,Ft="~";function Ma(){}Object.create&&(Ma.prototype=Object.create(null),new Ma().__proto__||(Ft=!1));function h_(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function D5(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new h_(t,n||r,o),i=Ft?Ft+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function $u(r,e){--r._eventsCount===0?r._events=new Ma:delete r._events[e]}function Pt(){this._events=new Ma,this._eventsCount=0}Pt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)f_.call(t,n)&&e.push(Ft?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Pt.prototype.listeners=function(e){var t=Ft?Ft+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Pt.prototype.listenerCount=function(e){var t=Ft?Ft+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Pt.prototype.emit=function(e,t,n,o,s,i){var a=Ft?Ft+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,g;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(g=1,d=new Array(l-1);g<l;g++)d[g-1]=arguments[g];c[u].fn.apply(c[u].context,d)}}return!0};Pt.prototype.on=function(e,t,n){return D5(this,e,t,n,!1)};Pt.prototype.once=function(e,t,n){return D5(this,e,t,n,!0)};Pt.prototype.removeListener=function(e,t,n,o){var s=Ft?Ft+e:e;if(!this._events[s])return this;if(!t)return $u(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&$u(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:$u(this,s)}return this};Pt.prototype.removeAllListeners=function(e){var t;return e?(t=Ft?Ft+e:e,this._events[t]&&$u(this,t)):(this._events=new Ma,this._eventsCount=0),this};Pt.prototype.off=Pt.prototype.removeListener;Pt.prototype.addListener=Pt.prototype.on;Pt.prefixed=Ft;Pt.EventEmitter=Pt;typeof B0<"u"&&(B0.exports=Pt)});var W0=Ie((eW,H5)=>{H5.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var Vg=Ie((jj,Fg)=>{function YA(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}Fg.exports=YA});var v9=Ie((sre,x9)=>{"use strict";x9.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var D9=Ie((A9,I9)=>{"use strict";var ld=v9(),{hasOwnProperty:S9}=Object.prototype,{propertyIsEnumerable:vI}=Object,Oi=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),RI=A9,R9={concatArrays:!1,ignoreUndefined:!1},ud=r=>{let e=[];for(let t in r)S9.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)vI.call(r,n)&&e.push(n)}return e};function Li(r){return Array.isArray(r)?SI(r):ld(r)?_I(r):r}function SI(r){let e=r.slice(0,0);return ud(r).forEach(t=>{Oi(e,t,Li(r[t]))}),e}function _I(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return ud(r).forEach(t=>{Oi(e,t,Li(r[t]))}),e}var _9=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Oi(r,o,dp(r[o],e[o],n)):Oi(r,o,Li(e[o])))}),r),AI=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(s=>{let i=[];for(let a=0;a<s.length;a++)S9.call(s,a)&&(i.push(String(a)),s===r?Oi(n,o++,s[a]):Oi(n,o++,Li(s[a])));n=_9(n,s,ud(s).filter(a=>!i.includes(a)),t)}),n};function dp(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?AI(r,e,t):!ld(e)||!ld(r)?Li(e):_9(r,e,ud(e),t)}I9.exports=function(...r){let e=dp(Li(R9),this!==RI&&this||{},R9),t={_:{}};for(let n of r)if(n!==void 0){if(!ld(n))throw new TypeError("`"+n+"` is not an Option Object");t=dp(t,{_:n},e)}return t._}});var C9=Ie((are,k9)=>{"use strict";function II(r){return r>=55296&&r<=56319}function DI(r){return r>=56320&&r<=57343}k9.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],II(i)&&DI(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var P9=Ie((cre,N9)=>{"use strict";function TI(r){return r>=55296&&r<=56319}function kI(r){return r>=56320&&r<=57343}N9.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),kI(o)?s!=null&&TI(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var L9=Ie((lre,O9)=>{"use strict";var CI=C9(),NI=P9();O9.exports=CI.bind(null,NI)});var M9=Ie((ure,U9)=>{"use strict";var PI=L9(),OI=/[\/\?<>\\:\*\|"]/g,LI=/[\x00-\x1f\x80-\x9f]/g,BI=/^\.+$/,UI=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,MI=/[\. ]+$/;function B9(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(OI,e).replace(LI,e).replace(BI,e).replace(UI,e).replace(MI,e);return PI(t,255)}U9.exports=function(r,e){var t=e&&e.replacement||"",n=B9(r,t);return t===""?n:B9(n,"")}});var hy=Ie((xoe,fy)=>{"use strict";function RD(r){if(r.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),t=0;t<e.length;t++)e[t]=255;for(var n=0;n<r.length;n++){var o=r.charAt(n),s=o.charCodeAt(0);if(e[s]!==255)throw new TypeError(o+" is ambiguous");e[s]=n}var i=r.length,a=r.charAt(0),c=Math.log(i)/Math.log(256),l=Math.log(256)/Math.log(i);function d(g){if(g instanceof Uint8Array||(ArrayBuffer.isView(g)?g=new Uint8Array(g.buffer,g.byteOffset,g.byteLength):Array.isArray(g)&&(g=Uint8Array.from(g))),!(g instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(g.length===0)return"";for(var h=0,p=0,y=0,w=g.length;y!==w&&g[y]===0;)y++,h++;for(var b=(w-y)*l+1>>>0,E=new Uint8Array(b);y!==w;){for(var S=g[y],_=0,A=b-1;(S!==0||_<p)&&A!==-1;A--,_++)S+=256*E[A]>>>0,E[A]=S%i>>>0,S=S/i>>>0;if(S!==0)throw new Error("Non-zero carry");p=_,y++}for(var D=b-p;D!==b&&E[D]===0;)D++;for(var R=a.repeat(h);D<b;++D)R+=r.charAt(E[D]);return R}function u(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var h=0;if(g[h]!==" "){for(var p=0,y=0;g[h]===a;)p++,h++;for(var w=(g.length-h)*c+1>>>0,b=new Uint8Array(w);g[h];){var E=e[g.charCodeAt(h)];if(E===255)return;for(var S=0,_=w-1;(E!==0||S<y)&&_!==-1;_--,S++)E+=i*b[_]>>>0,b[_]=E%256>>>0,E=E/256>>>0;if(E!==0)throw new Error("Non-zero carry");y=S,h++}if(g[h]!==" "){for(var A=w-y;A!==w&&b[A]===0;)A++;for(var D=new Uint8Array(p+(w-A)),R=p;A!==w;)D[R++]=b[A++];return D}}}function f(g){var h=u(g);if(h)return h;throw new Error("Non-base"+i+" character")}return{encode:d,decodeUnsafe:u,decode:f}}fy.exports=RD});var Sd=Ie((voe,py)=>{"use strict";var SD=new TextDecoder,_D=r=>SD.decode(r),AD=new TextEncoder,ID=r=>AD.encode(r);function DD(r,e){let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}py.exports={decodeText:_D,encodeText:ID,concat:DD}});var gy=Ie((Roe,my)=>{"use strict";var{encodeText:TD}=Sd(),Cp=class{constructor(e,t,n,o){this.name=e,this.code=t,this.codeBuf=TD(this.code),this.alphabet=o,this.codec=n(o)}encode(e){return this.codec.encode(e)}decode(e){for(let t of e)if(this.alphabet&&this.alphabet.indexOf(t)<0)throw new Error(`invalid character '${t}' in '${e}'`);return this.codec.decode(e)}};my.exports=Cp});var wy=Ie((Soe,yy)=>{"use strict";var kD=(r,e,t)=>{let n={};for(let l=0;l<e.length;++l)n[e[l]]=l;let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=n[r[l]];if(d===void 0)throw new SyntaxError("Invalid character "+r[l]);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||255&a<<8-i)throw new SyntaxError("Unexpected end of data");return s},CD=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},ND=r=>e=>({encode(t){return CD(t,e,r)},decode(t){return kD(t,e,r)}});yy.exports={rfc4648:ND}});var vy=Ie((_oe,xy)=>{"use strict";var dc=hy(),PD=gy(),{rfc4648:At}=wy(),{decodeText:OD,encodeText:LD}=Sd(),BD=()=>({encode:OD,decode:LD}),Ey=[["identity","\0",BD,""],["base2","0",At(1),"01"],["base8","7",At(3),"01234567"],["base10","9",dc,"0123456789"],["base16","f",At(4),"0123456789abcdef"],["base16upper","F",At(4),"0123456789ABCDEF"],["base32hex","v",At(5),"0123456789abcdefghijklmnopqrstuv"],["base32hexupper","V",At(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV"],["base32hexpad","t",At(5),"0123456789abcdefghijklmnopqrstuv="],["base32hexpadupper","T",At(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV="],["base32","b",At(5),"abcdefghijklmnopqrstuvwxyz234567"],["base32upper","B",At(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"],["base32pad","c",At(5),"abcdefghijklmnopqrstuvwxyz234567="],["base32padupper","C",At(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567="],["base32z","h",At(5),"ybndrfg8ejkmcpqxot1uwisza345h769"],["base36","k",dc,"0123456789abcdefghijklmnopqrstuvwxyz"],["base36upper","K",dc,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"],["base58btc","z",dc,"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"],["base58flickr","Z",dc,"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"],["base64","m",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"],["base64pad","M",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="],["base64url","u",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"],["base64urlpad","U",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="]],by=Ey.reduce((r,e)=>(r[e[0]]=new PD(e[0],e[1],e[2],e[3]),r),{}),UD=Ey.reduce((r,e)=>(r[e[1]]=by[e[0]],r),{});xy.exports={names:by,codes:UD}});var _y=Ie((Wn,Sy)=>{"use strict";var Vi=vy(),{encodeText:MD,decodeText:_d,concat:Ry}=Sd();function FD(r,e){if(!e)throw new Error("requires an encoded Uint8Array");let{name:t,codeBuf:n}=_s(r);return HD(t,e),Ry([n,e],n.length+e.length)}function VD(r,e){let t=_s(r),n=MD(t.encode(e));return Ry([t.codeBuf,n],t.codeBuf.length+n.length)}function KD(r){r instanceof Uint8Array&&(r=_d(r));let e=r[0];return["f","F","v","V","t","T","b","B","c","C","h","k","K"].includes(e)&&(r=r.toLowerCase()),_s(r[0]).decode(r.substring(1))}function $D(r){if(r instanceof Uint8Array&&(r=_d(r)),Object.prototype.toString.call(r)!=="[object String]")return!1;try{return _s(r[0]).name}catch{return!1}}function HD(r,e){_s(r).decode(_d(e))}function _s(r){if(Object.prototype.hasOwnProperty.call(Vi.names,r))return Vi.names[r];if(Object.prototype.hasOwnProperty.call(Vi.codes,r))return Vi.codes[r];throw new Error(`Unsupported encoding: ${r}`)}function qD(r){return r instanceof Uint8Array&&(r=_d(r)),_s(r[0])}Wn=Sy.exports=FD;Wn.encode=VD;Wn.decode=KD;Wn.isEncoded=$D;Wn.encoding=_s;Wn.encodingFromData=qD;var WD=Object.freeze(Vi.names),GD=Object.freeze(Vi.codes);Wn.names=WD;Wn.codes=GD});var Ty=Ie((Aoe,Dy)=>{Dy.exports=Iy;var Ay=128,zD=127,YD=~zD,QD=Math.pow(2,31);function Iy(r,e,t){e=e||[],t=t||0;for(var n=t;r>=QD;)e[t++]=r&255|Ay,r/=128;for(;r&YD;)e[t++]=r&255|Ay,r>>>=7;return e[t]=r|0,Iy.bytes=t-n+1,e}});var Ny=Ie((Ioe,Cy)=>{Cy.exports=Np;var XD=128,ky=127;function Np(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Np.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&ky)<<o:(i&ky)*Math.pow(2,o),o+=7}while(i>=XD);return Np.bytes=s-n,t}});var Oy=Ie((Doe,Py)=>{var jD=Math.pow(2,7),ZD=Math.pow(2,14),JD=Math.pow(2,21),eT=Math.pow(2,28),tT=Math.pow(2,35),rT=Math.pow(2,42),nT=Math.pow(2,49),oT=Math.pow(2,56),sT=Math.pow(2,63);Py.exports=function(r){return r<jD?1:r<ZD?2:r<JD?3:r<eT?4:r<tT?5:r<rT?6:r<nT?7:r<oT?8:r<sT?9:10}});var By=Ie((Toe,Ly)=>{Ly.exports={encode:Ty(),decode:Ny(),encodingLength:Oy()}});var My=Ie((koe,Uy)=>{"use strict";var iT=Object.freeze({identity:0,sha1:17,"sha2-256":18,"sha2-512":19,"sha3-512":20,"sha3-384":21,"sha3-256":22,"sha3-224":23,"shake-128":24,"shake-256":25,"keccak-224":26,"keccak-256":27,"keccak-384":28,"keccak-512":29,blake3:30,"murmur3-128":34,"murmur3-32":35,"dbl-sha2-256":86,md4:212,md5:213,bmt:214,"sha2-256-trunc254-padded":4114,"ripemd-128":4178,"ripemd-160":4179,"ripemd-256":4180,"ripemd-320":4181,x11:4352,kangarootwelve:7425,"sm3-256":21325,"blake2b-8":45569,"blake2b-16":45570,"blake2b-24":45571,"blake2b-32":45572,"blake2b-40":45573,"blake2b-48":45574,"blake2b-56":45575,"blake2b-64":45576,"blake2b-72":45577,"blake2b-80":45578,"blake2b-88":45579,"blake2b-96":45580,"blake2b-104":45581,"blake2b-112":45582,"blake2b-120":45583,"blake2b-128":45584,"blake2b-136":45585,"blake2b-144":45586,"blake2b-152":45587,"blake2b-160":45588,"blake2b-168":45589,"blake2b-176":45590,"blake2b-184":45591,"blake2b-192":45592,"blake2b-200":45593,"blake2b-208":45594,"blake2b-216":45595,"blake2b-224":45596,"blake2b-232":45597,"blake2b-240":45598,"blake2b-248":45599,"blake2b-256":45600,"blake2b-264":45601,"blake2b-272":45602,"blake2b-280":45603,"blake2b-288":45604,"blake2b-296":45605,"blake2b-304":45606,"blake2b-312":45607,"blake2b-320":45608,"blake2b-328":45609,"blake2b-336":45610,"blake2b-344":45611,"blake2b-352":45612,"blake2b-360":45613,"blake2b-368":45614,"blake2b-376":45615,"blake2b-384":45616,"blake2b-392":45617,"blake2b-400":45618,"blake2b-408":45619,"blake2b-416":45620,"blake2b-424":45621,"blake2b-432":45622,"blake2b-440":45623,"blake2b-448":45624,"blake2b-456":45625,"blake2b-464":45626,"blake2b-472":45627,"blake2b-480":45628,"blake2b-488":45629,"blake2b-496":45630,"blake2b-504":45631,"blake2b-512":45632,"blake2s-8":45633,"blake2s-16":45634,"blake2s-24":45635,"blake2s-32":45636,"blake2s-40":45637,"blake2s-48":45638,"blake2s-56":45639,"blake2s-64":45640,"blake2s-72":45641,"blake2s-80":45642,"blake2s-88":45643,"blake2s-96":45644,"blake2s-104":45645,"blake2s-112":45646,"blake2s-120":45647,"blake2s-128":45648,"blake2s-136":45649,"blake2s-144":45650,"blake2s-152":45651,"blake2s-160":45652,"blake2s-168":45653,"blake2s-176":45654,"blake2s-184":45655,"blake2s-192":45656,"blake2s-200":45657,"blake2s-208":45658,"blake2s-216":45659,"blake2s-224":45660,"blake2s-232":45661,"blake2s-240":45662,"blake2s-248":45663,"blake2s-256":45664,"skein256-8":45825,"skein256-16":45826,"skein256-24":45827,"skein256-32":45828,"skein256-40":45829,"skein256-48":45830,"skein256-56":45831,"skein256-64":45832,"skein256-72":45833,"skein256-80":45834,"skein256-88":45835,"skein256-96":45836,"skein256-104":45837,"skein256-112":45838,"skein256-120":45839,"skein256-128":45840,"skein256-136":45841,"skein256-144":45842,"skein256-152":45843,"skein256-160":45844,"skein256-168":45845,"skein256-176":45846,"skein256-184":45847,"skein256-192":45848,"skein256-200":45849,"skein256-208":45850,"skein256-216":45851,"skein256-224":45852,"skein256-232":45853,"skein256-240":45854,"skein256-248":45855,"skein256-256":45856,"skein512-8":45857,"skein512-16":45858,"skein512-24":45859,"skein512-32":45860,"skein512-40":45861,"skein512-48":45862,"skein512-56":45863,"skein512-64":45864,"skein512-72":45865,"skein512-80":45866,"skein512-88":45867,"skein512-96":45868,"skein512-104":45869,"skein512-112":45870,"skein512-120":45871,"skein512-128":45872,"skein512-136":45873,"skein512-144":45874,"skein512-152":45875,"skein512-160":45876,"skein512-168":45877,"skein512-176":45878,"skein512-184":45879,"skein512-192":45880,"skein512-200":45881,"skein512-208":45882,"skein512-216":45883,"skein512-224":45884,"skein512-232":45885,"skein512-240":45886,"skein512-248":45887,"skein512-256":45888,"skein512-264":45889,"skein512-272":45890,"skein512-280":45891,"skein512-288":45892,"skein512-296":45893,"skein512-304":45894,"skein512-312":45895,"skein512-320":45896,"skein512-328":45897,"skein512-336":45898,"skein512-344":45899,"skein512-352":45900,"skein512-360":45901,"skein512-368":45902,"skein512-376":45903,"skein512-384":45904,"skein512-392":45905,"skein512-400":45906,"skein512-408":45907,"skein512-416":45908,"skein512-424":45909,"skein512-432":45910,"skein512-440":45911,"skein512-448":45912,"skein512-456":45913,"skein512-464":45914,"skein512-472":45915,"skein512-480":45916,"skein512-488":45917,"skein512-496":45918,"skein512-504":45919,"skein512-512":45920,"skein1024-8":45921,"skein1024-16":45922,"skein1024-24":45923,"skein1024-32":45924,"skein1024-40":45925,"skein1024-48":45926,"skein1024-56":45927,"skein1024-64":45928,"skein1024-72":45929,"skein1024-80":45930,"skein1024-88":45931,"skein1024-96":45932,"skein1024-104":45933,"skein1024-112":45934,"skein1024-120":45935,"skein1024-128":45936,"skein1024-136":45937,"skein1024-144":45938,"skein1024-152":45939,"skein1024-160":45940,"skein1024-168":45941,"skein1024-176":45942,"skein1024-184":45943,"skein1024-192":45944,"skein1024-200":45945,"skein1024-208":45946,"skein1024-216":45947,"skein1024-224":45948,"skein1024-232":45949,"skein1024-240":45950,"skein1024-248":45951,"skein1024-256":45952,"skein1024-264":45953,"skein1024-272":45954,"skein1024-280":45955,"skein1024-288":45956,"skein1024-296":45957,"skein1024-304":45958,"skein1024-312":45959,"skein1024-320":45960,"skein1024-328":45961,"skein1024-336":45962,"skein1024-344":45963,"skein1024-352":45964,"skein1024-360":45965,"skein1024-368":45966,"skein1024-376":45967,"skein1024-384":45968,"skein1024-392":45969,"skein1024-400":45970,"skein1024-408":45971,"skein1024-416":45972,"skein1024-424":45973,"skein1024-432":45974,"skein1024-440":45975,"skein1024-448":45976,"skein1024-456":45977,"skein1024-464":45978,"skein1024-472":45979,"skein1024-480":45980,"skein1024-488":45981,"skein1024-496":45982,"skein1024-504":45983,"skein1024-512":45984,"skein1024-520":45985,"skein1024-528":45986,"skein1024-536":45987,"skein1024-544":45988,"skein1024-552":45989,"skein1024-560":45990,"skein1024-568":45991,"skein1024-576":45992,"skein1024-584":45993,"skein1024-592":45994,"skein1024-600":45995,"skein1024-608":45996,"skein1024-616":45997,"skein1024-624":45998,"skein1024-632":45999,"skein1024-640":46e3,"skein1024-648":46001,"skein1024-656":46002,"skein1024-664":46003,"skein1024-672":46004,"skein1024-680":46005,"skein1024-688":46006,"skein1024-696":46007,"skein1024-704":46008,"skein1024-712":46009,"skein1024-720":46010,"skein1024-728":46011,"skein1024-736":46012,"skein1024-744":46013,"skein1024-752":46014,"skein1024-760":46015,"skein1024-768":46016,"skein1024-776":46017,"skein1024-784":46018,"skein1024-792":46019,"skein1024-800":46020,"skein1024-808":46021,"skein1024-816":46022,"skein1024-824":46023,"skein1024-832":46024,"skein1024-840":46025,"skein1024-848":46026,"skein1024-856":46027,"skein1024-864":46028,"skein1024-872":46029,"skein1024-880":46030,"skein1024-888":46031,"skein1024-896":46032,"skein1024-904":46033,"skein1024-912":46034,"skein1024-920":46035,"skein1024-928":46036,"skein1024-936":46037,"skein1024-944":46038,"skein1024-952":46039,"skein1024-960":46040,"skein1024-968":46041,"skein1024-976":46042,"skein1024-984":46043,"skein1024-992":46044,"skein1024-1000":46045,"skein1024-1008":46046,"skein1024-1016":46047,"skein1024-1024":46048,"poseidon-bls12_381-a2-fc1":46081,"poseidon-bls12_381-a2-fc1-sc":46082});Uy.exports={names:iT}});function aT(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,b=h.length;w!==b&&h[w]===0;)w++,p++;for(var E=(b-w)*d+1>>>0,S=new Uint8Array(E);w!==b;){for(var _=h[w],A=0,D=E-1;(_!==0||A<y)&&D!==-1;D--,A++)_+=256*S[D]>>>0,S[D]=_%a>>>0,_=_/a>>>0;if(_!==0)throw new Error("Non-zero carry");y=A,w++}for(var R=E-y;R!==E&&S[R]===0;)R++;for(var k=c.repeat(p);R<E;++R)k+=r.charAt(S[R]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var b=(h.length-p)*l+1>>>0,E=new Uint8Array(b);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var _=0,A=b-1;(S!==0||_<w)&&A!==-1;A--,_++)S+=a*E[A]>>>0,E[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=_,p++}if(h[p]!==" "){for(var D=b-w;D!==b&&E[D]===0;)D++;for(var R=new Uint8Array(y+(b-D)),k=y;D!==b;)R[k++]=E[D++];return R}}}function g(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:g}}var cT,lT,Fy,Vy=Ae(()=>{cT=aT,lT=cT,Fy=lT});var Noe,Ky,Gn,$y,Hy,Uo=Ae(()=>{Noe=new Uint8Array(0),Ky=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},Gn=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")},$y=r=>new TextEncoder().encode(r),Hy=r=>new TextDecoder().decode(r)});var Pp,Op,Lp,Wy,Bp,Ki,Mo,uT,dT,et,Zr=Ae(()=>{Vy();Uo();Pp=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},Op=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return Wy(this,e)}},Lp=class{constructor(e){this.decoders=e}or(e){return Wy(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},Wy=(r,e)=>new Lp({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),Bp=class{constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Pp(e,t,n),this.decoder=new Op(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},Ki=({name:r,prefix:e,encode:t,decode:n})=>new Bp(r,e,t,n),Mo=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:o}=Fy(t,e);return Ki({prefix:r,name:e,encode:n,decode:s=>Gn(o(s))})},uT=(r,e,t,n)=>{let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i},dT=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},et=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>Ki({prefix:e,name:r,encode(o){return dT(o,n,t)},decode(o){return uT(o,n,t,r)}})});var Up={};pe(Up,{identity:()=>fT});var fT,Gy=Ae(()=>{Zr();Uo();fT=Ki({prefix:"\0",name:"identity",encode:r=>Hy(r),decode:r=>$y(r)})});var Mp={};pe(Mp,{base2:()=>hT});var hT,zy=Ae(()=>{Zr();hT=et({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1})});var Fp={};pe(Fp,{base8:()=>pT});var pT,Yy=Ae(()=>{Zr();pT=et({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3})});var Vp={};pe(Vp,{base10:()=>mT});var mT,Qy=Ae(()=>{Zr();mT=Mo({prefix:"9",name:"base10",alphabet:"0123456789"})});var Kp={};pe(Kp,{base16:()=>gT,base16upper:()=>yT});var gT,yT,Xy=Ae(()=>{Zr();gT=et({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),yT=et({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4})});var $p={};pe($p,{base32:()=>$i,base32hex:()=>xT,base32hexpad:()=>RT,base32hexpadupper:()=>ST,base32hexupper:()=>vT,base32pad:()=>ET,base32padupper:()=>bT,base32upper:()=>wT,base32z:()=>_T});var $i,wT,ET,bT,xT,vT,RT,ST,_T,Hp=Ae(()=>{Zr();$i=et({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),wT=et({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),ET=et({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),bT=et({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),xT=et({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),vT=et({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),RT=et({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),ST=et({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),_T=et({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5})});var qp={};pe(qp,{base36:()=>AT,base36upper:()=>IT});var AT,IT,jy=Ae(()=>{Zr();AT=Mo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),IT=Mo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"})});var Wp={};pe(Wp,{base58btc:()=>fn,base58flickr:()=>DT});var fn,DT,Gp=Ae(()=>{Zr();fn=Mo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),DT=Mo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"})});var zp={};pe(zp,{base64:()=>TT,base64pad:()=>kT,base64url:()=>CT,base64urlpad:()=>NT});var TT,kT,CT,NT,Zy=Ae(()=>{Zr();TT=et({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),kT=et({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),CT=et({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),NT=et({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6})});var Yp={};pe(Yp,{base256emoji:()=>UT});function LT(r){return r.reduce((e,t)=>(e+=PT[t],e),"")}function BT(r){let e=[];for(let t of r){let n=OT[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Jy,PT,OT,UT,ew=Ae(()=>{Zr();Jy=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),PT=Jy.reduce((r,e,t)=>(r[t]=e,r),[]),OT=Jy.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);UT=Ki({prefix:"\u{1F680}",name:"base256emoji",encode:LT,decode:BT})});function nw(r,e,t){e=e||[],t=t||0;for(var n=t;r>=KT;)e[t++]=r&255|tw,r/=128;for(;r&VT;)e[t++]=r&255|tw,r>>>=7;return e[t]=r|0,nw.bytes=t-n+1,e}function Qp(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Qp.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&rw)<<o:(i&rw)*Math.pow(2,o),o+=7}while(i>=HT);return Qp.bytes=s-n,t}var MT,tw,FT,VT,KT,$T,HT,rw,qT,WT,GT,zT,YT,QT,XT,jT,ZT,JT,ek,tk,fc,ow=Ae(()=>{MT=nw,tw=128,FT=127,VT=~FT,KT=Math.pow(2,31);$T=Qp,HT=128,rw=127;qT=Math.pow(2,7),WT=Math.pow(2,14),GT=Math.pow(2,21),zT=Math.pow(2,28),YT=Math.pow(2,35),QT=Math.pow(2,42),XT=Math.pow(2,49),jT=Math.pow(2,56),ZT=Math.pow(2,63),JT=function(r){return r<qT?1:r<WT?2:r<GT?3:r<zT?4:r<YT?5:r<QT?6:r<XT?7:r<jT?8:r<ZT?9:10},ek={encode:MT,decode:$T,encodingLength:JT},tk=ek,fc=tk});var hc,Hi,qi,Id=Ae(()=>{ow();hc=(r,e=0)=>[fc.decode(r,e),fc.decode.bytes],Hi=(r,e,t=0)=>(fc.encode(r,e,t),e),qi=r=>fc.encodingLength(r)});var As,sw,iw,Wi,mc=Ae(()=>{Uo();Id();As=(r,e)=>{let t=e.byteLength,n=qi(r),o=n+qi(t),s=new Uint8Array(o+t);return Hi(r,s,0),Hi(t,s,n),s.set(e,o),new Wi(r,t,e,s)},sw=r=>{let e=Gn(r),[t,n]=hc(e),[o,s]=hc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Wi(t,o,i,e)},iw=(r,e)=>r===e?!0:r.code===e.code&&r.size===e.size&&Ky(r.bytes,e.bytes),Wi=class{constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}}});var jp,Xp,Zp=Ae(()=>{mc();jp=({name:r,code:e,encode:t})=>new Xp(r,e,t),Xp=class{constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?As(this.code,t):t.then(n=>As(this.code,n))}else throw Error("Unknown type, must be binary type")}}});var Jp={};pe(Jp,{sha256:()=>rk,sha512:()=>nk});var cw,rk,nk,lw=Ae(()=>{Zp();cw=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),rk=jp({name:"sha2-256",code:18,encode:cw("SHA-256")}),nk=jp({name:"sha2-512",code:19,encode:cw("SHA-512")})});var e3={};pe(e3,{identity:()=>ik});var uw,ok,dw,sk,ik,fw=Ae(()=>{Uo();mc();uw=0,ok="identity",dw=Gn,sk=r=>As(uw,dw(r)),ik={code:uw,name:ok,encode:dw,digest:sk}});var hw=Ae(()=>{Uo()});var Joe,ese,pw=Ae(()=>{Joe=new TextEncoder,ese=new TextDecoder});var kd,lk,uk,dk,gc,fk,mw,gw,Dd,Td,hk,pk,mk,yw=Ae(()=>{Id();mc();Gp();Hp();Uo();kd=class r{constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this.byteOffset=o.byteOffset,this.byteLength=o.byteLength,this.asCID=this,this._baseCache=new Map,Object.defineProperties(this,{byteOffset:Td,byteLength:Td,code:Dd,version:Dd,multihash:Dd,bytes:Dd,_baseCache:Td,asCID:Td})}toV0(){switch(this.version){case 0:return this;default:{let{code:e,multihash:t}=this;if(e!==gc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==fk)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=As(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}equals(e){return e&&this.code===e.code&&this.version===e.version&&iw(this.multihash,e.multihash)}toString(e){let{bytes:t,version:n,_baseCache:o}=this;switch(n){case 0:return uk(t,o,e||fn.encoder);default:return dk(t,o,e||$i.encoder)}}toJSON(){return{code:this.code,version:this.version,hash:this.multihash.bytes}}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return"CID("+this.toString()+")"}static isCID(e){return pk(/^0\.0/,mk),!!(e&&(e[gw]||e.asCID===e))}get toBaseEncodedString(){throw new Error("Deprecated, use .toString()")}get codec(){throw new Error('"codec" property is deprecated, use integer "code" property instead')}get buffer(){throw new Error("Deprecated .buffer property, use .bytes to get Uint8Array instead")}get multibaseName(){throw new Error('"multibaseName" property is deprecated')}get prefix(){throw new Error('"prefix" property is deprecated')}static asCID(e){if(e instanceof r)return e;if(e!=null&&e.asCID===e){let{version:t,code:n,multihash:o,bytes:s}=e;return new r(t,n,o,s||mw(t,n,o.bytes))}else if(e!=null&&e[gw]===!0){let{version:t,multihash:n,code:o}=e,s=sw(n);return r.create(t,o,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");switch(e){case 0:{if(t!==gc)throw new Error(`Version 0 CID must use dag-pb (code: ${gc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=mw(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,gc,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new Wi(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=hc(e.subarray(t));return t+=f,u},o=n(),s=gc;if(o===18?(o=0,t=0):o===1&&(s=n()),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=lk(e,t),s=r.decode(o);return s._baseCache.set(n,e),s}},lk=(r,e)=>{switch(r[0]){case"Q":{let t=e||fn;return[fn.prefix,t.decode(`${fn.prefix}${r}`)]}case fn.prefix:{let t=e||fn;return[fn.prefix,t.decode(r)]}case $i.prefix:{let t=e||$i;return[$i.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},uk=(r,e,t)=>{let{prefix:n}=t;if(n!==fn.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o},dk=(r,e,t)=>{let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o},gc=112,fk=18,mw=(r,e,t)=>{let n=qi(r),o=n+qi(e),s=new Uint8Array(o+t.byteLength);return Hi(r,s,0),Hi(e,s,n),s.set(t,o),s},gw=Symbol.for("@ipld/js-cid/CID"),Dd={writable:!1,configurable:!1,enumerable:!0},Td={writable:!1,enumerable:!1,configurable:!1},hk="0.0.0-dev",pk=(r,e)=>{if(r.test(hk))console.warn(e);else throw new Error(e)},mk=`CID.isCID(v) is deprecated and will be removed in the next major release.
|
|
4
4
|
Following code pattern:
|
|
5
5
|
|
|
6
6
|
if (CID.isCID(value)) {
|
|
@@ -14,12 +14,12 @@ if (cid) {
|
|
|
14
14
|
// Make sure to use cid instead of value
|
|
15
15
|
doSomethingWithCID(cid)
|
|
16
16
|
}
|
|
17
|
-
`});var Ib=De(()=>{Ab();Od();Vo();d3();xc()});var p3,bae,Db=De(()=>{tb();rb();nb();ob();sb();r3();ib();s3();ab();lb();wb();xb();vb();_b();Ib();p3={...Xp,...jp,...Zp,...Jp,...e3,...t3,...n3,...o3,...i3,...a3},bae={...f3,...h3}});function Zi(r){return globalThis.Buffer!=null?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r}var Ud=De(()=>{});function Fd(r=0){return globalThis.Buffer!=null&&globalThis.Buffer.allocUnsafe!=null?Zi(globalThis.Buffer.allocUnsafe(r)):new Uint8Array(r)}var m3=De(()=>{Ud()});function kb(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Tb,g3,hN,Vd,y3=De(()=>{Db();m3();Tb=kb("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),g3=kb("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Fd(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),hN={utf8:Tb,"utf-8":Tb,hex:p3.base16,latin1:g3,ascii:g3,binary:g3,...p3},Vd=hN});var Cb={};ge(Cb,{toString:()=>pN});function pN(r,e="utf8"){let t=Vd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("utf8"):t.encoder.encode(r).substring(1)}var Nb=De(()=>{y3()});var Pb={};ge(Pb,{fromString:()=>mN});function mN(r,e="utf8"){let t=Vd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?Zi(globalThis.Buffer.from(r,"utf-8")):t.decoder.decode(`${t.prefix}${r}`)}var Ob=De(()=>{y3();Ud()});var Lb={};ge(Lb,{concat:()=>gN});function gN(r,e){e||(e=r.reduce((o,s)=>o+s.length,0));let t=Fd(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return Zi(t)}var Bb=De(()=>{m3();Ud()});var b3=le((Nae,$b)=>{"use strict";var Mb=Ow(),Ji=Ww(),{names:_c}=Gw(),{toString:Kd}=(Nb(),Dc(Cb)),{fromString:yN}=(Ob(),Dc(Pb)),{concat:wN}=(Bb(),Dc(Lb)),ea={};for(let r in _c){let e=r;ea[_c[e]]=e}Object.freeze(ea);function bN(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Kd(r,"base16")}function EN(r){return yN(r,"base16")}function xN(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Kd(Mb.encode("base58btc",r)).slice(1)}function vN(r){let e=r instanceof Uint8Array?Kd(r):r;return Mb.decode("z"+e)}function Ub(r){if(!(r instanceof Uint8Array))throw new Error("multihash must be a Uint8Array");if(r.length<2)throw new Error("multihash too short. must be > 2 bytes.");let e=Ji.decode(r);if(!Vb(e))throw new Error(`multihash unknown function code: 0x${e.toString(16)}`);r=r.slice(Ji.decode.bytes);let t=Ji.decode(r);if(t<0)throw new Error(`multihash invalid length: ${t}`);if(r=r.slice(Ji.decode.bytes),r.length!==t)throw new Error(`multihash length inconsistent: 0x${Kd(r,"base16")}`);return{code:e,name:ea[e],length:t,digest:r}}function _N(r,e,t){if(!r||e===void 0)throw new Error("multihash encode requires at least two args: digest, code");let n=Fb(e);if(!(r instanceof Uint8Array))throw new Error("digest should be a Uint8Array");if(t==null&&(t=r.length),t&&r.length!==t)throw new Error("digest length should be equal to specified length.");let o=Ji.encode(n),s=Ji.encode(t);return wN([o,s,r],o.length+s.length+r.length)}function Fb(r){let e=r;if(typeof r=="string"){if(_c[r]===void 0)throw new Error(`Unrecognized hash function named: ${r}`);e=_c[r]}if(typeof e!="number")throw new Error(`Hash function code should be a number. Got: ${e}`);if(ea[e]===void 0&&!w3(e))throw new Error(`Unrecognized function code: ${e}`);return e}function w3(r){return r>0&&r<16}function Vb(r){return!!(w3(r)||ea[r])}function Kb(r){Ub(r)}function SN(r){return Kb(r),r.subarray(0,2)}$b.exports={names:_c,codes:ea,toHexString:bN,fromHexString:EN,toB58String:xN,fromB58String:vN,decode:Ub,encode:_N,coerceCode:Fb,isAppCode:w3,validate:Kb,prefix:SN,isValidCode:Vb}});var sE=le(Wd=>{"use strict";Object.defineProperty(Wd,"__esModule",{value:!0});var _3=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},qd=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new _3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Wd.EventIterator=qd;Wd.default=qd});var iE=le(Sc=>{"use strict";Object.defineProperty(Sc,"__esModule",{value:!0});var S3=sE();Sc.EventIterator=S3.EventIterator;function PN(r,e,t){return new S3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Sc.subscribe=PN;Sc.default=S3.EventIterator});var dP={};ge(dP,{createHelia:()=>lP,libp2pDefaults:()=>Yd});function lt(r){let e=new globalThis.AbortController;function t(){e.abort();for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function sx(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Ms=sx;function ix(r){return r[Symbol.asyncIterator]!=null}function J3(r){return r?.then!=null}function ax(r,e){if(ix(r))return async function*(){for await(let a of r){let c=e(a);J3(c)&&await c,yield a}}();let t=Ms(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();if(typeof e(n)?.then=="function")return async function*(){yield n;for await(let a of t){let c=e(a);J3(c)&&await c,yield a}}();let i=e;return function*(){yield n;for(let a of t)i(a),yield a}()}var qo=ax;var Sf={};ge(Sf,{base32:()=>at,base32hex:()=>mx,base32hexpad:()=>yx,base32hexpadupper:()=>wx,base32hexupper:()=>gx,base32pad:()=>hx,base32padupper:()=>px,base32upper:()=>i4,base32z:()=>bx});var yP=new Uint8Array(0);function e4(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function gn(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function t4(r){return new TextEncoder().encode(r)}function r4(r){return new TextDecoder().decode(r)}function cx(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,E=h.length;w!==E&&h[w]===0;)w++,p++;for(var b=(E-w)*d+1>>>0,S=new Uint8Array(b);w!==E;){for(var R=h[w],A=0,D=b-1;(R!==0||A<y)&&D!==-1;D--,A++)R+=256*S[D]>>>0,S[D]=R%a>>>0,R=R/a>>>0;if(R!==0)throw new Error("Non-zero carry");y=A,w++}for(var _=b-y;_!==b&&S[_]===0;)_++;for(var k=c.repeat(p);_<b;++_)k+=r.charAt(S[_]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var E=(h.length-p)*l+1>>>0,b=new Uint8Array(E);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var R=0,A=E-1;(S!==0||R<w)&&A!==-1;A--,R++)S+=a*b[A]>>>0,b[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=R,p++}if(h[p]!==" "){for(var D=E-w;D!==E&&b[D]===0;)D++;for(var _=new Uint8Array(y+(E-D)),k=y;D!==E;)_[k++]=b[D++];return _}}}function m(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:m}}var lx=cx,ux=lx,o4=ux;var Ef=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},xf=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return s4(this,e)}},vf=class{decoders;constructor(e){this.decoders=e}or(e){return s4(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function s4(r,e){return new vf({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var _f=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Ef(e,t,n),this.decoder=new xf(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Us({name:r,prefix:e,encode:t,decode:n}){return new _f(r,e,t,n)}function Qn({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=o4(t,r);return Us({prefix:e,name:r,encode:n,decode:s=>gn(o(s))})}function dx(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function fx(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function Ge({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Us({prefix:e,name:r,encode(o){return fx(o,n,t)},decode(o){return dx(o,n,t,r)}})}var at=Ge({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),i4=Ge({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),hx=Ge({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),px=Ge({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),mx=Ge({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),gx=Ge({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),yx=Ge({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),wx=Ge({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),bx=Ge({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Rf={};ge(Rf,{base58btc:()=>ae,base58flickr:()=>Ex});var ae=Qn({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Ex=Qn({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var ur={};ge(ur,{Digest:()=>Wo,create:()=>kr,decode:()=>Cr,equals:()=>If});var xx=l4,a4=128,vx=127,_x=~vx,Sx=Math.pow(2,31);function l4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Sx;)e[t++]=r&255|a4,r/=128;for(;r&_x;)e[t++]=r&255|a4,r>>>=7;return e[t]=r|0,l4.bytes=t-n+1,e}var Rx=Af,Ax=128,c4=127;function Af(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Af.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&c4)<<o:(i&c4)*Math.pow(2,o),o+=7}while(i>=Ax);return Af.bytes=s-n,t}var Ix=Math.pow(2,7),Dx=Math.pow(2,14),Tx=Math.pow(2,21),kx=Math.pow(2,28),Cx=Math.pow(2,35),Nx=Math.pow(2,42),Px=Math.pow(2,49),Ox=Math.pow(2,56),Lx=Math.pow(2,63),Bx=function(r){return r<Ix?1:r<Dx?2:r<Tx?3:r<kx?4:r<Cx?5:r<Nx?6:r<Px?7:r<Ox?8:r<Lx?9:10},Mx={encode:xx,decode:Rx,encodingLength:Bx},Ux=Mx,ia=Ux;function aa(r,e=0){return[ia.decode(r,e),ia.decode.bytes]}function Fs(r,e,t=0){return ia.encode(r,e,t),e}function Vs(r){return ia.encodingLength(r)}function kr(r,e){let t=e.byteLength,n=Vs(r),o=n+Vs(t),s=new Uint8Array(o+t);return Fs(r,s,0),Fs(t,s,n),s.set(e,o),new Wo(r,t,e,s)}function Cr(r){let e=gn(r),[t,n]=aa(e),[o,s]=aa(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Wo(t,o,i,e)}function If(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&e4(r.bytes,t.bytes)}}var Wo=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function u4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Vx(t,Df(r),e??ae.encoder);default:return Kx(t,Df(r),e??at.encoder)}}var d4=new WeakMap;function Df(r){let e=d4.get(r);if(e==null){let t=new Map;return d4.set(r,t),t}return e}var oe=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==ca)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==$x)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=kr(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&If(e.multihash,n.multihash)}toString(e){return u4(this,e)}toJSON(){return{"/":u4(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new r(n,o,s,i??f4(n,o,s.bytes))}else if(t[Hx]===!0){let{version:n,multihash:o,code:s}=t,i=Cr(o);return r.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==ca)throw new Error(`Version 0 CID must use dag-pb (code: ${ca}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=f4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ca,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new Wo(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=aa(e.subarray(t));return t+=f,u},o=n(),s=ca;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=Fx(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Df(s).set(n,e),s}};function Fx(r,e){switch(r[0]){case"Q":{let t=e??ae;return[ae.prefix,t.decode(`${ae.prefix}${r}`)]}case ae.prefix:{let t=e??ae;return[ae.prefix,t.decode(r)]}case at.prefix:{let t=e??at;return[at.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function Vx(r,e,t){let{prefix:n}=t;if(n!==ae.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function Kx(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var ca=112,$x=18;function f4(r,e,t){let n=Vs(r),o=n+Vs(e),s=new Uint8Array(o+t.byteLength);return Fs(r,s,0),Fs(e,s,n),s.set(t,o),s}var Hx=Symbol.for("@ipld/js-cid/CID");var Tf=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Jr(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Tf({name:e,metrics:t}):n=new Map,n}var h4=Symbol.for("@libp2p/connection");var en=Symbol.for("@libp2p/content-routing");var zo=Symbol.for("@libp2p/peer-discovery");var kf=Symbol.for("@libp2p/peer-id");function Ks(r){return r!=null&&!!r[kf]}var tn=Symbol.for("@libp2p/peer-routing");var p4="keep-alive";var rn=Symbol.for("@libp2p/transport");var Xn;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Xn||(Xn={}));var Nr=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},g=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}},kc=class extends AggregateError{code;props;constructor(e,t,n,o){super(e,t),this.code=n,this.name=o?.name??"AggregateCodeError",this.props=o??{}}};var yn="ERR_TIMEOUT";var m4="ERR_NOT_FOUND",Go="ERR_INVALID_MESSAGE";var ye=(r,...e)=>{try{[...e]}catch{}};var Ce=class extends EventTarget{#e=new Map;constructor(){super(),ye(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new mt(e,t))}},Cf=class extends Event{detail;constructor(e,t){super(e,t),this.detail=t?.detail}},mt=globalThis.CustomEvent??Cf;function Cc(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function jn(...r){let e=[];for(let t of r)Cc(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Zn(...r){let e=[];for(let t of r)Cc(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var Lf={};ge(Lf,{sha256:()=>Re,sha512:()=>Of});function Pf({name:r,code:e,encode:t}){return new Nf(r,e,t)}var Nf=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?kr(this.code,t):t.then(n=>kr(this.code,n))}else throw Error("Unknown type, must be binary type")}};function y4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Re=Pf({name:"sha2-256",code:18,encode:y4("SHA-256")}),Of=Pf({name:"sha2-512",code:19,encode:y4("SHA-512")});var l8=Ne(C4(),1);var Xt=Ne(B4(),1);var Uf={};ge(Uf,{base64:()=>dr,base64pad:()=>mv,base64url:()=>Mf,base64urlpad:()=>gv});var dr=Ge({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),mv=Ge({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Mf=Ge({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),gv=Ge({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});Xt.default.formatters.b=r=>r==null?"undefined":ae.baseEncode(r);Xt.default.formatters.t=r=>r==null?"undefined":at.baseEncode(r);Xt.default.formatters.m=r=>r==null?"undefined":dr.baseEncode(r);Xt.default.formatters.p=r=>r==null?"undefined":r.toString();Xt.default.formatters.c=r=>r==null?"undefined":r.toString();Xt.default.formatters.k=r=>r==null?"undefined":r.toString();Xt.default.formatters.a=r=>r==null?"undefined":r.toString();function yv(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function Jn(){return{forComponent(r){return Pt(r)}}}function Pt(r){let e=yv(`${r}:trace`);return Xt.default.enabled(`${r}:trace`)&&Xt.default.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=(0,Xt.default)(`${r}:trace`)),Object.assign((0,Xt.default)(r),{error:(0,Xt.default)(`${r}:error`),trace:e})}function j(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var Qo=class{_refCounter;cid;priority;wantType;constructor(e,t,n){this._refCounter=1,this.cid=e,this.priority=t??1,this.wantType=n}inc(){this._refCounter+=1}dec(){this._refCounter=Math.max(0,this._refCounter-1)}hasRefs(){return this._refCounter>0}get[Symbol.toStringTag](){return`WantlistEntry <key: ${this.cid.toString(ae)}, priority: ${this.priority}, refs: ${this._refCounter}>`}equals(e){return this._refCounter===e._refCounter&&this.cid.equals(e.cid)&&this.priority===e.priority&&this.wantType===e.wantType}};var eo=class{entry;cancel;sendDontHave;constructor(e,t,n,o,s){this.entry=new Qo(e,t,n),this.cancel=!!o,this.sendDontHave=!!s}get cid(){return this.entry.cid}set cid(e){this.entry.cid=e}get priority(){return this.entry.priority}set priority(e){this.entry.priority=e}get wantType(){return this.entry.wantType}set wantType(e){this.entry.wantType=e}get[Symbol.toStringTag](){return`BitswapMessageEntry ${this.cid.toString(ae)} <cancel: ${this.cancel}, priority: ${this.priority}>`}equals(e){return this.cancel===e.cancel&&this.sendDontHave===e.sendDontHave&&this.wantType===e.wantType&&this.entry.equals(e.entry)}};var fr=(r,e)=>{let t=["bitswap"];return e!=null&&t.push(e),r!=null&&t.push(`${r.toString().slice(0,8)}`),Pt(t.join(":"))};var Oc=(r,e)=>{if(r.size!==e.size)return!1;for(let[t,n]of r){let o=e.get(t);if(o===void 0||n instanceof Uint8Array&&o instanceof Uint8Array&&!j(n,o)||n instanceof eo&&o instanceof eo&&!n.equals(o))return!1}return!0};var la=Ne(z4(),1);function Cv(r){let e=new Uint8Array(r.reduce((n,o)=>n+la.default.encodingLength(o),0)),t=0;for(let n of r)e=la.encode(n,e,t),t+=la.default.encodingLength(n);return e}var G4=Cv;function et(r=0){return new Uint8Array(r)}function ze(r=0){return new Uint8Array(r)}var Nv=Math.pow(2,7),Pv=Math.pow(2,14),Ov=Math.pow(2,21),Kf=Math.pow(2,28),$f=Math.pow(2,35),Hf=Math.pow(2,42),qf=Math.pow(2,49),Te=128,It=127;function Ke(r){if(r<Nv)return 1;if(r<Pv)return 2;if(r<Ov)return 3;if(r<Kf)return 4;if(r<$f)return 5;if(r<Hf)return 6;if(r<qf)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Wf(r,e,t=0){switch(Ke(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Lv(r,e,t=0){switch(Ke(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function zf(r,e){let t=r[e],n=0;if(n+=t&It,t<Te||(t=r[e+1],n+=(t&It)<<7,t<Te)||(t=r[e+2],n+=(t&It)<<14,t<Te)||(t=r[e+3],n+=(t&It)<<21,t<Te)||(t=r[e+4],n+=(t&It)*Kf,t<Te)||(t=r[e+5],n+=(t&It)*$f,t<Te)||(t=r[e+6],n+=(t&It)*Hf,t<Te)||(t=r[e+7],n+=(t&It)*qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Bv(r,e){let t=r.get(e),n=0;if(n+=t&It,t<Te||(t=r.get(e+1),n+=(t&It)<<7,t<Te)||(t=r.get(e+2),n+=(t&It)<<14,t<Te)||(t=r.get(e+3),n+=(t&It)<<21,t<Te)||(t=r.get(e+4),n+=(t&It)*Kf,t<Te)||(t=r.get(e+5),n+=(t&It)*$f,t<Te)||(t=r.get(e+6),n+=(t&It)*Hf,t<Te)||(t=r.get(e+7),n+=(t&It)*qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Ye(r,e,t=0){return e==null&&(e=ze(Ke(r))),e instanceof Uint8Array?Wf(r,e,t):Lv(r,e,t)}function jt(r,e=0){return r instanceof Uint8Array?zf(r,e):Bv(r,e)}var Gf=new Float32Array([-0]),to=new Uint8Array(Gf.buffer);function Y4(r,e,t){Gf[0]=r,e[t]=to[0],e[t+1]=to[1],e[t+2]=to[2],e[t+3]=to[3]}function Q4(r,e){return to[0]=r[e],to[1]=r[e+1],to[2]=r[e+2],to[3]=r[e+3],Gf[0]}var Yf=new Float64Array([-0]),Dt=new Uint8Array(Yf.buffer);function X4(r,e,t){Yf[0]=r,e[t]=Dt[0],e[t+1]=Dt[1],e[t+2]=Dt[2],e[t+3]=Dt[3],e[t+4]=Dt[4],e[t+5]=Dt[5],e[t+6]=Dt[6],e[t+7]=Dt[7]}function j4(r,e){return Dt[0]=r[e],Dt[1]=r[e+1],Dt[2]=r[e+2],Dt[3]=r[e+3],Dt[4]=r[e+4],Dt[5]=r[e+5],Dt[6]=r[e+6],Dt[7]=r[e+7],Yf[0]}var Mv=BigInt(Number.MAX_SAFE_INTEGER),Uv=BigInt(Number.MIN_SAFE_INTEGER),Zt=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return Xo;if(e<Mv&&e>Uv)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>Z4&&(o=0n,++n>Z4&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Xo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):Xo}},Xo=new Zt(0,0);Xo.toBigInt=function(){return 0n};Xo.zzEncode=Xo.zzDecode=function(){return this};Xo.length=function(){return 1};var Z4=4294967296n;function J4(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function e8(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function Qf(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Pr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Lc(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Xf=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Pr(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Pr(this,4);return Lc(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Pr(this,4);return Lc(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Pr(this,4);let e=Q4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Pr(this,4);let e=j4(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Pr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return e8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Pr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Pr(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new Zt(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Pr(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Pr(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Pr(this,8);let e=Lc(this.buf,this.pos+=4),t=Lc(this.buf,this.pos+=4);return new Zt(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=zf(this.buf,this.pos);return this.pos+=Ke(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function jf(r){return new Xf(r instanceof Uint8Array?r:r.subarray())}function J(r,e,t){let n=jf(r);return e.decode(n,void 0,t)}var Zf={};ge(Zf,{base10:()=>Fv});var Fv=Qn({prefix:"9",name:"base10",alphabet:"0123456789"});var Jf={};ge(Jf,{base16:()=>Vv,base16upper:()=>Kv});var Vv=Ge({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Kv=Ge({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var eh={};ge(eh,{base2:()=>$v});var $v=Ge({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var th={};ge(th,{base256emoji:()=>Gv});var r8=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Hv=r8.reduce((r,e,t)=>(r[t]=e,r),[]),qv=r8.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function Wv(r){return r.reduce((e,t)=>(e+=Hv[t],e),"")}function zv(r){let e=[];for(let t of r){let n=qv[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Gv=Us({prefix:"\u{1F680}",name:"base256emoji",encode:Wv,decode:zv});var rh={};ge(rh,{base36:()=>ro,base36upper:()=>Yv});var ro=Qn({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Yv=Qn({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var nh={};ge(nh,{base8:()=>Qv});var Qv=Ge({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var oh={};ge(oh,{identity:()=>Xv});var Xv=Us({prefix:"\0",name:"identity",encode:r=>r4(r),decode:r=>t4(r)});var MO=new TextEncoder,UO=new TextDecoder;var n8=512;var Bc=85;var ih={};ge(ih,{identity:()=>hr});var s8=0,jv="identity",i8=gn;function Zv(r){return kr(s8,i8(r))}var hr={code:s8,name:jv,encode:i8,digest:Zv};var pr={...oh,...eh,...nh,...Zf,...Jf,...Sf,...rh,...Rf,...Uf,...th},XO={...Lf,...ih};function c8(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var a8=c8("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),ah=c8("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=ze(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),Jv={utf8:a8,"utf-8":a8,hex:pr.base16,latin1:ah,ascii:ah,binary:ah,...pr},Mc=Jv;function B(r,e="utf8"){let t=Mc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function ch(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return ze(i);o+i>e&&(n=ze(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var jo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function lh(){}var dh=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},e_=ch();function t_(r){return globalThis.Buffer!=null?ze(r):e_(r)}var da=class{len;head;tail;states;constructor(){this.len=0,this.head=new jo(lh,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new jo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new fh((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Uc,10,Zt.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Zt.fromBigInt(e);return this._push(Uc,t.length(),t)}uint64Number(e){return this._push(Wf,Ke(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=Zt.fromBigInt(e).zzEncode();return this._push(Uc,t.length(),t)}sint64Number(e){let t=Zt.fromNumber(e).zzEncode();return this._push(Uc,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(uh,1,e?1:0)}fixed32(e){return this._push(ua,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Zt.fromBigInt(e);return this._push(ua,4,t.lo)._push(ua,4,t.hi)}fixed64Number(e){let t=Zt.fromNumber(e);return this._push(ua,4,t.lo)._push(ua,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(Y4,4,e)}double(e){return this._push(X4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(uh,1,0):this.uint32(t)._push(n_,t,e)}string(e){let t=J4(e);return t!==0?this.uint32(t)._push(Qf,t,e):this._push(uh,1,0)}fork(){return this.states=new dh(this),this.head=this.tail=new jo(lh,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new jo(lh,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=t_(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function uh(r,e,t){e[t]=r&255}function r_(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var fh=class extends jo{next;constructor(e,t){super(r_,e,t),this.next=void 0}};function Uc(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function ua(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function n_(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(da.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(o_,e,r),this},da.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(s_,e,r),this});function o_(r,e,t){e.set(r,t)}function s_(r,e,t){r.length<40?Qf(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(B(r),t)}function hh(){return new da}function ee(r,e){let t=hh();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Ws;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(Ws||(Ws={}));function Fc(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function $e(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return Fc("enum",Ws.VARINT,t,n)}function te(r,e){return Fc("message",Ws.LENGTH_DELIMITED,r,e)}var fa=class extends Error{code;constructor(e,t,n){super(e,n),this.code=t}};var Ut;(function(r){let e;(function(a){let c;(function(f){f.Block="Block",f.Have="Have"})(c=a.WantType||(a.WantType={}));let l;(function(f){f[f.Block=0]="Block",f[f.Have=1]="Have"})(l||(l={})),function(f){f.codec=()=>$e(l)}(c=a.WantType||(a.WantType={}));let d;(function(f){let m;f.codec=()=>(m==null&&(m=te((h,p,y={})=>{y.lengthDelimited!==!1&&p.fork(),h.block!=null&&h.block.byteLength>0&&(p.uint32(10),p.bytes(h.block)),h.priority!=null&&h.priority!==0&&(p.uint32(16),p.int32(h.priority)),h.cancel!=null&&h.cancel!==!1&&(p.uint32(24),p.bool(h.cancel)),h.wantType!=null&&l[h.wantType]!==0&&(p.uint32(32),r.Wantlist.WantType.codec().encode(h.wantType,p)),h.sendDontHave!=null&&h.sendDontHave!==!1&&(p.uint32(40),p.bool(h.sendDontHave)),y.lengthDelimited!==!1&&p.ldelim()},(h,p)=>{let y={block:new Uint8Array(0),priority:0,cancel:!1,wantType:c.Block,sendDontHave:!1},w=p==null?h.len:h.pos+p;for(;h.pos<w;){let E=h.uint32();switch(E>>>3){case 1:y.block=h.bytes();break;case 2:y.priority=h.int32();break;case 3:y.cancel=h.bool();break;case 4:y.wantType=r.Wantlist.WantType.codec().decode(h);break;case 5:y.sendDontHave=h.bool();break;default:h.skipType(E&7);break}}return y})),m),f.encode=h=>ee(h,f.codec()),f.decode=h=>J(h,f.codec())})(d=a.Entry||(a.Entry={}));let u;a.codec=()=>(u==null&&(u=te((f,m,h={})=>{if(h.lengthDelimited!==!1&&m.fork(),f.entries!=null)for(let p of f.entries)m.uint32(10),r.Wantlist.Entry.codec().encode(p,m);f.full!=null&&f.full!==!1&&(m.uint32(16),m.bool(f.full)),h.lengthDelimited!==!1&&m.ldelim()},(f,m)=>{let h={entries:[],full:!1},p=m==null?f.len:f.pos+m;for(;f.pos<p;){let y=f.uint32();switch(y>>>3){case 1:h.entries.push(r.Wantlist.Entry.codec().decode(f,f.uint32()));break;case 2:h.full=f.bool();break;default:f.skipType(y&7);break}}return h})),u),a.encode=f=>ee(f,a.codec()),a.decode=f=>J(f,a.codec())})(e=r.Wantlist||(r.Wantlist={}));let t;(function(a){let c;a.codec=()=>(c==null&&(c=te((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.prefix!=null&&l.prefix.byteLength>0&&(d.uint32(10),d.bytes(l.prefix)),l.data!=null&&l.data.byteLength>0&&(d.uint32(18),d.bytes(l.data)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={prefix:new Uint8Array(0),data:new Uint8Array(0)},f=d==null?l.len:l.pos+d;for(;l.pos<f;){let m=l.uint32();switch(m>>>3){case 1:u.prefix=l.bytes();break;case 2:u.data=l.bytes();break;default:l.skipType(m&7);break}}return u})),c),a.encode=l=>ee(l,a.codec()),a.decode=l=>J(l,a.codec())})(t=r.Block||(r.Block={}));let n;(function(a){a.Have="Have",a.DontHave="DontHave"})(n=r.BlockPresenceType||(r.BlockPresenceType={}));let o;(function(a){a[a.Have=0]="Have",a[a.DontHave=1]="DontHave"})(o||(o={})),function(a){a.codec=()=>$e(o)}(n=r.BlockPresenceType||(r.BlockPresenceType={}));let s;(function(a){let c;a.codec=()=>(c==null&&(c=te((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.cid!=null&&l.cid.byteLength>0&&(d.uint32(10),d.bytes(l.cid)),l.type!=null&&o[l.type]!==0&&(d.uint32(16),r.BlockPresenceType.codec().encode(l.type,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={cid:new Uint8Array(0),type:n.Have},f=d==null?l.len:l.pos+d;for(;l.pos<f;){let m=l.uint32();switch(m>>>3){case 1:u.cid=l.bytes();break;case 2:u.type=r.BlockPresenceType.codec().decode(l);break;default:l.skipType(m&7);break}}return u})),c),a.encode=l=>ee(l,a.codec()),a.decode=l=>J(l,a.codec())})(s=r.BlockPresence||(r.BlockPresence={}));let i;r.codec=()=>(i==null&&(i=te((a,c,l={})=>{if(l.lengthDelimited!==!1&&c.fork(),a.wantlist!=null&&(c.uint32(10),r.Wantlist.codec().encode(a.wantlist,c)),a.blocks!=null)for(let d of a.blocks)c.uint32(18),c.bytes(d);if(a.payload!=null)for(let d of a.payload)c.uint32(26),r.Block.codec().encode(d,c);if(a.blockPresences!=null)for(let d of a.blockPresences)c.uint32(34),r.BlockPresence.codec().encode(d,c);a.pendingBytes!=null&&a.pendingBytes!==0&&(c.uint32(40),c.int32(a.pendingBytes)),l.lengthDelimited!==!1&&c.ldelim()},(a,c)=>{let l={blocks:[],payload:[],blockPresences:[],pendingBytes:0},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let u=a.uint32();switch(u>>>3){case 1:l.wantlist=r.Wantlist.codec().decode(a,a.uint32());break;case 2:l.blocks.push(a.bytes());break;case 3:l.payload.push(r.Block.codec().decode(a,a.uint32()));break;case 4:l.blockPresences.push(r.BlockPresence.codec().decode(a,a.uint32()));break;case 5:l.pendingBytes=a.int32();break;default:a.skipType(u&7);break}}return l})),i),r.encode=a=>ee(a,r.codec()),r.decode=a=>J(a,r.codec())})(Ut||(Ut={}));var Tt=class r{static Entry=eo;static WantType={Block:Ut.Wantlist.WantType.Block,Have:Ut.Wantlist.WantType.Have};static BlockPresenceType={Have:Ut.BlockPresenceType.Have,DontHave:Ut.BlockPresenceType.DontHave};static deserialize=async(e,t)=>{let n=Ut.decode(e),o=n.wantlist?.full===!0,s=new r(o);return n.wantlist?.entries.forEach(i=>{if(i.block==null)return;let a=oe.decode(i.block);s.addEntry(a,i.priority??0,i.wantType,!!i.cancel,!!i.sendDontHave)}),n.blockPresences.forEach(i=>{if(i.cid==null)return;let a=oe.decode(i.cid);i.type===r.BlockPresenceType.Have?s.addHave(a):s.addDontHave(a)}),n.blocks.length>0?(await Promise.all(n.blocks.map(async i=>{let a=await Re.digest(i),c=oe.createV0(a);s.addBlock(c,i)})),s):(n.payload.length>0&&(await Promise.all(n.payload.map(async i=>{if(i.prefix==null||i.data==null)return;let a=(0,l8.default)(i.prefix),c=a[0],l=a[1],d=a[2],u=d===Re.code?Re:await t?.getHasher(d);if(u==null)throw new g("Unknown hash algorithm","ERR_UNKNOWN_HASH_ALG");let f=await u.digest(i.data),m=oe.create(c,l,f);s.addBlock(m,i.data)})),s.setPendingBytes(n.pendingBytes)),s)};static blockPresenceSize=e=>e.bytes.length+1;full;wantlist;blocks;blockPresences;pendingBytes;constructor(e){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}get empty(){return this.blocks.size===0&&this.wantlist.size===0&&this.blockPresences.size===0}addEntry(e,t,n,o,s){n==null&&(n=r.WantType.Block);let i=e.toString(ae),a=this.wantlist.get(i);a!=null?(a.wantType===n&&(a.priority=t),o===!0&&(a.cancel=!!o),s===!0&&(a.sendDontHave=!!s),n===r.WantType.Block&&a.wantType===r.WantType.Have&&(a.wantType=n)):this.wantlist.set(i,new eo(e,t,n,o,s))}addBlock(e,t){let n=e.toString(ae);this.blocks.set(n,t)}addHave(e){let t=e.toString(ae);this.blockPresences.has(t)||this.blockPresences.set(t,r.BlockPresenceType.Have)}addDontHave(e){let t=e.toString(ae);this.blockPresences.has(t)||this.blockPresences.set(t,r.BlockPresenceType.DontHave)}cancel(e){let t=e.toString(ae);this.wantlist.delete(t),this.addEntry(e,0,r.WantType.Block,!0,!1)}setPendingBytes(e){this.pendingBytes=e}serializeToBitswap100(){return Ut.encode({wantlist:{entries:Array.from(this.wantlist.values()).map(e=>({block:e.cid.bytes,priority:Number(e.priority),cancel:!!e.cancel,wantType:Ut.Wantlist.WantType.Block,sendDontHave:!1})),full:!!this.full},blocks:Array.from(this.blocks.values())})}serializeToBitswap110(){let e={wantlist:{entries:Array.from(this.wantlist.values()).map(t=>({block:t.cid.bytes,priority:Number(t.priority),wantType:t.wantType,cancel:!!t.cancel,sendDontHave:!!t.sendDontHave})),full:!!this.full},blockPresences:[],payload:[],pendingBytes:this.pendingBytes,blocks:[]};for(let[t,n]of this.blocks.entries()){let o=oe.parse(t),s=o.version,i=o.code,a=o.multihash.code,c=o.multihash.digest.length,l=G4([s,i,a,c]);e.payload.push({prefix:l,data:n})}for(let[t,n]of this.blockPresences)e.blockPresences.push({cid:oe.parse(t).bytes,type:n});return this.pendingBytes>0&&(e.pendingBytes=this.pendingBytes),Ut.encode(e)}equals(e){return!(this.full!==e.full||this.pendingBytes!==e.pendingBytes||!Oc(this.wantlist,e.wantlist)||!Oc(this.blocks,e.blocks)||!Oc(this.blockPresences,e.blockPresences))}get[Symbol.toStringTag](){let e=Array.from(this.wantlist.keys()),t=Array.from(this.blocks.keys());return`BitswapMessage <full: ${this.full}, list: ${e}, blocks: ${t}>`}};var u8={Block:Ut.Wantlist.WantType.Block,Have:Ut.Wantlist.WantType.Have},i_=(r,e)=>Array.prototype.slice.call(e,0).sort((t,n)=>{let o=r(t),s=r(n);return o<s?-1:o>s?1:0}),no=class{static Entry=Qo;set;_stats;constructor(e,t){this.set=t!=null?Jr({name:"ipfs_bitswap_wantlist",metrics:t.metrics}):new Map,this._stats=e}get length(){return this.set.size}add(e,t,n){let o=e.toString(ae),s=this.set.get(o);s!=null?(s.inc(),s.priority=t,s.wantType===u8.Have&&n===u8.Block&&(s.wantType=n)):(this.set.set(o,new Qo(e,t,n)),this._stats!=null&&this._stats.push(void 0,"wantListSize",1))}remove(e){let t=e.toString(ae),n=this.set.get(t);n!=null&&(n.dec(),!n.hasRefs()&&(this.set.delete(t),this._stats!=null&&this._stats.push(void 0,"wantListSize",-1)))}removeForce(e){this.set.has(e)&&this.set.delete(e)}forEach(e){this.set.forEach(e)}entries(){return this.set.entries()}sortedEntries(){return new Map(i_(e=>e[1].key,Array.from(this.set.entries())))}contains(e){let t=e.toString(ae);return this.set.has(t)}get(e){let t=e.toString(ae);return this.set.get(t)}};var Vc=class{partner;wantlist;exchangeCount;accounting;lastExchange;constructor(e){this.partner=e,this.wantlist=new no,this.exchangeCount=0,this.accounting={bytesSent:0,bytesRecv:0}}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.accounting.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.accounting.bytesRecv+=e}wants(e,t,n){this.wantlist.add(e,t,n)}cancelWant(e){this.wantlist.remove(e)}wantlistContains(e){return this.wantlist.get(e)}debtRatio(){return this.accounting.bytesSent/(this.accounting.bytesRecv+1)}};var ha=class extends Map{_cmp;_keys;constructor(e,t){super(),this._cmp=t??this._defaultSort,this._keys=[];for(let[n,o]of e??[])this.set(n,o)}update(e){if(e<0||e>=this._keys.length)return;let t=this._keys[e];this._keys.splice(e,1);let n=this._find(t);this._keys.splice(n,0,t)}set(e,t){if(this.has(e)){let o=this.indexOf(e);this._keys.splice(o,1)}super.set(e,t);let n=this._find(e);return this._keys.splice(n,0,e),this}clear(){super.clear(),this._keys=[]}delete(e){if(!this.has(e))return!1;let t=this.indexOf(e);return this._keys.splice(t,1),super.delete(e)}indexOf(e){if(!this.has(e))return-1;let t=this._find(e);if(this._keys[t]===e)return t;for(let n=1;n<this._keys.length;n++){if(this._keys[t+n]===e)return t+n;if(this._keys[t-n]===e)return t-n}return-1}_find(e){let t=0,n=this._keys.length;for(;t<n;){let o=t+n>>>1,s=this._kCmp(this._keys[o],e);if(s<0)t=o+1;else if(s>0)n=o;else return o}return t}*keys(){for(let e of this._keys)yield e}*values(){for(let e of this._keys)yield this.get(e)}*entries(){for(let e of this._keys)yield[e,this.get(e)]}*[Symbol.iterator](){yield*this.entries()}forEach(e,t=this){if(e!=null)for(let n of this._keys){let o=this.get(n);if(o==null)throw new Error("Value cannot be undefined");e.apply(t,[[n,o]])}}_defaultSort(e,t){return e[0]<t[0]?-1:t[0]<e[0]?1:0}_kCmp(e,t){return this._cmp([e,this.get(e)],[t,this.get(t)])}};var a_={hasNewInfo(){return!1},merge(){}},Kc=class{_taskMerger;_byPeer;constructor(e=a_){this._taskMerger=e,this._byPeer=new ha([],$c.compare)}pushTasks(e,t){let n=this._byPeer.get(e.toString());n==null&&(n=new $c(e,this._taskMerger)),n.pushTasks(t),this._byPeer.set(e.toString(),n)}popTasks(e){let t=this._head();if(t===void 0)return{tasks:[],pendingSize:0};let{tasks:n,pendingSize:o}=t.popTasks(e);if(n.length===0)return{tasks:n,pendingSize:o};let s=t.peerId;return t.isIdle()?this._byPeer.delete(s.toString()):this._byPeer.update(0),{peerId:s,tasks:n,pendingSize:o}}_head(){if(this._byPeer.size!==0)for(let[,e]of this._byPeer)return e}remove(e,t){this._byPeer.get(t.toString())?.remove(e)}tasksDone(e,t){let n=this._byPeer.get(e.toString());if(n==null)return;let o=this._byPeer.indexOf(e.toString());for(let s of t)n.taskDone(s);this._byPeer.update(o)}},$c=class{peerId;_taskMerger;_activeTotalSize;_pending;_active;constructor(e,t){this.peerId=e,this._taskMerger=t,this._activeTotalSize=0,this._pending=new ph,this._active=new Set}pushTasks(e){for(let t of e)this._pushTask(t)}_pushTask(e){if(!this._taskHasMoreInfoThanActiveTasks(e))return;let t=this._pending.get(e.topic);if(t!=null){e.priority>t.priority&&this._pending.updatePriority(e.topic,e.priority),this._taskMerger.merge(e,t);return}this._pending.add(e)}_taskHasMoreInfoThanActiveTasks(e){let t=[];for(let n of this._active)n.topic===e.topic&&t.push(n);return t.length===0?!0:this._taskMerger.hasNewInfo(e,t)}popTasks(e){let t=0,n=[],o=this._pending.tasks();for(let s=0;s<o.length&&t<e;s++){let i=o[s];n.push(i),t+=i.size,this._pending.delete(i.topic),this._activeTotalSize+=i.size,this._active.add(i)}return{tasks:n,pendingSize:this._pending.totalSize}}taskDone(e){this._active.has(e)&&(this._activeTotalSize-=e.size,this._active.delete(e))}remove(e){this._pending.delete(e)}isIdle(){return this._pending.length===0&&this._active.size===0}static compare(e,t){return e[1]._pending.length===0?1:t[1]._pending.length===0?-1:e[1]._activeTotalSize===t[1]._activeTotalSize?t[1]._pending.length-e[1]._pending.length:e[1]._activeTotalSize-t[1]._activeTotalSize}},ph=class{_tasks;constructor(){this._tasks=new ha([],this._compare)}get length(){return this._tasks.size}get totalSize(){return[...this._tasks.values()].reduce((e,t)=>e+t.task.size,0)}get(e){return this._tasks?.get(e)?.task}add(e){this._tasks.set(e.topic,{created:Date.now(),task:e})}delete(e){this._tasks.delete(e)}tasks(){return[...this._tasks.values()].map(e=>e.task)}updatePriority(e,t){let n=this._tasks.get(e);if(n==null)return;let o=this._tasks.indexOf(e);n.task.priority=t,this._tasks.update(o)}_compare(e,t){return e[1].task.priority===t[1].task.priority?e[1].created-t[1].created:t[1].task.priority-e[1].task.priority}};var d8={hasNewInfo(r,e){let t=!1,n=!1;for(let o of e)o.data.haveBlock&&(t=!0),o.data.isWantBlock&&(n=!0);return!!(!n&&r.data.isWantBlock||!t&&r.data.haveBlock)},merge(r,e){let t=r.data,n=e.data;!n.haveBlock&&t.haveBlock&&(n.haveBlock=t.haveBlock,n.blockSize=t.blockSize),!n.isWantBlock&&t.isWantBlock&&(n.isWantBlock=!0,(!n.haveBlock||t.haveBlock)&&(n.haveBlock=t.haveBlock,e.size=r.size)),n.isWantBlock&&n.haveBlock&&(e.size=n.blockSize)}};var f8=Tt.WantType,c_=16*1024,l_=1024,Hc=class{_log;blockstore;network;_stats;_opts;ledgerMap;_running;_requestQueue;constructor(e,t,n,o,s,i={}){this._log=fr(e,"engine"),this.blockstore=t,this.network=n,this._stats=o,this._opts=this._processOpts(i),this.ledgerMap=Jr({name:"ipfs_bitswap_ledger_map",metrics:s.metrics}),this._running=!1,this._requestQueue=new Kc(d8)}_processOpts(e){return{maxSizeReplaceHasWithBlock:l_,targetMessageSize:c_,...e}}_scheduleProcessTasks(){setTimeout(()=>{this._processTasks().catch(e=>{this._log.error("error processing stats",e)})})}async _processTasks(){if(!this._running)return;let{peerId:e,tasks:t,pendingSize:n}=this._requestQueue.popTasks(this._opts.targetMessageSize);if(t.length===0)return;let o=new Tt(!1);o.setPendingBytes(n);let s=[],i=new Map;for(let c of t){let l=oe.parse(c.topic);c.data.haveBlock?c.data.isWantBlock?(s.push(l),i.set(c.topic,c.data)):o.addHave(l):o.addDontHave(l)}let a=await this._getBlocks(s);for(let[c,l]of i){let d=oe.parse(c),u=a.get(c);u!=null?o.addBlock(d,u):l.sendDontHave&&o.addDontHave(d)}if(o.empty){e!=null&&this._requestQueue.tasksDone(e,t),this._scheduleProcessTasks();return}try{e!=null&&await this.network.sendMessage(e,o);for(let[c,l]of a.entries())e!=null&&this.messageSent(e,oe.parse(c),l)}catch(c){this._log.error(c)}e!=null&&this._requestQueue.tasksDone(e,t),this._scheduleProcessTasks()}wantlistForPeer(e){let t=e.toString(),n=this.ledgerMap.get(t);return n!=null?n.wantlist.sortedEntries():new Map}ledgerForPeer(e){let t=e.toString(),n=this.ledgerMap.get(t);if(n!=null)return{peer:n.partner,value:n.debtRatio(),sent:n.accounting.bytesSent,recv:n.accounting.bytesRecv,exchanged:n.exchangeCount}}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.partner)}receivedBlocks(e){if(e.length!==0){for(let t of this.ledgerMap.values())for(let{cid:n,block:o}of e){let s=t.wantlistContains(n);if(s==null)continue;let i=o.length,a=this._sendAsBlock(s.wantType,i),c=i;a||(c=Tt.blockPresenceSize(s.cid)),this._requestQueue.pushTasks(t.partner,[{topic:s.cid.toString(ae),priority:s.priority,size:c,data:{blockSize:i,isWantBlock:a,haveBlock:!0,sendDontHave:!1}}])}this._scheduleProcessTasks()}}async messageReceived(e,t){let n=this._findOrCreate(e);if(t.empty)return;if(t.full&&(n.wantlist=new no),this._updateBlockAccounting(t.blocks,n),t.wantlist.size===0){this._scheduleProcessTasks();return}let o=[],s=[];t.wantlist.forEach(i=>{i.cancel?(n.cancelWant(i.cid),o.push(i.cid)):(n.wants(i.cid,i.priority,i.wantType),s.push(i))}),this._cancelWants(e,o),await this._addWants(e,s),this._scheduleProcessTasks()}_cancelWants(e,t){for(let n of t)this._requestQueue.remove(n.toString(ae),e)}async _addWants(e,t){let n=await this._getBlockSizes(t.map(s=>s.cid)),o=[];for(let s of t){let i=s.cid.toString(ae),a=n.get(i);if(a==null)s.sendDontHave&&o.push({topic:i,priority:s.priority,size:Tt.blockPresenceSize(s.cid),data:{isWantBlock:s.wantType===f8.Block,blockSize:0,haveBlock:!1,sendDontHave:s.sendDontHave}});else{let c=this._sendAsBlock(s.wantType,a),l=a;c||(l=Tt.blockPresenceSize(s.cid)),o.push({topic:i,priority:s.priority,size:l,data:{isWantBlock:c,blockSize:a,haveBlock:!0,sendDontHave:s.sendDontHave}})}this._requestQueue.pushTasks(e,o)}}_sendAsBlock(e,t){return e===f8.Block||t<=this._opts.maxSizeReplaceHasWithBlock}async _getBlockSizes(e){let t=await this._getBlocks(e);return new Map([...t].map(([n,o])=>[n,o.length]))}async _getBlocks(e){let t=new Map;return await Promise.all(e.map(async n=>{try{let o=await this.blockstore.get(n);t.set(n.toString(ae),o)}catch(o){o.code!=="ERR_NOT_FOUND"&&this._log.error("failed to query blockstore for %s: %s",n,o)}})),t}_updateBlockAccounting(e,t){for(let n of e.values())this._log("got block (%s bytes)",n.length),t.receivedBytes(n.length)}messageSent(e,t,n){let o=this._findOrCreate(e);o.sentBytes(n.length),o.wantlist.remove(t)}numBytesSentTo(e){return this._findOrCreate(e).accounting.bytesSent}numBytesReceivedFrom(e){return this._findOrCreate(e).accounting.bytesRecv}peerDisconnected(e){this.ledgerMap.delete(e.toString())}_findOrCreate(e){let t=e.toString(),n=this.ledgerMap.get(t);if(n!=null)return n;let o=new Vc(e);return this.ledgerMap.set(t,o),this._stats!=null&&this._stats.push(t,"peerCount",1),o}start(){this._running=!0}stop(){this._running=!1}};function u_(r){return r[Symbol.asyncIterator]!=null}function d_(r){if(u_(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Ft=d_;function _e(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=ze(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var p8=Symbol.for("@achingbrain/uint8arraylist");function h8(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function qc(r){return!!r?.[p8]}var de=class r{bufs;length;[p8]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(qc(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(qc(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=h8(this.bufs,e);return t.buf[t.index]}set(e,t){let n=h8(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(qc(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return _e(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:_e(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!qc(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let m=this.get(u+f);if(n[f]!==m){d=Math.max(1,f-a[m]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=ze(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=et(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=et(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=et(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=ze(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=et(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=et(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=et(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=et(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=et(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!j(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,s)=>o+s.byteLength,0)),n.length=t,n}};function Wc(r){return r[Symbol.asyncIterator]!=null}var zc=r=>{let e=Ke(r),t=ze(e);return Ye(r,t),zc.bytes=e,t};zc.bytes=0;function Vt(r,e){e=e??{};let t=e.lengthEncoder??zc;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return Wc(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}Vt.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??zc;return new de(t(r.byteLength),r)};var zs=Ne(Zo(),1);var p_=8,m_=1024*1024*4,Jo;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Jo||(Jo={}));var mh=r=>{let e=jt(r);return mh.bytes=Ke(e),e};mh.bytes=0;function Kt(r,e){let t=new de,n=Jo.LENGTH,o=-1,s=e?.lengthDecoder??mh,i=e?.maxLengthLength??p_,a=e?.maxDataLength??m_;function*c(){for(;t.byteLength>0;){if(n===Jo.LENGTH)try{if(o=s(t),o<0)throw(0,zs.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(o>a)throw(0,zs.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Jo.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw(0,zs.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw l}if(n===Jo.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Jo.LENGTH}}}return Wc(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,zs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,zs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}Kt.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}}();return Kt(n,{...e??{},onLength:s=>{t=s}})};function g_(r){return r[Symbol.asyncIterator]!=null}function y_(r,e){if(g_(r))return async function*(){for await(let a of r)yield e(a)}();let t=Ms(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){yield await s;for await(let a of t)yield e(a)}();let i=e;return function*(){yield s;for(let a of t)yield i(a)}()}var mr=y_;function ie(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Yc=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Gs=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Yc(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new Yc(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var gh=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function ot(r={}){return w_(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function w_(r,e){e=e??{};let t=e.onEnd,n=new Gs,o,s,i,a=ie(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((y,w)=>{s=E=>{s=null,n.push(E);try{y(r(n))}catch(b){w(b)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=ie()})}},l=y=>s!=null?s(y):(n.push(y),o),d=y=>(n=new Gs,s!=null?s({error:y}):(n.push({error:y}),o)),u=y=>{if(i)return o;if(e?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:y})},f=y=>i?o:(i=!0,y!=null?d(y):l({done:!0})),m=()=>(n=new Gs,f(),{done:!0}),h=y=>(f(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:m,throw:h,push:u,end:f,get readableLength(){return n.size},onEmpty:async y=>{let w=y?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let E,b;w!=null&&(E=new Promise((S,R)=>{b=()=>{R(new gh)},w.addEventListener("abort",b)}));try{await Promise.race([a.promise,E])}finally{b!=null&&w!=null&&w?.removeEventListener("abort",b)}}},t==null)return o;let p=o;return o={[Symbol.asyncIterator](){return this},next(){return p.next()},throw(y){return p.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return p.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(y){return p.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return p.readableLength},onEmpty:y=>p.onEmpty(y)},o}function b_(r){return r[Symbol.asyncIterator]!=null}function E_(...r){let e=[];for(let t of r)b_(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=ot({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var kt=E_;function Qe(r,...e){if(r==null)throw new Error("Empty pipeline");if(yh(r)){let n=r;r=()=>n.source}else if(w8(r)||y8(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&yh(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)yh(t[n])&&(t[n]=v_(t[n]));return x_(...t)}var x_=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},y8=r=>r?.[Symbol.asyncIterator]!=null,w8=r=>r?.[Symbol.iterator]!=null,yh=r=>r==null?!1:r.sink!=null&&r.source!=null,v_=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=ot({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(y8(s))o=async function*(){yield*s,n.end()};else if(w8(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return kt(n,o())}return r.source};function __(r){return r[Symbol.asyncIterator]!=null}function S_(r,e){return __(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var oo=S_;var pe=class extends Event{constructor(e,t){super(e),this.detail=t}};var k8=Ne(R8(),1);var A8=Math.pow(2,31)-1,I8=1e3,D8=1;var Eh="/ipfs/bitswap/1.0.0",xh="/ipfs/bitswap/1.1.0",vh="/ipfs/bitswap/1.2.0",I_=1024,D_=1024,T_=3e4,Xc=class{_log;_libp2p;_bitswap;_protocols;_stats;_running;_hashLoader;_maxInboundStreams;_maxOutboundStreams;_incomingStreamTimeout;_registrarIds;constructor(e,t,n,o={}){this._log=fr(e.peerId,"network"),this._libp2p=e,this._bitswap=t,this._protocols=[Eh],o.b100Only!==!0&&(this._protocols.unshift(xh),this._protocols.unshift(vh)),this._stats=n,this._running=!1,this._onPeerConnect=this._onPeerConnect.bind(this),this._onPeerDisconnect=this._onPeerDisconnect.bind(this),this._onConnection=this._onConnection.bind(this),this._hashLoader=o.hashLoader??{async getHasher(){throw new Error("Not implemented")}},this._maxInboundStreams=o.maxInboundStreams??I_,this._maxOutboundStreams=o.maxOutboundStreams??D_,this._incomingStreamTimeout=o.incomingStreamTimeout??T_}async start(){this._running=!0,await this._libp2p.handle(this._protocols,this._onConnection,{maxInboundStreams:this._maxInboundStreams,maxOutboundStreams:this._maxOutboundStreams});let e={onConnect:this._onPeerConnect,onDisconnect:this._onPeerDisconnect};this._registrarIds=[];for(let t of this._protocols)this._registrarIds.push(await this._libp2p.register(t,e));this._libp2p.getConnections().forEach(t=>{this._onPeerConnect(t.remotePeer)})}async stop(){if(this._running=!1,await this._libp2p.unhandle(this._protocols),this._registrarIds!=null){for(let e of this._registrarIds)this._libp2p.unregister(e);this._registrarIds=[]}}_onConnection(e){if(!this._running)return;let{stream:t,connection:n}=e,o=new k8.TimeoutController(this._incomingStreamTimeout);Promise.resolve().then(async()=>{this._log("incoming new bitswap %s connection from %p",t.protocol,n.remotePeer);let s=()=>{t.abort(new g("Incoming Bitswap stream timed out","ERR_TIMEOUT"))},i=AbortSignal.timeout(this._incomingStreamTimeout);i.addEventListener("abort",s),await Qe(t,a=>Kt(a),async a=>{for await(let c of a){try{let l=await Tt.deserialize(c.subarray(),this._hashLoader);await this._bitswap._receiveMessage(n.remotePeer,l)}catch(l){this._bitswap._receiveError(l);break}i.removeEventListener("abort",s),i=AbortSignal.timeout(this._incomingStreamTimeout),i.addEventListener("abort",s)}}),await t.close({signal:i})}).catch(s=>{this._log(s),t.abort(s)}).finally(()=>{o.clear()})}_onPeerConnect(e){this._bitswap._onPeerConnected(e)}_onPeerDisconnect(e){this._bitswap._onPeerDisconnected(e)}findProviders(e,t={}){return t.onProgress?.(new pe("bitswap:network:find-providers",e)),this._libp2p.contentRouting.findProviders(e,t)}async findAndConnect(e,t){await Ft(oo(mr(this.findProviders(e,t),async n=>this.connectTo(n.id,t).catch(o=>{this._log.error(o)})),3)).catch(n=>{this._log.error(n)})}async provide(e,t={}){t.onProgress?.(new pe("bitswap:network:provide",e)),await this._libp2p.contentRouting.provide(e,t)}async sendMessage(e,t,n={}){if(!this._running)throw new Error("network isn't running");let o=e.toString();this._log("sendMessage to %s",o,t),n.onProgress?.(new pe("bitswap:network:send-wantlist",e)),await this._writeMessage(e,t,n),this._updateSentStats(e,t.blocks)}async connectTo(e,t={}){if(!this._running)throw new Error("network isn't running");return t.onProgress?.(new pe("bitswap:network:dial",e)),this._libp2p.dial(e,t)}_updateSentStats(e,t){let n=e.toString();if(this._stats!=null){for(let o of t.values())this._stats.push(n,"dataSent",o.length);this._stats.push(n,"blocksSent",t.size)}}async _writeMessage(e,t,n={}){let o=await this._libp2p.dialProtocol(e,[vh,xh,Eh]);try{let s;switch(o.protocol){case Eh:s=t.serializeToBitswap100();break;case xh:case vh:s=t.serializeToBitswap110();break;default:throw new Error(`Unknown protocol: ${o.protocol}`)}await Qe([s],i=>Vt(i),o),await o.close()}catch(s){n.onProgress?.(new pe("bitswap:network:send-wantlist:error",{peer:e,error:s})),this._log(s),o.abort(s)}}};var H8=Ne(Jc(),1);function L(r,e="utf8"){let t=Mc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var K8=r=>`unwant:${L(r.multihash.bytes,"base64")}`,$8=r=>`block:${L(r.multihash.bytes,"base64")}`,el=class extends H8.EventEmitter{_log;constructor(e){super(),this.setMaxListeners(I8),this._log=fr(e,"notif")}hasBlock(e,t){let n=$8(e);this._log(n),this.emit(n,t)}async wantBlock(e,t={}){if(e==null)throw new Error("Not a valid cid");let n=$8(e),o=K8(e);return this._log(`wantBlock:${e}`),new Promise((s,i)=>{let a=()=>{this.removeListener(n,c),t.onProgress?.(new pe("bitswap:want-block:unwant",e)),i(new Error(`Block for ${e} unwanted`))},c=l=>{this.removeListener(o,a),t.onProgress?.(new pe("bitswap:want-block:block",e)),s(l)};this.once(o,a),this.once(n,c),t.signal?.addEventListener("abort",()=>{this.removeListener(n,c),this.removeListener(o,a),i(new Error(`Want for ${e} aborted`))})})}unwantBlock(e){let t=K8(e);this._log(t),this.emit(t)}};var Q8=Ne(Jc(),1);var G8=Ne(Jc(),1),Sh=Ne(z8(),1),pa=class extends G8.EventEmitter{_options;_queue;_stats;_frequencyLastTime;_frequencyAccumulators;_movingAverages;_enabled;_timeout;constructor(e,t){super(),this._options=t,this._queue=[],this._stats={},this._frequencyLastTime=Date.now(),this._frequencyAccumulators={},this._movingAverages={},this._update=this._update.bind(this),e.forEach(n=>{this._stats[n]=BigInt(0),this._movingAverages[n]={},this._options.movingAverageIntervals.forEach(o=>{(this._movingAverages[n][o]=(0,Sh.default)(o)).push(this._frequencyLastTime,0)})}),this._enabled=this._options.enabled}enable(){this._enabled=!0}disable(){this._enabled=!1}stop(){this._timeout!=null&&clearTimeout(this._timeout)}get snapshot(){return Object.assign({},this._stats)}get movingAverages(){return Object.assign({},this._movingAverages)}push(e,t){this._enabled&&(this._queue.push([e,t,Date.now()]),this._resetComputeTimeout())}_resetComputeTimeout(){this._timeout!=null&&clearTimeout(this._timeout),this._timeout=setTimeout(this._update,this._nextTimeout())}_nextTimeout(){let e=this._queue.length/this._options.computeThrottleMaxQueueSize;return Math.max(this._options.computeThrottleTimeout*(1-e),0)}_update(){if(this._timeout=void 0,this._queue.length>0){let e;for(;this._queue.length>0;){let t=e=this._queue.shift();t!=null&&this._applyOp(t)}e!=null&&this._updateFrequency(e[2]),this.emit("update",this._stats)}}_updateFrequency(e){let t=e-this._frequencyLastTime;t>0&&Object.keys(this._stats).forEach(n=>{this._updateFrequencyFor(n,t,e)}),this._frequencyLastTime=e}_updateFrequencyFor(e,t,n){let o=this._frequencyAccumulators[e]??0;this._frequencyAccumulators[e]=0;let s=o/t*1e3,i=this._movingAverages[e];i==null&&(i=this._movingAverages[e]={}),this._options.movingAverageIntervals.forEach(a=>{let c=i[a];c==null&&(c=i[a]=(0,Sh.default)(a)),c.push(n,s)})}_applyOp(e){let t=e[0],n=e[1];if(typeof n!="number")throw new Error(`invalid increment number: ${n}`);Object.prototype.hasOwnProperty.call(this._stats,t)||(this._stats[t]=BigInt(0)),this._stats[t]=BigInt(this._stats[t])+BigInt(n),this._frequencyAccumulators[t]==null&&(this._frequencyAccumulators[t]=0),this._frequencyAccumulators[t]+=n}};var Y8={enabled:!1,computeThrottleTimeout:1e3,computeThrottleMaxQueueSize:1e3,movingAverageIntervals:[60*1e3,5*60*1e3,15*60*1e3]},tl=class extends Q8.EventEmitter{_initialCounters;_options;_enabled;_global;_peers;constructor(e,t=[],n=Y8){super();let o=Object.assign({},Y8,n);if(typeof o.computeThrottleTimeout!="number")throw new Error("need computeThrottleTimeout");if(typeof o.computeThrottleMaxQueueSize!="number")throw new Error("need computeThrottleMaxQueueSize");this._initialCounters=t,this._options=o,this._enabled=this._options.enabled,this._global=new pa(t,o),this._global.on("update",s=>this.emit("update",s)),this._peers=Jr({name:"ipfs_bitswap_stats_peers",metrics:e.metrics})}enable(){this._enabled=!0,this._options.enabled=!0,this._global.enable()}disable(){this._enabled=!1,this._options.enabled=!1,this._global.disable()}stop(){this._enabled=!1,this._global.stop();for(let e of this._peers)e[1].stop()}get snapshot(){return this._global.snapshot}get movingAverages(){return this._global.movingAverages}forPeer(e){let t=e.toString();return this._peers.get(t)}push(e,t,n){if(this._enabled&&(this._global.push(t,n),e!=null)){let o=this._peers.get(e);o==null&&(o=new pa(this._initialCounters,this._options),this._peers.set(e,o)),o.push(t,n)}}disconnected(e){let t=e.toString(),n=this._peers.get(t);n!=null&&(n.stop(),this._peers.delete(t))}};var X8=M_;function M_(r,e,t){var n=null,o=null,s=function(){n&&(clearTimeout(n),o=null,n=null)},i=function(){var c=o;s(),c&&c()},a=function(){if(!e)return r.apply(this,arguments);var c=this,l=arguments,d=t&&!n;if(s(),o=function(){r.apply(c,l)},n=setTimeout(function(){if(n=null,!d){var u=o;return o=null,u()}},e),d)return o()};return a.cancel=s,a.flush=i,a}var rl=class{peerId;refcnt;network;_entries;_log;constructor(e,t,n){this.peerId=t,this.network=n,this.refcnt=1,this._entries=[],this._log=fr(e,"msgqueue"),this.sendEntries=X8(this.sendEntries.bind(this),D8)}addMessage(e,t={}){e.empty||this.send(e,t)}addEntries(e,t={}){this._entries=this._entries.concat(e),this.sendEntries(t)}sendEntries(e={}){if(this._entries.length===0)return;let t=new Tt(!1);this._entries.forEach(n=>{n.cancel===!0?t.cancel(n.cid):t.addEntry(n.cid,n.priority)}),this._entries=[],this.addMessage(t,e)}async send(e,t={}){try{await this.network.connectTo(this.peerId,t)}catch(n){this._log.error("cant connect to peer %p: %s",this.peerId,n.message);return}this._log("sending message to peer %p",this.peerId),this.network.sendMessage(this.peerId,e,t).catch(n=>{this._log.error("send error",n)})}};var nl=class{peers;wantlist;network;_peerId;_log;constructor(e,t,n,o){this.peers=Jr({name:"ipfs_bitswap_want_manager_peers",metrics:o.metrics}),this.wantlist=new no(n,o),this.network=t,this._peerId=e,this._log=fr(e,"want")}_addEntries(e,t,n,o={}){let s=e.map((i,a)=>new Tt.Entry(i,A8-a,Tt.WantType.Block,t));s.forEach(i=>{i.cancel?n===!0?this.wantlist.removeForce(i.cid.toString(ae)):this.wantlist.remove(i.cid):(this._log("adding to wantlist"),this.wantlist.add(i.cid,i.priority))});for(let i of this.peers.values())i.addEntries(s,o)}_startPeerHandler(e){let t=this.peers.get(e.toString());if(t!=null){t.refcnt++;return}t=new rl(this._peerId,e,this.network);let n=new Tt(!0);for(let o of this.wantlist.entries())n.addEntry(o[1].cid,o[1].priority);return t.addMessage(n),this.peers.set(e.toString(),t),t}_stopPeerHandler(e){let t=this.peers.get(e.toString());t!=null&&(t.refcnt--,!(t.refcnt>0)&&this.peers.delete(e.toString()))}wantBlocks(e,t={}){this._addEntries(e,!1,!1,t),t.signal?.addEventListener("abort",()=>{this.cancelWants(e)})}unwantBlocks(e){this._log("unwant blocks: %s",e.length),this._addEntries(e,!0,!0)}cancelWants(e){this._log("cancel wants: %s",e.length),this._addEntries(e,!0)}connectedPeers(){return Array.from(this.peers.keys())}connected(e){this._startPeerHandler(e)}disconnected(e){this._stopPeerHandler(e)}start(){}stop(){this.peers.forEach(e=>{this.disconnected(e.peerId)})}};var U_={async getHasher(){throw new Error("Not implemented")}},F_={maxInboundStreams:1024,maxOutboundStreams:1024,incomingStreamTimeout:3e4,hashLoader:U_,statsEnabled:!1,statsComputeThrottleTimeout:1e3,statsComputeThrottleMaxQueueSize:1e3},V_=["blocksReceived","dataReceived","dupBlksReceived","dupDataReceived","blocksSent","dataSent","providesBufferLength","wantListLength","peerCount"],ol=class{_libp2p;_log;stats;network;blockstore;engine;wm;notifications;started;constructor(e,t,n={}){this._libp2p=e,this._log=fr(this.peerId),n=Object.assign({},F_,n),this.stats=new tl(e,V_,{enabled:n.statsEnabled,computeThrottleTimeout:n.statsComputeThrottleTimeout,computeThrottleMaxQueueSize:n.statsComputeThrottleMaxQueueSize}),this.network=new Xc(e,this,this.stats,{hashLoader:n.hashLoader,maxInboundStreams:n.maxInboundStreams,maxOutboundStreams:n.maxOutboundStreams,incomingStreamTimeout:n.incomingStreamTimeout}),this.blockstore=t,this.engine=new Hc(this.peerId,t,this.network,this.stats,e),this.wm=new nl(this.peerId,this.network,this.stats,e),this.notifications=new el(this.peerId),this.started=!1}isStarted(){return this.started}get peerId(){return this._libp2p.peerId}async _receiveMessage(e,t){try{await this.engine.messageReceived(e,t)}catch{this._log("failed to receive message",t)}if(t.blocks.size===0)return;let n=[];for(let[o,s]of t.blocks.entries()){let i=oe.parse(o);n.push({wasWanted:this.wm.wantlist.contains(i),cid:i,data:s})}this.wm.cancelWants(n.filter(({wasWanted:o})=>o).map(({cid:o})=>o)),await Promise.all(n.map(async({cid:o,wasWanted:s,data:i})=>{await this._handleReceivedBlock(e,o,i,s)}))}async _handleReceivedBlock(e,t,n,o){this._log("received block");let s=await this.blockstore.has(t);this._updateReceiveCounters(e.toString(),t,n,s),o&&await this.put(t,n)}_updateReceiveCounters(e,t,n,o){this.stats.push(e,"blocksReceived",1),this.stats.push(e,"dataReceived",n.length),o&&(this.stats.push(e,"dupBlksReceived",1),this.stats.push(e,"dupDataReceived",n.length))}_receiveError(e){this._log.error("ReceiveError",e)}_onPeerConnected(e){this.wm.connected(e)}_onPeerDisconnected(e){this.wm.disconnected(e),this.engine.peerDisconnected(e),this.stats.disconnected(e)}enableStats(){this.stats.enable()}disableStats(){this.stats.disable()}wantlistForPeer(e,t){return this.engine.wantlistForPeer(e)}ledgerForPeer(e){return this.engine.ledgerForPeer(e)}async want(e,t={}){let n=async(c,l)=>(this.wm.wantBlocks([c],l),this.notifications.wantBlock(c,l)),o=!1,s=async(c,l)=>{try{return await this.blockstore.get(c,l)}catch(d){if(d.code!=="ERR_NOT_FOUND")throw d;return o||(o=!0,this.network.findAndConnect(c,l).catch(u=>{this._log.error(u)})),await n(c,l)}},i=new AbortController,a=lt([i.signal,t.signal]);try{return await Promise.race([this.notifications.wantBlock(e,{...t,signal:a}),s(e,{...t,signal:a})])}finally{i.abort(),a.clear()}}unwant(e){let t=Array.isArray(e)?e:[e];this.wm.unwantBlocks(t),t.forEach(n=>{this.notifications.unwantBlock(n)})}cancelWants(e){this.wm.cancelWants(Array.isArray(e)?e:[e])}async put(e,t,n){await this.blockstore.put(e,t),this.notify(e,t)}async*putMany(e,t){yield*this.blockstore.putMany(qo(e,({cid:n,block:o})=>{this.notify(n,o)}),t)}notify(e,t,n={}){this.notifications.hasBlock(e,t),this.engine.receivedBlocks([{cid:e,block:t}]),this.network.provide(e,n).catch(o=>{this._log.error("Failed to provide: %s",o.message)})}getWantlist(){return this.wm.wantlist.entries()}get peers(){return this.engine.peers()}async start(){this.wm.start(),await this.network.start(),this.engine.start(),this.started=!0}async stop(){this.stats.stop(),this.wm.stop(),await this.network.stop(),this.engine.stop(),this.started=!1}};var j8=(r,e,t={})=>new ol(r,e,t);var Rh=class{bitswap;started;constructor(e,t={}){let{libp2p:n,blockstore:o,hashers:s}=e;this.bitswap=j8(n,o,{hashLoader:{getHasher:async i=>{let a;if(typeof i=="string"?a=Object.values(s).find(c=>c.name===i):a=s[i],a!=null)return a;throw new Error(`Could not load hasher for code/name "${i}"`)}},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}announce(e,t,n){this.bitswap.notify(e,t,n)}async retrieve(e,{validateFn:t,...n}={}){return this.bitswap.want(e,n)}};function Ah(r={}){return e=>new Rh(e,r)}var sl=class{url;#e=0;#t=0;#r=0;#i=0;constructor(e){this.url=e instanceof URL?e:new URL(e)}async getRawBlock(e,t){let n=this.url;if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);try{this.#e++;let o=await fetch(n.toString(),{signal:t,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"});if(!o.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#i++,new Uint8Array(await o.arrayBuffer())}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#i/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}};var il=class{gateways;log;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.gateways=(t.gateways??Z8).map(n=>new sl(n))}async retrieve(e,t={}){let n=this.gateways.sort((s,i)=>i.reliability()-s.reliability()),o=[];for(let s of n){this.log("getting block for %c from %s",e,s.url);try{let i=await s.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,s.url);try{await t.validateFn?.(i)}catch(a){throw this.log.error("failed to validate block for %c from %s",e,s.url,a),s.incrementInvalidBlocks(),new Error(`unable to validate block for CID ${e} from gateway ${s.url}`)}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,s.url,i),i instanceof Error?o.push(i):o.push(new Error(`unable to fetch raw block for CID ${e} from gateway ${s.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,s.url);break}}}throw new AggregateError(o,`unable to fetch raw block for CID ${e} from any gateway`)}};var Z8=["https://trustless-gateway.link","https://cloudflare-ipfs.com","https://4everland.io"];function Ih(r={}){return e=>new il(e,r)}var K_=Symbol.for("nodejs.util.inspect.custom"),J8=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e),pr.identity.decoder),em=114,Dh=36,Th=37,ma=class{type;multihash;privateKey;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,this.privateKey=e.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[kf]=!0;toString(){return this.string==null&&(this.string=ae.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return oe.createV1(em,this.multihash)}toBytes(){return this.multihash.bytes}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return j(this.multihash.bytes,e);if(typeof e=="string")return we(e).equals(this);if(e?.multihash?.bytes!=null)return j(this.multihash.bytes,e.multihash.bytes);throw new Error("not valid Id")}[K_](){return`PeerId(${this.toString()})`}},es=class extends ma{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},ts=class extends ma{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.multihash.digest}},rs=class extends ma{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.multihash.digest}};function tm(r){if(r.type==="RSA")return new es(r);if(r.type==="Ed25519")return new ts(r);if(r.type==="secp256k1")return new rs(r);throw new g("Not a PeerId","ERR_INVALID_PARAMETERS")}function we(r,e){if(e=e??J8,r.charAt(0)==="1"||r.charAt(0)==="Q"){let t=Cr(ae.decode(`z${r}`));return r.startsWith("12D")?new ts({multihash:t}):r.startsWith("16U")?new rs({multihash:t}):new es({multihash:t})}return Xe(J8.decode(r))}function Xe(r){try{let e=Cr(r);if(e.code===hr.code){if(e.digest.length===Dh)return new ts({multihash:e});if(e.digest.length===Th)return new rs({multihash:e})}if(e.code===Re.code)return new es({multihash:e})}catch{return $_(oe.decode(r))}throw new Error("Supplied PeerID CID is invalid")}function $_(r){if(r==null||r.multihash==null||r.version==null||r.version===1&&r.code!==em)throw new Error("Supplied PeerID CID is invalid");let e=r.multihash;if(e.code===Re.code)return new es({multihash:r.multihash});if(e.code===hr.code){if(e.digest.length===Dh)return new ts({multihash:r.multihash});if(e.digest.length===Th)return new rs({multihash:r.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function ut(r,e){return r.length===Dh?new ts({multihash:kr(hr.code,r),privateKey:e}):r.length===Th?new rs({multihash:kr(hr.code,r),privateKey:e}):new es({multihash:await Re.digest(r),publicKey:r,privateKey:e})}var al=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var rm=45,q_=15,Qs=new al;function kh(r){if(!(r.length>q_))return Qs.new(r).parseWith(()=>Qs.readIPv4Addr())}function Ch(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>rm))return Qs.new(r).parseWith(()=>Qs.readIPv6Addr())}function cl(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>rm))return Qs.new(r).parseWith(()=>Qs.readIPAddr())}var aU=parseInt("0xFFFF",16),cU=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Xs(r){return!!kh(r)}function js(r){return!!Ch(r)}function ll(r){return!!cl(r)}var sm=Xs,Q_=js,Nh=function(r){let e=0;if(r=r.toString().trim(),sm(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(Q_(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=sm(t[n]),i;s&&(i=Nh(t[n]),t[n]=L(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,L(i.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},im=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Zs={},Ph={},j_=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[777,-1,"memory"]];j_.forEach(r=>{let e=Z_(...r);Ph[e.code]=e,Zs[e.name]=e});function Z_(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function Z(r){if(typeof r=="number"){if(Ph[r]!=null)return Ph[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Zs[r]!=null)return Zs[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var WU=Z("ip4"),zU=Z("ip6"),GU=Z("ipcidr");function Lh(r,e){switch(Z(r).code){case 4:case 41:return eS(e);case 42:return lm(e);case 6:case 273:case 33:case 132:return dm(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return lm(e);case 421:return oS(e);case 444:return um(e);case 445:return um(e);case 466:return nS(e);default:return L(e,"base16")}}function Bh(r,e){switch(Z(r).code){case 4:return am(e);case 41:return am(e);case 42:return cm(e);case 6:case 273:case 33:case 132:return Mh(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return cm(e);case 421:return tS(e);case 444:return sS(e);case 445:return iS(e);case 466:return rS(e);default:return B(e,"base16")}}var Oh=Object.values(pr).map(r=>r.decoder),J_=function(){let r=Oh[0].or(Oh[1]);return Oh.slice(2).forEach(e=>r=r.or(e)),r}();function am(r){if(!ll(r))throw new Error("invalid ip address");return Nh(r)}function eS(r){let e=im(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!ll(e))throw new Error("invalid ip address");return e}function Mh(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function dm(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function cm(r){let e=B(r),t=Uint8Array.from(Ye(e.length));return _e([t,e],t.length+e.length)}function lm(r){let e=jt(r);if(r=r.slice(Ke(e)),r.length!==e)throw new Error("inconsistent lengths");return L(r)}function tS(r){let e;r[0]==="Q"||r[0]==="1"?e=Cr(ae.decode(`z${r}`)).bytes:e=oe.parse(r).multihash.bytes;let t=Uint8Array.from(Ye(e.length));return _e([t,e],t.length+e.length)}function rS(r){let e=J_.decode(r),t=Uint8Array.from(Ye(e.length));return _e([t,e],t.length+e.length)}function nS(r){let e=jt(r),t=r.slice(Ke(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+L(t,"base64url")}function oS(r){let e=jt(r),t=r.slice(Ke(e));if(t.length!==e)throw new Error("inconsistent lengths");return L(t,"base58btc")}function sS(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=at.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Mh(n);return _e([t,o],t.length+o.length)}function iS(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=at.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Mh(n);return _e([t,o],t.length+o.length)}function um(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=L(e,"base32"),o=dm(t);return`${n}:${o}`}function fm(r){r=Uh(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=Z(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw pm("invalid address: "+r);if(a.path===!0){n=Uh(o.slice(s).join("/")),e.push([a.code,Bh(a.code,n)]),t.push([a.code,n]);break}let c=Bh(a.code,o[s]);e.push([a.code,c]),t.push([a.code,Lh(a.code,c)])}return{string:hm(t),bytes:Vh(e),tuples:e,stringTuples:t,path:n}}function Fh(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=jt(r,o),i=Ke(s),a=Z(s),c=aS(a,r.slice(o+i));if(c===0){e.push([s]),t.push([s]),o+=i;continue}let l=r.slice(o+i,o+i+c);if(o+=c+i,o>r.length)throw pm("Invalid address Uint8Array: "+L(r,"base16"));e.push([s,l]);let d=Lh(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:hm(t),tuples:e,stringTuples:t,path:n}}function hm(r){let e=[];return r.map(t=>{let n=Z(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Uh(e.join("/"))}function Vh(r){return _e(r.map(e=>{let t=Z(e[0]),n=Uint8Array.from(Ye(t.code));return e.length>1&&e[1]!=null&&(n=_e([n,e[1]])),n}))}function aS(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=jt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Ke(t)}}function Uh(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function pm(r){return new Error("Error parsing address: "+r)}var cS=Symbol.for("nodejs.util.inspect.custom"),Kh=Symbol.for("@multiformats/js-multiaddr/multiaddr"),lS=[Z("dns").code,Z("dns4").code,Z("dns6").code,Z("dnsaddr").code],ul=class r{bytes;#e;#t;#r;#i;[Kh]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Fh(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=fm(e)}else if(so(e))t=Fh(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#i=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=Z("tcp"),a=Z("udp"),c=Z("ip4"),l=Z("ip6"),d=Z("dns6"),u=Z("ip6zone");for(let[m,h]of this.stringTuples())m===u.code&&(s=`%${h??""}`),lS.includes(m)&&(t=i.name,o=443,n=`${h??""}${s}`,e=m===d.code?6:4),(m===i.code||m===a.code)&&(t=Z(m).name,o=parseInt(h??"")),(m===c.code||m===l.code)&&(t=Z(m).name,n=`${h??""}${s}`,e=m===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},Z(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>Z(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(Vh(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Zs.p2p.code&&e.push([n,o]),n===Zs["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?L(ae.decode(`z${n}`),"base58btc"):L(oe.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#i}equals(e){return j(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=Js.get(t.name);if(n==null)throw new g(`no available resolver for ${t.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>X(s))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[cS](){return`Multiaddr(${this.#e})`}};var Js=new Map;function so(r){return!!r?.[Kh]}function X(r){return new ul(r)}async function*dl(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var yu={};ge(yu,{Ed25519PrivateKey:()=>An,Ed25519PublicKey:()=>cs,MAX_RSA_KEY_SIZE:()=>ds,RsaPrivateKey:()=>bo,RsaPublicKey:()=>us,Secp256k1PrivateKey:()=>ps,Secp256k1PublicKey:()=>hs,generateEphemeralKeyPair:()=>zm,generateKeyPair:()=>ka,generateKeyPairFromSeed:()=>aA,importKey:()=>pi,keyStretcher:()=>jm,keysPBM:()=>ci,marshalPrivateKey:()=>D0,marshalPublicKey:()=>I0,supportedKeys:()=>On,unmarshalPrivateKey:()=>Er,unmarshalPublicKey:()=>Hr});var a0={};ge(a0,{Ed25519PrivateKey:()=>An,Ed25519PublicKey:()=>cs,generateKeyPair:()=>gR,generateKeyPairFromSeed:()=>i0,unmarshalEd25519PrivateKey:()=>pR,unmarshalEd25519PublicKey:()=>mR});function $h(r,e){let t=B(r,"base64urlpad");if(e!=null){if(t.length>e)throw new Error("byte array longer than desired length");t=_e([new Uint8Array(e-t.length),t])}return t}function gr(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function io(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function uS(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function ei(r,...e){if(!uS(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function ns(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");io(r.outputLen),io(r.blockLen)}function ti(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function mm(r,e){ei(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var fl=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var os=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Or=(r,e)=>r<<32-e|r>>>e,hl=(r,e)=>r<<e|r>>>32-e>>>0,AF=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var dS=async()=>{};async function gm(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await dS(),n+=s)}}function Hh(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Lr(r){return typeof r=="string"&&(r=Hh(r)),ei(r),r}function pl(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ei(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}var ri=class{clone(){return this._cloneInto()}},fS={}.toString;function ym(r,e){if(e!==void 0&&fS.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function ni(r){let e=n=>r().update(Lr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function ss(r=32){if(fl&&typeof fl.getRandomValues=="function")return fl.getRandomValues(new Uint8Array(r));throw new Error("crypto.getRandomValues must be defined")}function hS(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}var ml=(r,e,t)=>r&e^~r&t,gl=(r,e,t)=>r&e^r&t^e&t,ao=class extends ri{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=os(this.buffer)}update(e){ti(this);let{view:t,buffer:n,blockLen:o}=this;e=Lr(e);let s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=os(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ti(this),mm(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;hS(n,o-8,BigInt(this.length*8),s),this.process(n,0);let a=os(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%t&&e.buffer.set(n),e}};var yl=BigInt(4294967295),qh=BigInt(32);function wm(r,e=!1){return e?{h:Number(r&yl),l:Number(r>>qh&yl)}:{h:Number(r>>qh&yl)|0,l:Number(r&yl)|0}}function pS(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:s,l:i}=wm(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var mS=(r,e)=>BigInt(r>>>0)<<qh|BigInt(e>>>0),gS=(r,e,t)=>r>>>t,yS=(r,e,t)=>r<<32-t|e>>>t,wS=(r,e,t)=>r>>>t|e<<32-t,bS=(r,e,t)=>r<<32-t|e>>>t,ES=(r,e,t)=>r<<64-t|e>>>t-32,xS=(r,e,t)=>r>>>t-32|e<<64-t,vS=(r,e)=>e,_S=(r,e)=>r,SS=(r,e,t)=>r<<t|e>>>32-t,RS=(r,e,t)=>e<<t|r>>>32-t,AS=(r,e,t)=>e<<t-32|r>>>64-t,IS=(r,e,t)=>r<<t-32|e>>>64-t;function DS(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var TS=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),kS=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,CS=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),NS=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,PS=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),OS=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var LS={fromBig:wm,split:pS,toBig:mS,shrSH:gS,shrSL:yS,rotrSH:wS,rotrSL:bS,rotrBH:ES,rotrBL:xS,rotr32H:vS,rotr32L:_S,rotlSH:SS,rotlSL:RS,rotlBH:AS,rotlBL:IS,add:DS,add3L:TS,add3H:kS,add4L:CS,add4H:NS,add5H:OS,add5L:PS},he=LS;var[BS,MS]=he.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),co=new Uint32Array(80),lo=new Uint32Array(80),Wh=class extends ao{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:m,Gl:h,Hh:p,Hl:y}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,m,h,p,y]}set(e,t,n,o,s,i,a,c,l,d,u,f,m,h,p,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=m|0,this.Gl=h|0,this.Hh=p|0,this.Hl=y|0}process(e,t){for(let b=0;b<16;b++,t+=4)co[b]=e.getUint32(t),lo[b]=e.getUint32(t+=4);for(let b=16;b<80;b++){let S=co[b-15]|0,R=lo[b-15]|0,A=he.rotrSH(S,R,1)^he.rotrSH(S,R,8)^he.shrSH(S,R,7),D=he.rotrSL(S,R,1)^he.rotrSL(S,R,8)^he.shrSL(S,R,7),_=co[b-2]|0,k=lo[b-2]|0,P=he.rotrSH(_,k,19)^he.rotrBH(_,k,61)^he.shrSH(_,k,6),N=he.rotrSL(_,k,19)^he.rotrBL(_,k,61)^he.shrSL(_,k,6),O=he.add4L(D,N,lo[b-7],lo[b-16]),F=he.add4H(O,A,P,co[b-7],co[b-16]);co[b]=F|0,lo[b]=O|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:m,Fl:h,Gh:p,Gl:y,Hh:w,Hl:E}=this;for(let b=0;b<80;b++){let S=he.rotrSH(u,f,14)^he.rotrSH(u,f,18)^he.rotrBH(u,f,41),R=he.rotrSL(u,f,14)^he.rotrSL(u,f,18)^he.rotrBL(u,f,41),A=u&m^~u&p,D=f&h^~f&y,_=he.add5L(E,R,D,MS[b],lo[b]),k=he.add5H(_,w,S,A,BS[b],co[b]),P=_|0,N=he.rotrSH(n,o,28)^he.rotrBH(n,o,34)^he.rotrBH(n,o,39),O=he.rotrSL(n,o,28)^he.rotrBL(n,o,34)^he.rotrBL(n,o,39),F=n&s^n&a^s&a,Y=o&i^o&c^i&c;w=p|0,E=y|0,p=m|0,y=h|0,m=u|0,h=f|0,{h:u,l:f}=he.add(l|0,d|0,k|0,P|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let I=he.add3L(P,O,Y);n=he.add3H(I,k,N,F),o=I|0}({h:n,l:o}=he.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=he.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=he.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=he.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=he.add(this.Eh|0,this.El|0,u|0,f|0),{h:m,l:h}=he.add(this.Fh|0,this.Fl|0,m|0,h|0),{h:p,l:y}=he.add(this.Gh|0,this.Gl|0,p|0,y|0),{h:w,l:E}=he.add(this.Hh|0,this.Hl|0,w|0,E|0),this.set(n,o,s,i,a,c,l,d,u,f,m,h,p,y,w,E)}roundClean(){co.fill(0),lo.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var uo=ni(()=>new Wh);var bl={};ge(bl,{abytes:()=>oi,bitGet:()=>qS,bitLen:()=>HS,bitMask:()=>ga,bitSet:()=>WS,bytesToHex:()=>En,bytesToNumberBE:()=>xn,bytesToNumberLE:()=>Br,concatBytes:()=>_n,createHmacDrbg:()=>Yh,ensureBytes:()=>Ue,equalBytes:()=>KS,hexToBytes:()=>is,hexToNumber:()=>Gh,isBytes:()=>fo,numberToBytesBE:()=>ho,numberToBytesLE:()=>vn,numberToHexUnpadded:()=>vm,numberToVarBytesBE:()=>VS,utf8ToBytes:()=>$S,validateObject:()=>yr});var xm=BigInt(0),wl=BigInt(1),US=BigInt(2);function fo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function oi(r){if(!fo(r))throw new Error("Uint8Array expected")}var FS=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function En(r){oi(r);let e="";for(let t=0;t<r.length;t++)e+=FS[r[t]];return e}function vm(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function Gh(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var bn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function bm(r){if(r>=bn._0&&r<=bn._9)return r-bn._0;if(r>=bn._A&&r<=bn._F)return r-(bn._A-10);if(r>=bn._a&&r<=bn._f)return r-(bn._a-10)}function is(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,s=0;o<t;o++,s+=2){let i=bm(r.charCodeAt(s)),a=bm(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}function xn(r){return Gh(En(r))}function Br(r){return oi(r),Gh(En(Uint8Array.from(r).reverse()))}function ho(r,e){return is(r.toString(16).padStart(e*2,"0"))}function vn(r,e){return ho(r,e).reverse()}function VS(r){return is(vm(r))}function Ue(r,e,t){let n;if(typeof e=="string")try{n=is(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(fo(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function _n(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];oi(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function KS(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function $S(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function HS(r){let e;for(e=0;r>xm;r>>=wl,e+=1);return e}function qS(r,e){return r>>BigInt(e)&wl}function WS(r,e,t){return r|(t?wl:xm)<<BigInt(e)}var ga=r=>(US<<BigInt(r-1))-wl,zh=r=>new Uint8Array(r),Em=r=>Uint8Array.from(r);function Yh(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=zh(r),o=zh(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=zh())=>{o=a(Em([0]),u),n=a(),u.length!==0&&(o=a(Em([1]),u),n=a())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,f=[];for(;u<e;){n=a();let m=n.slice();f.push(m),u+=n.length}return _n(...f)};return(u,f)=>{i(),c(u);let m;for(;!(m=f(l()));)c();return i(),m}}var zS={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||fo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function yr(r,e,t={}){let n=(o,s,i)=>{let a=zS[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=r[o];if(!(i&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${s}`)};for(let[o,s]of Object.entries(e))n(o,s,!1);for(let[o,s]of Object.entries(t))n(o,s,!0);return r}var ct=BigInt(0),He=BigInt(1),as=BigInt(2),GS=BigInt(3),Qh=BigInt(4),_m=BigInt(5),Sm=BigInt(8),YS=BigInt(9),QS=BigInt(16);function Ae(r,e){let t=r%e;return t>=ct?t:e+t}function Xh(r,e,t){if(t<=ct||e<ct)throw new Error("Expected power/modulo > 0");if(t===He)return ct;let n=He;for(;e>ct;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Fe(r,e,t){let n=r;for(;e-- >ct;)n*=n,n%=t;return n}function El(r,e){if(r===ct||e<=ct)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Ae(r,e),n=e,o=ct,s=He,i=He,a=ct;for(;t!==ct;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==He)throw new Error("invert: does not exist");return Ae(o,e)}function XS(r){let e=(r-He)/as,t,n,o;for(t=r-He,n=0;t%as===ct;t/=as,n++);for(o=as;o<r&&Xh(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/Qh;return function(c,l){let d=c.pow(l,i);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let s=(t+He)/as;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,s),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let m=1;for(let p=a.sqr(f);m<l&&!a.eql(p,a.ONE);m++)p=a.sqr(p);let h=a.pow(d,He<<BigInt(l-m-1));d=a.sqr(h),u=a.mul(u,h),f=a.mul(f,d),l=m}return u}}function jS(r){if(r%Qh===GS){let e=(r+He)/Qh;return function(n,o){let s=n.pow(o,e);if(!n.eql(n.sqr(s),o))throw new Error("Cannot find square root");return s}}if(r%Sm===_m){let e=(r-_m)/Sm;return function(n,o){let s=n.mul(o,as),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,as),i),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%QS,XS(r)}var Rm=(r,e)=>(Ae(r,e)&He)===He,ZS=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function jh(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=ZS.reduce((n,o)=>(n[o]="function",n),e);return yr(r,t)}function JS(r,e,t){if(t<ct)throw new Error("Expected power > 0");if(t===ct)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>ct;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function eR(r,e){let t=new Array(e.length),n=e.reduce((s,i,a)=>r.is0(i)?s:(t[a]=s,r.mul(s,i)),r.ONE),o=r.inv(n);return e.reduceRight((s,i,a)=>r.is0(i)?s:(t[a]=r.mul(s,t[a]),r.mul(s,i)),o),t}function Zh(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function xl(r,e,t=!1,n={}){if(r<=ct)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=Zh(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=jS(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:ga(o),ZERO:ct,ONE:He,create:c=>Ae(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return ct<=c&&c<r},is0:c=>c===ct,isOdd:c=>(c&He)===He,neg:c=>Ae(-c,r),eql:(c,l)=>c===l,sqr:c=>Ae(c*c,r),add:(c,l)=>Ae(c+l,r),sub:(c,l)=>Ae(c-l,r),mul:(c,l)=>Ae(c*l,r),pow:(c,l)=>JS(a,c,l),div:(c,l)=>Ae(c*El(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>El(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>eR(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?vn(c,s):ho(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?Br(c):xn(c)}});return Object.freeze(a)}function Am(r,e){if(!r.isOdd)throw new Error("Field doesn't have isOdd");let t=r.sqrt(e);return r.isOdd(t)?r.neg(t):t}function Im(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function Jh(r){let e=Im(r);return e+Math.ceil(e/2)}function Dm(r,e,t=!1){let n=r.length,o=Im(e),s=Jh(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?xn(r):Br(r),a=Ae(i,e-He)+He;return t?vn(a,o):ho(a,o)}var rR=BigInt(0),e0=BigInt(1);function vl(r,e){let t=(o,s)=>{let i=s.negate();return o?i:s},n=o=>{let s=Math.ceil(e/o)+1,i=2**(o-1);return{windows:s,windowSize:i}};return{constTimeNegate:t,unsafeLadder(o,s){let i=r.ZERO,a=o;for(;s>rR;)s&e0&&(i=i.add(a)),a=a.double(),s>>=e0;return i},precomputeWindow(o,s){let{windows:i,windowSize:a}=n(s),c=[],l=o,d=l;for(let u=0;u<i;u++){d=l,c.push(d);for(let f=1;f<a;f++)d=d.add(l),c.push(d);l=d.double()}return c},wNAF(o,s,i){let{windows:a,windowSize:c}=n(o),l=r.ZERO,d=r.BASE,u=BigInt(2**o-1),f=2**o,m=BigInt(o);for(let h=0;h<a;h++){let p=h*c,y=Number(i&u);i>>=m,y>c&&(y-=f,i+=e0);let w=p,E=p+Math.abs(y)-1,b=h%2!==0,S=y<0;y===0?d=d.add(t(b,s[w])):l=l.add(t(S,s[E]))}return{p:l,f:d}},wNAFCached(o,s,i,a){let c=o._WINDOW_SIZE||1,l=s.get(o);return l||(l=this.precomputeWindow(o,c),c!==1&&s.set(o,a(l))),this.wNAF(c,l,i)}}}function ya(r){return jh(r.Fp),yr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Zh(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Mr=BigInt(0),Jt=BigInt(1),_l=BigInt(2),nR=BigInt(8),oR={zip215:!0};function sR(r){let e=ya(r);return yr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Sl(r){let e=sR(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=_l<<BigInt(a*8)-Jt,d=t.create,u=e.uvRatio||((T,v)=>{try{return{isValid:!0,value:t.sqrt(T*t.inv(v))}}catch{return{isValid:!1,value:Mr}}}),f=e.adjustScalarBytes||(T=>T),m=e.domain||((T,v,M)=>{if(v.length||M)throw new Error("Contexts/pre-hash are not supported");return T}),h=T=>typeof T=="bigint"&&Mr<T,p=(T,v)=>h(T)&&h(v)&&T<v,y=T=>T===Mr||p(T,l);function w(T,v){if(p(T,v))return T;throw new Error(`Expected valid scalar < ${v}, got ${typeof T} ${T}`)}function E(T){return T===Mr?T:w(T,n)}let b=new Map;function S(T){if(!(T instanceof R))throw new Error("ExtendedPoint expected")}class R{constructor(v,M,V,H){if(this.ex=v,this.ey=M,this.ez=V,this.et=H,!y(v))throw new Error("x required");if(!y(M))throw new Error("y required");if(!y(V))throw new Error("z required");if(!y(H))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(v){if(v instanceof R)throw new Error("extended point not allowed");let{x:M,y:V}=v||{};if(!y(M)||!y(V))throw new Error("invalid affine point");return new R(M,V,Jt,d(M*V))}static normalizeZ(v){let M=t.invertBatch(v.map(V=>V.ez));return v.map((V,H)=>V.toAffine(M[H])).map(R.fromAffine)}_setWindowSize(v){this._WINDOW_SIZE=v,b.delete(this)}assertValidity(){let{a:v,d:M}=e;if(this.is0())throw new Error("bad point: ZERO");let{ex:V,ey:H,ez:ne,et:se}=this,fe=d(V*V),ce=d(H*H),ue=d(ne*ne),Me=d(ue*ue),ke=d(fe*v),ht=d(ue*d(ke+ce)),pt=d(Me+d(M*d(fe*ce)));if(ht!==pt)throw new Error("bad point: equation left != right (1)");let it=d(V*H),At=d(ne*se);if(it!==At)throw new Error("bad point: equation left != right (2)")}equals(v){S(v);let{ex:M,ey:V,ez:H}=this,{ex:ne,ey:se,ez:fe}=v,ce=d(M*fe),ue=d(ne*H),Me=d(V*fe),ke=d(se*H);return ce===ue&&Me===ke}is0(){return this.equals(R.ZERO)}negate(){return new R(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:v}=e,{ex:M,ey:V,ez:H}=this,ne=d(M*M),se=d(V*V),fe=d(_l*d(H*H)),ce=d(v*ne),ue=M+V,Me=d(d(ue*ue)-ne-se),ke=ce+se,ht=ke-fe,pt=ce-se,it=d(Me*ht),At=d(ke*pt),mn=d(Me*pt),Ho=d(ht*ke);return new R(it,At,Ho,mn)}add(v){S(v);let{a:M,d:V}=e,{ex:H,ey:ne,ez:se,et:fe}=this,{ex:ce,ey:ue,ez:Me,et:ke}=v;if(M===BigInt(-1)){let W3=d((ne-H)*(ue+ce)),z3=d((ne+H)*(ue-ce)),bf=d(z3-W3);if(bf===Mr)return this.double();let G3=d(se*_l*ke),Y3=d(fe*_l*Me),Q3=Y3+G3,X3=z3+W3,j3=Y3-G3,XE=d(Q3*bf),jE=d(X3*j3),ZE=d(Q3*j3),JE=d(bf*X3);return new R(XE,jE,JE,ZE)}let ht=d(H*ce),pt=d(ne*ue),it=d(fe*V*ke),At=d(se*Me),mn=d((H+ne)*(ce+ue)-ht-pt),Ho=At-it,sa=At+it,q3=d(pt-M*ht),zE=d(mn*Ho),GE=d(sa*q3),YE=d(mn*q3),QE=d(Ho*sa);return new R(zE,GE,QE,YE)}subtract(v){return this.add(v.negate())}wNAF(v){return _.wNAFCached(this,b,v,R.normalizeZ)}multiply(v){let{p:M,f:V}=this.wNAF(w(v,n));return R.normalizeZ([M,V])[0]}multiplyUnsafe(v){let M=E(v);return M===Mr?D:this.equals(D)||M===Jt?this:this.equals(A)?this.wNAF(M).p:_.unsafeLadder(this,M)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return _.unsafeLadder(this,n).is0()}toAffine(v){let{ex:M,ey:V,ez:H}=this,ne=this.is0();v==null&&(v=ne?nR:t.inv(H));let se=d(M*v),fe=d(V*v),ce=d(H*v);if(ne)return{x:Mr,y:Jt};if(ce!==Jt)throw new Error("invZ was invalid");return{x:se,y:fe}}clearCofactor(){let{h:v}=e;return v===Jt?this:this.multiplyUnsafe(v)}static fromHex(v,M=!1){let{d:V,a:H}=e,ne=t.BYTES;v=Ue("pointHex",v,ne);let se=v.slice(),fe=v[ne-1];se[ne-1]=fe&-129;let ce=Br(se);ce===Mr||(M?w(ce,l):w(ce,t.ORDER));let ue=d(ce*ce),Me=d(ue-Jt),ke=d(V*ue-H),{isValid:ht,value:pt}=u(Me,ke);if(!ht)throw new Error("Point.fromHex: invalid y coordinate");let it=(pt&Jt)===Jt,At=(fe&128)!==0;if(!M&&pt===Mr&&At)throw new Error("Point.fromHex: x=0 and x_0=1");return At!==it&&(pt=d(-pt)),R.fromAffine({x:pt,y:ce})}static fromPrivateKey(v){return N(v).point}toRawBytes(){let{x:v,y:M}=this.toAffine(),V=vn(M,t.BYTES);return V[V.length-1]|=v&Jt?128:0,V}toHex(){return En(this.toRawBytes())}}R.BASE=new R(e.Gx,e.Gy,Jt,d(e.Gx*e.Gy)),R.ZERO=new R(Mr,Jt,Jt,Mr);let{BASE:A,ZERO:D}=R,_=vl(R,a*8);function k(T){return Ae(T,n)}function P(T){return k(Br(T))}function N(T){let v=a;T=Ue("private key",T,v);let M=Ue("hashed private key",s(T),2*v),V=f(M.slice(0,v)),H=M.slice(v,2*v),ne=P(V),se=A.multiply(ne),fe=se.toRawBytes();return{head:V,prefix:H,scalar:ne,point:se,pointBytes:fe}}function O(T){return N(T).pointBytes}function F(T=new Uint8Array,...v){let M=_n(...v);return P(s(m(M,Ue("context",T),!!o)))}function Y(T,v,M={}){T=Ue("message",T),o&&(T=o(T));let{prefix:V,scalar:H,pointBytes:ne}=N(v),se=F(M.context,V,T),fe=A.multiply(se).toRawBytes(),ce=F(M.context,fe,ne,T),ue=k(se+ce*H);E(ue);let Me=_n(fe,vn(ue,t.BYTES));return Ue("result",Me,a*2)}let I=oR;function C(T,v,M,V=I){let{context:H,zip215:ne}=V,se=t.BYTES;T=Ue("signature",T,2*se),v=Ue("message",v),o&&(v=o(v));let fe=Br(T.slice(se,2*se)),ce,ue,Me;try{ce=R.fromHex(M,ne),ue=R.fromHex(T.slice(0,se),ne),Me=A.multiplyUnsafe(fe)}catch{return!1}if(!ne&&ce.isSmallOrder())return!1;let ke=F(H,ue.toRawBytes(),ce.toRawBytes(),v);return ue.add(ce.multiplyUnsafe(ke)).subtract(Me).clearCofactor().equals(R.ZERO)}return A._setWindowSize(8),{CURVE:e,getPublicKey:O,sign:Y,verify:C,ExtendedPoint:R,utils:{getExtendedPublicKey:N,randomPrivateKey:()=>i(t.BYTES),precompute(T=8,v=R.BASE){return v._setWindowSize(T),v.multiply(BigInt(3)),v}}}}var wa=BigInt(0),t0=BigInt(1);function iR(r){return yr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function Tm(r){let e=iR(r),{P:t}=e,n=b=>Ae(b,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(b=>b),c=e.powPminus2||(b=>Xh(b,t-BigInt(2),t));function l(b,S,R){let A=n(b*(S-R));return S=n(S-A),R=n(R+A),[S,R]}function d(b){if(typeof b=="bigint"&&wa<=b&&b<t)return b;throw new Error("Expected valid scalar 0 < scalar < CURVE.P")}let u=(e.a-BigInt(2))/BigInt(4);function f(b,S){let R=d(b),A=d(S),D=R,_=t0,k=wa,P=R,N=t0,O=wa,F;for(let I=BigInt(o-1);I>=wa;I--){let C=A>>I&t0;O^=C,F=l(O,_,P),_=F[0],P=F[1],F=l(O,k,N),k=F[0],N=F[1],O=C;let $=_+k,T=n($*$),v=_-k,M=n(v*v),V=T-M,H=P+N,ne=P-N,se=n(ne*$),fe=n(H*v),ce=se+fe,ue=se-fe;P=n(ce*ce),N=n(D*n(ue*ue)),_=n(T*M),k=n(V*(T+n(u*V)))}F=l(O,_,P),_=F[0],P=F[1],F=l(O,k,N),k=F[0],N=F[1];let Y=c(k);return n(_*Y)}function m(b){return vn(n(b),s)}function h(b){let S=Ue("u coordinate",b,s);return i===32&&(S[31]&=127),Br(S)}function p(b){let S=Ue("scalar",b),R=S.length;if(R!==s&&R!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${R}`);return Br(a(S))}function y(b,S){let R=h(S),A=p(b),D=f(R,A);if(D===wa)throw new Error("Invalid private or public key received");return m(D)}let w=m(e.Gu);function E(b){return y(b,w)}return{scalarMult:y,scalarMultBase:E,getSharedSecret:(b,S)=>y(b,S),getPublicKey:b=>E(b),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:w}}var ba=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),km=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),ZF=BigInt(0),aR=BigInt(1),r0=BigInt(2),cR=BigInt(5),Cm=BigInt(10),lR=BigInt(20),uR=BigInt(40),Nm=BigInt(80);function Pm(r){let e=ba,n=r*r%e*r%e,o=Fe(n,r0,e)*n%e,s=Fe(o,aR,e)*r%e,i=Fe(s,cR,e)*s%e,a=Fe(i,Cm,e)*i%e,c=Fe(a,lR,e)*a%e,l=Fe(c,uR,e)*c%e,d=Fe(l,Nm,e)*l%e,u=Fe(d,Nm,e)*l%e,f=Fe(u,Cm,e)*i%e;return{pow_p_5_8:Fe(f,r0,e)*r%e,b2:n}}function Om(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function dR(r,e){let t=ba,n=Ae(e*e*e,t),o=Ae(n*n*e,t),s=Pm(r*o).pow_p_5_8,i=Ae(r*n*s,t),a=Ae(e*i*i,t),c=i,l=Ae(i*km,t),d=a===r,u=a===Ae(-r,t),f=a===Ae(-r*km,t);return d&&(i=c),(u||f)&&(i=l),Rm(i,t)&&(i=Ae(-i,t)),{isValid:d||u,value:i}}var Sn=xl(ba,void 0,!0),n0={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Sn,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:uo,randomBytes:ss,adjustScalarBytes:Om,uvRatio:dR},si=Sl(n0);function Lm(r,e,t){if(e.length>255)throw new Error("Context is too big");return pl(Hh("SigEd25519 no Ed25519 collisions"),new Uint8Array([t?1:0,e.length]),e,r)}var JF=Sl({...n0,domain:Lm}),eV=Sl({...n0,domain:Lm,prehash:uo}),Ea=Tm({P:ba,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=ba,{pow_p_5_8:t,b2:n}=Pm(r);return Ae(Fe(t,BigInt(3),e)*n,e)},adjustScalarBytes:Om,randomBytes:ss});var fR=(Sn.ORDER+BigInt(3))/BigInt(8),tV=Sn.pow(r0,fR),rV=Sn.sqrt(Sn.neg(Sn.ONE)),nV=(Sn.ORDER-BigInt(5))/BigInt(8),oV=BigInt(486662);var sV=Am(Sn,Sn.neg(BigInt(486664)));var iV=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),aV=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),cV=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),lV=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var uV=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var ii=32,Rn=64,Rl=32;function Bm(){let r=si.utils.randomPrivateKey(),e=si.getPublicKey(r);return{privateKey:Vm(r,e),publicKey:e}}function Mm(r){if(r.length!==Rl)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=si.getPublicKey(e);return{privateKey:Vm(e,t),publicKey:t}}function Um(r,e){let t=r.subarray(0,Rl);return si.sign(e instanceof Uint8Array?e:e.subarray(),t)}function Fm(r,e,t){return si.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function Vm(r,e){let t=new Uint8Array(Rn);for(let n=0;n<Rl;n++)t[n]=r[n],t[Rl+n]=e[n];return t}var qe={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var o0={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Al(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=qe.get();t*=8;async function c(u,f){let m=a.getRandomValues(new Uint8Array(s)),h=a.getRandomValues(new Uint8Array(n)),p={name:e,iv:h};typeof f=="string"&&(f=B(f));let y;if(f.length===0){y=await a.subtle.importKey("jwk",o0,{name:"AES-GCM"},!0,["encrypt"]);try{let E={name:"PBKDF2",salt:m,iterations:i,hash:{name:o}},b=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(E,b,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",o0,{name:"AES-GCM"},!0,["encrypt"])}}else{let E={name:"PBKDF2",salt:m,iterations:i,hash:{name:o}},b=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(E,b,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(p,y,u);return _e([m,p.iv,new Uint8Array(w)])}async function l(u,f){let m=u.subarray(0,s),h=u.subarray(s,s+n),p=u.subarray(s+n),y={name:e,iv:h};typeof f=="string"&&(f=B(f));let w;if(f.length===0)try{let b={name:"PBKDF2",salt:m,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(b,S,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",o0,{name:"AES-GCM"},!0,["decrypt"])}else{let b={name:"PBKDF2",salt:m,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(b,S,{name:e,length:t},!0,["decrypt"])}let E=await a.subtle.decrypt(y,w,p);return new Uint8Array(E)}return{encrypt:c,decrypt:l}}async function ai(r,e){let n=await Al().encrypt(r,e);return dr.encode(n)}var ci={};ge(ci,{KeyType:()=>Ve,PrivateKey:()=>Fr,PublicKey:()=>Ur});var Ve;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Ve||(Ve={}));var s0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(s0||(s0={}));(function(r){r.codec=()=>$e(s0)})(Ve||(Ve={}));var Ur;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ve.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Ve.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Ur||(Ur={}));var Fr;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ve.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Ve.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Fr||(Fr={}));var cs=class{_key;constructor(e){this._key=li(e,ii)}verify(e,t){return Fm(this._key,t,e)}marshal(){return this._key}get bytes(){return Ur.encode({Type:Ve.Ed25519,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=Re.digest(this.bytes);return gr(e)?e.then(({bytes:t})=>t):e.bytes}},An=class{_key;_publicKey;constructor(e,t){this._key=li(e,Rn),this._publicKey=li(t,ii)}sign(e){return Um(this._key,e)}get public(){return new cs(this._publicKey)}marshal(){return this._key}get bytes(){return Fr.encode({Type:Ve.Ed25519,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}async hash(){let e=Re.digest(this.bytes),t;return gr(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=hr.digest(this.public.bytes);return ae.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ai(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function pR(r){if(r.length>Rn){r=li(r,Rn+ii);let n=r.subarray(0,Rn),o=r.subarray(Rn,r.length);return new An(n,o)}r=li(r,Rn);let e=r.subarray(0,Rn),t=r.subarray(ii);return new An(e,t)}function mR(r){return r=li(r,ii),new cs(r)}async function gR(){let{privateKey:r,publicKey:e}=Bm();return new An(r,e)}async function i0(r){let{privateKey:e,publicKey:t}=Mm(r);return new An(e,t)}function li(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new g(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var $m={"P-256":256,"P-384":384,"P-521":521},yR=Object.keys($m),c0=yR.join(" / ");async function Hm(r){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new g(`Unknown curve: ${r}. Must be ${c0}`,"ERR_INVALID_CURVE");let e=await qe.get().subtle.generateKey({name:"ECDH",namedCurve:r},!0,["deriveBits"]),t=async(s,i)=>{let a;i!=null?a=await qe.get().subtle.importKey("jwk",bR(r,i),{name:"ECDH",namedCurve:r},!1,["deriveBits"]):a=e.privateKey;let c=await qe.get().subtle.importKey("jwk",Wm(r,s),{name:"ECDH",namedCurve:r},!1,[]),l=await qe.get().subtle.deriveBits({name:"ECDH",namedCurve:r,public:c},a,$m[r]);return new Uint8Array(l,0,l.byteLength)},n=await qe.get().subtle.exportKey("jwk",e.publicKey);return{key:wR(n),genSharedKey:t}}var qm={"P-256":32,"P-384":48,"P-521":66};function wR(r){if(r.crv==null||r.x==null||r.y==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");if(r.crv!=="P-256"&&r.crv!=="P-384"&&r.crv!=="P-521")throw new g(`Unknown curve: ${r.crv}. Must be ${c0}`,"ERR_INVALID_CURVE");let e=qm[r.crv];return _e([Uint8Array.from([4]),$h(r.x,e),$h(r.y,e)],1+e*2)}function Wm(r,e){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new g(`Unknown curve: ${r}. Must be ${c0}`,"ERR_INVALID_CURVE");let t=qm[r];if(!j(e.subarray(0,1),Uint8Array.from([4])))throw new g("Cannot unmarshal public key - invalid key format","ERR_INVALID_KEY_FORMAT");return{kty:"EC",crv:r,x:L(e.subarray(1,t+1),"base64url"),y:L(e.subarray(1+t),"base64url"),ext:!0}}var bR=(r,e)=>({...Wm(r,e.public),d:L(e.private,"base64url")});var zm=Hm;async function Gm(r,e){let t=dr.decode(r);return Al().decrypt(t,e)}var Ym={SHA1:20,SHA256:32,SHA512:64};var ER={SHA1:"SHA-1",SHA256:"SHA-256",SHA512:"SHA-512"},xR=async(r,e)=>{let t=await qe.get().subtle.sign({name:"HMAC"},r,e);return new Uint8Array(t,0,t.byteLength)};async function Qm(r,e){let t=ER[r],n=await qe.get().subtle.importKey("raw",e,{name:"HMAC",hash:{name:t}},!1,["sign"]);return{async digest(o){return xR(n,o)},length:Ym[r]}}var Xm={"AES-128":{ivSize:16,keySize:16},"AES-256":{ivSize:16,keySize:32},Blowfish:{ivSize:8,keySize:32}};async function jm(r,e,t){let n=Xm[r];if(n==null){let E=Object.keys(Xm).join(" / ");throw new g(`unknown cipher type '${r}'. Must be ${E}`,"ERR_INVALID_CIPHER_TYPE")}if(e==null)throw new g("missing hash type","ERR_MISSING_HASH_TYPE");let o=n.keySize,s=n.ivSize,i=20,a=B("key expansion"),c=2*(s+o+i),l=await Qm(e,t),d=await l.digest(a),u=[],f=0;for(;f<c;){let E=await l.digest(_e([d,a])),b=E.length;f+b>c&&(b=c-f),u.push(E),f+=b,d=await l.digest(d)}let m=c/2,h=_e(u),p=h.subarray(0,m),y=h.subarray(m,c),w=E=>({iv:E.subarray(0,s),cipherKey:E.subarray(s,s+o),macKey:E.subarray(s+o)});return{k1:w(p),k2:w(y)}}var b0={};ge(b0,{MAX_RSA_KEY_SIZE:()=>ds,RsaPrivateKey:()=>bo,RsaPublicKey:()=>us,fromJwk:()=>zR,generateKeyPair:()=>GR,unmarshalRsaPrivateKey:()=>y0,unmarshalRsaPublicKey:()=>WR});function $t(r){if(isNaN(r)||r<=0)throw new g("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return ss(r)}var wo={};ge(wo,{exportToPem:()=>KR,importFromPem:()=>g0,jwkToPkcs1:()=>MR,jwkToPkix:()=>FR,pkcs1ToJwk:()=>BR,pkixToJwk:()=>UR});var Il=class extends ri{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ns(e);let n=Lr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,s=new Uint8Array(o);s.set(n.length>o?e.create().update(n).digest():n);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return ti(this),this.iHash.update(e),this}digestInto(e){ti(this),ei(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},po=(r,e,t)=>new Il(r,e).update(t).digest();po.create=(r,e)=>new Il(r,e);function Zm(r,e,t,n){ns(r);let o=ym({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(io(s),io(i),io(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Lr(e),l=Lr(t),d=new Uint8Array(i),u=po.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function Jm(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function e6(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=Zm(r,e,t,n),l,d=new Uint8Array(4),u=os(d),f=new Uint8Array(a.outputLen);for(let m=1,h=0;h<s;m++,h+=a.outputLen){let p=i.subarray(h,h+a.outputLen);u.setInt32(0,m,!1),(l=c._cloneInto(l)).update(d).digestInto(f),p.set(f.subarray(0,p.length));for(let y=1;y<o;y++){a._cloneInto(l).update(f).digestInto(f);for(let w=0;w<p.length;w++)p[w]^=f[w]}}return Jm(a,c,i,l,f)}async function l0(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=Zm(r,e,t,n),d,u=new Uint8Array(4),f=os(u),m=new Uint8Array(c.outputLen);for(let h=1,p=0;p<s;h++,p+=c.outputLen){let y=a.subarray(p,p+c.outputLen);f.setInt32(0,h,!1),(d=l._cloneInto(d)).update(u).digestInto(m),y.set(m.subarray(0,y.length)),await gm(o-1,i,()=>{c._cloneInto(d).update(m).digestInto(m);for(let w=0;w<y.length;w++)y[w]^=m[w]})}return Jm(c,l,a,d,m)}var be=Ne(t6());function ls(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function mo(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function kl(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function d0(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=ls(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,ls(s,8)-n}function r6(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=mo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=mo(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function n6(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function Ht(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var rK=Math.log(2);function Cl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function f0(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function Cn(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var va=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return f0(this.items)}},xa=[new Uint8Array([1])],o6="0123456789";var fi="",Kr=new ArrayBuffer(0),h0=new Uint8Array(0),_a="EndOfContent",i6="OCTET STRING",a6="BIT STRING";function Nn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?be.BufferSourceConverter.toUint8Array(s.valueHex):h0}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Cn(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",Kr)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:be.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Dn=class{constructor({blockLength:e=0,error:t=fi,warnings:n=[],valueBeforeDecode:o=h0}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=be.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:be.Convert.ToHex(this.valueBeforeDecodeView)}}};Dn.NAME="baseBlock";var Ct=class extends Dn{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Ct.NAME="valueBlock";var Nl=class extends Nn(Dn){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?be.BufferSourceConverter.toUint8Array(e.valueHex):h0,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",Kr}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=mo(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=be.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let m=0;m<l.length;m++)f[m]=l[m];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=ls(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};Nl.NAME="identificationBlock";var Pl=class extends Dn{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=be.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=ls(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=mo(this.length,8);if(o.byteLength>127)return this.error="Too big length",Kr;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};Pl.NAME="lengthBlock";var W={},gt=class extends Dn{constructor({name:e=fi,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Nl(o),this.lenBlock=new Pl(o),this.valueBlock=s?new s(o):new Ct(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new va;t||c6(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?Kr:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():be.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${be.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return n6(t,n)}};gt.NAME="BaseBlock";function c6(r){if(r instanceof W.Constructed)for(let e of r.valueBlock.value)c6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var Ol=class extends gt{constructor({value:e=fi,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};Ol.NAME="BaseStringBlock";var Ll=class extends Nn(Ct){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Ll.NAME="PrimitiveValueBlock";var l6,Bl=class extends gt{constructor(e={}){super(e,Ll),this.idBlock.isConstructed=!1}};l6=Bl;W.Primitive=l6;Bl.NAME="PRIMITIVE";function CR(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function mu(r,e=0,t=r.length){let n=e,o=new gt({},Ct),s=new Dn;if(!Cn(s,r,e,t))return o.error=s.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=gt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=W.EndOfContent;break;case 1:c=W.Boolean;break;case 2:c=W.Integer;break;case 3:c=W.BitString;break;case 4:c=W.OctetString;break;case 5:c=W.Null;break;case 6:c=W.ObjectIdentifier;break;case 10:c=W.Enumerated;break;case 12:c=W.Utf8String;break;case 13:c=W.RelativeObjectIdentifier;break;case 14:c=W.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=W.Sequence;break;case 17:c=W.Set;break;case 18:c=W.NumericString;break;case 19:c=W.PrintableString;break;case 20:c=W.TeletexString;break;case 21:c=W.VideotexString;break;case 22:c=W.IA5String;break;case 23:c=W.UTCTime;break;case 24:c=W.GeneralizedTime;break;case 25:c=W.GraphicString;break;case 26:c=W.VisibleString;break;case 27:c=W.GeneralString;break;case 28:c=W.UniversalString;break;case 29:c=W.CharacterString;break;case 30:c=W.BmpString;break;case 31:c=W.DATE;break;case 32:c=W.TimeOfDay;break;case 33:c=W.DateTime;break;case 34:c=W.Duration;break;default:{let l=o.idBlock.isConstructed?new W.Constructed:new W.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?W.Constructed:W.Primitive}return o=CR(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function hi(r){if(!r.byteLength){let e=new gt({},Ct);return e.error="Input buffer has zero length",{offset:-1,result:e}}return mu(be.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function NR(r,e){return r?1:e}var nn=class extends Ct{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=be.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let s=t;for(;NR(this.isIndefiniteForm,n)>0;){let i=mu(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===_a)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===_a?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new va;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Kr:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};nn.NAME="ConstructedValueBlock";var u6,go=class extends gt{constructor(e={}){super(e,nn),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
|
|
17
|
+
`});var ww=Ae(()=>{yw();Id();Uo();Zp();mc()});var t3,cse,Ew=Ae(()=>{Gy();zy();Yy();Qy();Xy();Hp();jy();Gp();Zy();ew();lw();fw();hw();pw();ww();t3={...Up,...Mp,...Fp,...Vp,...Kp,...$p,...qp,...Wp,...zp,...Yp},cse={...Jp,...e3}});function Gi(r){return globalThis.Buffer!=null?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r}var Cd=Ae(()=>{});function Nd(r=0){return globalThis.Buffer!=null&&globalThis.Buffer.allocUnsafe!=null?Gi(globalThis.Buffer.allocUnsafe(r)):new Uint8Array(r)}var r3=Ae(()=>{Cd()});function xw(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var bw,n3,gk,Pd,o3=Ae(()=>{Ew();r3();bw=xw("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),n3=xw("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Nd(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),gk={utf8:bw,"utf-8":bw,hex:t3.base16,latin1:n3,ascii:n3,binary:n3,...t3},Pd=gk});var vw={};pe(vw,{toString:()=>yk});function yk(r,e="utf8"){let t=Pd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("utf8"):t.encoder.encode(r).substring(1)}var Rw=Ae(()=>{o3()});var Sw={};pe(Sw,{fromString:()=>wk});function wk(r,e="utf8"){let t=Pd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?Gi(globalThis.Buffer.from(r,"utf-8")):t.decoder.decode(`${t.prefix}${r}`)}var _w=Ae(()=>{o3();Cd()});var Aw={};pe(Aw,{concat:()=>Ek});function Ek(r,e){e||(e=r.reduce((o,s)=>o+s.length,0));let t=Nd(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return Gi(t)}var Iw=Ae(()=>{r3();Cd()});var i3=Ie((xse,Pw)=>{"use strict";var Dw=_y(),zi=By(),{names:yc}=My(),{toString:Od}=(Rw(),Rc(vw)),{fromString:bk}=(_w(),Rc(Sw)),{concat:xk}=(Iw(),Rc(Aw)),Yi={};for(let r in yc){let e=r;Yi[yc[e]]=e}Object.freeze(Yi);function vk(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Od(r,"base16")}function Rk(r){return bk(r,"base16")}function Sk(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Od(Dw.encode("base58btc",r)).slice(1)}function _k(r){let e=r instanceof Uint8Array?Od(r):r;return Dw.decode("z"+e)}function Tw(r){if(!(r instanceof Uint8Array))throw new Error("multihash must be a Uint8Array");if(r.length<2)throw new Error("multihash too short. must be > 2 bytes.");let e=zi.decode(r);if(!Cw(e))throw new Error(`multihash unknown function code: 0x${e.toString(16)}`);r=r.slice(zi.decode.bytes);let t=zi.decode(r);if(t<0)throw new Error(`multihash invalid length: ${t}`);if(r=r.slice(zi.decode.bytes),r.length!==t)throw new Error(`multihash length inconsistent: 0x${Od(r,"base16")}`);return{code:e,name:Yi[e],length:t,digest:r}}function Ak(r,e,t){if(!r||e===void 0)throw new Error("multihash encode requires at least two args: digest, code");let n=kw(e);if(!(r instanceof Uint8Array))throw new Error("digest should be a Uint8Array");if(t==null&&(t=r.length),t&&r.length!==t)throw new Error("digest length should be equal to specified length.");let o=zi.encode(n),s=zi.encode(t);return xk([o,s,r],o.length+s.length+r.length)}function kw(r){let e=r;if(typeof r=="string"){if(yc[r]===void 0)throw new Error(`Unrecognized hash function named: ${r}`);e=yc[r]}if(typeof e!="number")throw new Error(`Hash function code should be a number. Got: ${e}`);if(Yi[e]===void 0&&!s3(e))throw new Error(`Unrecognized function code: ${e}`);return e}function s3(r){return r>0&&r<16}function Cw(r){return!!(s3(r)||Yi[r])}function Nw(r){Tw(r)}function Ik(r){return Nw(r),r.subarray(0,2)}Pw.exports={names:yc,codes:Yi,toHexString:vk,fromHexString:Rk,toB58String:Sk,fromB58String:_k,decode:Tw,encode:Ak,coerceCode:kw,isAppCode:s3,validate:Nw,prefix:Ik,isValidCode:Cw}});var Gw=Ie(Md=>{"use strict";Object.defineProperty(Md,"__esModule",{value:!0});var u3=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},Ud=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new u3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Md.EventIterator=Ud;Md.default=Ud});var zw=Ie(wc=>{"use strict";Object.defineProperty(wc,"__esModule",{value:!0});var d3=Gw();wc.EventIterator=d3.EventIterator;function Lk(r,e,t){return new d3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}wc.subscribe=Lk;wc.default=d3.EventIterator});var hC={};pe(hC,{DEFAULT_SESSION_MAX_PROVIDERS:()=>hf,DEFAULT_SESSION_MIN_PROVIDERS:()=>ff,DEFAULT_SESSION_PROVIDER_QUERY_CONCURRENCY:()=>pf,DEFAULT_SESSION_PROVIDER_QUERY_TIMEOUT:()=>K3,createHelia:()=>dC,libp2pDefaults:()=>Kd});var ff=1,hf=5,pf=5,K3=5e3;var $3=Symbol.for("@libp2p/connection");var Jr=Symbol.for("@libp2p/content-routing");var Ko=Symbol.for("@libp2p/peer-discovery");var mf=Symbol.for("@libp2p/peer-id");function Cs(r){return r!=null&&!!r[mf]}var en=Symbol.for("@libp2p/peer-routing");var H3="keep-alive";var tn=Symbol.for("@libp2p/transport");var Yn;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Yn||(Yn={}));var Cr=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.name="AbortError",this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},m=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}},Sc=class extends AggregateError{code;props;constructor(e,t,n,o){super(e,t),this.code=n,this.name=o?.name??"AggregateCodeError",this.props=o??{}}};var pn="ERR_TIMEOUT";var q3="ERR_NOT_FOUND",$o="ERR_INVALID_MESSAGE";var ee=(r,...e)=>{try{[...e]}catch{}};var xe=class extends EventTarget{#e=new Map;constructor(){super(),ee(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new yt(e,t))}},gf=class extends Event{detail;constructor(e,t){super(e,t),this.detail=t?.detail}},yt=globalThis.CustomEvent??gf;function _c(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function Qn(...r){let e=[];for(let t of r)_c(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Xn(...r){let e=[];for(let t of r)_c(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}function ot(r){let e=new globalThis.AbortController;function t(){e.abort();for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function Z(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Ac=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Ns=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Ac(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new Ac(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var yf=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function dt(r={}){return GE(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function GE(r,e){e=e??{};let t=e.onEnd,n=new Ns,o,s,i,a=Z(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((y,w)=>{s=b=>{s=null,n.push(b);try{y(r(n))}catch(E){w(E)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=Z()})}},l=y=>s!=null?s(y):(n.push(y),o),d=y=>(n=new Ns,s!=null?s({error:y}):(n.push({error:y}),o)),u=y=>{if(i)return o;if(e?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:y})},f=y=>i?o:(i=!0,y!=null?d(y):l({done:!0})),g=()=>(n=new Ns,f(),{done:!0}),h=y=>(f(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:g,throw:h,push:u,end:f,get readableLength(){return n.size},onEmpty:async y=>{let w=y?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let b,E;w!=null&&(b=new Promise((S,_)=>{E=()=>{_(new yf)},w.addEventListener("abort",E)}));try{await Promise.race([a.promise,b])}finally{E!=null&&w!=null&&w?.removeEventListener("abort",E)}}},t==null)return o;let p=o;return o={[Symbol.asyncIterator](){return this},next(){return p.next()},throw(y){return p.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return p.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(y){return p.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return p.readableLength},onEmpty:y=>p.onEmpty(y)},o}var wf=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function rn(r,e,t,n){let o=new wf(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((s,i)=>{let a=l=>{try{if(n?.filter?.(l)===!1)return}catch(d){r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(d);return}r.removeEventListener(e,a),t?.removeEventListener("abort",c),s(l)},c=()=>{r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(o)};r.addEventListener(e,a),t?.addEventListener("abort",c)})}var Ic=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function Ot(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new Ic(t?.errorMessage,t?.errorCode));let n,o=new Ic(t?.errorMessage,t?.errorCode);try{return await Promise.race([r,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Dc=class{deferred;signal;where;constructor(e,t){this.signal=t,this.deferred=Z(),this.where=e,this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(new Cr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function zE(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Tc=class{id;fn;options;priority;recipients;status;timeline;controller;constructor(e,t,n=0){this.id=zE(),this.status="queued",this.fn=e,this.priority=n,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,ee(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&this.controller.abort(new Cr)}async join(e={}){let t=new Dc(new Error("where").stack,e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await Ot(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.signal?.removeEventListener("abort",this.onAbort)})}};function YE(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var mn=class extends xe{concurrency;queue;pending;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){if(this.queue[this.size-1]?.priority>=e.priority){this.queue.push(e);return}let t=YE(this.queue,e,(n,o)=>o.priority-n.priority);this.queue.splice(t,0,e)}async add(e,t){t?.signal?.throwIfAborted();let n=new Tc(e,t,t?.priority),o=n.join(t).then(s=>(this.safeDispatchEvent("completed",{detail:s}),this.safeDispatchEvent("success",{detail:{job:n,result:s}}),s)).catch(s=>{throw this.safeDispatchEvent("error",{detail:s}),this.safeDispatchEvent("failure",{detail:{job:n,error:s}}),s});return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),o}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Cr)}),this.clear()}async onEmpty(e){this.size!==0&&await rn(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await rn(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await rn(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=dt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail)},i=()=>{n()},a=()=>{n(new m("Queue aborted","ERR_QUEUE_ABORTED"))};this.addEventListener("completed",o),this.addEventListener("error",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var Vt=class extends mn{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var kc=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var W3=45,QE=15,Ps=new kc;function Ef(r){if(!(r.length>QE))return Ps.new(r).parseWith(()=>Ps.readIPv4Addr())}function bf(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>W3))return Ps.new(r).parseWith(()=>Ps.readIPv6Addr())}function Cc(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>W3))return Ps.new(r).parseWith(()=>Ps.readIPAddr())}function Os(r){return!!Ef(r)}function Ls(r){return!!bf(r)}function Nc(r){return!!Cc(r)}var _f={};pe(_f,{base58btc:()=>Ge,base58flickr:()=>tb});var tN=new Uint8Array(0);function G3(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function gn(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function z3(r){return new TextEncoder().encode(r)}function Y3(r){return new TextDecoder().decode(r)}function XE(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,b=h.length;w!==b&&h[w]===0;)w++,p++;for(var E=(b-w)*d+1>>>0,S=new Uint8Array(E);w!==b;){for(var _=h[w],A=0,D=E-1;(_!==0||A<y)&&D!==-1;D--,A++)_+=256*S[D]>>>0,S[D]=_%a>>>0,_=_/a>>>0;if(_!==0)throw new Error("Non-zero carry");y=A,w++}for(var R=E-y;R!==E&&S[R]===0;)R++;for(var k=c.repeat(p);R<E;++R)k+=r.charAt(S[R]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var b=(h.length-p)*l+1>>>0,E=new Uint8Array(b);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var _=0,A=b-1;(S!==0||_<w)&&A!==-1;A--,_++)S+=a*E[A]>>>0,E[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=_,p++}if(h[p]!==" "){for(var D=b-w;D!==b&&E[D]===0;)D++;for(var R=new Uint8Array(y+(b-D)),k=y;D!==b;)R[k++]=E[D++];return R}}}function g(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:g}}var jE=XE,ZE=jE,X3=ZE;var xf=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},vf=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return j3(this,e)}},Rf=class{decoders;constructor(e){this.decoders=e}or(e){return j3(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function j3(r,e){return new Rf({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Sf=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new xf(e,t,n),this.decoder=new vf(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Bs({name:r,prefix:e,encode:t,decode:n}){return new Sf(r,e,t,n)}function jn({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=X3(t,r);return Bs({prefix:e,name:r,encode:n,decode:s=>gn(o(s))})}function JE(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function eb(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function Qe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Bs({prefix:e,name:r,encode(o){return eb(o,n,t)},decode(o){return JE(o,n,t,r)}})}var Ge=jn({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),tb=jn({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Af={};pe(Af,{base32:()=>ct,base32hex:()=>ob,base32hexpad:()=>ib,base32hexpadupper:()=>ab,base32hexupper:()=>sb,base32pad:()=>rb,base32padupper:()=>nb,base32upper:()=>Z3,base32z:()=>cb});var ct=Qe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Z3=Qe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),rb=Qe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),nb=Qe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),ob=Qe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),sb=Qe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),ib=Qe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),ab=Qe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),cb=Qe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var fr={};pe(fr,{Digest:()=>Ho,create:()=>Nr,decode:()=>Pr,equals:()=>Df});var lb=t4,J3=128,ub=127,db=~ub,fb=Math.pow(2,31);function t4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=fb;)e[t++]=r&255|J3,r/=128;for(;r&db;)e[t++]=r&255|J3,r>>>=7;return e[t]=r|0,t4.bytes=t-n+1,e}var hb=If,pb=128,e4=127;function If(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw If.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&e4)<<o:(i&e4)*Math.pow(2,o),o+=7}while(i>=pb);return If.bytes=s-n,t}var mb=Math.pow(2,7),gb=Math.pow(2,14),yb=Math.pow(2,21),wb=Math.pow(2,28),Eb=Math.pow(2,35),bb=Math.pow(2,42),xb=Math.pow(2,49),vb=Math.pow(2,56),Rb=Math.pow(2,63),Sb=function(r){return r<mb?1:r<gb?2:r<yb?3:r<wb?4:r<Eb?5:r<bb?6:r<xb?7:r<vb?8:r<Rb?9:10},_b={encode:lb,decode:hb,encodingLength:Sb},Ab=_b,ea=Ab;function ta(r,e=0){return[ea.decode(r,e),ea.decode.bytes]}function Us(r,e,t=0){return ea.encode(r,e,t),e}function Ms(r){return ea.encodingLength(r)}function Nr(r,e){let t=e.byteLength,n=Ms(r),o=n+Ms(t),s=new Uint8Array(o+t);return Us(r,s,0),Us(t,s,n),s.set(e,o),new Ho(r,t,e,s)}function Pr(r){let e=gn(r),[t,n]=ta(e),[o,s]=ta(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Ho(t,o,i,e)}function Df(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&G3(r.bytes,t.bytes)}}var Ho=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function r4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Db(t,Tf(r),e??Ge.encoder);default:return Tb(t,Tf(r),e??ct.encoder)}}var n4=new WeakMap;function Tf(r){let e=n4.get(r);if(e==null){let t=new Map;return n4.set(r,t),t}return e}var ce=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==ra)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==kb)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Nr(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&Df(e.multihash,n.multihash)}toString(e){return r4(this,e)}toJSON(){return{"/":r4(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new r(n,o,s,i??o4(n,o,s.bytes))}else if(t[Cb]===!0){let{version:n,multihash:o,code:s}=t,i=Pr(o);return r.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==ra)throw new Error(`Version 0 CID must use dag-pb (code: ${ra}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=o4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ra,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new Ho(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=ta(e.subarray(t));return t+=f,u},o=n(),s=ra;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=Ib(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Tf(s).set(n,e),s}};function Ib(r,e){switch(r[0]){case"Q":{let t=e??Ge;return[Ge.prefix,t.decode(`${Ge.prefix}${r}`)]}case Ge.prefix:{let t=e??Ge;return[Ge.prefix,t.decode(r)]}case ct.prefix:{let t=e??ct;return[ct.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function Db(r,e,t){let{prefix:n}=t;if(n!==Ge.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function Tb(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var ra=112,kb=18;function o4(r,e,t){let n=Ms(r),o=n+Ms(e),s=new Uint8Array(o+t.byteLength);return Us(r,s,0),Us(e,s,n),s.set(t,o),s}var Cb=Symbol.for("@ipld/js-cid/CID");function j(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var kf={};pe(kf,{base10:()=>Nb});var Nb=jn({prefix:"9",name:"base10",alphabet:"0123456789"});var Cf={};pe(Cf,{base16:()=>Pb,base16upper:()=>Ob});var Pb=Qe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Ob=Qe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Nf={};pe(Nf,{base2:()=>Lb});var Lb=Qe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Pf={};pe(Pf,{base256emoji:()=>Vb});var s4=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Bb=s4.reduce((r,e,t)=>(r[t]=e,r),[]),Ub=s4.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function Mb(r){return r.reduce((e,t)=>(e+=Bb[t],e),"")}function Fb(r){let e=[];for(let t of r){let n=Ub[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Vb=Bs({prefix:"\u{1F680}",name:"base256emoji",encode:Mb,decode:Fb});var Of={};pe(Of,{base36:()=>Zn,base36upper:()=>Kb});var Zn=jn({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Kb=jn({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Bf={};pe(Bf,{base64:()=>lt,base64pad:()=>$b,base64url:()=>Lf,base64urlpad:()=>Hb});var lt=Qe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),$b=Qe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Lf=Qe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Hb=Qe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Uf={};pe(Uf,{base8:()=>qb});var qb=Qe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Mf={};pe(Mf,{identity:()=>Wb});var Wb=Bs({prefix:"\0",name:"identity",encode:r=>Y3(r),decode:r=>z3(r)});var AN=new TextEncoder,IN=new TextDecoder;var i4=512;var Oc=85;var Vf={};pe(Vf,{identity:()=>hr});var c4=0,Gb="identity",l4=gn;function zb(r){return Nr(c4,l4(r))}var hr={code:c4,name:Gb,encode:l4,digest:zb};var qf={};pe(qf,{sha256:()=>De,sha512:()=>Hf});function $f({name:r,code:e,encode:t}){return new Kf(r,e,t)}var Kf=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Nr(this.code,t):t.then(n=>Nr(this.code,n))}else throw Error("Unknown type, must be binary type")}};function d4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var De=$f({name:"sha2-256",code:18,encode:d4("SHA-256")}),Hf=$f({name:"sha2-512",code:19,encode:d4("SHA-512")});var pr={...Mf,...Nf,...Uf,...kf,...Cf,...Af,...Of,..._f,...Bf,...Pf},VN={...qf,...Vf};function Ce(r=0){return new Uint8Array(r)}function ze(r=0){return new Uint8Array(r)}function h4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var f4=h4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Wf=h4("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=ze(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),Yb={utf8:f4,"utf-8":f4,hex:pr.base16,latin1:Wf,ascii:Wf,binary:Wf,...pr},Lc=Yb;function P(r,e="utf8"){let t=Lc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var Qb=Math.pow(2,7),Xb=Math.pow(2,14),jb=Math.pow(2,21),Gf=Math.pow(2,28),zf=Math.pow(2,35),Yf=Math.pow(2,42),Qf=Math.pow(2,49),Te=128,kt=127;function Ne(r){if(r<Qb)return 1;if(r<Xb)return 2;if(r<jb)return 3;if(r<Gf)return 4;if(r<zf)return 5;if(r<Yf)return 6;if(r<Qf)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Xf(r,e,t=0){switch(Ne(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Zb(r,e,t=0){switch(Ne(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function jf(r,e){let t=r[e],n=0;if(n+=t&kt,t<Te||(t=r[e+1],n+=(t&kt)<<7,t<Te)||(t=r[e+2],n+=(t&kt)<<14,t<Te)||(t=r[e+3],n+=(t&kt)<<21,t<Te)||(t=r[e+4],n+=(t&kt)*Gf,t<Te)||(t=r[e+5],n+=(t&kt)*zf,t<Te)||(t=r[e+6],n+=(t&kt)*Yf,t<Te)||(t=r[e+7],n+=(t&kt)*Qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Jb(r,e){let t=r.get(e),n=0;if(n+=t&kt,t<Te||(t=r.get(e+1),n+=(t&kt)<<7,t<Te)||(t=r.get(e+2),n+=(t&kt)<<14,t<Te)||(t=r.get(e+3),n+=(t&kt)<<21,t<Te)||(t=r.get(e+4),n+=(t&kt)*Gf,t<Te)||(t=r.get(e+5),n+=(t&kt)*zf,t<Te)||(t=r.get(e+6),n+=(t&kt)*Yf,t<Te)||(t=r.get(e+7),n+=(t&kt)*Qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=ze(Ne(r))),e instanceof Uint8Array?Xf(r,e,t):Zb(r,e,t)}function Lt(r,e=0){return r instanceof Uint8Array?jf(r,e):Jb(r,e)}function ve(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=ze(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var sP=parseInt("0xFFFF",16),iP=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function B(r,e="utf8"){let t=Lc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var g4=Os,sx=Ls,Zf=function(r){let e=0;if(r=r.toString().trim(),g4(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(sx(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=g4(t[n]),i;s&&(i=Zf(t[n]),t[n]=P(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,P(i.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},y4=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Fs={},Jf={},ax=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[777,-1,"memory"]];ax.forEach(r=>{let e=cx(...r);Jf[e.code]=e,Fs[e.name]=e});function cx(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function J(r){if(typeof r=="number"){if(Jf[r]!=null)return Jf[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Fs[r]!=null)return Fs[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var HP=J("ip4"),qP=J("ip6"),WP=J("ipcidr");function th(r,e){switch(J(r).code){case 4:case 41:return ux(e);case 42:return b4(e);case 6:case 273:case 33:case 132:return v4(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return b4(e);case 421:return px(e);case 444:return x4(e);case 445:return x4(e);case 466:return hx(e);default:return P(e,"base16")}}function rh(r,e){switch(J(r).code){case 4:return w4(e);case 41:return w4(e);case 42:return E4(e);case 6:case 273:case 33:case 132:return nh(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return E4(e);case 421:return dx(e);case 444:return mx(e);case 445:return gx(e);case 466:return fx(e);default:return B(e,"base16")}}var eh=Object.values(pr).map(r=>r.decoder),lx=function(){let r=eh[0].or(eh[1]);return eh.slice(2).forEach(e=>r=r.or(e)),r}();function w4(r){if(!Nc(r))throw new Error("invalid ip address");return Zf(r)}function ux(r){let e=y4(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!Nc(e))throw new Error("invalid ip address");return e}function nh(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function v4(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function E4(r){let e=B(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function b4(r){let e=Lt(r);if(r=r.slice(Ne(e)),r.length!==e)throw new Error("inconsistent lengths");return P(r)}function dx(r){let e;r[0]==="Q"||r[0]==="1"?e=Pr(Ge.decode(`z${r}`)).bytes:e=ce.parse(r).multihash.bytes;let t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function fx(r){let e=lx.decode(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function hx(r){let e=Lt(r),t=r.slice(Ne(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+P(t,"base64url")}function px(r){let e=Lt(r),t=r.slice(Ne(e));if(t.length!==e)throw new Error("inconsistent lengths");return P(t,"base58btc")}function mx(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=ct.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=nh(n);return ve([t,o],t.length+o.length)}function gx(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=ct.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=nh(n);return ve([t,o],t.length+o.length)}function x4(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=P(e,"base32"),o=v4(t);return`${n}:${o}`}function R4(r){r=oh(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=J(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw _4("invalid address: "+r);if(a.path===!0){n=oh(o.slice(s).join("/")),e.push([a.code,rh(a.code,n)]),t.push([a.code,n]);break}let c=rh(a.code,o[s]);e.push([a.code,c]),t.push([a.code,th(a.code,c)])}return{string:S4(t),bytes:ih(e),tuples:e,stringTuples:t,path:n}}function sh(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Lt(r,o),i=Ne(s),a=J(s),c=yx(a,r.slice(o+i));if(c===0){e.push([s]),t.push([s]),o+=i;continue}let l=r.slice(o+i,o+i+c);if(o+=c+i,o>r.length)throw _4("Invalid address Uint8Array: "+P(r,"base16"));e.push([s,l]);let d=th(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:S4(t),tuples:e,stringTuples:t,path:n}}function S4(r){let e=[];return r.map(t=>{let n=J(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),oh(e.join("/"))}function ih(r){return ve(r.map(e=>{let t=J(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=ve([n,e[1]])),n}))}function yx(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Lt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Ne(t)}}function oh(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function _4(r){return new Error("Error parsing address: "+r)}var wx=Symbol.for("nodejs.util.inspect.custom"),ah=Symbol.for("@multiformats/js-multiaddr/multiaddr"),Ex=[J("dns").code,J("dns4").code,J("dns6").code,J("dnsaddr").code],Bc=class r{bytes;#e;#t;#r;#i;[ah]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=sh(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=R4(e)}else if(Jn(e))t=sh(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#i=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=J("tcp"),a=J("udp"),c=J("ip4"),l=J("ip6"),d=J("dns6"),u=J("ip6zone");for(let[g,h]of this.stringTuples())g===u.code&&(s=`%${h??""}`),Ex.includes(g)&&(t=i.name,o=443,n=`${h??""}${s}`,e=g===d.code?6:4),(g===i.code||g===a.code)&&(t=J(g).name,o=parseInt(h??"")),(g===c.code||g===l.code)&&(t=J(g).name,n=`${h??""}${s}`,e=g===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},J(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>J(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(ih(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Fs.p2p.code&&e.push([n,o]),n===Fs["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?P(Ge.decode(`z${n}`),"base58btc"):P(ce.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#i}equals(e){return j(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=Vs.get(t.name);if(n==null)throw new m(`no available resolver for ${t.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>X(s))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[wx](){return`Multiaddr(${this.#e})`}};var Vs=new Map;function Jn(r){return!!r?.[ah]}function X(r){return new Bc(r)}var bx=r=>r.toString().split("/").slice(1),na=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Se=r=>({match:e=>na(t=>t===r).match(e),pattern:r}),Fc=()=>({match:r=>na(e=>typeof e=="string").match(r),pattern:"{string}"}),Vc=()=>({match:r=>na(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),wt=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Ge.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Uc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Lf.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Bt=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Xt=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),Pe=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function tt(...r){function e(o){let s=bx(o);for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matches:t,exactMatch:n}}var lh=Pe(Se("dns4"),Fc()),uh=Pe(Se("dns6"),Fc()),dh=Pe(Se("dnsaddr"),Fc()),A4=Pe(Se("dns"),Fc()),bO=tt(lh),xO=tt(uh),vO=tt(dh),Kc=tt(Xt(A4,dh,lh,uh)),I4=Pe(Se("ip4"),na(Os)),D4=Pe(Se("ip6"),na(Ls)),T4=Xt(I4,D4),nn=Xt(T4,A4,lh,uh,dh),k4=tt(nn),RO=tt(I4),SO=tt(D4),C4=tt(T4),$c=Pe(nn,Se("tcp"),Vc()),oa=Pe(nn,Se("udp"),Vc()),xx=Xt($c,oa),_O=tt($c),AO=tt(oa),fh=Pe(oa,Se("quic")),Hc=Pe(oa,Se("quic-v1")),vx=Xt(fh,Hc),IO=tt(fh),DO=tt(Hc),ch=Xt(nn,$c,oa,fh,Hc),N4=Xt(Pe(ch,Se("ws"),Bt(wt()))),TO=tt(N4),P4=Xt(Pe(ch,Se("wss"),Bt(wt())),Pe(ch,Se("tls"),Se("ws"),Bt(wt()))),kO=tt(P4),O4=Pe(xx,Se("webrtc-direct"),Uc(),Bt(Uc()),Bt(wt())),L4=tt(O4),B4=Pe(Hc,Se("webtransport"),Uc(),Uc(),Bt(wt())),qc=tt(B4),Mc=Xt(N4,P4,Pe($c,Bt(wt())),Pe(vx,Bt(wt())),Pe(nn,Bt(wt())),O4,B4,wt()),CO=tt(Mc),Rx=Pe(Mc,Se("p2p-circuit"),wt()),wn=tt(Rx),Sx=Xt(Pe(Mc,Se("p2p-circuit"),Se("webrtc"),wt()),Pe(Mc,Se("webrtc"),Bt(wt())),Se("webrtc")),U4=tt(Sx),_x=Xt(Pe(nn,Se("tcp"),Vc(),Se("http"),Bt(wt())),Pe(nn,Se("http"),Bt(wt()))),M4=tt(_x),Ax=Xt(Pe(nn,Se("tcp"),Xt(Pe(Se("443"),Se("http")),Pe(Vc(),Se("https"))),Bt(wt())),Pe(nn,Se("tls"),Se("http"),Bt(wt())),Pe(nn,Se("https"),Bt(wt()))),F4=tt(Ax);var i8=Ye(hh(),1);function Fx(r){return r[Symbol.asyncIterator]!=null}function Vx(r){if(Fx(r))return(async()=>{for await(let e of r);})();for(let e of r);}var mr=Vx;var W4=Symbol.for("@achingbrain/uint8arraylist");function q4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function zc(r){return!!r?.[W4]}var ue=class r{bufs;length;[W4]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(zc(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(zc(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=q4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=q4(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(zc(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return ve(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ve(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!zc(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let g=this.get(u+f);if(n[f]!==g){d=Math.max(1,f-a[g]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=ze(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=Ce(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=Ce(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=Ce(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=ze(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=Ce(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=Ce(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=Ce(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=Ce(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=Ce(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!j(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,s)=>o+s.byteLength,0)),n.length=t,n}};function Yc(r){return r[Symbol.asyncIterator]!=null}var Qc=r=>{let e=Ne(r),t=ze(e);return Ve(r,t),Qc.bytes=e,t};Qc.bytes=0;function gr(r,e){e=e??{};let t=e.lengthEncoder??Qc;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return Yc(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}gr.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Qc;return new ue(t(r.byteLength),r)};var qs=Ye(Wo(),1);var $x=8,Hx=1024*1024*4,Go;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Go||(Go={}));var ph=r=>{let e=Lt(r);return ph.bytes=Ne(e),e};ph.bytes=0;function Kt(r,e){let t=new ue,n=Go.LENGTH,o=-1,s=e?.lengthDecoder??ph,i=e?.maxLengthLength??$x,a=e?.maxDataLength??Hx;function*c(){for(;t.byteLength>0;){if(n===Go.LENGTH)try{if(o=s(t),o<0)throw(0,qs.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(o>a)throw(0,qs.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Go.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw(0,qs.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw l}if(n===Go.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Go.LENGTH}}}return Yc(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,qs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,qs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}Kt.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}}();return Kt(n,{...e??{},onLength:s=>{t=s}})};var mh=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=Z(),this.haveNext=Z()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=Z(),e}async throw(e){return this.ended=!0,e!=null&&this.haveNext.reject(e),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");if(this.nextResult!=null&&(await this.readNext.promise,this.nextResult!=null))throw new Error("NeedNext promise resolved but nextResult was not consumed");e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=Z(),await Ot(this.readNext.promise,t?.signal,t)}};function Y4(){return new mh}var jc=class extends Error{code;constructor(e,t){super(e),this.code=t}},gh=class extends jc{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted"}};function Q4(r,e){let t=Y4();r.sink(t).catch(async i=>{await t.end(i)}),r.sink=async i=>{for await(let a of i)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ue;return{read:async(i,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new gh("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(i==null){let{done:u,value:f}=await Promise.race([n.next(),l]);return u===!0?new ue:f}for(;o.byteLength<i;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new jc("unexpected end of input","ERR_UNEXPECTED_EOF");o.append(u)}let d=o.sublist(0,i);return o.consume(i),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(i,a)=>{a?.signal?.throwIfAborted(),i instanceof Uint8Array?await t.push(i,a):await t.push(i.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let i=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*i}()}return r}}}var Zc=class extends Error{code;constructor(e,t){super(e),this.code=t}};function yr(r,e={}){let t=Q4(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ne(e.maxDataLength));let n=e?.lengthDecoder??Lt,o=e?.lengthEncoder??Ve;return{read:async i=>{let a=-1,c=new ue;for(;;){c.append(await t.read(1,i));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Zc("message length length too long","ERR_MSG_LENGTH_TOO_LONG");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Zc("message length too long","ERR_MSG_DATA_TOO_LONG");return t.read(a,i)},write:async(i,a)=>{await t.write(new ue(o(i.byteLength),i),a)},writeV:async(i,a)=>{let c=new ue(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function qx(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Ws=qx;function Wx(r){return r[Symbol.asyncIterator]!=null}function Gx(r,e){if(Wx(r))return async function*(){for await(let a of r)yield e(a)}();let t=Ws(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){yield await s;for await(let a of t)yield e(a)}();let i=e;return function*(){yield s;for(let a of t)yield i(a)}()}var Et=Gx;function zx(r){return r[Symbol.asyncIterator]!=null}function Yx(...r){let e=[];for(let t of r)zx(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=dt({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var bt=Yx;function Ke(r,...e){if(r==null)throw new Error("Empty pipeline");if(yh(r)){let n=r;r=()=>n.source}else if(j4(r)||X4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&yh(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)yh(t[n])&&(t[n]=Xx(t[n]));return Qx(...t)}var Qx=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},X4=r=>r?.[Symbol.asyncIterator]!=null,j4=r=>r?.[Symbol.iterator]!=null,yh=r=>r==null?!1:r.sink!=null&&r.source!=null,Xx=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=dt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(X4(s))o=async function*(){yield*s,n.end()};else if(j4(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return bt(n,o())}return r.source};function jx(r){return r[Symbol.asyncIterator]!=null}function Zx(r,e){return jx(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var eo=Zx;var me=class extends Event{constructor(e,t){super(e),this.detail=t}};var sa="/ipfs/bitswap/1.2.0";var wh=new Float32Array([-0]),to=new Uint8Array(wh.buffer);function Z4(r,e,t){wh[0]=r,e[t]=to[0],e[t+1]=to[1],e[t+2]=to[2],e[t+3]=to[3]}function J4(r,e){return to[0]=r[e],to[1]=r[e+1],to[2]=r[e+2],to[3]=r[e+3],wh[0]}var Eh=new Float64Array([-0]),Ct=new Uint8Array(Eh.buffer);function e8(r,e,t){Eh[0]=r,e[t]=Ct[0],e[t+1]=Ct[1],e[t+2]=Ct[2],e[t+3]=Ct[3],e[t+4]=Ct[4],e[t+5]=Ct[5],e[t+6]=Ct[6],e[t+7]=Ct[7]}function t8(r,e){return Ct[0]=r[e],Ct[1]=r[e+1],Ct[2]=r[e+2],Ct[3]=r[e+3],Ct[4]=r[e+4],Ct[5]=r[e+5],Ct[6]=r[e+6],Ct[7]=r[e+7],Eh[0]}var Jx=BigInt(Number.MAX_SAFE_INTEGER),ev=BigInt(Number.MIN_SAFE_INTEGER),Zt=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return zo;if(e<Jx&&e>ev)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>r8&&(o=0n,++n>r8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return zo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):zo}},zo=new Zt(0,0);zo.toBigInt=function(){return 0n};zo.zzEncode=zo.zzDecode=function(){return this};zo.length=function(){return 1};var r8=4294967296n;function n8(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function o8(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function bh(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Or(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Jc(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var xh=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Or(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Or(this,4);return Jc(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Or(this,4);return Jc(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Or(this,4);let e=J4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Or(this,4);let e=t8(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Or(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return o8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Or(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Or(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new Zt(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Or(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Or(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Or(this,8);let e=Jc(this.buf,this.pos+=4),t=Jc(this.buf,this.pos+=4);return new Zt(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=jf(this.buf,this.pos);return this.pos+=Ne(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function vh(r){return new xh(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=vh(r);return e.decode(n,void 0,t)}function Rh(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return ze(i);o+i>e&&(n=ze(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var Yo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function Sh(){}var Ah=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},tv=Rh();function rv(r){return globalThis.Buffer!=null?ze(r):tv(r)}var aa=class{len;head;tail;states;constructor(){this.len=0,this.head=new Yo(Sh,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Yo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new Ih((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(el,10,Zt.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Zt.fromBigInt(e);return this._push(el,t.length(),t)}uint64Number(e){return this._push(Xf,Ne(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=Zt.fromBigInt(e).zzEncode();return this._push(el,t.length(),t)}sint64Number(e){let t=Zt.fromNumber(e).zzEncode();return this._push(el,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(_h,1,e?1:0)}fixed32(e){return this._push(ia,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Zt.fromBigInt(e);return this._push(ia,4,t.lo)._push(ia,4,t.hi)}fixed64Number(e){let t=Zt.fromNumber(e);return this._push(ia,4,t.lo)._push(ia,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(Z4,4,e)}double(e){return this._push(e8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(_h,1,0):this.uint32(t)._push(ov,t,e)}string(e){let t=n8(e);return t!==0?this.uint32(t)._push(bh,t,e):this._push(_h,1,0)}fork(){return this.states=new Ah(this),this.head=this.tail=new Yo(Sh,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Yo(Sh,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=rv(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function _h(r,e,t){e[t]=r&255}function nv(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var Ih=class extends Yo{next;constructor(e,t){super(nv,e,t),this.next=void 0}};function el(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function ia(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function ov(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(aa.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(sv,e,r),this},aa.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(iv,e,r),this});function sv(r,e,t){e.set(r,t)}function iv(r,e,t){r.length<40?bh(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(B(r),t)}function Dh(){return new aa}function re(r,e){let t=Dh();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Gs;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(Gs||(Gs={}));function tl(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function $e(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return tl("enum",Gs.VARINT,t,n)}function ne(r,e){return tl("message",Gs.LENGTH_DELIMITED,r,e)}var ca=class extends Error{code;constructor(e,t,n){super(e,n),this.code=t}};var rt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(rt||(rt={}));var Th;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Th||(Th={}));(function(r){r.codec=()=>$e(Th)})(rt||(rt={}));var rl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),rt.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={cid:Ce(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.priority=t.int32();break}case 3:{o.cancel=t.bool();break}case 4:{o.wantType=rt.codec().decode(t);break}case 5:{o.sendDontHave=t.bool();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(rl||(rl={}));var nl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),rl.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.entries.push(rl.codec().decode(t,t.uint32()));break}case 2:{o.full=t.bool();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(nl||(nl={}));var ol;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={prefix:Ce(0),data:Ce(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.prefix=t.bytes();break}case 2:{o.data=t.bytes();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(ol||(ol={}));var wr;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(wr||(wr={}));var sl;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(sl||(sl={}));(function(r){r.codec=()=>$e(sl)})(wr||(wr={}));var il;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&sl[t.type]!==0&&(n.uint32(16),wr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={cid:Ce(0),type:wr.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.type=wr.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(il||(il={}));var la;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),nl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),ol.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),il.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.wantlist=nl.codec().decode(t,t.uint32());break}case 3:{o.blocks.push(ol.codec().decode(t,t.uint32()));break}case 4:{o.blockPresences.push(il.codec().decode(t,t.uint32()));break}case 5:{o.pendingBytes=t.int32();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(la||(la={}));i8.default.formatters.B=r=>r==null?"undefined":JSON.stringify({blocks:r.blocks?.map(e=>({data:`${P(e.data,"base64").substring(0,10)}...`,prefix:P(e.prefix,"base64")})),blockPresences:r.blockPresences?.map(e=>({...e,cid:ce.decode(e.cid).toString()})),wantlist:r.wantlist==null?void 0:{full:r.wantlist.full,entries:r.wantlist.entries.map(e=>({...e,cid:ce.decode(e.cid).toString()}))}},null,2);var al=class extends xe{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;messageSendTimeout;runOnTransientConnections;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[sa],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.messageSendTimeout=t.messageSendTimeout??5e3,this.runOnTransientConnections=t.runOnTransientConnections??!1,this.metrics={blocksSent:e.libp2p.metrics?.registerCounter("ipfs_bitswap_sent_blocks_total"),dataSent:e.libp2p.metrics?.registerCounter("ipfs_bitswap_sent_data_bytes_total")},this.sendQueue=new Vt({concurrency:t.messageSendConcurrency??50,metrics:e.libp2p.metrics,metricName:"ipfs_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.abort(new m("Incoming Bitswap stream timed out","ERR_TIMEOUT"))},s=AbortSignal.timeout(this.messageReceiveTimeout);ee(1/0,s),s.addEventListener("abort",o),await Ke(t,i=>Kt(i),async i=>{for await(let a of i)try{let c=la.decode(a);this.log("incoming new bitswap %s message from %p %B",t.protocol,n.remotePeer,c),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),s.removeEventListener("abort",o),s=AbortSignal.timeout(this.messageReceiveTimeout),ee(1/0,s),s.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p",n.remotePeer,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new me("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!this.runOnTransientConnections){let o=!1;for(let s of n.multiaddrs)if(s.getPeerId()==null&&(s=s.encapsulate(`/p2p/${n.id}`)),!wn.exactMatch(s)){o=!0;break}if(!o)continue}n.protocols?.includes("transport-bitswap")!==!1&&(yield n)}}async findAndConnect(e,t){await mr(Et(eo(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o={wantlist:{full:t.wantlist?.full??!1,entries:t.wantlist?.entries??[]},blocks:t.blocks??[],blockPresences:t.blockPresences??[],pendingBytes:t.pendingBytes??0},s=ot([AbortSignal.timeout(this.messageSendTimeout),n?.signal]);ee(1/0,s);try{let i=this.sendQueue.queue.find(a=>e.equals(a.options.peerId)&&a.status==="queued");if(i!=null){i.options.message=pv(i.options.message,o),await i.join({signal:s});return}await this.sendQueue.add(async a=>{let c=a?.message;if(c==null)throw new m("No message to send","ERR_NO_MESSAGE");this.log("sendMessage to %p %B",e,c),a?.onProgress?.(new me("bitswap:network:send-wantlist",e));let l=await this.libp2p.dialProtocol(e,sa,a);try{let d=yr(l);await d.write(la.encode(c),a),await d.unwrap().close(a)}catch(d){a?.onProgress?.(new me("bitswap:network:send-wantlist:error",{peer:e,error:d})),this.log.error("error sending message to %p",e,d),l.abort(d)}this._updateSentStats(c.blocks)},{peerId:e,signal:s,message:o})}finally{s.clear()}}async connectTo(e,t){if(!this.running)throw new m("Network isn't running","ERR_NOT_STARTED");t?.onProgress?.(new me("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),rn(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(sa))return!0;throw new m(`${e} did not support ${sa}`,"ERR_BITSWAP_UNSUPPORTED_BY_PEER")}})]);return n}_updateSentStats(e=[]){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.length)}};function pv(r,e){let t=new Map((r.wantlist?.entries??[]).map(i=>[lt.encode(i.cid),i]));for(let i of e.wantlist?.entries??[]){let a=lt.encode(i.cid),c=t.get(a);c!=null&&(c.priority>i.priority&&(i.priority=c.priority),i.cancel=i.cancel??c.cancel,i.wantType=i.wantType??c.wantType,i.sendDontHave=i.sendDontHave??c.sendDontHave),t.set(a,i)}let n=new Map(r.blockPresences.map(i=>[lt.encode(i.cid),i]));for(let i of e.blockPresences){let a=lt.encode(i.cid);n.set(a,i)}let o=new Map(r.blocks.map(i=>[lt.encode(i.data),i]));for(let i of e.blocks){let a=lt.encode(i.data);o.set(a,i)}return{wantlist:{full:r.wantlist?.full??e.wantlist?.full??!1,entries:[...t.values()]},blockPresences:[...n.values()],blocks:[...o.values()],pendingBytes:r.pendingBytes+e.pendingBytes}}var mv=Symbol.for("nodejs.util.inspect.custom"),a8=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e),pr.identity.decoder),c8=114,kh=36,Ch=37,ua=class{type;multihash;privateKey;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,this.privateKey=e.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[mf]=!0;toString(){return this.string==null&&(this.string=Ge.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return ce.createV1(c8,this.multihash)}toBytes(){return this.multihash.bytes}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return j(this.multihash.bytes,e);if(typeof e=="string")return ge(e).equals(this);if(e?.multihash?.bytes!=null)return j(this.multihash.bytes,e.multihash.bytes);throw new Error("not valid Id")}[mv](){return`PeerId(${this.toString()})`}},Qo=class extends ua{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Xo=class extends ua{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.multihash.digest}},jo=class extends ua{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.multihash.digest}};function l8(r){if(r.type==="RSA")return new Qo(r);if(r.type==="Ed25519")return new Xo(r);if(r.type==="secp256k1")return new jo(r);throw new m("Not a PeerId","ERR_INVALID_PARAMETERS")}function ge(r,e){if(e=e??a8,r.charAt(0)==="1"||r.charAt(0)==="Q"){let t=Pr(Ge.decode(`z${r}`));return r.startsWith("12D")?new Xo({multihash:t}):r.startsWith("16U")?new jo({multihash:t}):new Qo({multihash:t})}return Xe(a8.decode(r))}function Xe(r){try{let e=Pr(r);if(e.code===hr.code){if(e.digest.length===kh)return new Xo({multihash:e});if(e.digest.length===Ch)return new jo({multihash:e})}if(e.code===De.code)return new Qo({multihash:e})}catch{return gv(ce.decode(r))}throw new Error("Supplied PeerID CID is invalid")}function gv(r){if(r==null||r.multihash==null||r.version==null||r.version===1&&r.code!==c8)throw new Error("Supplied PeerID CID is invalid");let e=r.multihash;if(e.code===De.code)return new Qo({multihash:r.multihash});if(e.code===hr.code){if(e.digest.length===kh)return new Xo({multihash:r.multihash});if(e.digest.length===Ch)return new jo({multihash:r.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function ft(r,e){return r.length===kh?new Xo({multihash:Nr(hr.code,r),privateKey:e}):r.length===Ch?new jo({multihash:Nr(hr.code,r),privateKey:e}):new Qo({multihash:await De.digest(r),publicKey:r,privateKey:e})}function zs(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}var st=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),n)}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return zs(this.map.entries(),e=>[ge(e[0]),e[1]])}forEach(e){this.map.forEach((t,n)=>{e(t,ge(n),this)})}get(e){return this.map.get(e.toString())}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),t)}keys(){return zs(this.map.keys(),e=>ge(e))}values(){return this.map.values()}get size(){return this.map.size}};var je=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return zs(this.set.entries(),e=>{let t=ge(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=ge(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return zs(this.set.values(),e=>ge(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};var Nh=class extends st{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function da(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Nh({name:e,metrics:t}):n=new st,n}function wv(r){let e=new Uint8Array(r.reduce((n,o)=>n+Ne(o),0)),t=0;for(let n of r)e=Ve(n,e,t),t+=Ne(n);return e}var u8=wv;function Ph(r){return u8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var cl=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t={blockPresences:[],blocks:[]},n=new Set;for(let[o,s]of this.wants.entries()){if(!await this.blockstore.has(s.cid,e)){if(!s.sendDontHave||s.sentDontHave===!0)continue;s.sentDontHave=!0,t.blockPresences.push({cid:s.cid.bytes,type:wr.DontHaveBlock});continue}let a=await this.blockstore.get(s.cid,e);s.wantType===rt.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(n.add(o),t.blocks.push({data:a,prefix:Ph(s.cid)})):t.blockPresences.push({cid:s.cid.bytes,type:wr.HaveBlock}):(n.add(o),t.blocks.push({data:a,prefix:Ph(s.cid)}))}if(t.blocks.length>0||t.blockPresences.length>0){await this.network.sendMessage(this.peerId,t,e),this.sentBytes(t.blocks.reduce((o,s)=>o+s.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var ll=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.ledgerMap=da({name:"ipfs_bitswap_ledger_map",metrics:e.libp2p.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new cl({peerId:e,blockstore:this.blockstore,network:this.network},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let s=ce.decode(o.cid),i=P(s.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,s),n.wants.delete(i)):(o.wantType===rt.WantHave?this.log("peer %p wanted block presence for %c",e,s):this.log("peer %p wanted block for %c",e,s),n.wants.set(i,{cid:s,priority:o.priority,wantType:o.wantType??rt.WantBlock,sendDontHave:o.sendDontHave??!1}))}}await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=P(e.multihash.bytes,"base64"),o=[];for(let s of this.ledgerMap.values())s.wants.has(n)&&o.push(s);await Promise.all(o.map(async s=>s.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var Oh=class{root;peers;log;wantList;network;queue;maxProviders;constructor(e,t){this.peers=new je,this.root=t.root,this.maxProviders=t.maxProviders,this.log=e.logger.forComponent(`helia:bitswap:session:${t.root}`),this.wantList=e.wantList,this.network=e.network,this.queue=new Vt({concurrency:t.queryConcurrency}),this.queue.addEventListener("error",n=>{this.log.error("error querying peer for %c",this.root,n.detail)})}async want(e,t={}){if(this.peers.size===0)throw new m("Bitswap session had no peers","ERR_NO_SESSION_PEERS");this.log("sending WANT-BLOCK for %c to",e,this.peers);let n=await Promise.any([...this.peers].map(async o=>this.wantList.wantBlock(e,{peerId:o,...t})));return this.log("received block for %c from %p",e,n.sender),n.block}async findNewProviders(e,t,n={}){let o=Z(),s=0;this.log("find %d-%d new provider(s) for %c",t,this.maxProviders,e);let i=bt([...this.wantList.peers.keys()],Et(this.network.findProviders(e,n),a=>a.id));return Promise.resolve().then(async()=>{for await(let a of i){if(s===this.maxProviders){this.queue.clear();break}await this.queue.add(async()=>{try{if(this.log("asking potential session peer %p if they have %c",a,e),!(await this.wantList.wantPresence(e,{peerId:a,...n})).has){this.log("potential session peer %p did not have %c",a,e);return}this.log("potential session peer %p had %c",a,e),s++,this.peers.add(a),s===t&&(this.log("found %d session peers",s),o.resolve()),s===this.maxProviders&&(this.log("found max provider session peers",s),this.queue.clear())}catch(c){this.log.error("error querying potential session peer %p for %c",a,e,c.errors??c)}},{peerId:a})}this.log("found %d session peers total",s),t>0&&o.reject(new m(`Found ${s} of ${t} providers`,"ERR_NO_PROVIDERS_FOUND"))}),o.promise}};async function d8(r,e){let t=new Oh(r,e);return await t.findNewProviders(e.root,e.minProviders,{signal:e.signal}),t}var ul=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_bitswap_received_blocks"),this.duplicateBlocksReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_bitswap_duplicate_received_blocks"),this.dataReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_bitswap_data_received_bytes"),this.duplicateDataReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var Lh=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function dl(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Lh({name:e,metrics:t}):n=new Map,n}function Ev(r){return r[Symbol.asyncIterator]!=null}function bv(r){if(Ev(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var ro=bv;function xv(r){return r[Symbol.asyncIterator]!=null}function vv(r,e){if(xv(r))return async function*(){for await(let a of r)await e(a)&&(yield a)}();let t=Ws(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){await s&&(yield n);for await(let a of t)await e(a)&&(yield a)}();let i=e;return function*(){s===!0&&(yield n);for(let a of t)i(a)&&(yield a)}()}var Ut=vv;function Rv(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Lt(r);e.push(t),r=r.slice(Ne(t))}return e}var f8=Rv;var fl=class extends xe{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),ee(1/0,this),this.peers=da({name:"ipfs_bitswap_peers",metrics:e.libp2p.metrics}),this.wants=dl({name:"ipfs_bitswap_wantlist",metrics:e.libp2p.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=P(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,session:new je,priority:t.priority??1,wantType:t.wantType??rt.WantBlock,cancel:!1,sendDontHave:!0},t.peerId!=null&&o.session.add(t.peerId),this.wants.set(n,o)),o.wantType===rt.WantHave&&t.wantType===rt.WantBlock&&(o.wantType=rt.WantBlock),o.session.size>0&&(t.peerId!=null&&o.session.add(t.peerId),t.peerId==null&&o.session.clear()),await this.sendMessagesDebounced();try{return t.wantType===rt.WantBlock?(await rn(this,"block",t?.signal,{filter:a=>j(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await rn(this,"presence",t?.signal,{filter:i=>j(e.multihash.digest,i.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=Z(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o={wantlist:{full:!1,entries:Ke(this.wants.entries(),s=>Ut(s,([i,a])=>{if(a.session.size>0&&!a.session.has(e))return!1;let c=t.has(i);return a.cancel?c:!c}),s=>Et(s,([i,a])=>(n.add(i),{cid:a.cid.bytes,priority:a.priority,wantType:a.wantType,cancel:a.cancel,sendDontHave:a.sendDontHave})),s=>ro(s))}};if(o.wantlist?.entries.length!==0)try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer",s)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=P(e.multihash.bytes,"base64");return this.wants.has(t)}async wantPresence(e,t={}){if(t.peerId!=null){let n=t.peerId;return await this.network.sendMessage(t.peerId,{wantlist:{full:!1,entries:[{cid:e.bytes,sendDontHave:!0,wantType:rt.WantHave,priority:1}]}}),(await rn(this,"presence",t.signal,{filter:s=>n.equals(s.detail.sender)&&j(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}return this.addEntry(e,{...t,wantType:rt.WantHave})}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:rt.WantBlock})}async receivedBlock(e,t){let n=P(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p",e);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let s=f8(o.prefix),i=s[0],a=s[1],c=s[2],l=c===De.code?De:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let d=await l.digest(o.data),u=ce.create(i===0?0:1,a,d);this.log("received block from %p for %c",e,u),this.safeDispatchEvent("block",{detail:{sender:e,cid:u,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:u,has:!0,block:o.data}});let f=P(u.multihash.bytes,"base64"),g=this.wants.get(f);if(g==null)return;g.cancel=!0,n=!0}for(let{cid:o,type:s}of t.blockPresences){let i=ce.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===wr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n={wantlist:{full:!0,entries:Ke(this.wants.entries(),o=>Ut(o,([s,i])=>!i.cancel&&i.session.size>0&&!i.session.has(e)),o=>Ut(o,([s,i])=>!i.cancel),o=>Et(o,([s,i])=>(t.add(s),{cid:i.cid.bytes,priority:1,wantType:rt.WantBlock,cancel:!1,sendDontHave:!1})),o=>ro(o))}};if(n.wantlist?.entries.length===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear()}};var hl=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new ul(e),this.network=new al(e,t),this.peerWantLists=new ll({...e,network:this.network},t),this.wantList=new fl({...e,network:this.network},t)}async createSession(e,t){let n=t?.minProviders??1,o=t?.maxProviders??5;return d8({wantList:this.wantList,network:this.network,logger:this.logger},{root:e,queryConcurrency:t?.providerQueryConcurrency??5,minProviders:n,maxProviders:o,connectedPeers:t?.queryConnectedPeers!==!1?[...this.wantList.peers.keys()]:[],signal:t?.signal})}async want(e,t={}){let n=new AbortController,o=ot([n.signal,t.signal]);ee(1/0,n.signal,o),this.network.findAndConnect(e,{...t,signal:o}).catch(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,s)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var h8=(r,e={})=>new hl(r,e);var Bh=class{bitswap;started;constructor(e,t={}){let{hashers:n}=e;this.bitswap=h8(e,{hashLoader:{getHasher:async o=>{let s;if(typeof o=="string"?s=Object.values(n).find(i=>i.name===o):s=n[o],s!=null)return s;throw new Error(`Could not load hasher for code/name "${o}"`)}},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}async createSession(e,t){let n=await this.bitswap.createSession(e,t);return{announce:async(o,s,i)=>{await this.bitswap.notify(o,s,i)},retrieve:async(o,s)=>n.want(o,s)}}};function Uh(r={}){return e=>new Bh(e,r)}var m8=Ye(p8(),1),Sv=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],_v=Sv.map(r=>new m8.Netmask(r));function Av(r){for(let e of _v)if(e.contains(r))return!0;return!1}function Iv(r){return/^::$/.test(r)||/^::1$/.test(r)||/^::f{4}:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^::f{4}:0.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function $t(r){return Os(r)?Av(r):Ls(r)?Iv(r):void 0}var Dv=[J("tcp").code,J("dns").code,J("dnsaddr").code,J("dns4").code,J("dns6").code];function g8(r){let e;try{e=J("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function y8(r){return r.some(([e,t])=>e===J("tls").code)}function Jt(r,e,t){let n=w8[J(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${J(r).name}`);let o=n(e,t);return r===J("ip6").code?`[${o}]`:o}var w8={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${Jt(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${Jt(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=y8(e),n=g8(e);if(t&&n!==null)return`https://${n}`;let o=t?"https://":"http://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=Jt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Jt(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Jt(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Jt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=y8(e),n=g8(e);if(t&&n!==null)return`wss://${n}`;let o=t?"wss://":"ws://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=Jt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Jt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function pl(r,e){let n=X(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=J(o[0]),i=w8[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&Dv.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var ha=class{url;#e=0;#t=0;#r=0;#i=0;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}async getRawBlock(e,t){let n=this.url;if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);try{this.#e++;let o=await fetch(n.toString(),{signal:t,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"});if(this.log("GET %s %d",n,o.status),!o.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#i++,new Uint8Array(await o.arrayBuffer())}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#i/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}};var ml=class r{components;gateways;routing;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.routing=e.routing,this.gateways=(t.gateways??E8).map(n=>new ha(n,e.logger))}addGateway(e){this.gateways.push(new ha(e,this.components.logger))}async retrieve(e,t={}){let n=this.gateways.sort((s,i)=>i.reliability()-s.reliability()),o=[];for(let s of n){this.log("getting block for %c from %s",e,s.url);try{let i=await s.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,s.url);try{await t.validateFn?.(i)}catch(a){throw this.log.error("failed to validate block for %c from %s",e,s.url,a),s.incrementInvalidBlocks(),new Error(`Block for CID ${e} from gateway ${s.url} failed validation`)}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,s.url,i),i instanceof Error?o.push(i):o.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${s.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,s.url);break}}}throw o.length>0?new AggregateError(o,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}async createSession(e,t={}){let n=[],o=t.minProviders??1,s=t.minProviders??5,i=Z(),a=new r(this.components,{gateways:n});this.log("finding transport-ipfs-gateway-http providers for cid %c",e);let c=new Vt({concurrency:t.providerQueryConcurrency??5});return Promise.resolve().then(async()=>{for await(let l of this.routing.findProviders(e,t)){let d=l.multiaddrs.filter(u=>F4.matches(u)||t.allowInsecure===!0&&M4.matches(u)?t.allowLocal===!0||Kc.matches(u)?!0:$t(u.toOptions().host)===!1:!1);d.length!==0&&(this.log("found transport-ipfs-gateway-http provider %p for cid %c",l.id,e),c.add(async()=>{for(let u of d){let f;try{f=pl(u);let g=`${f}/ipfs/${e.toString()}?format=raw`,h=await fetch(g,{method:"HEAD",headers:{Accept:"application/vnd.ipld.raw","Cache-Control":t.cacheControl??"only-if-cached"},signal:AbortSignal.timeout(t.providerQueryTimeout??5e3)});this.log("HEAD %s %d",g,h.status),n.push(f),a.addGateway(f),this.log("found %d transport-ipfs-gateway-http providers for cid %c",n.length,e),n.length===o&&i.resolve(a),n.length===s&&c.clear()}catch(g){this.log.error("could not fetch %c from %a",e,f??u,g)}}}))}}).catch(l=>{this.log.error("error creating session for %c",e,l)}),i.promise}};var E8=["https://trustless-gateway.link","https://cloudflare-ipfs.com","https://4everland.io"];function Mh(r={}){return e=>new ml(e,r)}var er=Ye(hh(),1);er.default.formatters.b=r=>r==null?"undefined":Ge.baseEncode(r);er.default.formatters.t=r=>r==null?"undefined":ct.baseEncode(r);er.default.formatters.m=r=>r==null?"undefined":lt.baseEncode(r);er.default.formatters.p=r=>r==null?"undefined":r.toString();er.default.formatters.c=r=>r==null?"undefined":r.toString();er.default.formatters.k=r=>r==null?"undefined":r.toString();er.default.formatters.a=r=>r==null?"undefined":r.toString();function Tv(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function no(){return{forComponent(r){return tr(r)}}}function tr(r){let e=Tv(`${r}:trace`);return er.default.enabled(`${r}:trace`)&&er.default.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=(0,er.default)(`${r}:trace`)),Object.assign((0,er.default)(r),{error:(0,er.default)(`${r}:error`),trace:e})}async function*gl(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var vu={};pe(vu,{Ed25519PrivateKey:()=>An,Ed25519PublicKey:()=>ns,MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>yo,RsaPublicKey:()=>ss,Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateEphemeralKeyPair:()=>j8,generateKeyPair:()=>Da,generateKeyPairFromSeed:()=>IS,importKey:()=>ci,keyStretcher:()=>r6,keysPBM:()=>ri,marshalPrivateKey:()=>_0,marshalPublicKey:()=>S0,supportedKeys:()=>On,unmarshalPrivateKey:()=>Rr,unmarshalPublicKey:()=>qr});var o0={};pe(o0,{Ed25519PrivateKey:()=>An,Ed25519PublicKey:()=>ns,generateKeyPair:()=>BR,generateKeyPairFromSeed:()=>n0,unmarshalEd25519PrivateKey:()=>OR,unmarshalEd25519PublicKey:()=>LR});function Fh(r,e){let t=B(r,"base64urlpad");if(e!=null){if(t.length>e)throw new Error("byte array longer than desired length");t=ve([new Uint8Array(e-t.length),t])}return t}function Er(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function oo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function kv(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ys(r,...e){if(!kv(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Zo(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");oo(r.outputLen),oo(r.blockLen)}function Qs(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function b8(r,e){Ys(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var yl=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var Jo=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Lr=(r,e)=>r<<32-e|r>>>e,wl=(r,e)=>r<<e|r>>>32-e>>>0,wM=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var Cv=async()=>{};async function x8(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await Cv(),n+=s)}}function Vh(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Br(r){return typeof r=="string"&&(r=Vh(r)),Ys(r),r}function El(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Ys(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}var Xs=class{clone(){return this._cloneInto()}},Nv={}.toString;function v8(r,e){if(e!==void 0&&Nv.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function js(r){let e=n=>r().update(Br(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function es(r=32){if(yl&&typeof yl.getRandomValues=="function")return yl.getRandomValues(new Uint8Array(r));throw new Error("crypto.getRandomValues must be defined")}function Pv(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}var bl=(r,e,t)=>r&e^~r&t,xl=(r,e,t)=>r&e^r&t^e&t,so=class extends Xs{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Jo(this.buffer)}update(e){Qs(this);let{view:t,buffer:n,blockLen:o}=this;e=Br(e);let s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=Jo(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Qs(this),b8(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;Pv(n,o-8,BigInt(this.length*8),s),this.process(n,0);let a=Jo(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%t&&e.buffer.set(n),e}};var vl=BigInt(4294967295),Kh=BigInt(32);function R8(r,e=!1){return e?{h:Number(r&vl),l:Number(r>>Kh&vl)}:{h:Number(r>>Kh&vl)|0,l:Number(r&vl)|0}}function Ov(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:s,l:i}=R8(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var Lv=(r,e)=>BigInt(r>>>0)<<Kh|BigInt(e>>>0),Bv=(r,e,t)=>r>>>t,Uv=(r,e,t)=>r<<32-t|e>>>t,Mv=(r,e,t)=>r>>>t|e<<32-t,Fv=(r,e,t)=>r<<32-t|e>>>t,Vv=(r,e,t)=>r<<64-t|e>>>t-32,Kv=(r,e,t)=>r>>>t-32|e<<64-t,$v=(r,e)=>e,Hv=(r,e)=>r,qv=(r,e,t)=>r<<t|e>>>32-t,Wv=(r,e,t)=>e<<t|r>>>32-t,Gv=(r,e,t)=>e<<t-32|r>>>64-t,zv=(r,e,t)=>r<<t-32|e>>>64-t;function Yv(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var Qv=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),Xv=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,jv=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),Zv=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,Jv=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),eR=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var tR={fromBig:R8,split:Ov,toBig:Lv,shrSH:Bv,shrSL:Uv,rotrSH:Mv,rotrSL:Fv,rotrBH:Vv,rotrBL:Kv,rotr32H:$v,rotr32L:Hv,rotlSH:qv,rotlSL:Wv,rotlBH:Gv,rotlBL:zv,add:Yv,add3L:Qv,add3H:Xv,add4L:jv,add4H:Zv,add5H:eR,add5L:Jv},fe=tR;var[rR,nR]=fe.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),io=new Uint32Array(80),ao=new Uint32Array(80),$h=class extends so{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:g,Gl:h,Hh:p,Hl:y}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,g,h,p,y]}set(e,t,n,o,s,i,a,c,l,d,u,f,g,h,p,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=g|0,this.Gl=h|0,this.Hh=p|0,this.Hl=y|0}process(e,t){for(let E=0;E<16;E++,t+=4)io[E]=e.getUint32(t),ao[E]=e.getUint32(t+=4);for(let E=16;E<80;E++){let S=io[E-15]|0,_=ao[E-15]|0,A=fe.rotrSH(S,_,1)^fe.rotrSH(S,_,8)^fe.shrSH(S,_,7),D=fe.rotrSL(S,_,1)^fe.rotrSL(S,_,8)^fe.shrSL(S,_,7),R=io[E-2]|0,k=ao[E-2]|0,O=fe.rotrSH(R,k,19)^fe.rotrBH(R,k,61)^fe.shrSH(R,k,6),N=fe.rotrSL(R,k,19)^fe.rotrBL(R,k,61)^fe.shrSL(R,k,6),L=fe.add4L(D,N,ao[E-7],ao[E-16]),F=fe.add4H(L,A,O,io[E-7],io[E-16]);io[E]=F|0,ao[E]=L|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:g,Fl:h,Gh:p,Gl:y,Hh:w,Hl:b}=this;for(let E=0;E<80;E++){let S=fe.rotrSH(u,f,14)^fe.rotrSH(u,f,18)^fe.rotrBH(u,f,41),_=fe.rotrSL(u,f,14)^fe.rotrSL(u,f,18)^fe.rotrBL(u,f,41),A=u&g^~u&p,D=f&h^~f&y,R=fe.add5L(b,_,D,nR[E],ao[E]),k=fe.add5H(R,w,S,A,rR[E],io[E]),O=R|0,N=fe.rotrSH(n,o,28)^fe.rotrBH(n,o,34)^fe.rotrBH(n,o,39),L=fe.rotrSL(n,o,28)^fe.rotrBL(n,o,34)^fe.rotrBL(n,o,39),F=n&s^n&a^s&a,Y=o&i^o&c^i&c;w=p|0,b=y|0,p=g|0,y=h|0,g=u|0,h=f|0,{h:u,l:f}=fe.add(l|0,d|0,k|0,O|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let I=fe.add3L(O,L,Y);n=fe.add3H(I,k,N,F),o=I|0}({h:n,l:o}=fe.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=fe.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=fe.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=fe.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=fe.add(this.Eh|0,this.El|0,u|0,f|0),{h:g,l:h}=fe.add(this.Fh|0,this.Fl|0,g|0,h|0),{h:p,l:y}=fe.add(this.Gh|0,this.Gl|0,p|0,y|0),{h:w,l:b}=fe.add(this.Hh|0,this.Hl|0,w|0,b|0),this.set(n,o,s,i,a,c,l,d,u,f,g,h,p,y,w,b)}roundClean(){io.fill(0),ao.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var co=js(()=>new $h);var Sl={};pe(Sl,{abytes:()=>Zs,bitGet:()=>uR,bitLen:()=>lR,bitMask:()=>pa,bitSet:()=>dR,bytesToHex:()=>bn,bytesToNumberBE:()=>xn,bytesToNumberLE:()=>Ur,concatBytes:()=>Rn,createHmacDrbg:()=>Wh,ensureBytes:()=>Ue,equalBytes:()=>aR,hexToBytes:()=>ts,hexToNumber:()=>qh,isBytes:()=>lo,numberToBytesBE:()=>uo,numberToBytesLE:()=>vn,numberToHexUnpadded:()=>I8,numberToVarBytesBE:()=>iR,utf8ToBytes:()=>cR,validateObject:()=>br});var A8=BigInt(0),Rl=BigInt(1),oR=BigInt(2);function lo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Zs(r){if(!lo(r))throw new Error("Uint8Array expected")}var sR=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function bn(r){Zs(r);let e="";for(let t=0;t<r.length;t++)e+=sR[r[t]];return e}function I8(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function qh(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var En={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function S8(r){if(r>=En._0&&r<=En._9)return r-En._0;if(r>=En._A&&r<=En._F)return r-(En._A-10);if(r>=En._a&&r<=En._f)return r-(En._a-10)}function ts(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,s=0;o<t;o++,s+=2){let i=S8(r.charCodeAt(s)),a=S8(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}function xn(r){return qh(bn(r))}function Ur(r){return Zs(r),qh(bn(Uint8Array.from(r).reverse()))}function uo(r,e){return ts(r.toString(16).padStart(e*2,"0"))}function vn(r,e){return uo(r,e).reverse()}function iR(r){return ts(I8(r))}function Ue(r,e,t){let n;if(typeof e=="string")try{n=ts(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(lo(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function Rn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Zs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function aR(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function cR(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function lR(r){let e;for(e=0;r>A8;r>>=Rl,e+=1);return e}function uR(r,e){return r>>BigInt(e)&Rl}function dR(r,e,t){return r|(t?Rl:A8)<<BigInt(e)}var pa=r=>(oR<<BigInt(r-1))-Rl,Hh=r=>new Uint8Array(r),_8=r=>Uint8Array.from(r);function Wh(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=Hh(r),o=Hh(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=Hh())=>{o=a(_8([0]),u),n=a(),u.length!==0&&(o=a(_8([1]),u),n=a())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,f=[];for(;u<e;){n=a();let g=n.slice();f.push(g),u+=n.length}return Rn(...f)};return(u,f)=>{i(),c(u);let g;for(;!(g=f(l()));)c();return i(),g}}var fR={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||lo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function br(r,e,t={}){let n=(o,s,i)=>{let a=fR[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=r[o];if(!(i&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${s}`)};for(let[o,s]of Object.entries(e))n(o,s,!1);for(let[o,s]of Object.entries(t))n(o,s,!0);return r}var ut=BigInt(0),He=BigInt(1),rs=BigInt(2),hR=BigInt(3),Gh=BigInt(4),D8=BigInt(5),T8=BigInt(8),pR=BigInt(9),mR=BigInt(16);function _e(r,e){let t=r%e;return t>=ut?t:e+t}function zh(r,e,t){if(t<=ut||e<ut)throw new Error("Expected power/modulo > 0");if(t===He)return ut;let n=He;for(;e>ut;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Me(r,e,t){let n=r;for(;e-- >ut;)n*=n,n%=t;return n}function _l(r,e){if(r===ut||e<=ut)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=_e(r,e),n=e,o=ut,s=He,i=He,a=ut;for(;t!==ut;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==He)throw new Error("invert: does not exist");return _e(o,e)}function gR(r){let e=(r-He)/rs,t,n,o;for(t=r-He,n=0;t%rs===ut;t/=rs,n++);for(o=rs;o<r&&zh(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/Gh;return function(c,l){let d=c.pow(l,i);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let s=(t+He)/rs;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,s),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let g=1;for(let p=a.sqr(f);g<l&&!a.eql(p,a.ONE);g++)p=a.sqr(p);let h=a.pow(d,He<<BigInt(l-g-1));d=a.sqr(h),u=a.mul(u,h),f=a.mul(f,d),l=g}return u}}function yR(r){if(r%Gh===hR){let e=(r+He)/Gh;return function(n,o){let s=n.pow(o,e);if(!n.eql(n.sqr(s),o))throw new Error("Cannot find square root");return s}}if(r%T8===D8){let e=(r-D8)/T8;return function(n,o){let s=n.mul(o,rs),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,rs),i),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%mR,gR(r)}var k8=(r,e)=>(_e(r,e)&He)===He,wR=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Yh(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=wR.reduce((n,o)=>(n[o]="function",n),e);return br(r,t)}function ER(r,e,t){if(t<ut)throw new Error("Expected power > 0");if(t===ut)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>ut;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function bR(r,e){let t=new Array(e.length),n=e.reduce((s,i,a)=>r.is0(i)?s:(t[a]=s,r.mul(s,i)),r.ONE),o=r.inv(n);return e.reduceRight((s,i,a)=>r.is0(i)?s:(t[a]=r.mul(s,t[a]),r.mul(s,i)),o),t}function Qh(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function Al(r,e,t=!1,n={}){if(r<=ut)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=Qh(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=yR(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:pa(o),ZERO:ut,ONE:He,create:c=>_e(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return ut<=c&&c<r},is0:c=>c===ut,isOdd:c=>(c&He)===He,neg:c=>_e(-c,r),eql:(c,l)=>c===l,sqr:c=>_e(c*c,r),add:(c,l)=>_e(c+l,r),sub:(c,l)=>_e(c-l,r),mul:(c,l)=>_e(c*l,r),pow:(c,l)=>ER(a,c,l),div:(c,l)=>_e(c*_l(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>_l(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>bR(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?vn(c,s):uo(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?Ur(c):xn(c)}});return Object.freeze(a)}function C8(r,e){if(!r.isOdd)throw new Error("Field doesn't have isOdd");let t=r.sqrt(e);return r.isOdd(t)?r.neg(t):t}function N8(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function Xh(r){let e=N8(r);return e+Math.ceil(e/2)}function P8(r,e,t=!1){let n=r.length,o=N8(e),s=Xh(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?xn(r):Ur(r),a=_e(i,e-He)+He;return t?vn(a,o):uo(a,o)}var vR=BigInt(0),jh=BigInt(1);function Il(r,e){let t=(o,s)=>{let i=s.negate();return o?i:s},n=o=>{let s=Math.ceil(e/o)+1,i=2**(o-1);return{windows:s,windowSize:i}};return{constTimeNegate:t,unsafeLadder(o,s){let i=r.ZERO,a=o;for(;s>vR;)s&jh&&(i=i.add(a)),a=a.double(),s>>=jh;return i},precomputeWindow(o,s){let{windows:i,windowSize:a}=n(s),c=[],l=o,d=l;for(let u=0;u<i;u++){d=l,c.push(d);for(let f=1;f<a;f++)d=d.add(l),c.push(d);l=d.double()}return c},wNAF(o,s,i){let{windows:a,windowSize:c}=n(o),l=r.ZERO,d=r.BASE,u=BigInt(2**o-1),f=2**o,g=BigInt(o);for(let h=0;h<a;h++){let p=h*c,y=Number(i&u);i>>=g,y>c&&(y-=f,i+=jh);let w=p,b=p+Math.abs(y)-1,E=h%2!==0,S=y<0;y===0?d=d.add(t(E,s[w])):l=l.add(t(S,s[b]))}return{p:l,f:d}},wNAFCached(o,s,i,a){let c=o._WINDOW_SIZE||1,l=s.get(o);return l||(l=this.precomputeWindow(o,c),c!==1&&s.set(o,a(l))),this.wNAF(c,l,i)}}}function ma(r){return Yh(r.Fp),br(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Qh(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Mr=BigInt(0),rr=BigInt(1),Dl=BigInt(2),RR=BigInt(8),SR={zip215:!0};function _R(r){let e=ma(r);return br(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Tl(r){let e=_R(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Dl<<BigInt(a*8)-rr,d=t.create,u=e.uvRatio||((T,v)=>{try{return{isValid:!0,value:t.sqrt(T*t.inv(v))}}catch{return{isValid:!1,value:Mr}}}),f=e.adjustScalarBytes||(T=>T),g=e.domain||((T,v,U)=>{if(v.length||U)throw new Error("Contexts/pre-hash are not supported");return T}),h=T=>typeof T=="bigint"&&Mr<T,p=(T,v)=>h(T)&&h(v)&&T<v,y=T=>T===Mr||p(T,l);function w(T,v){if(p(T,v))return T;throw new Error(`Expected valid scalar < ${v}, got ${typeof T} ${T}`)}function b(T){return T===Mr?T:w(T,n)}let E=new Map;function S(T){if(!(T instanceof _))throw new Error("ExtendedPoint expected")}class _{constructor(v,U,V,H){if(this.ex=v,this.ey=U,this.ez=V,this.et=H,!y(v))throw new Error("x required");if(!y(U))throw new Error("y required");if(!y(V))throw new Error("z required");if(!y(H))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(v){if(v instanceof _)throw new Error("extended point not allowed");let{x:U,y:V}=v||{};if(!y(U)||!y(V))throw new Error("invalid affine point");return new _(U,V,rr,d(U*V))}static normalizeZ(v){let U=t.invertBatch(v.map(V=>V.ez));return v.map((V,H)=>V.toAffine(U[H])).map(_.fromAffine)}_setWindowSize(v){this._WINDOW_SIZE=v,E.delete(this)}assertValidity(){let{a:v,d:U}=e;if(this.is0())throw new Error("bad point: ZERO");let{ex:V,ey:H,ez:se,et:ie}=this,de=d(V*V),ae=d(H*H),le=d(se*se),Be=d(le*le),ke=d(de*v),mt=d(le*d(ke+ae)),gt=d(Be+d(U*d(de*ae)));if(mt!==gt)throw new Error("bad point: equation left != right (1)");let at=d(V*H),Tt=d(se*ie);if(at!==Tt)throw new Error("bad point: equation left != right (2)")}equals(v){S(v);let{ex:U,ey:V,ez:H}=this,{ex:se,ey:ie,ez:de}=v,ae=d(U*de),le=d(se*H),Be=d(V*de),ke=d(ie*H);return ae===le&&Be===ke}is0(){return this.equals(_.ZERO)}negate(){return new _(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:v}=e,{ex:U,ey:V,ez:H}=this,se=d(U*U),ie=d(V*V),de=d(Dl*d(H*H)),ae=d(v*se),le=U+V,Be=d(d(le*le)-se-ie),ke=ae+ie,mt=ke-de,gt=ae-ie,at=d(Be*mt),Tt=d(ke*gt),hn=d(Be*gt),Vo=d(mt*ke);return new _(at,Tt,Vo,hn)}add(v){S(v);let{a:U,d:V}=e,{ex:H,ey:se,ez:ie,et:de}=this,{ex:ae,ey:le,ez:Be,et:ke}=v;if(U===BigInt(-1)){let P3=d((se-H)*(le+ae)),O3=d((se+H)*(le-ae)),df=d(O3-P3);if(df===Mr)return this.double();let L3=d(ie*Dl*ke),B3=d(de*Dl*Be),U3=B3+L3,M3=O3+P3,F3=B3-L3,UE=d(U3*df),ME=d(M3*F3),FE=d(U3*F3),VE=d(df*M3);return new _(UE,ME,VE,FE)}let mt=d(H*ae),gt=d(se*le),at=d(de*V*ke),Tt=d(ie*Be),hn=d((H+se)*(ae+le)-mt-gt),Vo=Tt-at,Ji=Tt+at,N3=d(gt-U*mt),PE=d(hn*Vo),OE=d(Ji*N3),LE=d(hn*N3),BE=d(Vo*Ji);return new _(PE,OE,BE,LE)}subtract(v){return this.add(v.negate())}wNAF(v){return R.wNAFCached(this,E,v,_.normalizeZ)}multiply(v){let{p:U,f:V}=this.wNAF(w(v,n));return _.normalizeZ([U,V])[0]}multiplyUnsafe(v){let U=b(v);return U===Mr?D:this.equals(D)||U===rr?this:this.equals(A)?this.wNAF(U).p:R.unsafeLadder(this,U)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return R.unsafeLadder(this,n).is0()}toAffine(v){let{ex:U,ey:V,ez:H}=this,se=this.is0();v==null&&(v=se?RR:t.inv(H));let ie=d(U*v),de=d(V*v),ae=d(H*v);if(se)return{x:Mr,y:rr};if(ae!==rr)throw new Error("invZ was invalid");return{x:ie,y:de}}clearCofactor(){let{h:v}=e;return v===rr?this:this.multiplyUnsafe(v)}static fromHex(v,U=!1){let{d:V,a:H}=e,se=t.BYTES;v=Ue("pointHex",v,se);let ie=v.slice(),de=v[se-1];ie[se-1]=de&-129;let ae=Ur(ie);ae===Mr||(U?w(ae,l):w(ae,t.ORDER));let le=d(ae*ae),Be=d(le-rr),ke=d(V*le-H),{isValid:mt,value:gt}=u(Be,ke);if(!mt)throw new Error("Point.fromHex: invalid y coordinate");let at=(gt&rr)===rr,Tt=(de&128)!==0;if(!U&>===Mr&&Tt)throw new Error("Point.fromHex: x=0 and x_0=1");return Tt!==at&&(gt=d(-gt)),_.fromAffine({x:gt,y:ae})}static fromPrivateKey(v){return N(v).point}toRawBytes(){let{x:v,y:U}=this.toAffine(),V=vn(U,t.BYTES);return V[V.length-1]|=v&rr?128:0,V}toHex(){return bn(this.toRawBytes())}}_.BASE=new _(e.Gx,e.Gy,rr,d(e.Gx*e.Gy)),_.ZERO=new _(Mr,rr,rr,Mr);let{BASE:A,ZERO:D}=_,R=Il(_,a*8);function k(T){return _e(T,n)}function O(T){return k(Ur(T))}function N(T){let v=a;T=Ue("private key",T,v);let U=Ue("hashed private key",s(T),2*v),V=f(U.slice(0,v)),H=U.slice(v,2*v),se=O(V),ie=A.multiply(se),de=ie.toRawBytes();return{head:V,prefix:H,scalar:se,point:ie,pointBytes:de}}function L(T){return N(T).pointBytes}function F(T=new Uint8Array,...v){let U=Rn(...v);return O(s(g(U,Ue("context",T),!!o)))}function Y(T,v,U={}){T=Ue("message",T),o&&(T=o(T));let{prefix:V,scalar:H,pointBytes:se}=N(v),ie=F(U.context,V,T),de=A.multiply(ie).toRawBytes(),ae=F(U.context,de,se,T),le=k(ie+ae*H);b(le);let Be=Rn(de,vn(le,t.BYTES));return Ue("result",Be,a*2)}let I=SR;function C(T,v,U,V=I){let{context:H,zip215:se}=V,ie=t.BYTES;T=Ue("signature",T,2*ie),v=Ue("message",v),o&&(v=o(v));let de=Ur(T.slice(ie,2*ie)),ae,le,Be;try{ae=_.fromHex(U,se),le=_.fromHex(T.slice(0,ie),se),Be=A.multiplyUnsafe(de)}catch{return!1}if(!se&&ae.isSmallOrder())return!1;let ke=F(H,le.toRawBytes(),ae.toRawBytes(),v);return le.add(ae.multiplyUnsafe(ke)).subtract(Be).clearCofactor().equals(_.ZERO)}return A._setWindowSize(8),{CURVE:e,getPublicKey:L,sign:Y,verify:C,ExtendedPoint:_,utils:{getExtendedPublicKey:N,randomPrivateKey:()=>i(t.BYTES),precompute(T=8,v=_.BASE){return v._setWindowSize(T),v.multiply(BigInt(3)),v}}}}var ga=BigInt(0),Zh=BigInt(1);function AR(r){return br(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function O8(r){let e=AR(r),{P:t}=e,n=E=>_e(E,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(E=>E),c=e.powPminus2||(E=>zh(E,t-BigInt(2),t));function l(E,S,_){let A=n(E*(S-_));return S=n(S-A),_=n(_+A),[S,_]}function d(E){if(typeof E=="bigint"&&ga<=E&&E<t)return E;throw new Error("Expected valid scalar 0 < scalar < CURVE.P")}let u=(e.a-BigInt(2))/BigInt(4);function f(E,S){let _=d(E),A=d(S),D=_,R=Zh,k=ga,O=_,N=Zh,L=ga,F;for(let I=BigInt(o-1);I>=ga;I--){let C=A>>I&Zh;L^=C,F=l(L,R,O),R=F[0],O=F[1],F=l(L,k,N),k=F[0],N=F[1],L=C;let $=R+k,T=n($*$),v=R-k,U=n(v*v),V=T-U,H=O+N,se=O-N,ie=n(se*$),de=n(H*v),ae=ie+de,le=ie-de;O=n(ae*ae),N=n(D*n(le*le)),R=n(T*U),k=n(V*(T+n(u*V)))}F=l(L,R,O),R=F[0],O=F[1],F=l(L,k,N),k=F[0],N=F[1];let Y=c(k);return n(R*Y)}function g(E){return vn(n(E),s)}function h(E){let S=Ue("u coordinate",E,s);return i===32&&(S[31]&=127),Ur(S)}function p(E){let S=Ue("scalar",E),_=S.length;if(_!==s&&_!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${_}`);return Ur(a(S))}function y(E,S){let _=h(S),A=p(E),D=f(_,A);if(D===ga)throw new Error("Invalid private or public key received");return g(D)}let w=g(e.Gu);function b(E){return y(E,w)}return{scalarMult:y,scalarMultBase:b,getSharedSecret:(E,S)=>y(E,S),getPublicKey:E=>b(E),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:w}}var ya=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),L8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),qM=BigInt(0),IR=BigInt(1),Jh=BigInt(2),DR=BigInt(5),B8=BigInt(10),TR=BigInt(20),kR=BigInt(40),U8=BigInt(80);function M8(r){let e=ya,n=r*r%e*r%e,o=Me(n,Jh,e)*n%e,s=Me(o,IR,e)*r%e,i=Me(s,DR,e)*s%e,a=Me(i,B8,e)*i%e,c=Me(a,TR,e)*a%e,l=Me(c,kR,e)*c%e,d=Me(l,U8,e)*l%e,u=Me(d,U8,e)*l%e,f=Me(u,B8,e)*i%e;return{pow_p_5_8:Me(f,Jh,e)*r%e,b2:n}}function F8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function CR(r,e){let t=ya,n=_e(e*e*e,t),o=_e(n*n*e,t),s=M8(r*o).pow_p_5_8,i=_e(r*n*s,t),a=_e(e*i*i,t),c=i,l=_e(i*L8,t),d=a===r,u=a===_e(-r,t),f=a===_e(-r*L8,t);return d&&(i=c),(u||f)&&(i=l),k8(i,t)&&(i=_e(-i,t)),{isValid:d||u,value:i}}var Sn=Al(ya,void 0,!0),e0={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Sn,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:co,randomBytes:es,adjustScalarBytes:F8,uvRatio:CR},Js=Tl(e0);function V8(r,e,t){if(e.length>255)throw new Error("Context is too big");return El(Vh("SigEd25519 no Ed25519 collisions"),new Uint8Array([t?1:0,e.length]),e,r)}var WM=Tl({...e0,domain:V8}),GM=Tl({...e0,domain:V8,prehash:co}),wa=O8({P:ya,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=ya,{pow_p_5_8:t,b2:n}=M8(r);return _e(Me(t,BigInt(3),e)*n,e)},adjustScalarBytes:F8,randomBytes:es});var NR=(Sn.ORDER+BigInt(3))/BigInt(8),zM=Sn.pow(Jh,NR),YM=Sn.sqrt(Sn.neg(Sn.ONE)),QM=(Sn.ORDER-BigInt(5))/BigInt(8),XM=BigInt(486662);var jM=C8(Sn,Sn.neg(BigInt(486664)));var ZM=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),JM=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),eF=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),tF=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var rF=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var ei=32,_n=64,kl=32;function K8(){let r=Js.utils.randomPrivateKey(),e=Js.getPublicKey(r);return{privateKey:W8(r,e),publicKey:e}}function $8(r){if(r.length!==kl)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=Js.getPublicKey(e);return{privateKey:W8(e,t),publicKey:t}}function H8(r,e){let t=r.subarray(0,kl);return Js.sign(e instanceof Uint8Array?e:e.subarray(),t)}function q8(r,e,t){return Js.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function W8(r,e){let t=new Uint8Array(_n);for(let n=0;n<kl;n++)t[n]=r[n],t[kl+n]=e[n];return t}var qe={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var t0={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Cl(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=qe.get();t*=8;async function c(u,f){let g=a.getRandomValues(new Uint8Array(s)),h=a.getRandomValues(new Uint8Array(n)),p={name:e,iv:h};typeof f=="string"&&(f=B(f));let y;if(f.length===0){y=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(p,y,u);return ve([g,p.iv,new Uint8Array(w)])}async function l(u,f){let g=u.subarray(0,s),h=u.subarray(s,s+n),p=u.subarray(s+n),y={name:e,iv:h};typeof f=="string"&&(f=B(f));let w;if(f.length===0)try{let E={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,S,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,S,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(y,w,p);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function ti(r,e){let n=await Cl().encrypt(r,e);return lt.encode(n)}var ri={};pe(ri,{KeyType:()=>Fe,PrivateKey:()=>Vr,PublicKey:()=>Fr});var Fe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Fe||(Fe={}));var r0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(r0||(r0={}));(function(r){r.codec=()=>$e(r0)})(Fe||(Fe={}));var Fr;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Fr||(Fr={}));var Vr;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Vr||(Vr={}));var ns=class{_key;constructor(e){this._key=ni(e,ei)}verify(e,t){return q8(this._key,t,e)}marshal(){return this._key}get bytes(){return Fr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}},An=class{_key;_publicKey;constructor(e,t){this._key=ni(e,_n),this._publicKey=ni(t,ei)}sign(e){return H8(this._key,e)}get public(){return new ns(this._publicKey)}marshal(){return this._key}get bytes(){return Vr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return Er(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=hr.digest(this.public.bytes);return Ge.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ti(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function OR(r){if(r.length>_n){r=ni(r,_n+ei);let n=r.subarray(0,_n),o=r.subarray(_n,r.length);return new An(n,o)}r=ni(r,_n);let e=r.subarray(0,_n),t=r.subarray(ei);return new An(e,t)}function LR(r){return r=ni(r,ei),new ns(r)}async function BR(){let{privateKey:r,publicKey:e}=K8();return new An(r,e)}async function n0(r){let{privateKey:e,publicKey:t}=$8(r);return new An(e,t)}function ni(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new m(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var z8={"P-256":256,"P-384":384,"P-521":521},UR=Object.keys(z8),s0=UR.join(" / ");async function Y8(r){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${s0}`,"ERR_INVALID_CURVE");let e=await qe.get().subtle.generateKey({name:"ECDH",namedCurve:r},!0,["deriveBits"]),t=async(s,i)=>{let a;i!=null?a=await qe.get().subtle.importKey("jwk",FR(r,i),{name:"ECDH",namedCurve:r},!1,["deriveBits"]):a=e.privateKey;let c=await qe.get().subtle.importKey("jwk",X8(r,s),{name:"ECDH",namedCurve:r},!1,[]),l=await qe.get().subtle.deriveBits({name:"ECDH",namedCurve:r,public:c},a,z8[r]);return new Uint8Array(l,0,l.byteLength)},n=await qe.get().subtle.exportKey("jwk",e.publicKey);return{key:MR(n),genSharedKey:t}}var Q8={"P-256":32,"P-384":48,"P-521":66};function MR(r){if(r.crv==null||r.x==null||r.y==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");if(r.crv!=="P-256"&&r.crv!=="P-384"&&r.crv!=="P-521")throw new m(`Unknown curve: ${r.crv}. Must be ${s0}`,"ERR_INVALID_CURVE");let e=Q8[r.crv];return ve([Uint8Array.from([4]),Fh(r.x,e),Fh(r.y,e)],1+e*2)}function X8(r,e){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${s0}`,"ERR_INVALID_CURVE");let t=Q8[r];if(!j(e.subarray(0,1),Uint8Array.from([4])))throw new m("Cannot unmarshal public key - invalid key format","ERR_INVALID_KEY_FORMAT");return{kty:"EC",crv:r,x:P(e.subarray(1,t+1),"base64url"),y:P(e.subarray(1+t),"base64url"),ext:!0}}var FR=(r,e)=>({...X8(r,e.public),d:P(e.private,"base64url")});var j8=Y8;async function Z8(r,e){let t=lt.decode(r);return Cl().decrypt(t,e)}var J8={SHA1:20,SHA256:32,SHA512:64};var VR={SHA1:"SHA-1",SHA256:"SHA-256",SHA512:"SHA-512"},KR=async(r,e)=>{let t=await qe.get().subtle.sign({name:"HMAC"},r,e);return new Uint8Array(t,0,t.byteLength)};async function e6(r,e){let t=VR[r],n=await qe.get().subtle.importKey("raw",e,{name:"HMAC",hash:{name:t}},!1,["sign"]);return{async digest(o){return KR(n,o)},length:J8[r]}}var t6={"AES-128":{ivSize:16,keySize:16},"AES-256":{ivSize:16,keySize:32},Blowfish:{ivSize:8,keySize:32}};async function r6(r,e,t){let n=t6[r];if(n==null){let b=Object.keys(t6).join(" / ");throw new m(`unknown cipher type '${r}'. Must be ${b}`,"ERR_INVALID_CIPHER_TYPE")}if(e==null)throw new m("missing hash type","ERR_MISSING_HASH_TYPE");let o=n.keySize,s=n.ivSize,i=20,a=B("key expansion"),c=2*(s+o+i),l=await e6(e,t),d=await l.digest(a),u=[],f=0;for(;f<c;){let b=await l.digest(ve([d,a])),E=b.length;f+E>c&&(E=c-f),u.push(b),f+=E,d=await l.digest(d)}let g=c/2,h=ve(u),p=h.subarray(0,g),y=h.subarray(g,c),w=b=>({iv:b.subarray(0,s),cipherKey:b.subarray(s,s+o),macKey:b.subarray(s+o)});return{k1:w(p),k2:w(y)}}var g0={};pe(g0,{MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>yo,RsaPublicKey:()=>ss,fromJwk:()=>fS,generateKeyPair:()=>hS,unmarshalRsaPrivateKey:()=>p0,unmarshalRsaPublicKey:()=>dS});function Ht(r){if(isNaN(r)||r<=0)throw new m("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return es(r)}var go={};pe(go,{exportToPem:()=>aS,importFromPem:()=>h0,jwkToPkcs1:()=>nS,jwkToPkix:()=>sS,pkcs1ToJwk:()=>rS,pkixToJwk:()=>oS});var Nl=class extends Xs{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Zo(e);let n=Br(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,s=new Uint8Array(o);s.set(n.length>o?e.create().update(n).digest():n);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return Qs(this),this.iHash.update(e),this}digestInto(e){Qs(this),Ys(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},fo=(r,e,t)=>new Nl(r,e).update(t).digest();fo.create=(r,e)=>new Nl(r,e);function n6(r,e,t,n){Zo(r);let o=v8({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(oo(s),oo(i),oo(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Br(e),l=Br(t),d=new Uint8Array(i),u=fo.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function o6(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function s6(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=n6(r,e,t,n),l,d=new Uint8Array(4),u=Jo(d),f=new Uint8Array(a.outputLen);for(let g=1,h=0;h<s;g++,h+=a.outputLen){let p=i.subarray(h,h+a.outputLen);u.setInt32(0,g,!1),(l=c._cloneInto(l)).update(d).digestInto(f),p.set(f.subarray(0,p.length));for(let y=1;y<o;y++){a._cloneInto(l).update(f).digestInto(f);for(let w=0;w<p.length;w++)p[w]^=f[w]}}return o6(a,c,i,l,f)}async function i0(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=n6(r,e,t,n),d,u=new Uint8Array(4),f=Jo(u),g=new Uint8Array(c.outputLen);for(let h=1,p=0;p<s;h++,p+=c.outputLen){let y=a.subarray(p,p+c.outputLen);f.setInt32(0,h,!1),(d=l._cloneInto(d)).update(u).digestInto(g),y.set(g.subarray(0,y.length)),await x8(o-1,i,()=>{c._cloneInto(d).update(g).digestInto(g);for(let w=0;w<y.length;w++)y[w]^=g[w]})}return o6(c,l,a,d,g)}var ye=Ye(i6());function os(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function ho(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function Ll(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function c0(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=os(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,os(s,8)-n}function a6(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=ho(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=ho(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function c6(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function qt(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var YF=Math.log(2);function Bl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function l0(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function Cn(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var ba=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return l0(this.items)}},Ea=[new Uint8Array([1])],l6="0123456789";var ii="",$r=new ArrayBuffer(0),u0=new Uint8Array(0),xa="EndOfContent",d6="OCTET STRING",f6="BIT STRING";function Nn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):u0}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Cn(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",$r)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Dn=class{constructor({blockLength:e=0,error:t=ii,warnings:n=[],valueBeforeDecode:o=u0}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};Dn.NAME="baseBlock";var Nt=class extends Dn{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Nt.NAME="valueBlock";var Ul=class extends Nn(Dn){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):u0,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",$r}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=ho(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let g=0;g<l.length;g++)f[g]=l[g];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=os(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};Ul.NAME="identificationBlock";var Ml=class extends Dn{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=os(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=ho(this.length,8);if(o.byteLength>127)return this.error="Too big length",$r;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};Ml.NAME="lengthBlock";var W={},xt=class extends Dn{constructor({name:e=ii,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Ul(o),this.lenBlock=new Ml(o),this.valueBlock=s?new s(o):new Nt(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new ba;t||h6(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?$r:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return c6(t,n)}};xt.NAME="BaseBlock";function h6(r){if(r instanceof W.Constructed)for(let e of r.valueBlock.value)h6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var Fl=class extends xt{constructor({value:e=ii,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};Fl.NAME="BaseStringBlock";var Vl=class extends Nn(Nt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Vl.NAME="PrimitiveValueBlock";var p6,Kl=class extends xt{constructor(e={}){super(e,Vl),this.idBlock.isConstructed=!1}};p6=Kl;W.Primitive=p6;Kl.NAME="PRIMITIVE";function jR(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function bu(r,e=0,t=r.length){let n=e,o=new xt({},Nt),s=new Dn;if(!Cn(s,r,e,t))return o.error=s.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=xt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=W.EndOfContent;break;case 1:c=W.Boolean;break;case 2:c=W.Integer;break;case 3:c=W.BitString;break;case 4:c=W.OctetString;break;case 5:c=W.Null;break;case 6:c=W.ObjectIdentifier;break;case 10:c=W.Enumerated;break;case 12:c=W.Utf8String;break;case 13:c=W.RelativeObjectIdentifier;break;case 14:c=W.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=W.Sequence;break;case 17:c=W.Set;break;case 18:c=W.NumericString;break;case 19:c=W.PrintableString;break;case 20:c=W.TeletexString;break;case 21:c=W.VideotexString;break;case 22:c=W.IA5String;break;case 23:c=W.UTCTime;break;case 24:c=W.GeneralizedTime;break;case 25:c=W.GraphicString;break;case 26:c=W.VisibleString;break;case 27:c=W.GeneralString;break;case 28:c=W.UniversalString;break;case 29:c=W.CharacterString;break;case 30:c=W.BmpString;break;case 31:c=W.DATE;break;case 32:c=W.TimeOfDay;break;case 33:c=W.DateTime;break;case 34:c=W.Duration;break;default:{let l=o.idBlock.isConstructed?new W.Constructed:new W.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?W.Constructed:W.Primitive}return o=jR(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function ai(r){if(!r.byteLength){let e=new xt({},Nt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return bu(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function ZR(r,e){return r?1:e}var on=class extends Nt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let s=t;for(;ZR(this.isIndefiniteForm,n)>0;){let i=bu(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===xa)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===xa?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new ba;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?$r:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};on.NAME="ConstructedValueBlock";var m6,po=class extends xt{constructor(e={}){super(e,on),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
|
|
18
18
|
`).map(o=>` ${o}`).join(`
|
|
19
19
|
`));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
|
|
20
20
|
${e.join(`
|
|
21
|
-
`)}`:`${t} :`}};u6=go;W.Constructed=u6;go.NAME="CONSTRUCTED";var Ml=class extends Ct{fromBER(e,t,n){return t}toBER(e){return Kr}};Ml.override="EndOfContentValueBlock";var d6,Ul=class extends gt{constructor(e={}){super(e,Ml),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};d6=Ul;W.EndOfContent=d6;Ul.NAME=_a;var f6,yo=class extends gt{constructor(e={}){super(e,Ct),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};f6=yo;W.Null=f6;yo.NAME="NULL";var Fl=class extends Nn(Ct){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=be.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=be.BufferSourceConverter.toUint8Array(e);return Cn(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,d0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Fl.NAME="BooleanValueBlock";var h6,Vl=class extends gt{constructor(e={}){super(e,Fl),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};h6=Vl;W.Boolean=h6;Vl.NAME="BOOLEAN";var Kl=class extends Nn(nn){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=nn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===_a){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==i6)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?nn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Kl.NAME="OctetStringValueBlock";var p6,Tn=class r extends gt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Kl),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=mu(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?go.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${be.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return be.BufferSourceConverter.concat(e)}};p6=Tn;W.OctetString=p6;Tn.NAME=i6;var $l=class extends Nn(nn){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=nn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===_a){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==a6)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let s=be.BufferSourceConverter.toUint8Array(e);if(!Cn(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=mu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return nn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Kr;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};$l.NAME="BitStringValueBlock";var m6,di=class extends gt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},$l),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return go.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};m6=di;W.BitString=m6;di.NAME=a6;var g6;function PR(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=kl(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=kl(t,s)),s}function s6(r){if(r>=xa.length)for(let e=xa.length;e<=r;e++){let t=new Uint8Array([0]),n=xa[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=kl(t,n)),xa.push(n)}return xa[r]}function OR(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var Sa=class extends Nn(Ct){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=d0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(r6(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&i[1]&128?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=OR(s6(n),t),i="-";break;default:t=PR(t,s6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=o6.charAt(t[c]));return a===!1&&(i+=o6.charAt(0)),i}};g6=Sa;Sa.NAME="IntegerValueBlock";Object.defineProperty(g6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var y6,st=class r extends gt{constructor(e={}){super(e,Sa),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Cl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Cl();let t=BigInt(e),n=new va,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(be.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${be.Convert.ToHex(a)}`)+t,d=be.BufferSourceConverter.toUint8Array(be.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};y6=st;W.Integer=y6;st.NAME="INTEGER";var w6,Hl=class extends st{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};w6=Hl;W.Enumerated=w6;Hl.NAME="ENUMERATED";var Ra=class extends Nn(Ct){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=be.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ls(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Cl();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=mo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Kr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n}toString(){let e="";if(this.isHexOnly)e=be.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Ra.NAME="sidBlock";var ql=class extends Ct{constructor({value:e=fi,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Ra;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,Kr;t.push(o)}return f0(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;i.valueDec=c+a,s=!1}else{let i=new Ra;if(o>Number.MAX_SAFE_INTEGER){Cl();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};ql.NAME="ObjectIdentifierValueBlock";var b6,Vr=class extends gt{constructor(e={}){super(e,ql),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};b6=Vr;W.ObjectIdentifier=b6;Vr.NAME="OBJECT IDENTIFIER";var Aa=class extends Nn(Dn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=be.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ls(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=mo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Kr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n.buffer}toString(){let e="";return this.isHexOnly?e=be.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Aa.NAME="relativeSidBlock";var Wl=class extends Ct{constructor({value:e=fi,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Aa;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,Kr;n.push(s)}return f0(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let s=new Aa;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Wl.NAME="RelativeObjectIdentifierValueBlock";var E6,zl=class extends gt{constructor(e={}){super(e,Wl),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};E6=zl;W.RelativeObjectIdentifier=E6;zl.NAME="RelativeObjectIdentifier";var x6,dt=class extends go{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};x6=dt;W.Sequence=x6;dt.NAME="SEQUENCE";var v6,Gl=class extends go{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};v6=Gl;W.Set=v6;Gl.NAME="SET";var Yl=class extends Nn(Ct){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=fi}toJSON(){return{...super.toJSON(),value:this.value}}};Yl.NAME="StringValueBlock";var Ql=class extends Yl{};Ql.NAME="SimpleStringValueBlock";var Ot=class extends Ol{constructor({...e}={}){super(e,Ql)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,be.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Ot.NAME="SIMPLE STRING";var Xl=class extends Ot{fromBuffer(e){this.valueBlock.valueHexView=be.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=be.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=be.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(be.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Xl.NAME="Utf8StringValueBlock";var _6,kn=class extends Xl{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};_6=kn;W.Utf8String=_6;kn.NAME="UTF8String";var jl=class extends Ot{fromBuffer(e){this.valueBlock.value=be.Convert.ToUtf16String(e),this.valueBlock.valueHexView=be.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(be.Convert.FromUtf16String(e))}};jl.NAME="BmpStringValueBlock";var S6,Zl=class extends jl{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};S6=Zl;W.BmpString=S6;Zl.NAME="BMPString";var Jl=class extends Ot{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let s=mo(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};Jl.NAME="UniversalStringValueBlock";var R6,eu=class extends Jl{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};R6=eu;W.UniversalString=R6;eu.NAME="UniversalString";var A6,tu=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};A6=tu;W.NumericString=A6;tu.NAME="NumericString";var I6,ru=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};I6=ru;W.PrintableString=I6;ru.NAME="PrintableString";var D6,nu=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};D6=nu;W.TeletexString=D6;nu.NAME="TeletexString";var T6,ou=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};T6=ou;W.VideotexString=T6;ou.NAME="VideotexString";var k6,su=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};k6=su;W.IA5String=k6;su.NAME="IA5String";var C6,iu=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};C6=iu;W.GraphicString=C6;iu.NAME="GraphicString";var N6,Ia=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};N6=Ia;W.VisibleString=N6;Ia.NAME="VisibleString";var P6,au=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};P6=au;W.GeneralString=P6;au.NAME="GeneralString";var O6,cu=class extends Ot{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};O6=cu;W.CharacterString=O6;cu.NAME="CharacterString";var L6,Da=class extends Ia{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,be.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=Ht(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=Ht(this.month,2),t[2]=Ht(this.day,2),t[3]=Ht(this.hour,2),t[4]=Ht(this.minute,2),t[5]=Ht(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};L6=Da;W.UTCTime=L6;Da.NAME="UTCTime";var B6,lu=class extends Da{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),m="";if(f===-1&&(f=n.indexOf("-"),u=-1),f!==-1){if(m=n.substring(f+1),n=n.substring(0,f),m.length!==2&&m.length!==4)throw new Error("Wrong input string for conversion");let h=parseInt(m.substring(0,2),10);if(isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*h,m.length===4){if(h=parseInt(m.substring(2,4),10),isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");c=u*h}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(Ht(this.year,4)),t.push(Ht(this.month,2)),t.push(Ht(this.day,2)),t.push(Ht(this.hour,2)),t.push(Ht(this.minute,2)),t.push(Ht(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(Ht(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};B6=lu;W.GeneralizedTime=B6;lu.NAME="GeneralizedTime";var M6,uu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};M6=uu;W.DATE=M6;uu.NAME="DATE";var U6,du=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};U6=du;W.TimeOfDay=U6;du.NAME="TimeOfDay";var F6,fu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};F6=fu;W.DateTime=F6;fu.NAME="DateTime";var V6,hu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};V6=hu;W.Duration=V6;hu.NAME="Duration";var K6,pu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};K6=pu;W.TIME=K6;pu.NAME="TIME";function BR(r){let{result:e}=hi(r),t=e.valueBlock.value;return{n:L(on(t[1].toBigInt()),"base64url"),e:L(on(t[2].toBigInt()),"base64url"),d:L(on(t[3].toBigInt()),"base64url"),p:L(on(t[4].toBigInt()),"base64url"),q:L(on(t[5].toBigInt()),"base64url"),dp:L(on(t[6].toBigInt()),"base64url"),dq:L(on(t[7].toBigInt()),"base64url"),qi:L(on(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function MR(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new dt({value:[new st({value:0}),st.fromBigInt(sn(B(r.n,"base64url"))),st.fromBigInt(sn(B(r.e,"base64url"))),st.fromBigInt(sn(B(r.d,"base64url"))),st.fromBigInt(sn(B(r.p,"base64url"))),st.fromBigInt(sn(B(r.q,"base64url"))),st.fromBigInt(sn(B(r.dp,"base64url"))),st.fromBigInt(sn(B(r.dq,"base64url"))),st.fromBigInt(sn(B(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function UR(r){let{result:e}=hi(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:L(on(t[0].toBigInt()),"base64url"),e:L(on(t[1].toBigInt()),"base64url")}}function FR(r){if(r.n==null||r.e==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new dt({value:[new dt({value:[new Vr({value:"1.2.840.113549.1.1.1"}),new yo]}),new di({valueHex:new dt({value:[st.fromBigInt(sn(B(r.n,"base64url"))),st.fromBigInt(sn(B(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function on(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),o=0,s=0;for(;o<t;)n[o]=parseInt(e.slice(s,s+2),16),o+=1,s+=2;return n}function sn(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var VR=16,p0=32,m0=1e4;async function KR(r,e){let t=qe.get(),o=new dt({value:[new st({value:0}),new dt({value:[new Vr({value:"1.2.840.113549.1.1.1"}),new yo]}),new Tn({valueHex:r.marshal()})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=$t(VR),a=await l0(uo,e,i,{c:m0,dkLen:p0}),c=$t(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new dt({value:[new Tn({valueHex:i}),new st({value:m0}),new st({value:p0}),new dt({value:[new Vr({value:"1.2.840.113549.2.11"}),new yo]})]}),f=new dt({value:[new Vr({value:"1.2.840.113549.1.5.13"}),new dt({value:[new dt({value:[new Vr({value:"1.2.840.113549.1.5.12"}),u]}),new dt({value:[new Vr({value:"2.16.840.1.101.3.4.1.42"}),new Tn({valueHex:c})]})]})]}),h=new dt({value:[f,new Tn({valueHex:d})]}).toBER(),p=new Uint8Array(h,0,h.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...L(p,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
|
|
22
|
-
`)}async function g0(r,e){let t=qe.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=hi(o),{iv:i,salt:a,iterations:c,keySize:l,cipherText:d}=$R(s),u=await l0(uo,e,a,{c,dkLen:l}),f=await t.subtle.importKey("raw",u,"AES-CBC",!1,["decrypt"]),m=Ta(await t.subtle.decrypt({name:"AES-CBC",iv:i},f,d)),{result:h}=hi(m);n=$6(h)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=hi(o);n=$6(s)}else throw new g("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return y0(n)}function $R(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new g("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new g("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let s=n.valueBlock.value[1],i=Ta(s.valueBlock.value[0].getValue()),a=m0,c=p0;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new g("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new g("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let u=Ta(l.valueBlock.value[1].getValue());return{cipherText:Ta(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function $6(r){return Ta(r.valueBlock.value[2].getValue())}function Ta(r){return new Uint8Array(r,0,r.byteLength)}async function H6(r){let e=await qe.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await z6(e);return{privateKey:t[0],publicKey:t[1]}}async function w0(r){let t=[await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await HR(r)],n=await z6({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function q6(r,e){let t=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await qe.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function W6(r,e,t){let n=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return qe.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function z6(r){if(r.privateKey==null||r.publicKey==null)throw new g("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([qe.get().subtle.exportKey("jwk",r.privateKey),qe.get().subtle.exportKey("jwk",r.publicKey)])}async function HR(r){return qe.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function gu(r){if(r.kty!=="RSA")throw new g("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new g("invalid key modulus","ERR_INVALID_KEY_MODULUS");return B(r.n,"base64url").length*8}var ds=8192,us=class{_key;constructor(e){this._key=e}verify(e,t){return W6(this._key,t,e)}marshal(){return wo.jwkToPkix(this._key)}get bytes(){return Ur.encode({Type:Ve.RSA,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=Re.digest(this.bytes);return gr(e)?e.then(({bytes:t})=>t):e.bytes}},bo=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return $t(16)}sign(e){return q6(this._key,e)}get public(){if(this._publicKey==null)throw new g("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new us(this._publicKey)}marshal(){return wo.jwkToPkcs1(this._key)}get bytes(){return Fr.encode({Type:Ve.RSA,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=Re.digest(this.bytes);return gr(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return L(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return wo.exportToPem(this,e);if(t==="libp2p-key")return ai(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function y0(r){let e=wo.pkcs1ToJwk(r);if(gu(e)>ds)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await w0(e);return new bo(t.privateKey,t.publicKey)}function WR(r){let e=wo.pkixToJwk(r);if(gu(e)>ds)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new us(e)}async function zR(r){if(gu(r)>ds)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await w0(r);return new bo(e.privateKey,e.publicKey)}async function GR(r){if(r>ds)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await H6(r);return new bo(e.privateKey,e.publicKey)}var S0={};ge(S0,{Secp256k1PrivateKey:()=>ps,Secp256k1PublicKey:()=>hs,generateKeyPair:()=>iA,unmarshalSecp256k1PrivateKey:()=>oA,unmarshalSecp256k1PublicKey:()=>sA});var YR=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Eo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),xo=new Uint32Array(64),E0=class extends ao{constructor(){super(64,32,8,!1),this.A=Eo[0]|0,this.B=Eo[1]|0,this.C=Eo[2]|0,this.D=Eo[3]|0,this.E=Eo[4]|0,this.F=Eo[5]|0,this.G=Eo[6]|0,this.H=Eo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)xo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=xo[u-15],m=xo[u-2],h=Or(f,7)^Or(f,18)^f>>>3,p=Or(m,17)^Or(m,19)^m>>>10;xo[u]=p+xo[u-7]+h+xo[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Or(a,6)^Or(a,11)^Or(a,25),m=d+f+ml(a,c,l)+YR[u]+xo[u]|0,p=(Or(n,2)^Or(n,13)^Or(n,22))+gl(n,o,s)|0;d=l,l=c,c=a,a=i+m|0,i=s,s=o,o=n,n=m+p|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){xo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var vo=ni(()=>new E0);function QR(r){let e=ya(r);yr(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:XR,hexToBytes:jR}=bl,fs={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(r){let{Err:e}=fs;if(r.length<2||r[0]!==2)throw new e("Invalid signature integer tag");let t=r[1],n=r.subarray(2,t+2);if(!t||n.length!==t)throw new e("Invalid signature integer: wrong length");if(n[0]&128)throw new e("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:XR(n),l:r.subarray(t+2)}},toSig(r){let{Err:e}=fs,t=typeof r=="string"?jR(r):r;oi(t);let n=t.length;if(n<2||t[0]!=48)throw new e("Invalid signature tag");if(t[1]!==n-2)throw new e("Invalid signature: incorrect length");let{d:o,l:s}=fs._parseInt(t.subarray(2)),{d:i,l:a}=fs._parseInt(s);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s:i}},hexFromSig(r){let e=l=>Number.parseInt(l[0],16)&8?"00"+l:l,t=l=>{let d=l.toString(16);return d.length&1?`0${d}`:d},n=e(t(r.s)),o=e(t(r.r)),s=n.length/2,i=o.length/2,a=t(s),c=t(i);return`30${t(i+s+4)}02${c}${o}02${a}${n}`}},Pn=BigInt(0),br=BigInt(1),DK=BigInt(2),G6=BigInt(3),TK=BigInt(4);function ZR(r){let e=QR(r),{Fp:t}=e,n=e.toBytes||((h,p,y)=>{let w=p.toAffine();return _n(Uint8Array.from([4]),t.toBytes(w.x),t.toBytes(w.y))}),o=e.fromBytes||(h=>{let p=h.subarray(1),y=t.fromBytes(p.subarray(0,t.BYTES)),w=t.fromBytes(p.subarray(t.BYTES,2*t.BYTES));return{x:y,y:w}});function s(h){let{a:p,b:y}=e,w=t.sqr(h),E=t.mul(w,h);return t.add(t.add(E,t.mul(h,p)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function i(h){return typeof h=="bigint"&&Pn<h&&h<e.n}function a(h){if(!i(h))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function c(h){let{allowedPrivateKeyLengths:p,nByteLength:y,wrapPrivateKey:w,n:E}=e;if(p&&typeof h!="bigint"){if(fo(h)&&(h=En(h)),typeof h!="string"||!p.includes(h.length))throw new Error("Invalid key");h=h.padStart(y*2,"0")}let b;try{b=typeof h=="bigint"?h:xn(Ue("private key",h,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof h}`)}return w&&(b=Ae(b,E)),a(b),b}let l=new Map;function d(h){if(!(h instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(p,y,w){if(this.px=p,this.py=y,this.pz=w,p==null||!t.isValid(p))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(w==null||!t.isValid(w))throw new Error("z required")}static fromAffine(p){let{x:y,y:w}=p||{};if(!p||!t.isValid(y)||!t.isValid(w))throw new Error("invalid affine point");if(p instanceof u)throw new Error("projective point not allowed");let E=b=>t.eql(b,t.ZERO);return E(y)&&E(w)?u.ZERO:new u(y,w,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(p){let y=t.invertBatch(p.map(w=>w.pz));return p.map((w,E)=>w.toAffine(y[E])).map(u.fromAffine)}static fromHex(p){let y=u.fromAffine(o(Ue("pointHex",p)));return y.assertValidity(),y}static fromPrivateKey(p){return u.BASE.multiply(c(p))}_setWindowSize(p){this._WINDOW_SIZE=p,l.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!t.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:p,y}=this.toAffine();if(!t.isValid(p)||!t.isValid(y))throw new Error("bad point: x or y not FE");let w=t.sqr(y),E=s(p);if(!t.eql(w,E))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:p}=this.toAffine();if(t.isOdd)return!t.isOdd(p);throw new Error("Field doesn't support isOdd")}equals(p){d(p);let{px:y,py:w,pz:E}=this,{px:b,py:S,pz:R}=p,A=t.eql(t.mul(y,R),t.mul(b,E)),D=t.eql(t.mul(w,R),t.mul(S,E));return A&&D}negate(){return new u(this.px,t.neg(this.py),this.pz)}double(){let{a:p,b:y}=e,w=t.mul(y,G6),{px:E,py:b,pz:S}=this,R=t.ZERO,A=t.ZERO,D=t.ZERO,_=t.mul(E,E),k=t.mul(b,b),P=t.mul(S,S),N=t.mul(E,b);return N=t.add(N,N),D=t.mul(E,S),D=t.add(D,D),R=t.mul(p,D),A=t.mul(w,P),A=t.add(R,A),R=t.sub(k,A),A=t.add(k,A),A=t.mul(R,A),R=t.mul(N,R),D=t.mul(w,D),P=t.mul(p,P),N=t.sub(_,P),N=t.mul(p,N),N=t.add(N,D),D=t.add(_,_),_=t.add(D,_),_=t.add(_,P),_=t.mul(_,N),A=t.add(A,_),P=t.mul(b,S),P=t.add(P,P),_=t.mul(P,N),R=t.sub(R,_),D=t.mul(P,k),D=t.add(D,D),D=t.add(D,D),new u(R,A,D)}add(p){d(p);let{px:y,py:w,pz:E}=this,{px:b,py:S,pz:R}=p,A=t.ZERO,D=t.ZERO,_=t.ZERO,k=e.a,P=t.mul(e.b,G6),N=t.mul(y,b),O=t.mul(w,S),F=t.mul(E,R),Y=t.add(y,w),I=t.add(b,S);Y=t.mul(Y,I),I=t.add(N,O),Y=t.sub(Y,I),I=t.add(y,E);let C=t.add(b,R);return I=t.mul(I,C),C=t.add(N,F),I=t.sub(I,C),C=t.add(w,E),A=t.add(S,R),C=t.mul(C,A),A=t.add(O,F),C=t.sub(C,A),_=t.mul(k,I),A=t.mul(P,F),_=t.add(A,_),A=t.sub(O,_),_=t.add(O,_),D=t.mul(A,_),O=t.add(N,N),O=t.add(O,N),F=t.mul(k,F),I=t.mul(P,I),O=t.add(O,F),F=t.sub(N,F),F=t.mul(k,F),I=t.add(I,F),N=t.mul(O,I),D=t.add(D,N),N=t.mul(C,I),A=t.mul(Y,A),A=t.sub(A,N),N=t.mul(Y,O),_=t.mul(C,_),_=t.add(_,N),new u(A,D,_)}subtract(p){return this.add(p.negate())}is0(){return this.equals(u.ZERO)}wNAF(p){return m.wNAFCached(this,l,p,y=>{let w=t.invertBatch(y.map(E=>E.pz));return y.map((E,b)=>E.toAffine(w[b])).map(u.fromAffine)})}multiplyUnsafe(p){let y=u.ZERO;if(p===Pn)return y;if(a(p),p===br)return this;let{endo:w}=e;if(!w)return m.unsafeLadder(this,p);let{k1neg:E,k1:b,k2neg:S,k2:R}=w.splitScalar(p),A=y,D=y,_=this;for(;b>Pn||R>Pn;)b&br&&(A=A.add(_)),R&br&&(D=D.add(_)),_=_.double(),b>>=br,R>>=br;return E&&(A=A.negate()),S&&(D=D.negate()),D=new u(t.mul(D.px,w.beta),D.py,D.pz),A.add(D)}multiply(p){a(p);let y=p,w,E,{endo:b}=e;if(b){let{k1neg:S,k1:R,k2neg:A,k2:D}=b.splitScalar(y),{p:_,f:k}=this.wNAF(R),{p:P,f:N}=this.wNAF(D);_=m.constTimeNegate(S,_),P=m.constTimeNegate(A,P),P=new u(t.mul(P.px,b.beta),P.py,P.pz),w=_.add(P),E=k.add(N)}else{let{p:S,f:R}=this.wNAF(y);w=S,E=R}return u.normalizeZ([w,E])[0]}multiplyAndAddUnsafe(p,y,w){let E=u.BASE,b=(R,A)=>A===Pn||A===br||!R.equals(E)?R.multiplyUnsafe(A):R.multiply(A),S=b(this,y).add(b(p,w));return S.is0()?void 0:S}toAffine(p){let{px:y,py:w,pz:E}=this,b=this.is0();p==null&&(p=b?t.ONE:t.inv(E));let S=t.mul(y,p),R=t.mul(w,p),A=t.mul(E,p);if(b)return{x:t.ZERO,y:t.ZERO};if(!t.eql(A,t.ONE))throw new Error("invZ was invalid");return{x:S,y:R}}isTorsionFree(){let{h:p,isTorsionFree:y}=e;if(p===br)return!0;if(y)return y(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:p,clearCofactor:y}=e;return p===br?this:y?y(u,this):this.multiplyUnsafe(e.h)}toRawBytes(p=!0){return this.assertValidity(),n(u,this,p)}toHex(p=!0){return En(this.toRawBytes(p))}}u.BASE=new u(e.Gx,e.Gy,t.ONE),u.ZERO=new u(t.ZERO,t.ONE,t.ZERO);let f=e.nBitLength,m=vl(u,e.endo?Math.ceil(f/2):f);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:i}}function JR(r){let e=ya(r);return yr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function Y6(r){let e=JR(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(I){return Pn<I&&I<t.ORDER}function a(I){return Ae(I,n)}function c(I){return El(I,n)}let{ProjectivePoint:l,normPrivateKeyToScalar:d,weierstrassEquation:u,isWithinCurveOrder:f}=ZR({...e,toBytes(I,C,$){let T=C.toAffine(),v=t.toBytes(T.x),M=_n;return $?M(Uint8Array.from([C.hasEvenY()?2:3]),v):M(Uint8Array.from([4]),v,t.toBytes(T.y))},fromBytes(I){let C=I.length,$=I[0],T=I.subarray(1);if(C===o&&($===2||$===3)){let v=xn(T);if(!i(v))throw new Error("Point is not on curve");let M=u(v),V;try{V=t.sqrt(M)}catch(se){let fe=se instanceof Error?": "+se.message:"";throw new Error("Point is not on curve"+fe)}let H=(V&br)===br;return($&1)===1!==H&&(V=t.neg(V)),{x:v,y:V}}else if(C===s&&$===4){let v=t.fromBytes(T.subarray(0,t.BYTES)),M=t.fromBytes(T.subarray(t.BYTES,2*t.BYTES));return{x:v,y:M}}else throw new Error(`Point of length ${C} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),m=I=>En(ho(I,e.nByteLength));function h(I){let C=n>>br;return I>C}function p(I){return h(I)?a(-I):I}let y=(I,C,$)=>xn(I.slice(C,$));class w{constructor(C,$,T){this.r=C,this.s=$,this.recovery=T,this.assertValidity()}static fromCompact(C){let $=e.nByteLength;return C=Ue("compactSignature",C,$*2),new w(y(C,0,$),y(C,$,2*$))}static fromDER(C){let{r:$,s:T}=fs.toSig(Ue("DER",C));return new w($,T)}assertValidity(){if(!f(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!f(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(C){return new w(this.r,this.s,C)}recoverPublicKey(C){let{r:$,s:T,recovery:v}=this,M=D(Ue("msgHash",C));if(v==null||![0,1,2,3].includes(v))throw new Error("recovery id invalid");let V=v===2||v===3?$+e.n:$;if(V>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let H=v&1?"03":"02",ne=l.fromHex(H+m(V)),se=c(V),fe=a(-M*se),ce=a(T*se),ue=l.BASE.multiplyAndAddUnsafe(ne,fe,ce);if(!ue)throw new Error("point at infinify");return ue.assertValidity(),ue}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new w(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return is(this.toDERHex())}toDERHex(){return fs.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return is(this.toCompactHex())}toCompactHex(){return m(this.r)+m(this.s)}}let E={isValidPrivateKey(I){try{return d(I),!0}catch{return!1}},normPrivateKeyToScalar:d,randomPrivateKey:()=>{let I=Jh(e.n);return Dm(e.randomBytes(I),e.n)},precompute(I=8,C=l.BASE){return C._setWindowSize(I),C.multiply(BigInt(3)),C}};function b(I,C=!0){return l.fromPrivateKey(I).toRawBytes(C)}function S(I){let C=fo(I),$=typeof I=="string",T=(C||$)&&I.length;return C?T===o||T===s:$?T===2*o||T===2*s:I instanceof l}function R(I,C,$=!0){if(S(I))throw new Error("first arg must be private key");if(!S(C))throw new Error("second arg must be public key");return l.fromHex(C).multiply(d(I)).toRawBytes($)}let A=e.bits2int||function(I){let C=xn(I),$=I.length*8-e.nBitLength;return $>0?C>>BigInt($):C},D=e.bits2int_modN||function(I){return a(A(I))},_=ga(e.nBitLength);function k(I){if(typeof I!="bigint")throw new Error("bigint expected");if(!(Pn<=I&&I<_))throw new Error(`bigint expected < 2^${e.nBitLength}`);return ho(I,e.nByteLength)}function P(I,C,$=N){if(["recovered","canonical"].some(ke=>ke in $))throw new Error("sign() legacy options not supported");let{hash:T,randomBytes:v}=e,{lowS:M,prehash:V,extraEntropy:H}=$;M==null&&(M=!0),I=Ue("msgHash",I),V&&(I=Ue("prehashed msgHash",T(I)));let ne=D(I),se=d(C),fe=[k(se),k(ne)];if(H!=null&&H!==!1){let ke=H===!0?v(t.BYTES):H;fe.push(Ue("extraEntropy",ke))}let ce=_n(...fe),ue=ne;function Me(ke){let ht=A(ke);if(!f(ht))return;let pt=c(ht),it=l.BASE.multiply(ht).toAffine(),At=a(it.x);if(At===Pn)return;let mn=a(pt*a(ue+At*se));if(mn===Pn)return;let Ho=(it.x===At?0:2)|Number(it.y&br),sa=mn;return M&&h(mn)&&(sa=p(mn),Ho^=1),new w(At,sa,Ho)}return{seed:ce,k2sig:Me}}let N={lowS:e.lowS,prehash:!1},O={lowS:e.lowS,prehash:!1};function F(I,C,$=N){let{seed:T,k2sig:v}=P(I,C,$),M=e;return Yh(M.hash.outputLen,M.nByteLength,M.hmac)(T,v)}l.BASE._setWindowSize(8);function Y(I,C,$,T=O){let v=I;if(C=Ue("msgHash",C),$=Ue("publicKey",$),"strict"in T)throw new Error("options.strict was renamed to lowS");let{lowS:M,prehash:V}=T,H,ne;try{if(typeof v=="string"||fo(v))try{H=w.fromDER(v)}catch(it){if(!(it instanceof fs.Err))throw it;H=w.fromCompact(v)}else if(typeof v=="object"&&typeof v.r=="bigint"&&typeof v.s=="bigint"){let{r:it,s:At}=v;H=new w(it,At)}else throw new Error("PARSE");ne=l.fromHex($)}catch(it){if(it.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(M&&H.hasHighS())return!1;V&&(C=e.hash(C));let{r:se,s:fe}=H,ce=D(C),ue=c(fe),Me=a(ce*ue),ke=a(se*ue),ht=l.BASE.multiplyAndAddUnsafe(ne,Me,ke)?.toAffine();return ht?a(ht.x)===se:!1}return{CURVE:e,getPublicKey:b,getSharedSecret:R,sign:F,verify:Y,ProjectivePoint:l,Signature:w,utils:E}}function eA(r){return{hash:r,hmac:(e,...t)=>po(r,e,pl(...t)),randomBytes:ss}}function Q6(r,e){let t=n=>Y6({...r,...eA(n)});return Object.freeze({...t(e),create:t})}var Z6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),X6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),tA=BigInt(1),x0=BigInt(2),j6=(r,e)=>(r+e/x0)/e;function rA(r){let e=Z6,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Fe(d,t,e)*d%e,f=Fe(u,t,e)*d%e,m=Fe(f,x0,e)*l%e,h=Fe(m,o,e)*m%e,p=Fe(h,s,e)*h%e,y=Fe(p,a,e)*p%e,w=Fe(y,c,e)*y%e,E=Fe(w,a,e)*p%e,b=Fe(E,t,e)*d%e,S=Fe(b,i,e)*h%e,R=Fe(S,n,e)*l%e,A=Fe(R,x0,e);if(!v0.eql(v0.sqr(A),r))throw new Error("Cannot find square root");return A}var v0=xl(Z6,void 0,void 0,{sqrt:rA}),$r=Q6({a:BigInt(0),b:BigInt(7),Fp:v0,n:X6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=X6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-tA*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=j6(s*r,e),c=j6(-n*r,e),l=Ae(r-a*t-c*o,e),d=Ae(-a*n-c*s,e),u=l>i,f=d>i;if(u&&(l=e-l),f&&(d=e-d),l>i||d>i)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}}},vo),UK=BigInt(0);var FK=$r.ProjectivePoint;function J6(){return $r.utils.randomPrivateKey()}function e5(r,e){let t=Re.digest(e instanceof Uint8Array?e:e.subarray());if(gr(t))return t.then(({digest:n})=>$r.sign(n,r).toDERRawBytes()).catch(n=>{throw new g(String(n),"ERR_INVALID_INPUT")});try{return $r.sign(t.digest,r).toDERRawBytes()}catch(n){throw new g(String(n),"ERR_INVALID_INPUT")}}function t5(r,e,t){let n=Re.digest(t instanceof Uint8Array?t:t.subarray());if(gr(n))return n.then(({digest:o})=>$r.verify(e,o,r)).catch(o=>{throw new g(String(o),"ERR_INVALID_INPUT")});try{return $r.verify(e,n.digest,r)}catch(o){throw new g(String(o),"ERR_INVALID_INPUT")}}function r5(r){return $r.ProjectivePoint.fromHex(r).toRawBytes(!0)}function n5(r){try{$r.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}function _0(r){try{$r.ProjectivePoint.fromHex(r)}catch(e){throw new g(String(e),"ERR_INVALID_PUBLIC_KEY")}}function o5(r){try{return $r.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}var hs=class{_key;constructor(e){_0(e),this._key=e}verify(e,t){return t5(this._key,t,e)}marshal(){return r5(this._key)}get bytes(){return Ur.encode({Type:Ve.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}async hash(){let e=Re.digest(this.bytes),t;return gr(e)?{bytes:t}=await e:t=e.bytes,t}},ps=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??o5(e),n5(this._key),_0(this._publicKey)}sign(e){return e5(this._key,e)}get public(){return new hs(this._publicKey)}marshal(){return this._key}get bytes(){return Fr.encode({Type:Ve.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=Re.digest(this.bytes);return gr(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return L(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ai(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function oA(r){return new ps(r)}function sA(r){return new hs(r)}async function iA(){let r=J6();return new ps(r)}var On={rsa:b0,ed25519:a0,secp256k1:S0};function R0(r){let e=Object.keys(On).join(" / ");return new g(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function A0(r){if(r=r.toLowerCase(),r==="rsa"||r==="ed25519"||r==="secp256k1")return On[r];throw R0(r)}async function ka(r,e){return A0(r).generateKeyPair(e??2048)}async function aA(r,e,t){if(r.toLowerCase()!=="ed25519")throw new g("Seed key derivation is unimplemented for RSA or secp256k1","ERR_UNSUPPORTED_KEY_DERIVATION_TYPE");return i0(e)}function Hr(r){let e=Ur.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ve.RSA:return On.rsa.unmarshalRsaPublicKey(t);case Ve.Ed25519:return On.ed25519.unmarshalEd25519PublicKey(t);case Ve.Secp256k1:return On.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw R0(e.Type??"unknown")}}function I0(r,e){return e=(e??"rsa").toLowerCase(),A0(e),r.bytes}async function Er(r){let e=Fr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ve.RSA:return On.rsa.unmarshalRsaPrivateKey(t);case Ve.Ed25519:return On.ed25519.unmarshalEd25519PrivateKey(t);case Ve.Secp256k1:return On.secp256k1.unmarshalSecp256k1PrivateKey(t);default:throw R0(e.Type??"RSA")}}function D0(r,e){return e=(e??"rsa").toLowerCase(),A0(e),r.bytes}async function pi(r,e){try{let t=await Gm(r,e);return await Er(t)}catch{}if(!r.includes("BEGIN"))throw new g("Encrypted key was not a libp2p-key or a PEM file","ERR_INVALID_IMPORT_FORMAT");return g0(r,e)}var KA=Ne(Zo(),1);var Ln="/",s5=new TextEncoder().encode(Ln),wu=s5[0],Oe=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=B(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==wu)throw new Error("Invalid key")}toString(e="utf8"){return L(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Ln))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=s5),this._buf[0]!==wu){let e=new Uint8Array(this._buf.byteLength+1);e.fill(wu,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===wu;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let s=t[o],i=n[o];if(s<i)return!0;if(s>i)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Ln).slice(1)}type(){return cA(this.baseNamespace())}name(){return lA(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Ln)||(e+=Ln),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Ln):new r(e.slice(0,-1).join(Ln))}child(e){return this.toString()===Ln?e:e.toString()===Ln?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...uA(e.map(t=>t.namespaces()))])}};function cA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function lA(r){let e=r.split(":");return e[e.length-1]}function uA(r){return[].concat(...r)}var $A=Ne(bu(),1);var i5="ERR_IPNS_EXPIRED_RECORD",Eu="ERR_UNRECOGNIZED_VALIDITY";var Bn="ERR_SIGNATURE_VERIFICATION";var k0="ERR_UNDEFINED_PARAMETER",a5="ERR_INVALID_RECORD_DATA",c5="ERR_INVALID_VALUE",l5="ERR_INVALID_EMBEDDED_KEY";var u5="ERR_RECORD_TOO_LARGE";var qt;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=te((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.value=o.bytes();break;case 2:i.signatureV1=o.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(o);break;case 4:i.validity=o.bytes();break;case 5:i.sequence=o.uint64();break;case 6:i.ttl=o.uint64();break;case 7:i.pubKey=o.bytes();break;case 8:i.signatureV2=o.bytes();break;case 9:i.data=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ee(o,r.codec()),r.decode=o=>J(o,r.codec())})(qt||(qt={}));var dA=["string","number","bigint","symbol"],fA=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function f5(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(dA.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(hA(r))return"Buffer";let t=pA(r);return t||"Object"}function hA(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function pA(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(fA.includes(e))return e}var x=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};x.uint=new x(0,"uint",!0);x.negint=new x(1,"negint",!0);x.bytes=new x(2,"bytes",!0);x.string=new x(3,"string",!0);x.array=new x(4,"array",!1);x.map=new x(5,"map",!1);x.tag=new x(6,"tag",!1);x.float=new x(7,"float",!0);x.false=new x(7,"false",!0);x.true=new x(7,"true",!0);x.null=new x(7,"null",!0);x.undefined=new x(7,"undefined",!0);x.break=new x(7,"break",!0);var U=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var mi=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",mA=new TextDecoder,gA=new TextEncoder;function xu(r){return mi&&globalThis.Buffer.isBuffer(r)}function Ca(r){return r instanceof Uint8Array?xu(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var g5=mi?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):p5(r,e,t):(r,e,t)=>t-e>64?mA.decode(r.subarray(e,t)):p5(r,e,t),vu=mi?r=>r.length>64?globalThis.Buffer.from(r):h5(r):r=>r.length>64?gA.encode(r):h5(r),an=r=>Uint8Array.from(r),gi=mi?(r,e,t)=>xu(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),y5=mi?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Ca(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},w5=mi?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function b5(r,e){if(xu(r)&&xu(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function h5(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function p5(r,e,t){let n=[];for(;e<t;){let o=r[e],s=null,i=o>239?4:o>223?3:o>191?2:1;if(e+i<=t){let a,c,l,d;switch(i){case 1:o<128&&(s=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(s=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(s=d))}}s===null?(s=65533,i=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),e+=i}return C0(n)}var m5=4096;function C0(r){let e=r.length;if(e<=m5)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=m5));return t}var yA=256,Na=class{constructor(e=yA){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=w5(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=gi(n,0,this.cursor)}else t=y5(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",yi="CBOR encode error:",Pa=[];Pa[23]=1;Pa[24]=2;Pa[25]=3;Pa[26]=5;Pa[27]=9;function Mn(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var ft=[24,256,65536,4294967296,BigInt("18446744073709551616")];function er(r,e,t){Mn(r,e,1);let n=r[e];if(t.strict===!0&&n<ft[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function tr(r,e,t){Mn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<ft[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function rr(r,e,t){Mn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<ft[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function nr(r,e,t){Mn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<ft[3])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${Q} integers outside of the safe integer range are not supported`)}function E5(r,e,t,n){return new U(x.uint,er(r,e+1,n),2)}function x5(r,e,t,n){return new U(x.uint,tr(r,e+1,n),3)}function v5(r,e,t,n){return new U(x.uint,rr(r,e+1,n),5)}function _5(r,e,t,n){return new U(x.uint,nr(r,e+1,n),9)}function xr(r,e){return yt(r,0,e.value)}function yt(r,e,t){if(t<ft[0]){let n=Number(t);r.push([e|n])}else if(t<ft[1]){let n=Number(t);r.push([e|24,n])}else if(t<ft[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<ft[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<ft[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${Q} encountered BigInt larger than allowable range`)}}xr.encodedSize=function(e){return yt.encodedSize(e.value)};yt.encodedSize=function(e){return e<ft[0]?1:e<ft[1]?2:e<ft[2]?3:e<ft[3]?5:9};xr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function S5(r,e,t,n){return new U(x.negint,-1-er(r,e+1,n),2)}function R5(r,e,t,n){return new U(x.negint,-1-tr(r,e+1,n),3)}function A5(r,e,t,n){return new U(x.negint,-1-rr(r,e+1,n),5)}var N0=BigInt(-1),I5=BigInt(1);function D5(r,e,t,n){let o=nr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new U(x.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new U(x.negint,N0-BigInt(o),9)}function _u(r,e){let t=e.value,n=typeof t=="bigint"?t*N0-I5:t*-1-1;yt(r,e.type.majorEncoded,n)}_u.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*N0-I5:t*-1-1;return n<ft[0]?1:n<ft[1]?2:n<ft[2]?3:n<ft[3]?5:9};_u.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Oa(r,e,t,n){Mn(r,e,t+n);let o=gi(r,e+t,e+t+n);return new U(x.bytes,o,t+n)}function T5(r,e,t,n){return Oa(r,e,1,t)}function k5(r,e,t,n){return Oa(r,e,2,er(r,e+1,n))}function C5(r,e,t,n){return Oa(r,e,3,tr(r,e+1,n))}function N5(r,e,t,n){return Oa(r,e,5,rr(r,e+1,n))}function P5(r,e,t,n){let o=nr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return Oa(r,e,9,o)}function Su(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===x.string?vu(r.value):r.value),r.encodedBytes}function wi(r,e){let t=Su(e);yt(r,e.type.majorEncoded,t.length),r.push(t)}wi.encodedSize=function(e){let t=Su(e);return yt.encodedSize(t.length)+t.length};wi.compareTokens=function(e,t){return bA(Su(e),Su(t))};function bA(r,e){return r.length<e.length?-1:r.length>e.length?1:b5(r,e)}function La(r,e,t,n,o){let s=t+n;Mn(r,e,s);let i=new U(x.string,g5(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=gi(r,e+t,e+s)),i}function O5(r,e,t,n){return La(r,e,1,t,n)}function L5(r,e,t,n){return La(r,e,2,er(r,e+1,n),n)}function B5(r,e,t,n){return La(r,e,3,tr(r,e+1,n),n)}function M5(r,e,t,n){return La(r,e,5,rr(r,e+1,n),n)}function U5(r,e,t,n){let o=nr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return La(r,e,9,o,n)}var F5=wi;function bi(r,e,t,n){return new U(x.array,n,t)}function V5(r,e,t,n){return bi(r,e,1,t)}function K5(r,e,t,n){return bi(r,e,2,er(r,e+1,n))}function $5(r,e,t,n){return bi(r,e,3,tr(r,e+1,n))}function H5(r,e,t,n){return bi(r,e,5,rr(r,e+1,n))}function q5(r,e,t,n){let o=nr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return bi(r,e,9,o)}function W5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return bi(r,e,1,1/0)}function Ru(r,e){yt(r,x.array.majorEncoded,e.value)}Ru.compareTokens=xr.compareTokens;Ru.encodedSize=function(e){return yt.encodedSize(e.value)};function Ei(r,e,t,n){return new U(x.map,n,t)}function z5(r,e,t,n){return Ei(r,e,1,t)}function G5(r,e,t,n){return Ei(r,e,2,er(r,e+1,n))}function Y5(r,e,t,n){return Ei(r,e,3,tr(r,e+1,n))}function Q5(r,e,t,n){return Ei(r,e,5,rr(r,e+1,n))}function X5(r,e,t,n){let o=nr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return Ei(r,e,9,o)}function j5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return Ei(r,e,1,1/0)}function Au(r,e){yt(r,x.map.majorEncoded,e.value)}Au.compareTokens=xr.compareTokens;Au.encodedSize=function(e){return yt.encodedSize(e.value)};function Z5(r,e,t,n){return new U(x.tag,t,1)}function J5(r,e,t,n){return new U(x.tag,er(r,e+1,n),2)}function e7(r,e,t,n){return new U(x.tag,tr(r,e+1,n),3)}function t7(r,e,t,n){return new U(x.tag,rr(r,e+1,n),5)}function r7(r,e,t,n){return new U(x.tag,nr(r,e+1,n),9)}function Iu(r,e){yt(r,x.tag.majorEncoded,e.value)}Iu.compareTokens=xr.compareTokens;Iu.encodedSize=function(e){return yt.encodedSize(e.value)};var RA=20,AA=21,IA=22,DA=23;function n7(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new U(x.null,null,1):new U(x.undefined,void 0,1)}function o7(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new U(x.break,void 0,1)}function P0(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Q} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Q} Infinity values are not supported`)}return new U(x.float,r,e)}function s7(r,e,t,n){return P0(O0(r,e+1),3,n)}function i7(r,e,t,n){return P0(L0(r,e+1),5,n)}function a7(r,e,t,n){return P0(d7(r,e+1),9,n)}function Du(r,e,t){let n=e.value;if(n===!1)r.push([x.float.majorEncoded|RA]);else if(n===!0)r.push([x.float.majorEncoded|AA]);else if(n===null)r.push([x.float.majorEncoded|IA]);else if(n===void 0)r.push([x.float.majorEncoded|DA]);else{let o,s=!1;(!t||t.float64!==!0)&&(l7(n),o=O0(qr,1),n===o||Number.isNaN(n)?(qr[0]=249,r.push(qr.slice(0,3)),s=!0):(u7(n),o=L0(qr,1),n===o&&(qr[0]=250,r.push(qr.slice(0,5)),s=!0))),s||(TA(n),o=d7(qr,1),qr[0]=251,r.push(qr.slice(0,9)))}}Du.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){l7(n);let o=O0(qr,1);if(n===o||Number.isNaN(n))return 3;if(u7(n),o=L0(qr,1),n===o)return 5}return 9};var c7=new ArrayBuffer(9),vr=new DataView(c7,1),qr=new Uint8Array(c7,0);function l7(r){if(r===1/0)vr.setUint16(0,31744,!1);else if(r===-1/0)vr.setUint16(0,64512,!1);else if(Number.isNaN(r))vr.setUint16(0,32256,!1);else{vr.setFloat32(0,r);let e=vr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)vr.setUint16(0,31744,!1);else if(t===0)vr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?vr.setUint16(0,0):o<-14?vr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):vr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function O0(r,e){if(r.length-e<2)throw new Error(`${Q} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function u7(r){vr.setFloat32(0,r,!1)}function L0(r,e){if(r.length-e<4)throw new Error(`${Q} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function TA(r){vr.setFloat64(0,r,!1)}function d7(r,e){if(r.length-e<8)throw new Error(`${Q} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Du.compareTokens=xr.compareTokens;function Se(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Tu(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=Se;K[24]=E5;K[25]=x5;K[26]=v5;K[27]=_5;K[28]=Se;K[29]=Se;K[30]=Se;K[31]=Se;for(let r=32;r<=55;r++)K[r]=Se;K[56]=S5;K[57]=R5;K[58]=A5;K[59]=D5;K[60]=Se;K[61]=Se;K[62]=Se;K[63]=Se;for(let r=64;r<=87;r++)K[r]=T5;K[88]=k5;K[89]=C5;K[90]=N5;K[91]=P5;K[92]=Se;K[93]=Se;K[94]=Se;K[95]=Tu("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=O5;K[120]=L5;K[121]=B5;K[122]=M5;K[123]=U5;K[124]=Se;K[125]=Se;K[126]=Se;K[127]=Tu("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=V5;K[152]=K5;K[153]=$5;K[154]=H5;K[155]=q5;K[156]=Se;K[157]=Se;K[158]=Se;K[159]=W5;for(let r=160;r<=183;r++)K[r]=z5;K[184]=G5;K[185]=Y5;K[186]=Q5;K[187]=X5;K[188]=Se;K[189]=Se;K[190]=Se;K[191]=j5;for(let r=192;r<=215;r++)K[r]=Z5;K[216]=J5;K[217]=e7;K[218]=t7;K[219]=r7;K[220]=Se;K[221]=Se;K[222]=Se;K[223]=Se;for(let r=224;r<=243;r++)K[r]=Tu("simple values are not supported");K[244]=Se;K[245]=Se;K[246]=Se;K[247]=n7;K[248]=Tu("simple values are not supported");K[249]=s7;K[250]=i7;K[251]=a7;K[252]=Se;K[253]=Se;K[254]=Se;K[255]=o7;var Wr=[];for(let r=0;r<24;r++)Wr[r]=new U(x.uint,r,1);for(let r=-1;r>=-24;r--)Wr[31-r]=new U(x.negint,r,1);Wr[64]=new U(x.bytes,new Uint8Array(0),1);Wr[96]=new U(x.string,"",1);Wr[128]=new U(x.array,0,1);Wr[160]=new U(x.map,0,1);Wr[244]=new U(x.false,!1,1);Wr[245]=new U(x.true,!0,1);Wr[246]=new U(x.null,null,1);function f7(r){switch(r.type){case x.false:return an([244]);case x.true:return an([245]);case x.null:return an([246]);case x.bytes:return r.value.length?void 0:an([64]);case x.string:return r.value===""?an([96]):void 0;case x.array:return r.value===0?an([128]):void 0;case x.map:return r.value===0?an([160]):void 0;case x.uint:return r.value<24?an([Number(r.value)]):void 0;case x.negint:if(r.value>=-24)return an([31-Number(r.value)])}}var CA={float64:!1,mapSorter:OA,quickEncodeToken:f7};function NA(){let r=[];return r[x.uint.major]=xr,r[x.negint.major]=_u,r[x.bytes.major]=wi,r[x.string.major]=F5,r[x.array.major]=Ru,r[x.map.major]=Au,r[x.tag.major]=Iu,r[x.float.major]=Du,r}var h7=NA(),B0=new Na,Cu=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${yi} object contains circular references`);return new r(t,e)}},_o={null:new U(x.null,null),undefined:new U(x.undefined,void 0),true:new U(x.true,!0),false:new U(x.false,!1),emptyArray:new U(x.array,0),emptyMap:new U(x.map,0)},So={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new U(x.float,r):r>=0?new U(x.uint,r):new U(x.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new U(x.uint,r):new U(x.negint,r)},Uint8Array(r,e,t,n){return new U(x.bytes,r)},string(r,e,t,n){return new U(x.string,r)},boolean(r,e,t,n){return r?_o.true:_o.false},null(r,e,t,n){return _o.null},undefined(r,e,t,n){return _o.undefined},ArrayBuffer(r,e,t,n){return new U(x.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new U(x.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[_o.emptyArray,new U(x.break)]:_o.emptyArray;n=Cu.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=ku(i,t,n);return t.addBreakTokens?[new U(x.array,r.length),o,new U(x.break)]:[new U(x.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length;if(!i)return t.addBreakTokens===!0?[_o.emptyMap,new U(x.break)]:_o.emptyMap;n=Cu.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[ku(l,t,n),ku(o?r.get(l):r[l],t,n)];return PA(a,t),t.addBreakTokens?[new U(x.map,i),a,new U(x.break)]:[new U(x.map,i),a]}};So.Map=So.Object;So.Buffer=So.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))So[`${r}Array`]=So.DataView;function ku(r,e={},t){let n=f5(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||So[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=So[n];if(!s)throw new Error(`${yi} unsupported type: ${n}`);return s(r,n,e,t)}function PA(r,e){e.mapSorter&&r.sort(e.mapSorter)}function OA(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,s=h7[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function p7(r,e,t,n){if(Array.isArray(e))for(let o of e)p7(r,o,t,n);else t[e.type.major](r,e,n)}function m7(r,e,t){let n=ku(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let s=e[n.type.major];if(s.encodedSize){let i=s.encodedSize(n,t),a=new Na(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Ca(a.chunks[0])}}return B0.reset(),p7(B0,n,e,t),B0.toBytes(!0)}function xi(r,e){return e=Object.assign({},CA,e),m7(r,h7,e)}var LA={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Nu=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=Wr[e];if(t===void 0){let n=K[e];if(!n)throw new Error(`${Q} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},Ba=Symbol.for("DONE"),Pu=Symbol.for("BREAK");function BA(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=vi(e,t);if(s===Pu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===Ba)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function MA(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},s=n?new Map:void 0;for(let i=0;i<r.value;i++){let a=vi(e,t);if(a===Pu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===Ba)throw new Error(`${Q} found map but not enough entries (got ${i} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Q} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&s.has(a)||!n&&a in o))throw new Error(`${Q} found repeat map key "${a}"`);let c=vi(e,t);if(c===Ba)throw new Error(`${Q} found map but not enough entries (got ${i} [no value], expected ${r.value})`);n?s.set(a,c):o[a]=c}return n?s:o}function vi(r,e){if(r.done())return Ba;let t=r.next();if(t.type===x.break)return Pu;if(t.type.terminal)return t.value;if(t.type===x.array)return BA(t,r,e);if(t.type===x.map)return MA(t,r,e);if(t.type===x.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=vi(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function M0(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},LA,e);let t=e.tokenizer||new Nu(r,e),n=vi(t,e);if(n===Ba)throw new Error(`${Q} did not find any content to decode`);if(n===Pu)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function _r(r,e){let[t,n]=M0(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var or=Ne(Zo(),1);var g7=Pt("ipns:utils"),y7=B("/ipns/"),UA=114,w7=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw g7.error(n),(0,or.default)(n,k0)}let t;if(e.pubKey!=null){try{t=Hr(e.pubKey)}catch(o){throw g7.error(o),o}if(!(await ut(e.pubKey)).equals(r))throw(0,or.default)(new Error("Embedded public key did not match PeerID"),l5)}else r.publicKey!=null&&(t=Hr(r.publicKey));if(t!=null)return t;throw(0,or.default)(new Error("no public key is available"),k0)};var b7=r=>{let e=B("ipns-signature:");return _e([e,r])},Ma=r=>"signatureV1"in r?qt.encode({value:B(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:B(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):qt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data});function cn(r){let e=qt.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw(0,or.default)(new Error("missing data or signatureV2"),Bn);let t=x7(e.data),n=FA(t.Value),o=L(t.Validity);if(e.value!=null&&e.signatureV1!=null)return VA(e),{value:n,validityType:qt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:qt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}var U0=r=>_e([y7,r.toBytes()]),E7=r=>Xe(r.slice(y7.length));var x7=r=>{let e=_r(r);if(e.ValidityType===0)e.ValidityType=qt.ValidityType.EOL;else throw(0,or.default)(new Error("Unknown validity type"),Eu);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},FA=r=>{if(r!=null){if(Ks(r))return`/ipns/${r.toCID().toString(ro)}`;if(r instanceof Uint8Array){let n=L(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=oe.asCID(r);if(t!=null)return t.code===UA?`/ipns/${t.toString(ro)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${oe.decode(r).toV1().toString()}`:`/ipfs/${oe.parse(e).toV1().toString()}`}catch{}}throw(0,or.default)(new Error("Value must be a valid content path starting with /"),c5)},VA=r=>{if(r.data==null)throw(0,or.default)(new Error("Record data is missing"),a5);let e=x7(r.data);if(!j(e.Value,r.value??new Uint8Array(0)))throw(0,or.default)(new Error('Field "value" did not match between protobuf and CBOR'),Bn);if(!j(e.Validity,r.validity??new Uint8Array(0)))throw(0,or.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Bn);if(e.ValidityType!==r.validityType)throw(0,or.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Bn);if(e.Sequence!==r.sequence)throw(0,or.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Bn);if(e.TTL!==r.ttl)throw(0,or.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Bn)};var IH=Pt("ipns"),DH=hr.code,HA="/ipns/",TH=HA.length;var Ua=Ne(Zo(),1),v7=Ne(bu(),1);var Lu=Pt("ipns:validator"),qA=1024*10,WA=async(r,e)=>{let t=cn(e),n;try{let o=b7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Lu.error("record signature verification failed"),(0,Ua.default)(new Error("record signature verification failed"),Bn);if(t.validityType===qt.ValidityType.EOL){if(v7.default.fromString(t.validity).toDate().getTime()<Date.now())throw Lu.error("record has expired"),(0,Ua.default)(new Error("record has expired"),i5)}else if(t.validityType!=null)throw Lu.error("unrecognized validity type"),(0,Ua.default)(new Error("unrecognized validity type"),Eu);Lu("ipns record for %s is valid",t.value)};async function Bu(r,e){if(e.byteLength>qA)throw(0,Ua.default)(new Error("record too large"),u5);let t=E7(r),n=cn(e),o=await w7(t,n);await WA(o,e)}async function*Fa(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let s=n.split(e);n=s.pop()??"";for(let i=0;i<s.length;i++)yield JSON.parse(s[i])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}var V0=Ne(S7(),1);var Ro=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},K0=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},R7=r=>globalThis.DOMException===void 0?new K0(r):new DOMException(r),A7=r=>{let e=r.reason===void 0?R7("This operation was aborted."):r.reason;return e instanceof Error?e:R7(e)};function zr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout}}=e,i,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(A7(f)),f.addEventListener("abort",()=>{d(A7(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new Ro;i=s.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(f){d(f)}})()}).finally(()=>{c.clear()});return c.clear=()=>{s.clearTimeout.call(void 0,i),i=void 0},c}function $0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Ka=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=$0(this.#e,n,(s,i)=>i.priority-s.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Wt=class extends V0.default{#e;#t;#r=0;#i;#c;#p=0;#o;#l;#n;#m;#s=0;#u;#a;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Ka,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#i=e.intervalCap,this.#c=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#a=e.autoStart===!1}get#b(){return this.#t||this.#r<this.#i}get#E(){return this.#s<this.#u}#x(){this.#s--,this.#d(),this.emit("next")}#v(){this.#w(),this.#y(),this.#l=void 0}get#_(){let e=Date.now();if(this.#o===void 0){let t=this.#p-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#l===void 0&&(this.#l=setTimeout(()=>{this.#v()},t)),!0}return!1}#d(){if(this.#n.size===0)return this.#o&&clearInterval(this.#o),this.#o=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#a){let e=!this.#_;if(this.#b&&this.#E){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#o!==void 0||(this.#o=setInterval(()=>{this.#w()},this.#c),this.#p=Date.now()+this.#c)}#w(){this.#r===0&&this.#s===0&&this.#o&&(clearInterval(this.#o),this.#o=void 0),this.#r=this.#e?this.#s:0,this.#f()}#f(){for(;this.#d(););}get concurrency(){return this.#u}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#u=e,this.#f()}async#S(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let s=e({signal:t.signal});t.timeout&&(s=zr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#S(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof Ro&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#x()}},t),this.emit("add"),this.#d()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#a?(this.#a=!1,this.#f(),this):this}pause(){this.#a=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#h("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#h("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#h("idle")}async#h(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#a}};function YA(r){return r[Symbol.asyncIterator]!=null}function QA(r){if(YA(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var gs=QA;var H0=B("/ipns/");function I7(r){return j(r.subarray(0,H0.byteLength),H0)}var D7=r=>Xe(r.slice(H0.length)),Uu=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*mr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!I7(e))return;let o=D7(e),s=cn(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!I7(e))throw new g("Not found","ERR_NOT_FOUND");let n=D7(e);try{let o=await this.client.getIPNS(n,t);return Ma(o)}catch(o){throw o.code==="ERR_BAD_RESPONSE"?new g("Not found","ERR_NOT_FOUND"):o}}},Fu=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await gs(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new g("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){}};var zt=Pt("delegated-routing-v1-http-api-client"),T7={concurrentRequests:4,timeout:3e4},Vu=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,ye(1/0,this.shutDownController.signal),this.httpQueue=new Wt({concurrency:t.concurrentRequests??T7.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??T7.timeout,this.contentRouting=new Uu(this),this.peerRouting=new Fu(this)}get[en](){return this.contentRouting}get[tn](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){zt("getProviders starts: %c",e);let n=lt([this.shutDownController.signal,t.signal,AbortSignal.timeout(this.timeout)]),o=ie(),s=ie();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let i=`${this.clientUrl}routing/v1/providers/${e.toString()}`,c=await fetch(i,{headers:{Accept:"application/x-ndjson"},signal:n});if(c.status===404)throw new g("No matching records found.","ERR_NOT_FOUND");if(c.status===422)throw new g("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(c.body==null)throw new g("Routing response had no body","ERR_BAD_RESPONSE");if(c.headers.get("Content-Type")==="application/json"){let d=await c.json();for(let u of d.Providers){let f=this.#e(u);f!=null&&(yield f)}}else for await(let d of Fa(dl(c.body))){let u=this.#e(d);u!=null&&(yield u)}}catch(i){zt.error("getProviders errored:",i)}finally{n.clear(),s.resolve(),zt("getProviders finished: %c",e)}}async*getPeers(e,t={}){zt("getPeers starts: %c",e);let n=lt([this.shutDownController.signal,t.signal,AbortSignal.timeout(this.timeout)]),o=ie(),s=ie();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let i=`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`,c=await fetch(i,{headers:{Accept:"application/x-ndjson"},signal:n});if(c.status===404)throw new g("No matching records found.","ERR_NOT_FOUND");if(c.status===422)throw new g("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(c.body==null)throw new g("Routing response had no body","ERR_BAD_RESPONSE");if(c.headers.get("Content-Type")==="application/json"){let d=await c.json();for(let u of d.Peers){let f=this.#e(u);f!=null&&(yield f)}}else for await(let d of Fa(dl(c.body))){let u=this.#e(d);u!=null&&(yield u)}}catch(i){zt.error("getPeers errored:",i)}finally{n.clear(),s.resolve(),zt("getPeers finished: %c",e)}}async getIPNS(e,t={}){zt("getIPNS starts: %c",e);let n=lt([this.shutDownController.signal,t.signal,AbortSignal.timeout(this.timeout)]),o=ie(),s=ie();this.httpQueue.add(async()=>(o.resolve(),s.promise));let i=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await o.promise;let c=await fetch(i,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:n});if(zt("getIPNS GET %s %d",i,c.status),c.status===404)throw new g("No matching records found.","ERR_NOT_FOUND");if(c.status===422)throw new g("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(c.body==null)throw new g("GET ipns response had no body","ERR_BAD_RESPONSE");let l=await c.arrayBuffer(),d=new Uint8Array(l,0,l.byteLength);return t.validate!==!1&&await Bu(U0(e),d),cn(d)}catch(a){throw zt.error("getIPNS GET %s error:",i,a),a}finally{n.clear(),s.resolve(),zt("getIPNS finished: %c",e)}}async putIPNS(e,t,n={}){zt("putIPNS starts: %c",e);let o=lt([this.shutDownController.signal,n.signal,AbortSignal.timeout(this.timeout)]),s=ie(),i=ie();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await s.promise;let c=Ma(t),d=await fetch(a,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:c,signal:o});if(zt("putIPNS PUT %s %d",a,d.status),d.status!==200)throw new g("PUT ipns response had status other than 200","ERR_BAD_RESPONSE")}catch(c){throw zt.error("putIPNS PUT %s error:",a,c.stack),c}finally{o.clear(),i.resolve(),zt("putIPNS finished: %c",e)}}#e(e){let t=[],n=e.Addrs?.map(X)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:we(e.ID),Addrs:n,Protocols:t}}};function k7(r,e={}){return new Vu(new URL(r),e)}var q0=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function W0(r){return new q0(r)}var ys={};ge(ys,{abortedError:()=>eI,closeFailedError:()=>jA,deleteFailedError:()=>G0,getFailedError:()=>ZA,hasFailedError:()=>JA,notFoundError:()=>Ao,openFailedError:()=>XA,putFailedError:()=>z0});var Un=Ne(Zo(),1);function XA(r){return r=r??new Error("Open failed"),(0,Un.default)(r,"ERR_OPEN_FAILED")}function jA(r){return r=r??new Error("Close failed"),(0,Un.default)(r,"ERR_CLOSE_FAILED")}function z0(r){return r=r??new Error("Put failed"),(0,Un.default)(r,"ERR_PUT_FAILED")}function ZA(r){return r=r??new Error("Get failed"),(0,Un.default)(r,"ERR_GET_FAILED")}function G0(r){return r=r??new Error("Delete failed"),(0,Un.default)(r,"ERR_DELETE_FAILED")}function JA(r){return r=r??new Error("Has failed"),(0,Un.default)(r,"ERR_HAS_FAILED")}function Ao(r){return r=r??new Error("Not Found"),(0,Un.default)(r,"ERR_NOT_FOUND")}function eI(r){return r=r??new Error("Aborted"),(0,Un.default)(r,"ERR_ABORTED")}var ln=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var $a=class extends ln{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(at.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(at.encode(e.multihash.bytes));if(t==null)throw Ao();return t}has(e){return this.data.has(at.encode(e.multihash.bytes))}async delete(e){this.data.delete(at.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:oe.createV1(Bc,Cr(at.decode(e))),block:t}}};function tI(r){return r[Symbol.asyncIterator]!=null}function rI(r,e){if(tI(r))return async function*(){for await(let a of r)await e(a)&&(yield a)}();let t=Ms(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){await s&&(yield n);for await(let a of t)await e(a)&&(yield a)}();let i=e;return function*(){s===!0&&(yield n);for(let a of t)i(a)&&(yield a)}()}var Sr=rI;var nI=Pt("blockstore:core:tiered"),Ha=class extends ln{stores;constructor(e){super(),this.stores=e.slice()}async put(e,t,n){try{return await Promise.all(this.stores.map(async o=>{await o.put(e,t,n)})),e}catch(o){throw z0(o)}}async get(e,t){for(let n of this.stores)try{let o=await n.get(e,t);if(o!=null)return o}catch(o){nI.error(o)}throw Ao()}async has(e,t){for(let n of this.stores)if(await n.has(e,t))return!0;return!1}async delete(e,t){try{await Promise.all(this.stores.map(async n=>{await n.delete(e,t)}))}catch(n){throw G0(n)}}async*putMany(e,t={}){let n,o=this.stores.map(s=>{let i=ot({objectMode:!0});return Ft(s.putMany(i,t)).catch(a=>{n=a}),i});try{for await(let s of e){if(n!=null)throw n;o.forEach(i=>i.push(s)),yield s.cid}}finally{o.forEach(s=>s.end())}}async*deleteMany(e,t={}){let n,o=this.stores.map(s=>{let i=ot({objectMode:!0});return Ft(s.deleteMany(i,t)).catch(a=>{n=a}),i});try{for await(let s of e){if(n!=null)throw n;o.forEach(i=>i.push(s)),yield s}}finally{o.forEach(s=>s.end())}}async*getAll(e){let t=new Set;yield*Sr(kt(...this.stores.map(n=>n.getAll(e))),n=>{let o=n.cid.toString();return t.has(o)?!1:(t.add(o),!0)})}};var qq={...ys};var C7=Ne(Zo(),1);function Ku(r){return r=r??new Error("Not Found"),(0,C7.default)(r,"ERR_NOT_FOUND")}var N7="SHARDING";function sI(r){return r[Symbol.asyncIterator]!=null}function iI(r){if(sI(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Wa=iI;function aI(r){return r[Symbol.asyncIterator]!=null}function cI(r,e){return aI(r)?async function*(){yield*(await Wa(r)).sort(e)}():function*(){yield*Wa(r).sort(e)}()}var $u=cI;var Fn=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await Ft(this.putMany(e,n)),e=[],await Ft(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=Sr(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Sr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>$u(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Sr(n,()=>o++>=s)}return e.limit!=null&&(n=oo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Sr(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Sr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>$u(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Sr(n,()=>s++>=o)}return e.limit!=null&&(n=oo(n,e.limit)),n}};var ws=class extends Fn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw Ku();return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Oe(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Oe(e)}};var EW=new Oe(N7);var NW=Pt("datastore:core:tiered");function Hu(r){let e=[Gr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var Y0=60;function qu(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:Gr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:Gr[e.type],TTL:e.TTL??e.ttl??Y0,data:e.data instanceof Uint8Array?L(e.data):e.data}))}}var dI=4;function Q0(r,e={}){let t=new Wt({concurrency:e.queryConcurrency??dI});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Hu(o.types).forEach(a=>{s.append("type",a.toString())}),o.onProgress?.(new pe("dns:query",{detail:n}));let i=await t.add(async()=>{let a=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=qu(await a.json());return o.onProgress?.(new pe("dns:response",{detail:c})),c},{signal:o.signal});if(i==null)throw new Error("No DNS response received");return i}}function O7(){return[Q0("https://cloudflare-dns.com/dns-query"),Q0("https://dns.google/resolve")]}var B7=Ne(X0(),1);var j0=class{lru;constructor(e){this.lru=(0,B7.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return qu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:Gr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??Y0)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function M7(r){return new j0(r)}var fI=1e3,Wu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=M7(e.cacheSize??fI),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=O7())}async query(e,t={}){let n=Hu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new pe("dns:cache",{detail:o})),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new pe("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var Gr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(Gr||(Gr={}));function zu(r={}){return new Wu(r)}var Z0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function Gu(r,e,t,n){let o=new Z0(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((s,i)=>{let a=l=>{try{if(n?.filter?.(l)===!1)return}catch(d){r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(d);return}r.removeEventListener(e,a),t?.removeEventListener("abort",c),s(l)},c=()=>{r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(o)};r.addEventListener(e,a),t?.addEventListener("abort",c)})}var Yu=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function Bt(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new Yu(t?.errorMessage,t?.errorCode));let n,o=new Yu(t?.errorMessage,t?.errorCode);try{return await Promise.race([r,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Qu=class{deferred;signal;where;constructor(e,t){this.signal=t,this.deferred=ie(),this.where=e,this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(new Nr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function hI(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Xu=class{id;fn;options;priority;recipients;status;timeline;controller;constructor(e,t,n=0){this.id=hI(),this.status="queued",this.fn=e,this.priority=n,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,ye(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&this.controller.abort(new Nr)}async join(e={}){let t=new Qu(new Error("where").stack,e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await Bt(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.signal?.removeEventListener("abort",this.onAbort)})}};function pI(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Vn=class extends Ce{concurrency;queue;pending;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){if(this.queue[this.size-1]?.priority>=e.priority){this.queue.push(e);return}let t=pI(this.queue,e,(n,o)=>o.priority-n.priority);this.queue.splice(t,0,e)}async add(e,t){t?.signal?.throwIfAborted();let n=new Xu(e,t,t?.priority),o=n.join(t).then(s=>(this.safeDispatchEvent("completed",{detail:s}),s)).catch(s=>{throw this.safeDispatchEvent("error",{detail:s}),s});return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),o}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Nr)}),this.clear()}async onEmpty(e){this.size!==0&&await Gu(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Gu(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Gu(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=ot({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail)},i=()=>{n()},a=()=>{n(new g("Queue aborted","ERR_QUEUE_ABORTED"))};this.addEventListener("completed",o),this.addEventListener("error",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var K7="/pin/",U7="/pinned-block/",J0=ro,F7=1;function V7(r){return r.version===0&&(r=r.toV1()),new Oe(`${K7}${r.toString(J0)}`)}var ju=class{datastore;blockstore;dagWalkers;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.dagWalkers=n}async*add(e,t={}){let n=V7(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let s=new Vn({concurrency:F7});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>j(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,xi(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=this.dagWalkers[e.code];if(o==null)throw new Error(`No dag walker found for cid codec ${e.code}`);let s=await this.blockstore.get(e,n);yield e;for await(let i of o.walk(s))yield*await t.add(async()=>this.#e(i,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Oe(`${U7}${J0.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=_r(await this.datastore.get(o,n))}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,xi(s),n),n.onProgress?.(new pe("helia:pin:add",e))}}async*rm(e,t={}){let n=V7(e),o=await this.datastore.get(n,t),s=_r(o);await this.datastore.delete(n,t);let i=new Vn({concurrency:F7});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>j(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:K7+(e.cid!=null?`${e.cid.toString(ro)}`:"")},e)){let o=oe.parse(t.toString().substring(5),ro),s=_r(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Oe(`${U7}${J0.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};function _i(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}var wt=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),n)}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return _i(this.map.entries(),e=>[we(e[0]),e[1]])}forEach(e){this.map.forEach((t,n)=>{e(t,we(n),this)})}get(e){return this.map.get(e.toString())}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),t)}keys(){return _i(this.map.keys(),e=>we(e))}values(){return this.map.values()}get size(){return this.map.size}};var tt=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return _i(this.set.entries(),e=>{let t=we(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=we(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return _i(this.set.values(),e=>we(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};var Zu=class{log;routers;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[]}async start(){await jn(...this.routers)}async stop(){await Zn(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new g("No content routers available","ERR_NO_ROUTERS_AVAILABLE");let n=new tt;for await(let o of kt(...Si(this.routers,"findProviders").map(s=>s.findProviders(e,t))))o!=null&&(n.has(o.id)||(n.add(o.id),yield o))}async provide(e,t={}){if(this.routers.length===0)throw new g("No content routers available","ERR_NO_ROUTERS_AVAILABLE");await Promise.all(Si(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(Si(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(Si(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new g("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");let n=this,o=kt(...Si(this.routers,"findPeer").map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s;throw new g("Could not find peer in routing","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new g("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");let n=new tt;for await(let o of kt(...Si(this.routers,"getClosestPeers").map(s=>s.getClosestPeers(e,t))))o!=null&&(n.has(o.id)||(n.add(o.id),yield o))}};function Si(r,e){return r.filter(t=>t[e]!=null)}var Io={},Ri=r=>{r.addEventListener("message",e=>{Ri.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Ri.dispatchEvent("message",r,e)})};Ri.addEventListener=(r,e)=>{Io[r]==null&&(Io[r]=[]),Io[r].push(e)};Ri.removeEventListener=(r,e)=>{Io[r]!=null&&(Io[r]=Io[r].filter(t=>t===e))};Ri.dispatchEvent=function(r,e,t){Io[r]!=null&&Io[r].forEach(n=>n(e,t))};var e2=Ri;var t2="lock:worker:request-read",r2="lock:worker:release-read",n2="lock:master:grant-read",o2="lock:worker:request-write",s2="lock:worker:release-write",i2="lock:master:grant-write";var $7=(r=21)=>Math.random().toString().substring(2);var H7=(r,e,t,n,o)=>(s,i)=>{if(i.data.type!==t)return;let a={type:i.data.type,name:i.data.name,identifier:i.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{s.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d==null||d.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(s.removeEventListener("message",l),c())};s.addEventListener("message",l)})}}}))},q7=(r,e,t,n)=>async()=>{let o=$7();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(s=>{let i=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",i),s(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",i)})},mI={singleProcess:!1},W7=r=>{if(r=Object.assign({},mI,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return e2.addEventListener("message",H7(t,"requestReadLock",t2,r2,n2)),e2.addEventListener("message",H7(t,"requestWriteLock",o2,s2,i2)),t}return{isWorker:!0,readLock:t=>q7(t,t2,n2,r2),writeLock:t=>q7(t,o2,i2,s2)}};var bs={},Do;async function a2(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>zr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var gI=(r,e)=>{if(Do.isWorker===!0)return{readLock:Do.readLock(r,e),writeLock:Do.writeLock(r,e)};let t=new Wt({concurrency:1}),n;return{async readLock(){if(n!=null)return a2(n,e);n=new Wt({concurrency:e.concurrency,autoStart:!1});let o=n,s=a2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,a2(t,e)}}},yI={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function za(r){let e=Object.assign({},yI,r);return Do==null&&(Do=W7(e),Do.isWorker!==!0&&(Do.addEventListener("requestReadLock",t=>{bs[t.data.name]!=null&&bs[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Do.addEventListener("requestWriteLock",async t=>{bs[t.data.name]!=null&&bs[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),bs[e.name]==null&&(bs[e.name]=gI(e.name,e)),bs[e.name]}var Ju=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=za({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await jn(this.child),this.started=!0}async stop(){await Zn(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let s of e){if(await o.pins.isPinned(s))throw new Error("CID was pinned");yield s}}(),t)}finally{n()}}async has(e,t={}){let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}};var G7=42;function wI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=oe.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new U(x.tag,G7),new U(x.bytes,t)]}function bI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function EI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var z7={float64:!0,typeEncoders:{Object:wI,undefined:bI,number:EI}},yG={...z7,typeEncoders:{...z7.typeEncoders}};function xI(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return oe.decode(r.subarray(1))}var c2={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};c2.tags[G7]=xI;var wG={...c2,tags:c2.tags.slice()};var Y7=113;var Q7=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===x.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===x.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[x.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[x.negint.major](e,t){this[x.uint.major](e,t)}[x.bytes.major](e,t){throw new Error(`${yi} unsupported type: Uint8Array`)}[x.string.major](e,t){this.prefix(e);let n=vu(JSON.stringify(t.value));e.push(n.length>32?Ca(n):n)}[x.array.major](e,t){this.prefix(e),this.inRecursive.push({type:x.array,elements:0}),e.push([91])}[x.map.major](e,t){this.prefix(e),this.inRecursive.push({type:x.map,elements:0}),e.push([123])}[x.tag.major](e,t){}[x.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(i.type===x.array)e.push([93]);else if(i.type===x.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${yi} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};var Es=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Q} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Q} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new U(x.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Q} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Q} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new U(x.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new U(i>=0?x.uint:x.negint,i,this._pos-e):new U(i>=0?x.uint:x.negint,BigInt(s),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Q} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new U(x.string,c,i)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Q} unexpected end of unicode escape sequence at position ${this._pos}`);let s=0;for(let i=0;i<4;i++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${Q} unexpected unicode escape character at position ${this._pos}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Q} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${Q} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${Q} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new U(x.string,C0(t),this._pos-e);default:if(s<32)throw new Error(`${Q} invalid control character at position ${this._pos}`);s<128?(t.push(s),this._pos++):o()}}throw new Error(`${Q} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new U(x.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new U(x.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new U(x.null,null,4);case 102:return this.expect([102,97,108,115,101]),new U(x.false,!1,5);case 116:return this.expect([116,114,117,101]),new U(x.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Q} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new U(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new U(x.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new U(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new U(x.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Q} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function e1(r,e){return e=Object.assign({tokenizer:new Es(r,e)},e),_r(r,e)}var SI={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};SI.tags[42]=oe.parse;var j7=297;var LG=new TextDecoder;var BG=new TextEncoder;var AI=new TextDecoder;function l2(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function t1(r,e){let t;[t,e]=l2(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function Z7(r,e){let t;return[t,e]=l2(r,e),[t&7,t>>3,e]}function II(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=Z7(r,n),s===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=t1(r,n)}else if(s===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let i;[i,n]=t1(r,n),e.Name=AI.decode(i)}else if(s===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=l2(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function J7(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=Z7(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=t1(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=t1(r,t),n.push(II(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let i={};return s&&(i.Data=s),i.Links=n||[],i}var UG=new TextEncoder,FG=2**32,VG=2**31;var HG=new TextEncoder;function eg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var tg=112;function rg(r){let e=eg(r),t=J7(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=oe.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}var TI={codec:tg,*walk(r){yield*rg(r).Links.map(t=>t.Hash)}},kI={codec:Bc,*walk(){}},ng=42,CI={codec:Y7,*walk(r){let e=[],t=[];t[ng]=n=>{if(n[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");let o=oe.decode(n.subarray(1));return e.push(o),o},_r(r,{tags:t}),yield*e}},u2=class extends Es{tokenBuffer;constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===x.map){let t=this._next();if(t.type===x.string&&t.value==="/"){let n=this._next();if(n.type===x.string){if(this._next().type!==x.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new U(x.tag,42,0)}if(n.type===x.map){let o=this._next();if(o.type===x.string&&o.value==="bytes"){let s=this._next();if(s.type===x.string){for(let a=0;a<2;a++)if(this._next().type!==x.break)throw new Error("Invalid encoded Bytes form");let i=dr.decode(`m${s.value}`);return new U(x.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},NI={codec:j7,*walk(r){let e=[],t=[];t[ng]=n=>{let o=oe.parse(n);return e.push(o),o},e1(r,{tags:t,tokenizer:new u2(r,{tags:t,allowIndefinite:!0,allowUndefined:!0,allowNaN:!0,allowInfinity:!0,allowBigInt:!0,strict:!1,rejectDuplicateMapKeys:!1})}),yield*e}},PI={codec:n8,*walk(){}};function og(r=[]){let e={};return[TI,kI,CI,NI,PI,...r].forEach(t=>{e[t.codec]=t}),e}var d2=new Oe("/version"),sg=1;async function ig(r){if(!await r.has(d2)){await r.put(d2,B(`${sg}`));return}let e=await r.get(d2),t=L(e);if(parseInt(t,10)!==sg)throw new Error("Unknown datastore version, a datastore migration may be required")}function ag(r=[]){let e={};return[Re,Of,hr,...r].forEach(t=>{e[t.code]=t}),e}var cg=0,r1=class extends ln{put(e){return e}get(e){if(e.code===cg)return e.multihash.digest;throw Ao()}has(e){return e.code===cg}delete(){}*getAll(){}};function OI(r){return typeof r.retrieve=="function"}function LI(r){return typeof r.announce=="function"}var n1=class{child;blockRetrievers;blockAnnouncers;hashers;started;log;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.child=new Ha([new r1,e.blockstore]),this.blockRetrievers=(e.blockBrokers??[]).filter(OI),this.blockAnnouncers=(e.blockBrokers??[]).filter(LI),this.hashers=e.hashers??{},this.started=!1}isStarted(){return this.started}async start(){await jn(this.child,...new Set([...this.blockRetrievers,...this.blockAnnouncers])),this.started=!0}async stop(){await Zn(this.child,...new Set([...this.blockRetrievers,...this.blockAnnouncers])),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){return await this.child.has(e)?(n.onProgress?.(new pe("blocks:put:duplicate",e)),e):(n.onProgress?.(new pe("blocks:put:providers:notify",e)),this.blockAnnouncers.forEach(o=>{o.announce(e,t,n)}),n.onProgress?.(new pe("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Sr(e,async({cid:s})=>{let i=await this.child.has(s);return i&&t.onProgress?.(new pe("blocks:put-many:duplicate",s)),!i}),o=qo(n,({cid:s,block:i})=>{t.onProgress?.(new pe("blocks:put-many:providers:notify",s)),this.blockAnnouncers.forEach(a=>{a.announce(s,i,t)})});t.onProgress?.(new pe("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e)){t.onProgress?.(new pe("blocks:get:providers:get",e));let n=await lg(e,this.blockRetrievers,this.hashers[e.multihash.code],{...t,log:this.log});return t.onProgress?.(new pe("blocks:get:blockstore:put",e)),await this.child.put(e,n,t),t.onProgress?.(new pe("blocks:get:providers:notify",e)),this.blockAnnouncers.forEach(o=>{o.announce(e,n,t)}),n}return t.onProgress?.(new pe("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new pe("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(qo(e,async n=>{if(t.offline!==!0&&!await this.child.has(n)){t.onProgress?.(new pe("blocks:get-many:providers:get",n));let o=await lg(n,this.blockRetrievers,this.hashers[n.multihash.code],{...t,log:this.log});t.onProgress?.(new pe("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new pe("blocks:get-many:providers:notify",n)),this.blockAnnouncers.forEach(s=>{s.announce(n,o,t)})}}))}async delete(e,t={}){t.onProgress?.(new pe("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new pe("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new pe("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},BI=(r,e)=>{if(e==null)throw new g(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`,"ERR_UNKNOWN_HASH_ALG");return async t=>{let n=await e.digest(t);if(!j(n.digest,r.multihash.digest))throw new g("Hash of downloaded block did not match multihash from passed CID","ERR_HASH_MISMATCH")}};async function lg(r,e,t,n){let o=BI(r,t),s=new AbortController,i=lt([s.signal,n.signal]);try{return await Promise.any(e.map(async a=>{try{let c=!1,l=await a.retrieve(r,{...n,signal:i,validateFn:async d=>{await o(d),c=!0}});return c||await o(l),l}catch(c){throw n.log.error("could not retrieve verified block for %c",r,c),c}}))}finally{i.clear()}}var o1=class{blockstore;datastore;pins;logger;routing;dagWalkers;hashers;dns;log;constructor(e){this.logger=e.logger??Jn(),this.log=this.logger.forComponent("helia"),this.hashers=ag(e.hashers),this.dagWalkers=og(e.dagWalkers),this.dns=e.dns??zu();let t={blockstore:e.blockstore,datastore:e.datastore,hashers:this.hashers,dagWalkers:this.dagWalkers,logger:this.logger,blockBrokers:[],dns:this.dns,...e.components??{}};t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new n1(t);this.pins=new ju(e.datastore,n,this.dagWalkers),this.blockstore=new Ju(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,this.routing=new Zu(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[en]!=null&&s.push(o[en]),o[tn]!=null&&s.push(o[tn]),s})})}async start(){await ig(this.datastore),await jn(this.blockstore,this.datastore,this.routing)}async stop(){await Zn(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Ft(o.deleteMany(async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new pe("helia:gc:deleted",s))}catch(i){n.log.error("Error during gc",i),e.onProgress?.(new pe("helia:gc:error",i))}}()))}finally{t()}this.log("gc finished")}};var s1=class extends o1{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var f2=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=ie(),this.haveNext=ie()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=ie(),e}async throw(e){return this.ended=!0,e!=null&&this.haveNext.reject(e),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");if(this.nextResult!=null&&(await this.readNext.promise,this.nextResult!=null))throw new Error("NeedNext promise resolved but nextResult was not consumed");e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=ie(),await Bt(this.readNext.promise,t?.signal,t)}};function ug(){return new f2}var i1=class extends Error{code;constructor(e,t){super(e),this.code=t}},h2=class extends i1{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted"}};function dg(r,e){let t=ug();r.sink(t).catch(async i=>{await t.end(i)}),r.sink=async i=>{for await(let a of i)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new de;return{read:async(i,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new h2("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(i==null){let{done:u,value:f}=await Promise.race([n.next(),l]);return u===!0?new de:f}for(;o.byteLength<i;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new i1("unexpected end of input","ERR_UNEXPECTED_EOF");o.append(u)}let d=o.sublist(0,i);return o.consume(i),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(i,a)=>{a?.signal?.throwIfAborted(),i instanceof Uint8Array?await t.push(i,a):await t.push(i.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let i=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*i}()}return r}}}var a1=class extends Error{code;constructor(e,t){super(e),this.code=t}};function un(r,e={}){let t=dg(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ke(e.maxDataLength));let n=e?.lengthDecoder??jt,o=e?.lengthEncoder??Ye;return{read:async i=>{let a=-1,c=new de;for(;;){c.append(await t.read(1,i));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new a1("message length length too long","ERR_MSG_LENGTH_TOO_LONG");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new a1("message length too long","ERR_MSG_DATA_TOO_LONG");return t.read(a,i)},write:async(i,a)=>{await t.write(new de(o(i.byteLength),i),a)},writeV:async(i,a)=>{let c=new de(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function p2(){let r=ie(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function fg(){let r=p2(),e=p2();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Ai=!!globalThis.process?.env?.DUMP_SESSION_KEYS;var Kn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4));function hg(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}var pg=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),MI=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!MI)throw new Error("Non little-endian hardware is not supported");function c1(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function l1(r){if(typeof r=="string")r=c1(r);else if(hg(r))r=r.slice();else throw new Error(`expected Uint8Array, got ${typeof r}`);return r}var UI=r=>Object.prototype.toString.call(r)==="[object Object]"&&r.constructor===Object;function mg(r,e){if(e!==void 0&&(typeof e!="object"||!UI(e)))throw new Error("options must be object or undefined");return Object.assign(r,e)}function xs(r,e){if(!hg(r))throw new Error("Uint8Array expected");if(typeof e=="number"&&r.length!==e)throw new Error(`Uint8Array length ${e} expected`)}function gg(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var m2=(r,e)=>(Object.assign(e,r),e);function g2(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}function u1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`wrong positive integer: ${r}`)}function y2(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function FI(r){return r!=null&&typeof r=="object"&&(r instanceof Uint8Array||r.constructor.name==="Uint8Array")}function Ii(r,...e){if(!FI(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function w2(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function yg(r,e){Ii(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var bt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,b2=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=l1(e),xs(e,32);let t=bt(e,0),n=bt(e,2),o=bt(e,4),s=bt(e,6),i=bt(e,8),a=bt(e,10),c=bt(e,12),l=bt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=bt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],m=i[6],h=i[7],p=i[8],y=i[9],w=bt(e,t+0),E=bt(e,t+2),b=bt(e,t+4),S=bt(e,t+6),R=bt(e,t+8),A=bt(e,t+10),D=bt(e,t+12),_=bt(e,t+14),k=s[0]+(w&8191),P=s[1]+((w>>>13|E<<3)&8191),N=s[2]+((E>>>10|b<<6)&8191),O=s[3]+((b>>>7|S<<9)&8191),F=s[4]+((S>>>4|R<<12)&8191),Y=s[5]+(R>>>1&8191),I=s[6]+((R>>>14|A<<2)&8191),C=s[7]+((A>>>11|D<<5)&8191),$=s[8]+((D>>>8|_<<8)&8191),T=s[9]+(_>>>5|o),v=0,M=v+k*a+P*(5*y)+N*(5*p)+O*(5*h)+F*(5*m);v=M>>>13,M&=8191,M+=Y*(5*f)+I*(5*u)+C*(5*d)+$*(5*l)+T*(5*c),v+=M>>>13,M&=8191;let V=v+k*c+P*a+N*(5*y)+O*(5*p)+F*(5*h);v=V>>>13,V&=8191,V+=Y*(5*m)+I*(5*f)+C*(5*u)+$*(5*d)+T*(5*l),v+=V>>>13,V&=8191;let H=v+k*l+P*c+N*a+O*(5*y)+F*(5*p);v=H>>>13,H&=8191,H+=Y*(5*h)+I*(5*m)+C*(5*f)+$*(5*u)+T*(5*d),v+=H>>>13,H&=8191;let ne=v+k*d+P*l+N*c+O*a+F*(5*y);v=ne>>>13,ne&=8191,ne+=Y*(5*p)+I*(5*h)+C*(5*m)+$*(5*f)+T*(5*u),v+=ne>>>13,ne&=8191;let se=v+k*u+P*d+N*l+O*c+F*a;v=se>>>13,se&=8191,se+=Y*(5*y)+I*(5*p)+C*(5*h)+$*(5*m)+T*(5*f),v+=se>>>13,se&=8191;let fe=v+k*f+P*u+N*d+O*l+F*c;v=fe>>>13,fe&=8191,fe+=Y*a+I*(5*y)+C*(5*p)+$*(5*h)+T*(5*m),v+=fe>>>13,fe&=8191;let ce=v+k*m+P*f+N*u+O*d+F*l;v=ce>>>13,ce&=8191,ce+=Y*c+I*a+C*(5*y)+$*(5*p)+T*(5*h),v+=ce>>>13,ce&=8191;let ue=v+k*h+P*m+N*f+O*u+F*d;v=ue>>>13,ue&=8191,ue+=Y*l+I*c+C*a+$*(5*y)+T*(5*p),v+=ue>>>13,ue&=8191;let Me=v+k*p+P*h+N*m+O*f+F*u;v=Me>>>13,Me&=8191,Me+=Y*d+I*l+C*c+$*a+T*(5*y),v+=Me>>>13,Me&=8191;let ke=v+k*y+P*p+N*h+O*m+F*f;v=ke>>>13,ke&=8191,ke+=Y*u+I*d+C*l+$*c+T*a,v+=ke>>>13,ke&=8191,v=(v<<2)+v|0,v=v+M|0,M=v&8191,v=v>>>13,V+=v,s[0]=M,s[1]=V,s[2]=H,s[3]=ne,s[4]=se,s[5]=fe,s[6]=ce,s[7]=ue,s[8]=Me,s[9]=ke}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535}update(e){w2(this);let{buffer:t,blockLen:n}=this;e=l1(e);let o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){this.h.fill(0),this.r.fill(0),this.buffer.fill(0),this.pad.fill(0)}digestInto(e){w2(this),yg(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function VI(r){let e=(n,o)=>r(o).update(l1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var wg=VI(r=>new b2(r));var KI=c1("expand 16-byte k"),$I=c1("expand 32-byte k"),HI=Kn(KI),qI=Kn($I);function G(r,e){return r<<e|r>>>32-e}function E2(r){return r.byteOffset%4===0}var d1=64,WI=16,Eg=2**32-1,bg=new Uint32Array;function zI(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(d1),d=Kn(l),u=E2(o)&&E2(s),f=u?Kn(o):bg,m=u?Kn(s):bg;for(let h=0;h<c;i++){if(r(e,t,n,d,i,a),i>=Eg)throw new Error("arx: counter overflow");let p=Math.min(d1,c-h);if(u&&p===d1){let y=h/4;if(h%4!==0)throw new Error("arx: invalid block position");for(let w=0,E;w<WI;w++)E=y+w,m[E]=f[E]^d[w];h+=d1;continue}for(let y=0,w;y<p;y++)w=h+y,s[w]=o[w]^l[y];h+=p}}function x2(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=mg({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return u1(o),u1(i),y2(s),y2(t),(a,c,l,d,u=0)=>{Ii(a),Ii(c),Ii(l);let f=l.length;if(d||(d=new Uint8Array(f)),Ii(d),u1(u),u<0||u>=Eg)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let m=[],h=a.length,p,y;if(h===32)p=a.slice(),m.push(p),y=qI;else if(h===16&&t)p=new Uint8Array(32),p.set(a),p.set(a,16),y=HI,m.push(p);else throw new Error(`arx: invalid 32-byte key, got length=${h}`);E2(c)||(c=c.slice(),m.push(c));let w=Kn(p);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,w,Kn(c.subarray(0,16)),w),c=c.subarray(16)}let E=16-o;if(E!==c.length)throw new Error(`arx: nonce must be ${E} or 16 bytes`);if(E!==12){let S=new Uint8Array(12);S.set(c,s?0:12-c.length),c=S,m.push(c)}let b=Kn(c);for(zI(r,y,w,b,l,d,u,i);m.length>0;)m.pop().fill(0);return d}}function _g(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],m=e[3],h=e[4],p=e[5],y=e[6],w=e[7],E=o,b=t[0],S=t[1],R=t[2],A=i,D=a,_=c,k=l,P=d,N=u,O=f,F=m,Y=h,I=p,C=y,$=w,T=E,v=b,M=S,V=R;for(let ne=0;ne<s;ne+=2)A=A+P|0,T=G(T^A,16),Y=Y+T|0,P=G(P^Y,12),A=A+P|0,T=G(T^A,8),Y=Y+T|0,P=G(P^Y,7),D=D+N|0,v=G(v^D,16),I=I+v|0,N=G(N^I,12),D=D+N|0,v=G(v^D,8),I=I+v|0,N=G(N^I,7),_=_+O|0,M=G(M^_,16),C=C+M|0,O=G(O^C,12),_=_+O|0,M=G(M^_,8),C=C+M|0,O=G(O^C,7),k=k+F|0,V=G(V^k,16),$=$+V|0,F=G(F^$,12),k=k+F|0,V=G(V^k,8),$=$+V|0,F=G(F^$,7),A=A+N|0,V=G(V^A,16),C=C+V|0,N=G(N^C,12),A=A+N|0,V=G(V^A,8),C=C+V|0,N=G(N^C,7),D=D+O|0,T=G(T^D,16),$=$+T|0,O=G(O^$,12),D=D+O|0,T=G(T^D,8),$=$+T|0,O=G(O^$,7),_=_+F|0,v=G(v^_,16),Y=Y+v|0,F=G(F^Y,12),_=_+F|0,v=G(v^_,8),Y=Y+v|0,F=G(F^Y,7),k=k+P|0,M=G(M^k,16),I=I+M|0,P=G(P^I,12),k=k+P|0,M=G(M^k,8),I=I+M|0,P=G(P^I,7);let H=0;n[H++]=i+A|0,n[H++]=a+D|0,n[H++]=c+_|0,n[H++]=l+k|0,n[H++]=d+P|0,n[H++]=u+N|0,n[H++]=f+O|0,n[H++]=m+F|0,n[H++]=h+Y|0,n[H++]=p+I|0,n[H++]=y+C|0,n[H++]=w+$|0,n[H++]=E+T|0,n[H++]=b+v|0,n[H++]=S+M|0,n[H++]=R+V|0}function GI(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],m=e[5],h=e[6],p=e[7],y=t[0],w=t[1],E=t[2],b=t[3];for(let R=0;R<20;R+=2)o=o+c|0,y=G(y^o,16),f=f+y|0,c=G(c^f,12),o=o+c|0,y=G(y^o,8),f=f+y|0,c=G(c^f,7),s=s+l|0,w=G(w^s,16),m=m+w|0,l=G(l^m,12),s=s+l|0,w=G(w^s,8),m=m+w|0,l=G(l^m,7),i=i+d|0,E=G(E^i,16),h=h+E|0,d=G(d^h,12),i=i+d|0,E=G(E^i,8),h=h+E|0,d=G(d^h,7),a=a+u|0,b=G(b^a,16),p=p+b|0,u=G(u^p,12),a=a+u|0,b=G(b^a,8),p=p+b|0,u=G(u^p,7),o=o+l|0,b=G(b^o,16),h=h+b|0,l=G(l^h,12),o=o+l|0,b=G(b^o,8),h=h+b|0,l=G(l^h,7),s=s+d|0,y=G(y^s,16),p=p+y|0,d=G(d^p,12),s=s+d|0,y=G(y^s,8),p=p+y|0,d=G(d^p,7),i=i+u|0,w=G(w^i,16),f=f+w|0,u=G(u^f,12),i=i+u|0,w=G(w^i,8),f=f+w|0,u=G(u^f,7),a=a+c|0,E=G(E^a,16),m=m+E|0,c=G(c^m,12),a=a+c|0,E=G(E^a,8),m=m+E|0,c=G(c^m,7);let S=0;n[S++]=o,n[S++]=s,n[S++]=i,n[S++]=a,n[S++]=y,n[S++]=w,n[S++]=E,n[S++]=b}var YI=x2(_g,{counterRight:!1,counterLength:4,allowShortKeys:!1}),QI=x2(_g,{counterRight:!1,counterLength:8,extendNonceFn:GI,allowShortKeys:!1});var XI=new Uint8Array(16),xg=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(XI.subarray(t))},jI=new Uint8Array(32);function vg(r,e,t,n,o){let s=r(e,t,jI),i=wg.create(s);o&&xg(i,o),xg(i,n);let a=new Uint8Array(16),c=pg(a);g2(c,0,BigInt(o?o.length:0),!0),g2(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return s.fill(0),l}var Sg=r=>(e,t,n)=>(xs(e,32),xs(t),{encrypt:(s,i)=>{let a=s.length,c=a+16;i?xs(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=vg(r,e,t,i.subarray(0,-16),n);return i.set(l,a),i},decrypt:(s,i)=>{let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");i?xs(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=vg(r,e,t,l,n);if(!gg(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),i}}),v2=m2({blockSize:64,nonceLength:12,tagLength:16},Sg(YI)),lQ=m2({blockSize:64,nonceLength:24,tagLength:16},Sg(QI));function Ag(r,e,t){return ns(r),t===void 0&&(t=new Uint8Array(r.outputLen)),po(r,Lr(t),Lr(e))}var _2=new Uint8Array([0]),Rg=new Uint8Array;function Ig(r,e,t,n=32){if(ns(r),io(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=Rg);let s=new Uint8Array(o*r.outputLen),i=po.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)_2[0]=l+1,a.update(l===0?Rg:c).update(t).update(_2).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),_2.fill(0),s.slice(0,n)}var S2={hashSHA256(r){return vo(r.subarray())},getHKDF(r,e){let t=Ag(vo,e,r),o=Ig(vo,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=Ea.utils.randomPrivateKey();return{publicKey:Ea.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ea.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ea.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return v2(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return v2(n,e,t).decrypt(r.subarray(),o)}};var Dg=S2;function Tg(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Di=r=>{let e=ze(2);return e[0]=r>>8,e[1]=r,e};Di.bytes=2;var Ga=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Ga.bytes=2;function kg(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function R2(r,e){!e.enabled||!Ai||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${L(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${L(r.privateKey,"hex")}`)):e("Missing local static keys."))}function A2(r,e){!e.enabled||!Ai||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${L(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${L(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function Cg(r,e){!e.enabled||!Ai||e(r?`REMOTE_STATIC_PUBLIC_KEY ${L(r.subarray(),"hex")}`:"Missing remote static public key.")}function I2(r,e){!e.enabled||!Ai||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${L(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function D2(r,e,t){!t.enabled||!Ai||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&L(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&L(e.k,"hex")}`))}function $n(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=ze(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function f1(r,e){for(let t=0;t<r.byteLength;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return r.byteLength>e.byteLength?1:r.byteLength<e.byteLength?-1:0}var h1=class r extends Error{code;constructor(e="Unexpected Peer"){super(e),this.code=r.code}static code="ERR_UNEXPECTED_PEER"},Ti=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var ZI=0,JI=4294967295,eD="Cipherstate has reached maximum n, a new handshake must be performed",p1=class{n;bytes;view;constructor(e=ZI){this.n=e,this.bytes=et(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>JI)throw new Error(eD)}};var vs=et(0),ki=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new p1(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},T2=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=B(t,"utf-8");this.h=tD(e,n),this.ck=this.h,this.cs=new ki(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new ki(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new de(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,vs);return[new ki(this.crypto,e),new ki(this.crypto,t)]}},k2=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new T2(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Ya=class extends k2{writeMessageA(e){return new de(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new de(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new de(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ti(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Ti(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Ti(`handshake stage 2 validation fail: ${t.message}`)}}};function tD(r,e){if(e.length<=32){let t=et(32);return t.set(e),t}else return r.hash(e)}var m1;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(m1||(m1={}));var Qa;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),m1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:et(0),identitySig:et(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=m1.codec().decode(t,t.uint32());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Qa||(Qa={}));async function C2(r,e,t){let n=await r.sign(Ng(e));return Qa.encode({identityKey:r.public.bytes,identitySig:n,extensions:t})}async function N2(r,e,t){try{let n=Qa.decode(r);if(t){let i=t.subarray();if(!j(i,n.identityKey))throw new Error(`Payload identity key ${L(n.identityKey,"hex")} does not match expected remote identity key ${L(i,"hex")}`)}if(!e)throw new Error("Remote static does not exist");let o=Ng(e);if(!await Hr(n.identityKey).verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new h1(n.message)}}function Ng(r){let e=B("noise-libp2p-static-key:");return r instanceof Uint8Array?_e([e,r],e.length+r.length):(r.prepend(e),r)}async function Pg(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await C2(o,i.publicKey,c),d=new Ya({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:i});R2(d.s,e),e.trace("Stage 0 - Initiator starting to send first message."),await t.write(d.writeMessageA(vs)),e.trace("Stage 0 - Initiator finished sending first message."),A2(d.e,e),e.trace("Stage 1 - Initiator waiting to receive first message from responder...");let u=d.readMessageB(await t.read());e.trace("Stage 1 - Initiator received the message."),I2(d.re,e),Cg(d.rs,e),e.trace("Initiator going to check remote's signature...");let f=await N2(u,d.rs,a);e.trace("All good with the signature!"),e.trace("Stage 2 - Initiator sending third handshake message."),await t.write(d.writeMessageC(l)),e.trace("Stage 2 - Initiator sent message with signed payload.");let[m,h]=d.ss.split();return D2(m,h,e),{payload:f,encrypt:p=>m.encryptWithAd(vs,p),decrypt:(p,y)=>h.decryptWithAd(vs,p,y)}}async function Og(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await C2(o,i.publicKey,c),d=new Ya({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:i});R2(d.s,e),e.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await t.read()),e.trace("Stage 0 - Responder received first message."),I2(d.re,e),e.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await t.write(d.writeMessageB(l)),e.trace("Stage 1 - Responder sent the second handshake message with signed payload."),A2(d.e,e),e.trace("Stage 2 - Responder waiting for third handshake message...");let u=d.readMessageC(await t.read());e.trace("Stage 2 - Responder received the message, finished handshake.");let f=await N2(u,d.rs,a),[m,h]=d.ss.split();return D2(m,h,e),{payload:f,encrypt:p=>h.encryptWithAd(vs,p),decrypt:(p,y)=>m.decryptWithAd(vs,p,y)}}var Bg=16;function Mg(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let s=o+65519;s>n.length&&(s=n.length);let i;n instanceof Uint8Array?i=r.encrypt(n.subarray(o,s)):i=r.encrypt(n.sublist(o,s)),e?.encryptedPackets.increment(),yield new de(Di(i.byteLength),i)}}}function Ug(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let s=o+65535;if(s>n.length&&(s=n.length),s-Bg<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-Bg);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var g1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e;let c=s??Dg;this.crypto=Tg(c),this.extensions=o,this.metrics=a?kg(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??et(0)}async secureOutbound(e,t,n){let o=un(t,{lengthEncoder:Di,lengthDecoder:Ga,maxDataLength:65535});if(!e.privateKey)throw new g("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Er(e.privateKey),i=n?.publicKey,a=await this.performHandshakeInitiator(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ut(a.payload.identityKey)}}async secureInbound(e,t,n){let o=un(t,{lengthEncoder:Di,lengthDecoder:Ga,maxDataLength:65535});if(!e.privateKey)throw new g("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Er(e.privateKey),i=n?.publicKey,a=await this.performHandshakeResponder(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ut(a.payload.identityKey)}}async performHandshakeInitiator(e,t,n){let o;try{o=await Pg({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async performHandshakeResponder(e,t,n){let o;try{o=await Og({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async createSecureConnection(e,t){let[n,o]=fg(),s=e.unwrap();return await Qe(n,Mg(t,this.metrics),s,i=>Kt(i,{lengthDecoder:Ga}),Ug(t,this.metrics),n),o}};function Ci(r={}){return e=>new g1(e,r)}function y1(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var Ni="ERR_INVALID_FRAME",P2="ERR_UNREQUESTED_PING",O2="ERR_NOT_MATCHING_PING",L2="ERR_STREAM_ALREADY_EXISTS",B2="ERR_DECODE_INVALID_VERSION",M2="ERR_BOTH_CLIENTS",U2="ERR_RECV_WINDOW_EXCEEDED",Fg=new Set([Ni,P2,O2,L2,B2,M2,U2]),To="ERR_INVALID_CONFIG",w1="ERR_MUXER_LOCAL_CLOSED",F2="ERR_MUXER_REMOTE_CLOSED";var Vg="ERR_STREAM_ABORT",Kg="ERROR_MAX_OUTBOUND_STREAMS_EXCEEDED",$g="ERR_DECODE_IN_PROGRESS",ja=256*1024,Hg=16*1024*1024;var qg={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:ja,maxStreamWindowSize:Hg,maxMessageSize:64*1024};function Wg(r){if(r.keepAliveInterval<=0)throw new g("keep-alive interval must be positive",To);if(r.maxInboundStreams<0)throw new g("max inbound streams must be larger or equal 0",To);if(r.maxOutboundStreams<0)throw new g("max outbound streams must be larger or equal 0",To);if(r.initialStreamWindowSize<ja)throw new g("InitialStreamWindowSize must be larger or equal 256 kB",To);if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new g("MaxStreamWindowSize must be larger than the InitialStreamWindowSize",To);if(r.maxStreamWindowSize>2**32-1)throw new g("MaxStreamWindowSize must be less than equal MAX_UINT32",To);if(r.maxMessageSize<1024)throw new g("MaxMessageSize must be greater than a kilobyte",To)}var je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(je||(je={}));var We;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(We||(We={}));var FX=Object.values(We).filter(r=>typeof r!="string"),zg=0,Rr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Rr||(Rr={}));var ko=12;var Gg=2**24;function rD(r){if(r[0]!==zg)throw new g("Invalid frame version",B2);return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*Gg+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*Gg+(r[9]<<16)+(r[10]<<8)+r[11]}}var b1=class{source;buffer;frameInProgress;constructor(e){this.source=nD(e),this.buffer=new de,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new g("decoding frame already in progress",$g);if(this.buffer.length<ko)return;let e=rD(this.buffer.subarray(0,ko));return this.buffer.consume(ko),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function nD(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function V2(r){let e=new Uint8Array(ko);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function Yg(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function E1(r,e){let t=y1(r).return?.();Yg(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var oD="ERR_STREAM_RESET",sD="ERR_SINK_INVALID_STATE",iD=5e3;function K2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Co=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=ie(),this.closed=ie(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??iD,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=ot({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new g(`writable end state is "${this.writeStatus}" not "ready"`,sD);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);K2(o)&&await o}let n=()=>{E1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new de(o):o;let s=this.sendData(o,t);K2(s)&&(this.sendingData=ie(),await s,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await Bt(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully")}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await Bt(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await Bt(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await Bt(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();K2(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new g("stream reset",oD);this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Ar;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Ar||(Ar={}));var x1=class extends Co{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Ar.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=ja,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=qo(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-ko,e.length),o=this.getSendFlags();this.sendFrame({type:je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:je.WindowUpdate,flag:We.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|We.FIN;this.sendFrame({type:je.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new g("stream aborted",Vg)):t()};e.signal?.addEventListener("abort",o);try{await new Promise((s,i)=>{this.sendWindowCapacityUpdate=()=>{s()},n=i,t=s})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new g("receive window exceeded",U2,{available:this.recvWindowCapacity,recv:e.length});let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&We.ACK)===We.ACK&&this.state===Ar.SYNSent&&(this.state=Ar.Established),(e&We.FIN)===We.FIN&&this.remoteCloseWrite(),(e&We.RST)===We.RST&&this.reset()}getSendFlags(){switch(this.state){case Ar.Init:return this.state=Ar.SYNSent,We.SYN;case Ar.SYNReceived:return this.state=Ar.Established,We.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var Qg="/yamux/1.0.0",aD=500,v1=class{protocol=Qg;_components;_init;constructor(e,t={}){this._components=e,this._init=t}createStreamMuxer(e){return new $2(this._components,{...this._init,...e})}},$2=class{protocol=Qg;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...qg,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),Wg(this.config),this.closeController=new AbortController,ye(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=ot({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=y1(n);if(a.return!=null){let c=a.return();cD(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new b1(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}s=Rr.NormalTermination}catch(a){let c=a.code;Fg.has(c)?(this.log?.error("protocol error in sink",a),s=Rr.ProtocolError):(this.log?.error("internal error in sink",a),s=Rr.InternalError),i=a}this.log?.trace("muxer sink ended"),i!=null?this.abort(i,s):await this.close({reason:s})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new g("muxer closed remotely",F2);if(this.localGoAway!==void 0)throw new g("muxer closed locally",w1);let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new g("max outbound streams exceeded",Kg);this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Ar.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new g("muxer closed remotely",F2);if(this.localGoAway!==void 0)throw new g("muxer closed locally",w1);if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new g("muxer closed locally",w1))};this.closeController.signal.addEventListener("abort",i,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",i),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Rr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(aD);ye(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Rr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new g("Stream already exists",L2,{id:e});let s=new x1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:s}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case je.Ping:{this.handlePing(e);return}case je.GoAway:{this.handleGoAway(s);return}default:throw new g("Invalid frame type",Ni,{header:e})}else switch(e.type){case je.Data:case je.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new g("Invalid frame type",Ni,{header:e})}}handlePing(e){if(e.flag===We.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,We.ACK);else if(e.flag===We.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new g("Invalid frame flag",Ni,{header:e})}handlePingResponse(e){if(this.activePing===void 0)throw new g("ping not requested",P2);if(this.activePing.id!==e)throw new g("ping doesn't match our id",O2);this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Rr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:s}=e;(o&We.SYN)===We.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.("frame for missing stream id=%s",n);return}switch(s){case je.WindowUpdate:{i.handleWindowUpdate(e);return}case je.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new g("both endpoints are clients",M2);if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:je.WindowUpdate,flag:We.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:je.WindowUpdate,flag:We.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Ar.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===je.Data){if(t===void 0)throw new g("invalid frame",Ni);this.source.push(new de(V2(e),t))}else this.source.push(V2(e))}sendPing(e,t=We.SYN){t===We.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Rr.NormalTermination){this.log?.("sending GoAway reason=%s",Rr[e]),this.localGoAway=e,this.sendFrame({type:je.GoAway,flag:0,streamID:0,length:e})}};function cD(r){return r!=null&&typeof r.then=="function"}function Xg(r={}){return e=>new v1(e,r)}var _1=async()=>{let r=await ka("Ed25519"),e=await lD(r);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function lD(r){return ut(I0(r.public),D0(r))}var Zg=Ne(jg(),1),uD=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],dD=uD.map(r=>new Zg.Netmask(r));function fD(r){for(let e of dD)if(e.contains(r))return!0;return!1}function hD(r){return/^::$/.test(r)||/^::1$/.test(r)||/^::f{4}:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^::f{4}:0.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Ir(r){return Xs(r)?fD(r):js(r)?hD(r):void 0}var S1=globalThis.CustomEvent??Event;async function*Hn(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,s=[],i=ie(),a=ie(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let h of r){if(s.length===t&&(i=ie(),await i.promise),d)break;let p={done:!1};s.push(p),h().then(y=>{p.done=!0,p.ok=!0,p.value=y,o.dispatchEvent(new S1("task-complete"))},y=>{p.done=!0,p.err=y,o.dispatchEvent(new S1("task-complete"))})}c=!0,o.dispatchEvent(new S1("task-complete"))}catch(h){l=h,o.dispatchEvent(new S1("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(h=>h.done)}function*f(){for(;s.length>0&&s[0].done;){let h=s[0];if(s.shift(),h.ok)yield h.value;else throw d=!0,i.resolve(),h.err;i.resolve()}}function*m(){for(;u();)for(let h=0;h<s.length;h++)if(s[h].done){let p=s[h];if(s.splice(h,1),h--,p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}for(;;){if(u()||(a=ie(),await a.promise),l!=null)throw l;if(n?yield*f():yield*m(),c&&s.length===0)break}}var Jg="libp2p",e9="autonat",t9="1.0.0";var me;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>$e(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>$e(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=te((u,f,m={})=>{if(m.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let h of u.addrs)f.uint32(18),f.bytes(h);m.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let m={addrs:[]},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:m.id=u.bytes();break;case 2:m.addrs.push(u.bytes());break;default:u.skipType(p&7);break}}return m})),d),l.encode=u=>ee(u,l.codec()),l.decode=u=>J(u,l.codec())})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=te((u,f,m={})=>{m.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),m.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let m={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:m.peer=r.PeerInfo.codec().decode(u,u.uint32());break;default:u.skipType(p&7);break}}return m})),d),l.encode=u=>ee(u,l.codec()),l.decode=u=>J(u,l.codec())})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=te((u,f,m={})=>{m.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),m.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let m={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:m.status=r.ResponseStatus.codec().decode(u);break;case 2:m.statusText=u.string();break;case 3:m.addr=u.bytes();break;default:u.skipType(p&7);break}}return m})),d),l.encode=u=>ee(u,l.codec()),l.decode=u=>J(u,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=te((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={},f=d==null?l.len:l.pos+d;for(;l.pos<f;){let m=l.uint32();switch(m>>>3){case 1:u.type=r.MessageType.codec().decode(l);break;case 2:u.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:u.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(m&7);break}}return u})),c),r.encode=l=>ee(l,r.codec()),r.decode=l=>J(l,r.codec())})(me||(me={}));var H2=4,R1=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??Jg}/${e9}/${t9}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new g("handleIncomingAutonatStream timeout",yn))};t.addEventListener("abort",n,{once:!0}),ye(1/0,t);let o=this.components.addressManager.getAddresses().map(s=>s.toOptions().host);try{let s=this;await Qe(e.stream,i=>Kt(i),async function*(i){let a=await gs(i);if(a==null){s.log("no message received"),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=me.decode(a)}catch(p){s.log.error("could not decode message",p),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){s.log.error("dial was missing from message"),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let d,u=l.peer;if(u==null||u.id==null){s.log.error("PeerId missing from message"),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{d=Xe(u.id)}catch(p){s.log.error("invalid PeerId",p),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(s.log("incoming request from %p",d),!e.connection.remotePeer.equals(d)){s.log("target peer %p did not equal sending peer %p",d,e.connection.remotePeer),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let f=u.addrs.map(p=>X(p)).filter(p=>{let y=p.toOptions().host===e.connection.remoteAddr.toOptions().host;return s.log.trace("request to dial %a was sent from %a is same host %s",p,e.connection.remoteAddr,y),y}).filter(p=>{let y=p.toOptions().host,w=!(Ir(y)??!1);return s.log.trace("host %s was public %s",y,w),w}).filter(p=>{let y=p.toOptions().host,w=!o.includes(y);return s.log.trace("host %s was not our host %s",y,w),w}).filter(p=>{let y=!!s.components.transportManager.transportForMultiaddr(p);return s.log.trace("transport for %a is supported %s",p,y),y}).map(p=>(p.getPeerId()==null&&(p=p.encapsulate(`/p2p/${d.toString()}`)),p));if(f.length===0){s.log("no valid multiaddrs for %p in message",d),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}s.log("dial multiaddrs %s for peer %p",f.map(p=>p.toString()).join(", "),d);let m="",h=f[0];for await(let p of f){let y;h=p;try{if(y=await s.components.connectionManager.openConnection(p,{signal:t}),!y.remoteAddr.equals(p))throw s.log.error("tried to dial %a but dialed %a",p,y.remoteAddr),new Error("Unexpected remote address");s.log("Success %p",d),yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.OK,addr:y.remoteAddr.decapsulateCode(Z("p2p").code).bytes}});return}catch(w){s.log("could not dial %p",d,w),m=w.message}finally{y!=null&&await y.close()}}yield me.encode({type:me.MessageType.DIAL_RESPONSE,dialResponse:{status:me.ResponseStatus.E_DIAL_ERROR,statusText:m,addr:h.bytes}})},i=>Vt(i),e.stream)}catch(s){this.log.error("error handling incoming autonat stream",s)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(s=>{let i=s.toOptions();return!(Ir(i.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);ye(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(u=>u.toString()).join(", "));let s=me.encode({type:me.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(u=>u.bytes)}}}),a=(await _1()).toBytes(),c={},l=[],d=async u=>{let f=()=>{};try{this.log("asking %p to verify multiaddr",u.id);let m=await o.components.connectionManager.openConnection(u.id,{signal:n}),h=await m.newStream(this.protocol,{signal:n});f=()=>{h.abort(new g("verifyAddress timeout",yn))},n.addEventListener("abort",f,{once:!0});let p=await Qe([s],w=>Vt(w),h,w=>Kt(w),async w=>gs(w));if(p==null){this.log("no response received from %p",m.remotePeer);return}let y=me.decode(p);if(y.type!==me.MessageType.DIAL_RESPONSE||y.dialResponse==null){this.log("invalid autonat response from %p",m.remotePeer);return}if(y.dialResponse.status===me.ResponseStatus.OK){let w=m.remoteAddr.toOptions(),E;if(w.family===4)E=w.host.split(".")[0];else if(w.family===6)E=w.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',w.host);return}if(l.includes(E)){this.log("already have response from network segment %d - %s",E,w.host);return}l.push(E)}return y.dialResponse}catch(m){this.log.error("error asking remote to verify multiaddr",m)}finally{n.removeEventListener("abort",f)}};for await(let u of Hn(mr(this.components.peerRouting.getClosestPeers(a,{signal:n}),f=>async()=>d(f)),{concurrency:H2}))try{if(u==null)continue;let f=u.addr==null?t[0]:X(u.addr);if(this.log("autonat response for %a is %s",f,u.status),u.status===me.ResponseStatus.E_BAD_REQUEST||u.status===me.ResponseStatus.E_DIAL_REFUSED||u.addr==null&&t.length>1)continue;if(!t.some(h=>h.equals(f))){this.log("peer reported %a as %s but it was not in our observed address list",f,u.status);continue}let m=f.toString();if(c[m]==null&&(c[m]={success:0,failure:0}),u.status===me.ResponseStatus.OK?c[m].success++:u.status===me.ResponseStatus.E_DIAL_ERROR&&c[m].failure++,c[m].success===H2){this.log("%a is externally dialable",f),e.confirmObservedAddr(f);return}if(c[m].failure===H2){this.log("%a is not externally dialable",f),e.removeObservedAddr(f);return}}catch(f){this.log.error("could not verify external address",f)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function r9(r={}){return e=>new R1(e,r)}var bD=q("dns4"),ED=q("dns6"),xD=q("dnsaddr"),Po=rt(q("dns"),xD,bD,ED),A1=rt(q("ip4"),q("ip6")),Pi=rt(re(A1,q("tcp")),re(Po,q("tcp"))),I1=re(A1,q("udp")),vD=re(I1,q("utp")),_D=re(I1,q("quic")),SD=re(I1,q("quic-v1")),q2=rt(re(Pi,q("ws")),re(Po,q("ws"))),Oi=rt(re(q2,q("p2p")),q2),W2=rt(re(Pi,q("wss")),re(Po,q("wss")),re(Pi,q("tls"),q("ws")),re(Po,q("tls"),q("ws"))),_s=rt(re(W2,q("p2p")),W2),z2=rt(re(Pi,q("http")),re(A1,q("http")),re(Po,q("http"))),G2=rt(re(Pi,q("https")),re(A1,q("https")),re(Po,q("https"))),n9=re(I1,q("webrtc-direct"),q("certhash")),i9=rt(re(n9,q("p2p")),n9),o9=re(SD,q("webtransport"),q("certhash"),q("certhash")),a9=rt(re(o9,q("p2p")),o9),c9=rt(re(Oi,q("p2p-webrtc-star"),q("p2p")),re(_s,q("p2p-webrtc-star"),q("p2p")),re(Oi,q("p2p-webrtc-star")),re(_s,q("p2p-webrtc-star"))),Jj=rt(re(Oi,q("p2p-websocket-star"),q("p2p")),re(_s,q("p2p-websocket-star"),q("p2p")),re(Oi,q("p2p-websocket-star")),re(_s,q("p2p-websocket-star"))),l9=rt(re(z2,q("p2p-webrtc-direct"),q("p2p")),re(G2,q("p2p-webrtc-direct"),q("p2p")),re(z2,q("p2p-webrtc-direct")),re(G2,q("p2p-webrtc-direct"))),Ss=rt(q2,W2,z2,G2,c9,l9,Pi,vD,_D,Po,i9,a9),eZ=rt(re(Ss,q("p2p-stardust"),q("p2p")),re(Ss,q("p2p-stardust"))),No=rt(re(Ss,q("p2p")),c9,l9,i9,a9,q("p2p")),s9=rt(re(No,q("p2p-circuit"),No),re(No,q("p2p-circuit")),re(q("p2p-circuit"),No),re(Ss,q("p2p-circuit")),re(q("p2p-circuit"),Ss),q("p2p-circuit")),u9=()=>rt(re(s9,u9),s9),Yr=u9(),d9=rt(re(Yr,No,Yr),re(No,Yr),re(Yr,No),Yr,No);var tZ=rt(re(Yr,q("webrtc"),q("p2p")),re(Yr,q("webrtc")),re(Ss,q("webrtc"),q("p2p")),re(Ss,q("webrtc")),q("webrtc"));function f9(r){function e(t){let n;try{n=X(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function re(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:f9(e),partialMatch:e}}function rt(...r){function e(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:f9(e),partialMatch:e}}function q(r){let e=r;function t(o){let s;try{s=X(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var RD="bootstrap",AD=50,ID=12e4,DD=1e3,Y2=class extends Ce{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??DD,this.list=[];for(let n of t.list){if(!d9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=X(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:we(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[zo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??RD]:{value:this._init.tagValue??AD,ttl:this._init.tagTTL??ID}}}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function p9(r){return e=>new Y2(e,r)}var m9={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var Ja;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.publicKey=t.bytes();break;case 2:o.payloadType=t.bytes();break;case 3:o.payload=t.bytes();break;case 5:o.signature=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Ja||(Ja={}));var Qr=class r{static createFromProtobuf=async e=>{let t=Ja.decode(e),n=await ut(t.publicKey);return new r({peerId:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t.privateKey==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=g9(n,o,s),c=await(await Er(t.privateKey)).sign(i.subarray());return new r({peerId:t,payloadType:o,payload:s,signature:c})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new g("envelope signature is not valid for the given domain",m9.ERR_SIGNATURE_NOT_VALID);return n};peerId;payloadType;payload;signature;marshaled;constructor(e){let{peerId:t,payloadType:n,payload:o,signature:s}=e;this.peerId=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=Ja.encode({publicKey:this.peerId.publicKey,payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return j(this.marshal(),e.marshal())}async validate(e){let t=g9(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return Hr(this.peerId.publicKey).verify(t.subarray(),this.signature)}},g9=(r,e,t)=>{let n=B(r),o=Ye(n.byteLength),s=Ye(e.length),i=Ye(t.length);return new de(o,n,s,e,i,t)};function y9(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var w9="libp2p-peer-record",b9=Uint8Array.from([3,1]);var ec;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=te((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let a={multiaddr:new Uint8Array(0)},c=i==null?s.len:s.pos+i;for(;s.pos<c;){let l=s.uint32();switch(l>>>3){case 1:a.multiaddr=s.bytes();break;default:s.skipType(l&7);break}}return a})),o),n.encode=s=>ee(s,n.codec()),n.decode=s=>J(s,n.codec())})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=te((n,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o)=>{let s={peerId:new Uint8Array(0),seq:0n,addresses:[]},i=o==null?n.len:n.pos+o;for(;n.pos<i;){let a=n.uint32();switch(a>>>3){case 1:s.peerId=n.bytes();break;case 2:s.seq=n.uint64();break;case 3:s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return s})),t),r.encode=n=>ee(n,r.codec()),r.decode=n=>J(n,r.codec())})(ec||(ec={}));var sr=class r{static createFromProtobuf=e=>{let t=ec.decode(e),n=Xe(t.peerId),o=(t.addresses??[]).map(i=>X(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=w9;static CODEC=b9;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=ec.encode({peerId:this.peerId.toBytes(),seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!y9(this.multiaddrs,e.multiaddrs))}};function Ze(r,e){let t=un(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var E9="/libp2p/relay";var x9="circuit-relay-relay";var OZ=BigInt(131072),Rs="/libp2p/circuit/relay/0.2.0/hop",Q2="/libp2p/circuit/relay/0.2.0/stop",LZ=30*1e3,BZ=30*1e3,X2=300;var j2="ERR_RELAYED_DIAL",v9="ERR_HOP_REQUEST_FAILED";var Oo;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=te((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Li.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),D1.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Bi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),Et.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=Li.codec().decode(o,o.uint32());break;case 3:i.reservation=D1.codec().decode(o,o.uint32());break;case 4:i.limit=Bi.codec().decode(o,o.uint32());break;case 5:i.status=Et.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ee(o,r.codec()),r.decode=o=>J(o,r.codec())})(Oo||(Oo={}));var dn;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=te((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Li.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Bi.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),Et.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=Li.codec().decode(o,o.uint32());break;case 3:i.limit=Bi.codec().decode(o,o.uint32());break;case 4:i.status=Et.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ee(o,r.codec()),r.decode=o=>J(o,r.codec())})(dn||(dn={}));var Li;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:new Uint8Array(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.id=t.bytes();break;case 2:o.addrs.push(t.bytes());break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Li||(Li={}));var D1;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.expire=t.uint64();break;case 2:o.addrs.push(t.bytes());break;case 3:o.voucher=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(D1||(D1={}));var Bi;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.duration=t.uint32();break;case 2:o.data=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Bi||(Bi={}));var Et;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(Et||(Et={}));var Z2;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(Z2||(Z2={}));(function(r){r.codec=()=>$e(Z2)})(Et||(Et={}));var _9;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.relay=t.bytes();break;case 2:o.peer=t.bytes();break;case 3:o.expiration=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(_9||(_9={}));async function S9(r){let e=new TextEncoder().encode(r),t=await Re.digest(e);return oe.createV0(t)}function J2(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var T1=class extends Ce{peerId;peerStore;contentRouting;registrar;started;topologyId;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Rs,{notifyOnTransient:!0,onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}afterStart(){this.discover().catch(e=>{this.log.error("error discovering relays",e)})}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(Rs)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)this.log("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});this.log("found %d relay peers in peer store",e.length);try{this.log("searching content routing for relays");let t=await S9(E9),n=0;for await(let o of this.contentRouting.findProviders(t))if(o.multiaddrs.length>0&&!o.id.equals(this.peerId)){let s=o.id;n++,await this.peerStore.merge(s,{multiaddrs:o.multiaddrs}),this.log("found relay peer %p in content routing",s),this.safeDispatchEvent("relay:discover",{detail:s})}this.log("found %d relay peers in content routing",n)}catch(t){this.log.error("failed when finding relays on the network",t)}}};var Lo=class extends Vn{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var kD=60*1e3*10,CD=60*1e3*5,ND=30*1e3,k1=class extends Ce{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;log;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new wt,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e4,this.started=!1,this.reserveQueue=new Lo({concurrency:t?.reservationConcurrency??1,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}start(){this.started=!0}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){this.log("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){this.log("not adding relay as the queue is full");return}if(this.reserveQueue.has(e)){this.log("relay peer is already in the reservation queue");return}this.log("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(J2(n.reservation.expire)>kD){this.log("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((d,u)=>(u.type==="discovered"&&d++,d),0)>=this.maxDiscoveredRelays){this.log("already have enough discovered relays");return}let o=AbortSignal.timeout(this.reservationCompletionTimeout),s=await this.connectionManager.openConnection(e,{signal:o});if(s.remoteAddr.protoNames().includes("p2p-circuit")){this.log("not creating reservation over relayed connection");return}let i=await this.#e(s,{signal:o});this.log("created reservation on relay peer %p",e);let a=J2(i.expire),c=Math.min(Math.max(a-CD,ND),Math.pow(2,31)-1),l=setTimeout(()=>{this.addRelay(e,t).catch(d=>{this.log.error("could not refresh reservation to relay %p",e,d)})},c);this.reservations.set(e,{timeout:l,reservation:i,type:t}),await this.peerStore.merge(e,{tags:{[x9]:{value:1,ttl:a}}}),await this.transportManager.listen([X(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){this.log.error("could not reserve slot on %p",e,n);let o=this.reservations.get(e);o!=null&&clearTimeout(o.timeout),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Rs,t),s=Ze(n).pb(Oo);await s.write({type:Oo.Type.RESERVE},t);let i;try{i=await s.read(t)}catch(c){throw this.log.error("error parsing reserve message response from %p because",e.remotePeer,c),n.abort(c),c}finally{await n.close()}if(i.status===Et.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(j(l,d)){c=!0;break}return c||i.reservation.addrs.push(l),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(this.log("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};function ep(r){let{stream:e,remoteAddr:t,logger:n}=r,o=n.forComponent("libp2p:stream:converter"),s=!1,i=!1,a=e.close.bind(e);e.close=async f=>{await a(f),u(!0)};let c=e.abort.bind(e);e.abort=f=>{c(f),u(!0)};let l=e.sink.bind(e);e.sink=async f=>{try{await l(f)}catch(m){m.type!=="aborted"&&o.error("%s error in sink",t,m)}finally{i=!0,u()}};let d={log:o,sink:e.sink,source:async function*(){try{for await(let f of e.source)f instanceof Uint8Array?yield f:yield*f}finally{s=!0,u()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function u(f){f===!0&&(s=!0,i=!0),s&&i&&d.timeline.close==null&&(d.timeline.close=Date.now())}return d}var tp=class extends Ce{connectionManager;relayStore;listeningAddrs;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new wt,this.relayStore.addEventListener("relay:removed",this._onRemoveRelayPeer)}_onRemoveRelayPeer=e=>{this.#e(e.detail)};async listen(e){this.log("listen on %a",e);let t=e.decapsulate("/p2p-circuit"),n=await this.connectionManager.openConnection(t);if(!this.relayStore.hasReservation(n.remotePeer)){this.log("making reservation on peer %p",n.remotePeer),await this.relayStore.addRelay(n.remotePeer,"configured");return}let o=this.relayStore.getReservation(n.remotePeer);if(o==null)throw new g("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){this.log("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,o.addrs.map(s=>X(s).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.log("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&(this.log.trace("removing relay event listener for peer %p",e),this.relayStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close",{}))}};function R9(r){return new tp(r)}var OD=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},rp={maxInboundStopStreams:X2,maxOutboundStopStreams:X2,stopTimeout:3e4},C1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??rp.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??rp.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??rp.stopTimeout,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new T1(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{this.log.error("could not add discovered relay %p",n.detail,o)})})),this.reservationStore=new k1(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{this.log.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){this.reservationStore.start(),await this.registrar.handle(Q2,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),await this.discovery?.start(),this.started=!0}afterStart(){this.discovery?.afterStart()}async stop(){this.discovery?.stop(),this.reservationStore.stop(),await this.registrar.unhandle(Q2),this.started=!1}[rn]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(h=>h===290).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new g(h,j2)}let n=e.toString().split("/p2p-circuit"),o=X(n[0]),s=X(n[n.length-1]),i=o.getPeerId(),a=s.getPeerId();if(i==null||a==null){let h=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw this.log.error(h),new g(h,j2)}let c=we(i),l=we(a),d=!1,f=this.connectionManager.getConnections(c)[0];f==null&&(await this.peerStore.merge(c,{multiaddrs:[o]}),f=await this.connectionManager.openConnection(c,t),d=!0);let m;try{return m=await f.newStream(Rs),await this.connectV2({stream:m,connection:f,destinationPeer:l,destinationAddr:s,relayAddr:o,ma:e,disconnectOnFailure:d})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),m?.abort(h),d&&await f.close(),h}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:s,ma:i,disconnectOnFailure:a}){try{let c=Ze(e),l=c.pb(Oo);await l.write({type:Oo.Type.CONNECT,peer:{id:n.toBytes(),addrs:[X(o).bytes]}});let d=await l.read();if(d.status!==Et.OK)throw new g(`failed to connect via relay with status ${d?.status?.toString()??"undefined"}`,v9);let u=ep({stream:c.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger});return this.log("new outbound transient connection %a",u.remoteAddr),await this.upgrader.upgradeOutbound(u,{transient:!0})}catch(c){throw this.log.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return R9({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Yr.matches(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=Ze(t).pb(dn),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:dn.Type.STATUS,status:Et.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==dn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:dn.Type.STATUS,status:Et.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!OD(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:dn.Type.STATUS,status:Et.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=Xe(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:dn.Type.STATUS,status:Et.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:dn.Type.STATUS,status:Et.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),c=this.addressManager.getAddresses()[0],l=ep({stream:o.unwrap().unwrap(),remoteAddr:a,localAddr:c,logger:this.logger});this.log("new inbound transient connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:!0}),this.log("%s connection %a upgraded","inbound",l.remoteAddr)}};function np(r={}){return e=>new C1(e,r)}var A9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},LD=new WeakMap;function BD({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(A9());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(A9())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,m)=>{i=()=>{d(),f(n)},a=m,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),LD.set(u,()=>{c(s),s=null,i()}),u}}var MD=BD(),N1=MD;var Xr;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=te((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={observedAddresses:[]},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.observedAddresses.push(o.bytes());break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ee(o,r.codec()),r.decode=o=>J(o,r.codec())})(Xr||(Xr={}));var UD=r=>r.toString().split("/").slice(1),tc=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Ie=r=>({match:e=>tc(t=>t===r).match(e),pattern:r}),L1=()=>({match:r=>tc(e=>typeof e=="string").match(r),pattern:"{string}"}),B1=()=>({match:r=>tc(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),xt=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{ae.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),P1=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Mf.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Mt=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),ir=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),Le=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function nt(...r){function e(o){let s=UD(o);for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matches:t,exactMatch:n}}var sp=Le(Ie("dns4"),L1()),ip=Le(Ie("dns6"),L1()),ap=Le(Ie("dnsaddr"),L1()),I9=Le(Ie("dns"),L1()),OJ=nt(sp),LJ=nt(ip),BJ=nt(ap),D9=nt(ir(I9,ap,sp,ip)),T9=Le(Ie("ip4"),tc(Xs)),k9=Le(Ie("ip6"),tc(js)),C9=ir(T9,k9),fn=ir(C9,I9,sp,ip,ap),N9=nt(fn),MJ=nt(T9),UJ=nt(k9),P9=nt(C9),M1=Le(fn,Ie("tcp"),B1()),rc=Le(fn,Ie("udp"),B1()),FD=ir(M1,rc),FJ=nt(M1),VJ=nt(rc),cp=Le(rc,Ie("quic")),U1=Le(rc,Ie("quic-v1")),VD=ir(cp,U1),KJ=nt(cp),$J=nt(U1),op=ir(fn,M1,rc,cp,U1),O9=ir(Le(op,Ie("ws"),Mt(xt()))),HJ=nt(O9),L9=ir(Le(op,Ie("wss"),Mt(xt())),Le(op,Ie("tls"),Ie("ws"),Mt(xt()))),qJ=nt(L9),B9=Le(FD,Ie("webrtc-direct"),P1(),Mt(P1()),Mt(xt())),M9=nt(B9),U9=Le(U1,Ie("webtransport"),P1(),P1(),Mt(xt())),F1=nt(U9),O1=ir(O9,L9,Le(M1,Mt(xt())),Le(VD,Mt(xt())),Le(fn,Mt(xt())),B9,U9,xt()),WJ=nt(O1),KD=Le(O1,Ie("p2p-circuit"),xt()),nc=nt(KD),$D=ir(Le(O1,Ie("p2p-circuit"),Ie("webrtc"),xt()),Le(O1,Ie("webrtc"),Mt(xt())),Ie("webrtc")),F9=nt($D),HD=ir(Le(fn,Ie("tcp"),B1(),Ie("http"),Mt(xt())),Le(fn,Ie("http"),Mt(xt()))),zJ=nt(HD),qD=ir(Le(fn,Ie("tcp"),ir(Le(Ie("443"),Ie("http")),Le(B1(),Ie("https"))),Mt(xt())),Le(fn,Ie("tls"),Ie("http"),Mt(xt())),Le(fn,Ie("https"),Mt(xt()))),GJ=nt(qD);function lp(r,e){return nc.matches(r)||e.transportForMultiaddr(r)==null?!1:D9.matches(r)?!0:P9.matches(r)?Ir(r.toOptions().host)===!1:!1}var V9=1024*4,K9=100,V1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},K1=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??V1.timeout,this.retries=t.retries??V1.retries,this.maxInboundStreams=t.maxInboundStreams??V1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??V1.maxOutboundStreams}isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(oc,{notifyOnTransient:!0,onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(oc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(oc),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([oc],{signal:o.signal,runOnTransientConnection:!0});let s=Ze(t,{maxDataLength:V9}).pb(Xr);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==Xr.Type.CONNECT)throw this.log("A sent wrong message type"),new g("DCUtR message type was incorrect",Go);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new g("DCUtR connect message had no multiaddrs",Go);let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:Xr.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await N1(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:K9});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getPeerId()==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>lp(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(s.transient)throw new Error("Could not open a new, non-transient, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,s)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=Ze(e,{maxDataLength:V9}).pb(Xr);this.log("A receiving connect");let s=await o.read(n);if(s.type!==Xr.Type.CONNECT)throw this.log("B sent wrong message type"),new g("DCUtR message type was incorrect",Go);if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new g("DCUtR connect message had no multiaddrs",Go);let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new g("DCUtR connect message had no dialable multiaddrs",Go);if(this.log("A sending connect"),await o.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Xr.Type.SYNC)throw new g("DCUtR message type was incorrect",Go);this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:K9,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=X(n);if(!lp(o,this.transportManager))continue;t.push(o)}catch{}return t}};var oc="/libp2p/dcutr";function $9(r={}){return e=>new K1(e,r)}var H9="0.1.0",q9="id",W9="id/push",z9="1.0.0",G9="1.0.0";var X9=Ne(Q9(),1),up=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,$1=(0,X9.default)(),H1=up&&!$1,j9=$1&&!up,Z9=$1&&up,J9=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!$1,q1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,dee=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",ey=typeof navigator<"u"&&navigator.product==="ReactNative";var As;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 5:o.protocolVersion=t.string();break;case 6:o.agentVersion=t.string();break;case 1:o.publicKey=t.bytes();break;case 2:o.listenAddrs.push(t.bytes());break;case 4:o.observedAddr=t.bytes();break;case 3:o.protocols.push(t.string());break;case 8:o.signedPeerRecord=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(As||(As={}));var dp=1024*8,Dr={protocolPrefix:"ipfs",timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192,runOnConnectionOpen:!0,runOnTransientConnection:!0},W1=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;runOnTransientConnection;log;constructor(e,t={}){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.log=e.logger.forComponent("libp2p:identify"),this.identifyProtocolStr=`/${t.protocolPrefix??Dr.protocolPrefix}/${q9}/${z9}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??Dr.protocolPrefix}/${W9}/${G9}`,this.timeout=t.timeout??Dr.timeout,this.maxInboundStreams=t.maxInboundStreams??Dr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Dr.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??Dr.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??Dr.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??Dr.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??Dr.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??Dr.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??Dr.protocolPrefix}/${H9}`,agentVersion:t.agentVersion??`${e.nodeInfo.name}/${e.nodeInfo.version}`},(t.runOnConnectionOpen??Dr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(s=>{this.log.error("error during identify trigged by connection:open",s)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})}),this.host.agentVersion===`${e.nodeInfo.name}/${e.nodeInfo.version}`&&(J9||j9?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(H1||q1||Z9||ey)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:B(this.host.agentVersion),ProtocolVersion:B(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(d=>d.decapsulateCode(Z("p2p").code)),n=new sr({peerId:this.peerId,multiaddrs:t}),o=await Qr.seal(n,this.peerId),s=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),a=L(i.metadata.get("AgentVersion")??B(this.host.agentVersion)),c=L(i.metadata.get("ProtocolVersion")??B(this.host.protocolVersion)),l=e.map(async d=>{let u,f=AbortSignal.timeout(this.timeout);ye(1/0,f);try{u=await d.newStream(this.identifyPushProtocolStr,{signal:f,runOnTransientConnection:this.runOnTransientConnection}),await Ze(u,{maxDataLength:this.maxIdentifyMessageSize??dp}).pb(As).write({listenAddrs:t.map(h=>h.bytes),signedPeerRecord:o.marshal(),protocols:s,agentVersion:a,protocolVersion:c},{signal:f}),await u.close({signal:f})}catch(m){this.log.error("could not push identify update to peer",m),u?.abort(m)}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==m4)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);ye(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.identifyProtocolStr,{...t,runOnTransientConnection:this.runOnTransientConnection});let s=await Ze(n,{maxDataLength:this.maxIdentifyMessageSize??dp}).pb(As).read(t);return await n.close(t),s}catch(o){throw this.log.error("error while reading identify message",o),n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new g("public key was missing from identify message","ERR_MISSING_PUBLIC_KEY");let a=await ut(o);if(!e.remotePeer.equals(a))throw new g("identified peer does not match the expected peer","ERR_INVALID_PEER");if(this.peerId.equals(a))throw new g("identified peer is our own peer id?","ERR_INVALID_PEER");let c=zD(i);return this.log("identify completed for peer %p and protocols %o",a,s),this.log("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address %a",c),this.addressManager.addObservedAddr(c)),this.#e(e,n)}async _handleIdentify(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);ye(1/0,o);try{let s=this.peerId.publicKey??new Uint8Array(0),i=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Z("p2p").code)),c=i.peerRecordEnvelope;if(a.length>0&&c==null){let u=new sr({peerId:this.peerId,multiaddrs:a});c=(await Qr.seal(u,this.peerId)).marshal().subarray()}let l=t.remoteAddr.bytes;N9.matches(t.remoteAddr)||(l=void 0),await Ze(n).pb(As).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:s,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:l,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}async _handlePush(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await Ze(n,{maxDataLength:this.maxIdentifyMessageSize??dp}).pb(As).read(o);await n.close(o),await this.#e(t,i)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log("handled push from %p",t.remotePeer)}async#e(e,t){if(this.log("received identify from %p",e.remotePeer),t==null)throw new g("message was null or undefined","ERR_INVALID_MESSAGE");let n={};if(t.listenAddrs.length>0&&(n.addresses=t.listenAddrs.map(i=>({isCertified:!1,multiaddr:X(i)}))),t.protocols.length>0&&(n.protocols=t.protocols),t.publicKey!=null&&(n.publicKey=t.publicKey,!(await ut(t.publicKey)).equals(e.remotePeer)))throw new g("public key did not match remote PeerId","ERR_INVALID_PUBLIC_KEY");let o;if(t.signedPeerRecord!=null){this.log("received signedPeerRecord from %p",e.remotePeer);let i=t.signedPeerRecord,a=await Qr.openAndCertify(i,sr.DOMAIN),c=sr.createFromProtobuf(a.payload);if(!c.peerId.equals(a.peerId))throw new g("signing key does not match PeerId in the PeerRecord","ERR_INVALID_SIGNING_KEY");if(!e.remotePeer.equals(c.peerId))throw new g("signing key does not match remote PeerId","ERR_INVALID_PEER_RECORD_KEY");let l;try{l=await this.peerStore.get(c.peerId)}catch(d){if(d.code!=="ERR_NOT_FOUND")throw d}if(l!=null&&(n.metadata=l.metadata,l.peerRecordEnvelope!=null)){let d=await Qr.createFromProtobuf(l.peerRecordEnvelope),u=sr.createFromProtobuf(d.payload);u.seqNumber>=c.seqNumber&&(this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),c=u,i=l.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d})),o={seq:c.seqNumber,addresses:c.multiaddrs}}else this.log("%p did not send a signed peer record",e.remotePeer);if(this.log("patching %p with",e.remotePeer,n),await this.peerStore.patch(e.remotePeer,n),t.agentVersion!=null||t.protocolVersion!=null){let i={};t.agentVersion!=null&&(i.AgentVersion=B(t.agentVersion)),t.protocolVersion!=null&&(i.ProtocolVersion=B(t.protocolVersion)),this.log("merging %p metadata",e.remotePeer,i),await this.peerStore.merge(e.remotePeer,{metadata:i})}let s={peerId:e.remotePeer,protocolVersion:t.protocolVersion,agentVersion:t.agentVersion,publicKey:t.publicKey,listenAddrs:t.listenAddrs.map(i=>X(i)),observedAddr:t.observedAddr==null?void 0:X(t.observedAddr),protocols:t.protocols,signedPeerRecord:o,connection:e};return this.events.safeDispatchEvent("peer:identify",{detail:s}),s}};function zD(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function ty(r={}){return e=>new W1(e,r)}var ry="/ipfs/kad/1.0.0",ny="/dht/record",fp="/dht/provider";var oy;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(oy||(oy={}));var xe;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(xe||(xe={}));var z1;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(z1||(z1={}));(function(r){r.codec=()=>$e(z1)})(xe||(xe={}));var Ui;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Ui||(Ui={}));var hp;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(hp||(hp={}));(function(r){r.codec=()=>$e(hp)})(Ui||(Ui={}));var Mi;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Ui.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:et(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.id=t.bytes();break}case 2:{o.multiaddrs.push(t.bytes());break}case 3:{o.connection=Ui.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Mi||(Mi={}));var Tr;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&z1[t.type]!==0&&(n.uint32(8),xe.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let s of t.closer)n.uint32(66),Mi.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Mi.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={type:xe.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.type=xe.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{o.closer.push(Mi.codec().decode(t,t.uint32()));break}case 9:{o.providers.push(Mi.codec().decode(t,t.uint32()));break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Tr||(Tr={}));function pp(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new mt("kad-dht:query:send-query",{detail:t})),t}function sc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer!=null?r.closer:[],providers:r.providers!=null?r.providers:[]};return e.onProgress?.(new mt("kad-dht:query:peer-response",{detail:t})),t}function G1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new mt("kad-dht:query:final-peer",{detail:t})),t}function ar(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new mt("kad-dht:query:query-error",{detail:t})),t}function mp(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new mt("kad-dht:query:provider",{detail:t})),t}function ic(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new mt("kad-dht:query:value",{detail:t})),t}function gp(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new mt("kad-dht:query:dial-peer",{detail:t})),t}var ac;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={key:new Uint8Array(0),value:new Uint8Array(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.key=t.bytes();break;case 2:o.value=t.bytes();break;case 5:o.timeReceived=t.string();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(ac||(ac={}));function sy(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function iy(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,s=parseInt(t[3],10),i=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,s,i,a,c,l))}var vt=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return ac.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:sy(this.timeReceived)}}static deserialize(e){let t=ac.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=iy(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};function ay(r,e,t){if(t.length===0){let i="No records given";throw new g(i,"ERR_NO_RECORDS_RECEIVED")}let o=L(e).split("/");if(o.length<3){let i="Record key does not have a selector function";throw new g(i,"ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")}let s=r[o[1].toString()];if(s==null){let i=`No selector function configured for key type "${o[1]}"`;throw new g(i,"ERR_UNRECOGNIZED_KEY_PREFIX")}return t.length===1?0:s(e,t)}function YD(r,e){return 0}var cy={pk:YD};async function Fi(r,e){let t=e.key,o=L(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null){let i=`No validator available for key type "${o[1]}"`;throw new g(i,"ERR_INVALID_RECORD_KEY_TYPE")}await s(t,e.value)}var QD=async(r,e)=>{if(!(r instanceof Uint8Array))throw new g('"key" must be a Uint8Array',"ERR_INVALID_RECORD_KEY_NOT_BUFFER");if(r.byteLength<5)throw new g("invalid public key record","ERR_INVALID_RECORD_KEY_TOO_SHORT");if(L(r.subarray(0,4))!=="/pk/")throw new g("key was not prefixed with /pk/","ERR_INVALID_RECORD_KEY_BAD_PREFIX");let n=r.slice(4),o=await Re.digest(e);if(!j(n,o.bytes))throw new g("public key does not match passed in key","ERR_INVALID_RECORD_HASH_MISMATCH")},ly={pk:QD};var XD=B("/pk/");function uy(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Ir(n);return o==null?!0:!o})}}async function Bo(r){return(await Re.digest(r)).digest}async function jr(r){return Bo(r.toBytes())}function qn(r){return new Oe(`${ny}/${L(r,"base32")}`,!1)}function dy(r){return _e([XD,r.toBytes()])}function fy(r){return L(r.subarray(0,4))==="/pk/"}function hy(r){return Xe(r.subarray(4))}function yp(r,e){let t=new Date;return new vt(r,e,t).serialize()}function py(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var jD=290,ZD=54,JD=55,eT=56,tT=4,rT=41;function my(r){let e=r.stringTuples();for(let t of e)if(t[0]===jD)return!1;if(e[0][0]===ZD||e[0][0]===JD||e[0][0]===eT)return!0;if(e[0][0]===tT||e[0][0]===rT){let t=Ir(`${e[0][1]}`);return t==null||!t}return!1}var Y1=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a}async putLocal(e,t){let n=qn(e);await this.components.datastore.put(n,t)}async getLocal(e){this.log("getLocal %b",e);let t=qn(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=vt.deserialize(n);return await Fi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=yp(e,n);for(let{value:i,from:a}of t){if(j(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=qn(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:xe.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&j(d.record.value,vt.deserialize(s).value)&&(c=!0),yield d;c||(yield ar({from:a,error:new g("value not put correctly","ERR_PUT_VALUE_INVALID")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=yp(e,t),s=qn(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Qe(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>mr(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:xe.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&j(d.record.value,vt.deserialize(o).value)||c.push(ar({from:a.peer.id,error:new g("value not put correctly","ERR_PUT_VALUE_INVALID")},n)));return c}),i=>Hn(i,{ordered:!1,concurrency:3}),async function*(i){for await(let a of i)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=ay(this.selectors,e,o)}catch(a){if(a.code!=="ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new g("best value was not found","ERR_NOT_FOUND");yield*this.sendCorrectionRecord(e,n,i,t),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e);yield ic({value:s.value,from:this.components.peerId},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i}){for await(let a of n.peerRouting.getValueOrPeers(s,e,{signal:i}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield ic({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function gy(r,e){return{id:r.id.toBytes(),multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function cc(r){if(r.id==null)throw new Error("Invalid peer in message");return{id:Xe(r.id),multiaddrs:(r.multiaddrs??[]).map(e=>X(e))}}var Q1=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e),await this.providers.addProvider(e,this.components.peerId);let o={type:xe.ADD_PROVIDER,key:e.multihash.bytes,providers:[gy({id:this.components.peerId,multiaddrs:t})]},s=0,i=a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[];this.log("putProvider %s to %p",e,a.peer.id);try{this.log("sending provider record for %s to %p",e,a.peer.id);for await(let l of this.network.sendMessage(a.peer.id,o,n))l.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,a.peer.id),s++),c.push(l)}catch(l){this.log.error("error sending provide record to peer %p",a.peer.id,l),c.push(ar({from:a.peer.id,error:l},n))}return c};yield*Qe(this.peerRouting.getClosestPeers(e.multihash.bytes,n),a=>mr(a,c=>i(c)),a=>Hn(a,{ordered:!1,concurrency:3}),async function*(a){for await(let c of a)yield*c}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=e.multihash.bytes,s=this;this.log("findProviders %c",e);let i=await this.providers.getProviders(e);if(i.length>0){let l=[];for(let d of i.slice(0,n))try{let u=await this.components.peerStore.get(d);l.push({id:d,multiaddrs:u.addresses.map(({multiaddr:f})=>f)})}catch(u){if(u.code!=="ERR_NOT_FOUND")throw u;this.log("no peer store entry for %p",d)}yield sc({from:this.components.peerId,messageType:xe.GET_PROVIDERS,providers:l},t),yield mp({from:this.components.peerId,providers:l},t)}if(i.length>=n)return;let a=async function*({peer:l,signal:d}){let u={type:xe.GET_PROVIDERS,key:o};yield*s.network.sendRequest(l,u,{...t,signal:d})},c=new tt(i);for await(let l of this.queryManager.run(o,a,t))if(yield l,l.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",l.providers.length,e,l.closer.length);let d=[];for(let u of l.providers)c.has(u.id)||(c.add(u.id),d.push(u));if(d.length>0&&(yield mp({from:l.from,providers:d},t)),c.size===n)return}}};var X1=class extends Ce{log;protocol;running;components;constructor(e,t){super();let{protocol:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=n}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new fa("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield gp({peer:e},n),yield pp({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),c=await this._writeReadMessage(a,t,n);yield sc({from:e,messageType:c.type,closer:c.closer.map(cc),providers:c.providers.map(cc),record:c.record==null?void 0:vt.deserialize(c.record)},n)}catch(i){this.log.error("could not send %s to %p",t.type,e,i),yield ar({from:e,error:i},n)}finally{s!=null&&await s.close()}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new fa("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield gp({peer:e},n),yield pp({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);await this._writeMessage(a,t,n),yield sc({from:e,messageType:o},n)}catch(i){yield ar({from:e,error:i},n)}finally{s!=null&&await s.close()}}async _writeMessage(e,t,n){let o=Ze(e);await o.write(t,Tr,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=Ze(e);await o.write(t,Tr,n);let s=await o.read(Tr,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:cc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:cc(i)})}),s}};var lc=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Mo=new Uint32Array(80),Ep=class extends ao{constructor(){super(64,20,8,!1),this.A=lc[0]|0,this.B=lc[1]|0,this.C=lc[2]|0,this.D=lc[3]|0,this.E=lc[4]|0}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)Mo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Mo[c]=hl(Mo[c-3]^Mo[c-8]^Mo[c-14]^Mo[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=ml(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=gl(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=hl(n,5)+l+a+d+Mo[c]|0;a=i,i=s,s=hl(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){Mo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},yy=ni(()=>new Ep);var wy={sha1:yy,"sha2-256":vo,"sha2-512":uo};function uc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(wy).join(" / ");throw new g(`Hash '${o}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let s=wy[o],i=e6(s,r,e,{c:t,dkLen:n});return dr.encode(i).substring(1)}var j1=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peerId)}async add(e){if(this.peerDistances.find(o=>o.peerId.equals(e))!=null)return;let t=await jr(e),n={peerId:e,distance:$n(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>f1(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async anyCloser(e){if(e.length===0)return!1;if(this.length===0)return!0;let t=await Promise.all(e.map(jr)),n=this.peerDistances[this.peerDistances.length-1].distance;for(let o of t){let s=$n(this.originDhtKey,o);if(f1(s,n)<0)return!0}return!1}};var Z1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){let{routingTable:n,network:o,validators:s,queryManager:i,logPrefix:a}=t;this.routingTable=n,this.network=o,this.validators=s,this.queryManager=i,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${a}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:xe.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=dy(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=await ut(yu.marshalPublicKey({bytes:o.record.value}));if(!s.equals(e))throw new g("public key does not match id","ERR_PUBLIC_KEY_DOES_NOT_MATCH_ID");if(s.publicKey==null)throw new g("public key missing","ERR_PUBLIC_KEY_MISSING");yield ic({from:e,value:s.publicKey},t)}throw new g(`Node not responding with its public key: ${e.toString()}`,"ERR_INVALID_RECORD")}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield G1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a}){let c={type:xe.FIND_NODE,key:e.toBytes()};for await(let l of o.network.sendRequest(i,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield G1({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toBytes(),s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield ar({from:this.peerId,error:new g("Not found","ERR_NOT_FOUND")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Bo(e),o=this.routingTable.closestPeers(n),s=this,i=new j1(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await i.add(c)}));let a=async function*({peer:c,signal:l}){s.log("closerPeersSingle %s from %p",L(e,"base32"),c);let d={type:xe.FIND_NODE,key:e};yield*s.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))yield c,c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await i.add(l.id)}));this.log("found %d peers close to %b",i.length,e);for(let c of i.peers)try{let l=await this.peerStore.get(c);yield G1({from:this.peerId,peer:{id:c,multiaddrs:l.addresses.map(({multiaddr:d})=>d)}},t)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let i="invalid record received, discarded";this.log(i),yield ar({from:o.from,error:new g(i,"ERR_INVALID_RECORD")},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new g("invalid record received","ERR_INVALID_RECORD");await Fi(this.validators,new vt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Bo(e),o=this.routingTable.closestPeers(n),s=[];for(let i of o)if(!i.equals(t))try{let a=await this.peerStore.get(i);s.push({id:i,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}return s.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",s.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p",e,t),s}};var by=Ne(X0(),1);var J1=class{log;datastore;cache;cleanupInterval;provideValidity;syncQueue;started;cleaner;constructor(e,t={}){let{cacheSize:n,cleanupInterval:o,provideValidity:s}=t;this.log=e.logger.forComponent("libp2p:kad-dht:providers"),this.datastore=e.datastore,this.cleanupInterval=o??36e5,this.provideValidity=s??864e5,this.cache=(0,by.default)(n??256),this.syncQueue=new Wt({concurrency:1}),this.started=!1}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cleaner=setInterval(()=>{this._cleanup().catch(e=>{this.log.error(e)})},this.cleanupInterval))}async stop(){this.started=!1,this.cleaner!=null&&(clearInterval(this.cleaner),this.cleaner=void 0)}async _cleanup(){await this.syncQueue.add(async()=>{let e=Date.now(),t=0,n=0,o=new Map,s=this.datastore.batch(),i=this.datastore.query({prefix:fp});for await(let a of i)try{let{cid:c,peerId:l}=Ey(a.key),d=xy(a.value).getTime(),u=Date.now(),f=u-d,m=f>this.provideValidity;if(this.log("comparing: %d - %d = %d > %d %s",u,d,f,this.provideValidity,m?"(expired)":""),m){n++,s.delete(a.key);let h=o.get(c)??new Set;h.add(l),o.set(c,h)}t++}catch(c){this.log.error(c.message)}o.size>0?(this.log("deleting %d / %d entries",n,t),await s.commit()):this.log("nothing to delete");for(let[a,c]of o){let l=dc(a),d=this.cache.get(l);if(d!=null){for(let u of c)d.delete(u);d.size===0?this.cache.remove(l):this.cache.set(l,d)}}this.log("Cleanup successful (%dms)",Date.now()-e)})}async _getProvidersMap(e){let t=dc(e),n=this.cache.get(t);return n==null&&(n=await aT(this.datastore,e),this.cache.set(t,n)),n}async addProvider(e,t){await this.syncQueue.add(async()=>{this.log("%p provides %s",t,e);let n=await this._getProvidersMap(e);this.log("loaded %s provs",n.size);let o=new Date;n.set(t.toString(),o);let s=dc(e);this.cache.set(s,n),await iT(this.datastore,e,t,o)})}async getProviders(e){return this.syncQueue.add(async()=>(this.log("get providers for %s",e),[...(await this._getProvidersMap(e)).keys()].map(n=>we(n))),{throwOnTimeout:!0})}};function dc(r){let e=typeof r=="string"?r:L(r.multihash.bytes,"base32");return`${fp}/${e}`}async function iT(r,e,t,n){let o=[dc(e),"/",t.toString()].join(""),s=new Oe(o),i=Ye(n.getTime());await r.put(s,i)}function Ey(r){let e=r.toString().split("/");if(e.length!==5)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:e[3],peerId:e[4]}}async function aT(r,e){let t=new Map,n=r.query({prefix:dc(e)});for await(let o of n){let{peerId:s}=Ey(o.key);t.set(s,xy(o.value))}return t}function xy(r){return new Date(jt(r))}async function*vy(r,e,t,n){let o=ot({objectMode:!0}),s=u=>{n("clean up queue, results %d, queue size %d, pending tasks %d",o.readableLength,r.size,r.pending),r.clear(),o.end(u)},i=u=>{u!=null&&o.push(u)},a=u=>{n("queue error",u),s(u)},c=()=>{n("queue idle"),s()},l=()=>{n("abort queue"),s(new g("Query aborted","ERR_QUERY_ABORTED"))},d=()=>{s()};r.on("completed",i),r.on("error",a),r.on("idle",c),e.addEventListener("abort",l),t.addEventListener("cleanup",d);try{yield*o}finally{r.removeListener("completed",i),r.removeListener("error",a),r.removeListener("idle",c),e.removeEventListener("abort",l),t.removeEventListener("cleanup",d)}}var cT=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");async function*_y(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:s,alpha:i,pathIndex:a,numPaths:c,cleanUp:l,queryFuncTimeout:d,log:u,peersSeen:f}=r,m=new Wt({concurrency:i}),h=await Bo(e);function p(y,w){if(y==null)return;f.add(y);let E=BigInt("0x"+L($n(w,h),"base16"));m.add(async()=>{let b=[o];d!=null&&b.push(AbortSignal.timeout(d));let S=lt(b);try{for await(let R of s({key:e,peer:y,signal:S,pathIndex:a,numPaths:c})){if(S.aborted)return;if(R.name==="PEER_RESPONSE")for(let A of R.closer){if(f.has(A.id)){u("already seen %p in query",A.id);continue}if(n.equals(A.id)){u("not querying ourselves");continue}let D=await jr(A.id);if(BigInt("0x"+L($n(D,h),"base16"))>E){u("skipping %p as they are not closer to %b than %p",A.id,e,y);continue}u("querying closer peer %p",A.id),p(A.id,D)}m.emit("completed",R)}}catch(R){if(!o.aborted)return ar({from:y,error:R},r)}finally{S.clear()}},{priority:cT-E}).catch(b=>{u.error(b)})}p(t,await jr(t)),yield*vy(m,o,l,u)}var ed=class{disjointPaths;alpha;shutDownController;running;queries;logger;peerId;routingTable;initialQuerySelfHasRun;logPrefix;metrics;constructor(e,t){let{disjointPaths:n=20,alpha:o=3,logPrefix:s}=t;this.logPrefix=s,this.disjointPaths=n??20,this.running=!1,this.alpha=o??3,this.queries=0,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,e.metrics!=null&&(this.metrics={runningQueries:e.metrics.registerMetric(`${s.replaceAll(":","_")}_running_queries`),queryTime:e.metrics.registerMetric(`${s.replaceAll(":","_")}_query_time_seconds`)}),this.shutDownController=new AbortController,ye(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");let o=this.metrics?.queryTime.timer();if(n.signal==null){let u=AbortSignal.timeout(3e4);ye(1/0,u),n={...n,signal:u}}let s=new AbortController;ye(1/0,s.signal);let i=lt([this.shutDownController.signal,s.signal,n.signal]);ye(1/0,i);let a=this.logger.forComponent(`${this.logPrefix}:query:`+L(e,"base58btc")),c=Date.now(),l=new Ce,d=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(a("waiting for initial query-self query before continuing"),await Bt(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),a("query:start"),this.queries++,this.metrics?.runningQueries.update(this.queries);let u=await Bo(e),f=this.routingTable.closestPeers(u),m=f.slice(0,Math.min(this.disjointPaths,f.length));if(f.length===0){a.error("Running query with no peers");return}let h=new tt,p=m.map((y,w)=>_y({key:e,startingPeer:y,ourPeerId:this.peerId,signal:i,query:t,pathIndex:w,numPaths:m.length,alpha:this.alpha,cleanUp:l,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,onProgress:n.onProgress}));for await(let y of kt(...p))y.name==="QUERY_ERROR"&&a.error("query error",y.error),yield y;d=!0}catch(u){if(!(!this.running&&u.code==="ERR_QUERY_ABORTED"))throw u}finally{d||(a("query exited early"),s.abort()),i.clear(),this.queries--,this.metrics?.runningQueries.update(this.queries),o?.(),l.dispatchEvent(new mt("cleanup")),a("query:done in %dms",Date.now()-c)}}};function lT(r){return r[Symbol.asyncIterator]!=null}function uT(r){if(lT(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var td=uT;var dT=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function fT(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=dT(r),u=(...m)=>{let h=t.multiArgs?m:m[0];t.filter&&!t.filter(h)||(c.push(h),t.count===c.length&&(n(),s(c)))},f=m=>{n(),i(m)};n=()=>{for(let m of a)d(m,u);for(let m of t.rejectionEvents)d(m,f)};for(let m of a)l(m,u);for(let m of t.rejectionEvents)l(m,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=zr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function fc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=fT(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var rd=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:s,interval:i,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=s??20,this.interval=i??3e5,this.initialInterval=t.initialInterval??1e3,this.queryTimeout=a??5e3,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=ie(),this.started){this.controller=new AbortController;let e=lt([this.controller.signal,AbortSignal.timeout(this.queryTimeout)]);ye(1/0,e);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await fc(this.routingTable,"peer:add",{signal:e})),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let t=Date.now(),n=await Qe(this.peerRouting.getClosestPeers(this.peerId.toBytes(),{signal:e,isSelfQuery:!0}),o=>oo(o,this.count),async o=>td(o));this.log("self-query found %d peers in %dms",n,Date.now()-t)}catch(t){this.log.error("self-query error",t)}finally{e.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.started&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};function Ry(r,e){if(r===e)return!0;if(r.length!==e.length)return!1;for(let t=0,n=r.length;t<n;++t)if(r[t]!==e[t])return!1;return!0}function xp(){return{contacts:[],dontSplit:!1,left:null,right:null}}function hc(r,e){if(!(e instanceof Uint8Array))throw new TypeError(r+" is not a Uint8Array")}var nd=class r extends Ce{localNodeId;root;numberOfNodesPerKBucket;numberOfNodesToPing;distance;arbiter;constructor(e){super(),this.localNodeId=e.localNodeId,this.numberOfNodesPerKBucket=e.numberOfNodesPerKBucket??20,this.numberOfNodesToPing=e.numberOfNodesToPing??3,this.distance=e.distance??r.distance,this.arbiter=e.arbiter??r.arbiter,hc("option.localNodeId as parameter 1",this.localNodeId),this.root=xp()}static arbiter(e,t){return(e.vectorClock??0)>(t.vectorClock??0)?e:t}static distance(e,t){let n=0,o=0,s=Math.min(e.length,t.length),i=Math.max(e.length,t.length);for(;o<s;++o)n=n*256+(e[o]^t[o]);for(;o<i;++o)n=n*256+255;return n}add(e){hc("contact.id",e?.id);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e.id,t++);let o=this._indexOf(n,e.id);return o>=0?(this._update(n,o,e),this):n.contacts.length<this.numberOfNodesPerKBucket?(n.contacts.push(e),this.safeDispatchEvent("added",{detail:e}),this):n.dontSplit?(this.safeDispatchEvent("ping",{detail:{oldContacts:n.contacts.slice(0,this.numberOfNodesToPing),newContact:e}}),this):(this._split(n,t),this.add(e))}closest(e,t=1/0){if(hc("id",e),!Number.isInteger(t)&&t!==1/0||t<=0)throw new TypeError("n is not positive number");let n=[];for(let o=[this.root],s=0;o.length>0&&n.length<t;){let i=o.pop();if(i!=null)if(i.contacts===null){let a=this._determineNode(i,e,s++);o.push(i.left===a?i.right:i.left),o.push(a)}else n=n.concat(i.contacts)}return n.map(o=>({distance:this.distance(o.id,e),contact:o})).sort((o,s)=>o.distance-s.distance).slice(0,t).map(o=>o.contact)}count(){let e=0;for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e+=n.contacts.length)}return e}_determineNode(e,t,n){let o=n>>3,s=n%8;return t.length<=o&&s!==0?e.left:t[o]&1<<7-s?e.right:e.left}get(e){hc("id",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);return o>=0?n.contacts[o]:void 0}_indexOf(e,t){for(let n=0;n<e.contacts.length;++n)if(Ry(e.contacts[n].id,t))return n;return-1}remove(e){hc("the id as parameter 1",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);if(o>=0){let s=n.contacts.splice(o,1)[0];this.safeDispatchEvent("removed",{detail:s})}return this}_split(e,t){e.left=xp(),e.right=xp();for(let s of e.contacts)this._determineNode(e,s.id,t).contacts.push(s);e.contacts=null;let n=this._determineNode(e,this.localNodeId,t),o=e.left===n?e.right:e.left;o.dontSplit=!0}toArray(){let e=[];for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e=e.concat(n.contacts))}return e}*toIterable(){for(let e=[this.root];e.length>0;){let t=e.pop();t!=null&&(t.contacts===null?e.push(t.right,t.left):yield*t.contacts)}}_update(e,t,n){if(!Ry(e.contacts[t].id,n.id))throw new Error("wrong index for _update");let o=e.contacts[t],s=this.arbiter(o,n);s===o&&o!==n||(e.contacts.splice(t,1),e.contacts.push(s),this.safeDispatchEvent("updated",{detail:{incumbent:o,selection:s}}))}};var hT="kad-close",pT=50,Ay=20,mT=1e4,gT=10,od=class extends Ce{kBucketSize;kb;pingQueue;log;components;pingTimeout;pingConcurrency;running;protocol;tagName;tagValue;metrics;constructor(e,t){super();let{kBucketSize:n,pingTimeout:o,logPrefix:s,pingConcurrency:i,protocol:a,tagName:c,tagValue:l}=t;this.components=e,this.log=e.logger.forComponent(`${s}:routing-table`),this.kBucketSize=n??Ay,this.pingTimeout=o??mT,this.pingConcurrency=i??gT,this.running=!1,this.protocol=a,this.tagName=c??hT,this.tagValue=l??pT,this.pingQueue=new Lo({concurrency:this.pingConcurrency,metricName:`${s.replaceAll(":","_")}_ping_queue`,metrics:this.components.metrics}),this.pingQueue.addEventListener("error",d=>{this.log.error("error pinging peer",d.detail)}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${s.replaceAll(":","_")}_routing_table_size`)})}isStarted(){return this.running}async start(){this.running=!0;let e=new nd({localNodeId:await jr(this.components.peerId),numberOfNodesPerKBucket:this.kBucketSize,numberOfNodesToPing:1});this.kb=e,e.addEventListener("ping",t=>{this._onPing(t).catch(n=>{this.log.error("could not process k-bucket ping event",n)})}),this._tagPeers(e)}async stop(){this.running=!1,this.pingQueue.clear(),this.kb=void 0}_tagPeers(e){let t=new tt,n=py(()=>{let o=new tt(e.closest(e.localNodeId,Ay).map(a=>a.peer)),s=o.difference(t),i=t.difference(o);Promise.resolve().then(async()=>{for(let a of s)await this.components.peerStore.merge(a,{tags:{[this.tagName]:{value:this.tagValue}}});for(let a of i)await this.components.peerStore.merge(a,{tags:{[this.tagName]:void 0}})}).catch(a=>{this.log.error("Could not update peer tags",a)}),t=o});e.addEventListener("added",o=>{n(),this.safeDispatchEvent("peer:add",{detail:o.detail.peer})}),e.addEventListener("removed",o=>{n(),this.safeDispatchEvent("peer:remove",{detail:o.detail.peer})})}async _onPing(e){if(!this.running)return;let{oldContacts:t,newContact:n}=e.detail,s=(await Promise.all(t.map(async i=>{let a=this.pingQueue.find(i.peer);return a!=null?a.join():this.pingQueue.add(async()=>{let c;try{let l={signal:AbortSignal.timeout(this.pingTimeout)};this.log("pinging old contact %p",i.peer),c=await(await this.components.connectionManager.openConnection(i.peer,l)).newStream(this.protocol,l);let u=Ze(c);await u.write({type:xe.PING},Tr,l);let f=await u.read(Tr,l);if(await u.unwrap().close(),f.type!==xe.PING)throw new g(`Incorrect message type received, expected PING got ${f.type}`,"ERR_BAD_PING_RESPONSE");return!0}catch(l){return this.running&&this.kb!=null&&(this.log.error("could not ping peer %p",i.peer,l),this.log("evicting old contact after ping failed %p",i.peer),this.kb.remove(i.id)),c?.abort(l),!1}finally{this.metrics?.routingTableSize.update(this.size)}},{peerId:i.peer})}))).filter(i=>i).length;this.running&&s<t.length&&this.kb!=null&&(this.log("adding new contact %p",n.peer),this.kb.add(n))}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await jr(e),n=this.closestPeer(t);if(n!=null&&e.equals(n))return n}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:this.kb.closest(e,t).map(o=>o.peer)}async add(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.add({id:t,peer:e}),this.log("added %p with kad id %b",e,t),this.metrics?.routingTableSize.update(this.size)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.remove(t),this.metrics?.routingTableSize.update(this.size)}};var Iy=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var sd=15,id=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??3e5,this.refreshQueryTimeout=i??3e4,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async start(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,s)=>{try{if(await this._refreshCommonPrefixLength(s,o,e),this._numPeersForCpl(t)===0){let i=Math.min(2*(s+1),n.length-1);for(let a=s+1;a<i+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(i){this.log.error(i)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let s=await td(this.peerRouting.getClosestPeers(o.toBytes(),{signal:AbortSignal.timeout(this.refreshQueryTimeout)}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>sd&&(e=sd);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");let t=$t(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localNodeId,n,e);return Xe(o)}async _makePeerId(e,t,n){if(n>sd)throw new Error(`Cannot generate peer ID for common prefix length greater than ${sd}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=Iy[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,Re.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb!=null)for(let{id:e}of this.routingTable.kb.toIterable()){let t=$n(this.routingTable.kb.localNodeId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var ad=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(this.log("start"),t.key==null||t.key.length===0)throw new g("Missing key","ERR_MISSING_KEY");let n;try{n=oe.decode(t.key)}catch{throw new g("Invalid CID","ERR_INVALID_CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>X(s).toString())),await this.providers.addProvider(n,Xe(o.id))}))}};var cd=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){this.log("incoming request from %p for peers closer to %b",e,t.key);let n=[];if(t.key==null)throw new g("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");j(this.peerId.toBytes(),t.key)?n=[{id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(Z("p2p").code))}]:n=await this.peerRouting.getCloserPeersOffline(t.key,e);let o={type:xe.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toBytes(),multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var ld=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new g("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");let n;try{n=oe.decode(t.key)}catch{throw new g("Invalid CID","ERR_INVALID_CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),i=await this._getPeers(o),a=await this._getPeers(s.map(({id:l})=>l)),c={type:xe.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),s=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:i})=>i)});s.multiaddrs.length>0&&t.push(s)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}return t}};var ud=class{peerStore;datastore;peerRouting;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new g("Invalid key","ERR_INVALID_KEY");let o={type:xe.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(fy(n)){this.log("is public key");let a=hy(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new g("No public key found in key book","ERR_NOT_FOUND");c=l.id.publicKey}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null)return this.log("returning found public key"),o.record=new vt(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.map(a=>({id:a.id.toBytes(),multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=qn(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.code==="ERR_NOT_FOUND")return;throw s}let o=vt.deserialize(n);if(o==null)throw new g("Invalid record","ERR_INVALID_RECORD");if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var dd=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var fd=class{components;validators;log;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new g(o,"ERR_EMPTY_RECORD")}try{let o=vt.deserialize(t.record);await Fi(this.validators,o),o.timeReceived=new Date;let s=qn(o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var hd=class{handlers;routingTable;log;constructor(e,t){let{providers:n,peerRouting:o,validators:s,logPrefix:i,peerInfoMapper:a}=t;this.log=e.logger.forComponent(`${i}:rpc`),this.routingTable=t.routingTable,this.handlers={[xe.GET_VALUE.toString()]:new ud(e,{peerRouting:o,logPrefix:i}),[xe.PUT_VALUE.toString()]:new fd(e,{validators:s,logPrefix:i}),[xe.FIND_NODE.toString()]:new cd(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[xe.ADD_PROVIDER.toString()]:new ad(e,{providers:n,logPrefix:i}),[xe.GET_PROVIDERS.toString()]:new ld(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[xe.PING.toString()]:new dd(e,{logPrefix:i})}}async handleMessage(e,t){try{await this.routingTable.add(e)}catch(o){this.log.error("Failed to update the kbucket store",o)}let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}return n.handle(e,t)}onIncomingStream(e){Promise.resolve().then(async()=>{let{stream:t,connection:n}=e,o=n.remotePeer;try{await this.routingTable.add(o)}catch(i){this.log.error(i)}let s=this;await Qe(t,i=>Kt(i),async function*(i){for await(let a of i){let c=Tr.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield Tr.encode(l))}},i=>Vt(i),t)}).catch(t=>{this.log.error(t)})}};var pd=class extends Ce{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new mt("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var vp=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Ft(this.dht.provide(e,t))}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Ft(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new g("Not found","ERR_NOT_FOUND")}},_p=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new g("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},yT=32,wT=64,md=class extends Ce{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;constructor(e,t){super();let{kBucketSize:n,clientMode:o,validators:s,selectors:i,querySelfInterval:a,protocol:c,logPrefix:l,pingTimeout:d,pingConcurrency:u,maxInboundStreams:f,maxOutboundStreams:m,providers:h}=t,p=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(p),this.protocol=c??ry,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=f??yT,this.maxOutboundStreams=m??wT,this.peerInfoMapper=t.peerInfoMapper??uy,this.routingTable=new od(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:p}),this.providers=new J1(e,h??{}),this.validators={...ly,...s},this.selectors={...cy,...i},this.network=new X1(e,{protocol:this.protocol,logPrefix:p});let y=ie();t.allowQueryWithZeroPeers===!0&&y.resolve(),this.queryManager=new ed(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.peerRouting=new Z1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:p}),this.contentFetching=new Y1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:p}),this.contentRouting=new Q1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:p}),this.routingTableRefresh=new id(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:p}),this.rpc=new hd(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:p,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new pd(e,{protocol:this.protocol,logPrefix:p}),this.querySelf=new rd(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.network.addEventListener("peer",w=>{let E=w.detail;this.onPeerConnect(E).catch(b=>{this.log.error("could not add %p to routing table",E.id,b)}),this.dispatchEvent(new mt("peer",{detail:E}))}),this.topologyListener.addEventListener("peer",w=>{let E=w.detail;Promise.resolve().then(async()=>{let b=await this.components.peerStore.get(E),S={id:E,multiaddrs:b.addresses.map(({multiaddr:R})=>R),protocols:b.protocols};await this.onPeerConnect(S)}).catch(b=>{this.log.error("could not add %p to routing table",E,b)})}),this.dhtPeerRouting=new _p(this),this.dhtContentRouting=new vp(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",w=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let E=w.detail.peer.addresses.some(({multiaddr:S})=>my(S)),b=this.getMode();E&&b==="client"?await this.setMode("server"):b==="server"&&!E&&await this.setMode("client")}).catch(E=>{this.log.error("error setting dht server mode",E)})})}get[en](){return this.dhtContentRouting}get[tn](){return this.dhtPeerRouting}get[zo](){return this}async onPeerConnect(e){if(this.log("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e){await this.components.registrar.unhandle(this.protocol),e==="client"?(this.log("enabling client mode"),this.clientMode=!0):(this.log("enabling server mode"),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running=!0,await this.setMode(this.clientMode?"client":"server"),this.querySelf.start(),await Promise.all([this.providers.start(),this.queryManager.start(),this.network.start(),this.routingTable.start(),this.topologyListener.start(),this.routingTableRefresh.start()])}async stop(){this.running=!1,this.querySelf.stop(),await Promise.all([this.providers.stop(),this.queryManager.stop(),this.network.stop(),this.routingTable.stop(),this.routingTableRefresh.stop(),this.topologyListener.stop()])}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var Dy;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(Dy||(Dy={}));function Ty(r){return e=>new md(e,r)}var Uy=Ne(My(),1),$i=Uy.default;var Yy=Ne(Gy(),1);var ve;(function(r){r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(ve||(ve={}));var BT="/pkcs8/",Qy="/info/",Is=new WeakMap,Ds={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},Rp={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Wn(r){return r==null||typeof r!="string"?!1:r===(0,Yy.default)(r.trim())&&r.length>0}async function Be(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function hn(r){return new Oe(BT+r)}function Uo(r){return new Oe(Qy+r)}var wd=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=$i(Rp,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Ds.minKeyLength)throw new Error(`dek.keyLength must be least ${Ds.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ds.minSaltLength)throw new Error(`dek.saltLength must be least ${Ds.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ds.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ds.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?uc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Is.set(this,{dek:n})}static generateOptions(){let e=Object.assign({},Rp),t=Math.ceil(Ds.minSaltLength/3)*3;return e.dek.salt=L($t(t),"base64"),e}static get options(){return Rp}async createKey(e,t,n=2048){if(!Wn(e)||e==="self")throw await Be(),new g("Invalid key name",ve.ERR_INVALID_KEY_NAME);if(typeof t!="string")throw await Be(),new g("Invalid key type",ve.ERR_INVALID_KEY_TYPE);let o=hn(e);if(await this.components.datastore.has(o))throw await Be(),new g("Key name already exists",ve.ERR_KEY_ALREADY_EXISTS);switch(t.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await Be(),new g("Invalid RSA key size",ve.ERR_INVALID_KEY_SIZE);break;default:break}let i;try{let a=await ka(t,n),c=await a.id(),l=Is.get(this);if(l==null)throw new g("dek missing",ve.ERR_INVALID_PARAMETERS);let d=l.dek,u=await a.export(d);i={name:e,id:c};let f=this.components.datastore.batch();f.put(o,B(u)),f.put(Uo(e),B(JSON.stringify(i))),await f.commit()}catch(a){throw await Be(),a}return i}async listKeys(){let e={prefix:Qy},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(L(n.value)));return t}async findKeyById(e){try{let n=(await this.listKeys()).find(o=>o.id===e);if(n==null)throw new g(`Key with id '${e}' does not exist.`,ve.ERR_KEY_NOT_FOUND);return n}catch(t){throw await Be(),t}}async findKeyByName(e){if(!Wn(e))throw await Be(),new g(`Invalid key name '${e}'`,ve.ERR_INVALID_KEY_NAME);let t=Uo(e);try{let n=await this.components.datastore.get(t);return JSON.parse(L(n))}catch(n){throw await Be(),this.log.error(n),new g(`Key '${e}' does not exist.`,ve.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!Wn(e)||e==="self")throw await Be(),new g(`Invalid key name '${e}'`,ve.ERR_INVALID_KEY_NAME);let t=hn(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Uo(e)),await o.commit(),n}async renameKey(e,t){if(!Wn(e)||e==="self")throw await Be(),new g(`Invalid old key name '${e}'`,ve.ERR_OLD_KEY_NAME_INVALID);if(!Wn(t)||t==="self")throw await Be(),new g(`Invalid new key name '${t}'`,ve.ERR_NEW_KEY_NAME_INVALID);let n=hn(e),o=hn(t),s=Uo(e),i=Uo(t);if(await this.components.datastore.has(o))throw await Be(),new g(`Key '${t}' already exists`,ve.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(L(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,B(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Be(),c}}async exportKey(e,t){if(!Wn(e))throw await Be(),new g(`Invalid key name '${e}'`,ve.ERR_INVALID_KEY_NAME);if(t==null)throw await Be(),new g("Password is required",ve.ERR_PASSWORD_REQUIRED);let n=hn(e);try{let o=await this.components.datastore.get(n),s=L(o),i=Is.get(this);if(i==null)throw new g("dek missing",ve.ERR_INVALID_PARAMETERS);let a=i.dek;return await(await pi(s,a)).export(t)}catch(o){throw await Be(),o}}async exportPeerId(e){let t="temporary-password",n=await this.exportKey(e,t),o=await pi(n,t);return ut(o.public.bytes,o.bytes)}async importKey(e,t,n){if(!Wn(e)||e==="self")throw await Be(),new g(`Invalid key name '${e}'`,ve.ERR_INVALID_KEY_NAME);if(t==null)throw await Be(),new g("PEM encoded key is required",ve.ERR_PEM_REQUIRED);let o=hn(e);if(await this.components.datastore.has(o))throw await Be(),new g(`Key '${e}' already exists`,ve.ERR_KEY_ALREADY_EXISTS);let i;try{i=await pi(t,n)}catch{throw await Be(),new g("Cannot read the key, most likely the password is wrong",ve.ERR_CANNOT_READ_KEY)}let a;try{a=await i.id();let d=Is.get(this);if(d==null)throw new g("dek missing",ve.ERR_INVALID_PARAMETERS);let u=d.dek;t=await i.export(u)}catch(d){throw await Be(),d}let c={name:e,id:a},l=this.components.datastore.batch();return l.put(o,B(t)),l.put(Uo(e),B(JSON.stringify(c))),await l.commit(),c}async importPeer(e,t){try{if(!Wn(e))throw new g(`Invalid key name '${e}'`,ve.ERR_INVALID_KEY_NAME);if(t==null)throw new g("PeerId is required",ve.ERR_MISSING_PRIVATE_KEY);if(t.privateKey==null)throw new g("PeerId.privKey is required",ve.ERR_MISSING_PRIVATE_KEY);let n=await Er(t.privateKey),o=hn(e);if(await this.components.datastore.has(o))throw await Be(),new g(`Key '${e}' already exists`,ve.ERR_KEY_ALREADY_EXISTS);let i=Is.get(this);if(i==null)throw new g("dek missing",ve.ERR_INVALID_PARAMETERS);let a=i.dek,c=await n.export(a),l={name:e,id:t.toString()},d=this.components.datastore.batch();return d.put(o,B(c)),d.put(Uo(e),B(JSON.stringify(l))),await d.commit(),l}catch(n){throw await Be(),n}}async getPrivateKey(e){if(!Wn(e))throw await Be(),new g(`Invalid key name '${e}'`,ve.ERR_INVALID_KEY_NAME);try{let t=hn(e),n=await this.components.datastore.get(t);return L(n)}catch(t){throw await Be(),this.log.error(t),new g(`Key '${e}' does not exist.`,ve.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Be(),new g(`Invalid old pass type '${typeof e}'`,ve.ERR_INVALID_OLD_PASS_TYPE);if(typeof t!="string")throw await Be(),new g(`Invalid new pass type '${typeof t}'`,ve.ERR_INVALID_NEW_PASS_TYPE);if(t.length<20)throw await Be(),new g(`Invalid pass length ${t.length}`,ve.ERR_INVALID_PASS_LENGTH);this.log("recreating keychain");let n=Is.get(this);if(n==null)throw new g("dek missing",ve.ERR_INVALID_PARAMETERS);let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?uc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Is.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(hn(a.name)),l=L(c),d=await pi(l,o),u=s.toString(),f=await d.export(u),m=this.components.datastore.batch(),h={name:a.name,id:a.id};m.put(hn(a.name),B(f)),m.put(Uo(a.name),B(JSON.stringify(h))),await m.commit()}this.log("keychain reconstructed")}};function bd(r={}){return e=>new wd(e,r)}var Hi=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new Ap}async consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new g("Rate limit exceeded","ERR_RATE_LIMIT_EXCEEDED",i);if(this.execEvenly&&i.msBeforeNext>0&&!i.isFirstInDuration){let a=Math.ceil(i.msBeforeNext/(i.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=i.consumedPoints*this.execEvenlyMinDelayMs),await N1(a)}return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},Ap=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var Ee;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(Ee||(Ee={}));var pc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),Ip=Object.freeze({NEW_STREAM:Ee.NEW_STREAM,MESSAGE:Ee.MESSAGE_INITIATOR,CLOSE:Ee.CLOSE_INITIATOR,RESET:Ee.RESET_INITIATOR}),Xy=Object.freeze({MESSAGE:Ee.MESSAGE_RECEIVER,CLOSE:Ee.CLOSE_RECEIVER,RESET:Ee.RESET_RECEIVER});var Dp=1<<20,MT=4<<20,Ed=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=Dp,t=MT){this._buffer=new de,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw Object.assign(new Error("unprocessed message queue size too large!"),{code:"ERR_MSG_QUEUE_TOO_BIG"});let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.code==="ERR_MSG_TOO_BIG")throw l;break}let{id:n,type:o,length:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===Ee.NEW_STREAM||o===Ee.MESSAGE_INITIATOR||o===Ee.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=Zy(e),{value:o,offset:s}=Zy(e,n),i=t&7;if(pc[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw Object.assign(new Error("message size too large!"),{code:"ERR_MSG_TOO_BIG"});return{id:t>>3,type:i,offset:n+s,length:o}}},UT=128,jy=127;function Zy(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&jy)<<n:(s&jy)*Math.pow(2,n),n+=7}while(s>=UT);return e=o-e,{value:t,offset:e}}var Tp=10*1024,kp=class{_pool;_poolOffset;constructor(){this._pool=ze(Tp),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ye(e.id<<3|e.type,n,o),o+=Ke(e.id<<3|e.type),(e.type===Ee.NEW_STREAM||e.type===Ee.MESSAGE_INITIATOR||e.type===Ee.MESSAGE_RECEIVER)&&e.data!=null?(Ye(e.data.length,n,o),o+=Ke(e.data.length)):(Ye(0,n,o),o+=Ke(0));let s=n.subarray(this._poolOffset,o);Tp-o<100?(this._pool=ze(Tp),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===Ee.NEW_STREAM||e.type===Ee.MESSAGE_INITIATOR||e.type===Ee.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},FT=new kp;async function*Jy(r){for await(let e of r){let t=new de;FT.write(e,t),yield t}}var Cp=class extends Co{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?Ip:Xy,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:Ip.NEW_STREAM,data:new de(B(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function ew(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=Dp}=r;return new Cp({id:s==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:s==="initiator"?"outbound":"inbound",maxDataSize:i,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${s}:${e}`)})}var VT=1024,KT=1024,$T=1024*1024*4,HT=5,qT=500;function tw(r){let e={...r,type:`${pc[r.type]} (${r.type})`};return r.type===Ee.NEW_STREAM&&(e.data=L(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===Ee.MESSAGE_INITIATOR||r.type===Ee.MESSAGE_RECEIVER)&&(e.data=L(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var xd=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??qT,this.sink=this._createSink(),this._source=ot({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=Qe(this._source,n=>Jy(n)),this.closeController=new AbortController,this.rateLimiter=new Hi({points:t.disconnectThreshold??HT,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new Error("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:s}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??KT))throw new g("Too many outbound streams open","ERR_TOO_MANY_OUTBOUND_STREAMS");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=ew({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,tw(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),s.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return s.set(t,c),c}_createSink(){return async t=>{let n=()=>{E1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new Ed(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let s of t)for(let i of o.write(s))await this._handleIncoming(i);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",tw(e)),e.type===Ee.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??VT)){this.log("too many inbound streams open"),this._source.push({id:t,type:Ee.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:L(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let s=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(s==null){this.log("missing stream %s for message type %s",t,pc[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let i=this._init.maxStreamBufferSize??$T;try{switch(n){case Ee.MESSAGE_INITIATOR:case Ee.MESSAGE_RECEIVER:if(s.sourceReadableLength()>i)throw this._source.push({id:e.id,type:n===Ee.MESSAGE_INITIATOR?Ee.RESET_RECEIVER:Ee.RESET_INITIATOR}),new g("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers","ERR_STREAM_INPUT_BUFFER_FULL");s.sourcePush(e.data);break;case Ee.CLOSE_INITIATOR:case Ee.CLOSE_RECEIVER:s.remoteCloseWrite();break;case Ee.RESET_INITIATOR:case Ee.RESET_RECEIVER:s.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),s.abort(a)}}};var Np=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}createStreamMuxer(e={}){return new xd(this.components,{...e,...this._init})}};function rw(r={}){return e=>new Np(e,r)}var nw="1.0.0",ow="ping",sw="ipfs";var Pp="ERR_WRONG_PING_ACK";var vd=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??sw}/${ow}/${nw}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0,this.handleMessage=this.handleMessage.bind(this)}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now();Qe(t,t).catch(o=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,o)}).finally(()=>{let o=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,o)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=$t(32),s=await this.components.connectionManager.openConnection(e,t),i,a=()=>{};if(t.signal==null){let c=AbortSignal.timeout(this.timeout);t={...t,signal:c}}try{i=await s.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{i?.abort(new g("ping timeout",yn))},t.signal?.addEventListener("abort",a,{once:!0});let c=await Qe([o],i,async d=>gs(d)),l=Date.now()-n;if(c==null)throw new g(`Did not receive a ping ack after ${l}ms`,Pp);if(!j(o,c.subarray()))throw new g(`Received wrong ping ack after ${l}ms`,Pp);return this.log("ping %p complete in %dms",s.remotePeer,l),l}catch(c){throw this.log.error("error while pinging %p",s.remotePeer,c),i?.abort(c),c}finally{t.signal?.removeEventListener("abort",a),i!=null&&await i.close()}}};function iw(r={}){return e=>new vd(e,r)}var cr;(function(r){r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_DATA_CHANNEL="ERR_DATA_CHANNEL",r.ERR_CONNECTION_CLOSED="ERR_CONNECTION_CLOSED",r.ERR_HASH_NOT_SUPPORTED="ERR_HASH_NOT_SUPPORTED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_INVALID_FINGERPRINT="ERR_INVALID_FINGERPRINT",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS"})(cr||(cr={}));var Fo=class extends g{constructor(e,t){super(`WebRTC transport error: ${e}`,t??""),this.name="WebRTCTransportError"}};var Op=class extends Fo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`,cr.ERR_DATA_CHANNEL),this.name="WebRTC/DataChannelError"}};function Vp(r,e){return new Op(r,e)}var Lp=class extends Fo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`,cr.ERR_INVALID_MULTIADDR),this.name="WebRTC/InappropriateMultiaddrError"}};function _d(r){return new Lp(r)}var Bp=class extends Fo{constructor(e){super(`There was a problem with a provided argument: ${e}`,cr.ERR_INVALID_PARAMETERS),this.name="WebRTC/InvalidArgumentError"}};function mc(r){return new Bp(r)}var Mp=class extends Fo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`,cr.ERR_INVALID_FINGERPRINT),this.name="WebRTC/InvalidFingerprintError"}};function Kp(r,e){return new Mp(r,e)}var Up=class extends Fo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`,cr.ERR_NOT_IMPLEMENTED),this.name="WebRTC/UnimplementedError"}};function aw(r){return new Up(r)}var Fp=class extends Fo{constructor(e){super(`unsupported hash algorithm: ${e}`,cr.ERR_HASH_NOT_SUPPORTED),this.name="WebRTC/UnsupportedHashAlgorithmError"}};function cw(r){return new Fp(r)}var lw=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},QT=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var XT=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var jT=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var ZT=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var JT=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var ek=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,tk=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,uw=3,rk=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",ek]],dw=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function hw(r){return r?fw(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new JT:typeof navigator<"u"?fw(navigator.userAgent):sk()}function nk(r){return r!==""&&rk.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function fw(r){var e=nk(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new ZT;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<uw&&(o=lw(lw([],o,!0),ik(uw-o.length),!0)):o=[];var s=o.join("."),i=ok(r),a=tk.exec(r);return a&&a[1]?new jT(t,s,i,a[1]):new QT(t,s,i)}function ok(r){for(var e=0,t=dw.length;e<t;e++){var n=dw[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function sk(){var r=typeof process<"u"&&process.version;return r?new XT(process.version.slice(1)):null}function ik(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var pw=hw(),gc=pw!=null&&pw.name==="firefox",Sd=async function*(){},Rd=async r=>{},ak=30*1e3;function mw(r,e,t=ak,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=ie(),s=!1;r.bufferedAmountLowThreshold=0;let i=()=>{s||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",i,{once:!0}),r.addEventListener("bufferedamountlow",()=>{s=!0,r.removeEventListener("close",i),o.resolve()}),await zr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}var Ts=class{log;peerConnection;remoteAddr;timeline;metrics;source=Sd();sink=Rd;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var Gt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=te((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.flag=r.Flag.codec().decode(o);break;case 2:i.message=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ee(o,r.codec()),r.decode=o=>J(o,r.codec())})(Gt||(Gt={}));var ck=16*1024*1024,lk=30*1e3,uk=5,dk=2,fk=16*1024,hk=5e3,pk=5e3,$p=class extends Co{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await zr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(s){this.log.error("error receiving FIN_ACK",s)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(s=>{this.log.error("error ending stream",s)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=ot(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??lk,this.maxBufferedAmount=e.maxBufferedAmount??ck,this.maxMessageSize=(e.maxMessageSize??fk)-uk-dk,this.receiveFinAck=ie(),this.finAckTimeout=e.closeTimeout??hk,this.openTimeout=e.openTimeout??pk,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new g("Unknown datachannel state","ERR_INVALID_STATE")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(s=>{this.log.error("error closing stream after channel closed",s)})},this.channel.onerror=o=>{let s=o.error;this.abort(s)},this.channel.onmessage=async o=>{let{data:s}=o;s===null||s.byteLength===0||this.incomingData.push(new Uint8Array(s,0,s.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Kt(this.incomingData)){let s=n.processIncomingProtobuf(o);s!=null&&n.sourcePush(new de(s))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await fc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Ro?new g(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`,"ERR_BUFFER_CLEAR_TIMEOUT"):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new g(`Invalid datachannel state - ${this.channel.readyState}`,"ERR_INVALID_STATE");this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await fc(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Gt.encode({message:n}),s=Vt.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Gt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Gt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await Bt(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorCode:"ERR_FIN_ACK_NOT_RECEIVED"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(Gt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Gt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Gt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Gt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Gt.Flag.RESET&&this.reset(),t.flag===Gt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Gt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=Gt.encode({flag:e}),n=Vt.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function qi(r){let{channel:e,direction:t}=r;return new $p({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var gw="/webrtc",ks=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??gw,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},s=qi({channel:n,direction:"inbound",onEnd:i=>{o.onEnd(i)},logger:e.logger,...this.dataChannelOptions});o.stream=s,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(i=>i.stream.id!==s.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new Hp(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},Hp=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??gw,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=qi({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),mw(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=Sd();sink=Rd;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=qi({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Wi=globalThis.RTCPeerConnection,Ad=globalThis.RTCSessionDescription,yw=globalThis.RTCIceCandidate;var Yt;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=te((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.data=o.string();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ee(o,r.codec()),r.decode=o=>J(o,r.codec())})(Yt||(Yt={}));var Id=async(r,e,t)=>{try{let n=ie();for(gk(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null)break;if(o.type!==Yt.Type.ICE_CANDIDATE)throw new g("ICE candidate message expected","ERR_NOT_ICE_CANDIDATE");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.log.trace("end-of-candidates received");continue}let i=new yw(s);t.log.trace("%s received new ICE candidate",t.direction,i);try{await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0)throw n}};function mk(r){return gc?r.iceConnectionState:r.connectionState}function gk(r,e){r[gc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(mk(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new g("RTCPeerConnection was closed","ERR_CONNECTION_CLOSED_BEFORE_CONNECTED"));break;default:break}}}async function ww({peerConnection:r,signal:e,metrics:t,multiaddr:n,connectionManager:o,transportManager:s,log:i}){let{baseAddr:a}=bw(n);t?.dialerEvents.increment({open:!0}),i.trace("dialing base address: %a",a);let c=a.getPeerId();if(c==null)throw new g("Relay peer was missing","ERR_INVALID_ADDRESS");let l=o.getConnections(we(c)),d,u=!1;l.length===0?(d=await s.dial(a,{signal:e}),u=!0):d=l[0];try{let f=await d.newStream(Dd,{signal:e,runOnTransientConnection:!0}),m=Ze(f).pb(Yt);try{let h=r.createDataChannel("init");r.onicecandidate=({candidate:E})=>{let b=JSON.stringify(E?.toJSON()??null);i.trace("initiator sending ICE candidate %s",b),m.write({type:Yt.Type.ICE_CANDIDATE,data:b},{signal:e}).catch(S=>{i.error("error sending ICE candidate",S)})},r.onicecandidateerror=E=>{i.error("initiator ICE candidate error",E)};let p=await r.createOffer().catch(E=>{throw i.error("could not execute createOffer",E),new g("Failed to set createOffer","ERR_SDP_HANDSHAKE_FAILED")});i.trace("initiator send SDP offer %s",p.sdp),await m.write({type:Yt.Type.SDP_OFFER,data:p.sdp},{signal:e}),await r.setLocalDescription(p).catch(E=>{throw i.error("could not execute setLocalDescription",E),new g("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")});let y=await m.read({signal:e});if(y.type!==Yt.Type.SDP_ANSWER)throw new g("Remote should send an SDP answer","ERR_SDP_HANDSHAKE_FAILED");i.trace("initiator receive SDP answer %s",y.data);let w=new Ad({type:"answer",sdp:y.data});return await r.setRemoteDescription(w).catch(E=>{throw i.error("could not execute setRemoteDescription",E),new g("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")}),i.trace("initiator read candidates until connected"),await Id(r,m,{direction:"initiator",signal:e,log:i}),i.trace("initiator connected, closing init channel"),h.close(),i.trace("initiator closing signalling stream"),await m.unwrap().unwrap().close({signal:e}),i.trace("initiator connected to remote address %s",n),{remoteAddress:n}}catch(h){throw r.close(),f.abort(h),h}finally{r.onicecandidate=null,r.onicecandidateerror=null}}finally{if(u)try{await d.close({signal:e})}catch(f){d.abort(f)}}}var Td=class extends Ce{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>Yr.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function Ew({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=Ze(e).pb(Yt);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:Yt.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})};let a=await s.read({signal:t});if(a.type!==Yt.Type.SDP_OFFER)throw new g(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `,"ERR_SDP_HANDSHAKE_FAILED");o.trace("recipient receive SDP offer %s",a.data);let c=new Ad({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new g("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new g("Failed to create answer","ERR_SDP_HANDSHAKE_FAILED")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:Yt.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new g("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),o.trace("recipient read candidates until connected"),await Id(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(r.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let i=X(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var yk="/webrtc",wk="/p2p-circuit",Dd="/webrtc-signaling/0.0.1",bk=30*1e3,kd=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,ye(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}isStarted(){return this._started}async start(){await this.components.registrar.handle(Dd,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnTransientConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Dd),this._started=!1}createListener(e){return new Td(this.components,{shutdownController:this.shutdownController})}[Symbol.toStringTag]="@libp2p/webrtc";[rn]=!0;filter(e){return e.filter(F9.exactMatch)}async dial(e,t){this.log.trace("dialing address: %a",e);let n=new Wi(this.init.rtcConfiguration),o=new ks(this.components,{peerConnection:n,dataChannelOptions:this.init.dataChannel}),{remoteAddress:s}=await ww({peerConnection:n,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log}),i=new Ts(this.components,{peerConnection:n,timeline:{open:Date.now()},remoteAddr:s,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,muxerFactory:o});return this._closeOnShutdown(n,i),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??bk),o=new Wi(this.init.rtcConfiguration),s=new ks(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await Ew({peerConnection:o,connection:e,stream:t,signal:n,log:this.log}),a=new Ts(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:i,metrics:this.metrics?.listenerEvents});this._closeOnShutdown(o,a),await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:s}),await t.close({signal:n})}catch(i){throw t.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function bw(r){let e=r.toString().split(yk+"/");if(e.length!==2)throw new g("webrtc protocol was not present in multiaddr",cr.ERR_INVALID_MULTIADDR);if(!e[0].includes(wk))throw new g("p2p-circuit protocol was not present in multiaddr",cr.ERR_INVALID_MULTIADDR);let t=X(e[0]),o=X("/"+e[1]).getPeerId();if(o==null)throw new g("destination peer id was missing",cr.ERR_INVALID_MULTIADDR);let s=t.protos().pop();if(s===void 0)throw new g("invalid multiaddr",cr.ERR_INVALID_MULTIADDR);return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:we(o)}}var Xb=Ne(b3(),1);var Hb=Ne(b3(),1);var E3=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function qb(r,e){let t=r.getConfiguration().certificates?.at(0);if(t==null||t.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:AN(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw Kp("","no fingerprint on local certificate");return n}var RN=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function AN(r){return r.match(RN)?.groups?.fingerprint}function IN(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function $d(r){let t=r.stringTuples().filter(n=>n[0]===Gb).map(n=>n[1])[0];if(t===void 0||t==="")throw _d(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function x3(r){let e=E3.decode(r);return Hb.decode(e)}function DN(r){let e=x3($d(r)),t=v3(e.name),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw Kp(n,r.toString());return[`${t.toUpperCase()} ${o.join(":").toUpperCase()}`,n]}function v3(r){switch(r){case"sha1":return"sha-1";case"sha2-256":return"sha-256";case"sha2-512":return"sha-512";default:throw cw(r)}}function TN(r,e){let{host:t,port:n}=r.toOptions(),o=IN(r),[s]=DN(r);return`v=0
|
|
21
|
+
`)}`:`${t} :`}};m6=po;W.Constructed=m6;po.NAME="CONSTRUCTED";var $l=class extends Nt{fromBER(e,t,n){return t}toBER(e){return $r}};$l.override="EndOfContentValueBlock";var g6,Hl=class extends xt{constructor(e={}){super(e,$l),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};g6=Hl;W.EndOfContent=g6;Hl.NAME=xa;var y6,mo=class extends xt{constructor(e={}){super(e,Nt),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};y6=mo;W.Null=y6;mo.NAME="NULL";var ql=class extends Nn(Nt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return Cn(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,c0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};ql.NAME="BooleanValueBlock";var w6,Wl=class extends xt{constructor(e={}){super(e,ql),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};w6=Wl;W.Boolean=w6;Wl.NAME="BOOLEAN";var Gl=class extends Nn(on){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=on.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===xa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==d6)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?on.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Gl.NAME="OctetStringValueBlock";var E6,Tn=class r extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Gl),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=bu(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?po.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};E6=Tn;W.OctetString=E6;Tn.NAME=d6;var zl=class extends Nn(on){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=on.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===xa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==f6)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let s=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=bu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return on.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return $r;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};zl.NAME="BitStringValueBlock";var b6,si=class extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},zl),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return po.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};b6=si;W.BitString=b6;si.NAME=f6;var x6;function JR(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=Ll(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=Ll(t,s)),s}function u6(r){if(r>=Ea.length)for(let e=Ea.length;e<=r;e++){let t=new Uint8Array([0]),n=Ea[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=Ll(t,n)),Ea.push(n)}return Ea[r]}function eS(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var va=class extends Nn(Nt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=c0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(a6(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&i[1]&128?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=eS(u6(n),t),i="-";break;default:t=JR(t,u6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=l6.charAt(t[c]));return a===!1&&(i+=l6.charAt(0)),i}};x6=va;va.NAME="IntegerValueBlock";Object.defineProperty(x6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var v6,it=class r extends xt{constructor(e={}){super(e,va),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Bl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Bl();let t=BigInt(e),n=new ba,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};v6=it;W.Integer=v6;it.NAME="INTEGER";var R6,Yl=class extends it{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};R6=Yl;W.Enumerated=R6;Yl.NAME="ENUMERATED";var Ra=class extends Nn(Nt){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Bl();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=ho(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",$r;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n}toString(){let e="";if(this.isHexOnly)e=ye.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Ra.NAME="sidBlock";var Ql=class extends Nt{constructor({value:e=ii,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Ra;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,$r;t.push(o)}return l0(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;i.valueDec=c+a,s=!1}else{let i=new Ra;if(o>Number.MAX_SAFE_INTEGER){Bl();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Ql.NAME="ObjectIdentifierValueBlock";var S6,Kr=class extends xt{constructor(e={}){super(e,Ql),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};S6=Kr;W.ObjectIdentifier=S6;Kr.NAME="OBJECT IDENTIFIER";var Sa=class extends Nn(Dn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=ho(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",$r;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}return n.buffer}toString(){let e="";return this.isHexOnly?e=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Sa.NAME="relativeSidBlock";var Xl=class extends Nt{constructor({value:e=ii,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Sa;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,$r;n.push(s)}return l0(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let s=new Sa;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Xl.NAME="RelativeObjectIdentifierValueBlock";var _6,jl=class extends xt{constructor(e={}){super(e,Xl),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};_6=jl;W.RelativeObjectIdentifier=_6;jl.NAME="RelativeObjectIdentifier";var A6,ht=class extends po{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};A6=ht;W.Sequence=A6;ht.NAME="SEQUENCE";var I6,Zl=class extends po{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};I6=Zl;W.Set=I6;Zl.NAME="SET";var Jl=class extends Nn(Nt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ii}toJSON(){return{...super.toJSON(),value:this.value}}};Jl.NAME="StringValueBlock";var eu=class extends Jl{};eu.NAME="SimpleStringValueBlock";var Mt=class extends Fl{constructor({...e}={}){super(e,eu)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Mt.NAME="SIMPLE STRING";var tu=class extends Mt{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};tu.NAME="Utf8StringValueBlock";var D6,kn=class extends tu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};D6=kn;W.Utf8String=D6;kn.NAME="UTF8String";var ru=class extends Mt{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};ru.NAME="BmpStringValueBlock";var T6,nu=class extends ru{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};T6=nu;W.BmpString=T6;nu.NAME="BMPString";var ou=class extends Mt{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let s=ho(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};ou.NAME="UniversalStringValueBlock";var k6,su=class extends ou{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};k6=su;W.UniversalString=k6;su.NAME="UniversalString";var C6,iu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};C6=iu;W.NumericString=C6;iu.NAME="NumericString";var N6,au=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};N6=au;W.PrintableString=N6;au.NAME="PrintableString";var P6,cu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};P6=cu;W.TeletexString=P6;cu.NAME="TeletexString";var O6,lu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};O6=lu;W.VideotexString=O6;lu.NAME="VideotexString";var L6,uu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};L6=uu;W.IA5String=L6;uu.NAME="IA5String";var B6,du=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};B6=du;W.GraphicString=B6;du.NAME="GraphicString";var U6,_a=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};U6=_a;W.VisibleString=U6;_a.NAME="VisibleString";var M6,fu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};M6=fu;W.GeneralString=M6;fu.NAME="GeneralString";var F6,hu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};F6=hu;W.CharacterString=F6;hu.NAME="CharacterString";var V6,Aa=class extends _a{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=qt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=qt(this.month,2),t[2]=qt(this.day,2),t[3]=qt(this.hour,2),t[4]=qt(this.minute,2),t[5]=qt(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};V6=Aa;W.UTCTime=V6;Aa.NAME="UTCTime";var K6,pu=class extends Aa{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),g="";if(f===-1&&(f=n.indexOf("-"),u=-1),f!==-1){if(g=n.substring(f+1),n=n.substring(0,f),g.length!==2&&g.length!==4)throw new Error("Wrong input string for conversion");let h=parseInt(g.substring(0,2),10);if(isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*h,g.length===4){if(h=parseInt(g.substring(2,4),10),isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");c=u*h}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(qt(this.year,4)),t.push(qt(this.month,2)),t.push(qt(this.day,2)),t.push(qt(this.hour,2)),t.push(qt(this.minute,2)),t.push(qt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(qt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};K6=pu;W.GeneralizedTime=K6;pu.NAME="GeneralizedTime";var $6,mu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};$6=mu;W.DATE=$6;mu.NAME="DATE";var H6,gu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};H6=gu;W.TimeOfDay=H6;gu.NAME="TimeOfDay";var q6,yu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};q6=yu;W.DateTime=q6;yu.NAME="DateTime";var W6,wu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};W6=wu;W.Duration=W6;wu.NAME="Duration";var G6,Eu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};G6=Eu;W.TIME=G6;Eu.NAME="TIME";function rS(r){let{result:e}=ai(r),t=e.valueBlock.value;return{n:P(sn(t[1].toBigInt()),"base64url"),e:P(sn(t[2].toBigInt()),"base64url"),d:P(sn(t[3].toBigInt()),"base64url"),p:P(sn(t[4].toBigInt()),"base64url"),q:P(sn(t[5].toBigInt()),"base64url"),dp:P(sn(t[6].toBigInt()),"base64url"),dq:P(sn(t[7].toBigInt()),"base64url"),qi:P(sn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function nS(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new ht({value:[new it({value:0}),it.fromBigInt(an(B(r.n,"base64url"))),it.fromBigInt(an(B(r.e,"base64url"))),it.fromBigInt(an(B(r.d,"base64url"))),it.fromBigInt(an(B(r.p,"base64url"))),it.fromBigInt(an(B(r.q,"base64url"))),it.fromBigInt(an(B(r.dp,"base64url"))),it.fromBigInt(an(B(r.dq,"base64url"))),it.fromBigInt(an(B(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function oS(r){let{result:e}=ai(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:P(sn(t[0].toBigInt()),"base64url"),e:P(sn(t[1].toBigInt()),"base64url")}}function sS(r){if(r.n==null||r.e==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new ht({value:[new ht({value:[new Kr({value:"1.2.840.113549.1.1.1"}),new mo]}),new si({valueHex:new ht({value:[it.fromBigInt(an(B(r.n,"base64url"))),it.fromBigInt(an(B(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function sn(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),o=0,s=0;for(;o<t;)n[o]=parseInt(e.slice(s,s+2),16),o+=1,s+=2;return n}function an(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var iS=16,d0=32,f0=1e4;async function aS(r,e){let t=qe.get(),o=new ht({value:[new it({value:0}),new ht({value:[new Kr({value:"1.2.840.113549.1.1.1"}),new mo]}),new Tn({valueHex:r.marshal()})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=Ht(iS),a=await i0(co,e,i,{c:f0,dkLen:d0}),c=Ht(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new ht({value:[new Tn({valueHex:i}),new it({value:f0}),new it({value:d0}),new ht({value:[new Kr({value:"1.2.840.113549.2.11"}),new mo]})]}),f=new ht({value:[new Kr({value:"1.2.840.113549.1.5.13"}),new ht({value:[new ht({value:[new Kr({value:"1.2.840.113549.1.5.12"}),u]}),new ht({value:[new Kr({value:"2.16.840.1.101.3.4.1.42"}),new Tn({valueHex:c})]})]})]}),h=new ht({value:[f,new Tn({valueHex:d})]}).toBER(),p=new Uint8Array(h,0,h.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...P(p,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
|
|
22
|
+
`)}async function h0(r,e){let t=qe.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ai(o),{iv:i,salt:a,iterations:c,keySize:l,cipherText:d}=cS(s),u=await i0(co,e,a,{c,dkLen:l}),f=await t.subtle.importKey("raw",u,"AES-CBC",!1,["decrypt"]),g=Ia(await t.subtle.decrypt({name:"AES-CBC",iv:i},f,d)),{result:h}=ai(g);n=z6(h)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ai(o);n=z6(s)}else throw new m("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return p0(n)}function cS(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new m("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new m("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let s=n.valueBlock.value[1],i=Ia(s.valueBlock.value[0].getValue()),a=f0,c=d0;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new m("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new m("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let u=Ia(l.valueBlock.value[1].getValue());return{cipherText:Ia(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function z6(r){return Ia(r.valueBlock.value[2].getValue())}function Ia(r){return new Uint8Array(r,0,r.byteLength)}async function Y6(r){let e=await qe.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await j6(e);return{privateKey:t[0],publicKey:t[1]}}async function m0(r){let t=[await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await lS(r)],n=await j6({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function Q6(r,e){let t=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await qe.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function X6(r,e,t){let n=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return qe.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function j6(r){if(r.privateKey==null||r.publicKey==null)throw new m("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([qe.get().subtle.exportKey("jwk",r.privateKey),qe.get().subtle.exportKey("jwk",r.publicKey)])}async function lS(r){return qe.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function xu(r){if(r.kty!=="RSA")throw new m("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new m("invalid key modulus","ERR_INVALID_KEY_MODULUS");return B(r.n,"base64url").length*8}var is=8192,ss=class{_key;constructor(e){this._key=e}verify(e,t){return X6(this._key,t,e)}marshal(){return go.jwkToPkix(this._key)}get bytes(){return Fr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}},yo=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return Ht(16)}sign(e){return Q6(this._key,e)}get public(){if(this._publicKey==null)throw new m("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new ss(this._publicKey)}marshal(){return go.jwkToPkcs1(this._key)}get bytes(){return Vr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return P(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return go.exportToPem(this,e);if(t==="libp2p-key")return ti(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function p0(r){let e=go.pkcs1ToJwk(r);if(xu(e)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await m0(e);return new yo(t.privateKey,t.publicKey)}function dS(r){let e=go.pkixToJwk(r);if(xu(e)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new ss(e)}async function fS(r){if(xu(r)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await m0(r);return new yo(e.privateKey,e.publicKey)}async function hS(r){if(r>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await Y6(r);return new yo(e.privateKey,e.publicKey)}var x0={};pe(x0,{Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateKeyPair:()=>AS,unmarshalSecp256k1PrivateKey:()=>SS,unmarshalSecp256k1PublicKey:()=>_S});var pS=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),wo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Eo=new Uint32Array(64),y0=class extends so{constructor(){super(64,32,8,!1),this.A=wo[0]|0,this.B=wo[1]|0,this.C=wo[2]|0,this.D=wo[3]|0,this.E=wo[4]|0,this.F=wo[5]|0,this.G=wo[6]|0,this.H=wo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)Eo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=Eo[u-15],g=Eo[u-2],h=Lr(f,7)^Lr(f,18)^f>>>3,p=Lr(g,17)^Lr(g,19)^g>>>10;Eo[u]=p+Eo[u-7]+h+Eo[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Lr(a,6)^Lr(a,11)^Lr(a,25),g=d+f+bl(a,c,l)+pS[u]+Eo[u]|0,p=(Lr(n,2)^Lr(n,13)^Lr(n,22))+xl(n,o,s)|0;d=l,l=c,c=a,a=i+g|0,i=s,s=o,o=n,n=g+p|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){Eo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var bo=js(()=>new y0);function mS(r){let e=ma(r);br(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:gS,hexToBytes:yS}=Sl,as={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(r){let{Err:e}=as;if(r.length<2||r[0]!==2)throw new e("Invalid signature integer tag");let t=r[1],n=r.subarray(2,t+2);if(!t||n.length!==t)throw new e("Invalid signature integer: wrong length");if(n[0]&128)throw new e("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:gS(n),l:r.subarray(t+2)}},toSig(r){let{Err:e}=as,t=typeof r=="string"?yS(r):r;Zs(t);let n=t.length;if(n<2||t[0]!=48)throw new e("Invalid signature tag");if(t[1]!==n-2)throw new e("Invalid signature: incorrect length");let{d:o,l:s}=as._parseInt(t.subarray(2)),{d:i,l:a}=as._parseInt(s);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s:i}},hexFromSig(r){let e=l=>Number.parseInt(l[0],16)&8?"00"+l:l,t=l=>{let d=l.toString(16);return d.length&1?`0${d}`:d},n=e(t(r.s)),o=e(t(r.r)),s=n.length/2,i=o.length/2,a=t(s),c=t(i);return`30${t(i+s+4)}02${c}${o}02${a}${n}`}},Pn=BigInt(0),vr=BigInt(1),bV=BigInt(2),Z6=BigInt(3),xV=BigInt(4);function wS(r){let e=mS(r),{Fp:t}=e,n=e.toBytes||((h,p,y)=>{let w=p.toAffine();return Rn(Uint8Array.from([4]),t.toBytes(w.x),t.toBytes(w.y))}),o=e.fromBytes||(h=>{let p=h.subarray(1),y=t.fromBytes(p.subarray(0,t.BYTES)),w=t.fromBytes(p.subarray(t.BYTES,2*t.BYTES));return{x:y,y:w}});function s(h){let{a:p,b:y}=e,w=t.sqr(h),b=t.mul(w,h);return t.add(t.add(b,t.mul(h,p)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function i(h){return typeof h=="bigint"&&Pn<h&&h<e.n}function a(h){if(!i(h))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function c(h){let{allowedPrivateKeyLengths:p,nByteLength:y,wrapPrivateKey:w,n:b}=e;if(p&&typeof h!="bigint"){if(lo(h)&&(h=bn(h)),typeof h!="string"||!p.includes(h.length))throw new Error("Invalid key");h=h.padStart(y*2,"0")}let E;try{E=typeof h=="bigint"?h:xn(Ue("private key",h,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof h}`)}return w&&(E=_e(E,b)),a(E),E}let l=new Map;function d(h){if(!(h instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(p,y,w){if(this.px=p,this.py=y,this.pz=w,p==null||!t.isValid(p))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(w==null||!t.isValid(w))throw new Error("z required")}static fromAffine(p){let{x:y,y:w}=p||{};if(!p||!t.isValid(y)||!t.isValid(w))throw new Error("invalid affine point");if(p instanceof u)throw new Error("projective point not allowed");let b=E=>t.eql(E,t.ZERO);return b(y)&&b(w)?u.ZERO:new u(y,w,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(p){let y=t.invertBatch(p.map(w=>w.pz));return p.map((w,b)=>w.toAffine(y[b])).map(u.fromAffine)}static fromHex(p){let y=u.fromAffine(o(Ue("pointHex",p)));return y.assertValidity(),y}static fromPrivateKey(p){return u.BASE.multiply(c(p))}_setWindowSize(p){this._WINDOW_SIZE=p,l.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!t.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:p,y}=this.toAffine();if(!t.isValid(p)||!t.isValid(y))throw new Error("bad point: x or y not FE");let w=t.sqr(y),b=s(p);if(!t.eql(w,b))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:p}=this.toAffine();if(t.isOdd)return!t.isOdd(p);throw new Error("Field doesn't support isOdd")}equals(p){d(p);let{px:y,py:w,pz:b}=this,{px:E,py:S,pz:_}=p,A=t.eql(t.mul(y,_),t.mul(E,b)),D=t.eql(t.mul(w,_),t.mul(S,b));return A&&D}negate(){return new u(this.px,t.neg(this.py),this.pz)}double(){let{a:p,b:y}=e,w=t.mul(y,Z6),{px:b,py:E,pz:S}=this,_=t.ZERO,A=t.ZERO,D=t.ZERO,R=t.mul(b,b),k=t.mul(E,E),O=t.mul(S,S),N=t.mul(b,E);return N=t.add(N,N),D=t.mul(b,S),D=t.add(D,D),_=t.mul(p,D),A=t.mul(w,O),A=t.add(_,A),_=t.sub(k,A),A=t.add(k,A),A=t.mul(_,A),_=t.mul(N,_),D=t.mul(w,D),O=t.mul(p,O),N=t.sub(R,O),N=t.mul(p,N),N=t.add(N,D),D=t.add(R,R),R=t.add(D,R),R=t.add(R,O),R=t.mul(R,N),A=t.add(A,R),O=t.mul(E,S),O=t.add(O,O),R=t.mul(O,N),_=t.sub(_,R),D=t.mul(O,k),D=t.add(D,D),D=t.add(D,D),new u(_,A,D)}add(p){d(p);let{px:y,py:w,pz:b}=this,{px:E,py:S,pz:_}=p,A=t.ZERO,D=t.ZERO,R=t.ZERO,k=e.a,O=t.mul(e.b,Z6),N=t.mul(y,E),L=t.mul(w,S),F=t.mul(b,_),Y=t.add(y,w),I=t.add(E,S);Y=t.mul(Y,I),I=t.add(N,L),Y=t.sub(Y,I),I=t.add(y,b);let C=t.add(E,_);return I=t.mul(I,C),C=t.add(N,F),I=t.sub(I,C),C=t.add(w,b),A=t.add(S,_),C=t.mul(C,A),A=t.add(L,F),C=t.sub(C,A),R=t.mul(k,I),A=t.mul(O,F),R=t.add(A,R),A=t.sub(L,R),R=t.add(L,R),D=t.mul(A,R),L=t.add(N,N),L=t.add(L,N),F=t.mul(k,F),I=t.mul(O,I),L=t.add(L,F),F=t.sub(N,F),F=t.mul(k,F),I=t.add(I,F),N=t.mul(L,I),D=t.add(D,N),N=t.mul(C,I),A=t.mul(Y,A),A=t.sub(A,N),N=t.mul(Y,L),R=t.mul(C,R),R=t.add(R,N),new u(A,D,R)}subtract(p){return this.add(p.negate())}is0(){return this.equals(u.ZERO)}wNAF(p){return g.wNAFCached(this,l,p,y=>{let w=t.invertBatch(y.map(b=>b.pz));return y.map((b,E)=>b.toAffine(w[E])).map(u.fromAffine)})}multiplyUnsafe(p){let y=u.ZERO;if(p===Pn)return y;if(a(p),p===vr)return this;let{endo:w}=e;if(!w)return g.unsafeLadder(this,p);let{k1neg:b,k1:E,k2neg:S,k2:_}=w.splitScalar(p),A=y,D=y,R=this;for(;E>Pn||_>Pn;)E&vr&&(A=A.add(R)),_&vr&&(D=D.add(R)),R=R.double(),E>>=vr,_>>=vr;return b&&(A=A.negate()),S&&(D=D.negate()),D=new u(t.mul(D.px,w.beta),D.py,D.pz),A.add(D)}multiply(p){a(p);let y=p,w,b,{endo:E}=e;if(E){let{k1neg:S,k1:_,k2neg:A,k2:D}=E.splitScalar(y),{p:R,f:k}=this.wNAF(_),{p:O,f:N}=this.wNAF(D);R=g.constTimeNegate(S,R),O=g.constTimeNegate(A,O),O=new u(t.mul(O.px,E.beta),O.py,O.pz),w=R.add(O),b=k.add(N)}else{let{p:S,f:_}=this.wNAF(y);w=S,b=_}return u.normalizeZ([w,b])[0]}multiplyAndAddUnsafe(p,y,w){let b=u.BASE,E=(_,A)=>A===Pn||A===vr||!_.equals(b)?_.multiplyUnsafe(A):_.multiply(A),S=E(this,y).add(E(p,w));return S.is0()?void 0:S}toAffine(p){let{px:y,py:w,pz:b}=this,E=this.is0();p==null&&(p=E?t.ONE:t.inv(b));let S=t.mul(y,p),_=t.mul(w,p),A=t.mul(b,p);if(E)return{x:t.ZERO,y:t.ZERO};if(!t.eql(A,t.ONE))throw new Error("invZ was invalid");return{x:S,y:_}}isTorsionFree(){let{h:p,isTorsionFree:y}=e;if(p===vr)return!0;if(y)return y(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:p,clearCofactor:y}=e;return p===vr?this:y?y(u,this):this.multiplyUnsafe(e.h)}toRawBytes(p=!0){return this.assertValidity(),n(u,this,p)}toHex(p=!0){return bn(this.toRawBytes(p))}}u.BASE=new u(e.Gx,e.Gy,t.ONE),u.ZERO=new u(t.ZERO,t.ONE,t.ZERO);let f=e.nBitLength,g=Il(u,e.endo?Math.ceil(f/2):f);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:i}}function ES(r){let e=ma(r);return br(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function J6(r){let e=ES(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(I){return Pn<I&&I<t.ORDER}function a(I){return _e(I,n)}function c(I){return _l(I,n)}let{ProjectivePoint:l,normPrivateKeyToScalar:d,weierstrassEquation:u,isWithinCurveOrder:f}=wS({...e,toBytes(I,C,$){let T=C.toAffine(),v=t.toBytes(T.x),U=Rn;return $?U(Uint8Array.from([C.hasEvenY()?2:3]),v):U(Uint8Array.from([4]),v,t.toBytes(T.y))},fromBytes(I){let C=I.length,$=I[0],T=I.subarray(1);if(C===o&&($===2||$===3)){let v=xn(T);if(!i(v))throw new Error("Point is not on curve");let U=u(v),V;try{V=t.sqrt(U)}catch(ie){let de=ie instanceof Error?": "+ie.message:"";throw new Error("Point is not on curve"+de)}let H=(V&vr)===vr;return($&1)===1!==H&&(V=t.neg(V)),{x:v,y:V}}else if(C===s&&$===4){let v=t.fromBytes(T.subarray(0,t.BYTES)),U=t.fromBytes(T.subarray(t.BYTES,2*t.BYTES));return{x:v,y:U}}else throw new Error(`Point of length ${C} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),g=I=>bn(uo(I,e.nByteLength));function h(I){let C=n>>vr;return I>C}function p(I){return h(I)?a(-I):I}let y=(I,C,$)=>xn(I.slice(C,$));class w{constructor(C,$,T){this.r=C,this.s=$,this.recovery=T,this.assertValidity()}static fromCompact(C){let $=e.nByteLength;return C=Ue("compactSignature",C,$*2),new w(y(C,0,$),y(C,$,2*$))}static fromDER(C){let{r:$,s:T}=as.toSig(Ue("DER",C));return new w($,T)}assertValidity(){if(!f(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!f(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(C){return new w(this.r,this.s,C)}recoverPublicKey(C){let{r:$,s:T,recovery:v}=this,U=D(Ue("msgHash",C));if(v==null||![0,1,2,3].includes(v))throw new Error("recovery id invalid");let V=v===2||v===3?$+e.n:$;if(V>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let H=v&1?"03":"02",se=l.fromHex(H+g(V)),ie=c(V),de=a(-U*ie),ae=a(T*ie),le=l.BASE.multiplyAndAddUnsafe(se,de,ae);if(!le)throw new Error("point at infinify");return le.assertValidity(),le}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new w(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return ts(this.toDERHex())}toDERHex(){return as.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return ts(this.toCompactHex())}toCompactHex(){return g(this.r)+g(this.s)}}let b={isValidPrivateKey(I){try{return d(I),!0}catch{return!1}},normPrivateKeyToScalar:d,randomPrivateKey:()=>{let I=Xh(e.n);return P8(e.randomBytes(I),e.n)},precompute(I=8,C=l.BASE){return C._setWindowSize(I),C.multiply(BigInt(3)),C}};function E(I,C=!0){return l.fromPrivateKey(I).toRawBytes(C)}function S(I){let C=lo(I),$=typeof I=="string",T=(C||$)&&I.length;return C?T===o||T===s:$?T===2*o||T===2*s:I instanceof l}function _(I,C,$=!0){if(S(I))throw new Error("first arg must be private key");if(!S(C))throw new Error("second arg must be public key");return l.fromHex(C).multiply(d(I)).toRawBytes($)}let A=e.bits2int||function(I){let C=xn(I),$=I.length*8-e.nBitLength;return $>0?C>>BigInt($):C},D=e.bits2int_modN||function(I){return a(A(I))},R=pa(e.nBitLength);function k(I){if(typeof I!="bigint")throw new Error("bigint expected");if(!(Pn<=I&&I<R))throw new Error(`bigint expected < 2^${e.nBitLength}`);return uo(I,e.nByteLength)}function O(I,C,$=N){if(["recovered","canonical"].some(ke=>ke in $))throw new Error("sign() legacy options not supported");let{hash:T,randomBytes:v}=e,{lowS:U,prehash:V,extraEntropy:H}=$;U==null&&(U=!0),I=Ue("msgHash",I),V&&(I=Ue("prehashed msgHash",T(I)));let se=D(I),ie=d(C),de=[k(ie),k(se)];if(H!=null&&H!==!1){let ke=H===!0?v(t.BYTES):H;de.push(Ue("extraEntropy",ke))}let ae=Rn(...de),le=se;function Be(ke){let mt=A(ke);if(!f(mt))return;let gt=c(mt),at=l.BASE.multiply(mt).toAffine(),Tt=a(at.x);if(Tt===Pn)return;let hn=a(gt*a(le+Tt*ie));if(hn===Pn)return;let Vo=(at.x===Tt?0:2)|Number(at.y&vr),Ji=hn;return U&&h(hn)&&(Ji=p(hn),Vo^=1),new w(Tt,Ji,Vo)}return{seed:ae,k2sig:Be}}let N={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function F(I,C,$=N){let{seed:T,k2sig:v}=O(I,C,$),U=e;return Wh(U.hash.outputLen,U.nByteLength,U.hmac)(T,v)}l.BASE._setWindowSize(8);function Y(I,C,$,T=L){let v=I;if(C=Ue("msgHash",C),$=Ue("publicKey",$),"strict"in T)throw new Error("options.strict was renamed to lowS");let{lowS:U,prehash:V}=T,H,se;try{if(typeof v=="string"||lo(v))try{H=w.fromDER(v)}catch(at){if(!(at instanceof as.Err))throw at;H=w.fromCompact(v)}else if(typeof v=="object"&&typeof v.r=="bigint"&&typeof v.s=="bigint"){let{r:at,s:Tt}=v;H=new w(at,Tt)}else throw new Error("PARSE");se=l.fromHex($)}catch(at){if(at.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(U&&H.hasHighS())return!1;V&&(C=e.hash(C));let{r:ie,s:de}=H,ae=D(C),le=c(de),Be=a(ae*le),ke=a(ie*le),mt=l.BASE.multiplyAndAddUnsafe(se,Be,ke)?.toAffine();return mt?a(mt.x)===ie:!1}return{CURVE:e,getPublicKey:E,getSharedSecret:_,sign:F,verify:Y,ProjectivePoint:l,Signature:w,utils:b}}function bS(r){return{hash:r,hmac:(e,...t)=>fo(r,e,El(...t)),randomBytes:es}}function em(r,e){let t=n=>J6({...r,...bS(n)});return Object.freeze({...t(e),create:t})}var nm=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),tm=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),xS=BigInt(1),w0=BigInt(2),rm=(r,e)=>(r+e/w0)/e;function vS(r){let e=nm,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Me(d,t,e)*d%e,f=Me(u,t,e)*d%e,g=Me(f,w0,e)*l%e,h=Me(g,o,e)*g%e,p=Me(h,s,e)*h%e,y=Me(p,a,e)*p%e,w=Me(y,c,e)*y%e,b=Me(w,a,e)*p%e,E=Me(b,t,e)*d%e,S=Me(E,i,e)*h%e,_=Me(S,n,e)*l%e,A=Me(_,w0,e);if(!E0.eql(E0.sqr(A),r))throw new Error("Cannot find square root");return A}var E0=Al(nm,void 0,void 0,{sqrt:vS}),Hr=em({a:BigInt(0),b:BigInt(7),Fp:E0,n:tm,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=tm,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-xS*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=rm(s*r,e),c=rm(-n*r,e),l=_e(r-a*t-c*o,e),d=_e(-a*n-c*s,e),u=l>i,f=d>i;if(u&&(l=e-l),f&&(d=e-d),l>i||d>i)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}}},bo),kV=BigInt(0);var CV=Hr.ProjectivePoint;function om(){return Hr.utils.randomPrivateKey()}function sm(r,e){let t=De.digest(e instanceof Uint8Array?e:e.subarray());if(Er(t))return t.then(({digest:n})=>Hr.sign(n,r).toDERRawBytes()).catch(n=>{throw new m(String(n),"ERR_INVALID_INPUT")});try{return Hr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new m(String(n),"ERR_INVALID_INPUT")}}function im(r,e,t){let n=De.digest(t instanceof Uint8Array?t:t.subarray());if(Er(n))return n.then(({digest:o})=>Hr.verify(e,o,r)).catch(o=>{throw new m(String(o),"ERR_INVALID_INPUT")});try{return Hr.verify(e,n.digest,r)}catch(o){throw new m(String(o),"ERR_INVALID_INPUT")}}function am(r){return Hr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function cm(r){try{Hr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}function b0(r){try{Hr.ProjectivePoint.fromHex(r)}catch(e){throw new m(String(e),"ERR_INVALID_PUBLIC_KEY")}}function lm(r){try{return Hr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}var cs=class{_key;constructor(e){b0(e),this._key=e}verify(e,t){return im(this._key,t,e)}marshal(){return am(this._key)}get bytes(){return Fr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return Er(e)?{bytes:t}=await e:t=e.bytes,t}},ls=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??lm(e),cm(this._key),b0(this._publicKey)}sign(e){return sm(this._key,e)}get public(){return new cs(this._publicKey)}marshal(){return this._key}get bytes(){return Vr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return P(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ti(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function SS(r){return new ls(r)}function _S(r){return new cs(r)}async function AS(){let r=om();return new ls(r)}var On={rsa:g0,ed25519:o0,secp256k1:x0};function v0(r){let e=Object.keys(On).join(" / ");return new m(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function R0(r){if(r=r.toLowerCase(),r==="rsa"||r==="ed25519"||r==="secp256k1")return On[r];throw v0(r)}async function Da(r,e){return R0(r).generateKeyPair(e??2048)}async function IS(r,e,t){if(r.toLowerCase()!=="ed25519")throw new m("Seed key derivation is unimplemented for RSA or secp256k1","ERR_UNSUPPORTED_KEY_DERIVATION_TYPE");return n0(e)}function qr(r){let e=Fr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return On.rsa.unmarshalRsaPublicKey(t);case Fe.Ed25519:return On.ed25519.unmarshalEd25519PublicKey(t);case Fe.Secp256k1:return On.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw v0(e.Type??"unknown")}}function S0(r,e){return e=(e??"rsa").toLowerCase(),R0(e),r.bytes}async function Rr(r){let e=Vr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return On.rsa.unmarshalRsaPrivateKey(t);case Fe.Ed25519:return On.ed25519.unmarshalEd25519PrivateKey(t);case Fe.Secp256k1:return On.secp256k1.unmarshalSecp256k1PrivateKey(t);default:throw v0(e.Type??"RSA")}}function _0(r,e){return e=(e??"rsa").toLowerCase(),R0(e),r.bytes}async function ci(r,e){try{let t=await Z8(r,e);return await Rr(t)}catch{}if(!r.includes("BEGIN"))throw new m("Encrypted key was not a libp2p-key or a PEM file","ERR_INVALID_IMPORT_FORMAT");return h0(r,e)}var a_=Ye(Wo(),1);var Ln="/",um=new TextEncoder().encode(Ln),Ru=um[0],Oe=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=B(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==Ru)throw new Error("Invalid key")}toString(e="utf8"){return P(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Ln))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=um),this._buf[0]!==Ru){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Ru,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Ru;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let s=t[o],i=n[o];if(s<i)return!0;if(s>i)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Ln).slice(1)}type(){return DS(this.baseNamespace())}name(){return TS(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Ln)||(e+=Ln),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Ln):new r(e.slice(0,-1).join(Ln))}child(e){return this.toString()===Ln?e:e.toString()===Ln?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...kS(e.map(t=>t.namespaces()))])}};function DS(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function TS(r){let e=r.split(":");return e[e.length-1]}function kS(r){return[].concat(...r)}var c_=Ye(Su(),1);var dm="ERR_IPNS_EXPIRED_RECORD",_u="ERR_UNRECOGNIZED_VALIDITY";var Bn="ERR_SIGNATURE_VERIFICATION";var I0="ERR_UNDEFINED_PARAMETER",fm="ERR_INVALID_RECORD_DATA",hm="ERR_INVALID_VALUE",pm="ERR_INVALID_EMBEDDED_KEY";var mm="ERR_RECORD_TOO_LARGE";var Wt;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.value=o.bytes();break;case 2:i.signatureV1=o.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(o);break;case 4:i.validity=o.bytes();break;case 5:i.sequence=o.uint64();break;case 6:i.ttl=o.uint64();break;case 7:i.pubKey=o.bytes();break;case 8:i.signatureV2=o.bytes();break;case 9:i.data=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Wt||(Wt={}));var CS=["string","number","bigint","symbol"],NS=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function ym(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(CS.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(PS(r))return"Buffer";let t=OS(r);return t||"Object"}function PS(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function OS(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(NS.includes(e))return e}var x=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};x.uint=new x(0,"uint",!0);x.negint=new x(1,"negint",!0);x.bytes=new x(2,"bytes",!0);x.string=new x(3,"string",!0);x.array=new x(4,"array",!1);x.map=new x(5,"map",!1);x.tag=new x(6,"tag",!1);x.float=new x(7,"float",!0);x.false=new x(7,"false",!0);x.true=new x(7,"true",!0);x.null=new x(7,"null",!0);x.undefined=new x(7,"undefined",!0);x.break=new x(7,"break",!0);var M=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var li=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",LS=new TextDecoder,BS=new TextEncoder;function Au(r){return li&&globalThis.Buffer.isBuffer(r)}function Ta(r){return r instanceof Uint8Array?Au(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var xm=li?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):Em(r,e,t):(r,e,t)=>t-e>64?LS.decode(r.subarray(e,t)):Em(r,e,t),Iu=li?r=>r.length>64?globalThis.Buffer.from(r):wm(r):r=>r.length>64?BS.encode(r):wm(r),cn=r=>Uint8Array.from(r),ui=li?(r,e,t)=>Au(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),vm=li?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Ta(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},Rm=li?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Sm(r,e){if(Au(r)&&Au(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function wm(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function Em(r,e,t){let n=[];for(;e<t;){let o=r[e],s=null,i=o>239?4:o>223?3:o>191?2:1;if(e+i<=t){let a,c,l,d;switch(i){case 1:o<128&&(s=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(s=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(s=d))}}s===null?(s=65533,i=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),e+=i}return D0(n)}var bm=4096;function D0(r){let e=r.length;if(e<=bm)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=bm));return t}var US=256,ka=class{constructor(e=US){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=Rm(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=ui(n,0,this.cursor)}else t=vm(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",di="CBOR encode error:",Ca=[];Ca[23]=1;Ca[24]=2;Ca[25]=3;Ca[26]=5;Ca[27]=9;function Un(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var pt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function nr(r,e,t){Un(r,e,1);let n=r[e];if(t.strict===!0&&n<pt[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function or(r,e,t){Un(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<pt[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function sr(r,e,t){Un(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<pt[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function ir(r,e,t){Un(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<pt[3])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${Q} integers outside of the safe integer range are not supported`)}function _m(r,e,t,n){return new M(x.uint,nr(r,e+1,n),2)}function Am(r,e,t,n){return new M(x.uint,or(r,e+1,n),3)}function Im(r,e,t,n){return new M(x.uint,sr(r,e+1,n),5)}function Dm(r,e,t,n){return new M(x.uint,ir(r,e+1,n),9)}function Sr(r,e){return vt(r,0,e.value)}function vt(r,e,t){if(t<pt[0]){let n=Number(t);r.push([e|n])}else if(t<pt[1]){let n=Number(t);r.push([e|24,n])}else if(t<pt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<pt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<pt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${Q} encountered BigInt larger than allowable range`)}}Sr.encodedSize=function(e){return vt.encodedSize(e.value)};vt.encodedSize=function(e){return e<pt[0]?1:e<pt[1]?2:e<pt[2]?3:e<pt[3]?5:9};Sr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Tm(r,e,t,n){return new M(x.negint,-1-nr(r,e+1,n),2)}function km(r,e,t,n){return new M(x.negint,-1-or(r,e+1,n),3)}function Cm(r,e,t,n){return new M(x.negint,-1-sr(r,e+1,n),5)}var T0=BigInt(-1),Nm=BigInt(1);function Pm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new M(x.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new M(x.negint,T0-BigInt(o),9)}function Du(r,e){let t=e.value,n=typeof t=="bigint"?t*T0-Nm:t*-1-1;vt(r,e.type.majorEncoded,n)}Du.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*T0-Nm:t*-1-1;return n<pt[0]?1:n<pt[1]?2:n<pt[2]?3:n<pt[3]?5:9};Du.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Na(r,e,t,n){Un(r,e,t+n);let o=ui(r,e+t,e+t+n);return new M(x.bytes,o,t+n)}function Om(r,e,t,n){return Na(r,e,1,t)}function Lm(r,e,t,n){return Na(r,e,2,nr(r,e+1,n))}function Bm(r,e,t,n){return Na(r,e,3,or(r,e+1,n))}function Um(r,e,t,n){return Na(r,e,5,sr(r,e+1,n))}function Mm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return Na(r,e,9,o)}function Tu(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===x.string?Iu(r.value):r.value),r.encodedBytes}function fi(r,e){let t=Tu(e);vt(r,e.type.majorEncoded,t.length),r.push(t)}fi.encodedSize=function(e){let t=Tu(e);return vt.encodedSize(t.length)+t.length};fi.compareTokens=function(e,t){return FS(Tu(e),Tu(t))};function FS(r,e){return r.length<e.length?-1:r.length>e.length?1:Sm(r,e)}function Pa(r,e,t,n,o){let s=t+n;Un(r,e,s);let i=new M(x.string,xm(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=ui(r,e+t,e+s)),i}function Fm(r,e,t,n){return Pa(r,e,1,t,n)}function Vm(r,e,t,n){return Pa(r,e,2,nr(r,e+1,n),n)}function Km(r,e,t,n){return Pa(r,e,3,or(r,e+1,n),n)}function $m(r,e,t,n){return Pa(r,e,5,sr(r,e+1,n),n)}function Hm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return Pa(r,e,9,o,n)}var qm=fi;function hi(r,e,t,n){return new M(x.array,n,t)}function Wm(r,e,t,n){return hi(r,e,1,t)}function Gm(r,e,t,n){return hi(r,e,2,nr(r,e+1,n))}function zm(r,e,t,n){return hi(r,e,3,or(r,e+1,n))}function Ym(r,e,t,n){return hi(r,e,5,sr(r,e+1,n))}function Qm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return hi(r,e,9,o)}function Xm(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return hi(r,e,1,1/0)}function ku(r,e){vt(r,x.array.majorEncoded,e.value)}ku.compareTokens=Sr.compareTokens;ku.encodedSize=function(e){return vt.encodedSize(e.value)};function pi(r,e,t,n){return new M(x.map,n,t)}function jm(r,e,t,n){return pi(r,e,1,t)}function Zm(r,e,t,n){return pi(r,e,2,nr(r,e+1,n))}function Jm(r,e,t,n){return pi(r,e,3,or(r,e+1,n))}function e5(r,e,t,n){return pi(r,e,5,sr(r,e+1,n))}function t5(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return pi(r,e,9,o)}function r5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return pi(r,e,1,1/0)}function Cu(r,e){vt(r,x.map.majorEncoded,e.value)}Cu.compareTokens=Sr.compareTokens;Cu.encodedSize=function(e){return vt.encodedSize(e.value)};function n5(r,e,t,n){return new M(x.tag,t,1)}function o5(r,e,t,n){return new M(x.tag,nr(r,e+1,n),2)}function s5(r,e,t,n){return new M(x.tag,or(r,e+1,n),3)}function i5(r,e,t,n){return new M(x.tag,sr(r,e+1,n),5)}function a5(r,e,t,n){return new M(x.tag,ir(r,e+1,n),9)}function Nu(r,e){vt(r,x.tag.majorEncoded,e.value)}Nu.compareTokens=Sr.compareTokens;Nu.encodedSize=function(e){return vt.encodedSize(e.value)};var WS=20,GS=21,zS=22,YS=23;function c5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new M(x.null,null,1):new M(x.undefined,void 0,1)}function l5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new M(x.break,void 0,1)}function k0(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Q} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Q} Infinity values are not supported`)}return new M(x.float,r,e)}function u5(r,e,t,n){return k0(C0(r,e+1),3,n)}function d5(r,e,t,n){return k0(N0(r,e+1),5,n)}function f5(r,e,t,n){return k0(g5(r,e+1),9,n)}function Pu(r,e,t){let n=e.value;if(n===!1)r.push([x.float.majorEncoded|WS]);else if(n===!0)r.push([x.float.majorEncoded|GS]);else if(n===null)r.push([x.float.majorEncoded|zS]);else if(n===void 0)r.push([x.float.majorEncoded|YS]);else{let o,s=!1;(!t||t.float64!==!0)&&(p5(n),o=C0(Wr,1),n===o||Number.isNaN(n)?(Wr[0]=249,r.push(Wr.slice(0,3)),s=!0):(m5(n),o=N0(Wr,1),n===o&&(Wr[0]=250,r.push(Wr.slice(0,5)),s=!0))),s||(QS(n),o=g5(Wr,1),Wr[0]=251,r.push(Wr.slice(0,9)))}}Pu.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){p5(n);let o=C0(Wr,1);if(n===o||Number.isNaN(n))return 3;if(m5(n),o=N0(Wr,1),n===o)return 5}return 9};var h5=new ArrayBuffer(9),_r=new DataView(h5,1),Wr=new Uint8Array(h5,0);function p5(r){if(r===1/0)_r.setUint16(0,31744,!1);else if(r===-1/0)_r.setUint16(0,64512,!1);else if(Number.isNaN(r))_r.setUint16(0,32256,!1);else{_r.setFloat32(0,r);let e=_r.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)_r.setUint16(0,31744,!1);else if(t===0)_r.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?_r.setUint16(0,0):o<-14?_r.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):_r.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function C0(r,e){if(r.length-e<2)throw new Error(`${Q} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function m5(r){_r.setFloat32(0,r,!1)}function N0(r,e){if(r.length-e<4)throw new Error(`${Q} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function QS(r){_r.setFloat64(0,r,!1)}function g5(r,e){if(r.length-e<8)throw new Error(`${Q} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Pu.compareTokens=Sr.compareTokens;function Re(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ou(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=Re;K[24]=_m;K[25]=Am;K[26]=Im;K[27]=Dm;K[28]=Re;K[29]=Re;K[30]=Re;K[31]=Re;for(let r=32;r<=55;r++)K[r]=Re;K[56]=Tm;K[57]=km;K[58]=Cm;K[59]=Pm;K[60]=Re;K[61]=Re;K[62]=Re;K[63]=Re;for(let r=64;r<=87;r++)K[r]=Om;K[88]=Lm;K[89]=Bm;K[90]=Um;K[91]=Mm;K[92]=Re;K[93]=Re;K[94]=Re;K[95]=Ou("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=Fm;K[120]=Vm;K[121]=Km;K[122]=$m;K[123]=Hm;K[124]=Re;K[125]=Re;K[126]=Re;K[127]=Ou("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=Wm;K[152]=Gm;K[153]=zm;K[154]=Ym;K[155]=Qm;K[156]=Re;K[157]=Re;K[158]=Re;K[159]=Xm;for(let r=160;r<=183;r++)K[r]=jm;K[184]=Zm;K[185]=Jm;K[186]=e5;K[187]=t5;K[188]=Re;K[189]=Re;K[190]=Re;K[191]=r5;for(let r=192;r<=215;r++)K[r]=n5;K[216]=o5;K[217]=s5;K[218]=i5;K[219]=a5;K[220]=Re;K[221]=Re;K[222]=Re;K[223]=Re;for(let r=224;r<=243;r++)K[r]=Ou("simple values are not supported");K[244]=Re;K[245]=Re;K[246]=Re;K[247]=c5;K[248]=Ou("simple values are not supported");K[249]=u5;K[250]=d5;K[251]=f5;K[252]=Re;K[253]=Re;K[254]=Re;K[255]=l5;var Gr=[];for(let r=0;r<24;r++)Gr[r]=new M(x.uint,r,1);for(let r=-1;r>=-24;r--)Gr[31-r]=new M(x.negint,r,1);Gr[64]=new M(x.bytes,new Uint8Array(0),1);Gr[96]=new M(x.string,"",1);Gr[128]=new M(x.array,0,1);Gr[160]=new M(x.map,0,1);Gr[244]=new M(x.false,!1,1);Gr[245]=new M(x.true,!0,1);Gr[246]=new M(x.null,null,1);function y5(r){switch(r.type){case x.false:return cn([244]);case x.true:return cn([245]);case x.null:return cn([246]);case x.bytes:return r.value.length?void 0:cn([64]);case x.string:return r.value===""?cn([96]):void 0;case x.array:return r.value===0?cn([128]):void 0;case x.map:return r.value===0?cn([160]):void 0;case x.uint:return r.value<24?cn([Number(r.value)]):void 0;case x.negint:if(r.value>=-24)return cn([31-Number(r.value)])}}var jS={float64:!1,mapSorter:e_,quickEncodeToken:y5};function ZS(){let r=[];return r[x.uint.major]=Sr,r[x.negint.major]=Du,r[x.bytes.major]=fi,r[x.string.major]=qm,r[x.array.major]=ku,r[x.map.major]=Cu,r[x.tag.major]=Nu,r[x.float.major]=Pu,r}var w5=ZS(),P0=new ka,Bu=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${di} object contains circular references`);return new r(t,e)}},xo={null:new M(x.null,null),undefined:new M(x.undefined,void 0),true:new M(x.true,!0),false:new M(x.false,!1),emptyArray:new M(x.array,0),emptyMap:new M(x.map,0)},vo={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new M(x.float,r):r>=0?new M(x.uint,r):new M(x.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new M(x.uint,r):new M(x.negint,r)},Uint8Array(r,e,t,n){return new M(x.bytes,r)},string(r,e,t,n){return new M(x.string,r)},boolean(r,e,t,n){return r?xo.true:xo.false},null(r,e,t,n){return xo.null},undefined(r,e,t,n){return xo.undefined},ArrayBuffer(r,e,t,n){return new M(x.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new M(x.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[xo.emptyArray,new M(x.break)]:xo.emptyArray;n=Bu.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=Lu(i,t,n);return t.addBreakTokens?[new M(x.array,r.length),o,new M(x.break)]:[new M(x.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length;if(!i)return t.addBreakTokens===!0?[xo.emptyMap,new M(x.break)]:xo.emptyMap;n=Bu.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[Lu(l,t,n),Lu(o?r.get(l):r[l],t,n)];return JS(a,t),t.addBreakTokens?[new M(x.map,i),a,new M(x.break)]:[new M(x.map,i),a]}};vo.Map=vo.Object;vo.Buffer=vo.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))vo[`${r}Array`]=vo.DataView;function Lu(r,e={},t){let n=ym(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||vo[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=vo[n];if(!s)throw new Error(`${di} unsupported type: ${n}`);return s(r,n,e,t)}function JS(r,e){e.mapSorter&&r.sort(e.mapSorter)}function e_(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,s=w5[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function E5(r,e,t,n){if(Array.isArray(e))for(let o of e)E5(r,o,t,n);else t[e.type.major](r,e,n)}function b5(r,e,t){let n=Lu(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let s=e[n.type.major];if(s.encodedSize){let i=s.encodedSize(n,t),a=new ka(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Ta(a.chunks[0])}}return P0.reset(),E5(P0,n,e,t),P0.toBytes(!0)}function mi(r,e){return e=Object.assign({},jS,e),b5(r,w5,e)}var t_={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Uu=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=Gr[e];if(t===void 0){let n=K[e];if(!n)throw new Error(`${Q} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},Oa=Symbol.for("DONE"),Mu=Symbol.for("BREAK");function r_(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=gi(e,t);if(s===Mu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===Oa)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function n_(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},s=n?new Map:void 0;for(let i=0;i<r.value;i++){let a=gi(e,t);if(a===Mu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===Oa)throw new Error(`${Q} found map but not enough entries (got ${i} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Q} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&s.has(a)||!n&&a in o))throw new Error(`${Q} found repeat map key "${a}"`);let c=gi(e,t);if(c===Oa)throw new Error(`${Q} found map but not enough entries (got ${i} [no value], expected ${r.value})`);n?s.set(a,c):o[a]=c}return n?s:o}function gi(r,e){if(r.done())return Oa;let t=r.next();if(t.type===x.break)return Mu;if(t.type.terminal)return t.value;if(t.type===x.array)return r_(t,r,e);if(t.type===x.map)return n_(t,r,e);if(t.type===x.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=gi(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function O0(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},t_,e);let t=e.tokenizer||new Uu(r,e),n=gi(t,e);if(n===Oa)throw new Error(`${Q} did not find any content to decode`);if(n===Mu)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Ar(r,e){let[t,n]=O0(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var ar=Ye(Wo(),1);var x5=tr("ipns:utils"),v5=B("/ipns/"),o_=114,R5=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw x5.error(n),(0,ar.default)(n,I0)}let t;if(e.pubKey!=null){try{t=qr(e.pubKey)}catch(o){throw x5.error(o),o}if(!(await ft(e.pubKey)).equals(r))throw(0,ar.default)(new Error("Embedded public key did not match PeerID"),pm)}else r.publicKey!=null&&(t=qr(r.publicKey));if(t!=null)return t;throw(0,ar.default)(new Error("no public key is available"),I0)};var S5=r=>{let e=B("ipns-signature:");return ve([e,r])},La=r=>"signatureV1"in r?Wt.encode({value:B(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:B(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):Wt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data});function ln(r){let e=Wt.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw(0,ar.default)(new Error("missing data or signatureV2"),Bn);let t=A5(e.data),n=s_(t.Value),o=P(t.Validity);if(e.value!=null&&e.signatureV1!=null)return i_(e),{value:n,validityType:Wt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:Wt.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}var L0=r=>ve([v5,r.toBytes()]),_5=r=>Xe(r.slice(v5.length));var A5=r=>{let e=Ar(r);if(e.ValidityType===0)e.ValidityType=Wt.ValidityType.EOL;else throw(0,ar.default)(new Error("Unknown validity type"),_u);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},s_=r=>{if(r!=null){if(Cs(r))return`/ipns/${r.toCID().toString(Zn)}`;if(r instanceof Uint8Array){let n=P(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=ce.asCID(r);if(t!=null)return t.code===o_?`/ipns/${t.toString(Zn)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${ce.decode(r).toV1().toString()}`:`/ipfs/${ce.parse(e).toV1().toString()}`}catch{}}throw(0,ar.default)(new Error("Value must be a valid content path starting with /"),hm)},i_=r=>{if(r.data==null)throw(0,ar.default)(new Error("Record data is missing"),fm);let e=A5(r.data);if(!j(e.Value,r.value??new Uint8Array(0)))throw(0,ar.default)(new Error('Field "value" did not match between protobuf and CBOR'),Bn);if(!j(e.Validity,r.validity??new Uint8Array(0)))throw(0,ar.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Bn);if(e.ValidityType!==r.validityType)throw(0,ar.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Bn);if(e.Sequence!==r.sequence)throw(0,ar.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Bn);if(e.TTL!==r.ttl)throw(0,ar.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Bn)};var E$=tr("ipns"),b$=hr.code,x$=60*60*1e9,l_="/ipns/",v$=l_.length;var Ba=Ye(Wo(),1),I5=Ye(Su(),1);var Vu=tr("ipns:validator"),u_=1024*10,d_=async(r,e)=>{let t=ln(e),n;try{let o=S5(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Vu.error("record signature verification failed"),(0,Ba.default)(new Error("record signature verification failed"),Bn);if(t.validityType===Wt.ValidityType.EOL){if(I5.default.fromString(t.validity).toDate().getTime()<Date.now())throw Vu.error("record has expired"),(0,Ba.default)(new Error("record has expired"),dm)}else if(t.validityType!=null)throw Vu.error("unrecognized validity type"),(0,Ba.default)(new Error("unrecognized validity type"),_u);Vu("ipns record for %s is valid",t.value)};async function Ku(r,e){if(e.byteLength>u_)throw(0,Ba.default)(new Error("record too large"),mm);let t=_5(r),n=ln(e),o=await R5(t,n);await d_(o,e)}async function*Ua(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let s=n.split(e);n=s.pop()??"";for(let i=0;i<s.length;i++)yield JSON.parse(s[i])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}var U0=Ye(T5(),1);var Ro=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},M0=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},k5=r=>globalThis.DOMException===void 0?new M0(r):new DOMException(r),C5=r=>{let e=r.reason===void 0?k5("This operation was aborted."):r.reason;return e instanceof Error?e:k5(e)};function zr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout}}=e,i,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(C5(f)),f.addEventListener("abort",()=>{d(C5(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new Ro;i=s.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(f){d(f)}})()}).finally(()=>{c.clear()});return c.clear=()=>{s.clearTimeout.call(void 0,i),i=void 0},c}function F0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Fa=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=F0(this.#e,n,(s,i)=>i.priority-s.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Gt=class extends U0.default{#e;#t;#r=0;#i;#c;#p=0;#o;#l;#n;#m;#s=0;#u;#a;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Fa,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#i=e.intervalCap,this.#c=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#a=e.autoStart===!1}get#E(){return this.#t||this.#r<this.#i}get#b(){return this.#s<this.#u}#x(){this.#s--,this.#d(),this.emit("next")}#v(){this.#w(),this.#y(),this.#l=void 0}get#R(){let e=Date.now();if(this.#o===void 0){let t=this.#p-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#l===void 0&&(this.#l=setTimeout(()=>{this.#v()},t)),!0}return!1}#d(){if(this.#n.size===0)return this.#o&&clearInterval(this.#o),this.#o=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#a){let e=!this.#R;if(this.#E&&this.#b){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#o!==void 0||(this.#o=setInterval(()=>{this.#w()},this.#c),this.#p=Date.now()+this.#c)}#w(){this.#r===0&&this.#s===0&&this.#o&&(clearInterval(this.#o),this.#o=void 0),this.#r=this.#e?this.#s:0,this.#f()}#f(){for(;this.#d(););}get concurrency(){return this.#u}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#u=e,this.#f()}async#S(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let s=e({signal:t.signal});t.timeout&&(s=zr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#S(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof Ro&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#x()}},t),this.emit("add"),this.#d()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#a?(this.#a=!1,this.#f(),this):this}pause(){this.#a=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#h("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#h("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#h("idle")}async#h(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#a}};function p_(r){return r[Symbol.asyncIterator]!=null}function m_(r){if(p_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var ds=m_;var V0=B("/ipns/");function N5(r){return j(r.subarray(0,V0.byteLength),V0)}var P5=r=>Xe(r.slice(V0.length)),Hu=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Et(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!N5(e))return;let o=P5(e),s=ln(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!N5(e))throw new m("Not found","ERR_NOT_FOUND");let n=P5(e);try{let o=await this.client.getIPNS(n,t);return La(o)}catch(o){throw o.code==="ERR_BAD_RESPONSE"?new m("Not found","ERR_NOT_FOUND"):o}}},qu=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await ds(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){}};var zt=tr("delegated-routing-v1-http-api-client"),O5={concurrentRequests:4,timeout:3e4},Wu=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal),this.httpQueue=new Gt({concurrency:t.concurrentRequests??O5.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??O5.timeout,this.contentRouting=new Hu(this),this.peerRouting=new qu(this)}get[Jr](){return this.contentRouting}get[en](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){zt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ot([this.shutDownController.signal,n,t.signal]);ee(1/0,n,o);let s=Z(),i=Z();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/providers/${e.toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Providers){let g=this.#e(f);g!=null&&(yield g)}}else for await(let u of Ua(gl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){zt.error("getProviders errored:",a)}finally{o.clear(),i.resolve(),zt("getProviders finished: %c",e)}}async*getPeers(e,t={}){zt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ot([this.shutDownController.signal,n,t.signal]);ee(1/0,n,o);let s=Z(),i=Z();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Peers){let g=this.#e(f);g!=null&&(yield g)}}else for await(let u of Ua(gl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){zt.error("getPeers errored:",a)}finally{o.clear(),i.resolve(),zt("getPeers finished: %c",e)}}async getIPNS(e,t={}){zt("getIPNS starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ot([this.shutDownController.signal,n,t.signal]);ee(1/0,n,o);let s=Z(),i=Z();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await s.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(zt("getIPNS GET %s %d",a,l.status),l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("GET ipns response had no body","ERR_BAD_RESPONSE");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await Ku(L0(e),u),ln(u)}catch(c){throw zt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),i.resolve(),zt("getIPNS finished: %c",e)}}async putIPNS(e,t,n={}){zt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=ot([this.shutDownController.signal,o,n.signal]);ee(1/0,o,s);let i=Z(),a=Z();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await i.promise;let l=La(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s});if(zt("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new m("PUT ipns response had status other than 200","ERR_BAD_RESPONSE")}catch(l){throw zt.error("putIPNS PUT %s error:",c,l.stack),l}finally{s.clear(),a.resolve(),zt("putIPNS finished: %c",e)}}#e(e){let t=[],n=e.Addrs?.map(X)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:ge(e.ID),Addrs:n,Protocols:t}}};function L5(r,e={}){return new Wu(new URL(r),e)}var K0=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function $0(r){return new K0(r)}var yi={};pe(yi,{abortedError:()=>b_,closeFailedError:()=>y_,deleteFailedError:()=>U5,getFailedError:()=>w_,hasFailedError:()=>E_,notFoundError:()=>Va,openFailedError:()=>g_,putFailedError:()=>B5});var Mn=Ye(Wo(),1);function g_(r){return r=r??new Error("Open failed"),(0,Mn.default)(r,"ERR_OPEN_FAILED")}function y_(r){return r=r??new Error("Close failed"),(0,Mn.default)(r,"ERR_CLOSE_FAILED")}function B5(r){return r=r??new Error("Put failed"),(0,Mn.default)(r,"ERR_PUT_FAILED")}function w_(r){return r=r??new Error("Get failed"),(0,Mn.default)(r,"ERR_GET_FAILED")}function U5(r){return r=r??new Error("Delete failed"),(0,Mn.default)(r,"ERR_DELETE_FAILED")}function E_(r){return r=r??new Error("Has failed"),(0,Mn.default)(r,"ERR_HAS_FAILED")}function Va(r){return r=r??new Error("Not Found"),(0,Mn.default)(r,"ERR_NOT_FOUND")}function b_(r){return r=r??new Error("Aborted"),(0,Mn.default)(r,"ERR_ABORTED")}var Fn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var Ka=class extends Fn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(ct.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(ct.encode(e.multihash.bytes));if(t==null)throw Va();return t}has(e){return this.data.has(ct.encode(e.multihash.bytes))}async delete(e){this.data.delete(ct.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:ce.createV1(Oc,Pr(ct.decode(e))),block:t}}};var PH=tr("blockstore:core:tiered");var M5={...yi};var F5=Ye(Wo(),1);function Gu(r){return r=r??new Error("Not Found"),(0,F5.default)(r,"ERR_NOT_FOUND")}var V5="SHARDING";function v_(r){return r[Symbol.asyncIterator]!=null}function R_(r,e){return v_(r)?async function*(){yield*(await ro(r)).sort(e)}():function*(){yield*ro(r).sort(e)}()}var zu=R_;var Vn=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await mr(this.putMany(e,n)),e=[],await mr(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=Ut(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Ut(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>zu(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Ut(n,()=>o++>=s)}return e.limit!=null&&(n=eo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Ut(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Ut(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>zu(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Ut(n,()=>s++>=o)}return e.limit!=null&&(n=eo(n,e.limit)),n}};var fs=class extends Vn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw Gu();return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Oe(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Oe(e)}};var dq=new Oe(V5);var Rq=tr("datastore:core:tiered");function Yu(r){let e=[cr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var H0=60;function Qu(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:cr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:cr[e.type],TTL:e.TTL??e.ttl??H0,data:e.data instanceof Uint8Array?P(e.data):e.data}))}}var A_=4;function q0(r,e={}){let t=new Gt({concurrency:e.queryConcurrency??A_});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Yu(o.types).forEach(a=>{s.append("type",cr[a])}),o.onProgress?.(new me("dns:query",{detail:n}));let i=await t.add(async()=>{let a=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=Qu(await a.json());return o.onProgress?.(new me("dns:response",{detail:c})),c},{signal:o.signal});if(i==null)throw new Error("No DNS response received");return i}}function $5(){return[q0("https://cloudflare-dns.com/dns-query"),q0("https://dns.google/resolve")]}var q5=Ye(W0(),1);var G0=class{lru;constructor(e){this.lru=(0,q5.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return Qu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:cr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??H0)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function W5(r){return new G0(r)}var I_=1e3,Xu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=W5(e.cacheSize??I_),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=$5())}async query(e,t={}){let n=Yu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new me("dns:cache",{detail:o})),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new me("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var cr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(cr||(cr={}));function ju(r={}){return new Xu(r)}var Q5="/pin/",G5="/pinned-block/",z0=Zn,z5=1;function Y5(r){return r.version===0&&(r=r.toV1()),new Oe(`${Q5}${r.toString(z0)}`)}var Zu=class{datastore;blockstore;dagWalkers;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.dagWalkers=n}async*add(e,t={}){let n=Y5(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let s=new mn({concurrency:z5});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>j(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,mi(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=this.dagWalkers[e.code];if(o==null)throw new Error(`No dag walker found for cid codec ${e.code}`);let s=await this.blockstore.get(e,n);yield e;for await(let i of o.walk(s))yield*await t.add(async()=>this.#e(i,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Oe(`${G5}${z0.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=Ar(await this.datastore.get(o,n))}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,mi(s),n),n.onProgress?.(new me("helia:pin:add",e))}}async*rm(e,t={}){let n=Y5(e),o=await this.datastore.get(n,t),s=Ar(o);await this.datastore.delete(n,t);let i=new mn({concurrency:z5});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>j(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Q5+(e.cid!=null?`${e.cid.toString(Zn)}`:"")},e)){let o=ce.parse(t.toString().substring(5),Zn),s=Ar(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Oe(`${G5}${z0.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var Ju=class{log;routers;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[]}async start(){await Qn(...this.routers)}async stop(){await Xn(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of bt(...wi(this.routers,"findProviders").map(o=>o.findProviders(e,t))))n!=null&&(yield n)}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");await Promise.all(wi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(wi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(wi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");let n=this,o=bt(...wi(this.routers,"findPeer").map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s;throw new m("Could not find peer in routing","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of bt(...wi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function wi(r,e){return r.filter(t=>t[e]!=null)}var So={},Ei=r=>{r.addEventListener("message",e=>{Ei.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Ei.dispatchEvent("message",r,e)})};Ei.addEventListener=(r,e)=>{So[r]==null&&(So[r]=[]),So[r].push(e)};Ei.removeEventListener=(r,e)=>{So[r]!=null&&(So[r]=So[r].filter(t=>t===e))};Ei.dispatchEvent=function(r,e,t){So[r]!=null&&So[r].forEach(n=>n(e,t))};var Y0=Ei;var Q0="lock:worker:request-read",X0="lock:worker:release-read",j0="lock:master:grant-read",Z0="lock:worker:request-write",J0="lock:worker:release-write",e2="lock:master:grant-write";var X5=(r=21)=>Math.random().toString().substring(2);var j5=(r,e,t,n,o)=>(s,i)=>{if(i.data.type!==t)return;let a={type:i.data.type,name:i.data.name,identifier:i.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{s.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d==null||d.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(s.removeEventListener("message",l),c())};s.addEventListener("message",l)})}}}))},Z5=(r,e,t,n)=>async()=>{let o=X5();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(s=>{let i=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",i),s(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",i)})},D_={singleProcess:!1},J5=r=>{if(r=Object.assign({},D_,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return Y0.addEventListener("message",j5(t,"requestReadLock",Q0,X0,j0)),Y0.addEventListener("message",j5(t,"requestWriteLock",Z0,J0,e2)),t}return{isWorker:!0,readLock:t=>Z5(t,Q0,j0,X0),writeLock:t=>Z5(t,Z0,e2,J0)}};var hs={},_o;async function t2(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>zr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var T_=(r,e)=>{if(_o.isWorker===!0)return{readLock:_o.readLock(r,e),writeLock:_o.writeLock(r,e)};let t=new Gt({concurrency:1}),n;return{async readLock(){if(n!=null)return t2(n,e);n=new Gt({concurrency:e.concurrency,autoStart:!1});let o=n,s=t2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,t2(t,e)}}},k_={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ha(r){let e=Object.assign({},k_,r);return _o==null&&(_o=J5(e),_o.isWorker!==!0&&(_o.addEventListener("requestReadLock",t=>{hs[t.data.name]!=null&&hs[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),_o.addEventListener("requestWriteLock",async t=>{hs[t.data.name]!=null&&hs[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),hs[e.name]==null&&(hs[e.name]=T_(e.name,e)),hs[e.name]}var e1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ha({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await Qn(this.child),this.started=!0}async stop(){await Xn(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let s of e){if(await o.pins.isPinned(s))throw new Error("CID was pinned");yield s}}(),t)}finally{n()}}async has(e,t={}){let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}async createSession(e,t){let n=await this.lock.readLock();try{let o=await this.child.createSession(e,t);if(o==null)throw new m("Sessions not supported","ERR_UNSUPPORTED");return o}finally{n()}}};var t7=42;function C_(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=ce.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new M(x.tag,t7),new M(x.bytes,t)]}function N_(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function P_(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var e7={float64:!0,typeEncoders:{Object:C_,undefined:N_,number:P_}},BW={...e7,typeEncoders:{...e7.typeEncoders}};function O_(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return ce.decode(r.subarray(1))}var r2={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};r2.tags[t7]=O_;var UW={...r2,tags:r2.tags.slice()};var r7=113;var n7=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===x.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===x.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[x.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[x.negint.major](e,t){this[x.uint.major](e,t)}[x.bytes.major](e,t){throw new Error(`${di} unsupported type: Uint8Array`)}[x.string.major](e,t){this.prefix(e);let n=Iu(JSON.stringify(t.value));e.push(n.length>32?Ta(n):n)}[x.array.major](e,t){this.prefix(e),this.inRecursive.push({type:x.array,elements:0}),e.push([91])}[x.map.major](e,t){this.prefix(e),this.inRecursive.push({type:x.map,elements:0}),e.push([123])}[x.tag.major](e,t){}[x.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(i.type===x.array)e.push([93]);else if(i.type===x.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${di} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};var ps=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Q} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Q} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new M(x.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Q} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Q} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new M(x.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new M(i>=0?x.uint:x.negint,i,this._pos-e):new M(i>=0?x.uint:x.negint,BigInt(s),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Q} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new M(x.string,c,i)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Q} unexpected end of unicode escape sequence at position ${this._pos}`);let s=0;for(let i=0;i<4;i++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${Q} unexpected unicode escape character at position ${this._pos}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Q} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${Q} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${Q} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new M(x.string,D0(t),this._pos-e);default:if(s<32)throw new Error(`${Q} invalid control character at position ${this._pos}`);s<128?(t.push(s),this._pos++):o()}}throw new Error(`${Q} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new M(x.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new M(x.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new M(x.null,null,4);case 102:return this.expect([102,97,108,115,101]),new M(x.false,!1,5);case 116:return this.expect([116,114,117,101]),new M(x.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Q} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new M(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new M(x.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new M(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new M(x.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Q} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function t1(r,e){return e=Object.assign({tokenizer:new ps(r,e)},e),Ar(r,e)}var U_={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};U_.tags[42]=ce.parse;var s7=297;var eG=new TextDecoder;var tG=new TextEncoder;var F_=new TextDecoder;function n2(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function r1(r,e){let t;[t,e]=n2(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function i7(r,e){let t;return[t,e]=n2(r,e),[t&7,t>>3,e]}function V_(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=i7(r,n),s===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=r1(r,n)}else if(s===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let i;[i,n]=r1(r,n),e.Name=F_.decode(i)}else if(s===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=n2(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function a7(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=i7(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=r1(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=r1(r,t),n.push(V_(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let i={};return s&&(i.Data=s),i.Links=n||[],i}var nG=new TextEncoder,oG=2**32,sG=2**31;var cG=new TextEncoder;function c7(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var l7=112;function u7(r){let e=c7(r),t=a7(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=ce.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}var $_={codec:l7,*walk(r){yield*u7(r).Links.map(t=>t.Hash)}},H_={codec:Oc,*walk(){}},d7=42,q_={codec:r7,*walk(r){let e=[],t=[];t[d7]=n=>{if(n[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");let o=ce.decode(n.subarray(1));return e.push(o),o},Ar(r,{tags:t}),yield*e}},o2=class extends ps{tokenBuffer;constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===x.map){let t=this._next();if(t.type===x.string&&t.value==="/"){let n=this._next();if(n.type===x.string){if(this._next().type!==x.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new M(x.tag,42,0)}if(n.type===x.map){let o=this._next();if(o.type===x.string&&o.value==="bytes"){let s=this._next();if(s.type===x.string){for(let a=0;a<2;a++)if(this._next().type!==x.break)throw new Error("Invalid encoded Bytes form");let i=lt.decode(`m${s.value}`);return new M(x.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},W_={codec:s7,*walk(r){let e=[],t=[];t[d7]=n=>{let o=ce.parse(n);return e.push(o),o},t1(r,{tags:t,tokenizer:new o2(r,{tags:t,allowIndefinite:!0,allowUndefined:!0,allowNaN:!0,allowInfinity:!0,allowBigInt:!0,strict:!1,rejectDuplicateMapKeys:!1})}),yield*e}},G_={codec:i4,*walk(){}};function f7(r=[]){let e={};return[$_,H_,q_,W_,G_,...r].forEach(t=>{e[t.codec]=t}),e}var s2=new Oe("/version"),h7=1;async function p7(r){if(!await r.has(s2)){await r.put(s2,B(`${h7}`));return}let e=await r.get(s2),t=P(e);if(parseInt(t,10)!==h7)throw new Error("Unknown datastore version, a datastore migration may be required")}function m7(r=[]){let e={};return[De,Hf,hr,...r].forEach(t=>{e[t.code]=t}),e}var n1=0,o1=class extends Fn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===n1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===n1)return e.multihash.digest;if(this.child==null)throw M5.notFoundError();return this.child.get(e)}has(e){return e.multihash.code===n1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==n1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function z_(r){return r[Symbol.asyncIterator]!=null}function g7(r){return r?.then!=null}function Y_(r,e){if(z_(r))return async function*(){for await(let a of r){let c=e(a);g7(c)&&await c,yield a}}();let t=Ws(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();if(typeof e(n)?.then=="function")return async function*(){yield n;for await(let a of t){let c=e(a);g7(c)&&await c,yield a}}();let i=e;return function*(){yield n;for(let a of t)i(a),yield a}()}var qa=Y_;var s1=class r{child;hashers;started;log;logger;components;constructor(e,t={}){this.log=e.logger.forComponent(`helia:networked-storage${t.root==null?"":`:${t.root}`}`),this.logger=e.logger,this.components=e,this.child=new o1(e.blockstore),this.hashers=e.hashers??{},this.started=!1}isStarted(){return this.started}async start(){await Qn(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Xn(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){return await this.child.has(e)?(n.onProgress?.(new me("blocks:put:duplicate",e)),e):(n.onProgress?.(new me("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new me("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Ut(e,async({cid:s})=>{let i=await this.child.has(s);return i&&t.onProgress?.(new me("blocks:put-many:duplicate",s)),!i}),o=qa(n,async({cid:s,block:i})=>{t.onProgress?.(new me("blocks:put-many:providers:notify",s)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(s,i,t)))});t.onProgress?.(new me("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e)){t.onProgress?.(new me("blocks:get:providers:get",e));let n=await y7(e,this.components.blockBrokers,this.hashers[e.multihash.code],{...t,log:this.log});return t.onProgress?.(new me("blocks:get:blockstore:put",e)),await this.child.put(e,n,t),t.onProgress?.(new me("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,n,t))),n}return t.onProgress?.(new me("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new me("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(qa(e,async n=>{if(t.offline!==!0&&!await this.child.has(n)){t.onProgress?.(new me("blocks:get-many:providers:get",n));let o=await y7(n,this.components.blockBrokers,this.hashers[n.multihash.code],{...t,log:this.log});t.onProgress?.(new me("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new me("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,o,t)))}}))}async delete(e,t={}){t.onProgress?.(new me("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new me("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new me("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}async createSession(e,t){let n=await Promise.all(this.components.blockBrokers.map(async o=>o.createSession==null?o:o.createSession(e,t)));return new r({blockstore:this.child,blockBrokers:n,hashers:this.hashers,logger:this.logger},{root:e})}};function Q_(r){return typeof r.retrieve=="function"}var X_=(r,e)=>{if(e==null)throw new m(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`,"ERR_UNKNOWN_HASH_ALG");return async t=>{let n=await e.digest(t);if(!j(n.digest,r.multihash.digest))throw new m("Hash of downloaded block did not match multihash from passed CID","ERR_HASH_MISMATCH")}};async function y7(r,e,t,n){let o=X_(r,t),s=new AbortController,i=ot([s.signal,n.signal]);ee(1/0,s.signal,i);let a=[];for(let c of e)Q_(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),l=!0}});return l||await o(d),d}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{s.abort(),i.clear()}}var i1=class{blockstore;datastore;pins;logger;routing;dagWalkers;hashers;dns;log;constructor(e){this.logger=e.logger??no(),this.log=this.logger.forComponent("helia"),this.hashers=m7(e.hashers),this.dagWalkers=f7(e.dagWalkers),this.dns=e.dns??ju();let t={blockstore:e.blockstore,datastore:e.datastore,hashers:this.hashers,dagWalkers:this.dagWalkers,logger:this.logger,blockBrokers:[],dns:this.dns,...e.components??{}};this.routing=t.routing=new Ju(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[Jr]!=null&&s.push(o[Jr]),o[en]!=null&&s.push(o[en]),s})});let n=new s1(t);this.pins=new Zu(e.datastore,n,this.dagWalkers),this.blockstore=new e1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await p7(this.datastore),await Qn(this.blockstore,this.datastore,this.routing)}async stop(){await Xn(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await mr(o.deleteMany(async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new me("helia:gc:deleted",s))}catch(i){n.log.error("Error during gc",i),e.onProgress?.(new me("helia:gc:error",i))}}()))}finally{t()}this.log("gc finished")}};var a1=class extends i1{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};function i2(){let r=Z(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function w7(){let r=i2(),e=i2();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var bi=!!globalThis.process?.env?.DUMP_SESSION_KEYS;var Kn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4));function E7(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}var b7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),j_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!j_)throw new Error("Non little-endian hardware is not supported");function c1(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function l1(r){if(typeof r=="string")r=c1(r);else if(E7(r))r=r.slice();else throw new Error(`expected Uint8Array, got ${typeof r}`);return r}var Z_=r=>Object.prototype.toString.call(r)==="[object Object]"&&r.constructor===Object;function x7(r,e){if(e!==void 0&&(typeof e!="object"||!Z_(e)))throw new Error("options must be object or undefined");return Object.assign(r,e)}function ms(r,e){if(!E7(r))throw new Error("Uint8Array expected");if(typeof e=="number"&&r.length!==e)throw new Error(`Uint8Array length ${e} expected`)}function v7(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var a2=(r,e)=>(Object.assign(e,r),e);function c2(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}function u1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`wrong positive integer: ${r}`)}function l2(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function J_(r){return r!=null&&typeof r=="object"&&(r instanceof Uint8Array||r.constructor.name==="Uint8Array")}function xi(r,...e){if(!J_(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function u2(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function R7(r,e){xi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Rt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,d2=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=l1(e),ms(e,32);let t=Rt(e,0),n=Rt(e,2),o=Rt(e,4),s=Rt(e,6),i=Rt(e,8),a=Rt(e,10),c=Rt(e,12),l=Rt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=Rt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],g=i[6],h=i[7],p=i[8],y=i[9],w=Rt(e,t+0),b=Rt(e,t+2),E=Rt(e,t+4),S=Rt(e,t+6),_=Rt(e,t+8),A=Rt(e,t+10),D=Rt(e,t+12),R=Rt(e,t+14),k=s[0]+(w&8191),O=s[1]+((w>>>13|b<<3)&8191),N=s[2]+((b>>>10|E<<6)&8191),L=s[3]+((E>>>7|S<<9)&8191),F=s[4]+((S>>>4|_<<12)&8191),Y=s[5]+(_>>>1&8191),I=s[6]+((_>>>14|A<<2)&8191),C=s[7]+((A>>>11|D<<5)&8191),$=s[8]+((D>>>8|R<<8)&8191),T=s[9]+(R>>>5|o),v=0,U=v+k*a+O*(5*y)+N*(5*p)+L*(5*h)+F*(5*g);v=U>>>13,U&=8191,U+=Y*(5*f)+I*(5*u)+C*(5*d)+$*(5*l)+T*(5*c),v+=U>>>13,U&=8191;let V=v+k*c+O*a+N*(5*y)+L*(5*p)+F*(5*h);v=V>>>13,V&=8191,V+=Y*(5*g)+I*(5*f)+C*(5*u)+$*(5*d)+T*(5*l),v+=V>>>13,V&=8191;let H=v+k*l+O*c+N*a+L*(5*y)+F*(5*p);v=H>>>13,H&=8191,H+=Y*(5*h)+I*(5*g)+C*(5*f)+$*(5*u)+T*(5*d),v+=H>>>13,H&=8191;let se=v+k*d+O*l+N*c+L*a+F*(5*y);v=se>>>13,se&=8191,se+=Y*(5*p)+I*(5*h)+C*(5*g)+$*(5*f)+T*(5*u),v+=se>>>13,se&=8191;let ie=v+k*u+O*d+N*l+L*c+F*a;v=ie>>>13,ie&=8191,ie+=Y*(5*y)+I*(5*p)+C*(5*h)+$*(5*g)+T*(5*f),v+=ie>>>13,ie&=8191;let de=v+k*f+O*u+N*d+L*l+F*c;v=de>>>13,de&=8191,de+=Y*a+I*(5*y)+C*(5*p)+$*(5*h)+T*(5*g),v+=de>>>13,de&=8191;let ae=v+k*g+O*f+N*u+L*d+F*l;v=ae>>>13,ae&=8191,ae+=Y*c+I*a+C*(5*y)+$*(5*p)+T*(5*h),v+=ae>>>13,ae&=8191;let le=v+k*h+O*g+N*f+L*u+F*d;v=le>>>13,le&=8191,le+=Y*l+I*c+C*a+$*(5*y)+T*(5*p),v+=le>>>13,le&=8191;let Be=v+k*p+O*h+N*g+L*f+F*u;v=Be>>>13,Be&=8191,Be+=Y*d+I*l+C*c+$*a+T*(5*y),v+=Be>>>13,Be&=8191;let ke=v+k*y+O*p+N*h+L*g+F*f;v=ke>>>13,ke&=8191,ke+=Y*u+I*d+C*l+$*c+T*a,v+=ke>>>13,ke&=8191,v=(v<<2)+v|0,v=v+U|0,U=v&8191,v=v>>>13,V+=v,s[0]=U,s[1]=V,s[2]=H,s[3]=se,s[4]=ie,s[5]=de,s[6]=ae,s[7]=le,s[8]=Be,s[9]=ke}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535}update(e){u2(this);let{buffer:t,blockLen:n}=this;e=l1(e);let o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){this.h.fill(0),this.r.fill(0),this.buffer.fill(0),this.pad.fill(0)}digestInto(e){u2(this),R7(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function eA(r){let e=(n,o)=>r(o).update(l1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var S7=eA(r=>new d2(r));var tA=c1("expand 16-byte k"),rA=c1("expand 32-byte k"),nA=Kn(tA),oA=Kn(rA);function z(r,e){return r<<e|r>>>32-e}function f2(r){return r.byteOffset%4===0}var d1=64,sA=16,A7=2**32-1,_7=new Uint32Array;function iA(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(d1),d=Kn(l),u=f2(o)&&f2(s),f=u?Kn(o):_7,g=u?Kn(s):_7;for(let h=0;h<c;i++){if(r(e,t,n,d,i,a),i>=A7)throw new Error("arx: counter overflow");let p=Math.min(d1,c-h);if(u&&p===d1){let y=h/4;if(h%4!==0)throw new Error("arx: invalid block position");for(let w=0,b;w<sA;w++)b=y+w,g[b]=f[b]^d[w];h+=d1;continue}for(let y=0,w;y<p;y++)w=h+y,s[w]=o[w]^l[y];h+=p}}function h2(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=x7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return u1(o),u1(i),l2(s),l2(t),(a,c,l,d,u=0)=>{xi(a),xi(c),xi(l);let f=l.length;if(d||(d=new Uint8Array(f)),xi(d),u1(u),u<0||u>=A7)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let g=[],h=a.length,p,y;if(h===32)p=a.slice(),g.push(p),y=oA;else if(h===16&&t)p=new Uint8Array(32),p.set(a),p.set(a,16),y=nA,g.push(p);else throw new Error(`arx: invalid 32-byte key, got length=${h}`);f2(c)||(c=c.slice(),g.push(c));let w=Kn(p);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,w,Kn(c.subarray(0,16)),w),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let S=new Uint8Array(12);S.set(c,s?0:12-c.length),c=S,g.push(c)}let E=Kn(c);for(iA(r,y,w,E,l,d,u,i);g.length>0;)g.pop().fill(0);return d}}function T7(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],g=e[3],h=e[4],p=e[5],y=e[6],w=e[7],b=o,E=t[0],S=t[1],_=t[2],A=i,D=a,R=c,k=l,O=d,N=u,L=f,F=g,Y=h,I=p,C=y,$=w,T=b,v=E,U=S,V=_;for(let se=0;se<s;se+=2)A=A+O|0,T=z(T^A,16),Y=Y+T|0,O=z(O^Y,12),A=A+O|0,T=z(T^A,8),Y=Y+T|0,O=z(O^Y,7),D=D+N|0,v=z(v^D,16),I=I+v|0,N=z(N^I,12),D=D+N|0,v=z(v^D,8),I=I+v|0,N=z(N^I,7),R=R+L|0,U=z(U^R,16),C=C+U|0,L=z(L^C,12),R=R+L|0,U=z(U^R,8),C=C+U|0,L=z(L^C,7),k=k+F|0,V=z(V^k,16),$=$+V|0,F=z(F^$,12),k=k+F|0,V=z(V^k,8),$=$+V|0,F=z(F^$,7),A=A+N|0,V=z(V^A,16),C=C+V|0,N=z(N^C,12),A=A+N|0,V=z(V^A,8),C=C+V|0,N=z(N^C,7),D=D+L|0,T=z(T^D,16),$=$+T|0,L=z(L^$,12),D=D+L|0,T=z(T^D,8),$=$+T|0,L=z(L^$,7),R=R+F|0,v=z(v^R,16),Y=Y+v|0,F=z(F^Y,12),R=R+F|0,v=z(v^R,8),Y=Y+v|0,F=z(F^Y,7),k=k+O|0,U=z(U^k,16),I=I+U|0,O=z(O^I,12),k=k+O|0,U=z(U^k,8),I=I+U|0,O=z(O^I,7);let H=0;n[H++]=i+A|0,n[H++]=a+D|0,n[H++]=c+R|0,n[H++]=l+k|0,n[H++]=d+O|0,n[H++]=u+N|0,n[H++]=f+L|0,n[H++]=g+F|0,n[H++]=h+Y|0,n[H++]=p+I|0,n[H++]=y+C|0,n[H++]=w+$|0,n[H++]=b+T|0,n[H++]=E+v|0,n[H++]=S+U|0,n[H++]=_+V|0}function aA(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],g=e[5],h=e[6],p=e[7],y=t[0],w=t[1],b=t[2],E=t[3];for(let _=0;_<20;_+=2)o=o+c|0,y=z(y^o,16),f=f+y|0,c=z(c^f,12),o=o+c|0,y=z(y^o,8),f=f+y|0,c=z(c^f,7),s=s+l|0,w=z(w^s,16),g=g+w|0,l=z(l^g,12),s=s+l|0,w=z(w^s,8),g=g+w|0,l=z(l^g,7),i=i+d|0,b=z(b^i,16),h=h+b|0,d=z(d^h,12),i=i+d|0,b=z(b^i,8),h=h+b|0,d=z(d^h,7),a=a+u|0,E=z(E^a,16),p=p+E|0,u=z(u^p,12),a=a+u|0,E=z(E^a,8),p=p+E|0,u=z(u^p,7),o=o+l|0,E=z(E^o,16),h=h+E|0,l=z(l^h,12),o=o+l|0,E=z(E^o,8),h=h+E|0,l=z(l^h,7),s=s+d|0,y=z(y^s,16),p=p+y|0,d=z(d^p,12),s=s+d|0,y=z(y^s,8),p=p+y|0,d=z(d^p,7),i=i+u|0,w=z(w^i,16),f=f+w|0,u=z(u^f,12),i=i+u|0,w=z(w^i,8),f=f+w|0,u=z(u^f,7),a=a+c|0,b=z(b^a,16),g=g+b|0,c=z(c^g,12),a=a+c|0,b=z(b^a,8),g=g+b|0,c=z(c^g,7);let S=0;n[S++]=o,n[S++]=s,n[S++]=i,n[S++]=a,n[S++]=y,n[S++]=w,n[S++]=b,n[S++]=E}var cA=h2(T7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),lA=h2(T7,{counterRight:!1,counterLength:8,extendNonceFn:aA,allowShortKeys:!1});var uA=new Uint8Array(16),I7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(uA.subarray(t))},dA=new Uint8Array(32);function D7(r,e,t,n,o){let s=r(e,t,dA),i=S7.create(s);o&&I7(i,o),I7(i,n);let a=new Uint8Array(16),c=b7(a);c2(c,0,BigInt(o?o.length:0),!0),c2(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return s.fill(0),l}var k7=r=>(e,t,n)=>(ms(e,32),ms(t),{encrypt:(s,i)=>{let a=s.length,c=a+16;i?ms(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=D7(r,e,t,i.subarray(0,-16),n);return i.set(l,a),i},decrypt:(s,i)=>{let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");i?ms(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=D7(r,e,t,l,n);if(!v7(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),i}}),p2=a2({blockSize:64,nonceLength:12,tagLength:16},k7(cA)),bz=a2({blockSize:64,nonceLength:24,tagLength:16},k7(lA));function N7(r,e,t){return Zo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),fo(r,Br(t),Br(e))}var m2=new Uint8Array([0]),C7=new Uint8Array;function P7(r,e,t,n=32){if(Zo(r),oo(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=C7);let s=new Uint8Array(o*r.outputLen),i=fo.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)m2[0]=l+1,a.update(l===0?C7:c).update(t).update(m2).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),m2.fill(0),s.slice(0,n)}var g2={hashSHA256(r){return bo(r.subarray())},getHKDF(r,e){let t=N7(bo,e,r),o=P7(bo,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=wa.utils.randomPrivateKey();return{publicKey:wa.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:wa.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return wa.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return p2(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return p2(n,e,t).decrypt(r.subarray(),o)}};var O7=g2;function L7(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var vi=r=>{let e=ze(2);return e[0]=r>>8,e[1]=r,e};vi.bytes=2;var Wa=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Wa.bytes=2;function B7(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function y2(r,e){!e.enabled||!bi||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${P(r.privateKey,"hex")}`)):e("Missing local static keys."))}function w2(r,e){!e.enabled||!bi||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${P(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function U7(r,e){!e.enabled||!bi||e(r?`REMOTE_STATIC_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote static public key.")}function E2(r,e){!e.enabled||!bi||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function b2(r,e,t){!t.enabled||!bi||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&P(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&P(e.k,"hex")}`))}function $n(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=ze(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function f1(r,e){for(let t=0;t<r.byteLength;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return r.byteLength>e.byteLength?1:r.byteLength<e.byteLength?-1:0}var h1=class r extends Error{code;constructor(e="Unexpected Peer"){super(e),this.code=r.code}static code="ERR_UNEXPECTED_PEER"},Ri=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var fA=0,hA=4294967295,pA="Cipherstate has reached maximum n, a new handshake must be performed",p1=class{n;bytes;view;constructor(e=fA){this.n=e,this.bytes=Ce(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>hA)throw new Error(pA)}};var gs=Ce(0),Si=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new p1(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},x2=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=B(t,"utf-8");this.h=mA(e,n),this.ck=this.h,this.cs=new Si(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Si(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ue(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,gs);return[new Si(this.crypto,e),new Si(this.crypto,t)]}},v2=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new x2(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Ga=class extends v2{writeMessageA(e){return new ue(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ue(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ue(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ri(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Ri(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Ri(`handshake stage 2 validation fail: ${t.message}`)}}};function mA(r,e){if(e.length<=32){let t=Ce(32);return t.set(e),t}else return r.hash(e)}var m1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(m1||(m1={}));var za;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),m1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:Ce(0),identitySig:Ce(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=m1.codec().decode(t,t.uint32());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(za||(za={}));async function R2(r,e,t){let n=await r.sign(M7(e));return za.encode({identityKey:r.public.bytes,identitySig:n,extensions:t})}async function S2(r,e,t){try{let n=za.decode(r);if(t){let i=t.subarray();if(!j(i,n.identityKey))throw new Error(`Payload identity key ${P(n.identityKey,"hex")} does not match expected remote identity key ${P(i,"hex")}`)}if(!e)throw new Error("Remote static does not exist");let o=M7(e);if(!await qr(n.identityKey).verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new h1(n.message)}}function M7(r){let e=B("noise-libp2p-static-key:");return r instanceof Uint8Array?ve([e,r],e.length+r.length):(r.prepend(e),r)}async function F7(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await R2(o,i.publicKey,c),d=new Ga({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:i});y2(d.s,e),e.trace("Stage 0 - Initiator starting to send first message."),await t.write(d.writeMessageA(gs)),e.trace("Stage 0 - Initiator finished sending first message."),w2(d.e,e),e.trace("Stage 1 - Initiator waiting to receive first message from responder...");let u=d.readMessageB(await t.read());e.trace("Stage 1 - Initiator received the message."),E2(d.re,e),U7(d.rs,e),e.trace("Initiator going to check remote's signature...");let f=await S2(u,d.rs,a);e.trace("All good with the signature!"),e.trace("Stage 2 - Initiator sending third handshake message."),await t.write(d.writeMessageC(l)),e.trace("Stage 2 - Initiator sent message with signed payload.");let[g,h]=d.ss.split();return b2(g,h,e),{payload:f,encrypt:p=>g.encryptWithAd(gs,p),decrypt:(p,y)=>h.decryptWithAd(gs,p,y)}}async function V7(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await R2(o,i.publicKey,c),d=new Ga({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:i});y2(d.s,e),e.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await t.read()),e.trace("Stage 0 - Responder received first message."),E2(d.re,e),e.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await t.write(d.writeMessageB(l)),e.trace("Stage 1 - Responder sent the second handshake message with signed payload."),w2(d.e,e),e.trace("Stage 2 - Responder waiting for third handshake message...");let u=d.readMessageC(await t.read());e.trace("Stage 2 - Responder received the message, finished handshake.");let f=await S2(u,d.rs,a),[g,h]=d.ss.split();return b2(g,h,e),{payload:f,encrypt:p=>h.encryptWithAd(gs,p),decrypt:(p,y)=>g.decryptWithAd(gs,p,y)}}var $7=16;function H7(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let s=o+65519;s>n.length&&(s=n.length);let i;n instanceof Uint8Array?i=r.encrypt(n.subarray(o,s)):i=r.encrypt(n.sublist(o,s)),e?.encryptedPackets.increment(),yield new ue(vi(i.byteLength),i)}}}function q7(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let s=o+65535;if(s>n.length&&(s=n.length),s-$7<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-$7);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var g1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e;let c=s??O7;this.crypto=L7(c),this.extensions=o,this.metrics=a?B7(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??Ce(0)}async secureOutbound(e,t,n){let o=yr(t,{lengthEncoder:vi,lengthDecoder:Wa,maxDataLength:65535});if(!e.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Rr(e.privateKey),i=n?.publicKey,a=await this.performHandshakeInitiator(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ft(a.payload.identityKey)}}async secureInbound(e,t,n){let o=yr(t,{lengthEncoder:vi,lengthDecoder:Wa,maxDataLength:65535});if(!e.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Rr(e.privateKey),i=n?.publicKey,a=await this.performHandshakeResponder(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ft(a.payload.identityKey)}}async performHandshakeInitiator(e,t,n){let o;try{o=await F7({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async performHandshakeResponder(e,t,n){let o;try{o=await V7({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async createSecureConnection(e,t){let[n,o]=w7(),s=e.unwrap();return await Ke(n,H7(t,this.metrics),s,i=>Kt(i,{lengthDecoder:Wa}),q7(t,this.metrics),n),o}};function _i(r={}){return e=>new g1(e,r)}function y1(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var Ai="ERR_INVALID_FRAME",_2="ERR_UNREQUESTED_PING",A2="ERR_NOT_MATCHING_PING",I2="ERR_STREAM_ALREADY_EXISTS",D2="ERR_DECODE_INVALID_VERSION",T2="ERR_BOTH_CLIENTS",k2="ERR_RECV_WINDOW_EXCEEDED",W7=new Set([Ai,_2,A2,I2,D2,T2,k2]),Ao="ERR_INVALID_CONFIG",w1="ERR_MUXER_LOCAL_CLOSED",C2="ERR_MUXER_REMOTE_CLOSED";var G7="ERR_STREAM_ABORT",z7="ERROR_MAX_OUTBOUND_STREAMS_EXCEEDED",Y7="ERR_DECODE_IN_PROGRESS",Qa=256*1024,Q7=16*1024*1024;var X7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Qa,maxStreamWindowSize:Q7,maxMessageSize:64*1024};function j7(r){if(r.keepAliveInterval<=0)throw new m("keep-alive interval must be positive",Ao);if(r.maxInboundStreams<0)throw new m("max inbound streams must be larger or equal 0",Ao);if(r.maxOutboundStreams<0)throw new m("max outbound streams must be larger or equal 0",Ao);if(r.initialStreamWindowSize<Qa)throw new m("InitialStreamWindowSize must be larger or equal 256 kB",Ao);if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new m("MaxStreamWindowSize must be larger than the InitialStreamWindowSize",Ao);if(r.maxStreamWindowSize>2**32-1)throw new m("MaxStreamWindowSize must be less than equal MAX_UINT32",Ao);if(r.maxMessageSize<1024)throw new m("MaxMessageSize must be greater than a kilobyte",Ao)}var Ze;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ze||(Ze={}));var We;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(We||(We={}));var XY=Object.values(We).filter(r=>typeof r!="string"),Z7=0,Ir;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Ir||(Ir={}));var Io=12;var J7=2**24;function gA(r){if(r[0]!==Z7)throw new m("Invalid frame version",D2);return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*J7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*J7+(r[9]<<16)+(r[10]<<8)+r[11]}}var E1=class{source;buffer;frameInProgress;constructor(e){this.source=yA(e),this.buffer=new ue,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Ze.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new m("decoding frame already in progress",Y7);if(this.buffer.length<Io)return;let e=gA(this.buffer.subarray(0,Io));return this.buffer.consume(Io),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function yA(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function N2(r){let e=new Uint8Array(Io);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function eg(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function b1(r,e){let t=y1(r).return?.();eg(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var wA="ERR_STREAM_RESET",EA="ERR_SINK_INVALID_STATE",bA=5e3;function P2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Do=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=Z(),this.closed=Z(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??bA,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=dt({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new m(`writable end state is "${this.writeStatus}" not "ready"`,EA);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);P2(o)&&await o}let n=()=>{b1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ue(o):o;let s=this.sendData(o,t);P2(s)&&(this.sendingData=Z(),await s,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await Ot(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully")}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await Ot(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await Ot(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await Ot(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();P2(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new m("stream reset",wA);this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Dr;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Dr||(Dr={}));var x1=class extends Do{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Dr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Qa,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=qa(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Io,e.length),o=this.getSendFlags();this.sendFrame({type:Ze.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Ze.WindowUpdate,flag:We.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|We.FIN;this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new m("stream aborted",G7)):t()};e.signal?.addEventListener("abort",o);try{await new Promise((s,i)=>{this.sendWindowCapacityUpdate=()=>{s()},n=i,t=s})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new m("receive window exceeded",k2,{available:this.recvWindowCapacity,recv:e.length});let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&We.ACK)===We.ACK&&this.state===Dr.SYNSent&&(this.state=Dr.Established),(e&We.FIN)===We.FIN&&this.remoteCloseWrite(),(e&We.RST)===We.RST&&this.reset()}getSendFlags(){switch(this.state){case Dr.Init:return this.state=Dr.SYNSent,We.SYN;case Dr.SYNReceived:return this.state=Dr.Established,We.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:o})}};var tg="/yamux/1.0.0",xA=500,v1=class{protocol=tg;_components;_init;constructor(e,t={}){this._components=e,this._init=t}createStreamMuxer(e){return new O2(this._components,{...this._init,...e})}},O2=class{protocol=tg;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...X7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),j7(this.config),this.closeController=new AbortController,ee(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=dt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=y1(n);if(a.return!=null){let c=a.return();vA(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new E1(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}s=Ir.NormalTermination}catch(a){let c=a.code;W7.has(c)?(this.log?.error("protocol error in sink",a),s=Ir.ProtocolError):(this.log?.error("internal error in sink",a),s=Ir.InternalError),i=a}this.log?.trace("muxer sink ended"),i!=null?this.abort(i,s):await this.close({reason:s})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new m("muxer closed remotely",C2);if(this.localGoAway!==void 0)throw new m("muxer closed locally",w1);let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new m("max outbound streams exceeded",z7);this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Dr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new m("muxer closed remotely",C2);if(this.localGoAway!==void 0)throw new m("muxer closed locally",w1);if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new m("muxer closed locally",w1))};this.closeController.signal.addEventListener("abort",i,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",i),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Ir.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(xA);ee(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Ir.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new m("Stream already exists",I2,{id:e});let s=new x1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:s}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Ze.Ping:{this.handlePing(e);return}case Ze.GoAway:{this.handleGoAway(s);return}default:throw new m("Invalid frame type",Ai,{header:e})}else switch(e.type){case Ze.Data:case Ze.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new m("Invalid frame type",Ai,{header:e})}}handlePing(e){if(e.flag===We.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,We.ACK);else if(e.flag===We.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new m("Invalid frame flag",Ai,{header:e})}handlePingResponse(e){if(this.activePing===void 0)throw new m("ping not requested",_2);if(this.activePing.id!==e)throw new m("ping doesn't match our id",A2);this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Ir[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:s}=e;(o&We.SYN)===We.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===Ze.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.("frame for missing stream id=%s",n);return}switch(s){case Ze.WindowUpdate:{i.handleWindowUpdate(e);return}case Ze.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new m("both endpoints are clients",T2);if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Ze.WindowUpdate,flag:We.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Ze.WindowUpdate,flag:We.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Dr.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Ze.Data){if(t===void 0)throw new m("invalid frame",Ai);this.source.push(new ue(N2(e),t))}else this.source.push(N2(e))}sendPing(e,t=We.SYN){t===We.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Ze.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Ir.NormalTermination){this.log?.("sending GoAway reason=%s",Ir[e]),this.localGoAway=e,this.sendFrame({type:Ze.GoAway,flag:0,streamID:0,length:e})}};function vA(r){return r!=null&&typeof r.then=="function"}function rg(r={}){return e=>new v1(e,r)}var R1=async()=>{let r=await Da("Ed25519"),e=await RA(r);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function RA(r){return ft(S0(r.public),_0(r))}var S1=globalThis.CustomEvent??Event;async function*Hn(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,s=[],i=Z(),a=Z(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let h of r){if(s.length===t&&(i=Z(),await i.promise),d)break;let p={done:!1};s.push(p),h().then(y=>{p.done=!0,p.ok=!0,p.value=y,o.dispatchEvent(new S1("task-complete"))},y=>{p.done=!0,p.err=y,o.dispatchEvent(new S1("task-complete"))})}c=!0,o.dispatchEvent(new S1("task-complete"))}catch(h){l=h,o.dispatchEvent(new S1("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(h=>h.done)}function*f(){for(;s.length>0&&s[0].done;){let h=s[0];if(s.shift(),h.ok)yield h.value;else throw d=!0,i.resolve(),h.err;i.resolve()}}function*g(){for(;u();)for(let h=0;h<s.length;h++)if(s[h].done){let p=s[h];if(s.splice(h,1),h--,p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}for(;;){if(u()||(a=Z(),await a.promise),l!=null)throw l;if(n?yield*f():yield*g(),c&&s.length===0)break}}var ng="libp2p",og="autonat",sg="1.0.0";var he;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>$e(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>$e(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,g={})=>{if(g.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let h of u.addrs)f.uint32(18),f.bytes(h);g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={addrs:[]},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.id=u.bytes();break;case 2:g.addrs.push(u.bytes());break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>re(u,l.codec()),l.decode=u=>te(u,l.codec())})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,g={})=>{g.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.peer=r.PeerInfo.codec().decode(u,u.uint32());break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>re(u,l.codec()),l.decode=u=>te(u,l.codec())})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,g={})=>{g.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.status=r.ResponseStatus.codec().decode(u);break;case 2:g.statusText=u.string();break;case 3:g.addr=u.bytes();break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>re(u,l.codec()),l.decode=u=>te(u,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={},f=d==null?l.len:l.pos+d;for(;l.pos<f;){let g=l.uint32();switch(g>>>3){case 1:u.type=r.MessageType.codec().decode(l);break;case 2:u.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:u.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(g&7);break}}return u})),c),r.encode=l=>re(l,r.codec()),r.decode=l=>te(l,r.codec())})(he||(he={}));var L2=4,_1=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??ng}/${og}/${sg}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new m("handleIncomingAutonatStream timeout",pn))};t.addEventListener("abort",n,{once:!0}),ee(1/0,t);let o=this.components.addressManager.getAddresses().map(s=>s.toOptions().host);try{let s=this;await Ke(e.stream,i=>Kt(i),async function*(i){let a=await ds(i);if(a==null){s.log("no message received"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=he.decode(a)}catch(p){s.log.error("could not decode message",p),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){s.log.error("dial was missing from message"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let d,u=l.peer;if(u==null||u.id==null){s.log.error("PeerId missing from message"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{d=Xe(u.id)}catch(p){s.log.error("invalid PeerId",p),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(s.log("incoming request from %p",d),!e.connection.remotePeer.equals(d)){s.log("target peer %p did not equal sending peer %p",d,e.connection.remotePeer),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let f=u.addrs.map(p=>X(p)).filter(p=>{let y=p.toOptions().host===e.connection.remoteAddr.toOptions().host;return s.log.trace("request to dial %a was sent from %a is same host %s",p,e.connection.remoteAddr,y),y}).filter(p=>{let y=p.toOptions().host,w=!($t(y)??!1);return s.log.trace("host %s was public %s",y,w),w}).filter(p=>{let y=p.toOptions().host,w=!o.includes(y);return s.log.trace("host %s was not our host %s",y,w),w}).filter(p=>{let y=!!s.components.transportManager.transportForMultiaddr(p);return s.log.trace("transport for %a is supported %s",p,y),y}).map(p=>(p.getPeerId()==null&&(p=p.encapsulate(`/p2p/${d.toString()}`)),p));if(f.length===0){s.log("no valid multiaddrs for %p in message",d),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}s.log("dial multiaddrs %s for peer %p",f.map(p=>p.toString()).join(", "),d);let g="",h=f[0];for await(let p of f){let y;h=p;try{if(y=await s.components.connectionManager.openConnection(p,{signal:t}),!y.remoteAddr.equals(p))throw s.log.error("tried to dial %a but dialed %a",p,y.remoteAddr),new Error("Unexpected remote address");s.log("Success %p",d),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.OK,addr:y.remoteAddr.decapsulateCode(J("p2p").code).bytes}});return}catch(w){s.log("could not dial %p",d,w),g=w.message}finally{y!=null&&await y.close()}}yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_DIAL_ERROR,statusText:g,addr:h.bytes}})},i=>gr(i),e.stream)}catch(s){this.log.error("error handling incoming autonat stream",s)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(s=>{let i=s.toOptions();return!($t(i.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);ee(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(u=>u.toString()).join(", "));let s=he.encode({type:he.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(u=>u.bytes)}}}),a=(await R1()).toBytes(),c={},l=[],d=async u=>{let f=()=>{};try{this.log("asking %p to verify multiaddr",u.id);let g=await o.components.connectionManager.openConnection(u.id,{signal:n}),h=await g.newStream(this.protocol,{signal:n});f=()=>{h.abort(new m("verifyAddress timeout",pn))},n.addEventListener("abort",f,{once:!0});let p=await Ke([s],w=>gr(w),h,w=>Kt(w),async w=>ds(w));if(p==null){this.log("no response received from %p",g.remotePeer);return}let y=he.decode(p);if(y.type!==he.MessageType.DIAL_RESPONSE||y.dialResponse==null){this.log("invalid autonat response from %p",g.remotePeer);return}if(y.dialResponse.status===he.ResponseStatus.OK){let w=g.remoteAddr.toOptions(),b;if(w.family===4)b=w.host.split(".")[0];else if(w.family===6)b=w.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',w.host);return}if(l.includes(b)){this.log("already have response from network segment %d - %s",b,w.host);return}l.push(b)}return y.dialResponse}catch(g){this.log.error("error asking remote to verify multiaddr",g)}finally{n.removeEventListener("abort",f)}};for await(let u of Hn(Et(this.components.peerRouting.getClosestPeers(a,{signal:n}),f=>async()=>d(f)),{concurrency:L2}))try{if(u==null)continue;let f=u.addr==null?t[0]:X(u.addr);if(this.log("autonat response for %a is %s",f,u.status),u.status===he.ResponseStatus.E_BAD_REQUEST||u.status===he.ResponseStatus.E_DIAL_REFUSED||u.addr==null&&t.length>1)continue;if(!t.some(h=>h.equals(f))){this.log("peer reported %a as %s but it was not in our observed address list",f,u.status);continue}let g=f.toString();if(c[g]==null&&(c[g]={success:0,failure:0}),u.status===he.ResponseStatus.OK?c[g].success++:u.status===he.ResponseStatus.E_DIAL_ERROR&&c[g].failure++,c[g].success===L2){this.log("%a is externally dialable",f),e.confirmObservedAddr(f);return}if(c[g].failure===L2){this.log("%a is not externally dialable",f),e.removeObservedAddr(f);return}}catch(f){this.log.error("could not verify external address",f)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function ig(r={}){return e=>new _1(e,r)}var TA=q("dns4"),kA=q("dns6"),CA=q("dnsaddr"),ko=nt(q("dns"),CA,TA,kA),A1=nt(q("ip4"),q("ip6")),Ii=nt(oe(A1,q("tcp")),oe(ko,q("tcp"))),I1=oe(A1,q("udp")),NA=oe(I1,q("utp")),PA=oe(I1,q("quic")),OA=oe(I1,q("quic-v1")),B2=nt(oe(Ii,q("ws")),oe(ko,q("ws"))),Di=nt(oe(B2,q("p2p")),B2),U2=nt(oe(Ii,q("wss")),oe(ko,q("wss")),oe(Ii,q("tls"),q("ws")),oe(ko,q("tls"),q("ws"))),ys=nt(oe(U2,q("p2p")),U2),M2=nt(oe(Ii,q("http")),oe(A1,q("http")),oe(ko,q("http"))),F2=nt(oe(Ii,q("https")),oe(A1,q("https")),oe(ko,q("https"))),ag=oe(I1,q("webrtc-direct"),q("certhash")),ug=nt(oe(ag,q("p2p")),ag),cg=oe(OA,q("webtransport"),q("certhash"),q("certhash")),dg=nt(oe(cg,q("p2p")),cg),fg=nt(oe(Di,q("p2p-webrtc-star"),q("p2p")),oe(ys,q("p2p-webrtc-star"),q("p2p")),oe(Di,q("p2p-webrtc-star")),oe(ys,q("p2p-webrtc-star"))),aX=nt(oe(Di,q("p2p-websocket-star"),q("p2p")),oe(ys,q("p2p-websocket-star"),q("p2p")),oe(Di,q("p2p-websocket-star")),oe(ys,q("p2p-websocket-star"))),hg=nt(oe(M2,q("p2p-webrtc-direct"),q("p2p")),oe(F2,q("p2p-webrtc-direct"),q("p2p")),oe(M2,q("p2p-webrtc-direct")),oe(F2,q("p2p-webrtc-direct"))),ws=nt(B2,U2,M2,F2,fg,hg,Ii,NA,PA,ko,ug,dg),cX=nt(oe(ws,q("p2p-stardust"),q("p2p")),oe(ws,q("p2p-stardust"))),To=nt(oe(ws,q("p2p")),fg,hg,ug,dg,q("p2p")),lg=nt(oe(To,q("p2p-circuit"),To),oe(To,q("p2p-circuit")),oe(q("p2p-circuit"),To),oe(ws,q("p2p-circuit")),oe(q("p2p-circuit"),ws),q("p2p-circuit")),pg=()=>nt(oe(lg,pg),lg),Yr=pg(),mg=nt(oe(Yr,To,Yr),oe(To,Yr),oe(Yr,To),Yr,To);var lX=nt(oe(Yr,q("webrtc"),q("p2p")),oe(Yr,q("webrtc")),oe(ws,q("webrtc"),q("p2p")),oe(ws,q("webrtc")),q("webrtc"));function gg(r){function e(t){let n;try{n=X(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function oe(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:gg(e),partialMatch:e}}function nt(...r){function e(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:gg(e),partialMatch:e}}function q(r){let e=r;function t(o){let s;try{s=X(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var LA="bootstrap",BA=50,UA=12e4,MA=1e3,V2=class extends xe{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??MA,this.list=[];for(let n of t.list){if(!mg.matches(n)){this.log.error("Invalid multiaddr");continue}let o=X(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:ge(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[Ko]=this;[Symbol.toStringTag]="@libp2p/bootstrap";isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??LA]:{value:this._init.tagValue??BA,ttl:this._init.tagTTL??UA}}}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function wg(r){return e=>new V2(e,r)}var Eg={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var Xa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.publicKey=t.bytes();break;case 2:o.payloadType=t.bytes();break;case 3:o.payload=t.bytes();break;case 5:o.signature=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Xa||(Xa={}));var Qr=class r{static createFromProtobuf=async e=>{let t=Xa.decode(e),n=await ft(t.publicKey);return new r({peerId:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t.privateKey==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=bg(n,o,s),c=await(await Rr(t.privateKey)).sign(i.subarray());return new r({peerId:t,payloadType:o,payload:s,signature:c})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new m("envelope signature is not valid for the given domain",Eg.ERR_SIGNATURE_NOT_VALID);return n};peerId;payloadType;payload;signature;marshaled;constructor(e){let{peerId:t,payloadType:n,payload:o,signature:s}=e;this.peerId=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=Xa.encode({publicKey:this.peerId.publicKey,payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return j(this.marshal(),e.marshal())}async validate(e){let t=bg(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return qr(this.peerId.publicKey).verify(t.subarray(),this.signature)}},bg=(r,e,t)=>{let n=B(r),o=Ve(n.byteLength),s=Ve(e.length),i=Ve(t.length);return new ue(o,n,s,e,i,t)};function xg(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var vg="libp2p-peer-record",Rg=Uint8Array.from([3,1]);var ja;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let a={multiaddr:new Uint8Array(0)},c=i==null?s.len:s.pos+i;for(;s.pos<c;){let l=s.uint32();switch(l>>>3){case 1:a.multiaddr=s.bytes();break;default:s.skipType(l&7);break}}return a})),o),n.encode=s=>re(s,n.codec()),n.decode=s=>te(s,n.codec())})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o)=>{let s={peerId:new Uint8Array(0),seq:0n,addresses:[]},i=o==null?n.len:n.pos+o;for(;n.pos<i;){let a=n.uint32();switch(a>>>3){case 1:s.peerId=n.bytes();break;case 2:s.seq=n.uint64();break;case 3:s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return s})),t),r.encode=n=>re(n,r.codec()),r.decode=n=>te(n,r.codec())})(ja||(ja={}));var lr=class r{static createFromProtobuf=e=>{let t=ja.decode(e),n=Xe(t.peerId),o=(t.addresses??[]).map(i=>X(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=vg;static CODEC=Rg;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=ja.encode({peerId:this.peerId.toBytes(),seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!xg(this.multiaddrs,e.multiaddrs))}};function Je(r,e){let t=yr(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Sg="/libp2p/relay";var _g="circuit-relay-relay";var $X=BigInt(131072),Es="/libp2p/circuit/relay/0.2.0/hop",K2="/libp2p/circuit/relay/0.2.0/stop",HX=30*1e3,qX=30*1e3,$2=300;var H2="ERR_RELAYED_DIAL",Ag="ERR_HOP_REQUEST_FAILED";var Co;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ti.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),D1.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),ki.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),St.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=Ti.codec().decode(o,o.uint32());break;case 3:i.reservation=D1.codec().decode(o,o.uint32());break;case 4:i.limit=ki.codec().decode(o,o.uint32());break;case 5:i.status=St.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Co||(Co={}));var un;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ti.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),ki.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),St.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=Ti.codec().decode(o,o.uint32());break;case 3:i.limit=ki.codec().decode(o,o.uint32());break;case 4:i.status=St.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(un||(un={}));var Ti;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:new Uint8Array(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.id=t.bytes();break;case 2:o.addrs.push(t.bytes());break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ti||(Ti={}));var D1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.expire=t.uint64();break;case 2:o.addrs.push(t.bytes());break;case 3:o.voucher=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(D1||(D1={}));var ki;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.duration=t.uint32();break;case 2:o.data=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(ki||(ki={}));var St;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(St||(St={}));var q2;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(q2||(q2={}));(function(r){r.codec=()=>$e(q2)})(St||(St={}));var Ig;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.relay=t.bytes();break;case 2:o.peer=t.bytes();break;case 3:o.expiration=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ig||(Ig={}));async function Dg(r){let e=new TextEncoder().encode(r),t=await De.digest(e);return ce.createV0(t)}function W2(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var T1=class extends xe{peerId;peerStore;contentRouting;registrar;started;topologyId;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Es,{notifyOnTransient:!0,onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}afterStart(){this.discover().catch(e=>{this.log.error("error discovering relays",e)})}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(Es)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)this.log("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});this.log("found %d relay peers in peer store",e.length);try{this.log("searching content routing for relays");let t=await Dg(Sg),n=0;for await(let o of this.contentRouting.findProviders(t))if(o.multiaddrs.length>0&&!o.id.equals(this.peerId)){let s=o.id;n++,await this.peerStore.merge(s,{multiaddrs:o.multiaddrs}),this.log("found relay peer %p in content routing",s),this.safeDispatchEvent("relay:discover",{detail:s})}this.log("found %d relay peers in content routing",n)}catch(t){this.log.error("failed when finding relays on the network",t)}}};var VA=60*1e3*10,KA=60*1e3*5,$A=30*1e3,k1=class extends xe{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;log;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new st,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e4,this.started=!1,this.reserveQueue=new Vt({concurrency:t?.reservationConcurrency??1,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}start(){this.started=!0}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){this.log("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){this.log("not adding relay as the queue is full");return}if(this.reserveQueue.has(e)){this.log("relay peer is already in the reservation queue");return}this.log("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(W2(n.reservation.expire)>VA){this.log("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((d,u)=>(u.type==="discovered"&&d++,d),0)>=this.maxDiscoveredRelays){this.log("already have enough discovered relays");return}let o=AbortSignal.timeout(this.reservationCompletionTimeout),s=await this.connectionManager.openConnection(e,{signal:o});if(s.remoteAddr.protoNames().includes("p2p-circuit")){this.log("not creating reservation over relayed connection");return}let i=await this.#e(s,{signal:o});this.log("created reservation on relay peer %p",e);let a=W2(i.expire),c=Math.min(Math.max(a-KA,$A),Math.pow(2,31)-1),l=setTimeout(()=>{this.addRelay(e,t).catch(d=>{this.log.error("could not refresh reservation to relay %p",e,d)})},c);this.reservations.set(e,{timeout:l,reservation:i,type:t}),await this.peerStore.merge(e,{tags:{[_g]:{value:1,ttl:a}}}),await this.transportManager.listen([X(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){this.log.error("could not reserve slot on %p",e,n);let o=this.reservations.get(e);o!=null&&clearTimeout(o.timeout),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Es,t),s=Je(n).pb(Co);await s.write({type:Co.Type.RESERVE},t);let i;try{i=await s.read(t)}catch(c){throw this.log.error("error parsing reserve message response from %p because",e.remotePeer,c),n.abort(c),c}finally{await n.close()}if(i.status===St.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(j(l,d)){c=!0;break}return c||i.reservation.addrs.push(l),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(this.log("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};function G2(r){let{stream:e,remoteAddr:t,logger:n}=r,o=n.forComponent("libp2p:stream:converter"),s=!1,i=!1,a=e.close.bind(e);e.close=async f=>{await a(f),u(!0)};let c=e.abort.bind(e);e.abort=f=>{c(f),u(!0)};let l=e.sink.bind(e);e.sink=async f=>{try{await l(f)}catch(g){g.type!=="aborted"&&o.error("%s error in sink",t,g)}finally{i=!0,u()}};let d={log:o,sink:e.sink,source:async function*(){try{for await(let f of e.source)f instanceof Uint8Array?yield f:yield*f}finally{s=!0,u()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function u(f){f===!0&&(s=!0,i=!0),s&&i&&d.timeline.close==null&&(d.timeline.close=Date.now())}return d}var z2=class extends xe{connectionManager;relayStore;listeningAddrs;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new st,this.relayStore.addEventListener("relay:removed",this._onRemoveRelayPeer)}_onRemoveRelayPeer=e=>{this.#e(e.detail)};async listen(e){this.log("listen on %a",e);let t=e.decapsulate("/p2p-circuit"),n=await this.connectionManager.openConnection(t);if(!this.relayStore.hasReservation(n.remotePeer)){this.log("making reservation on peer %p",n.remotePeer),await this.relayStore.addRelay(n.remotePeer,"configured");return}let o=this.relayStore.getReservation(n.remotePeer);if(o==null)throw new m("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){this.log("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,o.addrs.map(s=>X(s).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.log("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&(this.log.trace("removing relay event listener for peer %p",e),this.relayStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close",{}))}};function Tg(r){return new z2(r)}var qA=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},Y2={maxInboundStopStreams:$2,maxOutboundStopStreams:$2,stopTimeout:3e4},C1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??Y2.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Y2.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??Y2.stopTimeout,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new T1(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{this.log.error("could not add discovered relay %p",n.detail,o)})})),this.reservationStore=new k1(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{this.log.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){this.reservationStore.start(),await this.registrar.handle(K2,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),await this.discovery?.start(),this.started=!0}afterStart(){this.discovery?.afterStart()}async stop(){this.discovery?.stop(),this.reservationStore.stop(),await this.registrar.unhandle(K2),this.started=!1}[tn]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(h=>h===290).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new m(h,H2)}let n=e.toString().split("/p2p-circuit"),o=X(n[0]),s=X(n[n.length-1]),i=o.getPeerId(),a=s.getPeerId();if(i==null||a==null){let h=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw this.log.error(h),new m(h,H2)}let c=ge(i),l=ge(a),d=!1,f=this.connectionManager.getConnections(c)[0];f==null&&(await this.peerStore.merge(c,{multiaddrs:[o]}),f=await this.connectionManager.openConnection(c,t),d=!0);let g;try{return g=await f.newStream(Es),await this.connectV2({stream:g,connection:f,destinationPeer:l,destinationAddr:s,relayAddr:o,ma:e,disconnectOnFailure:d})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),g?.abort(h),d&&await f.close(),h}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:s,ma:i,disconnectOnFailure:a}){try{let c=Je(e),l=c.pb(Co);await l.write({type:Co.Type.CONNECT,peer:{id:n.toBytes(),addrs:[X(o).bytes]}});let d=await l.read();if(d.status!==St.OK)throw new m(`failed to connect via relay with status ${d?.status?.toString()??"undefined"}`,Ag);let u=G2({stream:c.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger});return this.log("new outbound transient connection %a",u.remoteAddr),await this.upgrader.upgradeOutbound(u,{transient:!0})}catch(c){throw this.log.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return Tg({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Yr.matches(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=Je(t).pb(un),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==un.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!qA(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=Xe(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),c=this.addressManager.getAddresses()[0],l=G2({stream:o.unwrap().unwrap(),remoteAddr:a,localAddr:c,logger:this.logger});this.log("new inbound transient connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:!0}),this.log("%s connection %a upgraded","inbound",l.remoteAddr)}};function Q2(r={}){return e=>new C1(e,r)}var kg=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},WA=new WeakMap;function GA({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(kg());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(kg())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,g)=>{i=()=>{d(),f(n)},a=g,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),WA.set(u,()=>{c(s),s=null,i()}),u}}var zA=GA(),N1=zA;var Xr;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={observedAddresses:[]},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.observedAddresses.push(o.bytes());break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Xr||(Xr={}));function X2(r,e){return wn.matches(r)||e.transportForMultiaddr(r)==null?!1:Kc.matches(r)?!0:C4.matches(r)?$t(r.toOptions().host)===!1:!1}var Cg=1024*4,Ng=100,P1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},O1=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??P1.timeout,this.retries=t.retries??P1.retries,this.maxInboundStreams=t.maxInboundStreams??P1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??P1.maxOutboundStreams}isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Za,{notifyOnTransient:!0,onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Za,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Za),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Za],{signal:o.signal,runOnTransientConnection:!0});let s=Je(t,{maxDataLength:Cg}).pb(Xr);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==Xr.Type.CONNECT)throw this.log("A sent wrong message type"),new m("DCUtR message type was incorrect",$o);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new m("DCUtR connect message had no multiaddrs",$o);let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:Xr.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await N1(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:Ng});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getPeerId()==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>X2(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(s.transient)throw new Error("Could not open a new, non-transient, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,s)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=Je(e,{maxDataLength:Cg}).pb(Xr);this.log("A receiving connect");let s=await o.read(n);if(s.type!==Xr.Type.CONNECT)throw this.log("B sent wrong message type"),new m("DCUtR message type was incorrect",$o);if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new m("DCUtR connect message had no multiaddrs",$o);let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new m("DCUtR connect message had no dialable multiaddrs",$o);if(this.log("A sending connect"),await o.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Xr.Type.SYNC)throw new m("DCUtR message type was incorrect",$o);this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:Ng,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=X(n);if(!X2(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Za="/libp2p/dcutr";function Pg(r={}){return e=>new O1(e,r)}var Og="0.1.0",Lg="id",Bg="id/push",Ug="1.0.0",Mg="1.0.0";var Kg=Ye(Vg(),1),j2=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,L1=(0,Kg.default)(),B1=j2&&!L1,$g=L1&&!j2,Hg=L1&&j2,qg=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!L1,U1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Zj=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",Wg=typeof navigator<"u"&&navigator.product==="ReactNative";var bs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 5:o.protocolVersion=t.string();break;case 6:o.agentVersion=t.string();break;case 1:o.publicKey=t.bytes();break;case 2:o.listenAddrs.push(t.bytes());break;case 4:o.observedAddr=t.bytes();break;case 3:o.protocols.push(t.string());break;case 8:o.signedPeerRecord=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(bs||(bs={}));var Z2=1024*8,Tr={protocolPrefix:"ipfs",timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192,runOnConnectionOpen:!0,runOnTransientConnection:!0},M1=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;runOnTransientConnection;log;constructor(e,t={}){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.log=e.logger.forComponent("libp2p:identify"),this.identifyProtocolStr=`/${t.protocolPrefix??Tr.protocolPrefix}/${Lg}/${Ug}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??Tr.protocolPrefix}/${Bg}/${Mg}`,this.timeout=t.timeout??Tr.timeout,this.maxInboundStreams=t.maxInboundStreams??Tr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Tr.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??Tr.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??Tr.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??Tr.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??Tr.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??Tr.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??Tr.protocolPrefix}/${Og}`,agentVersion:t.agentVersion??`${e.nodeInfo.name}/${e.nodeInfo.version}`},(t.runOnConnectionOpen??Tr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(s=>{this.log.error("error during identify trigged by connection:open",s)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})}),this.host.agentVersion===`${e.nodeInfo.name}/${e.nodeInfo.version}`&&(qg||$g?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(B1||U1||Hg||Wg)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:B(this.host.agentVersion),ProtocolVersion:B(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(d=>d.decapsulateCode(J("p2p").code)),n=new lr({peerId:this.peerId,multiaddrs:t}),o=await Qr.seal(n,this.peerId),s=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),a=P(i.metadata.get("AgentVersion")??B(this.host.agentVersion)),c=P(i.metadata.get("ProtocolVersion")??B(this.host.protocolVersion)),l=e.map(async d=>{let u,f=AbortSignal.timeout(this.timeout);ee(1/0,f);try{u=await d.newStream(this.identifyPushProtocolStr,{signal:f,runOnTransientConnection:this.runOnTransientConnection}),await Je(u,{maxDataLength:this.maxIdentifyMessageSize??Z2}).pb(bs).write({listenAddrs:t.map(h=>h.bytes),signedPeerRecord:o.marshal(),protocols:s,agentVersion:a,protocolVersion:c},{signal:f}),await u.close({signal:f})}catch(g){this.log.error("could not push identify update to peer",g),u?.abort(g)}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==q3)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);ee(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.identifyProtocolStr,{...t,runOnTransientConnection:this.runOnTransientConnection});let s=await Je(n,{maxDataLength:this.maxIdentifyMessageSize??Z2}).pb(bs).read(t);return await n.close(t),s}catch(o){throw this.log.error("error while reading identify message",o),n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new m("public key was missing from identify message","ERR_MISSING_PUBLIC_KEY");let a=await ft(o);if(!e.remotePeer.equals(a))throw new m("identified peer does not match the expected peer","ERR_INVALID_PEER");if(this.peerId.equals(a))throw new m("identified peer is our own peer id?","ERR_INVALID_PEER");let c=QA(i);return this.log("identify completed for peer %p and protocols %o",a,s),this.log("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address %a",c),this.addressManager.addObservedAddr(c)),this.#e(e,n)}async _handleIdentify(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);ee(1/0,o);try{let s=this.peerId.publicKey??new Uint8Array(0),i=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(J("p2p").code)),c=i.peerRecordEnvelope;if(a.length>0&&c==null){let u=new lr({peerId:this.peerId,multiaddrs:a});c=(await Qr.seal(u,this.peerId)).marshal().subarray()}let l=t.remoteAddr.bytes;k4.matches(t.remoteAddr)||(l=void 0),await Je(n).pb(bs).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:s,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:l,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}async _handlePush(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await Je(n,{maxDataLength:this.maxIdentifyMessageSize??Z2}).pb(bs).read(o);await n.close(o),await this.#e(t,i)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log("handled push from %p",t.remotePeer)}async#e(e,t){if(this.log("received identify from %p",e.remotePeer),t==null)throw new m("message was null or undefined","ERR_INVALID_MESSAGE");let n={};if(t.listenAddrs.length>0&&(n.addresses=t.listenAddrs.map(i=>({isCertified:!1,multiaddr:X(i)}))),t.protocols.length>0&&(n.protocols=t.protocols),t.publicKey!=null&&(n.publicKey=t.publicKey,!(await ft(t.publicKey)).equals(e.remotePeer)))throw new m("public key did not match remote PeerId","ERR_INVALID_PUBLIC_KEY");let o;if(t.signedPeerRecord!=null){this.log("received signedPeerRecord from %p",e.remotePeer);let i=t.signedPeerRecord,a=await Qr.openAndCertify(i,lr.DOMAIN),c=lr.createFromProtobuf(a.payload);if(!c.peerId.equals(a.peerId))throw new m("signing key does not match PeerId in the PeerRecord","ERR_INVALID_SIGNING_KEY");if(!e.remotePeer.equals(c.peerId))throw new m("signing key does not match remote PeerId","ERR_INVALID_PEER_RECORD_KEY");let l;try{l=await this.peerStore.get(c.peerId)}catch(d){if(d.code!=="ERR_NOT_FOUND")throw d}if(l!=null&&(n.metadata=l.metadata,l.peerRecordEnvelope!=null)){let d=await Qr.createFromProtobuf(l.peerRecordEnvelope),u=lr.createFromProtobuf(d.payload);u.seqNumber>=c.seqNumber&&(this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),c=u,i=l.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d})),o={seq:c.seqNumber,addresses:c.multiaddrs}}else this.log("%p did not send a signed peer record",e.remotePeer);if(this.log("patching %p with",e.remotePeer,n),await this.peerStore.patch(e.remotePeer,n),t.agentVersion!=null||t.protocolVersion!=null){let i={};t.agentVersion!=null&&(i.AgentVersion=B(t.agentVersion)),t.protocolVersion!=null&&(i.ProtocolVersion=B(t.protocolVersion)),this.log("merging %p metadata",e.remotePeer,i),await this.peerStore.merge(e.remotePeer,{metadata:i})}let s={peerId:e.remotePeer,protocolVersion:t.protocolVersion,agentVersion:t.agentVersion,publicKey:t.publicKey,listenAddrs:t.listenAddrs.map(i=>X(i)),observedAddr:t.observedAddr==null?void 0:X(t.observedAddr),protocols:t.protocols,signedPeerRecord:o,connection:e};return this.events.safeDispatchEvent("peer:identify",{detail:s}),s}};function QA(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function Gg(r={}){return e=>new M1(e,r)}var zg="/ipfs/kad/1.0.0",Yg="/dht/record",J2="/dht/provider";var Ja;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={key:Ce(0),value:Ce(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ja||(Ja={}));function Qg(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function Xg(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,s=parseInt(t[3],10),i=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,s,i,a,c,l))}var _t=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Ja.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Qg(this.timeReceived)}}static deserialize(e){let t=Ja.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Xg(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var jg;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(jg||(jg={}));var Ee;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(Ee||(Ee={}));var F1;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(F1||(F1={}));(function(r){r.codec=()=>$e(F1)})(Ee||(Ee={}));var Ni;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Ni||(Ni={}));var ep;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(ep||(ep={}));(function(r){r.codec=()=>$e(ep)})(Ni||(Ni={}));var Ci;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Ni.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:Ce(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.id=t.bytes();break}case 2:{o.multiaddrs.push(t.bytes());break}case 3:{o.connection=Ni.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ci||(Ci={}));var kr;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&F1[t.type]!==0&&(n.uint32(8),Ee.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let s of t.closer)n.uint32(66),Ci.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ci.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={type:Ee.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.type=Ee.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{o.closer.push(Ci.codec().decode(t,t.uint32()));break}case 9:{o.providers.push(Ci.codec().decode(t,t.uint32()));break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(kr||(kr={}));function tp(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new yt("kad-dht:query:send-query",{detail:t})),t}function ec(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer!=null?r.closer:[],providers:r.providers!=null?r.providers:[]};return e.onProgress?.(new yt("kad-dht:query:peer-response",{detail:t})),t}function V1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new yt("kad-dht:query:final-peer",{detail:t})),t}function ur(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new yt("kad-dht:query:query-error",{detail:t})),t}function rp(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new yt("kad-dht:query:provider",{detail:t})),t}function tc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new yt("kad-dht:query:value",{detail:t})),t}function np(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new yt("kad-dht:query:dial-peer",{detail:t})),t}function Zg(r,e,t){if(t.length===0){let i="No records given";throw new m(i,"ERR_NO_RECORDS_RECEIVED")}let o=P(e).split("/");if(o.length<3){let i="Record key does not have a selector function";throw new m(i,"ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")}let s=r[o[1].toString()];if(s==null){let i=`No selector function configured for key type "${o[1]}"`;throw new m(i,"ERR_UNRECOGNIZED_KEY_PREFIX")}return t.length===1?0:s(e,t)}function jA(r,e){return 0}var Jg={pk:jA};async function Pi(r,e){let t=e.key,o=P(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null){let i=`No validator available for key type "${o[1]}"`;throw new m(i,"ERR_INVALID_RECORD_KEY_TYPE")}await s(t,e.value)}var ZA=async(r,e)=>{if(!(r instanceof Uint8Array))throw new m('"key" must be a Uint8Array',"ERR_INVALID_RECORD_KEY_NOT_BUFFER");if(r.byteLength<5)throw new m("invalid public key record","ERR_INVALID_RECORD_KEY_TOO_SHORT");if(P(r.subarray(0,4))!=="/pk/")throw new m("key was not prefixed with /pk/","ERR_INVALID_RECORD_KEY_BAD_PREFIX");let n=r.slice(4),o=await De.digest(e);if(!j(n,o.bytes))throw new m("public key does not match passed in key","ERR_INVALID_RECORD_HASH_MISMATCH")},e9={pk:ZA};var JA=B("/pk/");function t9(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=$t(n);return o==null?!0:!o})}}async function No(r){return(await De.digest(r)).digest}async function jr(r){return No(r.toBytes())}function Po(r){return new Oe(`${Yg}/${P(r,"base32")}`,!1)}function r9(r){return ve([JA,r.toBytes()])}function n9(r){return P(r.subarray(0,4))==="/pk/"}function o9(r){return Xe(r.subarray(4))}function op(r,e){let t=new Date;return new _t(r,e,t).serialize()}function s9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var eI=290,tI=54,rI=55,nI=56,oI=4,sI=41;function i9(r){let e=r.stringTuples();for(let t of e)if(t[0]===eI)return!1;if(e[0][0]===tI||e[0][0]===rI||e[0][0]===nI)return!0;if(e[0][0]===oI||e[0][0]===sI){let t=$t(`${e[0][1]}`);return t==null||!t}return!1}var K1=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=Po(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=_t.deserialize(n);return await Pi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=op(e,n);for(let{value:i,from:a}of t){if(j(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Po(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:Ee.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&j(d.record.value,_t.deserialize(s).value)&&(c=!0),yield d;c||(yield ur({from:a,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=op(e,t),s=Po(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Ke(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>Et(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ee.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&j(d.record.value,_t.deserialize(o).value)||c.push(ur({from:a.peer.id,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},n)));return c}),i=>Hn(i,{ordered:!1,concurrency:3}),async function*(i){for await(let a of i)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=Zg(this.selectors,e,o)}catch(a){if(a.code!=="ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new m("best value was not found","ERR_NOT_FOUND");yield*this.sendCorrectionRecord(e,n,i,t),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e);yield tc({value:s.value,from:this.components.peerId},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i}){for await(let a of n.peerRouting.getValueOrPeers(s,e,{signal:i}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield tc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function a9(r,e){return{id:r.id.toBytes(),multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function rc(r){if(r.id==null)throw new Error("Invalid peer in message");return{id:Xe(r.id),multiaddrs:(r.multiaddrs??[]).map(e=>X(e))}}var $1=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e),await this.providers.addProvider(e,this.components.peerId);let o={type:Ee.ADD_PROVIDER,key:e.multihash.bytes,providers:[a9({id:this.components.peerId,multiaddrs:t})]},s=0,i=a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[];this.log("putProvider %s to %p",e,a.peer.id);try{this.log("sending provider record for %s to %p",e,a.peer.id);for await(let l of this.network.sendMessage(a.peer.id,o,n))l.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,a.peer.id),s++),c.push(l)}catch(l){this.log.error("error sending provide record to peer %p",a.peer.id,l),c.push(ur({from:a.peer.id,error:l},n))}return c};yield*Ke(this.peerRouting.getClosestPeers(e.multihash.bytes,n),a=>Et(a,c=>i(c)),a=>Hn(a,{ordered:!1,concurrency:3}),async function*(a){for await(let c of a)yield*c}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:g})=>g)})}catch(f){if(f.code!=="ERR_NOT_FOUND")throw f;this.log("no peer store entry for %p",u)}if(yield ec({from:this.components.peerId,messageType:Ee.GET_PROVIDERS,providers:d},t),yield rp({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:Ee.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d,f,{...t,signal:u})},l=new je(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield rp({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var H1=class extends xe{log;protocol;running;components;constructor(e,t){super();let{protocol:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=n}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new ca("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield np({peer:e},n),yield tp({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),c=await this._writeReadMessage(a,t,n);yield ec({from:e,messageType:c.type,closer:c.closer.map(rc),providers:c.providers.map(rc),record:c.record==null?void 0:_t.deserialize(c.record)},n)}catch(i){this.log.error("could not send %s to %p",t.type,e,i),yield ur({from:e,error:i},n)}finally{s!=null&&await s.close()}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new ca("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield np({peer:e},n),yield tp({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);await this._writeMessage(a,t,n),yield ec({from:e,messageType:o},n)}catch(i){yield ur({from:e,error:i},n)}finally{s!=null&&await s.close()}}async _writeMessage(e,t,n){let o=Je(e);await o.write(t,kr,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=Je(e);await o.write(t,kr,n);let s=await o.read(kr,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:rc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:rc(i)})}),s}};var nc=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Oo=new Uint32Array(80),ap=class extends so{constructor(){super(64,20,8,!1),this.A=nc[0]|0,this.B=nc[1]|0,this.C=nc[2]|0,this.D=nc[3]|0,this.E=nc[4]|0}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)Oo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Oo[c]=wl(Oo[c-3]^Oo[c-8]^Oo[c-14]^Oo[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=bl(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=xl(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=wl(n,5)+l+a+d+Oo[c]|0;a=i,i=s,s=wl(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){Oo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},c9=js(()=>new ap);var l9={sha1:c9,"sha2-256":bo,"sha2-512":co};function oc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(l9).join(" / ");throw new m(`Hash '${o}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let s=l9[o],i=s6(s,r,e,{c:t,dkLen:n});return lt.encode(i).substring(1)}var q1=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peerId)}async add(e){if(this.peerDistances.find(o=>o.peerId.equals(e))!=null)return;let t=await jr(e),n={peerId:e,distance:$n(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>f1(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async anyCloser(e){if(e.length===0)return!1;if(this.length===0)return!0;let t=await Promise.all(e.map(jr)),n=this.peerDistances[this.peerDistances.length-1].distance;for(let o of t){let s=$n(this.originDhtKey,o);if(f1(s,n)<0)return!0}return!1}};var W1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){let{routingTable:n,network:o,validators:s,queryManager:i,logPrefix:a}=t;this.routingTable=n,this.network=o,this.validators=s,this.queryManager=i,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${a}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:Ee.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=r9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=await ft(vu.marshalPublicKey({bytes:o.record.value}));if(!s.equals(e))throw new m("public key does not match id","ERR_PUBLIC_KEY_DOES_NOT_MATCH_ID");if(s.publicKey==null)throw new m("public key missing","ERR_PUBLIC_KEY_MISSING");yield tc({from:e,value:s.publicKey},t)}throw new m(`Node not responding with its public key: ${e.toString()}`,"ERR_INVALID_RECORD")}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield V1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a}){let c={type:Ee.FIND_NODE,key:e.toBytes()};for await(let l of o.network.sendRequest(i,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield V1({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toBytes(),s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield ur({from:this.peerId,error:new m("Not found","ERR_NOT_FOUND")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await No(e),o=this.routingTable.closestPeers(n),s=this,i=new q1(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await i.add(c)}));let a=async function*({peer:c,signal:l}){s.log("closerPeersSingle %s from %p",P(e,"base32"),c);let d={type:Ee.FIND_NODE,key:e};yield*s.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))yield c,c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await i.add(l.id)}));this.log("found %d peers close to %b",i.length,e);for(let c of i.peers)try{let l=await this.peerStore.get(c);yield V1({from:this.peerId,peer:{id:c,multiaddrs:l.addresses.map(({multiaddr:d})=>d)}},t)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let i="invalid record received, discarded";this.log(i),yield ur({from:o.from,error:new m(i,"ERR_INVALID_RECORD")},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new m("invalid record received","ERR_INVALID_RECORD");await Pi(this.validators,new _t(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await No(e),o=this.routingTable.closestPeers(n),s=[];for(let i of o)if(!i.equals(t))try{let a=await this.peerStore.get(i);s.push({id:i,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}return s.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",s.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p",e,t),s}};var u9=Ye(W0(),1);var G1=class{log;datastore;cache;cleanupInterval;provideValidity;syncQueue;started;cleaner;constructor(e,t={}){let{cacheSize:n,cleanupInterval:o,provideValidity:s}=t;this.log=e.logger.forComponent("libp2p:kad-dht:providers"),this.datastore=e.datastore,this.cleanupInterval=o??36e5,this.provideValidity=s??864e5,this.cache=(0,u9.default)(n??256),this.syncQueue=new Gt({concurrency:1}),this.started=!1}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cleaner=setInterval(()=>{this._cleanup().catch(e=>{this.log.error(e)})},this.cleanupInterval))}async stop(){this.started=!1,this.cleaner!=null&&(clearInterval(this.cleaner),this.cleaner=void 0)}async _cleanup(){await this.syncQueue.add(async()=>{let e=Date.now(),t=0,n=0,o=new Map,s=this.datastore.batch(),i=this.datastore.query({prefix:J2});for await(let a of i)try{let{cid:c,peerId:l}=d9(a.key),d=f9(a.value).getTime(),u=Date.now(),f=u-d,g=f>this.provideValidity;if(this.log("comparing: %d - %d = %d > %d %s",u,d,f,this.provideValidity,g?"(expired)":""),g){n++,s.delete(a.key);let h=o.get(c)??new Set;h.add(l),o.set(c,h)}t++}catch(c){this.log.error(c.message)}o.size>0?(this.log("deleting %d / %d entries",n,t),await s.commit()):this.log("nothing to delete");for(let[a,c]of o){let l=sc(a),d=this.cache.get(l);if(d!=null){for(let u of c)d.delete(u);d.size===0?this.cache.remove(l):this.cache.set(l,d)}}this.log("Cleanup successful (%dms)",Date.now()-e)})}async _getProvidersMap(e){let t=sc(e),n=this.cache.get(t);return n==null&&(n=await uI(this.datastore,e),this.cache.set(t,n)),n}async addProvider(e,t){await this.syncQueue.add(async()=>{this.log("%p provides %s",t,e);let n=await this._getProvidersMap(e);this.log("loaded %s provs",n.size);let o=new Date;n.set(t.toString(),o);let s=sc(e);this.cache.set(s,n),await lI(this.datastore,e,t,o)})}async getProviders(e){return this.syncQueue.add(async()=>(this.log("get providers for %s",e),[...(await this._getProvidersMap(e)).keys()].map(n=>ge(n))),{throwOnTimeout:!0})}};function sc(r){let e=typeof r=="string"?r:P(r.multihash.bytes,"base32");return`${J2}/${e}`}async function lI(r,e,t,n){let o=[sc(e),"/",t.toString()].join(""),s=new Oe(o),i=Ve(n.getTime());await r.put(s,i)}function d9(r){let e=r.toString().split("/");if(e.length!==5)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:e[3],peerId:e[4]}}async function uI(r,e){let t=new Map,n=r.query({prefix:sc(e)});for await(let o of n){let{peerId:s}=d9(o.key);t.set(s,f9(o.value))}return t}function f9(r){return new Date(Lt(r))}async function*h9(r,e,t,n){let o=dt({objectMode:!0}),s=u=>{n("clean up queue, results %d, queue size %d, pending tasks %d",o.readableLength,r.size,r.pending),r.clear(),o.end(u)},i=u=>{u!=null&&o.push(u)},a=u=>{n("queue error",u),s(u)},c=()=>{n("queue idle"),s()},l=()=>{n("abort queue"),s(new m("Query aborted","ERR_QUERY_ABORTED"))},d=()=>{s()};r.on("completed",i),r.on("error",a),r.on("idle",c),e.addEventListener("abort",l),t.addEventListener("cleanup",d);try{yield*o}finally{r.removeListener("completed",i),r.removeListener("error",a),r.removeListener("idle",c),e.removeEventListener("abort",l),t.removeEventListener("cleanup",d)}}var dI=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");async function*p9(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:s,alpha:i,pathIndex:a,numPaths:c,cleanUp:l,queryFuncTimeout:d,log:u,peersSeen:f}=r,g=new Gt({concurrency:i}),h=await No(e);function p(y,w){if(y==null)return;f.add(y);let b=BigInt("0x"+P($n(w,h),"base16"));g.add(async()=>{let E=[o];d!=null&&E.push(AbortSignal.timeout(d));let S=ot(E);ee(1/0,S);try{for await(let _ of s({key:e,peer:y,signal:S,pathIndex:a,numPaths:c})){if(S.aborted)return;if(_.name==="PEER_RESPONSE")for(let A of _.closer){if(f.has(A.id)){u("already seen %p in query",A.id);continue}if(n.equals(A.id)){u("not querying ourselves");continue}let D=await jr(A.id);if(BigInt("0x"+P($n(D,h),"base16"))>b){u("skipping %p as they are not closer to %b than %p",A.id,e,y);continue}u("querying closer peer %p",A.id),p(A.id,D)}g.emit("completed",_)}}catch(_){if(!o.aborted)return ur({from:y,error:_},r)}finally{S.clear()}},{priority:dI-b}).catch(E=>{u.error(E)})}p(t,await jr(t)),yield*h9(g,o,l,u)}var z1=class{disjointPaths;alpha;shutDownController;running;queries;logger;peerId;routingTable;initialQuerySelfHasRun;logPrefix;metrics;constructor(e,t){let{disjointPaths:n=20,alpha:o=3,logPrefix:s}=t;this.logPrefix=s,this.disjointPaths=n??20,this.running=!1,this.alpha=o??3,this.queries=0,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,e.metrics!=null&&(this.metrics={runningQueries:e.metrics.registerMetric(`${s.replaceAll(":","_")}_running_queries`),queryTime:e.metrics.registerMetric(`${s.replaceAll(":","_")}_query_time_seconds`)}),this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");let o=this.metrics?.queryTime.timer();if(n.signal==null){let u=AbortSignal.timeout(3e4);ee(1/0,u),n={...n,signal:u}}let s=new AbortController,i=ot([this.shutDownController.signal,s.signal,n.signal]);ee(1/0,i,s.signal);let a=this.logger.forComponent(`${this.logPrefix}:query:`+P(e,"base58btc")),c=Date.now(),l=new xe,d=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(a("waiting for initial query-self query before continuing"),await Ot(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),a("query:start"),this.queries++,this.metrics?.runningQueries.update(this.queries);let u=await No(e),f=this.routingTable.closestPeers(u),g=f.slice(0,Math.min(this.disjointPaths,f.length));if(f.length===0){a.error("Running query with no peers");return}let h=new je,p=g.map((y,w)=>p9({key:e,startingPeer:y,ourPeerId:this.peerId,signal:i,query:t,pathIndex:w,numPaths:g.length,alpha:this.alpha,cleanUp:l,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,onProgress:n.onProgress}));for await(let y of bt(...p))y.name==="QUERY_ERROR"&&a.error("query error",y.error),yield y;d=!0}catch(u){if(!(!this.running&&u.code==="ERR_QUERY_ABORTED"))throw u}finally{d||(a("query exited early"),s.abort()),i.clear(),this.queries--,this.metrics?.runningQueries.update(this.queries),o?.(),l.dispatchEvent(new yt("cleanup")),a("query:done in %dms",Date.now()-c)}}};function fI(r){return r[Symbol.asyncIterator]!=null}function hI(r){if(fI(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var Y1=hI;var pI=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function mI(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=pI(r),u=(...g)=>{let h=t.multiArgs?g:g[0];t.filter&&!t.filter(h)||(c.push(h),t.count===c.length&&(n(),s(c)))},f=g=>{n(),i(g)};n=()=>{for(let g of a)d(g,u);for(let g of t.rejectionEvents)d(g,f)};for(let g of a)l(g,u);for(let g of t.rejectionEvents)l(g,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=zr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function ic(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=mI(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var Q1=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:s,interval:i,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=s??20,this.interval=i??3e5,this.initialInterval=t.initialInterval??1e3,this.queryTimeout=a??5e3,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=Z(),this.started){this.controller=new AbortController;let e=AbortSignal.timeout(this.queryTimeout),t=ot([this.controller.signal,e]);ee(1/0,t,this.controller.signal,e);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await ic(this.routingTable,"peer:add",{signal:t})),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Ke(this.peerRouting.getClosestPeers(this.peerId.toBytes(),{signal:t,isSelfQuery:!0}),s=>eo(s,this.count),async s=>Y1(s));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.started&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};function g9(r,e){if(r===e)return!0;if(r.length!==e.length)return!1;for(let t=0,n=r.length;t<n;++t)if(r[t]!==e[t])return!1;return!0}function cp(){return{contacts:[],dontSplit:!1,left:null,right:null}}function ac(r,e){if(!(e instanceof Uint8Array))throw new TypeError(r+" is not a Uint8Array")}var X1=class r extends xe{localNodeId;root;numberOfNodesPerKBucket;numberOfNodesToPing;distance;arbiter;constructor(e){super(),this.localNodeId=e.localNodeId,this.numberOfNodesPerKBucket=e.numberOfNodesPerKBucket??20,this.numberOfNodesToPing=e.numberOfNodesToPing??3,this.distance=e.distance??r.distance,this.arbiter=e.arbiter??r.arbiter,ac("option.localNodeId as parameter 1",this.localNodeId),this.root=cp()}static arbiter(e,t){return(e.vectorClock??0)>(t.vectorClock??0)?e:t}static distance(e,t){let n=0,o=0,s=Math.min(e.length,t.length),i=Math.max(e.length,t.length);for(;o<s;++o)n=n*256+(e[o]^t[o]);for(;o<i;++o)n=n*256+255;return n}add(e){ac("contact.id",e?.id);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e.id,t++);let o=this._indexOf(n,e.id);return o>=0?(this._update(n,o,e),this):n.contacts.length<this.numberOfNodesPerKBucket?(n.contacts.push(e),this.safeDispatchEvent("added",{detail:e}),this):n.dontSplit?(this.safeDispatchEvent("ping",{detail:{oldContacts:n.contacts.slice(0,this.numberOfNodesToPing),newContact:e}}),this):(this._split(n,t),this.add(e))}closest(e,t=1/0){if(ac("id",e),!Number.isInteger(t)&&t!==1/0||t<=0)throw new TypeError("n is not positive number");let n=[];for(let o=[this.root],s=0;o.length>0&&n.length<t;){let i=o.pop();if(i!=null)if(i.contacts===null){let a=this._determineNode(i,e,s++);o.push(i.left===a?i.right:i.left),o.push(a)}else n=n.concat(i.contacts)}return n.map(o=>({distance:this.distance(o.id,e),contact:o})).sort((o,s)=>o.distance-s.distance).slice(0,t).map(o=>o.contact)}count(){let e=0;for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e+=n.contacts.length)}return e}_determineNode(e,t,n){let o=n>>3,s=n%8;return t.length<=o&&s!==0?e.left:t[o]&1<<7-s?e.right:e.left}get(e){ac("id",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);return o>=0?n.contacts[o]:void 0}_indexOf(e,t){for(let n=0;n<e.contacts.length;++n)if(g9(e.contacts[n].id,t))return n;return-1}remove(e){ac("the id as parameter 1",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);if(o>=0){let s=n.contacts.splice(o,1)[0];this.safeDispatchEvent("removed",{detail:s})}return this}_split(e,t){e.left=cp(),e.right=cp();for(let s of e.contacts)this._determineNode(e,s.id,t).contacts.push(s);e.contacts=null;let n=this._determineNode(e,this.localNodeId,t),o=e.left===n?e.right:e.left;o.dontSplit=!0}toArray(){let e=[];for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e=e.concat(n.contacts))}return e}*toIterable(){for(let e=[this.root];e.length>0;){let t=e.pop();t!=null&&(t.contacts===null?e.push(t.right,t.left):yield*t.contacts)}}_update(e,t,n){if(!g9(e.contacts[t].id,n.id))throw new Error("wrong index for _update");let o=e.contacts[t],s=this.arbiter(o,n);s===o&&o!==n||(e.contacts.splice(t,1),e.contacts.push(s),this.safeDispatchEvent("updated",{detail:{incumbent:o,selection:s}}))}};var gI="kad-close",yI=50,y9=20,wI=1e4,EI=10,j1=class extends xe{kBucketSize;kb;pingQueue;log;components;pingTimeout;pingConcurrency;running;protocol;tagName;tagValue;metrics;constructor(e,t){super();let{kBucketSize:n,pingTimeout:o,logPrefix:s,pingConcurrency:i,protocol:a,tagName:c,tagValue:l}=t;this.components=e,this.log=e.logger.forComponent(`${s}:routing-table`),this.kBucketSize=n??y9,this.pingTimeout=o??wI,this.pingConcurrency=i??EI,this.running=!1,this.protocol=a,this.tagName=c??gI,this.tagValue=l??yI,this.pingQueue=new Vt({concurrency:this.pingConcurrency,metricName:`${s.replaceAll(":","_")}_ping_queue`,metrics:this.components.metrics}),this.pingQueue.addEventListener("error",d=>{this.log.error("error pinging peer",d.detail)}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${s.replaceAll(":","_")}_routing_table_size`)})}isStarted(){return this.running}async start(){this.running=!0;let e=new X1({localNodeId:await jr(this.components.peerId),numberOfNodesPerKBucket:this.kBucketSize,numberOfNodesToPing:1});this.kb=e,e.addEventListener("ping",t=>{this._onPing(t).catch(n=>{this.log.error("could not process k-bucket ping event",n)})}),this._tagPeers(e)}async stop(){this.running=!1,this.pingQueue.clear(),this.kb=void 0}_tagPeers(e){let t=new je,n=s9(()=>{let o=new je(e.closest(e.localNodeId,y9).map(a=>a.peer)),s=o.difference(t),i=t.difference(o);Promise.resolve().then(async()=>{for(let a of s)await this.components.peerStore.merge(a,{tags:{[this.tagName]:{value:this.tagValue}}});for(let a of i)await this.components.peerStore.merge(a,{tags:{[this.tagName]:void 0}})}).catch(a=>{this.log.error("Could not update peer tags",a)}),t=o});e.addEventListener("added",o=>{n(),this.safeDispatchEvent("peer:add",{detail:o.detail.peer})}),e.addEventListener("removed",o=>{n(),this.safeDispatchEvent("peer:remove",{detail:o.detail.peer})})}async _onPing(e){if(!this.running)return;let{oldContacts:t,newContact:n}=e.detail,s=(await Promise.all(t.map(async i=>{let a=this.pingQueue.find(i.peer);return a!=null?a.join():this.pingQueue.add(async()=>{let c;try{let l={signal:AbortSignal.timeout(this.pingTimeout)};this.log("pinging old contact %p",i.peer),c=await(await this.components.connectionManager.openConnection(i.peer,l)).newStream(this.protocol,l);let u=Je(c);await u.write({type:Ee.PING},kr,l);let f=await u.read(kr,l);if(await u.unwrap().close(),f.type!==Ee.PING)throw new m(`Incorrect message type received, expected PING got ${f.type}`,"ERR_BAD_PING_RESPONSE");return!0}catch(l){return this.running&&this.kb!=null&&(this.log.error("could not ping peer %p",i.peer,l),this.log("evicting old contact after ping failed %p",i.peer),this.kb.remove(i.id)),c?.abort(l),!1}finally{this.metrics?.routingTableSize.update(this.size)}},{peerId:i.peer})}))).filter(i=>i).length;this.running&&s<t.length&&this.kb!=null&&(this.log("adding new contact %p",n.peer),this.kb.add(n))}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await jr(e),n=this.closestPeer(t);if(n!=null&&e.equals(n))return n}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:this.kb.closest(e,t).map(o=>o.peer)}async add(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.add({id:t,peer:e}),this.log("added %p with kad id %b",e,t),this.metrics?.routingTableSize.update(this.size)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.remove(t),this.metrics?.routingTableSize.update(this.size)}};var w9=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var Z1=15,J1=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??3e5,this.refreshQueryTimeout=i??3e4,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async start(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,s)=>{try{if(await this._refreshCommonPrefixLength(s,o,e),this._numPeersForCpl(t)===0){let i=Math.min(2*(s+1),n.length-1);for(let a=s+1;a<i+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(i){this.log.error(i)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let s=await Y1(this.peerRouting.getClosestPeers(o.toBytes(),{signal:AbortSignal.timeout(this.refreshQueryTimeout)}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Z1&&(e=Z1);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");let t=Ht(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localNodeId,n,e);return Xe(o)}async _makePeerId(e,t,n){if(n>Z1)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Z1}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=w9[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,De.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb!=null)for(let{id:e}of this.routingTable.kb.toIterable()){let t=$n(this.routingTable.kb.localNodeId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var ed=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(this.log("start"),t.key==null||t.key.length===0)throw new m("Missing key","ERR_MISSING_KEY");let n;try{n=ce.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>X(s).toString())),await this.providers.addProvider(n,Xe(o.id))}))}};var td=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){this.log("incoming request from %p for peers closer to %b",e,t.key);let n=[];if(t.key==null)throw new m("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");j(this.peerId.toBytes(),t.key)?n=[{id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(J("p2p").code))}]:n=await this.peerRouting.getCloserPeersOffline(t.key,e);let o={type:Ee.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toBytes(),multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var rd=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new m("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");let n;try{n=ce.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),i=await this._getPeers(o),a=await this._getPeers(s.map(({id:l})=>l)),c={type:Ee.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),s=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:i})=>i)});s.multiaddrs.length>0&&t.push(s)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}return t}};var nd=class{peerStore;datastore;peerRouting;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new m("Invalid key","ERR_INVALID_KEY");let o={type:Ee.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(n9(n)){this.log("is public key");let a=o9(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new m("No public key found in key book","ERR_NOT_FOUND");c=l.id.publicKey}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null)return this.log("returning found public key"),o.record=new _t(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.map(a=>({id:a.id.toBytes(),multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Po(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.code==="ERR_NOT_FOUND")return;throw s}let o=_t.deserialize(n);if(o==null)throw new m("Invalid record","ERR_INVALID_RECORD");if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var od=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var sd=class{components;validators;log;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new m(o,"ERR_EMPTY_RECORD")}try{let o=_t.deserialize(t.record);await Pi(this.validators,o),o.timeReceived=new Date;let s=Po(o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var id=class{handlers;routingTable;log;constructor(e,t){let{providers:n,peerRouting:o,validators:s,logPrefix:i,peerInfoMapper:a}=t;this.log=e.logger.forComponent(`${i}:rpc`),this.routingTable=t.routingTable,this.handlers={[Ee.GET_VALUE.toString()]:new nd(e,{peerRouting:o,logPrefix:i}),[Ee.PUT_VALUE.toString()]:new sd(e,{validators:s,logPrefix:i}),[Ee.FIND_NODE.toString()]:new td(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[Ee.ADD_PROVIDER.toString()]:new ed(e,{providers:n,logPrefix:i}),[Ee.GET_PROVIDERS.toString()]:new rd(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[Ee.PING.toString()]:new od(e,{logPrefix:i})}}async handleMessage(e,t){try{await this.routingTable.add(e)}catch(o){this.log.error("Failed to update the kbucket store",o)}let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}return n.handle(e,t)}onIncomingStream(e){Promise.resolve().then(async()=>{let{stream:t,connection:n}=e,o=n.remotePeer;try{await this.routingTable.add(o)}catch(i){this.log.error(i)}let s=this;await Ke(t,i=>Kt(i),async function*(i){for await(let a of i){let c=kr.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield kr.encode(l))}},i=>gr(i),t)}).catch(t=>{this.log.error(t)})}};var ad=class extends xe{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new yt("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var lp=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await mr(this.dht.provide(e,t))}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await mr(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new m("Not found","ERR_NOT_FOUND")}},up=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},bI=32,xI=64,cd=class extends xe{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;constructor(e,t){super();let{kBucketSize:n,clientMode:o,validators:s,selectors:i,querySelfInterval:a,protocol:c,logPrefix:l,pingTimeout:d,pingConcurrency:u,maxInboundStreams:f,maxOutboundStreams:g,providers:h}=t,p=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(p),this.protocol=c??zg,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=f??bI,this.maxOutboundStreams=g??xI,this.peerInfoMapper=t.peerInfoMapper??t9,this.routingTable=new j1(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:p}),this.providers=new G1(e,h??{}),this.validators={...e9,...s},this.selectors={...Jg,...i},this.network=new H1(e,{protocol:this.protocol,logPrefix:p});let y=Z();t.allowQueryWithZeroPeers===!0&&y.resolve(),this.queryManager=new z1(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.peerRouting=new W1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:p}),this.contentFetching=new K1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:p}),this.contentRouting=new $1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:p}),this.routingTableRefresh=new J1(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:p}),this.rpc=new id(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:p,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new ad(e,{protocol:this.protocol,logPrefix:p}),this.querySelf=new Q1(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.network.addEventListener("peer",w=>{let b=w.detail;this.onPeerConnect(b).catch(E=>{this.log.error("could not add %p to routing table",b.id,E)}),this.dispatchEvent(new yt("peer",{detail:b}))}),this.topologyListener.addEventListener("peer",w=>{let b=w.detail;Promise.resolve().then(async()=>{let E=await this.components.peerStore.get(b),S={id:b,multiaddrs:E.addresses.map(({multiaddr:_})=>_),protocols:E.protocols};await this.onPeerConnect(S)}).catch(E=>{this.log.error("could not add %p to routing table",b,E)})}),this.dhtPeerRouting=new up(this),this.dhtContentRouting=new lp(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",w=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let b=w.detail.peer.addresses.some(({multiaddr:S})=>i9(S)),E=this.getMode();b&&E==="client"?await this.setMode("server"):E==="server"&&!b&&await this.setMode("client")}).catch(b=>{this.log.error("error setting dht server mode",b)})})}get[Jr](){return this.dhtContentRouting}get[en](){return this.dhtPeerRouting}get[Ko](){return this}async onPeerConnect(e){if(this.log("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e){await this.components.registrar.unhandle(this.protocol),e==="client"?(this.log("enabling client mode"),this.clientMode=!0):(this.log("enabling server mode"),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running=!0,await this.setMode(this.clientMode?"client":"server"),this.querySelf.start(),await Promise.all([this.providers.start(),this.queryManager.start(),this.network.start(),this.routingTable.start(),this.topologyListener.start(),this.routingTableRefresh.start()])}async stop(){this.running=!1,this.querySelf.stop(),await Promise.all([this.providers.stop(),this.queryManager.stop(),this.network.stop(),this.routingTable.stop(),this.routingTableRefresh.stop(),this.topologyListener.stop()])}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var E9;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(E9||(E9={}));function b9(r){return e=>new cd(e,r)}var T9=Ye(D9(),1),Bi=T9.default;var F9=Ye(M9(),1);var be;(function(r){r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(be||(be={}));var FI="/pkcs8/",V9="/info/",xs=new WeakMap,vs={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},fp={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function qn(r){return r==null||typeof r!="string"?!1:r===(0,F9.default)(r.trim())&&r.length>0}async function Le(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function dn(r){return new Oe(FI+r)}function Lo(r){return new Oe(V9+r)}var dd=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Bi(fp,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<vs.minKeyLength)throw new Error(`dek.keyLength must be least ${vs.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<vs.minSaltLength)throw new Error(`dek.saltLength must be least ${vs.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<vs.minIterationCount)throw new Error(`dek.iterationCount must be least ${vs.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?oc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";xs.set(this,{dek:n})}static generateOptions(){let e=Object.assign({},fp),t=Math.ceil(vs.minSaltLength/3)*3;return e.dek.salt=P(Ht(t),"base64"),e}static get options(){return fp}async createKey(e,t,n=2048){if(!qn(e)||e==="self")throw await Le(),new m("Invalid key name",be.ERR_INVALID_KEY_NAME);if(typeof t!="string")throw await Le(),new m("Invalid key type",be.ERR_INVALID_KEY_TYPE);let o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m("Key name already exists",be.ERR_KEY_ALREADY_EXISTS);switch(t.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await Le(),new m("Invalid RSA key size",be.ERR_INVALID_KEY_SIZE);break;default:break}let i;try{let a=await Da(t,n),c=await a.id(),l=xs.get(this);if(l==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let d=l.dek,u=await a.export(d);i={name:e,id:c};let f=this.components.datastore.batch();f.put(o,B(u)),f.put(Lo(e),B(JSON.stringify(i))),await f.commit()}catch(a){throw await Le(),a}return i}async listKeys(){let e={prefix:V9},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(P(n.value)));return t}async findKeyById(e){try{let n=(await this.listKeys()).find(o=>o.id===e);if(n==null)throw new m(`Key with id '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND);return n}catch(t){throw await Le(),t}}async findKeyByName(e){if(!qn(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=Lo(e);try{let n=await this.components.datastore.get(t);return JSON.parse(P(n))}catch(n){throw await Le(),this.log.error(n),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!qn(e)||e==="self")throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=dn(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Lo(e)),await o.commit(),n}async renameKey(e,t){if(!qn(e)||e==="self")throw await Le(),new m(`Invalid old key name '${e}'`,be.ERR_OLD_KEY_NAME_INVALID);if(!qn(t)||t==="self")throw await Le(),new m(`Invalid new key name '${t}'`,be.ERR_NEW_KEY_NAME_INVALID);let n=dn(e),o=dn(t),s=Lo(e),i=Lo(t);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${t}' already exists`,be.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(P(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,B(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Le(),c}}async exportKey(e,t){if(!qn(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new m("Password is required",be.ERR_PASSWORD_REQUIRED);let n=dn(e);try{let o=await this.components.datastore.get(n),s=P(o),i=xs.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek;return await(await ci(s,a)).export(t)}catch(o){throw await Le(),o}}async exportPeerId(e){let t="temporary-password",n=await this.exportKey(e,t),o=await ci(n,t);return ft(o.public.bytes,o.bytes)}async importKey(e,t,n){if(!qn(e)||e==="self")throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new m("PEM encoded key is required",be.ERR_PEM_REQUIRED);let o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i;try{i=await ci(t,n)}catch{throw await Le(),new m("Cannot read the key, most likely the password is wrong",be.ERR_CANNOT_READ_KEY)}let a;try{a=await i.id();let d=xs.get(this);if(d==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let u=d.dek;t=await i.export(u)}catch(d){throw await Le(),d}let c={name:e,id:a},l=this.components.datastore.batch();return l.put(o,B(t)),l.put(Lo(e),B(JSON.stringify(c))),await l.commit(),c}async importPeer(e,t){try{if(!qn(e))throw new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw new m("PeerId is required",be.ERR_MISSING_PRIVATE_KEY);if(t.privateKey==null)throw new m("PeerId.privKey is required",be.ERR_MISSING_PRIVATE_KEY);let n=await Rr(t.privateKey),o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i=xs.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek,c=await n.export(a),l={name:e,id:t.toString()},d=this.components.datastore.batch();return d.put(o,B(c)),d.put(Lo(e),B(JSON.stringify(l))),await d.commit(),l}catch(n){throw await Le(),n}}async getPrivateKey(e){if(!qn(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);try{let t=dn(e),n=await this.components.datastore.get(t);return P(n)}catch(t){throw await Le(),this.log.error(t),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Le(),new m(`Invalid old pass type '${typeof e}'`,be.ERR_INVALID_OLD_PASS_TYPE);if(typeof t!="string")throw await Le(),new m(`Invalid new pass type '${typeof t}'`,be.ERR_INVALID_NEW_PASS_TYPE);if(t.length<20)throw await Le(),new m(`Invalid pass length ${t.length}`,be.ERR_INVALID_PASS_LENGTH);this.log("recreating keychain");let n=xs.get(this);if(n==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?oc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";xs.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(dn(a.name)),l=P(c),d=await ci(l,o),u=s.toString(),f=await d.export(u),g=this.components.datastore.batch(),h={name:a.name,id:a.id};g.put(dn(a.name),B(f)),g.put(Lo(a.name),B(JSON.stringify(h))),await g.commit()}this.log("keychain reconstructed")}};function fd(r={}){return e=>new dd(e,r)}var Ui=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new hp}async consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new m("Rate limit exceeded","ERR_RATE_LIMIT_EXCEEDED",i);if(this.execEvenly&&i.msBeforeNext>0&&!i.isFirstInDuration){let a=Math.ceil(i.msBeforeNext/(i.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=i.consumedPoints*this.execEvenlyMinDelayMs),await N1(a)}return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},hp=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var we;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(we||(we={}));var cc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),pp=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),K9=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var mp=1<<20,VI=4<<20,hd=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=mp,t=VI){this._buffer=new ue,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw Object.assign(new Error("unprocessed message queue size too large!"),{code:"ERR_MSG_QUEUE_TOO_BIG"});let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.code==="ERR_MSG_TOO_BIG")throw l;break}let{id:n,type:o,length:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=H9(e),{value:o,offset:s}=H9(e,n),i=t&7;if(cc[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw Object.assign(new Error("message size too large!"),{code:"ERR_MSG_TOO_BIG"});return{id:t>>3,type:i,offset:n+s,length:o}}},KI=128,$9=127;function H9(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&$9)<<n:(s&$9)*Math.pow(2,n),n+=7}while(s>=KI);return e=o-e,{value:t,offset:e}}var gp=10*1024,yp=class{_pool;_poolOffset;constructor(){this._pool=ze(gp),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ve(e.id<<3|e.type,n,o),o+=Ne(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(Ve(e.data.length,n,o),o+=Ne(e.data.length)):(Ve(0,n,o),o+=Ne(0));let s=n.subarray(this._poolOffset,o);gp-o<100?(this._pool=ze(gp),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},$I=new yp;async function*q9(r){for await(let e of r){let t=new ue;$I.write(e,t),yield t}}var wp=class extends Do{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?pp:K9,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:pp.NEW_STREAM,data:new ue(B(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function W9(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=mp}=r;return new wp({id:s==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:s==="initiator"?"outbound":"inbound",maxDataSize:i,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${s}:${e}`)})}var HI=1024,qI=1024,WI=1024*1024*4,GI=5,zI=500;function G9(r){let e={...r,type:`${cc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=P(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=P(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var pd=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??zI,this.sink=this._createSink(),this._source=dt({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=Ke(this._source,n=>q9(n)),this.closeController=new AbortController,this.rateLimiter=new Ui({points:t.disconnectThreshold??GI,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new Error("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:s}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??qI))throw new m("Too many outbound streams open","ERR_TOO_MANY_OUTBOUND_STREAMS");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=W9({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,G9(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),s.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return s.set(t,c),c}_createSink(){return async t=>{let n=()=>{b1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new hd(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let s of t)for(let i of o.write(s))await this._handleIncoming(i);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",G9(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??HI)){this.log("too many inbound streams open"),this._source.push({id:t,type:we.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:P(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let s=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(s==null){this.log("missing stream %s for message type %s",t,cc[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let i=this._init.maxStreamBufferSize??WI;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(s.sourceReadableLength()>i)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new m("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers","ERR_STREAM_INPUT_BUFFER_FULL");s.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:s.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:s.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),s.abort(a)}}};var Ep=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}createStreamMuxer(e={}){return new pd(this.components,{...e,...this._init})}};function z9(r={}){return e=>new Ep(e,r)}var Y9="1.0.0",Q9="ping",X9="ipfs";var bp="ERR_WRONG_PING_ACK";var md=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??X9}/${Q9}/${Y9}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0,this.handleMessage=this.handleMessage.bind(this)}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now();Ke(t,t).catch(o=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,o)}).finally(()=>{let o=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,o)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=Ht(32),s=await this.components.connectionManager.openConnection(e,t),i,a=()=>{};if(t.signal==null){let c=AbortSignal.timeout(this.timeout);t={...t,signal:c}}try{i=await s.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{i?.abort(new m("ping timeout",pn))},t.signal?.addEventListener("abort",a,{once:!0});let c=await Ke([o],i,async d=>ds(d)),l=Date.now()-n;if(c==null)throw new m(`Did not receive a ping ack after ${l}ms`,bp);if(!j(o,c.subarray()))throw new m(`Received wrong ping ack after ${l}ms`,bp);return this.log("ping %p complete in %dms",s.remotePeer,l),l}catch(c){throw this.log.error("error while pinging %p",s.remotePeer,c),i?.abort(c),c}finally{t.signal?.removeEventListener("abort",a),i!=null&&await i.close()}}};function j9(r={}){return e=>new md(e,r)}var dr;(function(r){r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_DATA_CHANNEL="ERR_DATA_CHANNEL",r.ERR_CONNECTION_CLOSED="ERR_CONNECTION_CLOSED",r.ERR_HASH_NOT_SUPPORTED="ERR_HASH_NOT_SUPPORTED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_INVALID_FINGERPRINT="ERR_INVALID_FINGERPRINT",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS"})(dr||(dr={}));var Bo=class extends m{constructor(e,t){super(`WebRTC transport error: ${e}`,t??""),this.name="WebRTCTransportError"}};var xp=class extends Bo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`,dr.ERR_DATA_CHANNEL),this.name="WebRTC/DataChannelError"}};function Ip(r,e){return new xp(r,e)}var vp=class extends Bo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`,dr.ERR_INVALID_MULTIADDR),this.name="WebRTC/InappropriateMultiaddrError"}};function gd(r){return new vp(r)}var Rp=class extends Bo{constructor(e){super(`There was a problem with a provided argument: ${e}`,dr.ERR_INVALID_PARAMETERS),this.name="WebRTC/InvalidArgumentError"}};function lc(r){return new Rp(r)}var Sp=class extends Bo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`,dr.ERR_INVALID_FINGERPRINT),this.name="WebRTC/InvalidFingerprintError"}};function Dp(r,e){return new Sp(r,e)}var _p=class extends Bo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`,dr.ERR_NOT_IMPLEMENTED),this.name="WebRTC/UnimplementedError"}};function Z9(r){return new _p(r)}var Ap=class extends Bo{constructor(e){super(`unsupported hash algorithm: ${e}`,dr.ERR_HASH_NOT_SUPPORTED),this.name="WebRTC/UnsupportedHashAlgorithmError"}};function J9(r){return new Ap(r)}var ey=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},ZI=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var JI=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var eD=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var tD=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var rD=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var nD=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,oD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,ty=3,sD=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",nD]],ry=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function oy(r){return r?ny(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new rD:typeof navigator<"u"?ny(navigator.userAgent):cD()}function iD(r){return r!==""&&sD.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function ny(r){var e=iD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new tD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<ty&&(o=ey(ey([],o,!0),lD(ty-o.length),!0)):o=[];var s=o.join("."),i=aD(r),a=oD.exec(r);return a&&a[1]?new eD(t,s,i,a[1]):new ZI(t,s,i)}function aD(r){for(var e=0,t=ry.length;e<t;e++){var n=ry[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function cD(){var r=typeof process<"u"&&process.version;return r?new JI(process.version.slice(1)):null}function lD(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var sy=oy(),uc=sy!=null&&sy.name==="firefox",yd=async function*(){},wd=async r=>{},uD=30*1e3;function iy(r,e,t=uD,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=Z(),s=!1;r.bufferedAmountLowThreshold=0;let i=()=>{s||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",i,{once:!0}),r.addEventListener("bufferedamountlow",()=>{s=!0,r.removeEventListener("close",i),o.resolve()}),await zr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}var Rs=class{log;peerConnection;remoteAddr;timeline;metrics;source=yd();sink=wd;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var Yt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.flag=r.Flag.codec().decode(o);break;case 2:i.message=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Yt||(Yt={}));var dD=16*1024*1024,fD=30*1e3,hD=5,pD=2,mD=16*1024,gD=5e3,yD=5e3,Tp=class extends Do{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await zr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(s){this.log.error("error receiving FIN_ACK",s)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(s=>{this.log.error("error ending stream",s)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=dt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??fD,this.maxBufferedAmount=e.maxBufferedAmount??dD,this.maxMessageSize=(e.maxMessageSize??mD)-hD-pD,this.receiveFinAck=Z(),this.finAckTimeout=e.closeTimeout??gD,this.openTimeout=e.openTimeout??yD,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new m("Unknown datachannel state","ERR_INVALID_STATE")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(s=>{this.log.error("error closing stream after channel closed",s)})},this.channel.onerror=o=>{let s=o.error;this.abort(s)},this.channel.onmessage=async o=>{let{data:s}=o;s===null||s.byteLength===0||this.incomingData.push(new Uint8Array(s,0,s.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Kt(this.incomingData)){let s=n.processIncomingProtobuf(o);s!=null&&n.sourcePush(new ue(s))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await ic(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Ro?new m(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`,"ERR_BUFFER_CLEAR_TIMEOUT"):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new m(`Invalid datachannel state - ${this.channel.readyState}`,"ERR_INVALID_STATE");this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await ic(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Yt.encode({message:n}),s=gr.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Yt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Yt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await Ot(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorCode:"ERR_FIN_ACK_NOT_RECEIVED"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(Yt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Yt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Yt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Yt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Yt.Flag.RESET&&this.reset(),t.flag===Yt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Yt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=Yt.encode({flag:e}),n=gr.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function Mi(r){let{channel:e,direction:t}=r;return new Tp({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var ay="/webrtc",Ss=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??ay,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},s=Mi({channel:n,direction:"inbound",onEnd:i=>{o.onEnd(i)},logger:e.logger,...this.dataChannelOptions});o.stream=s,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(i=>i.stream.id!==s.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new kp(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},kp=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??ay,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=Mi({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),iy(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=yd();sink=wd;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=Mi({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Fi=globalThis.RTCPeerConnection,Ed=globalThis.RTCSessionDescription,cy=globalThis.RTCIceCandidate;var Qt;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.data=o.string();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Qt||(Qt={}));var bd=async(r,e,t)=>{try{let n=Z();for(ED(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null)break;if(o.type!==Qt.Type.ICE_CANDIDATE)throw new m("ICE candidate message expected","ERR_NOT_ICE_CANDIDATE");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.log.trace("end-of-candidates received");continue}let i=new cy(s);t.log.trace("%s received new ICE candidate",t.direction,i);try{await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0)throw n}};function wD(r){return uc?r.iceConnectionState:r.connectionState}function ED(r,e){r[uc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(wD(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new m("RTCPeerConnection was closed","ERR_CONNECTION_CLOSED_BEFORE_CONNECTED"));break;default:break}}}async function ly({peerConnection:r,signal:e,metrics:t,multiaddr:n,connectionManager:o,transportManager:s,log:i}){let{baseAddr:a}=uy(n);t?.dialerEvents.increment({open:!0}),i.trace("dialing base address: %a",a);let c=a.getPeerId();if(c==null)throw new m("Relay peer was missing","ERR_INVALID_ADDRESS");let l=o.getConnections(ge(c)),d,u=!1;l.length===0?(d=await s.dial(a,{signal:e}),u=!0):d=l[0];try{let f=await d.newStream(xd,{signal:e,runOnTransientConnection:!0}),g=Je(f).pb(Qt);try{let h=r.createDataChannel("init");r.onicecandidate=({candidate:b})=>{let E=JSON.stringify(b?.toJSON()??null);i.trace("initiator sending ICE candidate %s",E),g.write({type:Qt.Type.ICE_CANDIDATE,data:E},{signal:e}).catch(S=>{i.error("error sending ICE candidate",S)})},r.onicecandidateerror=b=>{i.error("initiator ICE candidate error",b)};let p=await r.createOffer().catch(b=>{throw i.error("could not execute createOffer",b),new m("Failed to set createOffer","ERR_SDP_HANDSHAKE_FAILED")});i.trace("initiator send SDP offer %s",p.sdp),await g.write({type:Qt.Type.SDP_OFFER,data:p.sdp},{signal:e}),await r.setLocalDescription(p).catch(b=>{throw i.error("could not execute setLocalDescription",b),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")});let y=await g.read({signal:e});if(y.type!==Qt.Type.SDP_ANSWER)throw new m("Remote should send an SDP answer","ERR_SDP_HANDSHAKE_FAILED");i.trace("initiator receive SDP answer %s",y.data);let w=new Ed({type:"answer",sdp:y.data});return await r.setRemoteDescription(w).catch(b=>{throw i.error("could not execute setRemoteDescription",b),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")}),i.trace("initiator read candidates until connected"),await bd(r,g,{direction:"initiator",signal:e,log:i}),i.trace("initiator connected, closing init channel"),h.close(),i.trace("initiator closing signalling stream"),await g.unwrap().unwrap().close({signal:e}),i.trace("initiator connected to remote address %s",n),{remoteAddress:n}}catch(h){throw r.close(),f.abort(h),h}finally{r.onicecandidate=null,r.onicecandidateerror=null}}finally{if(u)try{await d.close({signal:e})}catch(f){d.abort(f)}}}var vd=class extends xe{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>Yr.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function dy({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=Je(e).pb(Qt);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:Qt.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})};let a=await s.read({signal:t});if(a.type!==Qt.Type.SDP_OFFER)throw new m(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `,"ERR_SDP_HANDSHAKE_FAILED");o.trace("recipient receive SDP offer %s",a.data);let c=new Ed({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new m("Failed to create answer","ERR_SDP_HANDSHAKE_FAILED")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:Qt.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),o.trace("recipient read candidates until connected"),await bd(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(r.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let i=X(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var bD="/webrtc",xD="/p2p-circuit",xd="/webrtc-signaling/0.0.1",vD=30*1e3,Rd=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,ee(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}isStarted(){return this._started}async start(){await this.components.registrar.handle(xd,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnTransientConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(xd),this._started=!1}createListener(e){return new vd(this.components,{shutdownController:this.shutdownController})}[Symbol.toStringTag]="@libp2p/webrtc";[tn]=!0;filter(e){return e.filter(U4.exactMatch)}async dial(e,t){this.log.trace("dialing address: %a",e);let n=new Fi(this.init.rtcConfiguration),o=new Ss(this.components,{peerConnection:n,dataChannelOptions:this.init.dataChannel}),{remoteAddress:s}=await ly({peerConnection:n,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log}),i=new Rs(this.components,{peerConnection:n,timeline:{open:Date.now()},remoteAddr:s,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,muxerFactory:o});return this._closeOnShutdown(n,i),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??vD),o=new Fi(this.init.rtcConfiguration),s=new Ss(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await dy({peerConnection:o,connection:e,stream:t,signal:n,log:this.log}),a=new Rs(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:i,metrics:this.metrics?.listenerEvents});this._closeOnShutdown(o,a),await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:s}),await t.close({signal:n})}catch(i){throw t.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function uy(r){let e=r.toString().split(bD+"/");if(e.length!==2)throw new m("webrtc protocol was not present in multiaddr",dr.ERR_INVALID_MULTIADDR);if(!e[0].includes(xD))throw new m("p2p-circuit protocol was not present in multiaddr",dr.ERR_INVALID_MULTIADDR);let t=X(e[0]),o=X("/"+e[1]).getPeerId();if(o==null)throw new m("destination peer id was missing",dr.ERR_INVALID_MULTIADDR);let s=t.protos().pop();if(s===void 0)throw new m("invalid multiaddr",dr.ERR_INVALID_MULTIADDR);return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:ge(o)}}var Kw=Ye(i3(),1);var Ow=Ye(i3(),1);var a3=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Lw(r,e){let t=r.getConfiguration().certificates?.at(0);if(t==null||t.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:Tk(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw Dp("","no fingerprint on local certificate");return n}var Dk=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Tk(r){return r.match(Dk)?.groups?.fingerprint}function kk(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Ld(r){let t=r.stringTuples().filter(n=>n[0]===Mw).map(n=>n[1])[0];if(t===void 0||t==="")throw gd(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function c3(r){let e=a3.decode(r);return Ow.decode(e)}function Ck(r){let e=c3(Ld(r)),t=l3(e.name),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw Dp(n,r.toString());return[`${t.toUpperCase()} ${o.join(":").toUpperCase()}`,n]}function l3(r){switch(r){case"sha1":return"sha-1";case"sha2-256":return"sha-256";case"sha2-512":return"sha-512";default:throw J9(r)}}function Nk(r,e){let{host:t,port:n}=r.toOptions(),o=kk(r),[s]=Ck(r);return`v=0
|
|
23
23
|
o=- 0 0 IN ${o} ${t}
|
|
24
24
|
s=-
|
|
25
25
|
c=IN ${o} ${t}
|
|
@@ -34,24 +34,24 @@ a=fingerprint:${s}
|
|
|
34
34
|
a=sctp-port:5000
|
|
35
35
|
a=max-message-size:16384
|
|
36
36
|
a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
|
|
37
|
-
`}function
|
|
37
|
+
`}function Bw(r,e){return{type:"answer",sdp:Nk(r,e)}}function Uw(r,e){if(r.sdp===void 0)throw lc("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
|
|
38
38
|
a=ice-ufrag:`+e+`
|
|
39
39
|
`).replace(/\na=ice-pwd:[^\n]*\n/,`
|
|
40
40
|
a=ice-pwd:`+e+`
|
|
41
|
-
`),r}var Yb=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Qb=r=>[...Array(r)].map(()=>Yb.at(Math.floor(Math.random()*Yb.length))).join("");var CN=1e4,Xae=Z("webrtc-direct").code,Gb=Z("certhash").code,Hd=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw aw("WebRTCTransport.createListener")}filter(e){return e.filter(M9.exactMatch)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[rn]=!0;async _connect(e,t){let n=new AbortController,o=n.signal,s=e.getPeerId();if(s===null)throw _d("we need to have the remote's PeerId");let i=we(s),a=x3($d(e)),c=await Wi.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:v3(a.name)}),l=new Wi({certificates:[c]});try{let d=new Promise((_,k)=>{let P=l.createDataChannel("",{negotiated:!0,id:0}),N=setTimeout(()=>{let O=`Data channel was never opened: state: ${P.readyState}`;this.log.error(O),this.metrics?.dialerEvents.increment({open_error:!0}),k(Vp("data",O))},CN);P.onopen=O=>{clearTimeout(N),_(P)},P.onerror=O=>{clearTimeout(N);let Y=`Error opening a data channel for handshaking: ${O.target?.toString()??"not specified"}`;this.log.error(Y),this.metrics?.dialerEvents.increment({unknown_error:!0}),k(Vp("data",Y))}}),u="libp2p+webrtc+v1/"+Qb(32),f=await l.createOffer(),m=zb(f,u);await l.setLocalDescription(m);let h=Wb(e,u);await l.setRemoteDescription(h);let p=await d,y=this.components.peerId,w=this.generateNoisePrologue(l,a.code,e),E=Ci({prologueBytes:w})(this.components),b=qi({channel:p,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),S={...b,sink:b.sink.bind(b),source:async function*(){for await(let _ of b.source)for(let k of _)yield k}()},R=new Ts(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),A=gc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(A,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":R.close().catch(_=>{this.log.error("error closing connection",_)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let D=new ks(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await E.secureInbound(y,S,i),await t.upgrader.upgradeOutbound(R,{skipProtection:!0,skipEncryption:!0,muxerFactory:D})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw mc("no local certificate");let o=qb(e,{log:this.log});if(o==null)throw mc("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=B(s,"hex"),a=Xb.encode(i,t),c=E3.decode($d(n)),l=B("libp2p-webrtc-noise:");return _e([l,a,c])}};function jb(r){return e=>new Hd(e,r)}function Zb(r){return e=>new kd(e,r)}var NN=[Z("tcp").code,Z("dns").code,Z("dnsaddr").code,Z("dns4").code,Z("dns6").code];function Jb(r){let e;try{e=Z("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function eE(r){return r.some(([e,t])=>e===Z("tls").code)}function lr(r,e,t){let n=tE[Z(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${Z(r).name}`);let o=n(e,t);return r===Z("ip6").code?`[${o}]`:o}var tE={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${lr(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${lr(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${lr(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${lr(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=eE(e),n=Jb(e);if(t&&n!==null)return`https://${n}`;let o=t?"https://":"http://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=lr(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return lr(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return lr(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=lr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=eE(e),n=Jb(e);if(t&&n!==null)return`wss://${n}`;let o=t?"wss://":"ws://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=lr(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=lr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${lr(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${lr(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${lr(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function rE(r,e){let n=X(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=Z(o[0]),i=tE[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&NN.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var nE=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",s)}function o(){n(),e()}function s(i){n(),t(i.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",s)})};var oE=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await nE(r)}catch(s){if(s.message==="socket closed")break;throw s}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,s)=>{r.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{r.close()})})});var cE=Ne(iE(),1);function aE(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var lE=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(s)},l=d=>{a(()=>{i(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let s=new cE.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=B(u.data)),aE(u.data)&&(f=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(f=u.data),f!=null&&i(f)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield aE(i)?new Uint8Array(i):i}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var uE=(r,e)=>{e=e??{};let t=lE(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let i=new URL(r.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:oE(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(i=>{r.addEventListener("close",()=>{i()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var dE=WebSocket;var ON={"http:":"ws:","https:":"wss:"},fE="ws:",hE=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??fE}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??fE,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${s}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(ON))t.protocol===n&&(t.protocol=o);return t};function pE(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=hE(r,t),o=new dE(n.toString(),e.websocket);return uE(o,e)}function mE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Oi.matches(t)||_s.matches(t)})}function gE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return _s.matches(t)})}function yE(){throw new Error("WebSocket Servers can not be created in the browser!")}function wE(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o={log:n,async sink(s){try{await r.sink(async function*(){for await(let i of s)i instanceof Uint8Array?yield i:yield i.subarray()}())}catch(i){i.type!=="aborted"&&n.error(i)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(s={}){let i=Date.now();if(s.signal==null){let c=AbortSignal.timeout(500);s={...s,signal:c}}let a=()=>{let{host:c,port:l}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",c,l,Date.now()-i),this.abort(new g("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};s.signal?.addEventListener("abort",a);try{await r.close()}catch(c){n.error("error closing WebSocket gracefully",c),this.abort(c)}finally{s.signal?.removeEventListener("abort",a),o.timeline.close=Date.now()}},abort(s){let{host:i,port:a}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",i,a,s),r.destroy(),o.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{o.timeline.close==null&&(o.timeline.close=Date.now())},{once:!0}),o}var R3=class{log;init;logger;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.init=t}[Symbol.toStringTag]="@libp2p/websockets";[rn]=!0;async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=wE(n,e,{logger:this.logger});this.log("new outbound connection %s",o.remoteAddr);let s=await t.upgrader.upgradeOutbound(o);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,t){if(t?.signal?.aborted===!0)throw new Nr;let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=ie(),s=pE(rE(e),this.init);if(s.socket.addEventListener("error",()=>{let c=new g(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");this.log.error("connection error:",c),o.reject(c)}),t.signal==null)return await Promise.race([s.connected(),o.promise]),this.log("connected %s",e),s;let i,a=new Promise((c,l)=>{if(i=()=>{l(new Nr),s.close().catch(d=>{this.log.error("error closing raw socket",d)})},t?.signal?.aborted===!0){i();return}t?.signal?.addEventListener("abort",i)});try{await Promise.race([a,o.promise,s.connected()])}finally{i!=null&&t?.signal?.removeEventListener("abort",i)}return this.log("connected %s",e),s}createListener(e){return yE({logger:this.logger},{...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):H1||q1?gE(e):mE(e)}};function bE(r={}){return e=>new R3(e,r)}async function A3(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=r.writable.getWriter(),c=r.readable.getReader();await a.ready;function l(){let h=n.findIndex(p=>p===m);h!==-1&&(n.splice(h,1),m.timeline.close=Date.now(),o?.(m))}let d=!1,u=!1;(async function(){let h=await a.closed.catch(p=>p);if(h!=null){let p=h.message;p.includes("aborted by the remote server")||p.includes("STOP_SENDING")||i.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}d=!0,d&&u&&l()})().catch(()=>{i.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await c.closed.catch(p=>p);h!=null&&i.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),u=!0,d&&u&&l()}().catch(()=>{i.error("WebTransport failed to cleanup closed stream")});let f=!1,m={id:e,status:"open",writeStatus:"ready",readStatus:"ready",abort(h){d||(a.abort(h).catch(p=>{i.error("could not abort stream",p)}),d=!0),u=!0,this.status="aborted",this.writeStatus="closed",this.readStatus="closed",this.timeline.reset=this.timeline.close=this.timeline.closeRead=this.timeline.closeWrite=Date.now(),l()},async close(h){this.status="closing",await Promise.all([m.closeRead(h),m.closeWrite(h)]),l(),this.status="closed",this.timeline.close=Date.now()},async closeRead(h){if(!u){this.readStatus="closing";try{await c.cancel()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(d=!0)}this.timeline.closeRead=Date.now(),this.readStatus="closed",u=!0}d&&l()},async closeWrite(h){if(!d){d=!0,this.writeStatus="closing";try{await a.close()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(u=!0)}this.timeline.closeWrite=Date.now(),this.writeStatus="closed"}u&&l()},direction:t,timeline:{open:Date.now()},metadata:{},source:async function*(){for(;;){let h=await c.read();if(h.done){u=!0,d&&l();return}yield new de(h.value)}}(),sink:async function(h){if(f)throw new Error("sink already called on stream");f=!0;try{this.writeStatus="writing";for await(let p of h)if(p instanceof Uint8Array)await a.write(p);else for(let y of p)await a.write(y);this.writeStatus="done"}finally{this.timeline.closeWrite=Date.now(),this.writeStatus="closed",await m.closeWrite()}},log:i};return m}function I3(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function EE(r,e){return e.filter(n=>!!r.find(o=>j(n,o))).length===e.length}var UN=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function FN(r){return ur.decode(UN.decode(r))}function xE(r){if(!F1.matches(r))throw new g("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([i,a])=>i===Z("certhash").code).map(([i,a])=>FN(a??"")),n=e.filter(([i,a])=>i===Z("p2p").code).map(([i,a])=>we(a??""))[0],o=r.toOptions(),s=o.host;return o.family===6&&s?.includes(":")&&(s=`[${s}]`),{url:`https://${s}:${o.port}`,certhashes:t,remotePeer:n}}var D3=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[rn]=!0;async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:o,certhashes:s,remotePeer:i}=xE(e);if(i==null)throw new Error("Need a target peerid");if(s.length===0)throw new Error("Expected multiaddr to contain certhashes");let a,c,l=()=>{},d=!1,u=!1,f=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let m=new WebTransport(`${o}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:s.map(h=>({algorithm:"sha-256",value:h.digest}))});if(l=h=>{if(!d)try{this.metrics?.dialerEvents.increment({[h]:!0}),m.close()}catch(p){this.log.error("error closing wt session",p)}finally{c!=null&&(c.timeline.close=Date.now()),d=!0}},a=()=>{l(u?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),await Promise.race([m.closed,m.ready]),u=!0,this.metrics?.dialerEvents.increment({ready:!0}),m.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{l("remote_close")}),!await this.authenticateWebTransport(m,n,i,s))throw new Error("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{this.log("Closing webtransport"),l("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),l("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...I3()},f=!0,await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(m),skipProtection:!0})}catch(m){throw this.log.error("caught wt session err",m),l(f?"upgrade_error":u?"noise_error":"ready_error"),m}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport(e,t,n,o){let s=await e.createBidirectionalStream(),i=s.writable.getWriter(),a=s.readable.getReader();await i.ready;let c={source:async function*(){for(;;){let u=await a.read();if(u.value!=null&&(yield u.value),u.done)break}}(),sink:async function(u){for await(let f of u)f instanceof Uint8Array?await i.write(f):await i.write(f.subarray())}},l=Ci()(this.components),{remoteExtensions:d}=await l.secureOutbound(t,c,n);if(i.close().catch(u=>{this.log.error(`Failed to close authentication stream writer: ${u.message}`)}),a.cancel().catch(u=>{this.log.error(`Failed to close authentication stream reader: ${u.message}`)}),!EE(d?.webtransportCerthashes??[],o.map(u=>u.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config,o=this;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];return async function(){let c=e.incomingBidirectionalStreams.getReader();for(;;){let{done:l,value:d}=await c.read();if(l)break;if(i.length>=n.maxInboundStreams)d.writable.close().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await A3(d,String(t++),"inbound",i,s?.onStreamEnd,o.components.logger);i.push(u),s?.onIncomingStream?.(u)}}}().catch(()=>{this.log.error("WebTransport failed to receive incoming stream")}),{protocol:"webtransport",streams:i,newStream:async c=>{let l=await e.createBidirectionalStream(),d=await A3(l,String(t++),s?.direction??"outbound",i,s?.onStreamEnd,o.components.logger);return i.push(d),d},close:async c=>{this.log("Closing webtransport muxer"),await Promise.all(i.map(async l=>l.close(c)))},abort:c=>{this.log("Aborting webtransport muxer with err:",c);for(let l of i)l.abort(c)},...I3()}}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(F1.exactMatch)}};function vE(r={}){return e=>new D3(e,r)}var T3=Ne(bu(),1);function _E(r,e){let t=e.map((n,o)=>({record:cn(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===qt.ValidityType.EOL&&o.record.validityType===qt.ValidityType.EOL){let a=T3.default.fromString(n.record.validity).toDate(),c=T3.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var zd="1.3.0",Gd="libp2p";var RE="4.1.0-9ac5909",AE="helia";var IE={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function Yd(r={}){return{peerId:r.peerId,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[np({discoverRelays:1}),Zb(),jb(),vE(),bE()],connectionEncryption:[Ci()],streamMuxers:[Xg(),rw()],peerDiscovery:[p9(IE)],services:{autoNAT:r9(),dcutr:$9(),delegatedRouting:()=>k7("https://delegated-ipfs.dev"),dht:Ty({clientMode:!0,validators:{ipns:Bu},selectors:{ipns:_E}}),identify:ty({agentVersion:`${AE}/${RE} ${Gd}/${zd} UserAgent=${globalThis.navigator.userAgent}`}),keychain:bd(r.keychain),ping:iw()}}}var St={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS"};var ta;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=te((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:"",value:new Uint8Array(0)},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=i.bytes();break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>ee(i,o.codec()),o.decode=i=>J(i,o.codec())})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=te((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),Xd.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:""},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=Xd.codec().decode(i,i.uint32());break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>ee(i,o.codec()),o.decode=i=>J(i,o.codec())})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=te((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),Qd.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={addresses:[],protocols:[],metadata:new Map,tags:new Map},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.addresses.push(Qd.codec().decode(o,o.uint32()));break;case 2:i.protocols.push(o.string());break;case 4:i.publicKey=o.bytes();break;case 5:i.peerRecordEnvelope=o.bytes();break;case 6:{let l=r.Peer$metadataEntry.codec().decode(o,o.uint32());i.metadata.set(l.key,l.value);break}case 7:{let l=r.Peer$tagsEntry.codec().decode(o,o.uint32());i.tags.set(l.key,l.value);break}default:o.skipType(c&7);break}}return i})),n),r.encode=o=>ee(o,r.codec()),r.decode=o=>J(o,r.codec())})(ta||(ta={}));var Qd;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={multiaddr:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.multiaddr=t.bytes();break;case 2:o.isCertified=t.bool();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Qd||(Qd={}));var Xd;(function(r){let e;r.codec=()=>(e==null&&(e=te((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.value=t.uint32();break;case 2:o.expiry=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>ee(t,r.codec()),r.decode=t=>J(t,r.codec())})(Xd||(Xd={}));function ra(r,e){let t=ta.decode(e);t.publicKey!=null&&r.publicKey==null&&(r=tm({...r,publicKey:r.publicKey}));let n=new Map,o=BigInt(Date.now());for(let[s,i]of t.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...t,id:r,addresses:t.addresses.map(({multiaddr:s,isCertified:i})=>({multiaddr:X(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var k3="/peers/";function na(r){if(!Ks(r)||r.type==null)throw new g("Invalid PeerId",St.ERR_INVALID_PARAMETERS);let e=r.toCID().toString();return new Oe(`${k3}${e}`)}async function DE(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=X(o.multiaddr)),!so(o.multiaddr))throw new g("Multiaddr was invalid",St.ERR_INVALID_PARAMETERS);if(!await e(r,o.multiaddr))continue;let s=o.isCertified??!1,i=o.multiaddr.toString(),a=n.get(i);a!=null?o.isCertified=a.isCertified||s:n.set(i,{multiaddr:o.multiaddr,isCertified:s})}return[...n.values()].sort((o,s)=>o.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:o,multiaddr:s})=>({isCertified:o,multiaddr:s.bytes}))}async function Zd(r,e,t,n){if(e==null)throw new g("Invalid PeerData",St.ERR_INVALID_PARAMETERS);if(e.publicKey!=null&&r.publicKey!=null&&!j(e.publicKey,r.publicKey))throw new g("publicKey bytes do not match peer id publicKey bytes",St.ERR_INVALID_PARAMETERS);let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new g("peer id did not match existing peer id",St.ERR_INVALID_PARAMETERS);let s=o?.addresses??[],i=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=jd(u,{validate:TE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=jd(u,{validate:kE,map:CE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[f,m]of u)m==null?a.delete(f):a.set(f,m);a=jd([...a.entries()],{validate:TE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),f=new Map(c);for(let[m,h]of u)h==null?f.delete(m):f.set(m,h);c=jd([...f.entries()],{validate:kE,map:CE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d={addresses:await DE(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((u,f)=>u.localeCompare(f)),metadata:a,tags:c,publicKey:o?.id.publicKey??e.publicKey??r.publicKey,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function jd(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function TE(r,e){if(typeof r!="string")throw new g("Metadata key must be a string",St.ERR_INVALID_PARAMETERS);if(!(e instanceof Uint8Array))throw new g("Metadata value must be a Uint8Array",St.ERR_INVALID_PARAMETERS)}function kE(r,e){if(typeof r!="string")throw new g("Tag name must be a string",St.ERR_INVALID_PARAMETERS);if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new g("Tag value must be an integer",St.ERR_INVALID_PARAMETERS);if(e.value<0||e.value>100)throw new g("Tag value must be between 0-100",St.ERR_INVALID_PARAMETERS)}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new g("Tag ttl must be an integer",St.ERR_INVALID_PARAMETERS);if(e.ttl<0)throw new g("Tag ttl must be between greater than 0",St.ERR_INVALID_PARAMETERS)}}function CE(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function Jd(r,e,t){let n=r.toString().split("/")[2],o=at.decode(n),s=Xe(o),i=t.get(s);if(i!=null)return i;let a=ra(s,e);return t.set(s,a),a}function VN(r,e){return r==null?{}:{prefix:k3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Jd(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Jd(n.key,n.value,e),Jd(o.key,o.value,e)))}}var ef=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=za({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(na(e))}async delete(e){if(this.peerId.equals(e))throw new g("Cannot delete self peer",St.ERR_INVALID_PARAMETERS);await this.datastore.delete(na(e))}async load(e){let t=await this.datastore.get(na(e));return ra(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Zd(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,s,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Zd(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Zd(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new wt;for await(let{key:n,value:o}of this.datastore.query(VN(e??{},t))){let s=Jd(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(na(e)),n=ra(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.code!=="ERR_NOT_FOUND")throw t}return{}}async#t(e,t,n,o){let s=ta.encode(t);return n!=null&&j(s,n)?{peer:ra(e,s),previous:o,updated:!1}:(await this.datastore.put(na(e),s),{peer:ra(e,s),previous:o,updated:!0})}};var tf=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new ef(e,t)}async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Wa(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await Qr.openAndCertify(e,sr.DOMAIN);if(t?.equals(n.peerId)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,n.peerId),!1;let o=sr.createFromProtobuf(n.payload),s;try{s=await this.get(n.peerId)}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i}if(s?.peerRecordEnvelope!=null){let i=await Qr.createFromProtobuf(s.peerRecordEnvelope),a=sr.createFromProtobuf(i.payload);if(a.seqNumber>=o.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",a.seqNumber,o.seqNumber),!1}return await this.patch(o.peerId,{peerRecordEnvelope:e,addresses:o.multiaddrs.map(i=>({isCertified:!0,multiaddr:i}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function NE(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var KN=r=>r;function C3(r,e){let t=r.getPeerId();return t!=null&&we(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var rf=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??KN,this._updatePeerStoreAddresses=NE(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>X(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>X(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>X(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>X(e))}addObservedAddr(e){e=C3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=C3(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=C3(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>X(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var N3=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=Jn())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Cc(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},$N=["metrics","connectionProtector","dns"],HN=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function PE(r={}){let e=new N3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!HN.includes(o)){let i=e.components[o];if(i==null&&!$N.includes(o))throw new g(`${o} not set`,"ERR_SERVICE_MISSING");return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function OE(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!Ir(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function P3(r){try{let{address:e}=r.nodeAddress();return!!Ir(e)}catch{return!0}}function qN(r,e){let t=P3(r.multiaddr),n=P3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function WN(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function zN(r,e){let t=nc.exactMatch(r.multiaddr),n=nc.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function oa(r,e){let t=qN(r,e);if(t!==0)return t;let n=zN(r,e);return n!==0?n:WN(r,e)}var GN=32,{code:YN}=Z("dnsaddr"),Ps=async function(e,t={}){let n=t.maxRecursiveDepth??GN;if(n===0)throw new g("Max recursive depth reached","ERR_MAX_RECURSIVE_DEPTH_REACHED");let[,o]=e.stringTuples().find(([l])=>l===YN)??[],i=await(t?.dns??zu()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[Gr.TXT]}),a=e.getPeerId(),c=[];for(let l of i.Answer){let d=l.data.split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=X(d);if(d.startsWith("/dnsaddr")){let f=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(m=>m.toString()))}else c.push(u.toString())}return c};var Yn;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.ERR_PROTECTOR_REQUIRED="Private network is enforced, but no protector was provided",r.NOT_FOUND="Not found"})(Yn||(Yn={}));var z;(function(r){r.ERR_PROTECTOR_REQUIRED="ERR_PROTECTOR_REQUIRED",r.ERR_PEER_DIAL_INTERCEPTED="ERR_PEER_DIAL_INTERCEPTED",r.ERR_CONNECTION_INTERCEPTED="ERR_CONNECTION_INTERCEPTED",r.ERR_INVALID_PROTOCOLS_FOR_STREAM="ERR_INVALID_PROTOCOLS_FOR_STREAM",r.ERR_CONNECTION_ENDED="ERR_CONNECTION_ENDED",r.ERR_CONNECTION_FAILED="ERR_CONNECTION_FAILED",r.ERR_NODE_NOT_STARTED="ERR_NODE_NOT_STARTED",r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_TOO_MANY_ADDRESSES="ERR_TOO_MANY_ADDRESSES",r.ERR_NO_VALID_ADDRESSES="ERR_NO_VALID_ADDRESSES",r.ERR_RELAYED_DIAL="ERR_RELAYED_DIAL",r.ERR_DIALED_SELF="ERR_DIALED_SELF",r.ERR_DISCOVERED_SELF="ERR_DISCOVERED_SELF",r.ERR_DUPLICATE_TRANSPORT="ERR_DUPLICATE_TRANSPORT",r.ERR_ENCRYPTION_FAILED="ERR_ENCRYPTION_FAILED",r.ERR_HOP_REQUEST_FAILED="ERR_HOP_REQUEST_FAILED",r.ERR_INVALID_KEY="ERR_INVALID_KEY",r.ERR_INVALID_MESSAGE="ERR_INVALID_MESSAGE",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_PEER="ERR_INVALID_PEER",r.ERR_MUXER_UNAVAILABLE="ERR_MUXER_UNAVAILABLE",r.ERR_NOT_FOUND="ERR_NOT_FOUND",r.ERR_TRANSPORT_UNAVAILABLE="ERR_TRANSPORT_UNAVAILABLE",r.ERR_TRANSPORT_DIAL_FAILED="ERR_TRANSPORT_DIAL_FAILED",r.ERR_UNSUPPORTED_PROTOCOL="ERR_UNSUPPORTED_PROTOCOL",r.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED="ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_SIGNATURE_NOT_VALID="ERR_SIGNATURE_NOT_VALID",r.ERR_FIND_SELF="ERR_FIND_SELF",r.ERR_NO_ROUTERS_AVAILABLE="ERR_NO_ROUTERS_AVAILABLE",r.ERR_CONNECTION_NOT_MULTIPLEXED="ERR_CONNECTION_NOT_MULTIPLEXED",r.ERR_NO_DIAL_TOKENS="ERR_NO_DIAL_TOKENS",r.ERR_INVALID_CMS="ERR_INVALID_CMS",r.ERR_MISSING_KEYS="ERR_MISSING_KEYS",r.ERR_NO_KEY="ERR_NO_KEY",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_MISSING_PUBLIC_KEY="ERR_MISSING_PUBLIC_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_WRONG_PING_ACK="ERR_WRONG_PING_ACK",r.ERR_INVALID_RECORD="ERR_INVALID_RECORD",r.ERR_ALREADY_SUCCEEDED="ERR_ALREADY_SUCCEEDED",r.ERR_NO_HANDLER_FOR_PROTOCOL="ERR_NO_HANDLER_FOR_PROTOCOL",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_CONNECTION_DENIED="ERR_CONNECTION_DENIED",r.ERR_TRANSFER_LIMIT_EXCEEDED="ERR_TRANSFER_LIMIT_EXCEEDED"})(z||(z={}));var QN={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ps},addressSorter:oa},transportManager:{faultTolerance:Xn.FATAL_ALL}};async function LE(r){let e=$i(QN,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new g(Yn.ERR_PROTECTOR_REQUIRED,z.ERR_PROTECTOR_REQUIRED);if(!(await ut(e.privateKey.public.bytes,e.privateKey.bytes)).equals(e.peerId))throw new g("Private key doesn't match peer id",z.ERR_INVALID_KEY);return e}function nf(r){if(Ks(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:we(t),r.forEach(n=>{if(!so(n))throw new g("Invalid Multiaddr",z.ERR_INVALID_MULTIADDR);let o=n.getPeerId();if(o==null){if(e!=null)throw new g("Multiaddrs must all have the same peer id or have no peer id",z.ERR_INVALID_PARAMETERS)}else{let s=we(o);if(e==null||!e.equals(s))throw new g("Multiaddrs must all have the same peer id or have no peer id",z.ERR_INVALID_PARAMETERS)}})}return{peerId:e,multiaddrs:r}}var of="last-dial-failure";var sf=5,af=100,cf=50,BE=1e3*60*7;var Os={minConnections:sf,maxQueueLength:100,autoDialConcurrency:25,autoDialPriority:0,autoDialInterval:5e3,autoDialPeerRetryThreshold:BE,autoDialDiscoveredPeersDebounce:10},lf=class{connectionManager;peerStore;queue;minConnections;autoDialPriority;autoDialIntervalMs;autoDialMaxQueueLength;autoDialPeerRetryThresholdMs;autoDialDiscoveredPeersDebounce;autoDialInterval;started;running;log;constructor(e,t){this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.minConnections=t.minConnections??Os.minConnections,this.autoDialPriority=t.autoDialPriority??Os.autoDialPriority,this.autoDialIntervalMs=t.autoDialInterval??Os.autoDialInterval,this.autoDialMaxQueueLength=t.maxQueueLength??Os.maxQueueLength,this.autoDialPeerRetryThresholdMs=t.autoDialPeerRetryThreshold??Os.autoDialPeerRetryThreshold,this.autoDialDiscoveredPeersDebounce=t.autoDialDiscoveredPeersDebounce??Os.autoDialDiscoveredPeersDebounce,this.log=e.logger.forComponent("libp2p:connection-manager:auto-dial"),this.started=!1,this.running=!1,this.queue=new Lo({concurrency:t.autoDialConcurrency??Os.autoDialConcurrency,metricName:"libp2p_autodial_queue",metrics:e.metrics}),this.queue.addEventListener("error",o=>{this.log.error("error during auto-dial",o.detail)}),e.events.addEventListener("connection:close",()=>{this.autoDial().catch(o=>{this.log.error(o)})});let n;e.events.addEventListener("peer:discovery",()=>{clearTimeout(n),n=setTimeout(()=>{this.autoDial().catch(o=>{this.log.error(o)})},this.autoDialDiscoveredPeersDebounce)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})}stop(){this.queue.clear(),clearTimeout(this.autoDialInterval),this.started=!1,this.running=!1}async autoDial(){if(!this.started||this.running)return;let e=this.connectionManager.getConnectionsMap(),t=e.size;if(t>=this.minConnections){this.minConnections>0&&this.log.trace("have enough connections %d/%d",t,this.minConnections);return}if(this.queue.size>this.autoDialMaxQueueLength){this.log("not enough connections %d/%d but auto dial queue is full",t,this.minConnections),this.sheduleNextAutodial();return}this.running=!0,this.log("not enough connections %d/%d - will dial peers to increase the number of connections",t,this.minConnections);let n=new tt(this.connectionManager.getDialQueue().map(l=>l.peerId).filter(Boolean)),o=await this.peerStore.all({filters:[l=>l.addresses.length===0?(this.log.trace("not autodialing %p because they have no addresses",l.id),!1):e.has(l.id)?(this.log.trace("not autodialing %p because they are already connected",l.id),!1):n.has(l.id)?(this.log.trace("not autodialing %p because they are already being dialed",l.id),!1):this.queue.has(l.id)?(this.log.trace("not autodialing %p because they are already being autodialed",l.id),!1):!0]}),s=o.sort(()=>Math.random()>.5?1:-1),i=new wt;for(let l of s)i.has(l.id)||i.set(l.id,[...l.tags.values()].reduce((d,u)=>d+u.value,0));let c=s.sort((l,d)=>{let u=i.get(l.id)??0,f=i.get(d.id)??0;return u>f?-1:u<f?1:0}).filter(l=>{let d=l.metadata.get(of);if(d==null)return!0;let u=parseInt(L(d));return isNaN(u)?!0:Date.now()-u>this.autoDialPeerRetryThresholdMs});this.log("selected %d/%d peers to dial",c.length,o.length);for(let l of c)this.queue.add(async()=>{let d=this.connectionManager.getConnectionsMap().size;if(d>=this.minConnections){this.log("got enough connections now %d/%d",d,this.minConnections),this.queue.clear();return}this.log("connecting to a peerStore stored peer %p",l.id),await this.connectionManager.openConnection(l.id,{priority:this.autoDialPriority})},{peerId:l.id}).catch(d=>{this.log.error("could not connect to peerStore stored peer",d)});this.running=!1,this.sheduleNextAutodial()}sheduleNextAutodial(){this.started&&(this.autoDialInterval=setTimeout(()=>{this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})},this.autoDialIntervalMs))}};var ME={maxConnections:af,allow:[]},uf=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??ME.maxConnections,this.allow=t.allow??ME.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),e.events.addEventListener("connection:open",()=>{this.maybePruneConnections().catch(n=>{this.log.error(n)})})}async maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=Math.max(t-this.maxConnections,0);if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;this.log("max connections limit exceeded %d/%d, pruning %d connection(s)",t,this.maxConnections,n);let o=new wt;for(let a of e){let c=a.remotePeer;if(!o.has(c)){o.set(c,0);try{let l=await this.peerStore.get(c);o.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.code!=="ERR_NOT_FOUND"&&this.log.error("error loading peer tags",l)}}}let s=e.sort((a,c)=>{let l=o.get(a.remotePeer)??0,d=o.get(c.remotePeer)??0;if(l>d)return 1;if(l<d)return-1;let u=a.timeline.open,f=c.timeline.open;return u<f?1:u>f?-1:0}),i=[];for(let a of s)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||i.push(a),i.length===n)break;await Promise.all(i.map(async a=>{try{await a.close()}catch(c){this.log.error(c)}})),this.events.safeDispatchEvent("connection:prune",{detail:i})}};async function UE(r,e){let t=!1;for(let o of Js.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var df={addressSorter:oa,maxParallelDials:cf,maxPeerAddrsToDial:25,dialTimeout:3e4,resolvers:{dnsaddr:Ps}},ff=class{queue;components;addressSorter;maxPeerAddrsToDial;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??df.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??df.maxPeerAddrsToDial,this.dialTimeout=t.dialTimeout??df.dialTimeout,this.connections=t.connections??new wt,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,ye(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))Js.set(n,o);this.queue=new Vn({concurrency:t.maxParallelDials??df.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{this.log.error("error in dial queue",n.detail)})}start(){this.shutDownController=new AbortController,ye(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=nf(e),s=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(s!=null)return this.log("already connected to %a",s.remoteAddr),s;let i=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let a of o)i.options.multiaddrs.add(a.toString());return i.join(t)}return this.log("creating dial target for %p",n,o.map(a=>a.toString())),this.queue.add(async a=>{let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let f of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new g("Peer had more than maxPeerAddrsToDial",z.ERR_TOO_MANY_ADDRESSES);d++;try{let m=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});return this.log("dial to %a succeeded",f.multiaddr),m}catch(m){if(this.log.error("dial failed to %a",f.multiaddr,m),n!=null)try{await this.components.peerStore.patch(n,{metadata:{[of]:B(Date.now().toString())}})}catch(h){this.log.error("could not update last dial failure key for %p",n,h)}if(c.aborted)throw new g(m.message,yn);u.push(m)}}throw u.length===1?u[0]:new kc(u,"All multiaddr dials failed",z.ERR_TRANSPORT_DIAL_FAILED)}finally{c.clear()}},{peerId:n,priority:t.priority,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal})}createDialAbortController(e){let t=lt([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return ye(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:X(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new g("Tried to dial self",z.ERR_DIALED_SELF);if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new g("The dial request is blocked by gater.allowDialPeer",z.ERR_PEER_DIAL_INTERCEPTED);if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.code!==z.ERR_NOT_FOUND)throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.code!==z.ERR_NO_ROUTERS_AVAILABLE&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await UE(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(m=>({multiaddr:m,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.transportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),m=a.get(f);if(m!=null){m.isCertified=m.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new g("The dial request has no valid addresses",z.ERR_NO_VALID_ADDRESSES);let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=l.sort(this.addressSorter);if(d.length===0)throw new g("The connection gater denied all addresses in the dial request",z.ERR_NO_VALID_ADDRESSES);return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}};var eP=50,Ls={minConnections:sf,maxConnections:af,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0,autoDialMaxQueueLength:100},hf=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;autoDial;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Ls.maxConnections;let n=t.minConnections??Ls.minConnections;if(this.maxConnections<n)throw new g("Connection Manager maxConnections must be greater than minConnections",z.ERR_INVALID_PARAMETERS);this.connections=new wt,this.started=!1,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),this.allow=(t.allow??[]).map(o=>X(o)),this.deny=(t.deny??[]).map(o=>X(o)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??Ls.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Hi({points:t.inboundConnectionThreshold??Ls.inboundConnectionThreshold,duration:1}),this.autoDial=new lf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{minConnections:n,autoDialConcurrency:t.autoDialConcurrency??Ls.autoDialConcurrency,autoDialPriority:t.autoDialPriority??Ls.autoDialPriority,maxQueueLength:t.autoDialMaxQueueLength??Ls.autoDialMaxQueueLength}),this.connectionPruner=new uf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new ff(e,{addressSorter:t.addressSorter??oa,maxParallelDials:t.maxParallelDials??cf,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??3e4,resolvers:t.resolvers??{dnsaddr:Ps},connections:this.connections})}isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let t of this.connections.values())for(let n of t)n.direction==="inbound"?e.inbound++:e.outbound++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.dialQueue.start(),this.autoDial.start(),this.started=!0,this.log("started")}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(p4)]});await Promise.all(e.map(async t=>{await this.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}let n=t.remotePeer,o=this.connections.get(n),s=!1;o!=null?o.push(t):(s=!0,this.connections.set(n,[t])),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),s&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e;if(!this.started)return;let n=t.remotePeer,o=this.connections.get(n);o!=null&&o.length>1?(o=o.filter(s=>s.id!==t.id),this.connections.set(n,o)):o!=null&&(this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.isStarted())throw new g("Not started",z.ERR_NODE_NOT_STARTED);t.signal?.throwIfAborted();let{peerId:n}=nf(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>!c.transient);if(a!=null)return this.log("had an existing non-transient connection to %p",n),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??eP}),s=this.connections.get(o.remotePeer);s==null&&(s=[],this.connections.set(o.remotePeer,s));let i=!1;for(let a of s)a.id===o.id&&(i=!0);return i||s.push(o),o}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(s){o.abort(s)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>X(n))}))}};var pf=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new g("No content routers available",z.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new tt;for await(let s of kt(...n.routers.map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new g("No content routers available",z.ERR_NO_ROUTERS_AVAILABLE);await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new g(Yn.NOT_STARTED_YET,z.ERR_NODE_NOT_STARTED);await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new g(Yn.NOT_STARTED_YET,z.ERR_NODE_NOT_STARTED);return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var mf=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[]}async findPeer(e,t){if(this.routers.length===0)throw new g("No peer routers available",z.ERR_NO_ROUTERS_AVAILABLE);if(e.toString()===this.peerId.toString())throw new g("Should not try to find self",z.ERR_FIND_SELF);let n=this,o=kt(...this.routers.map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),s;throw new g(Yn.NOT_FOUND,z.ERR_NOT_FOUND)}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new g("No peer routers available",z.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new tt;for await(let s of Hn(async function*(){let i=kt(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of i)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}};var F3=32,V3=64,gf=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new g(`No handler registered for protocol ${e}`,z.ERR_NO_HANDLER_FOR_PROTOCOL);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new g(`Handler already registered for protocol ${e}`,z.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let o=$i.bind({ignoreUndefined:!0})({maxInboundStreams:F3,maxOutboundStreams:V3},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new g("invalid topology",z.ERR_INVALID_PARAMETERS);let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let s=this.topologies.get(o);if(s!=null)for(let i of s.values())i.onDisconnect?.(t)}}).catch(n=>{n.code!==z.ERR_NOT_FOUND&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));for(let s of o){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())a.onDisconnect?.(t.id)}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let s of t){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())n.transient&&a.notifyOnTransient!==!0||a.onConnect?.(o,n)}}};var yf=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Jr({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Xn.FATAL_ALL}add(e){let t=e[Symbol.toStringTag];if(t==null)throw new g("Transport must have a valid tag",z.ERR_INVALID_KEY);if(this.transports.has(t))throw new g(`There is already a transport with the tag ${t}`,z.ERR_DUPLICATE_TRANSPORT);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.transportForMultiaddr(e);if(n==null)throw new g(`No transport available for address ${String(e)}`,z.ERR_TRANSPORT_UNAVAILABLE);try{return await n.dial(e,{...t,upgrader:this.components.upgrader})}catch(o){throw o.code==null&&(o.code=z.ERR_TRANSPORT_DIAL_FAILED),o}}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}transportForMultiaddr(e){for(let t of this.transports.values())if(t.filter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new g("Not started",z.ERR_NODE_NOT_STARTED);if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let s=o.filter(e),i=[];for(let l of s){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let f=u.findIndex(m=>m===d);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),i.push(d.listen(l))}if(i.length===0){t.push(n);continue}if((await Promise.allSettled(i)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==Xn.NO_FATAL)throw new g(`Transport (${n}) could not listen on any available address`,z.ERR_NO_VALID_ADDRESSES)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===Xn.FATAL_ALL)throw new g(n,z.ERR_NO_VALID_ADDRESSES);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Rt="/multistream/1.0.0";var tP=B(`
|
|
42
|
-
`);async function
|
|
41
|
+
`),r}var Fw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Vw=r=>[...Array(r)].map(()=>Fw.at(Math.floor(Math.random()*Fw.length))).join("");var Ok=1e4,Fse=J("webrtc-direct").code,Mw=J("certhash").code,Bd=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw Z9("WebRTCTransport.createListener")}filter(e){return e.filter(L4.exactMatch)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[tn]=!0;async _connect(e,t){let n=new AbortController,o=n.signal,s=e.getPeerId();if(s===null)throw gd("we need to have the remote's PeerId");let i=ge(s),a=c3(Ld(e)),c=await Fi.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:l3(a.name)}),l=new Fi({certificates:[c]});try{let d=new Promise((R,k)=>{let O=l.createDataChannel("",{negotiated:!0,id:0}),N=setTimeout(()=>{let L=`Data channel was never opened: state: ${O.readyState}`;this.log.error(L),this.metrics?.dialerEvents.increment({open_error:!0}),k(Ip("data",L))},Ok);O.onopen=L=>{clearTimeout(N),R(O)},O.onerror=L=>{clearTimeout(N);let Y=`Error opening a data channel for handshaking: ${L.target?.toString()??"not specified"}`;this.log.error(Y),this.metrics?.dialerEvents.increment({unknown_error:!0}),k(Ip("data",Y))}}),u="libp2p+webrtc+v1/"+Vw(32),f=await l.createOffer(),g=Uw(f,u);await l.setLocalDescription(g);let h=Bw(e,u);await l.setRemoteDescription(h);let p=await d,y=this.components.peerId,w=this.generateNoisePrologue(l,a.code,e),b=_i({prologueBytes:w})(this.components),E=Mi({channel:p,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),S={...E,sink:E.sink.bind(E),source:async function*(){for await(let R of E.source)for(let k of R)yield k}()},_=new Rs(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),A=uc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(A,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":_.close().catch(R=>{this.log.error("error closing connection",R)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let D=new Ss(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await b.secureInbound(y,S,i),await t.upgrader.upgradeOutbound(_,{skipProtection:!0,skipEncryption:!0,muxerFactory:D})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw lc("no local certificate");let o=Lw(e,{log:this.log});if(o==null)throw lc("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=B(s,"hex"),a=Kw.encode(i,t),c=a3.decode(Ld(n)),l=B("libp2p-webrtc-noise:");return ve([l,a,c])}};function $w(r){return e=>new Bd(e,r)}function Hw(r){return e=>new Rd(e,r)}var qw=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",s)}function o(){n(),e()}function s(i){n(),t(i.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",s)})};var Ww=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await qw(r)}catch(s){if(s.message==="socket closed")break;throw s}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,s)=>{r.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{r.close()})})});var Qw=Ye(zw(),1);function Yw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Xw=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(s)},l=d=>{a(()=>{i(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let s=new Qw.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=B(u.data)),Yw(u.data)&&(f=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(f=u.data),f!=null&&i(f)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield Yw(i)?new Uint8Array(i):i}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var jw=(r,e)=>{e=e??{};let t=Xw(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let i=new URL(r.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Ww(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(i=>{r.addEventListener("close",()=>{i()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Zw=WebSocket;var Bk={"http:":"ws:","https:":"wss:"},Jw="ws:",eE=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Jw}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Jw,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${s}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(Bk))t.protocol===n&&(t.protocol=o);return t};function tE(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=eE(r,t),o=new Zw(n.toString(),e.websocket);return jw(o,e)}function rE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Di.matches(t)||ys.matches(t)})}function nE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return ys.matches(t)})}function oE(){throw new Error("WebSocket Servers can not be created in the browser!")}function sE(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o={log:n,async sink(s){try{await r.sink(async function*(){for await(let i of s)i instanceof Uint8Array?yield i:yield i.subarray()}())}catch(i){i.type!=="aborted"&&n.error(i)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(s={}){let i=Date.now();if(s.signal==null){let c=AbortSignal.timeout(500);s={...s,signal:c}}let a=()=>{let{host:c,port:l}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",c,l,Date.now()-i),this.abort(new m("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};s.signal?.addEventListener("abort",a);try{await r.close()}catch(c){n.error("error closing WebSocket gracefully",c),this.abort(c)}finally{s.signal?.removeEventListener("abort",a),o.timeline.close=Date.now()}},abort(s){let{host:i,port:a}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",i,a,s),r.destroy(),o.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{o.timeline.close==null&&(o.timeline.close=Date.now())},{once:!0}),o}var f3=class{log;init;logger;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.init=t}[Symbol.toStringTag]="@libp2p/websockets";[tn]=!0;async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=sE(n,e,{logger:this.logger});this.log("new outbound connection %s",o.remoteAddr);let s=await t.upgrader.upgradeOutbound(o);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,t){if(t?.signal?.aborted===!0)throw new Cr;let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=Z(),s=tE(pl(e),this.init);if(s.socket.addEventListener("error",()=>{let c=new m(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");this.log.error("connection error:",c),o.reject(c)}),t.signal==null)return await Promise.race([s.connected(),o.promise]),this.log("connected %s",e),s;let i,a=new Promise((c,l)=>{if(i=()=>{l(new Cr),s.close().catch(d=>{this.log.error("error closing raw socket",d)})},t?.signal?.aborted===!0){i();return}t?.signal?.addEventListener("abort",i)});try{await Promise.race([a,o.promise,s.connected()])}finally{i!=null&&t?.signal?.removeEventListener("abort",i)}return this.log("connected %s",e),s}createListener(e){return oE({logger:this.logger},{...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):B1||U1?nE(e):rE(e)}};function iE(r={}){return e=>new f3(e,r)}async function h3(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=r.writable.getWriter(),c=r.readable.getReader();await a.ready;function l(){let h=n.findIndex(p=>p===g);h!==-1&&(n.splice(h,1),g.timeline.close=Date.now(),o?.(g))}let d=!1,u=!1;(async function(){let h=await a.closed.catch(p=>p);if(h!=null){let p=h.message;p.includes("aborted by the remote server")||p.includes("STOP_SENDING")||i.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}d=!0,d&&u&&l()})().catch(()=>{i.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await c.closed.catch(p=>p);h!=null&&i.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),u=!0,d&&u&&l()}().catch(()=>{i.error("WebTransport failed to cleanup closed stream")});let f=!1,g={id:e,status:"open",writeStatus:"ready",readStatus:"ready",abort(h){d||(a.abort(h).catch(p=>{i.error("could not abort stream",p)}),d=!0),u=!0,this.status="aborted",this.writeStatus="closed",this.readStatus="closed",this.timeline.reset=this.timeline.close=this.timeline.closeRead=this.timeline.closeWrite=Date.now(),l()},async close(h){this.status="closing",await Promise.all([g.closeRead(h),g.closeWrite(h)]),l(),this.status="closed",this.timeline.close=Date.now()},async closeRead(h){if(!u){this.readStatus="closing";try{await c.cancel()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(d=!0)}this.timeline.closeRead=Date.now(),this.readStatus="closed",u=!0}d&&l()},async closeWrite(h){if(!d){d=!0,this.writeStatus="closing";try{await a.close()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(u=!0)}this.timeline.closeWrite=Date.now(),this.writeStatus="closed"}u&&l()},direction:t,timeline:{open:Date.now()},metadata:{},source:async function*(){for(;;){let h=await c.read();if(h.done){u=!0,d&&l();return}yield new ue(h.value)}}(),sink:async function(h){if(f)throw new Error("sink already called on stream");f=!0;try{this.writeStatus="writing";for await(let p of h)if(p instanceof Uint8Array)await a.write(p);else for(let y of p)await a.write(y);this.writeStatus="done"}finally{this.timeline.closeWrite=Date.now(),this.writeStatus="closed",await g.closeWrite()}},log:i};return g}function p3(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function aE(r,e){return e.filter(n=>!!r.find(o=>j(n,o))).length===e.length}var Vk=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Kk(r){return fr.decode(Vk.decode(r))}function cE(r){if(!qc.matches(r))throw new m("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([i,a])=>i===J("certhash").code).map(([i,a])=>Kk(a??"")),n=e.filter(([i,a])=>i===J("p2p").code).map(([i,a])=>ge(a??""))[0],o=r.toOptions(),s=o.host;return o.family===6&&s?.includes(":")&&(s=`[${s}]`),{url:`https://${s}:${o.port}`,certhashes:t,remotePeer:n}}var m3=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[tn]=!0;async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:o,certhashes:s,remotePeer:i}=cE(e);if(i==null)throw new Error("Need a target peerid");if(s.length===0)throw new Error("Expected multiaddr to contain certhashes");let a,c,l=()=>{},d=!1,u=!1,f=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let g=new WebTransport(`${o}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:s.map(h=>({algorithm:"sha-256",value:h.digest}))});if(l=h=>{if(!d)try{this.metrics?.dialerEvents.increment({[h]:!0}),g.close()}catch(p){this.log.error("error closing wt session",p)}finally{c!=null&&(c.timeline.close=Date.now()),d=!0}},a=()=>{l(u?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),await Promise.race([g.closed,g.ready]),u=!0,this.metrics?.dialerEvents.increment({ready:!0}),g.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{l("remote_close")}),!await this.authenticateWebTransport(g,n,i,s))throw new Error("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{this.log("Closing webtransport"),l("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),l("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...p3()},f=!0,await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(g),skipProtection:!0})}catch(g){throw this.log.error("caught wt session err",g),l(f?"upgrade_error":u?"noise_error":"ready_error"),g}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport(e,t,n,o){let s=await e.createBidirectionalStream(),i=s.writable.getWriter(),a=s.readable.getReader();await i.ready;let c={source:async function*(){for(;;){let u=await a.read();if(u.value!=null&&(yield u.value),u.done)break}}(),sink:async function(u){for await(let f of u)f instanceof Uint8Array?await i.write(f):await i.write(f.subarray())}},l=_i()(this.components),{remoteExtensions:d}=await l.secureOutbound(t,c,n);if(i.close().catch(u=>{this.log.error(`Failed to close authentication stream writer: ${u.message}`)}),a.cancel().catch(u=>{this.log.error(`Failed to close authentication stream reader: ${u.message}`)}),!aE(d?.webtransportCerthashes??[],o.map(u=>u.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config,o=this;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];return async function(){let c=e.incomingBidirectionalStreams.getReader();for(;;){let{done:l,value:d}=await c.read();if(l)break;if(i.length>=n.maxInboundStreams)d.writable.close().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await h3(d,String(t++),"inbound",i,s?.onStreamEnd,o.components.logger);i.push(u),s?.onIncomingStream?.(u)}}}().catch(()=>{this.log.error("WebTransport failed to receive incoming stream")}),{protocol:"webtransport",streams:i,newStream:async c=>{let l=await e.createBidirectionalStream(),d=await h3(l,String(t++),s?.direction??"outbound",i,s?.onStreamEnd,o.components.logger);return i.push(d),d},close:async c=>{this.log("Closing webtransport muxer"),await Promise.all(i.map(async l=>l.close(c)))},abort:c=>{this.log("Aborting webtransport muxer with err:",c);for(let l of i)l.abort(c)},...p3()}}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(qc.exactMatch)}};function lE(r={}){return e=>new m3(e,r)}var g3=Ye(Su(),1);function uE(r,e){let t=e.map((n,o)=>({record:ln(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===Wt.ValidityType.EOL&&o.record.validityType===Wt.ValidityType.EOL){let a=g3.default.fromString(n.record.validity).toDate(),c=g3.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var Fd="1.4.0",Vd="libp2p";var fE="4.1.0-9c8a2c0",hE="helia";var pE={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function Kd(r={}){return{peerId:r.peerId,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[Q2({discoverRelays:1}),Hw(),$w(),lE(),iE()],connectionEncryption:[_i()],streamMuxers:[rg(),z9()],peerDiscovery:[wg(pE)],services:{autoNAT:ig(),dcutr:Pg(),delegatedRouting:()=>L5("https://delegated-ipfs.dev"),dht:b9({clientMode:!0,validators:{ipns:Ku},selectors:{ipns:uE}}),identify:Gg({agentVersion:`${hE}/${fE} ${Vd}/${Fd} UserAgent=${globalThis.navigator.userAgent}`}),keychain:fd(r.keychain),ping:j9()}}}var It={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS"};var Qi;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:"",value:new Uint8Array(0)},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=i.bytes();break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>re(i,o.codec()),o.decode=i=>te(i,o.codec())})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),Hd.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:""},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=Hd.codec().decode(i,i.uint32());break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>re(i,o.codec()),o.decode=i=>te(i,o.codec())})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),$d.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={addresses:[],protocols:[],metadata:new Map,tags:new Map},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.addresses.push($d.codec().decode(o,o.uint32()));break;case 2:i.protocols.push(o.string());break;case 4:i.publicKey=o.bytes();break;case 5:i.peerRecordEnvelope=o.bytes();break;case 6:{let l=r.Peer$metadataEntry.codec().decode(o,o.uint32());i.metadata.set(l.key,l.value);break}case 7:{let l=r.Peer$tagsEntry.codec().decode(o,o.uint32());i.tags.set(l.key,l.value);break}default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Qi||(Qi={}));var $d;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={multiaddr:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.multiaddr=t.bytes();break;case 2:o.isCertified=t.bool();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})($d||($d={}));var Hd;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.value=t.uint32();break;case 2:o.expiry=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Hd||(Hd={}));function Xi(r,e){let t=Qi.decode(e);t.publicKey!=null&&r.publicKey==null&&(r=l8({...r,publicKey:r.publicKey}));let n=new Map,o=BigInt(Date.now());for(let[s,i]of t.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...t,id:r,addresses:t.addresses.map(({multiaddr:s,isCertified:i})=>({multiaddr:X(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var y3="/peers/";function ji(r){if(!Cs(r)||r.type==null)throw new m("Invalid PeerId",It.ERR_INVALID_PARAMETERS);let e=r.toCID().toString();return new Oe(`${y3}${e}`)}async function mE(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=X(o.multiaddr)),!Jn(o.multiaddr))throw new m("Multiaddr was invalid",It.ERR_INVALID_PARAMETERS);if(!await e(r,o.multiaddr))continue;let s=o.isCertified??!1,i=o.multiaddr.toString(),a=n.get(i);a!=null?o.isCertified=a.isCertified||s:n.set(i,{multiaddr:o.multiaddr,isCertified:s})}return[...n.values()].sort((o,s)=>o.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:o,multiaddr:s})=>({isCertified:o,multiaddr:s.bytes}))}async function Wd(r,e,t,n){if(e==null)throw new m("Invalid PeerData",It.ERR_INVALID_PARAMETERS);if(e.publicKey!=null&&r.publicKey!=null&&!j(e.publicKey,r.publicKey))throw new m("publicKey bytes do not match peer id publicKey bytes",It.ERR_INVALID_PARAMETERS);let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new m("peer id did not match existing peer id",It.ERR_INVALID_PARAMETERS);let s=o?.addresses??[],i=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=qd(u,{validate:gE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=qd(u,{validate:yE,map:wE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[f,g]of u)g==null?a.delete(f):a.set(f,g);a=qd([...a.entries()],{validate:gE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),f=new Map(c);for(let[g,h]of u)h==null?f.delete(g):f.set(g,h);c=qd([...f.entries()],{validate:yE,map:wE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d={addresses:await mE(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((u,f)=>u.localeCompare(f)),metadata:a,tags:c,publicKey:o?.id.publicKey??e.publicKey??r.publicKey,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function qd(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function gE(r,e){if(typeof r!="string")throw new m("Metadata key must be a string",It.ERR_INVALID_PARAMETERS);if(!(e instanceof Uint8Array))throw new m("Metadata value must be a Uint8Array",It.ERR_INVALID_PARAMETERS)}function yE(r,e){if(typeof r!="string")throw new m("Tag name must be a string",It.ERR_INVALID_PARAMETERS);if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new m("Tag value must be an integer",It.ERR_INVALID_PARAMETERS);if(e.value<0||e.value>100)throw new m("Tag value must be between 0-100",It.ERR_INVALID_PARAMETERS)}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new m("Tag ttl must be an integer",It.ERR_INVALID_PARAMETERS);if(e.ttl<0)throw new m("Tag ttl must be between greater than 0",It.ERR_INVALID_PARAMETERS)}}function wE(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function Gd(r,e,t){let n=r.toString().split("/")[2],o=ct.decode(n),s=Xe(o),i=t.get(s);if(i!=null)return i;let a=Xi(s,e);return t.set(s,a),a}function $k(r,e){return r==null?{}:{prefix:y3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Gd(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Gd(n.key,n.value,e),Gd(o.key,o.value,e)))}}var zd=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Ha({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(ji(e))}async delete(e){if(this.peerId.equals(e))throw new m("Cannot delete self peer",It.ERR_INVALID_PARAMETERS);await this.datastore.delete(ji(e))}async load(e){let t=await this.datastore.get(ji(e));return Xi(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Wd(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,s,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Wd(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Wd(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new st;for await(let{key:n,value:o}of this.datastore.query($k(e??{},t))){let s=Gd(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(ji(e)),n=Xi(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.code!=="ERR_NOT_FOUND")throw t}return{}}async#t(e,t,n,o){let s=Qi.encode(t);return n!=null&&j(s,n)?{peer:Xi(e,s),previous:o,updated:!1}:(await this.datastore.put(ji(e),s),{peer:Xi(e,s),previous:o,updated:!0})}};var Yd=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new zd(e,t)}async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await ro(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await Qr.openAndCertify(e,lr.DOMAIN);if(t?.equals(n.peerId)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,n.peerId),!1;let o=lr.createFromProtobuf(n.payload),s;try{s=await this.get(n.peerId)}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i}if(s?.peerRecordEnvelope!=null){let i=await Qr.createFromProtobuf(s.peerRecordEnvelope),a=lr.createFromProtobuf(i.payload);if(a.seqNumber>=o.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",a.seqNumber,o.seqNumber),!1}return await this.patch(o.peerId,{peerRecordEnvelope:e,addresses:o.multiaddrs.map(i=>({isCertified:!0,multiaddr:i}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function EE(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var Hk=r=>r;function w3(r,e){let t=r.getPeerId();return t!=null&&ge(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var Qd=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??Hk,this._updatePeerStoreAddresses=EE(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>X(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>X(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>X(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>X(e))}addObservedAddr(e){e=w3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=w3(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=w3(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>X(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var E3=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=no())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>_c(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},qk=["metrics","connectionProtector","dns"],Wk=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function bE(r={}){let e=new E3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!Wk.includes(o)){let i=e.components[o];if(i==null&&!qk.includes(o))throw new m(`${o} not set`,"ERR_SERVICE_MISSING");return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function xE(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!$t(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function b3(r){try{let{address:e}=r.nodeAddress();return!!$t(e)}catch{return!0}}function Gk(r,e){let t=b3(r.multiaddr),n=b3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function zk(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function Yk(r,e){let t=wn.exactMatch(r.multiaddr),n=wn.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Zi(r,e){let t=Gk(r,e);if(t!==0)return t;let n=Yk(r,e);return n!==0?n:zk(r,e)}var Qk=32,{code:Xk}=J("dnsaddr"),Is=async function(e,t={}){let n=t.maxRecursiveDepth??Qk;if(n===0)throw new m("Max recursive depth reached","ERR_MAX_RECURSIVE_DEPTH_REACHED");let[,o]=e.stringTuples().find(([l])=>l===Xk)??[],i=await(t?.dns??ju()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[cr.TXT]}),a=e.getPeerId(),c=[];for(let l of i.Answer){let d=l.data.split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=X(d);if(d.startsWith("/dnsaddr")){let f=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(g=>g.toString()))}else c.push(u.toString())}return c};var zn;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.ERR_PROTECTOR_REQUIRED="Private network is enforced, but no protector was provided",r.NOT_FOUND="Not found"})(zn||(zn={}));var G;(function(r){r.ERR_PROTECTOR_REQUIRED="ERR_PROTECTOR_REQUIRED",r.ERR_PEER_DIAL_INTERCEPTED="ERR_PEER_DIAL_INTERCEPTED",r.ERR_CONNECTION_INTERCEPTED="ERR_CONNECTION_INTERCEPTED",r.ERR_INVALID_PROTOCOLS_FOR_STREAM="ERR_INVALID_PROTOCOLS_FOR_STREAM",r.ERR_CONNECTION_ENDED="ERR_CONNECTION_ENDED",r.ERR_CONNECTION_FAILED="ERR_CONNECTION_FAILED",r.ERR_NODE_NOT_STARTED="ERR_NODE_NOT_STARTED",r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_TOO_MANY_ADDRESSES="ERR_TOO_MANY_ADDRESSES",r.ERR_NO_VALID_ADDRESSES="ERR_NO_VALID_ADDRESSES",r.ERR_RELAYED_DIAL="ERR_RELAYED_DIAL",r.ERR_DIALED_SELF="ERR_DIALED_SELF",r.ERR_DISCOVERED_SELF="ERR_DISCOVERED_SELF",r.ERR_DUPLICATE_TRANSPORT="ERR_DUPLICATE_TRANSPORT",r.ERR_ENCRYPTION_FAILED="ERR_ENCRYPTION_FAILED",r.ERR_HOP_REQUEST_FAILED="ERR_HOP_REQUEST_FAILED",r.ERR_INVALID_KEY="ERR_INVALID_KEY",r.ERR_INVALID_MESSAGE="ERR_INVALID_MESSAGE",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_PEER="ERR_INVALID_PEER",r.ERR_MUXER_UNAVAILABLE="ERR_MUXER_UNAVAILABLE",r.ERR_NOT_FOUND="ERR_NOT_FOUND",r.ERR_TRANSPORT_UNAVAILABLE="ERR_TRANSPORT_UNAVAILABLE",r.ERR_TRANSPORT_DIAL_FAILED="ERR_TRANSPORT_DIAL_FAILED",r.ERR_UNSUPPORTED_PROTOCOL="ERR_UNSUPPORTED_PROTOCOL",r.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED="ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_SIGNATURE_NOT_VALID="ERR_SIGNATURE_NOT_VALID",r.ERR_FIND_SELF="ERR_FIND_SELF",r.ERR_NO_ROUTERS_AVAILABLE="ERR_NO_ROUTERS_AVAILABLE",r.ERR_CONNECTION_NOT_MULTIPLEXED="ERR_CONNECTION_NOT_MULTIPLEXED",r.ERR_NO_DIAL_TOKENS="ERR_NO_DIAL_TOKENS",r.ERR_INVALID_CMS="ERR_INVALID_CMS",r.ERR_MISSING_KEYS="ERR_MISSING_KEYS",r.ERR_NO_KEY="ERR_NO_KEY",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_MISSING_PUBLIC_KEY="ERR_MISSING_PUBLIC_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_WRONG_PING_ACK="ERR_WRONG_PING_ACK",r.ERR_INVALID_RECORD="ERR_INVALID_RECORD",r.ERR_ALREADY_SUCCEEDED="ERR_ALREADY_SUCCEEDED",r.ERR_NO_HANDLER_FOR_PROTOCOL="ERR_NO_HANDLER_FOR_PROTOCOL",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_CONNECTION_DENIED="ERR_CONNECTION_DENIED",r.ERR_TRANSFER_LIMIT_EXCEEDED="ERR_TRANSFER_LIMIT_EXCEEDED"})(G||(G={}));var jk={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Is},addressSorter:Zi},transportManager:{faultTolerance:Yn.FATAL_ALL}};async function vE(r){let e=Bi(jk,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new m(zn.ERR_PROTECTOR_REQUIRED,G.ERR_PROTECTOR_REQUIRED);if(!(await ft(e.privateKey.public.bytes,e.privateKey.bytes)).equals(e.peerId))throw new m("Private key doesn't match peer id",G.ERR_INVALID_KEY);return e}function Xd(r){if(Cs(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:ge(t),r.forEach(n=>{if(!Jn(n))throw new m("Invalid Multiaddr",G.ERR_INVALID_MULTIADDR);let o=n.getPeerId();if(o==null){if(e!=null)throw new m("Multiaddrs must all have the same peer id or have no peer id",G.ERR_INVALID_PARAMETERS)}else{let s=ge(o);if(e==null||!e.equals(s))throw new m("Multiaddrs must all have the same peer id or have no peer id",G.ERR_INVALID_PARAMETERS)}})}return{peerId:e,multiaddrs:r}}var jd="last-dial-failure";var Zd=5,Jd=100,ef=50,RE=1e3*60*7;var Ds={minConnections:Zd,maxQueueLength:100,autoDialConcurrency:25,autoDialPriority:0,autoDialInterval:5e3,autoDialPeerRetryThreshold:RE,autoDialDiscoveredPeersDebounce:10},tf=class{connectionManager;peerStore;queue;minConnections;autoDialPriority;autoDialIntervalMs;autoDialMaxQueueLength;autoDialPeerRetryThresholdMs;autoDialDiscoveredPeersDebounce;autoDialInterval;started;running;log;constructor(e,t){this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.minConnections=t.minConnections??Ds.minConnections,this.autoDialPriority=t.autoDialPriority??Ds.autoDialPriority,this.autoDialIntervalMs=t.autoDialInterval??Ds.autoDialInterval,this.autoDialMaxQueueLength=t.maxQueueLength??Ds.maxQueueLength,this.autoDialPeerRetryThresholdMs=t.autoDialPeerRetryThreshold??Ds.autoDialPeerRetryThreshold,this.autoDialDiscoveredPeersDebounce=t.autoDialDiscoveredPeersDebounce??Ds.autoDialDiscoveredPeersDebounce,this.log=e.logger.forComponent("libp2p:connection-manager:auto-dial"),this.started=!1,this.running=!1,this.queue=new Vt({concurrency:t.autoDialConcurrency??Ds.autoDialConcurrency,metricName:"libp2p_autodial_queue",metrics:e.metrics}),this.queue.addEventListener("error",o=>{this.log.error("error during auto-dial",o.detail)}),e.events.addEventListener("connection:close",()=>{this.autoDial().catch(o=>{this.log.error(o)})});let n;e.events.addEventListener("peer:discovery",()=>{clearTimeout(n),n=setTimeout(()=>{this.autoDial().catch(o=>{this.log.error(o)})},this.autoDialDiscoveredPeersDebounce)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})}stop(){this.queue.clear(),clearTimeout(this.autoDialInterval),this.started=!1,this.running=!1}async autoDial(){if(!this.started||this.running)return;let e=this.connectionManager.getConnectionsMap(),t=e.size;if(t>=this.minConnections){this.minConnections>0&&this.log.trace("have enough connections %d/%d",t,this.minConnections);return}if(this.queue.size>this.autoDialMaxQueueLength){this.log("not enough connections %d/%d but auto dial queue is full",t,this.minConnections),this.sheduleNextAutodial();return}this.running=!0,this.log("not enough connections %d/%d - will dial peers to increase the number of connections",t,this.minConnections);let n=new je(this.connectionManager.getDialQueue().map(l=>l.peerId).filter(Boolean)),o=await this.peerStore.all({filters:[l=>l.addresses.length===0?(this.log.trace("not autodialing %p because they have no addresses",l.id),!1):e.has(l.id)?(this.log.trace("not autodialing %p because they are already connected",l.id),!1):n.has(l.id)?(this.log.trace("not autodialing %p because they are already being dialed",l.id),!1):this.queue.has(l.id)?(this.log.trace("not autodialing %p because they are already being autodialed",l.id),!1):!0]}),s=o.sort(()=>Math.random()>.5?1:-1),i=new st;for(let l of s)i.has(l.id)||i.set(l.id,[...l.tags.values()].reduce((d,u)=>d+u.value,0));let c=s.sort((l,d)=>{let u=i.get(l.id)??0,f=i.get(d.id)??0;return u>f?-1:u<f?1:0}).filter(l=>{let d=l.metadata.get(jd);if(d==null)return!0;let u=parseInt(P(d));return isNaN(u)?!0:Date.now()-u>this.autoDialPeerRetryThresholdMs});this.log("selected %d/%d peers to dial",c.length,o.length);for(let l of c)this.queue.add(async()=>{let d=this.connectionManager.getConnectionsMap().size;if(d>=this.minConnections){this.log("got enough connections now %d/%d",d,this.minConnections),this.queue.clear();return}this.log("connecting to a peerStore stored peer %p",l.id),await this.connectionManager.openConnection(l.id,{priority:this.autoDialPriority})},{peerId:l.id}).catch(d=>{this.log.error("could not connect to peerStore stored peer",d)});this.running=!1,this.sheduleNextAutodial()}sheduleNextAutodial(){this.started&&(this.autoDialInterval=setTimeout(()=>{this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})},this.autoDialIntervalMs))}};var SE={maxConnections:Jd,allow:[]},rf=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??SE.maxConnections,this.allow=t.allow??SE.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),e.events.addEventListener("connection:open",()=>{this.maybePruneConnections().catch(n=>{this.log.error(n)})})}async maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=Math.max(t-this.maxConnections,0);if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;this.log("max connections limit exceeded %d/%d, pruning %d connection(s)",t,this.maxConnections,n);let o=new st;for(let a of e){let c=a.remotePeer;if(!o.has(c)){o.set(c,0);try{let l=await this.peerStore.get(c);o.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.code!=="ERR_NOT_FOUND"&&this.log.error("error loading peer tags",l)}}}let s=e.sort((a,c)=>{let l=o.get(a.remotePeer)??0,d=o.get(c.remotePeer)??0;if(l>d)return 1;if(l<d)return-1;let u=a.timeline.open,f=c.timeline.open;return u<f?1:u>f?-1:0}),i=[];for(let a of s)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||i.push(a),i.length===n)break;await Promise.all(i.map(async a=>{try{await a.close()}catch(c){this.log.error(c)}})),this.events.safeDispatchEvent("connection:prune",{detail:i})}};async function _E(r,e){let t=!1;for(let o of Vs.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var Ec={addressSorter:Zi,maxParallelDials:ef,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Is}},nf=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??Ec.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Ec.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Ec.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Ec.dialTimeout,this.connections=t.connections??new st,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))Vs.set(n,o);this.queue=new mn({concurrency:t.maxParallelDials??Ec.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{this.log.error("error in dial queue",n.detail)})}start(){this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Xd(e),s=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(s!=null)return this.log("already connected to %a",s.remoteAddr),s;let i=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let a of o)i.options.multiaddrs.add(a.toString());return i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new m("Dial queue is full","ERR_DIAL_QUEUE_FULL");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),this.queue.add(async a=>{let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let f of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new m("Peer had more than maxPeerAddrsToDial",G.ERR_TOO_MANY_ADDRESSES);d++;try{let g=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});return this.log("dial to %a succeeded",f.multiaddr),g}catch(g){if(this.log.error("dial failed to %a",f.multiaddr,g),n!=null)try{await this.components.peerStore.patch(n,{metadata:{[jd]:B(Date.now().toString())}})}catch(h){this.log.error("could not update last dial failure key for %p",n,h)}if(c.aborted)throw new m(g.message,pn);u.push(g)}}throw u.length===1?u[0]:new Sc(u,"All multiaddr dials failed",G.ERR_TRANSPORT_DIAL_FAILED)}finally{c.clear()}},{peerId:n,priority:t.priority,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal})}createDialAbortController(e){let t=ot([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return ee(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:X(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new m("Tried to dial self",G.ERR_DIALED_SELF);if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new m("The dial request is blocked by gater.allowDialPeer",G.ERR_PEER_DIAL_INTERCEPTED);if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.code!==G.ERR_NOT_FOUND)throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.code!==G.ERR_NO_ROUTERS_AVAILABLE&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await _E(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(g=>({multiaddr:g,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.transportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),g=a.get(f);if(g!=null){g.isCertified=g.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new m("The dial request has no valid addresses",G.ERR_NO_VALID_ADDRESSES);let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=l.sort(this.addressSorter);if(d.length===0)throw new m("The connection gater denied all addresses in the dial request",G.ERR_NO_VALID_ADDRESSES);return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnTransientConnection===!1?n.find(o=>!wn.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var rC=50,Ts={minConnections:Zd,maxConnections:Jd,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0,autoDialMaxQueueLength:100},of=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;autoDial;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Ts.maxConnections;let n=t.minConnections??Ts.minConnections;if(this.maxConnections<n)throw new m("Connection Manager maxConnections must be greater than minConnections",G.ERR_INVALID_PARAMETERS);this.connections=new st,this.started=!1,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),this.allow=(t.allow??[]).map(o=>X(o)),this.deny=(t.deny??[]).map(o=>X(o)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??Ts.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Ui({points:t.inboundConnectionThreshold??Ts.inboundConnectionThreshold,duration:1}),this.autoDial=new tf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{minConnections:n,autoDialConcurrency:t.autoDialConcurrency??Ts.autoDialConcurrency,autoDialPriority:t.autoDialPriority??Ts.autoDialPriority,maxQueueLength:t.autoDialMaxQueueLength??Ts.autoDialMaxQueueLength}),this.connectionPruner=new rf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new nf(e,{addressSorter:t.addressSorter??Zi,maxParallelDials:t.maxParallelDials??ef,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Is},connections:this.connections})}isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let t of this.connections.values())for(let n of t)n.direction==="inbound"?e.inbound++:e.outbound++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.dialQueue.start(),this.autoDial.start(),this.started=!0,this.log("started")}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(H3)]});await Promise.all(e.map(async t=>{await this.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}let n=t.remotePeer,o=this.connections.get(n),s=!1;o!=null?o.push(t):(s=!0,this.connections.set(n,[t])),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),s&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e;if(!this.started)return;let n=t.remotePeer,o=this.connections.get(n);o!=null&&o.length>1?(o=o.filter(s=>s.id!==t.id),this.connections.set(n,o)):o!=null&&(this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.isStarted())throw new m("Not started",G.ERR_NODE_NOT_STARTED);t.signal?.throwIfAborted();let{peerId:n}=Xd(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>!c.transient);if(a!=null)return this.log("had an existing non-transient connection to %p",n),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??rC}),s=this.connections.get(o.remotePeer);s==null&&(s=[],this.connections.set(o.remotePeer,s));let i=!1;for(let a of s)a.id===o.id&&(i=!0);return i||s.push(o),o}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(s){o.abort(s)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>X(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var sf=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new m("No content routers available",G.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new je;for await(let s of bt(...n.routers.map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available",G.ERR_NO_ROUTERS_AVAILABLE);await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new m(zn.NOT_STARTED_YET,G.ERR_NODE_NOT_STARTED);await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new m(zn.NOT_STARTED_YET,G.ERR_NODE_NOT_STARTED);return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var af=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[]}async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available",G.ERR_NO_ROUTERS_AVAILABLE);if(e.toString()===this.peerId.toString())throw new m("Should not try to find self",G.ERR_FIND_SELF);let n=this,o=bt(...this.routers.map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),s;throw new m(zn.NOT_FOUND,G.ERR_NOT_FOUND)}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available",G.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new je;for await(let s of Hn(async function*(){let i=bt(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of i)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}};var I3=32,D3=64,cf=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new m(`No handler registered for protocol ${e}`,G.ERR_NO_HANDLER_FOR_PROTOCOL);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new m(`Handler already registered for protocol ${e}`,G.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let o=Bi.bind({ignoreUndefined:!0})({maxInboundStreams:I3,maxOutboundStreams:D3},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new m("invalid topology",G.ERR_INVALID_PARAMETERS);let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let s=this.topologies.get(o);if(s!=null)for(let i of s.values())i.onDisconnect?.(t)}}).catch(n=>{n.code!==G.ERR_NOT_FOUND&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));for(let s of o){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())a.onDisconnect?.(t.id)}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let s of t){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())n.transient&&a.notifyOnTransient!==!0||a.onConnect?.(o,n)}}};var lf=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=dl({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Yn.FATAL_ALL}add(e){let t=e[Symbol.toStringTag];if(t==null)throw new m("Transport must have a valid tag",G.ERR_INVALID_KEY);if(this.transports.has(t))throw new m(`There is already a transport with the tag ${t}`,G.ERR_DUPLICATE_TRANSPORT);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.transportForMultiaddr(e);if(n==null)throw new m(`No transport available for address ${String(e)}`,G.ERR_TRANSPORT_UNAVAILABLE);try{return await n.dial(e,{...t,upgrader:this.components.upgrader})}catch(o){throw o.code==null&&(o.code=G.ERR_TRANSPORT_DIAL_FAILED),o}}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}transportForMultiaddr(e){for(let t of this.transports.values())if(t.filter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new m("Not started",G.ERR_NODE_NOT_STARTED);if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let s=o.filter(e),i=[];for(let l of s){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let f=u.findIndex(g=>g===d);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),i.push(d.listen(l))}if(i.length===0){t.push(n);continue}if((await Promise.allSettled(i)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==Yn.NO_FATAL)throw new m(`Transport (${n}) could not listen on any available address`,G.ERR_NO_VALID_ADDRESSES)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===Yn.FATAL_ALL)throw new m(n,G.ERR_NO_VALID_ADDRESSES);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Dt="/multistream/1.0.0";var nC=B(`
|
|
42
|
+
`);async function ks(r,e,t){await r.write(e,t)}async function AE(r,e,t){await r.writeV(e,t)}async function oC(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==nC[0])throw e.log.error("Invalid mss message - missing newline",t),new m("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return t.sublist(0,-1)}async function Fo(r,e){let t=await oC(r,e);return P(t.subarray())}async function bc(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return sC(r,e[0],t);let n=yr(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Dt,o);let s=B(`${Dt}
|
|
43
43
|
`),i=B(`${o}
|
|
44
|
-
`);await
|
|
45
|
-
`),t),t.log.trace("select: reading protocol response");let l=await
|
|
46
|
-
`;yield new
|
|
47
|
-
`),
|
|
44
|
+
`);await AE(n,[s,i],t),t.log.trace("select: reading multistream-select header");let a=await Fo(n,t);if(t.log.trace('select: read "%s"',a),a===Dt&&(t.log.trace("select: reading protocol response"),a=await Fo(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await ks(n,B(`${c}
|
|
45
|
+
`),t),t.log.trace("select: reading protocol response");let l=await Fo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}function sC(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=Z(),c=!1,l=!1,d=Z(),u=!1,f=!1,g=Z(),h=yr({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:E}=h.unwrap();await E(async function*(){let S=!1;for await(let _ of b){if(l&&await d.promise,c)yield _;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Dt,e,_.byteLength);let A=`${e}
|
|
46
|
+
`;yield new ue(Uint8Array.from([19]),B(`${Dt}
|
|
47
|
+
`),Ve(A.length),B(A),_).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Dt,e,_.byteLength),c=!0,l=!1,d.resolve(),p().catch(D=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,D)})}S=!0}S||await p()}())};async function p(){if(i){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}i=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await y()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await w())}finally{i=!1,s=!0,a.resolve()}}async function y(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Dt,e),await h.writeV([B(`${Dt}
|
|
48
48
|
`),B(`${e}
|
|
49
|
-
`)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',
|
|
50
|
-
`),t),t.log.trace('handle: responded with "%s" for "%s"',
|
|
51
|
-
`),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let s=new
|
|
49
|
+
`)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Dt,e)}finally{c=!0,l=!1,d.resolve()}}async function w(){if(f){await g.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await Fo(h,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===Dt&&(b=await Fo(h,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}finally{u=!0,f=!1,g.resolve()}}if(r.source=async function*(){await p(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*h.unwrap().source}(),r.closeRead!=null){let b=r.closeRead.bind(r);r.closeRead=async E=>{s||await p().catch(S=>{t.log.error("could not negotiate protocol before close read",S)}),await b(E)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async E=>{s||await p().catch(S=>{t.log.error("could not negotiate protocol before close write",S)}),await b(E)}}if(r.close!=null){let b=r.close.bind(r);r.close=async E=>{let S=[];l&&S.push(d.promise),f&&S.push(g.promise),S.length>0?await Ot(Promise.all(S),E?.signal):(s=!0,i=!1,a.resolve()),await b(E)}}return{stream:r,protocol:e}}async function xc(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=yr(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Fo(n,t);if(t.log.trace('handle: read "%s"',o),o===Dt){t.log.trace('handle: respond with "%s" for "%s"',Dt,o),await ks(n,B(`${Dt}
|
|
50
|
+
`),t),t.log.trace('handle: responded with "%s" for "%s"',Dt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await ks(n,B(`${o}
|
|
51
|
+
`),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let s=new ue(...e.map(i=>gr.single(B(`${i}
|
|
52
52
|
`))),B(`
|
|
53
|
-
`));t.log.trace('handle: respond with "%s" for %s',e,o),await
|
|
54
|
-
`),t),t.log('handle: responded with "na" for "%s"',o)}}var sP=500,$3=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;transient;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:s,abort:i,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.transient=e.transient??!1,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=s,this._abort=i,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[h4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new g("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.status==="closed")throw new g("the connection is closed","ERR_CONNECTION_CLOSED");if(Array.isArray(e)||(e=[e]),this.transient&&t?.runOnTransientConnection!==!0)throw new g("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(sP);ye(1/0,t),e={...e,signal:t}}try{this.log.trace("closing all streams"),await Promise.all(this.streams.map(async t=>t.close(e))),this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this.streams.forEach(t=>{t.abort(e)}),this.log.error("all streams aborted",this.streams.length),this._abort(e),this.timeline.close=Date.now(),this.status="closed"}};function KE(r){return new $3(r)}var iP=3e4;function aP(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.code!==z.ERR_NO_HANDLER_FOR_PROTOCOL)throw t}return F3}function cP(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.code!==z.ERR_NO_HANDLER_FOR_PROTOCOL)throw n}return t.maxOutboundStreams??V3}function $E(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var wf=class{components;connectionEncryption;muxers;inboundUpgradeTimeout;events;constructor(e,t){this.components=e,this.connectionEncryption=new Map,t.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,t.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??3e4,this.events=e.events}async shouldBlockConnection(e,t,n){let o=this.components.connectionGater[n];if(o!==void 0&&await o(e,t))throw new g(`The multiaddr connection is blocked by gater.${n}`,z.ERR_CONNECTION_INTERCEPTED)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new g("connection denied",z.ERR_CONNECTION_DENIED);let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new g("inbound upgrade timeout",yn))};l.addEventListener("abort",d,{once:!0}),ye(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new g("The multiaddr connection is blocked by gater.acceptConnection",z.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the inbound connection upgrade");let u=e;if(t?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the inbound connection"),u=await f.protect(e))}try{if(o=u,t?.skipEncryption!==!0){({conn:o,remotePeer:s,protocol:c}=await this._encryptInbound(u));let f={...u,...o};await this.shouldBlockConnection(s,f,"denyInboundEncryptedConnection")}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new g("inbound connection that skipped encryption must have a peer id",z.ERR_INVALID_MULTIADDR);let m=we(f);c="native",s=m}if(i=o,t?.muxerFactory!=null)a=t.muxerFactory;else if(this.muxers.size>0){let f=await this._multiplexInbound({...u,...o},this.muxers);a=f.muxerFactory,i=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection",f),f}return await this.shouldBlockConnection(s,e,"denyInboundUpgradedConnection"),e.log("successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:i,muxerFactory:a,remotePeer:s,transient:t?.transient})}finally{l.removeEventListener("abort",d),this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=we(n),await this.shouldBlockConnection(o,e,"denyOutboundConnection"));let s,i,a,c,l;this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the outbound connection upgrade");let d=e;if(t?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(d=await u.protect(e))}try{if(s=d,t?.skipEncryption!==!0){({conn:s,remotePeer:i,protocol:c}=await this._encryptOutbound(d,o));let u={...d,...s};await this.shouldBlockConnection(i,u,"denyOutboundEncryptedConnection")}else{if(o==null)throw new g("Encryption was skipped but no peer id was passed",z.ERR_INVALID_PEER);c="native",i=o}if(a=s,t?.muxerFactory!=null)l=t.muxerFactory;else if(this.muxers.size>0){let u=await this._multiplexOutbound({...d,...s},this.muxers);l=u.muxerFactory,a=u.stream}}catch(u){throw e.log.error("failed to upgrade outbound connection",u),await e.close(u),u}return await this.shouldBlockConnection(i,e,"denyOutboundUpgradedConnection"),e.log("successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:l,remotePeer:i,transient:t?.transient})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,transient:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:h=>{u!=null&&Promise.resolve().then(async()=>{let p=this.components.registrar.getProtocols(),{stream:y,protocol:w}=await Ac(h,p,{log:h.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",w);let E=aP(w,this.components.registrar);if($E(w,"inbound",u)===E){let S=new g(`Too many inbound protocol streams for protocol "${w}" - limit ${E}`,z.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS);throw h.abort(S),S}h.source=y.source,h.sink=y.sink,h.protocol=w,y.closeWrite!=null&&(h.closeWrite=y.closeWrite),y.closeRead!=null&&(h.closeRead=y.closeRead),y.close!=null&&(h.close=y.close),await this.components.peerStore.merge(i,{protocols:[w]}),this.components.metrics?.trackProtocolStream(h,u),this._onStream({connection:u,stream:h,protocol:w})}).catch(async p=>{u.log.error("error handling incoming stream id %s",h.id,p.message,p.code,p.stack),h.timeline.close==null&&await h.close()})}}),d=async(h,p={})=>{if(l==null)throw new g("Stream is not multiplexed",z.ERR_MUXER_UNAVAILABLE);u.log("starting new stream for protocols %s",h);let y=await l.newStream();u.log.trace("started new stream %s for protocols %s",y.id,h);try{if(p.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",h);let R=AbortSignal.timeout(iP);ye(1/0,R),p={...p,signal:R}}y.log.trace("selecting protocol from protocols %s",h);let{stream:w,protocol:E}=await Rc(y,h,{...p,log:y.log,yieldBytes:!0});y.log("selected protocol %s",E);let b=cP(E,this.components.registrar,p);if($E(E,"outbound",u)>=b){let R=new g(`Too many outbound protocol streams for protocol "${E}" - limit ${b}`,z.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw y.abort(R),R}return await this.components.peerStore.merge(i,{protocols:[E]}),y.source=w.source,y.sink=w.sink,y.protocol=E,w.closeWrite!=null&&(y.closeWrite=w.closeWrite),w.closeRead!=null&&(y.closeRead=w.closeRead),w.close!=null&&(y.close=w.close),this.components.metrics?.trackProtocolStream(y,u),y}catch(w){throw u.log.error("could not create new stream for protocols %s",h,w),y.timeline.close==null&&y.abort(w),w.code!=null?w:new g(String(w),z.ERR_UNSUPPORTED_PROTOCOL)}},Promise.all([l.sink(s.source),s.sink(l.source)]).catch(h=>{u.log.error("error piping data through muxer",h)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...h)=>(u!=null&&h[1]==="close"&&h[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(p){u.log.error("error closing connection after timeline close",p)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(p=>{u.log.error("error thrown while dispatching connection:close event",p)}),Reflect.set(...h))}),o.timeline.upgraded=Date.now();let m=()=>{throw new g("connection is not multiplexed",z.ERR_CONNECTION_NOT_MULTIPLEXED)};return u=KE({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,transient:c,logger:this.components.logger,newStream:d??m,getStreams:()=>l!=null?l.streams:[],close:async h=>{l!=null&&(u.log.trace("close muxer"),await l.close(h)),u.log.trace("close maconn"),await o.close(h),u.log.trace("closed maconn")},abort:h=>{o.abort(h),l?.abort(h)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:s,options:i}=this.components.registrar.getHandler(o);if(t.transient&&i.runOnTransientConnection!==!0)throw new g("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");s({connection:t,stream:n})}async _encryptInbound(e){let t=Array.from(this.connectionEncryption.keys());e.log("handling inbound crypto protocol selection",t);try{let{stream:n,protocol:o}=await Ac(e,t,{log:e.log}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using",o),{...await s.secureInbound(this.components.peerId,n),protocol:o}}catch(n){throw e.log.error("encrypting inbound connection to %p failed",n),new g(n.message,z.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncryption.keys());e.log("selecting outbound crypto protocol",n);try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await Rc(e,n,{log:e.log,yieldBytes:!0}),i=this.connectionEncryption.get(s);if(i==null)throw new Error(`no crypto module found for ${s}`);return e.log("encrypting outbound connection to %p using %s",t,i),{...await i.secureOutbound(this.components.peerId,o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %p failed",o),new g(o.message,z.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,t){let n=Array.from(t.keys());e.log("outbound selecting muxer %s",n);try{e.log.trace("selecting stream muxer from %s",n);let{stream:o,protocol:s}=await Rc(e,n,{log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new g(String(o),z.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,t){let n=Array.from(t.keys());e.log("inbound handling muxers %s",n);try{let{stream:o,protocol:s}=await Ac(e,n,{log:e.log}),i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new g(String(o),z.ERR_MUXER_UNAVAILABLE)}}};var H3=class extends Ce{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new Ce,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new mt(a.type,{detail:a.detail}));return c||l},ye(1/0,t),this.peerId=e.peerId,this.logger=e.logger??Jn(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=PE({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Gd,version:zd},logger:this.logger,events:t,datastore:e.datastore??new ws,connectionGater:OE(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new tf(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new wf(this.components,{connectionEncryption:(e.connectionEncryption??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),muxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager.inboundUpgradeTimeout}),this.configureComponent("transportManager",new yf(this.components,e.transportManager)),this.configureComponent("connectionManager",new hf(this.components,e.connectionManager)),this.configureComponent("registrar",new gf(this.components)),this.configureComponent("addressManager",new rf(this.components,e.addresses));let s=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new mf(this.components,{routers:s}));let i=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new pf(this.components,{routers:i})),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[en]!=null&&(this.log("registering service %s for content routing",a),i.push(l[en])),l[tn]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[tn])),l[zo]!=null&&(this.log("registering service %s for peer discovery",a),l[zo].addEventListener?.("peer",d=>{this.#e(d)}))}}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new tt;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new g("no protocols were provided to open a stream",z.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(t=Array.isArray(t)?t:[t],t.length===0)throw new g("no protocols were provided to open a stream",z.ERR_INVALID_PROTOCOLS_FOR_STREAM);return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){so(e)&&(e=we(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.code!==z.ERR_NOT_FOUND)throw s}let n=_e([B("/pk/"),e.multihash.digest]),o=await this.contentRouting.get(n,t);return Hr(o),await this.peerStore.patch(e,{publicKey:o}),o}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error(new Error(z.ERR_DISCOVERED_SELF));return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function HE(r={}){let e=r.peerId??=await _1();if(e.privateKey==null)throw new g("peer id was missing private key","ERR_MISSING_PRIVATE_KEY");return r.privateKey??=await Er(e.privateKey),new H3(await LE(r))}async function qE(r={}){let e=await HE(r);return r.start!==!1&&await e.start(),e}async function WE(r){let e=r.libp2p?.peerId,t=r.logger??Jn(),n=new Oe("/pkcs8/self"),o;e==null&&r.datastore!=null&&(o=bd(r.keychain)({datastore:r.datastore,logger:t}),await r.datastore.has(n)&&(r.libp2p=r.libp2p??{},r.libp2p.peerId=await o.exportPeerId("self")));let s=Yd(r);s.datastore=s.datastore??r.datastore,r=r??{};let i=await qE({...s,...r.libp2p,start:!1});return e==null&&o!=null&&!await r.datastore.has(n)&&await o.importPeer("self",i.peerId),i}async function lP(r={}){let e=r.datastore??new ws,t=r.blockstore??new $a,n;uP(r.libp2p)?n=r.libp2p:n=await WE({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new s1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Ih(),Ah()],routers:[W0(n)]});return r.start!==!1&&await o.start(),o}function uP(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Dc(dP);})();
|
|
53
|
+
`));t.log.trace('handle: respond with "%s" for %s',e,o),await ks(n,s,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log('handle: respond with "na" for "%s"',o),await ks(n,B(`na
|
|
54
|
+
`),t),t.log('handle: responded with "na" for "%s"',o)}}var aC=500,k3=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;transient;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:s,abort:i,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.transient=e.transient??!1,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=s,this._abort=i,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[$3]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new m("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.status==="closed")throw new m("the connection is closed","ERR_CONNECTION_CLOSED");if(Array.isArray(e)||(e=[e]),this.transient&&t?.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(aC);ee(1/0,t),e={...e,signal:t}}try{this.log.trace("closing all streams"),await Promise.all(this.streams.map(async t=>t.close(e))),this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this.streams.forEach(t=>{t.abort(e)}),this.log.error("all streams aborted",this.streams.length),this._abort(e),this.timeline.close=Date.now(),this.status="closed"}};function DE(r){return new k3(r)}var cC=3e4;function lC(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.code!==G.ERR_NO_HANDLER_FOR_PROTOCOL)throw t}return I3}function uC(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.code!==G.ERR_NO_HANDLER_FOR_PROTOCOL)throw n}return t.maxOutboundStreams??D3}function TE(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var uf=class{components;connectionEncryption;muxers;inboundUpgradeTimeout;events;constructor(e,t){this.components=e,this.connectionEncryption=new Map,t.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,t.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??2e3,this.events=e.events}async shouldBlockConnection(e,t,n){let o=this.components.connectionGater[n];if(o!==void 0&&await o(e,t))throw new m(`The multiaddr connection is blocked by gater.${n}`,G.ERR_CONNECTION_INTERCEPTED)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new m("connection denied",G.ERR_CONNECTION_DENIED);let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new m("inbound upgrade timeout",pn))};l.addEventListener("abort",d,{once:!0}),ee(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new m("The multiaddr connection is blocked by gater.acceptConnection",G.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the inbound connection upgrade");let u=e;if(t?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the inbound connection"),u=await f.protect(e))}try{if(o=u,t?.skipEncryption!==!0){({conn:o,remotePeer:s,protocol:c}=await this._encryptInbound(u));let f={...u,...o};await this.shouldBlockConnection(s,f,"denyInboundEncryptedConnection")}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new m("inbound connection that skipped encryption must have a peer id",G.ERR_INVALID_MULTIADDR);let g=ge(f);c="native",s=g}if(i=o,t?.muxerFactory!=null)a=t.muxerFactory;else if(this.muxers.size>0){let f=await this._multiplexInbound({...u,...o},this.muxers);a=f.muxerFactory,i=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection",f),f}return await this.shouldBlockConnection(s,e,"denyInboundUpgradedConnection"),e.log("successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:i,muxerFactory:a,remotePeer:s,transient:t?.transient})}finally{l.removeEventListener("abort",d),this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=ge(n),await this.shouldBlockConnection(o,e,"denyOutboundConnection"));let s,i,a,c,l;this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the outbound connection upgrade");let d=e;if(t?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(d=await u.protect(e))}try{if(s=d,t?.skipEncryption!==!0){({conn:s,remotePeer:i,protocol:c}=await this._encryptOutbound(d,o));let u={...d,...s};await this.shouldBlockConnection(i,u,"denyOutboundEncryptedConnection")}else{if(o==null)throw new m("Encryption was skipped but no peer id was passed",G.ERR_INVALID_PEER);c="native",i=o}if(a=s,t?.muxerFactory!=null)l=t.muxerFactory;else if(this.muxers.size>0){let u=await this._multiplexOutbound({...d,...s},this.muxers);l=u.muxerFactory,a=u.stream}}catch(u){throw e.log.error("failed to upgrade outbound connection",u),await e.close(u),u}return await this.shouldBlockConnection(i,e,"denyOutboundUpgradedConnection"),e.log("successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:l,remotePeer:i,transient:t?.transient})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,transient:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:h=>{u!=null&&Promise.resolve().then(async()=>{let p=this.components.registrar.getProtocols(),{stream:y,protocol:w}=await xc(h,p,{log:h.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",w);let b=lC(w,this.components.registrar);if(TE(w,"inbound",u)===b){let S=new m(`Too many inbound protocol streams for protocol "${w}" - limit ${b}`,G.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS);throw h.abort(S),S}h.source=y.source,h.sink=y.sink,h.protocol=w,y.closeWrite!=null&&(h.closeWrite=y.closeWrite),y.closeRead!=null&&(h.closeRead=y.closeRead),y.close!=null&&(h.close=y.close),await this.components.peerStore.merge(i,{protocols:[w]}),this.components.metrics?.trackProtocolStream(h,u),this._onStream({connection:u,stream:h,protocol:w})}).catch(async p=>{u.log.error("error handling incoming stream id %s",h.id,p.message,p.code,p.stack),h.timeline.close==null&&await h.close()})}}),d=async(h,p={})=>{if(l==null)throw new m("Stream is not multiplexed",G.ERR_MUXER_UNAVAILABLE);u.log("starting new stream for protocols %s",h);let y=await l.newStream();u.log.trace("started new stream %s for protocols %s",y.id,h);try{if(p.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",h);let _=AbortSignal.timeout(cC);ee(1/0,_),p={...p,signal:_}}y.log.trace("selecting protocol from protocols %s",h);let{stream:w,protocol:b}=await bc(y,h,{...p,log:y.log,yieldBytes:!0});y.log("selected protocol %s",b);let E=uC(b,this.components.registrar,p);if(TE(b,"outbound",u)>=E){let _=new m(`Too many outbound protocol streams for protocol "${b}" - limit ${E}`,G.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw y.abort(_),_}return await this.components.peerStore.merge(i,{protocols:[b]}),y.source=w.source,y.sink=w.sink,y.protocol=b,w.closeWrite!=null&&(y.closeWrite=w.closeWrite),w.closeRead!=null&&(y.closeRead=w.closeRead),w.close!=null&&(y.close=w.close),this.components.metrics?.trackProtocolStream(y,u),y}catch(w){throw u.log.error("could not create new stream for protocols %s",h,w),y.timeline.close==null&&y.abort(w),w.code!=null?w:new m(String(w),G.ERR_UNSUPPORTED_PROTOCOL)}},Promise.all([l.sink(s.source),s.sink(l.source)]).catch(h=>{u.log.error("error piping data through muxer",h)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...h)=>(u!=null&&h[1]==="close"&&h[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(p){u.log.error("error closing connection after timeline close",p)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(p=>{u.log.error("error thrown while dispatching connection:close event",p)}),Reflect.set(...h))}),o.timeline.upgraded=Date.now();let g=()=>{throw new m("connection is not multiplexed",G.ERR_CONNECTION_NOT_MULTIPLEXED)};return u=DE({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,transient:c,logger:this.components.logger,newStream:d??g,getStreams:()=>l!=null?l.streams:[],close:async h=>{l!=null&&(u.log.trace("close muxer"),await l.close(h)),u.log.trace("close maconn"),await o.close(h),u.log.trace("closed maconn")},abort:h=>{o.abort(h),l?.abort(h)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:s,options:i}=this.components.registrar.getHandler(o);if(t.transient&&i.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");s({connection:t,stream:n})}async _encryptInbound(e){let t=Array.from(this.connectionEncryption.keys());e.log("handling inbound crypto protocol selection",t);try{let{stream:n,protocol:o}=await xc(e,t,{log:e.log}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using",o),{...await s.secureInbound(this.components.peerId,n),protocol:o}}catch(n){throw e.log.error("encrypting inbound connection to %p failed",n),new m(n.message,G.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncryption.keys());e.log("selecting outbound crypto protocol",n);try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await bc(e,n,{log:e.log,yieldBytes:!0}),i=this.connectionEncryption.get(s);if(i==null)throw new Error(`no crypto module found for ${s}`);return e.log("encrypting outbound connection to %p using %s",t,i),{...await i.secureOutbound(this.components.peerId,o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %p failed",o),new m(o.message,G.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,t){let n=Array.from(t.keys());e.log("outbound selecting muxer %s",n);try{e.log.trace("selecting stream muxer from %s",n);let{stream:o,protocol:s}=await bc(e,n,{log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new m(String(o),G.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,t){let n=Array.from(t.keys());e.log("inbound handling muxers %s",n);try{let{stream:o,protocol:s}=await xc(e,n,{log:e.log}),i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new m(String(o),G.ERR_MUXER_UNAVAILABLE)}}};var C3=class extends xe{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new xe,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new yt(a.type,{detail:a.detail}));return c||l},ee(1/0,t),this.peerId=e.peerId,this.logger=e.logger??no(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=bE({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Vd,version:Fd},logger:this.logger,events:t,datastore:e.datastore??new fs,connectionGater:xE(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new Yd(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new uf(this.components,{connectionEncryption:(e.connectionEncryption??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),muxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager.inboundUpgradeTimeout}),this.configureComponent("transportManager",new lf(this.components,e.transportManager)),this.configureComponent("connectionManager",new of(this.components,e.connectionManager)),this.configureComponent("registrar",new cf(this.components)),this.configureComponent("addressManager",new Qd(this.components,e.addresses));let s=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new af(this.components,{routers:s}));let i=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new sf(this.components,{routers:i})),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[Jr]!=null&&(this.log("registering service %s for content routing",a),i.push(l[Jr])),l[en]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[en])),l[Ko]!=null&&(this.log("registering service %s for peer discovery",a),l[Ko].addEventListener?.("peer",d=>{this.#e(d)}))}}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new je;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new m("no protocols were provided to open a stream",G.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(t=Array.isArray(t)?t:[t],t.length===0)throw new m("no protocols were provided to open a stream",G.ERR_INVALID_PROTOCOLS_FOR_STREAM);return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Jn(e)&&(e=ge(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.code!==G.ERR_NOT_FOUND)throw s}let n=ve([B("/pk/"),e.multihash.digest]),o=await this.contentRouting.get(n,t);return qr(o),await this.peerStore.patch(e,{publicKey:o}),o}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error(new Error(G.ERR_DISCOVERED_SELF));return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function kE(r={}){let e=r.peerId??=await R1();if(e.privateKey==null)throw new m("peer id was missing private key","ERR_MISSING_PRIVATE_KEY");return r.privateKey??=await Rr(e.privateKey),new C3(await vE(r))}async function CE(r={}){let e=await kE(r);return r.start!==!1&&await e.start(),e}async function NE(r){let e=r.libp2p?.peerId,t=r.logger??no(),n=new Oe("/pkcs8/self"),o;e==null&&r.datastore!=null&&(o=fd(r.keychain)({datastore:r.datastore,logger:t}),await r.datastore.has(n)&&(r.libp2p=r.libp2p??{},r.libp2p.peerId=await o.exportPeerId("self")));let s=Kd(r);s.datastore=s.datastore??r.datastore,r=r??{};let i=await CE({...s,...r.libp2p,start:!1});return e==null&&o!=null&&!await r.datastore.has(n)&&await o.importPeer("self",i.peerId),i}async function dC(r={}){let e=r.datastore??new fs,t=r.blockstore??new Ka,n;fC(r.libp2p)?n=r.libp2p:n=await NE({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new a1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Mh(),Uh()],routers:[$0(n)]});return r.start!==!1&&await o.start(),o}function fC(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Rc(hC);})();
|
|
55
55
|
/*! Bundled license information:
|
|
56
56
|
|
|
57
57
|
pvtsutils/build/index.js:
|