UNPKG

obsidian-dev-utils

Version:

This is the collection of useful functions that you can use for your Obsidian plugin development

163 lines (149 loc) 15.8 kB
/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ (function initCjs() { const globalThisRecord = globalThis; globalThisRecord['__name'] ??= name; const originalRequire = require; if (originalRequire && !originalRequire.__isPatched) { // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function. require = Object.assign( (id) => requirePatched(id), originalRequire, { __isPatched: true } ); } const newFuncs = { __extractDefault() { return extractDefault; }, process() { const browserProcess = { browser: true, cwd() { return '/'; }, env: {}, platform: 'android' }; return browserProcess; } }; for (const key of Object.keys(newFuncs)) { globalThisRecord[key] ??= newFuncs[key]?.(); } function name(obj) { return obj; } function extractDefault(module) { return module && module.__esModule && 'default' in module ? module.default : module; } const OBSIDIAN_BUILT_IN_MODULE_NAMES = [ 'obsidian', '@codemirror/autocomplete', '@codemirror/collab', '@codemirror/commands', '@codemirror/language', '@codemirror/lint', '@codemirror/search', '@codemirror/state', '@codemirror/text', '@codemirror/view', '@lezer/common', '@lezer/lr', '@lezer/highlight']; const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [ '@codemirror/closebrackets', '@codemirror/comment', '@codemirror/fold', '@codemirror/gutter', '@codemirror/highlight', '@codemirror/history', '@codemirror/matchbrackets', '@codemirror/panel', '@codemirror/rangeset', '@codemirror/rectangular-selection', '@codemirror/stream-parser', '@codemirror/tooltip']; function requirePatched(id) { if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) { return originalRequire?.(id); } // eslint-disable-next-line @typescript-eslint/no-deprecated, @typescript-eslint/no-unnecessary-condition -- We need access to app here which might not be available yet. if (globalThis?.app?.isMobile) { if (id === 'process' || id === 'node:process') { console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`); return globalThis.process; } } else { const module = originalRequire?.(id); if (module) { return extractDefault(module); } } console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`); return {}; } })(); "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var Type_exports = {}; __export(Type_exports, { assertAllTypeKeys: () => assertAllTypeKeys, assertAllUnionMembers: () => assertAllUnionMembers, typeToDummyParam: () => typeToDummyParam }); module.exports = __toCommonJS(Type_exports); const DUMMY_PROXY = new Proxy(dummyThrow, { apply: dummyThrow, construct: dummyThrow, defineProperty: dummyThrow, deleteProperty: dummyThrow, get: dummyThrow, getOwnPropertyDescriptor: dummyThrow, getPrototypeOf: dummyThrow, has: dummyThrow, isExtensible: dummyThrow, ownKeys: dummyThrow, preventExtensions: dummyThrow, set: dummyThrow, setPrototypeOf: dummyThrow }); function assertAllTypeKeys(_type, keys) { return Object.freeze(keys.slice()); } function assertAllUnionMembers(_type, keys) { return Object.freeze(keys.slice()); } function typeToDummyParam() { return DUMMY_PROXY; } function dummyThrow() { throw new Error("Dummy parameter should not be accessed directly."); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { assertAllTypeKeys, assertAllUnionMembers, typeToDummyParam }); //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL1R5cGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVHlwZSB1dGlsaXRpZXMuXG4gKi9cblxuLyoqXG4gKiBBIHR5cGUgdGhhdCByZXByZXNlbnRzIHRoZSBrZXlzIG9mIGFuIG9iamVjdCBhcyBzdHJpbmdzIGFuZCBhc3NlcnRzIHRoYXQgYWxsIGtleXMgYXJlIHByZXNlbnQgaW4gYSBsaXN0IG9mIGtleXMuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEB0eXBlUGFyYW0gS2V5cyAtIFRoZSBsaXN0IG9mIGtleXMgdG8gYXNzZXJ0LlxuICovXG5leHBvcnQgdHlwZSBFeGFjdEtleXM8VHlwZSBleHRlbmRzIG9iamVjdCwgS2V5cyBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdPiA9IEV4YWN0TWVtYmVyczxTdHJpbmdLZXlzPFR5cGU+LCBLZXlzPjtcblxuLyoqXG4gKiBBIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgcmV0dXJuIHZhbHVlIHRoYXQgbWF5IGJlIGB2b2lkYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgdGhhdCBtYXkgYmUgcmV0dXJuZWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGB2b2lkYCByZXR1cm4gdHlwZS5cbmV4cG9ydCB0eXBlIE1heWJlUmV0dXJuPFQ+ID0gVCB8IHZvaWQ7XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVZhbHVlczxUIGV4dGVuZHMgb2JqZWN0PiA9IFRbU3RyaW5nS2V5czxUPl07XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUga2V5cyBvZiBhbiBvYmplY3QgYXMgc3RyaW5ncy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgdHlwZSBTdHJpbmdLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+O1xuXG50eXBlIExhc3RJblVuaW9uPFVuaW9uPiA9IFVuaW9uVG9JbnRlcnNlY3Rpb248VW5pb24gZXh0ZW5kcyB1bmtub3duID8gKCkgPT4gVW5pb24gOiBuZXZlcj4gZXh0ZW5kcyAoKSA9PiBpbmZlciBMYXN0ID8gTGFzdCA6IG5ldmVyO1xudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFVuaW9uPiA9IChVbmlvbiBleHRlbmRzIHVua25vd24gPyAoa2V5OiBVbmlvbikgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzIChrZXk6IGluZmVyIEludGVyc2VjdGlvbikgPT4gdm9pZCA/IEludGVyc2VjdGlvbiA6IG5ldmVyO1xudHlwZSBVbmlvblRvVHVwbGU8VW5pb24sIExhc3QgPSBMYXN0SW5VbmlvbjxVbmlvbj4+ID0gW1VuaW9uXSBleHRlbmRzIFtuZXZlcl0gPyBbXSA6IFsuLi5VbmlvblRvVHVwbGU8RXhjbHVkZTxVbmlvbiwgTGFzdD4+LCBMYXN0XTtcblxuY29uc3QgRFVNTVlfUFJPWFkgPSBuZXcgUHJveHkoZHVtbXlUaHJvdywge1xuICBhcHBseTogZHVtbXlUaHJvdyxcbiAgY29uc3RydWN0OiBkdW1teVRocm93LFxuICBkZWZpbmVQcm9wZXJ0eTogZHVtbXlUaHJvdyxcbiAgZGVsZXRlUHJvcGVydHk6IGR1bW15VGhyb3csXG4gIGdldDogZHVtbXlUaHJvdyxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBkdW1teVRocm93LFxuICBnZXRQcm90b3R5cGVPZjogZHVtbXlUaHJvdyxcbiAgaGFzOiBkdW1teVRocm93LFxuICBpc0V4dGVuc2libGU6IGR1bW15VGhyb3csXG4gIG93bktleXM6IGR1bW15VGhyb3csXG4gIHByZXZlbnRFeHRlbnNpb25zOiBkdW1teVRocm93LFxuICBzZXQ6IGR1bW15VGhyb3csXG4gIHNldFByb3RvdHlwZU9mOiBkdW1teVRocm93XG59KTtcblxuLyoqXG4gKiBBIHR5cGUgdGhhdCByZXByZXNlbnRzIHRoZSBtZW1iZXJzIG9mIGEgdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgdHlwZSB0byBhc3NlcnQgdGhlIG1lbWJlcnMgb2YuXG4gKiBAdHlwZVBhcmFtIEtleXMgLSBUaGUgbGlzdCBvZiBtZW1iZXJzIHRvIGFzc2VydC5cbiAqL1xuZXhwb3J0IHR5cGUgRXhhY3RNZW1iZXJzPFxuICBUeXBlIGV4dGVuZHMgTGl0ZXJhbEtleSxcbiAgS2V5cyBleHRlbmRzIHJlYWRvbmx5IExpdGVyYWxLZXlbXVxuPiA9IEV4Y2x1ZGU8S2V5c1tudW1iZXJdLCBUeXBlPiBleHRlbmRzIG5ldmVyID8gRXhjbHVkZTxUeXBlLCBLZXlzW251bWJlcl0+IGV4dGVuZHMgbmV2ZXIgPyBEdXBsaWNhdGVzPEtleXM+IGV4dGVuZHMgW10gPyBLZXlzXG4gICAgOiBgRVJST1I6IER1cGxpY2F0ZSBtZW1iZXJzOiAke1R1cGxlVG9DU1Y8RHVwbGljYXRlczxLZXlzPj59YFxuICA6IGBFUlJPUjogTWlzc2luZyBtZW1iZXJzOiAke1R1cGxlVG9DU1Y8VW5pb25Ub1R1cGxlPEV4Y2x1ZGU8VHlwZSwgS2V5c1tudW1iZXJdPj4+fWBcbiAgOiBgRVJST1I6IEludmFsaWQgbWVtYmVyczogJHtUdXBsZVRvQ1NWPFVuaW9uVG9UdXBsZTxFeGNsdWRlPEtleXNbbnVtYmVyXSwgVHlwZT4+Pn1gO1xuXG50eXBlIER1cGxpY2F0ZXM8XG4gIFQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10sXG4gIFNlZW4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPSBbXSxcbiAgQWRkZWQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPSBbXSxcbiAgT3V0IGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID0gW11cbj4gPSBUIGV4dGVuZHMgcmVhZG9ubHkgW2luZmVyIEZpcnN0LCAuLi5pbmZlciBSZXN0XVxuICA/IEluY2x1ZGVzPFNlZW4sIEZpcnN0PiBleHRlbmRzIHRydWUgPyBJbmNsdWRlczxBZGRlZCwgRmlyc3Q+IGV4dGVuZHMgdHJ1ZSA/IER1cGxpY2F0ZXM8UmVzdCwgU2VlbiwgQWRkZWQsIE91dD5cbiAgICA6IER1cGxpY2F0ZXM8UmVzdCwgU2VlbiwgWy4uLkFkZGVkLCBGaXJzdF0sIFsuLi5PdXQsIEZpcnN0XT5cbiAgOiBEdXBsaWNhdGVzPFJlc3QsIFsuLi5TZWVuLCBGaXJzdF0sIEFkZGVkLCBPdXQ+XG4gIDogT3V0O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyxuby1tYWdpYy1udW1iZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxudHlwZSBFcXVhbDxYLCBZPiA9ICg8VD4oKSA9PiBUIGV4dGVuZHMgWCA/IDEgOiAyKSBleHRlbmRzICg8VD4oKSA9PiBUIGV4dGVuZHMgWSA/IDEgOiAyKSA/IHRydWUgOiBmYWxzZTtcblxudHlwZSBJbmNsdWRlczxUeXBlIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLCBNZW1iZXI+ID0gVHlwZSBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF1cbiAgPyBFcXVhbDxGaXJzdCwgTWVtYmVyPiBleHRlbmRzIHRydWUgPyB0cnVlIDogSW5jbHVkZXM8UmVzdCwgTWVtYmVyPlxuICA6IGZhbHNlO1xuXG50eXBlIExpdGVyYWxLZXkgPSBudW1iZXIgfCBzdHJpbmc7XG5cbnR5cGUgVG9TdHJpbmc8VD4gPSBUIGV4dGVuZHMgbnVtYmVyIHwgc3RyaW5nID8gYCR7VH1gIDogbmV2ZXI7XG5cbnR5cGUgVHVwbGVUb0NTVjxUdXBsZSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4gPSBUdXBsZSBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF1cbiAgPyBGaXJzdCBleHRlbmRzIExpdGVyYWxLZXkgPyBSZXN0IGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID8gUmVzdFsnbGVuZ3RoJ10gZXh0ZW5kcyAwID8gVG9TdHJpbmc8Rmlyc3Q+IDogYCR7VG9TdHJpbmc8Rmlyc3Q+fSwke1R1cGxlVG9DU1Y8UmVzdD59YFxuICAgIDogbmV2ZXJcbiAgOiBuZXZlclxuICA6ICcnO1xuXG4vKipcbiAqIEFzc2VydHMgdGhhdCBhbGwga2V5cyBvZiBhIHR5cGUgYXJlIHByZXNlbnQgaW4gYSBsaXN0IG9mIGtleXMuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgdG8gYXNzZXJ0IHRoZSBrZXlzIG9mLlxuICogQHR5cGVQYXJhbSBLZXlzIC0gVGhlIGxpc3Qgb2Yga2V5cyB0byBhc3NlcnQuXG4gKiBAcGFyYW0gX3R5cGUgLSBUaGUgdHlwZSB0byBhc3NlcnQgdGhlIGtleXMgb2YuXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBsaXN0IG9mIGtleXMgdG8gYXNzZXJ0LlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2Yga2V5cy5cbiAqXG4gKiBAcmVtYXJrcyBJZiB0aGUgaW5jb3JyZWN0IGtleXMgYXJlIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gaGFzIGEgY29tcGlsZS10aW1lIGVycm9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogdHlwZSBBID0geyBhOiAxLCBiOiAyLCBjOiAzIH07XG4gKiBhc3NlcnRBbGxUeXBlS2V5czxBPih0eXBlVG9EdW1teVBhcmFtPEE+KCksIFsnYScsICdiJywgJ2MnXSk7IC8vIE9LXG4gKiBhc3NlcnRBbGxUeXBlS2V5czxBPih0eXBlVG9EdW1teVBhcmFtPEE+KCksIFsnYycsICdhJywgJ2InXSk7IC8vIE9LLCBvcmRlciBpcyBpZ25vcmVkXG4gKiBhc3NlcnRBbGxUeXBlS2V5czxBPih0eXBlVG9EdW1teVBhcmFtPEE+KCksIFsnYScsICdiJywgJ2MnLCAnZCddKTsgLy8gRXJyb3I6IEludmFsaWQgbWVtYmVyczogZFxuICogYXNzZXJ0QWxsVHlwZUtleXM8QT4odHlwZVRvRHVtbXlQYXJhbTxBPigpLCBbJ2EnLCAnYiddKTsgLy8gRXJyb3I6IE1pc3NpbmcgbWVtYmVyczogY1xuICogYXNzZXJ0QWxsVHlwZUtleXM8QT4odHlwZVRvRHVtbXlQYXJhbTxBPigpLCBbJ2EnLCAnYScsICdiJywgJ2MnLCAnYyddKTsgLy8gRXJyb3I6IER1cGxpY2F0ZSBtZW1iZXJzOiBhLGNcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QWxsVHlwZUtleXM8XG4gIFR5cGUgZXh0ZW5kcyBvYmplY3QsXG4gIGNvbnN0IEtleXMgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXVxuPihfdHlwZTogVHlwZSwga2V5czogRXhhY3RNZW1iZXJzPFN0cmluZ0tleXM8VHlwZT4sIEtleXM+KTogcmVhZG9ubHkgKGtleW9mIFR5cGUpW10ge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShrZXlzLnNsaWNlKCkgYXMgKGtleW9mIFR5cGUpW10pO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCBhbGwgbWVtYmVycyBvZiBhIHVuaW9uIGFyZSBwcmVzZW50IGluIGEgbGlzdCBvZiBtZW1iZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSB0eXBlIHRvIGFzc2VydCB0aGUgbWVtYmVycyBvZi5cbiAqIEB0eXBlUGFyYW0gS2V5cyAtIFRoZSBsaXN0IG9mIG1lbWJlcnMgdG8gYXNzZXJ0LlxuICogQHBhcmFtIF90eXBlIC0gVGhlIHR5cGUgdG8gYXNzZXJ0IHRoZSBtZW1iZXJzIG9mLlxuICogQHBhcmFtIGtleXMgLSBUaGUgbGlzdCBvZiBtZW1iZXJzIHRvIGFzc2VydC5cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIG1lbWJlcnMuXG4gKlxuICogQHJlbWFya3MgSWYgdGhlIGluY29ycmVjdCBtZW1iZXJzIGFyZSBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIGhhcyBhIGNvbXBpbGUtdGltZSBlcnJvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHR5cGUgQSA9IDEgfCAyIHwgMyB8ICdhJztcbiAqXG4gKiBhc3NlcnRBbGxVbmlvbk1lbWJlcnModHlwZVRvRHVtbXlQYXJhbTxBPigpLCBbMSwgMiwgMywgJ2EnXSk7IC8vIE9LXG4gKiBhc3NlcnRBbGxVbmlvbk1lbWJlcnModHlwZVRvRHVtbXlQYXJhbTxBPigpLCBbMywgMiwgMSwgJ2EnXSk7IC8vIE9LLCBvcmRlciBpcyBpZ25vcmVkXG4gKiBhc3NlcnRBbGxVbmlvbk1lbWJlcnModHlwZVRvRHVtbXlQYXJhbTxBPigpLCBbMSwgMiwgMywgJ2EnLCA0XSk7IC8vIEVycm9yOiBJbnZhbGlkIG1lbWJlcnM6IDRcbiAqIGFzc2VydEFsbFVuaW9uTWVtYmVycyh0eXBlVG9EdW1teVBhcmFtPEE+KCksIFsxLCAyLCAzLF0pOyAvLyBFcnJvcjogTWlzc2luZyBtZW1iZXJzOiBhXG4gKiBhc3NlcnRBbGxVbmlvbk1lbWJlcnModHlwZVRvRHVtbXlQYXJhbTxBPigpLCBbMSwgMiwgMywgJ2EnLCAnYSddKTsgLy8gRXJyb3I6IER1cGxpY2F0ZSBtZW1iZXJzOiAxLGFcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QWxsVW5pb25NZW1iZXJzPFxuICBjb25zdCBUeXBlIGV4dGVuZHMgTGl0ZXJhbEtleSxcbiAgY29uc3QgS2V5cyBleHRlbmRzIHJlYWRvbmx5IExpdGVyYWxLZXlbXVxuPihfdHlwZTogVHlwZSwga2V5czogRXhhY3RNZW1iZXJzPFR5cGUsIEtleXM+KTogcmVhZG9ubHkgVHlwZVtdIHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoa2V5cy5zbGljZSgpIGFzIFR5cGVbXSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB0eXBlIHRvIGEgZHVtbXkgcGFyYW1ldGVyLlxuICpcbiAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHdlIG5lZWQgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlIHdoZW4gd2UgY2Fubm90IHVzZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVycy5cbiAqXG4gKiBBbiBleGFtcGxlIGJlbG93IHNob3dzIHN1Y2ggYSBzY2VuYXJpby5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBkdW1teSBwYXJhbWV0ZXIgb2YgdGhlIHR5cGUuXG4gKlxuICogQHJlbWFya3MgVGhlIHJlc3VsdCBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciB0eXBlIGluZmVyZW5jZS4gVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHR5cGUgQSA9IHsgYzogbnVtYmVyOyB9O1xuICogdHlwZSBCID0geyBkOiBzdHJpbmc7IH1cbiAqXG4gKiBmdW5jdGlvbiBnPFQsIFU+KHU6IFUpIHt9XG4gKlxuICogLy8gV2UgY2Fubm90IGhhdmUgcGFydGlhbCB0eXBlIGluZmVyZW5jZS5cbiAqIGc8QT4oeyBkOiAnZm9vJyB9KTsgLy8gRXJyb3I6IEV4cGVjdGVkIDIgdHlwZSBhcmd1bWVudHMsIGJ1dCBnb3QgMS4gdHMoMjU1OClcbiAqXG4gKiAvLyBXZSBoYXZlIHRvIGNhbGwgaW5zdGVhZFxuICogZzxBLCBCPih7IGQ6ICdmb28nIH0pOyAvLyBPSywgYnV0IHdlIGNvdWxkIG5vdCB1c2UgdHlwZSBpbmZlcmVuY2UgZm9yIGBVPUJgLlxuICpcbiAqIGZ1bmN0aW9uIGcyPFQsIFU+KF90eXBlOiBULCB1OiBVKSB7fVxuICogZzIodHlwZVRvRHVtbXlQYXJhbTxBPigpLCB7IGQ6ICdmb28nIH0pOyAvLyBXZSBjb3VsZCB1c2UgdHlwZSBpbmZlcmVuY2UgZm9yIGBUPUFgIGFuZCBgVT1CYC5cbiAqIGBgYFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlVG9EdW1teVBhcmFtPFQ+KCk6IFQge1xuICByZXR1cm4gRFVNTVlfUFJPWFkgYXMgdW5rbm93biBhcyBUO1xufVxuXG5mdW5jdGlvbiBkdW1teVRocm93KCk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdEdW1teSBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdDQSxNQUFNLGNBQWMsSUFBSSxNQUFNLFlBQVk7QUFBQSxFQUN4QyxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixLQUFLO0FBQUEsRUFDTCwwQkFBMEI7QUFBQSxFQUMxQixnQkFBZ0I7QUFBQSxFQUNoQixLQUFLO0FBQUEsRUFDTCxjQUFjO0FBQUEsRUFDZCxTQUFTO0FBQUEsRUFDVCxtQkFBbUI7QUFBQSxFQUNuQixLQUFLO0FBQUEsRUFDTCxnQkFBZ0I7QUFDbEIsQ0FBQztBQWlFTSxTQUFTLGtCQUdkLE9BQWEsTUFBcUU7QUFDbEYsU0FBTyxPQUFPLE9BQU8sS0FBSyxNQUFNLENBQW1CO0FBQ3JEO0FBd0JPLFNBQVMsc0JBR2QsT0FBYSxNQUFpRDtBQUM5RCxTQUFPLE9BQU8sT0FBTyxLQUFLLE1BQU0sQ0FBVztBQUM3QztBQWdDTyxTQUFTLG1CQUF5QjtBQUN2QyxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGFBQW9CO0FBQzNCLFFBQU0sSUFBSSxNQUFNLGtEQUFrRDtBQUNwRTsiLAogICJuYW1lcyI6IFtdCn0K