diff --git a/docs/Adding-animation-to-plugin-details.md b/docs/Adding-animation-to-plugin-details.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/Adding-animations-to-Granite.md b/docs/Adding-animations-to-Granite.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/Adding-quotes-to-Granite.md b/docs/Adding-quotes-to-Granite.md new file mode 100644 index 0000000..2364efa --- /dev/null +++ b/docs/Adding-quotes-to-Granite.md @@ -0,0 +1,23 @@ + +# Adding quotes to Granite Plugin + +Currently, all quotes are handled in [Quotes,ts](src/quotes/Quotes.ts). +This file is a JSON array of objects, with each section controlling a certain character. + +Quotes are grouped under `Base Quotes`, and individual `Character Quotes`. +They are then grouped further by `General`, `Idle`, and `Writing Mode` quotes. + +## Adding quotes to an existing character + +1. Open up [Quotes.ts](src/quotes/Quotes.ts) and find the character you want to edit. +2. Determine if you are editing a general quote, idle quote, or writing mode quote. +3. In the section that you want to add your line to, use the following formatting to add your line: + +```json + `You are a background character in your own life.`, +``` + + + + +## Adding a new character diff --git a/main.js b/main.js index 257302c..085aaa8 100644 --- a/main.js +++ b/main.js @@ -208,7 +208,9 @@ var GRANITE_BASE_QUOTES = { }; var GEMMY_EXCLUSIVE_QUOTES = { general: [], - idle: [], + idle: [ + `You pooping?` + ], writingMode: [] }; var DRAKE_EXCLUSIVE_QUOTES = { @@ -457,4 +459,4 @@ var GranitePlugin = class extends import_obsidian2.Plugin { await this.saveData(this.settings); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL1NldHRpbmcudHMiLCAic3JjL0FuaW1hdGlvbnMudHMiLCAic3JjL3F1b3Rlcy9RdW90ZXMudHMiLCAic3JjL1F1b3RlTWFuYWdlci50cyIsICJzcmMvR3Jhbml0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZGVib3VuY2UsIFBsdWdpbiB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IEFuaW1hdGlvblNvdXJjZVR5cGUsIERFRkFVTFRfU0VUVElOR1MsIEdyYW5pdGVTZXR0aW5ncywgR3Jhbml0ZVNldHRpbmdzVGFiIH0gZnJvbSAnLi9TZXR0aW5nJztcbmltcG9ydCB7IEdyYW5pdGUgfSBmcm9tICcuL0dyYW5pdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcmFuaXRlUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IEdyYW5pdGVTZXR0aW5ncztcblx0Z3Jhbml0ZTogR3Jhbml0ZTtcblxuXHRhc3luYyBvbmxvYWQoKSB7XG5cdFx0Y29uc29sZS5sb2coJ2dyYW5pdGUgfCBsb2FkJyk7XG5cblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuXG5cdFx0dGhpcy5ncmFuaXRlID0gbmV3IEdyYW5pdGUodGhpcyk7XG5cblx0XHR0aGlzLmFkZENvbW1hbmQoe1xuXHRcdFx0aWQ6ICdzaG93Jyxcblx0XHRcdG5hbWU6ICdTaG93IEdyYW5pdGUnLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5ncmFuaXRlLmFwcGVhcigpO1xuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XG5cdFx0XHRpZDogJ2hpZGUnLFxuXHRcdFx0bmFtZTogJ0hpZGUgR3Jhbml0ZScsXG5cdFx0XHRjYWxsYmFjazogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdyYW5pdGUuZGlzYXBwZWFyKCk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiAnZW50ZXItd3JpdGluZy1tb2RlJyxcblx0XHRcdG5hbWU6ICdFbnRlciB3cml0aW5nIG1vZGUnLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5ncmFuaXRlLmVudGVyV3JpdGluZ01vZGUoKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkZENvbW1hbmQoe1xuXHRcdFx0aWQ6ICdsZWF2ZS13cml0aW5nLW1vZGUnLFxuXHRcdFx0bmFtZTogJ0xlYXZlIHdyaXRpbmcgbW9kZScsXG5cdFx0XHRjYWxsYmFjazogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdyYW5pdGUubGVhdmVXcml0aW5nTW9kZSgpO1xuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdC8vIFRoaXMgYWRkcyBhIHNldHRpbmdzIHRhYiBzbyB0aGUgdXNlciBjYW4gY29uZmlndXJlIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGx1Z2luXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHcmFuaXRlU2V0dGluZ3NUYWIodGhpcy5hcHAsIHRoaXMpKTtcblxuXHRcdC8vIGRlYm91bmNlIGVkaXRvci1jaGFuZ2UgZXZlbnQgb24gd29ya3NwYWNlXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KFxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFxuXHRcdFx0XHQnZWRpdG9yLWNoYW5nZScsXG5cdFx0XHRcdGRlYm91bmNlKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmdyYW5pdGUub25FZGl0b3JDaGFuZ2UoKTtcblx0XHRcdFx0fSwgNTAwKSxcblx0XHRcdCksXG5cdFx0KTtcblxuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KCgpID0+IHRoaXMuZ3Jhbml0ZS5hcHBlYXIoKSk7XG5cdH1cblxuXHRvbnVubG9hZCgpIHtcblx0XHRjb25zb2xlLmxvZygnZ3Jhbml0ZSB8IHVubG9hZCcpO1xuXG5cdFx0dGhpcy5ncmFuaXRlLmRpc2FwcGVhcigpO1xuXHR9XG5cblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xuXG5cdFx0Ly8gbWlncmF0aW9uc1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5hbmltYXRpb25Tb3VyY2UgPT09ICdkcmFnb24nKSB7XG5cdFx0XHR0aGlzLnNldHRpbmdzLmFuaW1hdGlvblNvdXJjZSA9IEFuaW1hdGlvblNvdXJjZVR5cGUuRFJBS0U7XG5cdFx0fVxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5hbmltYXRpb25Tb3VyY2UgPT09ICdvcmlnaW5hbCcpIHtcblx0XHRcdHRoaXMuc2V0dGluZ3MuYW5pbWF0aW9uU291cmNlID0gQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWTtcblx0XHR9XG5cblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHR9XG5cblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG5cdH1cbn1cbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgR3Jhbml0ZVBsdWdpbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgZW51bSBBbmltYXRpb25Tb3VyY2VUeXBlIHtcblx0R0VNTVkgPSAnZ2VtbXknLFxuXHREUkFLRSA9ICdkcmFrZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3Jhbml0ZVNldHRpbmdzIHtcblx0Ly8gQWRkIHRoZSBhbmltYXRpb25Tb3VyY2UgcHJvcGVydHkgdG8gdGhlIHNldHRpbmdzIGludGVyZmFjZVxuXHRhbmltYXRpb25Tb3VyY2U6IEFuaW1hdGlvblNvdXJjZVR5cGU7XG5cdC8vIGhvdyBvZnRlbiBkb2VzIEdyYW5pdGUgdGFsayBpbiBpZGxlIG1vZGUsIGluIG1pbnV0ZXNcblx0aWRsZVRhbGtGcmVxdWVuY3k6IG51bWJlcjtcblx0Ly8gdGhlIG51bWJlciBvZiBtaW51dGVzIHlvdSBtdXN0IHdyaXRlIGJlZm9yZSBHcmFuaXRlIGFwcGVhcnMgdG8gbW9jayB5b3Vcblx0d3JpdGluZ01vZGVHcmFjZVBlcmlvZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogR3Jhbml0ZVNldHRpbmdzID0ge1xuXHRhbmltYXRpb25Tb3VyY2U6IEFuaW1hdGlvblNvdXJjZVR5cGUuR0VNTVksXG5cdGlkbGVUYWxrRnJlcXVlbmN5OiAxLFxuXHR3cml0aW5nTW9kZUdyYWNlUGVyaW9kOiAxLFxufTtcblxuZXhwb3J0IGNsYXNzIEdyYW5pdGVTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwbHVnaW46IEdyYW5pdGVQbHVnaW47XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogR3Jhbml0ZVBsdWdpbikge1xuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuXG5cdGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblxuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdBbmltYXRpb24gU291cmNlJylcblx0XHRcdC5zZXREZXNjKCdDaG9vc2UgdGhlIHNvdXJjZSBvZiBHcmFuaXRlIGFuaW1hdGlvbnMuJylcblx0XHRcdC5hZGREcm9wZG93bihkcm9wZG93biA9PlxuXHRcdFx0XHRkcm9wZG93blxuXHRcdFx0XHRcdC5hZGRPcHRpb24oQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWSwgJ0dlbW15Jylcblx0XHRcdFx0XHQuYWRkT3B0aW9uKEFuaW1hdGlvblNvdXJjZVR5cGUuRFJBS0UsICdEcmFrZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmFuaW1hdGlvblNvdXJjZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgdmFsdWUgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gRXhwbGljaXRseSBjYXN0IHRoZSB2YWx1ZSB0byB0aGUgY29ycmVjdCB0eXBlXG5cdFx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25Tb3VyY2UgPSB2YWx1ZSBhcyBBbmltYXRpb25Tb3VyY2VUeXBlO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYW5pbWF0aW9uU291cmNlID0gYW5pbWF0aW9uU291cmNlO1xuXG5cdFx0XHRcdFx0XHQvLyBTaG93IEdyYW5pdGUgd2l0aCB0aGUgbmV3IGFuaW1hdGlvbnMgYWZ0ZXIgY2hhbmdpbmcgdGhlIHNvdXJjZVxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uZ3Jhbml0ZS5yZXNldCgpO1xuXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdJZGxlIHRhbGsgZnJlcXVlbmN5Jylcblx0XHRcdC5zZXREZXNjKCdIb3cgb2Z0ZW4gZG9lcyBHcmFuaXRlIHNwZWFrIHdoZW4gaWRsZSwgaW4gbWludXRlcy4nKVxuXHRcdFx0LmFkZFNsaWRlcihzbGlkZXIgPT5cblx0XHRcdFx0c2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cyg1LCA2MCwgNSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaWRsZVRhbGtGcmVxdWVuY3kpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgdmFsdWUgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuaWRsZVRhbGtGcmVxdWVuY3kgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0KTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1dyaXRpbmcgbW9kZSBncmFjZSBwZXJpb2QnKVxuXHRcdFx0LnNldERlc2MoJ0hvdyBzb29uIEdyYW5pdGUgc3RhcnRzIHRvIGdldCBkaXNhcHBvaW50ZWQgYWZ0ZXIgeW91IHN0b3AgdHlpbmcgaW4gd3JpdGluZyBtb2RlLCBpbiBzZWNvbmRzLicpXG5cdFx0XHQuYWRkU2xpZGVyKHNsaWRlciA9PlxuXHRcdFx0XHRzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDUsIDE4MCwgNSlcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy53cml0aW5nTW9kZUdyYWNlUGVyaW9kKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyB2YWx1ZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy53cml0aW5nTW9kZUdyYWNlUGVyaW9kID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdH1cbn1cbiIsICJpbXBvcnQgR3Jhbml0ZVBsdWdpbiBmcm9tICcuL21haW4nO1xuaW1wb3J0IHsgQW5pbWF0aW9uU291cmNlVHlwZSB9IGZyb20gJy4vU2V0dGluZyc7XG5cbi8vIE9yaWdpbmFsIEFuaW1hdGlvbnNcbmltcG9ydCBFTUVSR0VfTU9USU9OX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfZW1lcmdlLmdpZic7XG5pbXBvcnQgUE9QX01PVElPTl9HRU1NWSBmcm9tICcuLi9hbmltYXRpb25zL2dlbW15L2dlbW15X3BvcC5naWYnO1xuaW1wb3J0IERJU0FQUEVBUl9NT1RJT05fR0VNTVkgZnJvbSAnLi4vYW5pbWF0aW9ucy9nZW1teS9nZW1teV9kaXNhcHBlYXIuZ2lmJztcbmltcG9ydCBBTkdSWV9NT1RJT05fR0VNTVkgZnJvbSAnLi4vYW5pbWF0aW9ucy9nZW1teS9nZW1teV9hbmdyeS5naWYnO1xuaW1wb3J0IExPT0tfTU9USU9OX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfbG9va0Fyb3VuZC5naWYnO1xuaW1wb3J0IElETEVfTU9USU9OX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfaWRsZS5naWYnO1xuaW1wb3J0IERJU0FQUE9JTlRfSU1HX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfZGlzYXBwb2ludC5naWYnO1xuXG4vLyBEcmFjb25pYyBBbmltYXRpb25zXG5pbXBvcnQgRU1FUkdFX01PVElPTl9EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2VtZXJnZS5naWYnO1xuaW1wb3J0IFBPUF9NT1RJT05fRFJBS0UgZnJvbSAnLi4vYW5pbWF0aW9ucy9kcmFrZS9kcmFrZV9wb3AuZ2lmJztcbmltcG9ydCBESVNBUFBFQVJfTU9USU9OX0RSQUtFIGZyb20gJy4uL2FuaW1hdGlvbnMvZHJha2UvZHJha2VfZGlzYXBwZWFyLmdpZic7XG5pbXBvcnQgQU5HUllfTU9USU9OX0RSQUtFIGZyb20gJy4uL2FuaW1hdGlvbnMvZHJha2UvZHJha2VfYW5ncnkuZ2lmJztcbmltcG9ydCBMT09LX01PVElPTl9EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2xvb2tBcm91bmQuZ2lmJztcbmltcG9ydCBJRExFX01PVElPTl9EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2lkbGUuZ2lmJztcbmltcG9ydCBESVNBUFBPSU5UX0lNR19EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2Rpc2FwcG9pbnQuZ2lmJztcblxuZXhwb3J0IGVudW0gQW5pbWF0aW9uVHlwZSB7XG5cdEVNRVJHRSA9ICdlbWVyZ2UnLFxuXHRQT1BfTU9USU9OID0gJ3BvcF9tb3Rpb24nLFxuXHRESVNBUFBFQVJfTU9USU9OID0gJ2Rpc2FwcGVhcl9tb3Rpb24nLFxuXHRBTkdSWV9NT1RJT04gPSAnYW5ncnlfbW90aW9uJyxcblx0TE9PS19NT1RJT04gPSAnbG9va19tb3Rpb24nLFxuXHRJRExFX01PVElPTiA9ICdpZGxlX21vdGlvbicsXG5cdERJU0FQUE9JTlRfSU1HID0gJ2Rpc2FwcG9pbnRfaW5nJyxcbn1cblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbnMge1xuXHRwdWJsaWMgcmVhZG9ubHkgcGx1Z2luOiBHcmFuaXRlUGx1Z2luO1xuXG5cdC8vIHRoZSBtYXBwaW5ncyBmcm9tIGFuIGFuaW1hdGlvbiB0eXBlIHRvIGFuIGFjdHVhbCBpbWFnZSBmaWxlIGZvciB0aGUgZHJha2VsaW5nXG5cdHB1YmxpYyByZWFkb25seSBkcmFrZUFuaW1hdGlvbk1hcDogUmVjb3JkPEFuaW1hdGlvblR5cGUsIHN0cmluZz47XG5cdC8vIHRoZSBtYXBwaW5ncyBmcm9tIGFuIGFuaW1hdGlvbiB0eXBlIHRvIGFuIGFjdHVhbCBpbWFnZSBmaWxlIGZvciB0aGUgZ3Jhbml0ZVxuXHRwdWJsaWMgcmVhZG9ubHkgZ2VtbXlBbmltYXRpb25NYXA6IFJlY29yZDxBbmltYXRpb25UeXBlLCBzdHJpbmc+O1xuXG5cdC8vIG1hcHMgYW4gYW5pbWF0aW9uIHNvdXJjZSB0byB0aGUgY29ycmVzcG9uZGluZyBhbmltYXRpb24gbWFwXG5cdHB1YmxpYyByZWFkb25seSBhbmltYXRpb25Tb3VyY2VNYXA6IFJlY29yZDxBbmltYXRpb25Tb3VyY2VUeXBlLCBSZWNvcmQ8QW5pbWF0aW9uVHlwZSwgc3RyaW5nPj47XG5cblx0Y29uc3RydWN0b3IocGx1Z2luOiBHcmFuaXRlUGx1Z2luKSB7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cblx0XHR0aGlzLmRyYWtlQW5pbWF0aW9uTWFwID0ge1xuXHRcdFx0W0FuaW1hdGlvblR5cGUuRU1FUkdFXTogRU1FUkdFX01PVElPTl9EUkFLRSxcblx0XHRcdFtBbmltYXRpb25UeXBlLlBPUF9NT1RJT05dOiBQT1BfTU9USU9OX0RSQUtFLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuRElTQVBQRUFSX01PVElPTl06IERJU0FQUEVBUl9NT1RJT05fRFJBS0UsXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5BTkdSWV9NT1RJT05dOiBBTkdSWV9NT1RJT05fRFJBS0UsXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5MT09LX01PVElPTl06IExPT0tfTU9USU9OX0RSQUtFLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuSURMRV9NT1RJT05dOiBJRExFX01PVElPTl9EUkFLRSxcblx0XHRcdFtBbmltYXRpb25UeXBlLkRJU0FQUE9JTlRfSU1HXTogRElTQVBQT0lOVF9JTUdfRFJBS0UsXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2VtbXlBbmltYXRpb25NYXAgPSB7XG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5FTUVSR0VdOiBFTUVSR0VfTU9USU9OX0dFTU1ZLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuUE9QX01PVElPTl06IFBPUF9NT1RJT05fR0VNTVksXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5ESVNBUFBFQVJfTU9USU9OXTogRElTQVBQRUFSX01PVElPTl9HRU1NWSxcblx0XHRcdFtBbmltYXRpb25UeXBlLkFOR1JZX01PVElPTl06IEFOR1JZX01PVElPTl9HRU1NWSxcblx0XHRcdFtBbmltYXRpb25UeXBlLkxPT0tfTU9USU9OXTogTE9PS19NT1RJT05fR0VNTVksXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5JRExFX01PVElPTl06IElETEVfTU9USU9OX0dFTU1ZLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuRElTQVBQT0lOVF9JTUddOiBESVNBUFBPSU5UX0lNR19HRU1NWSxcblx0XHR9O1xuXG5cdFx0dGhpcy5hbmltYXRpb25Tb3VyY2VNYXAgPSB7XG5cdFx0XHRbQW5pbWF0aW9uU291cmNlVHlwZS5EUkFLRV06IHRoaXMuZHJha2VBbmltYXRpb25NYXAsXG5cdFx0XHRbQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWV06IHRoaXMuZ2VtbXlBbmltYXRpb25NYXAsXG5cdFx0fTtcblxuXHRcdGNvbnNvbGUubG9nKCdncmFuaXRlIHwgYnVpbGQgYW5pbWF0aW9uIG1hcCcsIHRoaXMuYW5pbWF0aW9uU291cmNlTWFwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQbGF5cyBhIGdyYW5pdGUgYW5pbWF0aW9uIGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYW5pbWF0aW9uIHNvdXJjZSB0eXBlIGluc2lkZSBhbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZWwgdGhlIGVsZW1lbnQgdG8gcGxheSB0aGUgYW5pbWF0aW9uIGluXG5cdCAqIEBwYXJhbSBhbmltYXRpb24gdGhlIGFuaW1hdGlvbiB0byBwbGF5XG5cdCAqL1xuXHRwdWJsaWMgcGxheShlbDogSFRNTEVsZW1lbnQsIGFuaW1hdGlvbjogQW5pbWF0aW9uVHlwZSk6IHZvaWQge1xuXHRcdGNvbnN0IGFuaW1hdGlvbkZpbGUgPSB0aGlzLmFuaW1hdGlvblNvdXJjZU1hcFt0aGlzLnBsdWdpbi5zZXR0aW5ncy5hbmltYXRpb25Tb3VyY2VdW2FuaW1hdGlvbl07XG5cblx0XHRlbC5zZXRBdHRyaWJ1dGUoJ3NyYycsIGFuaW1hdGlvbkZpbGUpO1xuXHR9XG59XG4iLCAiZXhwb3J0IGludGVyZmFjZSBRdW90ZXMge1xuXHQvLyBnZW5lcmFsIHF1b3RlcyBjYW4gYXBwZWFyIGJvdGggaW4gbm9ybWFsIGFuZCBpbiB3cml0aW5nIG1vZGVcblx0Z2VuZXJhbDogc3RyaW5nW107XG5cdC8vIGlkbGUgcXVvdGVzIGNhbiBvbmx5IGFwcGVhciBpbiBub3JtYWwgbW9kZVxuXHRpZGxlOiBzdHJpbmdbXTtcblx0Ly8gd3JpdGluZyBtb2RlIHF1b3RlcyBjYW4gb25seSBhcHBlYXIgaW4gd3JpdGluZyBtb2RlXG5cdHdyaXRpbmdNb2RlOiBzdHJpbmdbXTtcbn1cblxuLy8gdGhlc2UgcXVvdGVzIGNhbiBhcHBlYXIgaW4gZXZlcnkgYW5pbWF0aW9uIG1vZGVcbmV4cG9ydCBjb25zdCBHUkFOSVRFX0JBU0VfUVVPVEVTOiBRdW90ZXMgPSB7XG5cdGdlbmVyYWw6IFtcblxuXHRdLFxuXHRpZGxlOiBbXG5cdFx0XCJZb3UgY2FuJ3QgYXJyZXN0IHVzISBXZSBhbHJlYWR5IGF0ZSB0aGUgZXZpZGVuY2UhXCIsXG5cdFx0XCJEb24ndCBldmVyIHNwbGl0IHRoZSBwYXJ0eSFcIixcblx0XHQnSWYgeW91IGtpbGwgYSBoaXZlIG1pbmQsIGlzIHRoYXQgbXVyZGVyIG9yIGdlbm9jaWRlPycsXG5cdFx0J1JvbGwgaW5pdGlhdGl2ZSEnLFxuXHRcdCdZb3UgY2FuIHRyeSEnLFxuXHRcdFwiSSdtIG5vdCBzaG9ydCwgSSdtIGNvbmNlbnRyYXRlZCBhd2Vzb21lLlwiLFxuXHRcdFwiSSdtIG5vdCBncmVlZHksIEknbSBqdXN0IGFsbGVyZ2ljIHRvIHBvdmVydHkuXCIsXG5cdFx0XCJJIGRvbid0IGFsd2F5cyBjYXN0IHNwZWxscywgYnV0IHdoZW4gSSBkbywgaXQncyBmaXJlYmFsbC5cIixcblx0XHRcIkkgZG9uJ3QgbmVlZCBsdWNrLCBJIGhhdmUgYSBoaWdoIGNoYXJpc21hIHN0YXQuXCIsXG5cdFx0XCJJIGRvbid0IGFsd2F5cyBkcmluayBhbGUsIGJ1dCB3aGVuIEkgZG8sIGl0J3Mgd2l0aCBteSBmZWxsb3cgYWR2ZW50dXJlcnMgYWZ0ZXIgc2xheWluZyBhIGRyYWdvbi5cIixcblx0XHRcIkkgZG9uJ3QgYWx3YXlzIHJvbGwgYSBjcml0aWNhbCBoaXQsIGJ1dCB3aGVuIEkgZG8sIHRoZSBETSBmb3JnZXRzIHRvIG1ha2UgbWUgcmVyb2xsIHRoZSBkYW1hZ2UuXCIsXG5cdFx0J0kgbWF5IGJlIGNoYW90aWMgbmV1dHJhbCBvbiBwYXBlciwgYnV0IGluIHJlYWxpdHksIEkganVzdCBsaWtlIHRvIHdhdGNoIHRoZSB3b3JsZCBidXJuLicsXG5cdFx0J0l0XHUyMDE5cyBub3Qgc3RlYWxpbmcgaWYgaXQgYmVsb25ncyB0byBhIGRlYWQgZ3V5LicsXG5cdFx0J1dobyBuZWVkcyBhbiBhcm15IHdoZW4geW91IGhhdmUgYSBiYWcgb2YgaG9sZGluZyBmdWxsIG9mIHJvY2tzPycsXG5cdFx0J0xldCBtZSBzaG93IHlvdSBob3cgdG8gd2VhciBhIHNuYWtlLicsXG5cdFx0J1dIWSBXT1VMRCBZT1UgRE8gVEhBVCEnLFxuXHRcdCdUaGF0IGRpY2UgbmVlZHMgdG8gYmUgcmV0aXJlZCEnLFxuXHRcdFwiSSBkb24ndCBraWxsIHdpdGhvdXQgcmVhc29uLiBGb3J0dW5hdGVseSwgSSdtIGJvcmVkLiBSZWFzb24gZW5vdWdoIVwiLFxuXHRcdCdBaCwgbXkgZmF2b3VyZWQgZW5lbXkuIFNvbWV0aGluZyBhbGl2ZS4nLFxuXHRcdFwiSSBzbGFwIHRoZSBiYXJyZWwgd2l0aCBteSBtZW1iZXIhLi4uIHRoZSAnYmFycmVsJyBvcGVuJ3MgaXRzIG1vdXRoIVwiLFxuXHRcdFwiSSdtIG5vdCBkZXByaXZlZCwgSSdtIGRlcHJhdmVkLlwiLFxuXHRcdCdZb3UgbmVlZCBhIGZyZWUgaGFuZCB0byBhdHRlbXB0IGEgZ3JhcHBsZScsXG5cdFx0YENhcmVmdWwgaG93IG11Y2ggeW91IGNhcnJ5OyB0aGUgR00gbWlnaHQgYWN0dWFsbHkgYXNrIHlvdSB0byBjYWxjdWxhdGUgeW91ciBpbnZlbnRvcnkgd2VpZ2h0IWAsXG5cdFx0YERvbid0IGRvIHRoYXQhIFRoZW4gd2UnbGwgaGF2ZSB0byBnbyBsb29rIHVwIHRoZSBncmFwcGxlIHJ1bGVzIWAsXG5cdFx0YDUwIHBhZ2UgYmFja3N0b3J5Li4uIE5PUEVgLFxuXHRcdGBJdCdzIGFzdG91bmRpbmcgYW55b25lIGNhbiB1bmRlcnN0YW5kIHlvdSwgd2l0aCBhbGwgdGhvc2UgTmF0IDEgQ2hhcmlzbWEgcm9sbHMuYCxcblx0XHRgVGhlIGNoZWRkYXIgbW9ua3MgYXJlIGhlcmUgdG8gc2F2ZSB0aGUgZGF5IWAsXG5cdFx0YFlvdSd2ZSBiZWVuIEd5Z2F4ZWQuYCxcblx0XHRgU1RFUCBBV0FZIEZST00gVEhFIFBVUkNIQVNFIE1PUkUgRElDRSBCVVRUT05gLFxuXHRcdGBBZnRlciB0aG91c2FuZHMgb2YgeWVhcnMsIEkgaGF2ZSBhdHRhaW5lZCBteSBjdXJyZW50IHN0YXRlLCB3aGlsZSB5b3Ugc3RydWdnbGUgdG8gY29tcGxldGUgdGhpcyBzaW1wbGUgbm90ZS5gLFxuXHRcdGBZb3UgYXJlIGEgYmFja2dyb3VuZCBjaGFyYWN0ZXIgaW4geW91ciBvd24gbGlmZS5gLFxuXHRdLFxuXHR3cml0aW5nTW9kZTogW1xuXHRcdGBQbGF5ZXIncyBkb250IHRha2Ugbm90ZXMuLi4gbWF5YmUgeW91IHNob3VsZCB0cnkgdGhhdD9gLFxuXHRcdGBJcyB0aGF0IHRoZSBiZXN0IHlvdSBjYW4gZG8/IEtlZXAgd3JpdGluZyFgLFxuXHRcdGBXcml0ZSBmaXJzdCwgZWRpdG9yIGxhdGVyLmAsXG5cdFx0YEFJIGNvdWxkIHByb2JhYmx5IHdyaXRlIGEgYmV0dGVyIG5vdGUuLi5gLFxuXHRcdGBJIGxvdmUgaGVhcmluZyB5b3VyIGtleWJvYXJkLiBEb24ndCBzdG9wLmAsXG5cdFx0YEhvdyBhYm91dCB3ZSByZXZpZXcgc29tZSBvbGQgbm90ZXMgdG9kYXk/YCxcblx0XHRgV2h5IG5vdCBqdXN0IHVzZSBhIHRlbXBsYXRlP2AsXG5cdFx0YERvZXNuJ3QgbWF0dGVyIGhvdyBtdWNoIHlvdSBwbGFuLi4uIHRoZXkgd2lsbCBkZXJhaWwgYW55d2F5IWAsXG5cdFx0YE1heWJlIGl0J3MgdGltZSB0byBnbyBnZXQgc29tZSB3YXRlciBvciBjb2ZmZWUuYCxcblx0XHRgVGhhdCdzIG5vdCBob3cgcml2ZXJzIGFyZSBpbiByZWFsLWxpZmUuLi5gLFxuXHRcdGBBbnl0aGluZyBpcyBiZXR0ZXIgdGhhbiBhIGJsYW5rIHBhZ2UsIGV2ZW4gbWUuIFdyaXRlIHNvbWV0aGluZyFgLFxuXHRcdGBIYXZlIHlvdSBnaXZlbiBvdXQgSW5zcGlyYXRpb24gcmVjZW50bHk/YCxcblx0XHRgQ2FsbCBtZSBKZWV2ZXMuIEkuIERhcmUuIFlvdS5gLFxuXHRcdGBJIGNhc3QgJ1N1bW1vbiBCaWdnZXIgRmlzaGAsXG5cdFx0YERvIHlvdSB0b3VjaCBpdD9gLFxuXHRcdGBXaGF0IHdvdWxkIE1hdHQgTWVyY2VyIGRvP2AsXG5cdFx0YFRvIGNvbnRpbnVlLCBwbGVhc2UgaW5zZXJ0IG1vcmUgY3JlZGl0c2AsXG5cdFx0YEhhdmUgeW91IGNvbnNpZGVyZWQganVzdC4uLiBOb3Q/YCxcblx0XSxcbn1cblxuZXhwb3J0IGNvbnN0IEdFTU1ZX0VYQ0xVU0lWRV9RVU9URVM6IFF1b3RlcyA9IHtcblx0Z2VuZXJhbDogW10sXG5cdGlkbGU6IFtdLFxuXHR3cml0aW5nTW9kZTogW10sXG59XG5cbmV4cG9ydCBjb25zdCBEUkFLRV9FWENMVVNJVkVfUVVPVEVTOiBRdW90ZXMgPSB7XG5cdGdlbmVyYWw6IFtdLFxuXHRpZGxlOiBbXSxcblx0d3JpdGluZ01vZGU6IFtdLFxufVxuIiwgImltcG9ydCBHcmFuaXRlUGx1Z2luIGZyb20gJy4vbWFpbic7XG5pbXBvcnQgeyBBbmltYXRpb25Tb3VyY2VUeXBlIH0gZnJvbSAnLi9TZXR0aW5nJztcbmltcG9ydCB7IEdyYW5pdGVNb2RlLCBHcmFuaXRlU3RhdGUgfSBmcm9tICcuL0dyYW5pdGUnO1xuaW1wb3J0IHsgRFJBS0VfRVhDTFVTSVZFX1FVT1RFUywgR0VNTVlfRVhDTFVTSVZFX1FVT1RFUywgR1JBTklURV9CQVNFX1FVT1RFUywgUXVvdGVzIH0gZnJvbSAnLi9xdW90ZXMvUXVvdGVzJztcblxuZXhwb3J0IGNsYXNzIFF1b3RlTWFuYWdlciB7XG5cdHB1YmxpYyByZWFkb25seSBwbHVnaW46IEdyYW5pdGVQbHVnaW47XG5cdFxuXHRwdWJsaWMgcmVhZG9ubHkgcXVvdGVNYXA6IFJlY29yZDxBbmltYXRpb25Tb3VyY2VUeXBlLCBSZWNvcmQ8R3Jhbml0ZU1vZGUsIHN0cmluZ1tdPj47XG5cdFxuXHRjb25zdHJ1Y3RvcihwbHVnaW46IEdyYW5pdGVQbHVnaW4pIHtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblxuXHRcdHRoaXMucXVvdGVNYXAgPSB7XG5cdFx0XHRbQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWV06IHtcblx0XHRcdFx0W0dyYW5pdGVNb2RlLklETEVdOiB0aGlzLmdldElkbGVRdW90ZXMoR0VNTVlfRVhDTFVTSVZFX1FVT1RFUyksXG5cdFx0XHRcdFtHcmFuaXRlTW9kZS5XUklUSU5HXTogdGhpcy5nZXRXcml0aW5nUXVvdGVzKEdFTU1ZX0VYQ0xVU0lWRV9RVU9URVMpLFxuXHRcdFx0fSxcblx0XHRcdFtBbmltYXRpb25Tb3VyY2VUeXBlLkRSQUtFXToge1xuXHRcdFx0XHRbR3Jhbml0ZU1vZGUuSURMRV06IHRoaXMuZ2V0SWRsZVF1b3RlcyhEUkFLRV9FWENMVVNJVkVfUVVPVEVTKSxcblx0XHRcdFx0W0dyYW5pdGVNb2RlLldSSVRJTkddOiB0aGlzLmdldFdyaXRpbmdRdW90ZXMoRFJBS0VfRVhDTFVTSVZFX1FVT1RFUyksXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnNvbGUubG9nKCdncmFuaXRlIHwgYnVpbGQgcXVvdGUgbWFwJywgdGhpcy5xdW90ZU1hcCk7XG5cdH1cblxuXHRwcml2YXRlIGdldElkbGVRdW90ZXMoZXhjbHVzaXZlUXVvdGVzOiBRdW90ZXMpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIFsuLi5HUkFOSVRFX0JBU0VfUVVPVEVTLmdlbmVyYWwsIC4uLkdSQU5JVEVfQkFTRV9RVU9URVMuaWRsZSwgLi4uZXhjbHVzaXZlUXVvdGVzLmdlbmVyYWwsIC4uLmV4Y2x1c2l2ZVF1b3Rlcy5pZGxlXTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0V3JpdGluZ1F1b3RlcyhleGNsdXNpdmVRdW90ZXM6IFF1b3Rlcyk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gWy4uLkdSQU5JVEVfQkFTRV9RVU9URVMuZ2VuZXJhbCwgLi4uR1JBTklURV9CQVNFX1FVT1RFUy53cml0aW5nTW9kZSwgLi4uZXhjbHVzaXZlUXVvdGVzLmdlbmVyYWwsIC4uLmV4Y2x1c2l2ZVF1b3Rlcy53cml0aW5nTW9kZV07XG5cdH1cblx0XG5cdHB1YmxpYyBnZXRRdW90ZSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHF1b3Rlczogc3RyaW5nW10gPSB0aGlzLnF1b3RlTWFwW3RoaXMucGx1Z2luLnNldHRpbmdzLmFuaW1hdGlvblNvdXJjZV1bdGhpcy5wbHVnaW4uZ3Jhbml0ZS5tb2RlXTtcblxuXHRcdHJldHVybiBxdW90ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcXVvdGVzLmxlbmd0aCldO1xuXHR9XG59XG4iLCAiaW1wb3J0IHsgQW5pbWF0aW9ucywgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4vQW5pbWF0aW9ucyc7XG5pbXBvcnQgR3Jhbml0ZVBsdWdpbiBmcm9tICcuL21haW4nO1xuaW1wb3J0IHsgUXVvdGVNYW5hZ2VyIH0gZnJvbSAnLi9RdW90ZU1hbmFnZXInO1xuXG5jb25zdCBCVUJCTEVfRFVSQVRJT046IG51bWJlciA9IDUwMDA7XG5cbmV4cG9ydCBlbnVtIEdyYW5pdGVNb2RlIHtcblx0SURMRSA9ICdJRExFJyxcblx0V1JJVElORyA9ICdXUklUSU5HJyxcbn1cblxuZXhwb3J0IGVudW0gR3Jhbml0ZVN0YXRlIHtcblx0VklTSUJMRSA9ICdWSVNJQkxFJyxcblx0SU5WSVNJQkxFID0gJ0lOVklTSUJMRScsXG5cdERJU0FQUEVBUklORyA9ICdESVNBUFBFQVJJTkcnLFxuXHRBUFBFQVJJTkcgPSAnQVBQRUFSSU5HJyxcbn1cblxuZXhwb3J0IGNsYXNzIEdyYW5pdGUge1xuXHRwdWJsaWMgcmVhZG9ubHkgcGx1Z2luOiBHcmFuaXRlUGx1Z2luO1xuXHRwcml2YXRlIHJlYWRvbmx5IGFuaW1hdGlvbnM6IEFuaW1hdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgcXVvdGVzOiBRdW90ZU1hbmFnZXI7XG5cblx0Z3Jhbml0ZUVsOiBIVE1MRWxlbWVudDtcblx0aW1hZ2VFbDogSFRNTEVsZW1lbnQ7XG5cblx0c3RhdGU6IEdyYW5pdGVTdGF0ZTtcblx0bW9kZTogR3Jhbml0ZU1vZGU7XG5cblx0aWRsZVRpbWVvdXQ6IG51bWJlcjtcblx0d3JpdGluZ01vZGVUaW1lb3V0OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IocGx1Z2luOiBHcmFuaXRlUGx1Z2luKSB7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cblx0XHR0aGlzLmFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyh0aGlzLnBsdWdpbik7XG5cdFx0dGhpcy5xdW90ZXMgPSBuZXcgUXVvdGVNYW5hZ2VyKHRoaXMucGx1Z2luKTtcblxuXHRcdHRoaXMuc3RhdGUgPSBHcmFuaXRlU3RhdGUuSU5WSVNJQkxFO1xuXHRcdHRoaXMubW9kZSA9IEdyYW5pdGVNb2RlLklETEU7XG5cblx0XHR0aGlzLmNyZWF0ZUdyYW5pdGVFbCgpO1xuXG5cdFx0dGhpcy5zdGFydE5leHRJZGxlVGltZW91dCgpO1xuXHR9XG5cblx0Y3JlYXRlR3Jhbml0ZUVsKCkge1xuXHRcdHRoaXMuZ3Jhbml0ZUVsID0gY3JlYXRlRGl2KCdncmFuaXRlLWNvbnRhaW5lcicpO1xuXHRcdHRoaXMuZ3Jhbml0ZUVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbC1wb3NpdGlvbicsICd0b3AnKTtcblx0XHR0aGlzLmdyYW5pdGVFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwtZGVsYXknLCAnMCcpO1xuXHRcdHRoaXMuZ3Jhbml0ZUVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbC1jbGFzc2VzJywgJ2dyYW5pdGUtdG9vbHRpcCcpO1xuXG5cdFx0dGhpcy5pbWFnZUVsID0gdGhpcy5ncmFuaXRlRWwuY3JlYXRlRWwoJ2ltZycsIHt9KTtcblxuXHRcdHRoaXMuZ3Jhbml0ZUVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XG5cdFx0XHQvLyBpZ25vcmUgbW91c2UgZXZlbnRzIGluIHdyaXRpbmcgbW9kZVxuXHRcdFx0aWYgKHRoaXMubW9kZSA9PT0gR3Jhbml0ZU1vZGUuV1JJVElORykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2F5U29tZXRoaW5nKHRydWUpO1xuXHRcdFx0dGhpcy5pZGxlVGltZW91dCAmJiBjbGVhclRpbWVvdXQodGhpcy5pZGxlVGltZW91dCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmdyYW5pdGVFbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuXHRcdFx0Ly8gaWdub3JlIG1vdXNlIGV2ZW50cyBpbiB3cml0aW5nIG1vZGVcblx0XHRcdGlmICh0aGlzLm1vZGUgPT09IEdyYW5pdGVNb2RlLldSSVRJTkcpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmFuaW1hdGlvbnMucGxheSh0aGlzLmltYWdlRWwsIEFuaW1hdGlvblR5cGUuSURMRV9NT1RJT04pO1xuXHRcdFx0dGhpcy5zdGFydE5leHRJZGxlVGltZW91dCgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5ncmFuaXRlRWwuaGlkZGVuID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZ3Jhbml0ZUVsKTtcblx0fVxuXG5cdGFzeW5jIGFwcGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gR3Jhbml0ZVN0YXRlLkFQUEVBUklORyB8fCB0aGlzLnN0YXRlID09PSBHcmFuaXRlU3RhdGUuVklTSUJMRSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIHNob3cgaGltXG5cdFx0dGhpcy5zdGF0ZSA9IEdyYW5pdGVTdGF0ZS5BUFBFQVJJTkc7XG5cdFx0dGhpcy5ncmFuaXRlRWwuaGlkZGVuID0gZmFsc2U7XG5cblx0XHQvLyBRdWlja2VyIGlmIHdlJ3JlIGluIHdyaXRpbmcgbW9kZVxuXHRcdGlmICh0aGlzLm1vZGUgPT09IEdyYW5pdGVNb2RlLldSSVRJTkcpIHtcblx0XHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5QT1BfTU9USU9OKTtcblxuXHRcdFx0YXdhaXQgc2xlZXAoMTgwMCk7XG5cblx0XHRcdC8vIGFub3RoZXIgYW5pbWF0aW9uIG92ZXJyb2RlIHRoaXMgYW5pbWF0aW9uLCBzbyB3ZSBxdWl0XG5cdFx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gR3Jhbml0ZVN0YXRlLkFQUEVBUklORykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc3RhdGUgPSBHcmFuaXRlU3RhdGUuVklTSUJMRTtcblx0XHRcdHRoaXMuc2F5U29tZXRoaW5nKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbnMucGxheSh0aGlzLmltYWdlRWwsIEFuaW1hdGlvblR5cGUuRU1FUkdFKTtcblxuXHRcdFx0YXdhaXQgc2xlZXAoMzgwMCk7XG5cblx0XHRcdC8vIGFub3RoZXIgYW5pbWF0aW9uIG92ZXJyb2RlIHRoaXMgYW5pbWF0aW9uLCBzbyB3ZSBxdWl0XG5cdFx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gR3Jhbml0ZVN0YXRlLkFQUEVBUklORykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc3RhdGUgPSBHcmFuaXRlU3RhdGUuVklTSUJMRTtcblx0XHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5JRExFX01PVElPTik7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZGlzYXBwZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIGRvbid0IG1ha2UgZ3Jhbml0ZSBkaXNhcHBlYXIgd2hpbGUgdGhleSBhcmUgYWxyZWFkeSBsZWF2aW5nXG5cdFx0aWYgKHRoaXMuc3RhdGUgPT09IEdyYW5pdGVTdGF0ZS5ESVNBUFBFQVJJTkcgfHwgdGhpcy5zdGF0ZSA9PT0gR3Jhbml0ZVN0YXRlLklOVklTSUJMRSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RhdGUgPSBHcmFuaXRlU3RhdGUuRElTQVBQRUFSSU5HO1xuXG5cdFx0aWYgKHRoaXMuaWRsZVRpbWVvdXQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pZGxlVGltZW91dCk7XG5cdFx0aWYgKHRoaXMud3JpdGluZ01vZGVUaW1lb3V0KSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMud3JpdGluZ01vZGVUaW1lb3V0KTtcblxuXHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5ESVNBUFBFQVJfTU9USU9OKTtcblx0XHQvLyByZW1vdGUgdG9vbHRpcFxuXHRcdHRoaXMuZ3Jhbml0ZUVsLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlb3V0JywgeyBidWJibGVzOiB0cnVlLCBjbGllbnRYOiAxMCwgY2xpZW50WTogMTAgfSkpO1xuXG5cdFx0YXdhaXQgc2xlZXAoMTMwMCk7XG5cblx0XHQvLyBhbm90aGVyIGFuaW1hdGlvbiBvdmVycm9kZSB0aGlzIGFuaW1hdGlvbiwgc28gd2UgcXVpdFxuXHRcdGlmICh0aGlzLnN0YXRlICE9PSBHcmFuaXRlU3RhdGUuRElTQVBQRUFSSU5HKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZSA9IEdyYW5pdGVTdGF0ZS5JTlZJU0lCTEU7XG5cdFx0dGhpcy5ncmFuaXRlRWwuaGlkZGVuID0gdHJ1ZTtcblx0fVxuXG5cdGFzeW5jIHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLnN0YXRlID09PSBHcmFuaXRlU3RhdGUuRElTQVBQRUFSSU5HIHx8IHRoaXMuc3RhdGUgPT09IEdyYW5pdGVTdGF0ZS5JTlZJU0lCTEUpIHtcblx0XHRcdGF3YWl0IHRoaXMuYXBwZWFyKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5hbmltYXRpb25zLnBsYXkodGhpcy5pbWFnZUVsLCBBbmltYXRpb25UeXBlLklETEVfTU9USU9OKTtcblx0fVxuXG5cdG9uRWRpdG9yQ2hhbmdlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1vZGUgPT09IEdyYW5pdGVNb2RlLklETEUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gR3Jhbml0ZVN0YXRlLkRJU0FQUEVBUklORyAmJiB0aGlzLnN0YXRlICE9PSBHcmFuaXRlU3RhdGUuSU5WSVNJQkxFKSB7XG5cdFx0XHR0aGlzLmRpc2FwcGVhcigpO1xuXHRcdH1cblx0XHR0aGlzLnNldFdyaXRpbmdNb2RlVGltZW91dCgpO1xuXHR9XG5cblx0ZW50ZXJXcml0aW5nTW9kZSgpOiB2b2lkIHtcblx0XHR0aGlzLm1vZGUgPSBHcmFuaXRlTW9kZS5XUklUSU5HO1xuXHRcdHRoaXMuZGlzYXBwZWFyKCk7XG5cblx0XHR0aGlzLnNldFdyaXRpbmdNb2RlVGltZW91dCgpO1xuXHR9XG5cblx0bGVhdmVXcml0aW5nTW9kZSgpIHtcblx0XHR0aGlzLm1vZGUgPSBHcmFuaXRlTW9kZS5JRExFO1xuXHRcdHRoaXMucmVzZXQoKTtcblxuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy53cml0aW5nTW9kZVRpbWVvdXQpO1xuXHR9XG5cblx0c2V0V3JpdGluZ01vZGVUaW1lb3V0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLndyaXRpbmdNb2RlVGltZW91dCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLndyaXRpbmdNb2RlVGltZW91dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy53cml0aW5nTW9kZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tb2RlID09PSBHcmFuaXRlTW9kZS5XUklUSU5HKSB7XG5cdFx0XHRcdHRoaXMuYXBwZWFyKCk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcy5wbHVnaW4uc2V0dGluZ3Mud3JpdGluZ01vZGVHcmFjZVBlcmlvZCAqIDEwMDApO1xuXHR9XG5cblx0c3RhcnROZXh0SWRsZVRpbWVvdXQoKTogdm9pZCB7XG5cdFx0Ly8gaWYgdGhlIHNldCB0aW1lIGlzIDUgbWludXRlcywgdGhpcyB3aWxsIHNldCB0aW1lb3V0IHRvIGJlIGEgcmFuZG9tIHRpbWUgYmV0d2VlbiA0LTYgbWludXRlc1xuXHRcdC8vIHRoZSByYW5nZSB3aWxsIGJlIDgwJSAtIDEyMCVcblx0XHRjb25zdCByYW5kb21GYWN0b3IgPSAwLjggKyAwLjQgKiBNYXRoLnJhbmRvbSgpO1xuXHRcdGNvbnN0IHJhbmRvbWl6ZWRUaW1lb3V0ID0gcmFuZG9tRmFjdG9yICogdGhpcy5wbHVnaW4uc2V0dGluZ3MuaWRsZVRhbGtGcmVxdWVuY3kgKiA2MDAwMDtcblxuXHRcdGlmICh0aGlzLmlkbGVUaW1lb3V0KSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuaWRsZVRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdHRoaXMuaWRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tb2RlID09PSBHcmFuaXRlTW9kZS5XUklUSU5HKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zYXlTb21ldGhpbmcoZmFsc2UpO1xuXHRcdFx0dGhpcy5zdGFydE5leHRJZGxlVGltZW91dCgpO1xuXHRcdH0sIHJhbmRvbWl6ZWRUaW1lb3V0KTtcblx0fVxuXG5cdGFzeW5jIHNheVNvbWV0aGluZyhwZXJzaXN0ZW50OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuc3RhdGUgIT09IEdyYW5pdGVTdGF0ZS5WSVNJQkxFKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcXVvdGU6IHN0cmluZyA9IHRoaXMucXVvdGVzLmdldFF1b3RlKCk7XG5cblx0XHR0aGlzLmdyYW5pdGVFbC5zZXRBdHRyKCdhcmlhLWxhYmVsJywgcXVvdGUpO1xuXHRcdHRoaXMuZ3Jhbml0ZUVsLnNldEF0dHIoJ2FyaWEtbGFiZWwtcG9zaXRpb24nLCAndG9wJyk7XG5cdFx0dGhpcy5ncmFuaXRlRWwuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VvdmVyJywgeyBidWJibGVzOiB0cnVlLCBjbGllbnRYOiAxMCwgY2xpZW50WTogMTAgfSkpO1xuXG5cdFx0aWYgKHRoaXMubW9kZSA9PT0gR3Jhbml0ZU1vZGUuV1JJVElORykge1xuXHRcdFx0dGhpcy5hbmltYXRpb25zLnBsYXkodGhpcy5pbWFnZUVsLCBBbmltYXRpb25UeXBlLkFOR1JZX01PVElPTik7XG5cblx0XHRcdGF3YWl0IHNsZWVwKDEwMDApO1xuXG5cdFx0XHR0aGlzLmFuaW1hdGlvbnMucGxheSh0aGlzLmltYWdlRWwsIEFuaW1hdGlvblR5cGUuRElTQVBQT0lOVF9JTUcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbnMucGxheSh0aGlzLmltYWdlRWwsIEFuaW1hdGlvblR5cGUuTE9PS19NT1RJT04pO1xuXHRcdH1cblxuXHRcdGlmICghcGVyc2lzdGVudCkge1xuXHRcdFx0YXdhaXQgc2xlZXAoQlVCQkxFX0RVUkFUSU9OKTtcblxuXHRcdFx0dGhpcy5ncmFuaXRlRWwuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VvdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNsaWVudFg6IDEwLCBjbGllbnRZOiAxMCB9KSk7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbnMucGxheSh0aGlzLmltYWdlRWwsIEFuaW1hdGlvblR5cGUuSURMRV9NT1RJT04pO1xuXHRcdH1cblx0fVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUFpQzs7O0FDQWpDLHNCQUErQztBQWlCeEMsSUFBTSxtQkFBb0M7QUFBQSxFQUNoRCxpQkFBaUI7QUFBQSxFQUNqQixtQkFBbUI7QUFBQSxFQUNuQix3QkFBd0I7QUFDekI7QUFFTyxJQUFNLHFCQUFOLGNBQWlDLGlDQUFpQjtBQUFBLEVBR3hELFlBQVksS0FBVSxRQUF1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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL1NldHRpbmcudHMiLCAic3JjL0FuaW1hdGlvbnMudHMiLCAic3JjL3F1b3Rlcy9RdW90ZXMudHMiLCAic3JjL1F1b3RlTWFuYWdlci50cyIsICJzcmMvR3Jhbml0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZGVib3VuY2UsIFBsdWdpbiB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IEFuaW1hdGlvblNvdXJjZVR5cGUsIERFRkFVTFRfU0VUVElOR1MsIEdyYW5pdGVTZXR0aW5ncywgR3Jhbml0ZVNldHRpbmdzVGFiIH0gZnJvbSAnLi9TZXR0aW5nJztcbmltcG9ydCB7IEdyYW5pdGUgfSBmcm9tICcuL0dyYW5pdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcmFuaXRlUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IEdyYW5pdGVTZXR0aW5ncztcblx0Z3Jhbml0ZTogR3Jhbml0ZTtcblxuXHRhc3luYyBvbmxvYWQoKSB7XG5cdFx0Y29uc29sZS5sb2coJ2dyYW5pdGUgfCBsb2FkJyk7XG5cblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuXG5cdFx0dGhpcy5ncmFuaXRlID0gbmV3IEdyYW5pdGUodGhpcyk7XG5cblx0XHR0aGlzLmFkZENvbW1hbmQoe1xuXHRcdFx0aWQ6ICdzaG93Jyxcblx0XHRcdG5hbWU6ICdTaG93IEdyYW5pdGUnLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5ncmFuaXRlLmFwcGVhcigpO1xuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XG5cdFx0XHRpZDogJ2hpZGUnLFxuXHRcdFx0bmFtZTogJ0hpZGUgR3Jhbml0ZScsXG5cdFx0XHRjYWxsYmFjazogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdyYW5pdGUuZGlzYXBwZWFyKCk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiAnZW50ZXItd3JpdGluZy1tb2RlJyxcblx0XHRcdG5hbWU6ICdFbnRlciB3cml0aW5nIG1vZGUnLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5ncmFuaXRlLmVudGVyV3JpdGluZ01vZGUoKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkZENvbW1hbmQoe1xuXHRcdFx0aWQ6ICdsZWF2ZS13cml0aW5nLW1vZGUnLFxuXHRcdFx0bmFtZTogJ0xlYXZlIHdyaXRpbmcgbW9kZScsXG5cdFx0XHRjYWxsYmFjazogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdyYW5pdGUubGVhdmVXcml0aW5nTW9kZSgpO1xuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdC8vIFRoaXMgYWRkcyBhIHNldHRpbmdzIHRhYiBzbyB0aGUgdXNlciBjYW4gY29uZmlndXJlIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGx1Z2luXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBHcmFuaXRlU2V0dGluZ3NUYWIodGhpcy5hcHAsIHRoaXMpKTtcblxuXHRcdC8vIGRlYm91bmNlIGVkaXRvci1jaGFuZ2UgZXZlbnQgb24gd29ya3NwYWNlXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KFxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFxuXHRcdFx0XHQnZWRpdG9yLWNoYW5nZScsXG5cdFx0XHRcdGRlYm91bmNlKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmdyYW5pdGUub25FZGl0b3JDaGFuZ2UoKTtcblx0XHRcdFx0fSwgNTAwKSxcblx0XHRcdCksXG5cdFx0KTtcblxuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KCgpID0+IHRoaXMuZ3Jhbml0ZS5hcHBlYXIoKSk7XG5cdH1cblxuXHRvbnVubG9hZCgpIHtcblx0XHRjb25zb2xlLmxvZygnZ3Jhbml0ZSB8IHVubG9hZCcpO1xuXG5cdFx0dGhpcy5ncmFuaXRlLmRpc2FwcGVhcigpO1xuXHR9XG5cblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xuXG5cdFx0Ly8gbWlncmF0aW9uc1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5hbmltYXRpb25Tb3VyY2UgPT09ICdkcmFnb24nKSB7XG5cdFx0XHR0aGlzLnNldHRpbmdzLmFuaW1hdGlvblNvdXJjZSA9IEFuaW1hdGlvblNvdXJjZVR5cGUuRFJBS0U7XG5cdFx0fVxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpcy5zZXR0aW5ncy5hbmltYXRpb25Tb3VyY2UgPT09ICdvcmlnaW5hbCcpIHtcblx0XHRcdHRoaXMuc2V0dGluZ3MuYW5pbWF0aW9uU291cmNlID0gQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWTtcblx0XHR9XG5cblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHR9XG5cblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG5cdH1cbn1cbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgR3Jhbml0ZVBsdWdpbiBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgZW51bSBBbmltYXRpb25Tb3VyY2VUeXBlIHtcblx0R0VNTVkgPSAnZ2VtbXknLFxuXHREUkFLRSA9ICdkcmFrZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3Jhbml0ZVNldHRpbmdzIHtcblx0Ly8gQWRkIHRoZSBhbmltYXRpb25Tb3VyY2UgcHJvcGVydHkgdG8gdGhlIHNldHRpbmdzIGludGVyZmFjZVxuXHRhbmltYXRpb25Tb3VyY2U6IEFuaW1hdGlvblNvdXJjZVR5cGU7XG5cdC8vIGhvdyBvZnRlbiBkb2VzIEdyYW5pdGUgdGFsayBpbiBpZGxlIG1vZGUsIGluIG1pbnV0ZXNcblx0aWRsZVRhbGtGcmVxdWVuY3k6IG51bWJlcjtcblx0Ly8gdGhlIG51bWJlciBvZiBtaW51dGVzIHlvdSBtdXN0IHdyaXRlIGJlZm9yZSBHcmFuaXRlIGFwcGVhcnMgdG8gbW9jayB5b3Vcblx0d3JpdGluZ01vZGVHcmFjZVBlcmlvZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogR3Jhbml0ZVNldHRpbmdzID0ge1xuXHRhbmltYXRpb25Tb3VyY2U6IEFuaW1hdGlvblNvdXJjZVR5cGUuR0VNTVksXG5cdGlkbGVUYWxrRnJlcXVlbmN5OiAxLFxuXHR3cml0aW5nTW9kZUdyYWNlUGVyaW9kOiAxLFxufTtcblxuZXhwb3J0IGNsYXNzIEdyYW5pdGVTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwbHVnaW46IEdyYW5pdGVQbHVnaW47XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogR3Jhbml0ZVBsdWdpbikge1xuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuXG5cdGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcblxuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdBbmltYXRpb24gU291cmNlJylcblx0XHRcdC5zZXREZXNjKCdDaG9vc2UgdGhlIHNvdXJjZSBvZiBHcmFuaXRlIGFuaW1hdGlvbnMuJylcblx0XHRcdC5hZGREcm9wZG93bihkcm9wZG93biA9PlxuXHRcdFx0XHRkcm9wZG93blxuXHRcdFx0XHRcdC5hZGRPcHRpb24oQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWSwgJ0dlbW15Jylcblx0XHRcdFx0XHQuYWRkT3B0aW9uKEFuaW1hdGlvblNvdXJjZVR5cGUuRFJBS0UsICdEcmFrZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmFuaW1hdGlvblNvdXJjZSlcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgdmFsdWUgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gRXhwbGljaXRseSBjYXN0IHRoZSB2YWx1ZSB0byB0aGUgY29ycmVjdCB0eXBlXG5cdFx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25Tb3VyY2UgPSB2YWx1ZSBhcyBBbmltYXRpb25Tb3VyY2VUeXBlO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYW5pbWF0aW9uU291cmNlID0gYW5pbWF0aW9uU291cmNlO1xuXG5cdFx0XHRcdFx0XHQvLyBTaG93IEdyYW5pdGUgd2l0aCB0aGUgbmV3IGFuaW1hdGlvbnMgYWZ0ZXIgY2hhbmdpbmcgdGhlIHNvdXJjZVxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uZ3Jhbml0ZS5yZXNldCgpO1xuXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdJZGxlIHRhbGsgZnJlcXVlbmN5Jylcblx0XHRcdC5zZXREZXNjKCdIb3cgb2Z0ZW4gZG9lcyBHcmFuaXRlIHNwZWFrIHdoZW4gaWRsZSwgaW4gbWludXRlcy4nKVxuXHRcdFx0LmFkZFNsaWRlcihzbGlkZXIgPT5cblx0XHRcdFx0c2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cyg1LCA2MCwgNSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaWRsZVRhbGtGcmVxdWVuY3kpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgdmFsdWUgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuaWRsZVRhbGtGcmVxdWVuY3kgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0KTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1dyaXRpbmcgbW9kZSBncmFjZSBwZXJpb2QnKVxuXHRcdFx0LnNldERlc2MoJ0hvdyBzb29uIEdyYW5pdGUgc3RhcnRzIHRvIGdldCBkaXNhcHBvaW50ZWQgYWZ0ZXIgeW91IHN0b3AgdHlpbmcgaW4gd3JpdGluZyBtb2RlLCBpbiBzZWNvbmRzLicpXG5cdFx0XHQuYWRkU2xpZGVyKHNsaWRlciA9PlxuXHRcdFx0XHRzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDUsIDE4MCwgNSlcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy53cml0aW5nTW9kZUdyYWNlUGVyaW9kKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyB2YWx1ZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy53cml0aW5nTW9kZUdyYWNlUGVyaW9kID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdH1cbn1cbiIsICJpbXBvcnQgR3Jhbml0ZVBsdWdpbiBmcm9tICcuL21haW4nO1xuaW1wb3J0IHsgQW5pbWF0aW9uU291cmNlVHlwZSB9IGZyb20gJy4vU2V0dGluZyc7XG5cbi8vIE9yaWdpbmFsIEFuaW1hdGlvbnNcbmltcG9ydCBFTUVSR0VfTU9USU9OX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfZW1lcmdlLmdpZic7XG5pbXBvcnQgUE9QX01PVElPTl9HRU1NWSBmcm9tICcuLi9hbmltYXRpb25zL2dlbW15L2dlbW15X3BvcC5naWYnO1xuaW1wb3J0IERJU0FQUEVBUl9NT1RJT05fR0VNTVkgZnJvbSAnLi4vYW5pbWF0aW9ucy9nZW1teS9nZW1teV9kaXNhcHBlYXIuZ2lmJztcbmltcG9ydCBBTkdSWV9NT1RJT05fR0VNTVkgZnJvbSAnLi4vYW5pbWF0aW9ucy9nZW1teS9nZW1teV9hbmdyeS5naWYnO1xuaW1wb3J0IExPT0tfTU9USU9OX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfbG9va0Fyb3VuZC5naWYnO1xuaW1wb3J0IElETEVfTU9USU9OX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfaWRsZS5naWYnO1xuaW1wb3J0IERJU0FQUE9JTlRfSU1HX0dFTU1ZIGZyb20gJy4uL2FuaW1hdGlvbnMvZ2VtbXkvZ2VtbXlfZGlzYXBwb2ludC5naWYnO1xuXG4vLyBEcmFjb25pYyBBbmltYXRpb25zXG5pbXBvcnQgRU1FUkdFX01PVElPTl9EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2VtZXJnZS5naWYnO1xuaW1wb3J0IFBPUF9NT1RJT05fRFJBS0UgZnJvbSAnLi4vYW5pbWF0aW9ucy9kcmFrZS9kcmFrZV9wb3AuZ2lmJztcbmltcG9ydCBESVNBUFBFQVJfTU9USU9OX0RSQUtFIGZyb20gJy4uL2FuaW1hdGlvbnMvZHJha2UvZHJha2VfZGlzYXBwZWFyLmdpZic7XG5pbXBvcnQgQU5HUllfTU9USU9OX0RSQUtFIGZyb20gJy4uL2FuaW1hdGlvbnMvZHJha2UvZHJha2VfYW5ncnkuZ2lmJztcbmltcG9ydCBMT09LX01PVElPTl9EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2xvb2tBcm91bmQuZ2lmJztcbmltcG9ydCBJRExFX01PVElPTl9EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2lkbGUuZ2lmJztcbmltcG9ydCBESVNBUFBPSU5UX0lNR19EUkFLRSBmcm9tICcuLi9hbmltYXRpb25zL2RyYWtlL2RyYWtlX2Rpc2FwcG9pbnQuZ2lmJztcblxuZXhwb3J0IGVudW0gQW5pbWF0aW9uVHlwZSB7XG5cdEVNRVJHRSA9ICdlbWVyZ2UnLFxuXHRQT1BfTU9USU9OID0gJ3BvcF9tb3Rpb24nLFxuXHRESVNBUFBFQVJfTU9USU9OID0gJ2Rpc2FwcGVhcl9tb3Rpb24nLFxuXHRBTkdSWV9NT1RJT04gPSAnYW5ncnlfbW90aW9uJyxcblx0TE9PS19NT1RJT04gPSAnbG9va19tb3Rpb24nLFxuXHRJRExFX01PVElPTiA9ICdpZGxlX21vdGlvbicsXG5cdERJU0FQUE9JTlRfSU1HID0gJ2Rpc2FwcG9pbnRfaW5nJyxcbn1cblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbnMge1xuXHRwdWJsaWMgcmVhZG9ubHkgcGx1Z2luOiBHcmFuaXRlUGx1Z2luO1xuXG5cdC8vIHRoZSBtYXBwaW5ncyBmcm9tIGFuIGFuaW1hdGlvbiB0eXBlIHRvIGFuIGFjdHVhbCBpbWFnZSBmaWxlIGZvciB0aGUgZHJha2VsaW5nXG5cdHB1YmxpYyByZWFkb25seSBkcmFrZUFuaW1hdGlvbk1hcDogUmVjb3JkPEFuaW1hdGlvblR5cGUsIHN0cmluZz47XG5cdC8vIHRoZSBtYXBwaW5ncyBmcm9tIGFuIGFuaW1hdGlvbiB0eXBlIHRvIGFuIGFjdHVhbCBpbWFnZSBmaWxlIGZvciB0aGUgZ3Jhbml0ZVxuXHRwdWJsaWMgcmVhZG9ubHkgZ2VtbXlBbmltYXRpb25NYXA6IFJlY29yZDxBbmltYXRpb25UeXBlLCBzdHJpbmc+O1xuXG5cdC8vIG1hcHMgYW4gYW5pbWF0aW9uIHNvdXJjZSB0byB0aGUgY29ycmVzcG9uZGluZyBhbmltYXRpb24gbWFwXG5cdHB1YmxpYyByZWFkb25seSBhbmltYXRpb25Tb3VyY2VNYXA6IFJlY29yZDxBbmltYXRpb25Tb3VyY2VUeXBlLCBSZWNvcmQ8QW5pbWF0aW9uVHlwZSwgc3RyaW5nPj47XG5cblx0Y29uc3RydWN0b3IocGx1Z2luOiBHcmFuaXRlUGx1Z2luKSB7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cblx0XHR0aGlzLmRyYWtlQW5pbWF0aW9uTWFwID0ge1xuXHRcdFx0W0FuaW1hdGlvblR5cGUuRU1FUkdFXTogRU1FUkdFX01PVElPTl9EUkFLRSxcblx0XHRcdFtBbmltYXRpb25UeXBlLlBPUF9NT1RJT05dOiBQT1BfTU9USU9OX0RSQUtFLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuRElTQVBQRUFSX01PVElPTl06IERJU0FQUEVBUl9NT1RJT05fRFJBS0UsXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5BTkdSWV9NT1RJT05dOiBBTkdSWV9NT1RJT05fRFJBS0UsXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5MT09LX01PVElPTl06IExPT0tfTU9USU9OX0RSQUtFLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuSURMRV9NT1RJT05dOiBJRExFX01PVElPTl9EUkFLRSxcblx0XHRcdFtBbmltYXRpb25UeXBlLkRJU0FQUE9JTlRfSU1HXTogRElTQVBQT0lOVF9JTUdfRFJBS0UsXG5cdFx0fTtcblxuXHRcdHRoaXMuZ2VtbXlBbmltYXRpb25NYXAgPSB7XG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5FTUVSR0VdOiBFTUVSR0VfTU9USU9OX0dFTU1ZLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuUE9QX01PVElPTl06IFBPUF9NT1RJT05fR0VNTVksXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5ESVNBUFBFQVJfTU9USU9OXTogRElTQVBQRUFSX01PVElPTl9HRU1NWSxcblx0XHRcdFtBbmltYXRpb25UeXBlLkFOR1JZX01PVElPTl06IEFOR1JZX01PVElPTl9HRU1NWSxcblx0XHRcdFtBbmltYXRpb25UeXBlLkxPT0tfTU9USU9OXTogTE9PS19NT1RJT05fR0VNTVksXG5cdFx0XHRbQW5pbWF0aW9uVHlwZS5JRExFX01PVElPTl06IElETEVfTU9USU9OX0dFTU1ZLFxuXHRcdFx0W0FuaW1hdGlvblR5cGUuRElTQVBQT0lOVF9JTUddOiBESVNBUFBPSU5UX0lNR19HRU1NWSxcblx0XHR9O1xuXG5cdFx0dGhpcy5hbmltYXRpb25Tb3VyY2VNYXAgPSB7XG5cdFx0XHRbQW5pbWF0aW9uU291cmNlVHlwZS5EUkFLRV06IHRoaXMuZHJha2VBbmltYXRpb25NYXAsXG5cdFx0XHRbQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWV06IHRoaXMuZ2VtbXlBbmltYXRpb25NYXAsXG5cdFx0fTtcblxuXHRcdGNvbnNvbGUubG9nKCdncmFuaXRlIHwgYnVpbGQgYW5pbWF0aW9uIG1hcCcsIHRoaXMuYW5pbWF0aW9uU291cmNlTWFwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQbGF5cyBhIGdyYW5pdGUgYW5pbWF0aW9uIGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYW5pbWF0aW9uIHNvdXJjZSB0eXBlIGluc2lkZSBhbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZWwgdGhlIGVsZW1lbnQgdG8gcGxheSB0aGUgYW5pbWF0aW9uIGluXG5cdCAqIEBwYXJhbSBhbmltYXRpb24gdGhlIGFuaW1hdGlvbiB0byBwbGF5XG5cdCAqL1xuXHRwdWJsaWMgcGxheShlbDogSFRNTEVsZW1lbnQsIGFuaW1hdGlvbjogQW5pbWF0aW9uVHlwZSk6IHZvaWQge1xuXHRcdGNvbnN0IGFuaW1hdGlvbkZpbGUgPSB0aGlzLmFuaW1hdGlvblNvdXJjZU1hcFt0aGlzLnBsdWdpbi5zZXR0aW5ncy5hbmltYXRpb25Tb3VyY2VdW2FuaW1hdGlvbl07XG5cblx0XHRlbC5zZXRBdHRyaWJ1dGUoJ3NyYycsIGFuaW1hdGlvbkZpbGUpO1xuXHR9XG59XG4iLCAiZXhwb3J0IGludGVyZmFjZSBRdW90ZXMge1xuXHQvLyBnZW5lcmFsIHF1b3RlcyBjYW4gYXBwZWFyIGJvdGggaW4gbm9ybWFsIGFuZCBpbiB3cml0aW5nIG1vZGVcblx0Z2VuZXJhbDogc3RyaW5nW107XG5cdC8vIGlkbGUgcXVvdGVzIGNhbiBvbmx5IGFwcGVhciBpbiBub3JtYWwgbW9kZVxuXHRpZGxlOiBzdHJpbmdbXTtcblx0Ly8gd3JpdGluZyBtb2RlIHF1b3RlcyBjYW4gb25seSBhcHBlYXIgaW4gd3JpdGluZyBtb2RlXG5cdHdyaXRpbmdNb2RlOiBzdHJpbmdbXTtcbn1cblxuLy8gdGhlc2UgcXVvdGVzIGNhbiBhcHBlYXIgaW4gZXZlcnkgYW5pbWF0aW9uIG1vZGVcbmV4cG9ydCBjb25zdCBHUkFOSVRFX0JBU0VfUVVPVEVTOiBRdW90ZXMgPSB7XG5cdGdlbmVyYWw6IFtdLFxuXHRpZGxlOiBbXG5cdFx0XCJZb3UgY2FuJ3QgYXJyZXN0IHVzISBXZSBhbHJlYWR5IGF0ZSB0aGUgZXZpZGVuY2UhXCIsXG5cdFx0XCJEb24ndCBldmVyIHNwbGl0IHRoZSBwYXJ0eSFcIixcblx0XHQnSWYgeW91IGtpbGwgYSBoaXZlIG1pbmQsIGlzIHRoYXQgbXVyZGVyIG9yIGdlbm9jaWRlPycsXG5cdFx0J1JvbGwgaW5pdGlhdGl2ZSEnLFxuXHRcdCdZb3UgY2FuIHRyeSEnLFxuXHRcdFwiSSdtIG5vdCBzaG9ydCwgSSdtIGNvbmNlbnRyYXRlZCBhd2Vzb21lLlwiLFxuXHRcdFwiSSdtIG5vdCBncmVlZHksIEknbSBqdXN0IGFsbGVyZ2ljIHRvIHBvdmVydHkuXCIsXG5cdFx0XCJJIGRvbid0IGFsd2F5cyBjYXN0IHNwZWxscywgYnV0IHdoZW4gSSBkbywgaXQncyBmaXJlYmFsbC5cIixcblx0XHRcIkkgZG9uJ3QgbmVlZCBsdWNrLCBJIGhhdmUgYSBoaWdoIGNoYXJpc21hIHN0YXQuXCIsXG5cdFx0XCJJIGRvbid0IGFsd2F5cyBkcmluayBhbGUsIGJ1dCB3aGVuIEkgZG8sIGl0J3Mgd2l0aCBteSBmZWxsb3cgYWR2ZW50dXJlcnMgYWZ0ZXIgc2xheWluZyBhIGRyYWdvbi5cIixcblx0XHRcIkkgZG9uJ3QgYWx3YXlzIHJvbGwgYSBjcml0aWNhbCBoaXQsIGJ1dCB3aGVuIEkgZG8sIHRoZSBETSBmb3JnZXRzIHRvIG1ha2UgbWUgcmVyb2xsIHRoZSBkYW1hZ2UuXCIsXG5cdFx0J0kgbWF5IGJlIGNoYW90aWMgbmV1dHJhbCBvbiBwYXBlciwgYnV0IGluIHJlYWxpdHksIEkganVzdCBsaWtlIHRvIHdhdGNoIHRoZSB3b3JsZCBidXJuLicsXG5cdFx0J0l0XHUyMDE5cyBub3Qgc3RlYWxpbmcgaWYgaXQgYmVsb25ncyB0byBhIGRlYWQgZ3V5LicsXG5cdFx0J1dobyBuZWVkcyBhbiBhcm15IHdoZW4geW91IGhhdmUgYSBiYWcgb2YgaG9sZGluZyBmdWxsIG9mIHJvY2tzPycsXG5cdFx0J0xldCBtZSBzaG93IHlvdSBob3cgdG8gd2VhciBhIHNuYWtlLicsXG5cdFx0J1dIWSBXT1VMRCBZT1UgRE8gVEhBVCEnLFxuXHRcdCdUaGF0IGRpY2UgbmVlZHMgdG8gYmUgcmV0aXJlZCEnLFxuXHRcdFwiSSBkb24ndCBraWxsIHdpdGhvdXQgcmVhc29uLiBGb3J0dW5hdGVseSwgSSdtIGJvcmVkLiBSZWFzb24gZW5vdWdoIVwiLFxuXHRcdCdBaCwgbXkgZmF2b3VyZWQgZW5lbXkuIFNvbWV0aGluZyBhbGl2ZS4nLFxuXHRcdFwiSSBzbGFwIHRoZSBiYXJyZWwgd2l0aCBteSBtZW1iZXIhLi4uIHRoZSAnYmFycmVsJyBvcGVuJ3MgaXRzIG1vdXRoIVwiLFxuXHRcdFwiSSdtIG5vdCBkZXByaXZlZCwgSSdtIGRlcHJhdmVkLlwiLFxuXHRcdCdZb3UgbmVlZCBhIGZyZWUgaGFuZCB0byBhdHRlbXB0IGEgZ3JhcHBsZScsXG5cdFx0YENhcmVmdWwgaG93IG11Y2ggeW91IGNhcnJ5OyB0aGUgR00gbWlnaHQgYWN0dWFsbHkgYXNrIHlvdSB0byBjYWxjdWxhdGUgeW91ciBpbnZlbnRvcnkgd2VpZ2h0IWAsXG5cdFx0YERvbid0IGRvIHRoYXQhIFRoZW4gd2UnbGwgaGF2ZSB0byBnbyBsb29rIHVwIHRoZSBncmFwcGxlIHJ1bGVzIWAsXG5cdFx0YDUwIHBhZ2UgYmFja3N0b3J5Li4uIE5PUEVgLFxuXHRcdGBJdCdzIGFzdG91bmRpbmcgYW55b25lIGNhbiB1bmRlcnN0YW5kIHlvdSwgd2l0aCBhbGwgdGhvc2UgTmF0IDEgQ2hhcmlzbWEgcm9sbHMuYCxcblx0XHRgVGhlIGNoZWRkYXIgbW9ua3MgYXJlIGhlcmUgdG8gc2F2ZSB0aGUgZGF5IWAsXG5cdFx0YFlvdSd2ZSBiZWVuIEd5Z2F4ZWQuYCxcblx0XHRgU1RFUCBBV0FZIEZST00gVEhFIFBVUkNIQVNFIE1PUkUgRElDRSBCVVRUT05gLFxuXHRcdGBBZnRlciB0aG91c2FuZHMgb2YgeWVhcnMsIEkgaGF2ZSBhdHRhaW5lZCBteSBjdXJyZW50IHN0YXRlLCB3aGlsZSB5b3Ugc3RydWdnbGUgdG8gY29tcGxldGUgdGhpcyBzaW1wbGUgbm90ZS5gLFxuXHRcdGBZb3UgYXJlIGEgYmFja2dyb3VuZCBjaGFyYWN0ZXIgaW4geW91ciBvd24gbGlmZS5gLFxuXHRdLFxuXHR3cml0aW5nTW9kZTogW1xuXHRcdGBQbGF5ZXIncyBkb250IHRha2Ugbm90ZXMuLi4gbWF5YmUgeW91IHNob3VsZCB0cnkgdGhhdD9gLFxuXHRcdGBJcyB0aGF0IHRoZSBiZXN0IHlvdSBjYW4gZG8/IEtlZXAgd3JpdGluZyFgLFxuXHRcdGBXcml0ZSBmaXJzdCwgZWRpdG9yIGxhdGVyLmAsXG5cdFx0YEFJIGNvdWxkIHByb2JhYmx5IHdyaXRlIGEgYmV0dGVyIG5vdGUuLi5gLFxuXHRcdGBJIGxvdmUgaGVhcmluZyB5b3VyIGtleWJvYXJkLiBEb24ndCBzdG9wLmAsXG5cdFx0YEhvdyBhYm91dCB3ZSByZXZpZXcgc29tZSBvbGQgbm90ZXMgdG9kYXk/YCxcblx0XHRgV2h5IG5vdCBqdXN0IHVzZSBhIHRlbXBsYXRlP2AsXG5cdFx0YERvZXNuJ3QgbWF0dGVyIGhvdyBtdWNoIHlvdSBwbGFuLi4uIHRoZXkgd2lsbCBkZXJhaWwgYW55d2F5IWAsXG5cdFx0YE1heWJlIGl0J3MgdGltZSB0byBnbyBnZXQgc29tZSB3YXRlciBvciBjb2ZmZWUuYCxcblx0XHRgVGhhdCdzIG5vdCBob3cgcml2ZXJzIGFyZSBpbiByZWFsLWxpZmUuLi5gLFxuXHRcdGBBbnl0aGluZyBpcyBiZXR0ZXIgdGhhbiBhIGJsYW5rIHBhZ2UsIGV2ZW4gbWUuIFdyaXRlIHNvbWV0aGluZyFgLFxuXHRcdGBIYXZlIHlvdSBnaXZlbiBvdXQgSW5zcGlyYXRpb24gcmVjZW50bHk/YCxcblx0XHRgQ2FsbCBtZSBKZWV2ZXMuIEkuIERhcmUuIFlvdS5gLFxuXHRcdGBJIGNhc3QgJ1N1bW1vbiBCaWdnZXIgRmlzaGAsXG5cdFx0YERvIHlvdSB0b3VjaCBpdD9gLFxuXHRcdGBXaGF0IHdvdWxkIE1hdHQgTWVyY2VyIGRvP2AsXG5cdFx0YFRvIGNvbnRpbnVlLCBwbGVhc2UgaW5zZXJ0IG1vcmUgY3JlZGl0c2AsXG5cdFx0YEhhdmUgeW91IGNvbnNpZGVyZWQganVzdC4uLiBOb3Q/YCxcblx0XSxcbn07XG5cbmV4cG9ydCBjb25zdCBHRU1NWV9FWENMVVNJVkVfUVVPVEVTOiBRdW90ZXMgPSB7XG5cdGdlbmVyYWw6IFtdLFxuXHRpZGxlOiBbXG5cdFx0YFlvdSBwb29waW5nP2AsXG5cdF0sXG5cdHdyaXRpbmdNb2RlOiBbXSxcbn07XG5cbmV4cG9ydCBjb25zdCBEUkFLRV9FWENMVVNJVkVfUVVPVEVTOiBRdW90ZXMgPSB7XG5cdGdlbmVyYWw6IFtdLFxuXHRpZGxlOiBbXSxcblx0d3JpdGluZ01vZGU6IFtdLFxufTtcbiIsICJpbXBvcnQgR3Jhbml0ZVBsdWdpbiBmcm9tICcuL21haW4nO1xuaW1wb3J0IHsgQW5pbWF0aW9uU291cmNlVHlwZSB9IGZyb20gJy4vU2V0dGluZyc7XG5pbXBvcnQgeyBHcmFuaXRlTW9kZSwgR3Jhbml0ZVN0YXRlIH0gZnJvbSAnLi9HcmFuaXRlJztcbmltcG9ydCB7IERSQUtFX0VYQ0xVU0lWRV9RVU9URVMsIEdFTU1ZX0VYQ0xVU0lWRV9RVU9URVMsIEdSQU5JVEVfQkFTRV9RVU9URVMsIFF1b3RlcyB9IGZyb20gJy4vcXVvdGVzL1F1b3Rlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdW90ZU1hbmFnZXIge1xuXHRwdWJsaWMgcmVhZG9ubHkgcGx1Z2luOiBHcmFuaXRlUGx1Z2luO1xuXG5cdHB1YmxpYyByZWFkb25seSBxdW90ZU1hcDogUmVjb3JkPEFuaW1hdGlvblNvdXJjZVR5cGUsIFJlY29yZDxHcmFuaXRlTW9kZSwgc3RyaW5nW10+PjtcblxuXHRjb25zdHJ1Y3RvcihwbHVnaW46IEdyYW5pdGVQbHVnaW4pIHtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblxuXHRcdHRoaXMucXVvdGVNYXAgPSB7XG5cdFx0XHRbQW5pbWF0aW9uU291cmNlVHlwZS5HRU1NWV06IHtcblx0XHRcdFx0W0dyYW5pdGVNb2RlLklETEVdOiB0aGlzLmdldElkbGVRdW90ZXMoR0VNTVlfRVhDTFVTSVZFX1FVT1RFUyksXG5cdFx0XHRcdFtHcmFuaXRlTW9kZS5XUklUSU5HXTogdGhpcy5nZXRXcml0aW5nUXVvdGVzKEdFTU1ZX0VYQ0xVU0lWRV9RVU9URVMpLFxuXHRcdFx0fSxcblx0XHRcdFtBbmltYXRpb25Tb3VyY2VUeXBlLkRSQUtFXToge1xuXHRcdFx0XHRbR3Jhbml0ZU1vZGUuSURMRV06IHRoaXMuZ2V0SWRsZVF1b3RlcyhEUkFLRV9FWENMVVNJVkVfUVVPVEVTKSxcblx0XHRcdFx0W0dyYW5pdGVNb2RlLldSSVRJTkddOiB0aGlzLmdldFdyaXRpbmdRdW90ZXMoRFJBS0VfRVhDTFVTSVZFX1FVT1RFUyksXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRjb25zb2xlLmxvZygnZ3Jhbml0ZSB8IGJ1aWxkIHF1b3RlIG1hcCcsIHRoaXMucXVvdGVNYXApO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRJZGxlUXVvdGVzKGV4Y2x1c2l2ZVF1b3RlczogUXVvdGVzKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbLi4uR1JBTklURV9CQVNFX1FVT1RFUy5nZW5lcmFsLCAuLi5HUkFOSVRFX0JBU0VfUVVPVEVTLmlkbGUsIC4uLmV4Y2x1c2l2ZVF1b3Rlcy5nZW5lcmFsLCAuLi5leGNsdXNpdmVRdW90ZXMuaWRsZV07XG5cdH1cblxuXHRwcml2YXRlIGdldFdyaXRpbmdRdW90ZXMoZXhjbHVzaXZlUXVvdGVzOiBRdW90ZXMpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIFsuLi5HUkFOSVRFX0JBU0VfUVVPVEVTLmdlbmVyYWwsIC4uLkdSQU5JVEVfQkFTRV9RVU9URVMud3JpdGluZ01vZGUsIC4uLmV4Y2x1c2l2ZVF1b3Rlcy5nZW5lcmFsLCAuLi5leGNsdXNpdmVRdW90ZXMud3JpdGluZ01vZGVdO1xuXHR9XG5cblx0cHVibGljIGdldFF1b3RlKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcXVvdGVzOiBzdHJpbmdbXSA9IHRoaXMucXVvdGVNYXBbdGhpcy5wbHVnaW4uc2V0dGluZ3MuYW5pbWF0aW9uU291cmNlXVt0aGlzLnBsdWdpbi5ncmFuaXRlLm1vZGVdO1xuXG5cdFx0cmV0dXJuIHF1b3Rlc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBxdW90ZXMubGVuZ3RoKV07XG5cdH1cbn1cbiIsICJpbXBvcnQgeyBBbmltYXRpb25zLCBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi9BbmltYXRpb25zJztcbmltcG9ydCBHcmFuaXRlUGx1Z2luIGZyb20gJy4vbWFpbic7XG5pbXBvcnQgeyBRdW90ZU1hbmFnZXIgfSBmcm9tICcuL1F1b3RlTWFuYWdlcic7XG5cbmNvbnN0IEJVQkJMRV9EVVJBVElPTjogbnVtYmVyID0gNTAwMDtcblxuZXhwb3J0IGVudW0gR3Jhbml0ZU1vZGUge1xuXHRJRExFID0gJ0lETEUnLFxuXHRXUklUSU5HID0gJ1dSSVRJTkcnLFxufVxuXG5leHBvcnQgZW51bSBHcmFuaXRlU3RhdGUge1xuXHRWSVNJQkxFID0gJ1ZJU0lCTEUnLFxuXHRJTlZJU0lCTEUgPSAnSU5WSVNJQkxFJyxcblx0RElTQVBQRUFSSU5HID0gJ0RJU0FQUEVBUklORycsXG5cdEFQUEVBUklORyA9ICdBUFBFQVJJTkcnLFxufVxuXG5leHBvcnQgY2xhc3MgR3Jhbml0ZSB7XG5cdHB1YmxpYyByZWFkb25seSBwbHVnaW46IEdyYW5pdGVQbHVnaW47XG5cdHByaXZhdGUgcmVhZG9ubHkgYW5pbWF0aW9uczogQW5pbWF0aW9ucztcblx0cHJpdmF0ZSByZWFkb25seSBxdW90ZXM6IFF1b3RlTWFuYWdlcjtcblxuXHRncmFuaXRlRWw6IEhUTUxFbGVtZW50O1xuXHRpbWFnZUVsOiBIVE1MRWxlbWVudDtcblxuXHRzdGF0ZTogR3Jhbml0ZVN0YXRlO1xuXHRtb2RlOiBHcmFuaXRlTW9kZTtcblxuXHRpZGxlVGltZW91dDogbnVtYmVyO1xuXHR3cml0aW5nTW9kZVRpbWVvdXQ6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3RvcihwbHVnaW46IEdyYW5pdGVQbHVnaW4pIHtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblxuXHRcdHRoaXMuYW5pbWF0aW9ucyA9IG5ldyBBbmltYXRpb25zKHRoaXMucGx1Z2luKTtcblx0XHR0aGlzLnF1b3RlcyA9IG5ldyBRdW90ZU1hbmFnZXIodGhpcy5wbHVnaW4pO1xuXG5cdFx0dGhpcy5zdGF0ZSA9IEdyYW5pdGVTdGF0ZS5JTlZJU0lCTEU7XG5cdFx0dGhpcy5tb2RlID0gR3Jhbml0ZU1vZGUuSURMRTtcblxuXHRcdHRoaXMuY3JlYXRlR3Jhbml0ZUVsKCk7XG5cblx0XHR0aGlzLnN0YXJ0TmV4dElkbGVUaW1lb3V0KCk7XG5cdH1cblxuXHRjcmVhdGVHcmFuaXRlRWwoKSB7XG5cdFx0dGhpcy5ncmFuaXRlRWwgPSBjcmVhdGVEaXYoJ2dyYW5pdGUtY29udGFpbmVyJyk7XG5cdFx0dGhpcy5ncmFuaXRlRWwuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsLXBvc2l0aW9uJywgJ3RvcCcpO1xuXHRcdHRoaXMuZ3Jhbml0ZUVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbC1kZWxheScsICcwJyk7XG5cdFx0dGhpcy5ncmFuaXRlRWwuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsLWNsYXNzZXMnLCAnZ3Jhbml0ZS10b29sdGlwJyk7XG5cblx0XHR0aGlzLmltYWdlRWwgPSB0aGlzLmdyYW5pdGVFbC5jcmVhdGVFbCgnaW1nJywge30pO1xuXG5cdFx0dGhpcy5ncmFuaXRlRWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcblx0XHRcdC8vIGlnbm9yZSBtb3VzZSBldmVudHMgaW4gd3JpdGluZyBtb2RlXG5cdFx0XHRpZiAodGhpcy5tb2RlID09PSBHcmFuaXRlTW9kZS5XUklUSU5HKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zYXlTb21ldGhpbmcodHJ1ZSk7XG5cdFx0XHR0aGlzLmlkbGVUaW1lb3V0ICYmIGNsZWFyVGltZW91dCh0aGlzLmlkbGVUaW1lb3V0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZ3Jhbml0ZUVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG5cdFx0XHQvLyBpZ25vcmUgbW91c2UgZXZlbnRzIGluIHdyaXRpbmcgbW9kZVxuXHRcdFx0aWYgKHRoaXMubW9kZSA9PT0gR3Jhbml0ZU1vZGUuV1JJVElORykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5JRExFX01PVElPTik7XG5cdFx0XHR0aGlzLnN0YXJ0TmV4dElkbGVUaW1lb3V0KCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmdyYW5pdGVFbC5oaWRkZW4gPSB0cnVlO1xuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5ncmFuaXRlRWwpO1xuXHR9XG5cblx0YXN5bmMgYXBwZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLnN0YXRlID09PSBHcmFuaXRlU3RhdGUuQVBQRUFSSU5HIHx8IHRoaXMuc3RhdGUgPT09IEdyYW5pdGVTdGF0ZS5WSVNJQkxFKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gc2hvdyBoaW1cblx0XHR0aGlzLnN0YXRlID0gR3Jhbml0ZVN0YXRlLkFQUEVBUklORztcblx0XHR0aGlzLmdyYW5pdGVFbC5oaWRkZW4gPSBmYWxzZTtcblxuXHRcdC8vIFF1aWNrZXIgaWYgd2UncmUgaW4gd3JpdGluZyBtb2RlXG5cdFx0aWYgKHRoaXMubW9kZSA9PT0gR3Jhbml0ZU1vZGUuV1JJVElORykge1xuXHRcdFx0dGhpcy5hbmltYXRpb25zLnBsYXkodGhpcy5pbWFnZUVsLCBBbmltYXRpb25UeXBlLlBPUF9NT1RJT04pO1xuXG5cdFx0XHRhd2FpdCBzbGVlcCgxODAwKTtcblxuXHRcdFx0Ly8gYW5vdGhlciBhbmltYXRpb24gb3ZlcnJvZGUgdGhpcyBhbmltYXRpb24sIHNvIHdlIHF1aXRcblx0XHRcdGlmICh0aGlzLnN0YXRlICE9PSBHcmFuaXRlU3RhdGUuQVBQRUFSSU5HKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zdGF0ZSA9IEdyYW5pdGVTdGF0ZS5WSVNJQkxFO1xuXHRcdFx0dGhpcy5zYXlTb21ldGhpbmcodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5FTUVSR0UpO1xuXG5cdFx0XHRhd2FpdCBzbGVlcCgzODAwKTtcblxuXHRcdFx0Ly8gYW5vdGhlciBhbmltYXRpb24gb3ZlcnJvZGUgdGhpcyBhbmltYXRpb24sIHNvIHdlIHF1aXRcblx0XHRcdGlmICh0aGlzLnN0YXRlICE9PSBHcmFuaXRlU3RhdGUuQVBQRUFSSU5HKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zdGF0ZSA9IEdyYW5pdGVTdGF0ZS5WSVNJQkxFO1xuXHRcdFx0dGhpcy5hbmltYXRpb25zLnBsYXkodGhpcy5pbWFnZUVsLCBBbmltYXRpb25UeXBlLklETEVfTU9USU9OKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBkaXNhcHBlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZG9uJ3QgbWFrZSBncmFuaXRlIGRpc2FwcGVhciB3aGlsZSB0aGV5IGFyZSBhbHJlYWR5IGxlYXZpbmdcblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gR3Jhbml0ZVN0YXRlLkRJU0FQUEVBUklORyB8fCB0aGlzLnN0YXRlID09PSBHcmFuaXRlU3RhdGUuSU5WSVNJQkxFKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZSA9IEdyYW5pdGVTdGF0ZS5ESVNBUFBFQVJJTkc7XG5cblx0XHRpZiAodGhpcy5pZGxlVGltZW91dCkgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmlkbGVUaW1lb3V0KTtcblx0XHRpZiAodGhpcy53cml0aW5nTW9kZVRpbWVvdXQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy53cml0aW5nTW9kZVRpbWVvdXQpO1xuXG5cdFx0dGhpcy5hbmltYXRpb25zLnBsYXkodGhpcy5pbWFnZUVsLCBBbmltYXRpb25UeXBlLkRJU0FQUEVBUl9NT1RJT04pO1xuXHRcdC8vIHJlbW90ZSB0b29sdGlwXG5cdFx0dGhpcy5ncmFuaXRlRWwuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VvdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNsaWVudFg6IDEwLCBjbGllbnRZOiAxMCB9KSk7XG5cblx0XHRhd2FpdCBzbGVlcCgxMzAwKTtcblxuXHRcdC8vIGFub3RoZXIgYW5pbWF0aW9uIG92ZXJyb2RlIHRoaXMgYW5pbWF0aW9uLCBzbyB3ZSBxdWl0XG5cdFx0aWYgKHRoaXMuc3RhdGUgIT09IEdyYW5pdGVTdGF0ZS5ESVNBUFBFQVJJTkcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnN0YXRlID0gR3Jhbml0ZVN0YXRlLklOVklTSUJMRTtcblx0XHR0aGlzLmdyYW5pdGVFbC5oaWRkZW4gPSB0cnVlO1xuXHR9XG5cblx0YXN5bmMgcmVzZXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuc3RhdGUgPT09IEdyYW5pdGVTdGF0ZS5ESVNBUFBFQVJJTkcgfHwgdGhpcy5zdGF0ZSA9PT0gR3Jhbml0ZVN0YXRlLklOVklTSUJMRSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBlYXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLmFuaW1hdGlvbnMucGxheSh0aGlzLmltYWdlRWwsIEFuaW1hdGlvblR5cGUuSURMRV9NT1RJT04pO1xuXHR9XG5cblx0b25FZGl0b3JDaGFuZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubW9kZSA9PT0gR3Jhbml0ZU1vZGUuSURMRSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnN0YXRlICE9PSBHcmFuaXRlU3RhdGUuRElTQVBQRUFSSU5HICYmIHRoaXMuc3RhdGUgIT09IEdyYW5pdGVTdGF0ZS5JTlZJU0lCTEUpIHtcblx0XHRcdHRoaXMuZGlzYXBwZWFyKCk7XG5cdFx0fVxuXHRcdHRoaXMuc2V0V3JpdGluZ01vZGVUaW1lb3V0KCk7XG5cdH1cblxuXHRlbnRlcldyaXRpbmdNb2RlKCk6IHZvaWQge1xuXHRcdHRoaXMubW9kZSA9IEdyYW5pdGVNb2RlLldSSVRJTkc7XG5cdFx0dGhpcy5kaXNhcHBlYXIoKTtcblxuXHRcdHRoaXMuc2V0V3JpdGluZ01vZGVUaW1lb3V0KCk7XG5cdH1cblxuXHRsZWF2ZVdyaXRpbmdNb2RlKCkge1xuXHRcdHRoaXMubW9kZSA9IEdyYW5pdGVNb2RlLklETEU7XG5cdFx0dGhpcy5yZXNldCgpO1xuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLndyaXRpbmdNb2RlVGltZW91dCk7XG5cdH1cblxuXHRzZXRXcml0aW5nTW9kZVRpbWVvdXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMud3JpdGluZ01vZGVUaW1lb3V0KSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMud3JpdGluZ01vZGVUaW1lb3V0KTtcblx0XHR9XG5cblx0XHR0aGlzLndyaXRpbmdNb2RlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGUgPT09IEdyYW5pdGVNb2RlLldSSVRJTkcpIHtcblx0XHRcdFx0dGhpcy5hcHBlYXIoKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLnBsdWdpbi5zZXR0aW5ncy53cml0aW5nTW9kZUdyYWNlUGVyaW9kICogMTAwMCk7XG5cdH1cblxuXHRzdGFydE5leHRJZGxlVGltZW91dCgpOiB2b2lkIHtcblx0XHQvLyBpZiB0aGUgc2V0IHRpbWUgaXMgNSBtaW51dGVzLCB0aGlzIHdpbGwgc2V0IHRpbWVvdXQgdG8gYmUgYSByYW5kb20gdGltZSBiZXR3ZWVuIDQtNiBtaW51dGVzXG5cdFx0Ly8gdGhlIHJhbmdlIHdpbGwgYmUgODAlIC0gMTIwJVxuXHRcdGNvbnN0IHJhbmRvbUZhY3RvciA9IDAuOCArIDAuNCAqIE1hdGgucmFuZG9tKCk7XG5cdFx0Y29uc3QgcmFuZG9taXplZFRpbWVvdXQgPSByYW5kb21GYWN0b3IgKiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pZGxlVGFsa0ZyZXF1ZW5jeSAqIDYwMDAwO1xuXG5cdFx0aWYgKHRoaXMuaWRsZVRpbWVvdXQpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pZGxlVGltZW91dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pZGxlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGUgPT09IEdyYW5pdGVNb2RlLldSSVRJTkcpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNheVNvbWV0aGluZyhmYWxzZSk7XG5cdFx0XHR0aGlzLnN0YXJ0TmV4dElkbGVUaW1lb3V0KCk7XG5cdFx0fSwgcmFuZG9taXplZFRpbWVvdXQpO1xuXHR9XG5cblx0YXN5bmMgc2F5U29tZXRoaW5nKHBlcnNpc3RlbnQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gR3Jhbml0ZVN0YXRlLlZJU0lCTEUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBxdW90ZTogc3RyaW5nID0gdGhpcy5xdW90ZXMuZ2V0UXVvdGUoKTtcblxuXHRcdHRoaXMuZ3Jhbml0ZUVsLnNldEF0dHIoJ2FyaWEtbGFiZWwnLCBxdW90ZSk7XG5cdFx0dGhpcy5ncmFuaXRlRWwuc2V0QXR0cignYXJpYS1sYWJlbC1wb3NpdGlvbicsICd0b3AnKTtcblx0XHR0aGlzLmdyYW5pdGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW92ZXInLCB7IGJ1YmJsZXM6IHRydWUsIGNsaWVudFg6IDEwLCBjbGllbnRZOiAxMCB9KSk7XG5cblx0XHRpZiAodGhpcy5tb2RlID09PSBHcmFuaXRlTW9kZS5XUklUSU5HKSB7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbnMucGxheSh0aGlzLmltYWdlRWwsIEFuaW1hdGlvblR5cGUuQU5HUllfTU9USU9OKTtcblxuXHRcdFx0YXdhaXQgc2xlZXAoMTAwMCk7XG5cblx0XHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5ESVNBUFBPSU5UX0lNRyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5MT09LX01PVElPTik7XG5cdFx0fVxuXG5cdFx0aWYgKCFwZXJzaXN0ZW50KSB7XG5cdFx0XHRhd2FpdCBzbGVlcChCVUJCTEVfRFVSQVRJT04pO1xuXG5cdFx0XHR0aGlzLmdyYW5pdGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW91dCcsIHsgYnViYmxlczogdHJ1ZSwgY2xpZW50WDogMTAsIGNsaWVudFk6IDEwIH0pKTtcblx0XHRcdHRoaXMuYW5pbWF0aW9ucy5wbGF5KHRoaXMuaW1hZ2VFbCwgQW5pbWF0aW9uVHlwZS5JRExFX01PVElPTik7XG5cdFx0fVxuXHR9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsbUJBQWlDOzs7QUNBakMsc0JBQStDO0FBaUJ4QyxJQUFNLG1CQUFvQztBQUFBLEVBQ2hELGlCQUFpQjtBQUFBLEVBQ2pCLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUF3QjtBQUN6QjtBQUVPLElBQU0scUJBQU4sY0FBaUMsaUNBQWlCO0FBQUEsRUFH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