@agi-cli/web-ui 0.1.51 → 0.1.54

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.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ type MaybePromise<T> = T | Promise<T>;
2
+ type ApiBaseUrlOption = string | URL | ((context: {
3
+ req: Request;
4
+ }) => MaybePromise<string | URL | null | undefined>);
1
5
  /**
2
6
  * Get the absolute path to the web UI assets directory
3
7
  */
@@ -25,6 +29,14 @@ export interface ServeWebUIOptions {
25
29
  * Custom 404 handler
26
30
  */
27
31
  onNotFound?: (req: Request) => Response | Promise<Response> | null;
32
+ /**
33
+ * Override the API base URL the web UI should call.
34
+ *
35
+ * Defaults to the current request origin. Provide a string/URL for a static
36
+ * value or a callback to derive it per request. Relative strings are resolved
37
+ * against the incoming request URL.
38
+ */
39
+ apiBaseUrl?: ApiBaseUrlOption;
28
40
  }
29
41
  /**
30
42
  * Create a request handler for serving the web UI
@@ -40,11 +52,5 @@ export interface ServeWebUIOptions {
40
52
  * ```
41
53
  */
42
54
  export declare function serveWebUI(options?: ServeWebUIOptions): (req: Request) => Promise<Response | null>;
43
- declare const _default: {
44
- getWebUIPath: typeof getWebUIPath;
45
- getIndexPath: typeof getIndexPath;
46
- isWebUIAvailable: typeof isWebUIAvailable;
47
- serveWebUI: typeof serveWebUI;
48
- };
49
- export default _default;
55
+ export {};
50
56
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAa1C;AAED,MAAM,WAAW,iBAAiB;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;CACnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,IAMrB,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsG3E;;;;;;;AAyBD,wBAKE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,KAAK,gBAAgB,GAClB,MAAM,GACN,GAAG,GACH,CAAC,CAAC,OAAO,EAAE;IACX,GAAG,EAAE,OAAO,CAAC;CACZ,KAAK,YAAY,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAExD;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAa1C;AAED,MAAM,WAAW,iBAAiB;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAEnE;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,IAsDrB,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAoI3E"}
package/dist/index.js CHANGED
@@ -13,6 +13,49 @@ EMBEDDED_ASSETS.set("/assets/index-vVR1i8Eb.js", { content: "KGZ1bmN0aW9uKCl7Y29
13
13
  EMBEDDED_ASSETS.set("/assets/index-BcbY2mjE.css", { content: "QGltcG9ydCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUlCTStQbGV4K01vbm86d2dodEA0MDA7NTAwOzYwMDs3MDAmZGlzcGxheT1zd2FwIjsqLDpiZWZvcmUsOmFmdGVyey0tdHctYm9yZGVyLXNwYWNpbmcteDogMDstLXR3LWJvcmRlci1zcGFjaW5nLXk6IDA7LS10dy10cmFuc2xhdGUteDogMDstLXR3LXRyYW5zbGF0ZS15OiAwOy0tdHctcm90YXRlOiAwOy0tdHctc2tldy14OiAwOy0tdHctc2tldy15OiAwOy0tdHctc2NhbGUteDogMTstLXR3LXNjYWxlLXk6IDE7LS10dy1wYW4teDogOy0tdHctcGFuLXk6IDstLXR3LXBpbmNoLXpvb206IDstLXR3LXNjcm9sbC1zbmFwLXN0cmljdG5lc3M6IHByb3hpbWl0eTstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb246IDstLXR3LW9yZGluYWw6IDstLXR3LXNsYXNoZWQtemVybzogOy0tdHctbnVtZXJpYy1maWd1cmU6IDstLXR3LW51bWVyaWMtc3BhY2luZzogOy0tdHctbnVtZXJpYy1mcmFjdGlvbjogOy0tdHctcmluZy1pbnNldDogOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiAjZmZmOy0tdHctcmluZy1jb2xvcjogcmdiKDU5IDEzMCAyNDYgLyAuNSk7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXJpbmctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDAgIzAwMDA7LS10dy1ibHVyOiA7LS10dy1icmlnaHRuZXNzOiA7LS10dy1jb250cmFzdDogOy0tdHctZ3JheXNjYWxlOiA7LS10dy1odWUtcm90YXRlOiA7LS10dy1pbnZlcnQ6IDstLXR3LXNhdHVyYXRlOiA7LS10dy1zZXBpYTogOy0tdHctZHJvcC1zaGFkb3c6IDstLXR3LWJhY2tkcm9wLWJsdXI6IDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6IDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OiA7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6IDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6IDstLXR3LWJhY2tkcm9wLWludmVydDogOy0tdHctYmFja2Ryb3Atb3BhY2l0eTogOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6IDstLXR3LWJhY2tkcm9wLXNlcGlhOiA7LS10dy1jb250YWluLXNpemU6IDstLXR3LWNvbnRhaW4tbGF5b3V0OiA7LS10dy1jb250YWluLXBhaW50OiA7LS10dy1jb250YWluLXN0eWxlOiB9OjpiYWNrZHJvcHstLXR3LWJvcmRlci1zcGFjaW5nLXg6IDA7LS10dy1ib3JkZXItc3BhY2luZy15OiAwOy0tdHctdHJhbnNsYXRlLXg6IDA7LS10dy10cmFuc2xhdGUteTogMDstLXR3LXJvdGF0ZTogMDstLXR3LXNrZXcteDogMDstLXR3LXNrZXcteTogMDstLXR3LXNjYWxlLXg6IDE7LS10dy1zY2FsZS15OiAxOy0tdHctcGFuLXg6IDstLXR3LXBhbi15OiA7LS10dy1waW5jaC16b29tOiA7LS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzOiBwcm94aW1pdHk7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC12aWEtcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uOiA7LS10dy1vcmRpbmFsOiA7LS10dy1zbGFzaGVkLXplcm86IDstLXR3LW51bWVyaWMtZmlndXJlOiA7LS10dy1udW1lcmljLXNwYWNpbmc6IDstLXR3LW51bWVyaWMtZnJhY3Rpb246IDstLXR3LXJpbmctaW5zZXQ6IDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAwcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogI2ZmZjstLXR3LXJpbmctY29sb3I6IHJnYig1OSAxMzAgMjQ2IC8gLjUpOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OiAwIDAgIzAwMDA7LS10dy1yaW5nLXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3JlZDogMCAwICMwMDAwOy0tdHctYmx1cjogOy0tdHctYnJpZ2h0bmVzczogOy0tdHctY29udHJhc3Q6IDstLXR3LWdyYXlzY2FsZTogOy0tdHctaHVlLXJvdGF0ZTogOy0tdHctaW52ZXJ0OiA7LS10dy1zYXR1cmF0ZTogOy0tdHctc2VwaWE6IDstLXR3LWRyb3Atc2hhZG93OiA7LS10dy1iYWNrZHJvcC1ibHVyOiA7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOiA7LS10dy1iYWNrZHJvcC1jb250cmFzdDogOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOiA7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOiA7LS10dy1iYWNrZHJvcC1pbnZlcnQ6IDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6IDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOiA7LS10dy1iYWNrZHJvcC1zZXBpYTogOy0tdHctY29udGFpbi1zaXplOiA7LS10dy1jb250YWluLWxheW91dDogOy0tdHctY29udGFpbi1wYWludDogOy0tdHctY29udGFpbi1zdHlsZTogfSosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci13aWR0aDowO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2U1ZTdlYn06YmVmb3JlLDphZnRlcnstLXR3LWNvbnRlbnQ6ICIifWh0bWwsOmhvc3R7bGluZS1oZWlnaHQ6MS41Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGFiLXNpemU6NDstby10YWItc2l6ZTo0O3RhYi1zaXplOjQ7Zm9udC1mYW1pbHk6SUJNIFBsZXggTW9ubyxtb25vc3BhY2U7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczpub3JtYWw7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWJvZHl7bWFyZ2luOjA7bGluZS1oZWlnaHQ6aW5oZXJpdH1ocntoZWlnaHQ6MDtjb2xvcjppbmhlcml0O2JvcmRlci10b3Atd2lkdGg6MXB4fWFiYnI6d2hlcmUoW3RpdGxlXSl7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWF7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6SUJNIFBsZXggTW9ubyxtb25vc3BhY2U7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczpub3JtYWw7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDttYXJnaW46MDtwYWRkaW5nOjB9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixpbnB1dDp3aGVyZShbdHlwZT1idXR0b25dKSxpbnB1dDp3aGVyZShbdHlwZT1yZXNldF0pLGlucHV0OndoZXJlKFt0eXBlPXN1Ym1pdF0pey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b306LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19YmxvY2txdW90ZSxkbCxkZCxoMSxoMixoMyxoNCxoNSxoNixocixmaWd1cmUscCxwcmV7bWFyZ2luOjB9ZmllbGRzZXR7bWFyZ2luOjA7cGFkZGluZzowfWxlZ2VuZHtwYWRkaW5nOjB9b2wsdWwsbWVudXtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfWRpYWxvZ3twYWRkaW5nOjB9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWlucHV0OjotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjojOWNhM2FmfWlucHV0OjpwbGFjZWhvbGRlcix0ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxO2NvbG9yOiM5Y2EzYWZ9YnV0dG9uLFtyb2xlPWJ1dHRvbl17Y3Vyc29yOnBvaW50ZXJ9OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmV9OnJvb3R7LS1iYWNrZ3JvdW5kOiAyMjAgMjUlIDk1JTstLWZvcmVncm91bmQ6IDIyMCAxMCUgMTUlOy0tY2FyZDogMjIwIDI1JSA5OCU7LS1jYXJkLWZvcmVncm91bmQ6IDIyMCAxMCUgMTUlOy0tcG9wb3ZlcjogMjIwIDI1JSA5OCU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIyMCAxMCUgMTUlOy0tcHJpbWFyeTogMjIyLjIgNDcuNCUgMTEuMiU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tc2Vjb25kYXJ5OiAyMjAgMTglIDg4JTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAyMjIuMiAzNSUgMjUlOy0tbXV0ZWQ6IDIyMCAxOCUgODglOy0tbXV0ZWQtZm9yZWdyb3VuZDogMjIwIDE1JSA0MCU7LS1hY2NlbnQ6IDIyMCAyMCUgODYlOy0tYWNjZW50LWZvcmVncm91bmQ6IDIyMi4yIDM1JSAyNSU7LS1kZXN0cnVjdGl2ZTogMCA5MCUgNjUlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1ib3JkZXI6IDIyMCAxNSUgODklOy0taW5wdXQ6IDIyMCAxNSUgODklOy0tcmluZzogMjIyLjIgODQlIDQuOSU7LS1jaGFydC0xOiAyMjIuMiA0Ny40JSA0MS4yJTstLWNoYXJ0LTI6IDE3MyA1OCUgMzklOy0tY2hhcnQtMzogMTk3IDM3JSAyNCU7LS1jaGFydC00OiA0MyA3NCUgNjYlOy0tY2hhcnQtNTogMjcgODclIDY3JTstLXJhZGl1czogLjVyZW07LS1zaWRlYmFyLWJhY2tncm91bmQ6IDIyMCAyNSUgOTElOy0tc2lkZWJhci1mb3JlZ3JvdW5kOiAyMjAgMTAlIDE1JTstLXNpZGViYXItcHJpbWFyeTogMjIyLjIgNDcuNCUgMTEuMiU7LS1zaWRlYmFyLXByaW1hcnktZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1zaWRlYmFyLWFjY2VudDogMjIwIDIwJSA4NiU7LS1zaWRlYmFyLWFjY2VudC1mb3JlZ3JvdW5kOiAyMjIuMiAzNSUgMjUlOy0tc2lkZWJhci1ib3JkZXI6IDIyMCAxNSUgODklOy0tc2lkZWJhci1yaW5nOiAyMjIuMiA4NCUgNC45JTstLWNvZGUtYmFja2dyb3VuZDogaHNsKDIyMCAyNSUgOTMlKTstLWNvZGUtZm9yZWdyb3VuZDogaHNsKDIyMCAxMCUgMTAlKTstLWNvZGUta2V5d29yZDogaHNsKDMwMCA4NSUgNDIlKTstLWNvZGUtY2xhc3M6IGhzbCgxMjAgNjAlIDM1JSk7LS1jb2RlLWZ1bmN0aW9uOiBoc2woMjIwIDk1JSA0NSUpOy0tY29kZS1zdHJpbmc6IGhzbCgxMjAgNjAlIDM1JSk7LS1jb2RlLWNvbW1lbnQ6IGhzbCgyMjAgMTUlIDM1JSk7LS1jb2RlLW9wZXJhdG9yOiBoc2woMTgwIDg1JSAzMCUpOy0tY29kZS1wdW5jdHVhdGlvbjogaHNsKDIyMCAxNSUgMjAlKTtjb2xvci1zY2hlbWU6bGlnaHR9LmRhcmt7LS1iYWNrZ3JvdW5kOiAyNDAgMTAlIDglOy0tZm9yZWdyb3VuZDogMCAwJSA5OCU7LS1jYXJkOiAyNDAgMTAlIDEwJTstLWNhcmQtZm9yZWdyb3VuZDogMCAwJSA5OCU7LS1wb3BvdmVyOiAyNDAgMTAlIDEwJTstLXBvcG92ZXItZm9yZWdyb3VuZDogMCAwJSA5OCU7LS1wcmltYXJ5OiAwIDAlIDk4JTstLXByaW1hcnktZm9yZWdyb3VuZDogMjQwIDUuOSUgMTAlOy0tc2Vjb25kYXJ5OiAyNDAgMy43JSAxNS45JTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAwIDAlIDk4JTstLW11dGVkOiAyNDAgMy43JSAxNS45JTstLW11dGVkLWZvcmVncm91bmQ6IDI0MCA1JSA2NC45JTstLWFjY2VudDogMjQwIDMuNyUgMTUuOSU7LS1hY2NlbnQtZm9yZWdyb3VuZDogMCAwJSA5OCU7LS1kZXN0cnVjdGl2ZTogMCA3NSUgNDUlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMCAwJSA5OCU7LS1ib3JkZXI6IDI0MCAzLjclIDE1LjklOy0taW5wdXQ6IDI0MCAzLjclIDE1LjklOy0tcmluZzogMjQwIDQuOSUgODMuOSU7LS1jaGFydC0xOiAyMjAgNzAlIDUwJTstLWNoYXJ0LTI6IDE2MCA2MCUgNDUlOy0tY2hhcnQtMzogMzAgODAlIDU1JTstLWNoYXJ0LTQ6IDI4MCA2NSUgNjAlOy0tY2hhcnQtNTogMzQwIDc1JSA1NSU7LS1yYWRpdXM6IC41cmVtOy0tc2lkZWJhci1iYWNrZ3JvdW5kOiAyNDAgMTAlIDEwJTstLXNpZGViYXItZm9yZWdyb3VuZDogMCAwJSA5OCU7LS1zaWRlYmFyLXByaW1hcnk6IDIxNy4yIDkxLjIlIDU5LjglOy0tc2lkZWJhci1wcmltYXJ5LWZvcmVncm91bmQ6IDI0MCA1LjklIDEwJTstLXNpZGViYXItYWNjZW50OiAyNDAgMy43JSAxNS45JTstLXNpZGViYXItYWNjZW50LWZvcmVncm91bmQ6IDAgMCUgOTglOy0tc2lkZWJhci1ib3JkZXI6IDI0MCAzLjclIDE1LjklOy0tc2lkZWJhci1yaW5nOiAyMTcuMiA5MS4yJSA1OS44JTstLWNvZGUtYmFja2dyb3VuZDogaHNsKDI0MCAxMCUgMTAlKTstLWNvZGUtZm9yZWdyb3VuZDogaHNsKDAgMCUgOTglKTstLWNvZGUta2V5d29yZDogI2M2NzhkZDstLWNvZGUtY2xhc3M6ICM5OGMzNzk7LS1jb2RlLWZ1bmN0aW9uOiAjNjFhZmVmOy0tY29kZS1zdHJpbmc6ICM5OGMzNzk7LS1jb2RlLWNvbW1lbnQ6IGhzbCgyNDAgNSUgNjQuOSUpOy0tY29kZS1vcGVyYXRvcjogIzU2YjZjMjstLWNvZGUtcHVuY3R1YXRpb246IGhzbCgyNDAgNSUgNjQuOSUpO2NvbG9yLXNjaGVtZTpkYXJrfS5cIWNvbnRhaW5lcnt3aWR0aDoxMDAlIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KXsuXCFjb250YWluZXJ7bWF4LXdpZHRoOjY0MHB4IWltcG9ydGFudH0uY29udGFpbmVye21heC13aWR0aDo2NDBweH19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsuXCFjb250YWluZXJ7bWF4LXdpZHRoOjc2OHB4IWltcG9ydGFudH0uY29udGFpbmVye21heC13aWR0aDo3NjhweH19QG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCl7LlwhY29udGFpbmVye21heC13aWR0aDoxMDI0cHghaW1wb3J0YW50fS5jb250YWluZXJ7bWF4LXdpZHRoOjEwMjRweH19QG1lZGlhIChtaW4td2lkdGg6IDEyODBweCl7LlwhY29udGFpbmVye21heC13aWR0aDoxMjgwcHghaW1wb3J0YW50fS5jb250YWluZXJ7bWF4LXdpZHRoOjEyODBweH19QG1lZGlhIChtaW4td2lkdGg6IDE1MzZweCl7LlwhY29udGFpbmVye21heC13aWR0aDoxNTM2cHghaW1wb3J0YW50fS5jb250YWluZXJ7bWF4LXdpZHRoOjE1MzZweH19LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0ucG9pbnRlci1ldmVudHMtYXV0b3twb2ludGVyLWV2ZW50czphdXRvfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5maXhlZHtwb3NpdGlvbjpmaXhlZH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5pbnNldC0we2luc2V0OjB9Li1yaWdodC0xe3JpZ2h0Oi0uMjVyZW19Li10b3AtMXt0b3A6LS4yNXJlbX0uYm90dG9tLTB7Ym90dG9tOjB9LmJvdHRvbS0yNHtib3R0b206NnJlbX0uYm90dG9tLTM2e2JvdHRvbTo5cmVtfS5sZWZ0LTB7bGVmdDowfS5sZWZ0LTFcLzJ7bGVmdDo1MCV9LnJpZ2h0LTB7cmlnaHQ6MH0udG9wLTB7dG9wOjB9LnRvcC0xXC8ye3RvcDo1MCV9LnotMHt6LWluZGV4OjB9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotNDB7ei1pbmRleDo0MH0uei01MHt6LWluZGV4OjUwfS5teC1hdXRve21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99Li1tdC0wXC41e21hcmdpbi10b3A6LS4xMjVyZW19Lm1iLTJ7bWFyZ2luLWJvdHRvbTouNXJlbX0ubWItM3ttYXJnaW4tYm90dG9tOi43NXJlbX0ubWItNHttYXJnaW4tYm90dG9tOjFyZW19Lm1sLTF7bWFyZ2luLWxlZnQ6LjI1cmVtfS5tbC0ye21hcmdpbi1sZWZ0Oi41cmVtfS5tbC01e21hcmdpbi1sZWZ0OjEuMjVyZW19Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30ubXItMXttYXJnaW4tcmlnaHQ6LjI1cmVtfS5tci0ye21hcmdpbi1yaWdodDouNXJlbX0ubXQtMFwuNXttYXJnaW4tdG9wOi4xMjVyZW19Lm10LTF7bWFyZ2luLXRvcDouMjVyZW19Lm10LTJ7bWFyZ2luLXRvcDouNXJlbX0ubXQtM3ttYXJnaW4tdG9wOi43NXJlbX0ubXQtNHttYXJnaW4tdG9wOjFyZW19Lm10LVxbMXB4XF17bWFyZ2luLXRvcDoxcHh9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmgtMTB7aGVpZ2h0OjIuNXJlbX0uaC0xNHtoZWlnaHQ6My41cmVtfS5oLTN7aGVpZ2h0Oi43NXJlbX0uaC0zXC41e2hlaWdodDouODc1cmVtfS5oLTR7aGVpZ2h0OjFyZW19LmgtNXtoZWlnaHQ6MS4yNXJlbX0uaC02e2hlaWdodDoxLjVyZW19LmgtOHtoZWlnaHQ6MnJlbX0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTk2e21heC1oZWlnaHQ6MjRyZW19Lm1heC1oLVxbMjAwcHhcXXttYXgtaGVpZ2h0OjIwMHB4fS5taW4taC0xMHttaW4taGVpZ2h0OjIuNXJlbX0udy0xMHt3aWR0aDoyLjVyZW19LnctMTJ7d2lkdGg6M3JlbX0udy0yMHt3aWR0aDo1cmVtfS53LTN7d2lkdGg6Ljc1cmVtfS53LTNcLjV7d2lkdGg6Ljg3NXJlbX0udy00e3dpZHRoOjFyZW19LnctNXt3aWR0aDoxLjI1cmVtfS53LTZ7d2lkdGg6MS41cmVtfS53LTY0e3dpZHRoOjE2cmVtfS53LTh7d2lkdGg6MnJlbX0udy04MHt3aWR0aDoyMHJlbX0udy1cWzJweFxde3dpZHRoOjJweH0udy1mdWxse3dpZHRoOjEwMCV9Lm1pbi13LTB7bWluLXdpZHRoOjBweH0ubWluLXctXFsxMDBweFxde21pbi13aWR0aDoxMDBweH0ubWluLXctbWF4e21pbi13aWR0aDotbW96LW1heC1jb250ZW50O21pbi13aWR0aDptYXgtY29udGVudH0ubWF4LXctMnhse21heC13aWR0aDo0MnJlbX0ubWF4LXctM3hse21heC13aWR0aDo0OHJlbX0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWF4LXctbWR7bWF4LXdpZHRoOjI4cmVtfS5tYXgtdy14c3ttYXgtd2lkdGg6MjByZW19LmZsZXgtMXtmbGV4OjEgMSAwJX0uZmxleC1zaHJpbmt7ZmxleC1zaHJpbms6MX0uZmxleC1zaHJpbmstMCwuc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uLXRyYW5zbGF0ZS15LWZ1bGx7LS10dy10cmFuc2xhdGUteTogLTEwMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnRyYW5zbGF0ZS15LTB7LS10dy10cmFuc2xhdGUteTogMHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtOTB7LS10dy1yb3RhdGU6IDkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfUBrZXlmcmFtZXMgcHVsc2V7NTAle29wYWNpdHk6LjV9fS5hbmltYXRlLXB1bHNle2FuaW1hdGlvbjpwdWxzZSAycyBjdWJpYy1iZXppZXIoLjQsMCwuNiwxKSBpbmZpbml0ZX1Aa2V5ZnJhbWVzIHNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uYW5pbWF0ZS1zcGlue2FuaW1hdGlvbjpzcGluIDFzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnJlc2l6ZS1ub25le3Jlc2l6ZTpub25lfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtd3JhcHtmbGV4LXdyYXA6d3JhcH0uaXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uaXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZ2FwLTF7Z2FwOi4yNXJlbX0uZ2FwLTFcLjV7Z2FwOi4zNzVyZW19LmdhcC0ye2dhcDouNXJlbX0uZ2FwLTN7Z2FwOi43NXJlbX0uZ2FwLTR7Z2FwOjFyZW19LmdhcC02e2dhcDoxLjVyZW19LmdhcC14LTJ7LW1vei1jb2x1bW4tZ2FwOi41cmVtO2NvbHVtbi1nYXA6LjVyZW19LmdhcC15LTF7cm93LWdhcDouMjVyZW19LnNwYWNlLXktMFwuNT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoLjEyNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjEyNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTE+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjI1cmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNwYWNlLXktMVwuNT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoLjM3NXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjM3NXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTI+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYyguNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTQ+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKDFyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKDFyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS02Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygxLjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKDEuNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5kaXZpZGUteT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LWRpdmlkZS15LXJldmVyc2U6IDA7Ym9yZGVyLXRvcC13aWR0aDpjYWxjKDFweCAqIGNhbGMoMSAtIHZhcigtLXR3LWRpdmlkZS15LXJldmVyc2UpKSk7Ym9yZGVyLWJvdHRvbS13aWR0aDpjYWxjKDFweCAqIHZhcigtLXR3LWRpdmlkZS15LXJldmVyc2UpKX0uZGl2aWRlLWJvcmRlcj46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXtib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5vdmVyZmxvdy1hdXRve292ZXJmbG93OmF1dG99Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXgtYXV0b3tvdmVyZmxvdy14OmF1dG99Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS53aGl0ZXNwYWNlLXByZS13cmFwe3doaXRlLXNwYWNlOnByZS13cmFwfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LmJyZWFrLWFsbHt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC0zeGx7Ym9yZGVyLXJhZGl1czoxLjVyZW19LnJvdW5kZWQtZnVsbHtib3JkZXItcmFkaXVzOjk5OTlweH0ucm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyl9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czouNzVyZW19LmJvcmRlcntib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItd2lkdGg6MHB4fS5ib3JkZXItMntib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWx7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItdHtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLWJsdWUtNTAwXC8zMHtib3JkZXItY29sb3I6IzNiODJmNjRkfS5ib3JkZXItYm9yZGVye2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJvcmRlci1ib3JkZXJcLzUwe2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSAvIC41KX0uYm9yZGVyLWVtZXJhbGQtNTAwXC8yMHtib3JkZXItY29sb3I6IzEwYjk4MTMzfS5ib3JkZXItZW1lcmFsZC01MDBcLzUwe2JvcmRlci1jb2xvcjojMTBiOTgxODB9LmJvcmRlci1yZWQtNTAwXC8yMHtib3JkZXItY29sb3I6I2VmNDQ0NDMzfS5ib3JkZXItdmlvbGV0LTUwMFwvMzB7Ym9yZGVyLWNvbG9yOiM4YjVjZjY0ZH0uYm9yZGVyLXZpb2xldC01MDBcLzUwe2JvcmRlci1jb2xvcjojOGI1Y2Y2ODB9LmJnLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpfS5iZy1iYWNrZ3JvdW5kXC81MHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSAvIC41KX0uYmctYmFja2dyb3VuZFwvODB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAuOCl9LmJnLWJhY2tncm91bmRcLzk1e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpIC8gLjk1KX0uYmctYmxhY2tcLzUwe2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5iZy1ibHVlLTUwMFwvMTB7YmFja2dyb3VuZC1jb2xvcjojM2I4MmY2MWF9LmJnLWJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpKX0uYmctY2FyZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkKSl9LmJnLWNhcmRcLzYwe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWNhcmQpIC8gLjYpfS5iZy1lbWVyYWxkLTUwMFwvMTB7YmFja2dyb3VuZC1jb2xvcjojMTBiOTgxMWF9LmJnLWVtZXJhbGQtNTAwXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiMxMGI5ODEzM30uYmctZW1lcmFsZC01MDBcLzV7YmFja2dyb3VuZC1jb2xvcjojMTBiOTgxMGR9LmJnLWdyZWVuLTUwMFwvMTB7YmFja2dyb3VuZC1jb2xvcjojMjJjNTVlMWF9LmJnLW11dGVke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmJnLW11dGVkXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkgLyAuMil9LmJnLW11dGVkXC8zMHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkgLyAuMyl9LmJnLW11dGVkXC81MHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkgLyAuNSl9LmJnLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5iZy1wcmltYXJ5XC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSAvIC4xKX0uYmctcmVkLTUwMFwvMTB7YmFja2dyb3VuZC1jb2xvcjojZWY0NDQ0MWF9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJnLXZpb2xldC01MDBcLzEwe2JhY2tncm91bmQtY29sb3I6IzhiNWNmNjFhfS5iZy12aW9sZXQtNTAwXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiM4YjVjZjYzM30uYmctZ3JhZGllbnQtdG8tdHtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AsdmFyKC0tdHctZ3JhZGllbnQtc3RvcHMpKX0uZnJvbS1iYWNrZ3JvdW5key0tdHctZ3JhZGllbnQtZnJvbTogaHNsKHZhcigtLWJhY2tncm91bmQpKSB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXRvOiBoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAwKSB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbik7LS10dy1ncmFkaWVudC1zdG9wczogdmFyKC0tdHctZ3JhZGllbnQtZnJvbSksIHZhcigtLXR3LWdyYWRpZW50LXRvKX0udmlhLWJhY2tncm91bmR7LS10dy1ncmFkaWVudC10bzogaHNsKHZhcigtLWJhY2tncm91bmQpIC8gMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6IHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCBoc2wodmFyKC0tYmFja2dyb3VuZCkpIHZhcigtLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbiksIHZhcigtLXR3LWdyYWRpZW50LXRvKX0udG8tdHJhbnNwYXJlbnR7LS10dy1ncmFkaWVudC10bzogdHJhbnNwYXJlbnQgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pfS5wLTB7cGFkZGluZzowfS5wLTF7cGFkZGluZzouMjVyZW19LnAtMntwYWRkaW5nOi41cmVtfS5wLTN7cGFkZGluZzouNzVyZW19LnAtNHtwYWRkaW5nOjFyZW19LnAtNntwYWRkaW5nOjEuNXJlbX0ucHgtMntwYWRkaW5nLWxlZnQ6LjVyZW07cGFkZGluZy1yaWdodDouNXJlbX0ucHgtM3twYWRkaW5nLWxlZnQ6Ljc1cmVtO3BhZGRpbmctcmlnaHQ6Ljc1cmVtfS5weC00e3BhZGRpbmctbGVmdDoxcmVtO3BhZGRpbmctcmlnaHQ6MXJlbX0ucHgtNntwYWRkaW5nLWxlZnQ6MS41cmVtO3BhZGRpbmctcmlnaHQ6MS41cmVtfS5weS0wXC41e3BhZGRpbmctdG9wOi4xMjVyZW07cGFkZGluZy1ib3R0b206LjEyNXJlbX0ucHktMXtwYWRkaW5nLXRvcDouMjVyZW07cGFkZGluZy1ib3R0b206LjI1cmVtfS5weS0xXC41e3BhZGRpbmctdG9wOi4zNzVyZW07cGFkZGluZy1ib3R0b206LjM3NXJlbX0ucHktMntwYWRkaW5nLXRvcDouNXJlbTtwYWRkaW5nLWJvdHRvbTouNXJlbX0ucHktM3twYWRkaW5nLXRvcDouNzVyZW07cGFkZGluZy1ib3R0b206Ljc1cmVtfS5weS00e3BhZGRpbmctdG9wOjFyZW07cGFkZGluZy1ib3R0b206MXJlbX0ucHktNntwYWRkaW5nLXRvcDoxLjVyZW07cGFkZGluZy1ib3R0b206MS41cmVtfS5weS04e3BhZGRpbmctdG9wOjJyZW07cGFkZGluZy1ib3R0b206MnJlbX0ucGItMntwYWRkaW5nLWJvdHRvbTouNXJlbX0ucGItMzJ7cGFkZGluZy1ib3R0b206OHJlbX0ucGItNHtwYWRkaW5nLWJvdHRvbToxcmVtfS5wYi04e3BhZGRpbmctYm90dG9tOjJyZW19LnBsLTF7cGFkZGluZy1sZWZ0Oi4yNXJlbX0ucGwtM3twYWRkaW5nLWxlZnQ6Ljc1cmVtfS5wci0ye3BhZGRpbmctcmlnaHQ6LjVyZW19LnByLTR7cGFkZGluZy1yaWdodDoxcmVtfS5wdC0we3BhZGRpbmctdG9wOjB9LnB0LTBcLjV7cGFkZGluZy10b3A6LjEyNXJlbX0ucHQtMTZ7cGFkZGluZy10b3A6NHJlbX0ucHQtMntwYWRkaW5nLXRvcDouNXJlbX0ucHQtNntwYWRkaW5nLXRvcDoxLjVyZW19LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmZvbnQtbW9ub3tmb250LWZhbWlseTpJQk0gUGxleCBNb25vLG1vbm9zcGFjZX0udGV4dC0yeGx7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoycmVtfS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LWJhc2V7Zm9udC1zaXplOjFyZW07bGluZS1oZWlnaHQ6MS41cmVtfS50ZXh0LWxne2ZvbnQtc2l6ZToxLjEyNXJlbTtsaW5lLWhlaWdodDoxLjc1cmVtfS50ZXh0LXNte2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuMjVyZW19LnRleHQteHN7Zm9udC1zaXplOi43NXJlbTtsaW5lLWhlaWdodDoxcmVtfS5mb250LW1lZGl1bXtmb250LXdlaWdodDo1MDB9LmZvbnQtc2VtaWJvbGR7Zm9udC13ZWlnaHQ6NjAwfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5sZWFkaW5nLW5vcm1hbHtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctcmVsYXhlZHtsaW5lLWhlaWdodDoxLjYyNX0udHJhY2tpbmctd2lkZXtsZXR0ZXItc3BhY2luZzouMDI1ZW19LnRleHQtYW1iZXItNjAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyMTcgMTE5IDYgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1hbWJlci03MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE4MCA4MyA5IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtYmx1ZS01MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDU5IDEzMCAyNDYgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1ibHVlLTYwMHstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMzcgOTkgMjM1IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtYmx1ZS03MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI5IDc4IDIxNiAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LWNhcmQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tY2FyZC1mb3JlZ3JvdW5kKSl9LnRleHQtY3lhbi02MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDggMTQ1IDE3OCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LWN5YW4tNzAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxNCAxMTYgMTQ0IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtZGVzdHJ1Y3RpdmV7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LnRleHQtZW1lcmFsZC02MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDUgMTUwIDEwNSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LWVtZXJhbGQtNzAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYig0IDEyMCA4NyAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0udGV4dC1mb3JlZ3JvdW5kXC83MHtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkgLyAuNyl9LnRleHQtZm9yZWdyb3VuZFwvODB7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpIC8gLjgpfS50ZXh0LWZvcmVncm91bmRcLzg1e2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSAvIC44NSl9LnRleHQtZm9yZWdyb3VuZFwvOTB7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpIC8gLjkpfS50ZXh0LWdyZWVuLTUwMHstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMzQgMTk3IDk0IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtZ3JlZW4tNjAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyMiAxNjMgNzQgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1ncmVlbi03MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDIxIDEyOCA2MSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LW11dGVkLWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0udGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC80MHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkgLyAuNCl9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwvNjV7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpIC8gLjY1KX0udGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC83MHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkgLyAuNyl9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwvNzV7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpIC8gLjc1KX0udGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC84MHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkgLyAuOCl9LnRleHQtb3JhbmdlLTUwMHstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjQ5IDExNSAyMiAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LXByaW1hcnl7Y29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0udGV4dC1wcmltYXJ5LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS50ZXh0LXB1cnBsZS01MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE2OCA4NSAyNDcgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1wdXJwbGUtNjAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxNDcgNTEgMjM0IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtcHVycGxlLTcwMHstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMTI2IDM0IDIwNiAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LXJlZC01MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDIzOSA2OCA2OCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LXJlZC02MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDIyMCAzOCAzOCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LXZpb2xldC02MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDEyNCA1OCAyMzcgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC12aW9sZXQtNzAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxMDkgNDAgMjE3IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmxpbmUtdGhyb3VnaHt0ZXh0LWRlY29yYXRpb24tbGluZTpsaW5lLXRocm91Z2h9LnBsYWNlaG9sZGVyLW11dGVkLWZvcmVncm91bmQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0ucGxhY2Vob2xkZXItbXV0ZWQtZm9yZWdyb3VuZDo6cGxhY2Vob2xkZXJ7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTcwe29wYWNpdHk6Ljd9LnNoYWRvdy1sZ3stLXR3LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2IoMCAwIDAgLyAuMSksIDAgNHB4IDZweCAtNHB4IHJnYigwIDAgMCAvIC4xKTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDEwcHggMTVweCAtM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgNHB4IDZweCAtNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0ub3V0bGluZS1ub25le291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5iYWNrZHJvcC1ibHVyLXNtey0tdHctYmFja2Ryb3AtYmx1cjogYmx1cig0cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1cikgdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcykgdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QpIHZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSkgdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSkgdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0KSB2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5KSB2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSkgdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEpfS50cmFuc2l0aW9uLWFsbHt0cmFuc2l0aW9uLXByb3BlcnR5OmFsbDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tdHJhbnNmb3Jte3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMTUwe3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwe3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2UtaW4tb3V0e3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpfUBrZXlmcmFtZXMgc2hpbW1lcnswJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDAlIDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjoyMDAlIDB9fS5hbmltYXRlLXNoaW1tZXJ7YW5pbWF0aW9uOnNoaW1tZXIgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGV9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTpJQk0gUGxleCBNb25vLG1vbm9zcGFjZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSk7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX1jb2Rle2ZvbnQtZmFtaWx5OklCTSBQbGV4IE1vbm8sbW9ub3NwYWNlO2NvbG9yOnZhcigtLWNvZGUtZm9yZWdyb3VuZCl9YnV0dG9uOmZvY3VzLGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6bm9uZTtib3gtc2hhZG93Om5vbmV9LnNjcm9sbGJhci1oaWRley1tcy1vdmVyZmxvdy1zdHlsZTpub25lO3Njcm9sbGJhci13aWR0aDpub25lfS5zY3JvbGxiYXItaGlkZTo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfS5tYXJrZG93bi1jb250ZW50e21heC13aWR0aDoxMDAlO292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1hcmtkb3duLWNvbnRlbnQgaDF7Zm9udC1zaXplOjEuODc1cmVtO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEuNXJlbTttYXJnaW4tYm90dG9tOjFyZW07bGluZS1oZWlnaHQ6MS4yfS5tYXJrZG93bi1jb250ZW50IGgye2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi10b3A6MS41cmVtO21hcmdpbi1ib3R0b206Ljc1cmVtO2xpbmUtaGVpZ2h0OjEuM30ubWFya2Rvd24tY29udGVudCBoM3tmb250LXNpemU6MS4yNXJlbTtmb250LXdlaWdodDo2MDA7bWFyZ2luLXRvcDoxLjI1cmVtO21hcmdpbi1ib3R0b206LjVyZW07bGluZS1oZWlnaHQ6MS40fS5tYXJrZG93bi1jb250ZW50IGg0e2ZvbnQtc2l6ZToxLjEyNXJlbTtmb250LXdlaWdodDo2MDA7bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206LjVyZW07bGluZS1oZWlnaHQ6MS40fS5tYXJrZG93bi1jb250ZW50IHB7bWFyZ2luLXRvcDouNzVyZW07bWFyZ2luLWJvdHRvbTouNzVyZW19Lm1hcmtkb3duLWNvbnRlbnQgdWwsLm1hcmtkb3duLWNvbnRlbnQgb2x7bWFyZ2luLXRvcDouNzVyZW07bWFyZ2luLWJvdHRvbTouNzVyZW07cGFkZGluZy1sZWZ0OjEuNXJlbX0ubWFya2Rvd24tY29udGVudCBsaXttYXJnaW4tdG9wOi4yNXJlbTttYXJnaW4tYm90dG9tOi4yNXJlbX0ubWFya2Rvd24tY29udGVudCBwcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2RlLWJhY2tncm91bmQpO2JvcmRlcjoxcHggc29saWQgaHNsKHZhcigtLWJvcmRlcikpO2JvcmRlci1yYWRpdXM6LjVyZW07cGFkZGluZzoxcmVtO21hcmdpbi10b3A6Ljc1cmVtO21hcmdpbi1ib3R0b206Ljc1cmVtO292ZXJmbG93LXg6YXV0bztjb2xvcjp2YXIoLS1jb2RlLWZvcmVncm91bmQpO21heC13aWR0aDoxMDAlfS5tYXJrZG93bi1jb250ZW50IGNvZGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2RlLWJhY2tncm91bmQpO2JvcmRlcjoxcHggc29saWQgaHNsKHZhcigtLWJvcmRlcikpO2JvcmRlci1yYWRpdXM6LjI1cmVtO3BhZGRpbmc6LjEyNXJlbSAuMzc1cmVtO2ZvbnQtc2l6ZTouODc1cmVtO2NvbG9yOnZhcigtLWNvZGUtZm9yZWdyb3VuZCk7d29yZC1icmVhazpicmVhay1hbGx9Lm1hcmtkb3duLWNvbnRlbnQgcHJlIGNvZGV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6aW5oZXJpdDt3b3JkLWJyZWFrOm5vcm1hbDtvdmVyZmxvdy13cmFwOm5vcm1hbH0ubWFya2Rvd24tY29udGVudCBibG9ja3F1b3Rle2JvcmRlci1sZWZ0OjRweCBzb2xpZCBoc2wodmFyKC0tYm9yZGVyKSk7cGFkZGluZy1sZWZ0OjFyZW07bWFyZ2luLXRvcDouNzVyZW07bWFyZ2luLWJvdHRvbTouNzVyZW07Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKTtmb250LXN0eWxlOml0YWxpY30ubWFya2Rvd24tY29udGVudCBhe2NvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1hcmtkb3duLWNvbnRlbnQgYTpob3Zlcntjb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkgLyAuODUpfS5tYXJrZG93bi1jb250ZW50IHN0cm9uZywubWFya2Rvd24tY29udGVudCBie2ZvbnQtd2VpZ2h0OjYwMH0ubWFya2Rvd24tY29udGVudCBlbSwubWFya2Rvd24tY29udGVudCBpe2ZvbnQtc3R5bGU6aXRhbGljfS5tYXJrZG93bi1jb250ZW50IGhye2JvcmRlcjpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkIGhzbCh2YXIoLS1ib3JkZXIpKTttYXJnaW4tdG9wOjEuNXJlbTttYXJnaW4tYm90dG9tOjEuNXJlbX0ubWFya2Rvd24tY29udGVudCB0YWJsZXt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tdG9wOi43NXJlbTttYXJnaW4tYm90dG9tOi43NXJlbTtvdmVyZmxvdy14OmF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24tY29udGVudCB0aCwubWFya2Rvd24tY29udGVudCB0ZHtib3JkZXI6MXB4IHNvbGlkIGhzbCh2YXIoLS1ib3JkZXIpKTtwYWRkaW5nOi41cmVtO3RleHQtYWxpZ246bGVmdDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1hcmtkb3duLWNvbnRlbnQgdGh7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpKTtmb250LXdlaWdodDo2MDB9Lm1hcmtkb3duLWNvbnRlbnQ+KjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1hcmtkb3duLWNvbnRlbnQ+KjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24tY29udGVudD5wOmZpcnN0LWNoaWxkLC5tYXJrZG93bi1jb250ZW50PnVsOmZpcnN0LWNoaWxkLC5tYXJrZG93bi1jb250ZW50Pm9sOmZpcnN0LWNoaWxkLC5tYXJrZG93bi1jb250ZW50PnByZTpmaXJzdC1jaGlsZCwubWFya2Rvd24tY29udGVudD5ibG9ja3F1b3RlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubWFya2Rvd24tY29udGVudD5wOmxhc3QtY2hpbGQsLm1hcmtkb3duLWNvbnRlbnQ+dWw6bGFzdC1jaGlsZCwubWFya2Rvd24tY29udGVudD5vbDpsYXN0LWNoaWxkLC5tYXJrZG93bi1jb250ZW50PnByZTpsYXN0LWNoaWxkLC5tYXJrZG93bi1jb250ZW50PmJsb2NrcXVvdGU6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmZvY3VzLXdpdGhpblw6Ym9yZGVyLXByaW1hcnlcLzYwOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjYpfS5mb2N1cy13aXRoaW5cOnJpbmctMTpmb2N1cy13aXRoaW57LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSB2YXIoLS10dy1yaW5nLW9mZnNldC1jb2xvcik7LS10dy1yaW5nLXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93LCAwIDAgIzAwMDApfS5mb2N1cy13aXRoaW5cOnJpbmctcHJpbWFyeVwvNDA6Zm9jdXMtd2l0aGluey0tdHctcmluZy1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gLjQpfS5ob3Zlclw6c2NhbGUtMTEwOmhvdmVyey0tdHctc2NhbGUteDogMS4xOy0tdHctc2NhbGUteTogMS4xO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5ob3Zlclw6YmctYmFja2dyb3VuZFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAuNSl9LmhvdmVyXDpiZy1tdXRlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkpfS5ob3Zlclw6YmctbXV0ZWRcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSAvIC4yKX0uaG92ZXJcOmJnLW11dGVkXC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkgLyAuNSl9LmhvdmVyXDpiZy1tdXRlZFwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpIC8gLjgpfS5ob3Zlclw6YmctcHJpbWFyeVwvOTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkgLyAuOSl9LmhvdmVyXDp0ZXh0LWFtYmVyLTYwMDpob3ZlcnstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjE3IDExOSA2IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmhvdmVyXDp0ZXh0LWJsdWUtNjAwOmhvdmVyey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigzNyA5OSAyMzUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uaG92ZXJcOnRleHQtY3lhbi02MDA6aG92ZXJ7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDggMTQ1IDE3OCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5ob3Zlclw6dGV4dC1kZXN0cnVjdGl2ZVwvODA6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSAvIC44KX0uaG92ZXJcOnRleHQtZW1lcmFsZC02MDA6aG92ZXJ7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDUgMTUwIDEwNSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5ob3Zlclw6dGV4dC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSl9LmhvdmVyXDp0ZXh0LXB1cnBsZS02MDA6aG92ZXJ7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE0NyA1MSAyMzQgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uaG92ZXJcOnVuZGVybGluZTpob3Zlcnt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LmZvY3VzXDpib3JkZXItdmlvbGV0LTUwMDpmb2N1c3stLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMTM5IDkyIDI0NiAvIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5LCAxKSl9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtbm9uZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9Lmdyb3VwOmhvdmVyIC5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDB7b3BhY2l0eToxfS5kYXJrXDpib3JkZXItYmx1ZS01MDBcLzIwOmlzKC5kYXJrICope2JvcmRlci1jb2xvcjojM2I4MmY2MzN9LmRhcmtcOmJvcmRlci12aW9sZXQtNTAwXC8yMDppcyguZGFyayAqKXtib3JkZXItY29sb3I6IzhiNWNmNjMzfS5kYXJrXDpiZy1iYWNrZ3JvdW5kOmlzKC5kYXJrICope2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0uZGFya1w6YmctYmx1ZS01MDBcLzU6aXMoLmRhcmsgKil7YmFja2dyb3VuZC1jb2xvcjojM2I4MmY2MGR9LmRhcmtcOmJnLWVtZXJhbGQtNTAwXC8xMDppcyguZGFyayAqKXtiYWNrZ3JvdW5kLWNvbG9yOiMxMGI5ODExYX0uZGFya1w6YmctdmlvbGV0LTUwMFwvMTA6aXMoLmRhcmsgKil7YmFja2dyb3VuZC1jb2xvcjojOGI1Y2Y2MWF9LmRhcmtcOmJnLXZpb2xldC01MDBcLzU6aXMoLmRhcmsgKil7YmFja2dyb3VuZC1jb2xvcjojOGI1Y2Y2MGR9LmRhcmtcOnRleHQtYW1iZXItMzAwOmlzKC5kYXJrICopey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyNTIgMjExIDc3IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmRhcmtcOnRleHQtYW1iZXItNDAwOmlzKC5kYXJrICopey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyNTEgMTkxIDM2IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmRhcmtcOnRleHQtYmx1ZS0zMDA6aXMoLmRhcmsgKil7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE0NyAxOTcgMjUzIC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmRhcmtcOnRleHQtYmx1ZS00MDA6aXMoLmRhcmsgKil7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDk2IDE2NSAyNTAgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uZGFya1w6dGV4dC1jeWFuLTMwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMTAzIDIzMiAyNDkgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uZGFya1w6dGV4dC1lbWVyYWxkLTMwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMTEwIDIzMSAxODMgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uZGFya1w6dGV4dC1lbWVyYWxkLTQwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoNTIgMjExIDE1MyAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5kYXJrXDp0ZXh0LWdyZWVuLTQwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoNzQgMjIyIDEyOCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5kYXJrXDp0ZXh0LWdyZWVuLTUwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMzQgMTk3IDk0IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmRhcmtcOnRleHQtcHVycGxlLTMwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjE2IDE4MCAyNTQgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uZGFya1w6dGV4dC1yZWQtMzAwOmlzKC5kYXJrICopey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyNTIgMTY1IDE2NSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5kYXJrXDp0ZXh0LXJlZC00MDA6aXMoLmRhcmsgKil7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI0OCAxMTMgMTEzIC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmRhcmtcOnRleHQtcmVkLTUwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjM5IDY4IDY4IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmRhcmtcOnRleHQtdmlvbGV0LTMwMDppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMTk2IDE4MSAyNTMgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uZGFya1w6aG92ZXJcOnRleHQtYW1iZXItMjAwOmhvdmVyOmlzKC5kYXJrICopey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyNTMgMjMwIDEzOCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5kYXJrXDpob3Zlclw6dGV4dC1ibHVlLTIwMDpob3ZlcjppcyguZGFyayAqKXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMTkxIDIxOSAyNTQgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0uZGFya1w6aG92ZXJcOnRleHQtY3lhbi0yMDA6aG92ZXI6aXMoLmRhcmsgKil7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE2NSAyNDMgMjUyIC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LmRhcmtcOmhvdmVyXDp0ZXh0LWVtZXJhbGQtMjAwOmhvdmVyOmlzKC5kYXJrICopey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxNjcgMjQzIDIwOCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5kYXJrXDpob3Zlclw6dGV4dC1wdXJwbGUtMjAwOmhvdmVyOmlzKC5kYXJrICopey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyMzMgMjEzIDI1NSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS5cW1wmXD5cKlw6Zmlyc3QtY2hpbGRcXVw6bXQtMD4qOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uXFtcJlw+XCpcOmxhc3QtY2hpbGRcXVw6bWItMD4qOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfQo=", contentType: "text/css" });
14
14
  EMBEDDED_ASSETS.set("/vite.svg", { content: "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBhcmlhLWhpZGRlbj0idHJ1ZSIgcm9sZT0iaW1nIiBjbGFzcz0iaWNvbmlmeSBpY29uaWZ5LS1sb2dvcyIgd2lkdGg9IjMxLjg4IiBoZWlnaHQ9IjMyIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB2aWV3Qm94PSIwIDAgMjU2IDI1NyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJJY29uaWZ5SWQxODEzMDg4ZmUxZmJjMDFmYjQ2NiIgeDE9Ii0uODI4JSIgeDI9IjU3LjYzNiUiIHkxPSI3LjY1MiUiIHkyPSI3OC40MTElIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjNDFEMUZGIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjQkQzNEZFIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9Ikljb25pZnlJZDE4MTMwODhmZTFmYmMwMWZiNDY3IiB4MT0iNDMuMzc2JSIgeDI9IjUwLjMxNiUiIHkxPSIyLjI0MiUiIHkyPSI4OS4wMyUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiNGRkVBODMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjguMzMzJSIgc3RvcC1jb2xvcj0iI0ZGREQzNSI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI0ZGQTgwMCI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGZpbGw9InVybCgjSWNvbmlmeUlkMTgxMzA4OGZlMWZiYzAxZmI0NjYpIiBkPSJNMjU1LjE1MyAzNy45MzhMMTM0Ljg5NyAyNTIuOTc2Yy0yLjQ4MyA0LjQ0LTguODYyIDQuNDY2LTExLjM4Mi4wNDhMLjg3NSAzNy45NThjLTIuNzQ2LTQuODE0IDEuMzcxLTEwLjY0NiA2LjgyNy05LjY3bDEyMC4zODUgMjEuNTE3YTYuNTM3IDYuNTM3IDAgMCAwIDIuMzIyLS4wMDRsMTE3Ljg2Ny0yMS40ODNjNS40MzgtLjk5MSA5LjU3NCA0Ljc5NiA2Ljg3NyA5LjYyWiI+PC9wYXRoPjxwYXRoIGZpbGw9InVybCgjSWNvbmlmeUlkMTgxMzA4OGZlMWZiYzAxZmI0NjcpIiBkPSJNMTg1LjQzMi4wNjNMOTYuNDQgMTcuNTAxYTMuMjY4IDMuMjY4IDAgMCAwLTIuNjM0IDMuMDE0bC01LjQ3NCA5Mi40NTZhMy4yNjggMy4yNjggMCAwIDAgMy45OTcgMy4zNzhsMjQuNzc3LTUuNzE4YzIuMzE4LS41MzUgNC40MTMgMS41MDcgMy45MzYgMy44MzhsLTcuMzYxIDM2LjA0N2MtLjQ5NSAyLjQyNiAxLjc4MiA0LjUgNC4xNTEgMy43OGwxNS4zMDQtNC42NDljMi4zNzItLjcyIDQuNjUyIDEuMzYgNC4xNSAzLjc4OGwtMTEuNjk4IDU2LjYyMWMtLjczMiAzLjU0MiAzLjk3OSA1LjQ3MyA1Ljk0MyAyLjQzN2wxLjMxMy0yLjAyOGw3Mi41MTYtMTQ0LjcyYzEuMjE1LTIuNDIzLS44OC01LjE4Ni0zLjU0LTQuNjcybC0yNS41MDUgNC45MjJjLTIuMzk2LjQ2Mi00LjQzNS0xLjc3LTMuNzU5LTQuMTE0bDE2LjY0Ni01Ny43MDVjLjY3Ny0yLjM1LTEuMzctNC41ODMtMy43NjktNC4xMTNaIj48L3BhdGg+PC9zdmc+", contentType: "image/svg+xml" });
15
15
 
16
+ async function resolveApiBaseUrl(option, req) {
17
+ let value;
18
+ if (typeof option === 'function') {
19
+ value = await option({ req });
20
+ } else if (option !== undefined) {
21
+ value = option;
22
+ } else {
23
+ value = null;
24
+ }
25
+
26
+ if (value === null || value === undefined) {
27
+ return new URL(req.url).origin;
28
+ }
29
+
30
+ if (value instanceof URL) {
31
+ return value.toString();
32
+ }
33
+
34
+ const str = String(value).trim();
35
+ if (!str) return null;
36
+
37
+ try {
38
+ if (str.startsWith('http://') || str.startsWith('https://')) {
39
+ return str;
40
+ }
41
+ return new URL(str, req.url).toString();
42
+ } catch {
43
+ return str;
44
+ }
45
+ }
46
+
47
+ function injectIndexHtml(html, baseUrl) {
48
+ if (!baseUrl) return html;
49
+ const script = '<script>(function(){var url=' + JSON.stringify(baseUrl) + ';window.AGI_SERVER_URL=url;window.__AGI_API_URL__=url;})();</script>';
50
+ if (html.includes('</head>')) {
51
+ return html.replace('</head>', script + '\n</head>');
52
+ }
53
+ if (html.includes('</body>')) {
54
+ return html.replace('</body>', script + '\n</body>');
55
+ }
56
+ return html + '\n' + script;
57
+ }
58
+
16
59
  /**
17
60
  * Get the absolute path to the web UI assets directory
18
61
  */
@@ -31,12 +74,10 @@ export function getIndexPath() {
31
74
  * Check if web UI assets are available
32
75
  */
33
76
  export function isWebUIAvailable() {
34
- // Check embedded assets first
35
77
  if (EMBEDDED_ASSETS.size > 0) {
36
78
  return true;
37
79
  }
38
-
39
- // Check filesystem
80
+
40
81
  try {
41
82
  const fs = require('fs');
42
83
  return fs.existsSync(getIndexPath());
@@ -45,14 +86,12 @@ export function isWebUIAvailable() {
45
86
  }
46
87
  }
47
88
 
48
- /**
49
- * Create a request handler for serving the web UI
50
- */
51
89
  export function serveWebUI(options = {}) {
52
90
  const {
53
91
  prefix = '/ui',
54
92
  redirectRoot = false,
55
93
  onNotFound = null,
94
+ apiBaseUrl,
56
95
  } = options;
57
96
 
58
97
  const webUIPath = getWebUIPath();
@@ -60,26 +99,31 @@ export function serveWebUI(options = {}) {
60
99
 
61
100
  return async function handleRequest(req) {
62
101
  const url = new URL(req.url);
102
+ const baseUrlPromise = resolveApiBaseUrl(apiBaseUrl, req);
63
103
 
64
- // Helper to serve a file
65
104
  const serveAsset = async (pathname) => {
66
105
  const normalizedPath = pathname === '' || pathname === '/' ? '/index.html' : pathname;
67
-
68
- // Try embedded assets first
106
+ const shouldInject = normalizedPath === '/index.html';
107
+ const resolvedBaseUrl = shouldInject ? await baseUrlPromise : null;
108
+
69
109
  if (useEmbedded) {
70
110
  const asset = EMBEDDED_ASSETS.get(normalizedPath);
71
111
  if (asset) {
112
+ if (shouldInject) {
113
+ const html = Buffer.from(asset.content, 'base64').toString('utf-8');
114
+ const injected = injectIndexHtml(html, resolvedBaseUrl);
115
+ return new Response(injected, {
116
+ headers: { 'Content-Type': 'text/html' },
117
+ });
118
+ }
72
119
  const content = Buffer.from(asset.content, 'base64');
73
120
  return new Response(content, {
74
121
  headers: { 'Content-Type': asset.contentType },
75
122
  });
76
123
  }
77
124
  }
78
-
79
- // Fallback to filesystem
80
- const fullPath = join(webUIPath, normalizedPath);
81
125
 
82
- // Security: Prevent directory traversal
126
+ const fullPath = join(webUIPath, normalizedPath);
83
127
  if (!fullPath.startsWith(webUIPath)) {
84
128
  return null;
85
129
  }
@@ -88,13 +132,26 @@ export function serveWebUI(options = {}) {
88
132
  if (typeof Bun !== 'undefined') {
89
133
  const file = Bun.file(fullPath);
90
134
  if (await file.exists()) {
135
+ if (shouldInject) {
136
+ const html = await file.text();
137
+ const injected = injectIndexHtml(html, resolvedBaseUrl);
138
+ return new Response(injected, {
139
+ headers: { 'Content-Type': 'text/html' },
140
+ });
141
+ }
91
142
  return new Response(file);
92
143
  }
93
144
  } else {
94
- // Fallback for Node.js environments
95
145
  const fs = require('fs');
96
146
  const fsPromises = require('fs/promises');
97
147
  if (fs.existsSync(fullPath)) {
148
+ if (shouldInject) {
149
+ const html = await fsPromises.readFile(fullPath, 'utf8');
150
+ const injected = injectIndexHtml(html, resolvedBaseUrl);
151
+ return new Response(injected, {
152
+ headers: { 'Content-Type': 'text/html' },
153
+ });
154
+ }
98
155
  const content = await fsPromises.readFile(fullPath);
99
156
  const ext = fullPath.split('.').pop() || '';
100
157
  const contentType = getContentType(ext);
@@ -111,7 +168,6 @@ export function serveWebUI(options = {}) {
111
168
  return null;
112
169
  };
113
170
 
114
- // Root redirect (optional)
115
171
  if (redirectRoot && url.pathname === '/') {
116
172
  return new Response('', {
117
173
  status: 302,
@@ -119,34 +175,27 @@ export function serveWebUI(options = {}) {
119
175
  });
120
176
  }
121
177
 
122
- // Handle prefixed paths (e.g., /ui/*)
123
178
  if (url.pathname.startsWith(prefix)) {
124
- // Strip prefix to get the actual file path
125
179
  const filePath = url.pathname.slice(prefix.length);
126
-
127
- // Try to serve the requested file
128
180
  const assetResponse = await serveAsset(filePath);
129
181
  if (assetResponse) {
130
182
  return assetResponse;
131
183
  }
132
184
 
133
- // SPA fallback - serve index.html for unmatched routes
134
185
  const indexResponse = await serveAsset('/index.html');
135
186
  if (indexResponse) {
136
187
  return indexResponse;
137
188
  }
138
189
 
139
- // Web UI not found
140
190
  if (onNotFound) {
141
191
  return onNotFound(req);
142
192
  }
143
-
193
+
144
194
  return new Response('Web UI not found', { status: 404 });
145
195
  }
146
196
 
147
- // Handle direct asset requests (for cases where HTML references /assets/*)
148
- if (url.pathname.startsWith('/assets/') ||
149
- url.pathname === '/vite.svg' ||
197
+ if (url.pathname.startsWith('/assets/') ||
198
+ url.pathname === '/vite.svg' ||
150
199
  url.pathname === '/favicon.ico') {
151
200
  const directAsset = await serveAsset(url.pathname);
152
201
  if (directAsset) {
@@ -154,30 +203,26 @@ export function serveWebUI(options = {}) {
154
203
  }
155
204
  }
156
205
 
157
- // Not a web UI request - return null so other handlers can process it
158
206
  return null;
159
207
  };
160
208
  }
161
209
 
162
- /**
163
- * Get MIME type for file extension
164
- */
165
210
  function getContentType(ext) {
166
211
  const types = {
167
- 'html': 'text/html',
168
- 'css': 'text/css',
169
- 'js': 'application/javascript',
170
- 'json': 'application/json',
171
- 'png': 'image/png',
172
- 'jpg': 'image/jpeg',
173
- 'jpeg': 'image/jpeg',
174
- 'gif': 'image/gif',
175
- 'svg': 'image/svg+xml',
176
- 'ico': 'image/x-icon',
177
- 'woff': 'font/woff',
178
- 'woff2': 'font/woff2',
179
- 'ttf': 'font/ttf',
180
- 'eot': 'application/vnd.ms-fontobject',
212
+ html: 'text/html',
213
+ css: 'text/css',
214
+ js: 'application/javascript',
215
+ json: 'application/json',
216
+ png: 'image/png',
217
+ jpg: 'image/jpeg',
218
+ jpeg: 'image/jpeg',
219
+ gif: 'image/gif',
220
+ svg: 'image/svg+xml',
221
+ ico: 'image/x-icon',
222
+ woff: 'font/woff',
223
+ woff2: 'font/woff2',
224
+ ttf: 'font/ttf',
225
+ eot: 'application/vnd.ms-fontobject',
181
226
  };
182
227
  return types[ext.toLowerCase()] || 'application/octet-stream';
183
228
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agi-cli/web-ui",
3
- "version": "0.1.51",
3
+ "version": "0.1.54",
4
4
  "description": "Embeddable web UI for AGI CLI - pre-built static assets",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",